#define NULL ((void *)0)
typedef unsigned long size_t; // Customize by platform.
typedef long intptr_t;
typedef unsigned long uintptr_t;
typedef long scalar_t__; // Either arithmetic or pointer type.
/* By default, we understand bool (as a convenience). */
typedef int bool;
#define false 0
#define true 1

/* Forward declarations */

/* Type definitions */

/* Variables and functions */
int /*<<< orphan*/ send_double(char *, double);
void send_coords(double raj, double dej, double az, double za) {
  if ((raj != 0.0) || (raj != -1.0))
    send_double("src_raj", raj);
  if ((dej != 0.0) || (dej != -1.0))
    send_double("src_dej", dej);
  if ((az != 0.0) || (az != -1.0))
    send_double("az_start", az);
  if ((za != 0.0) || (za != -1.0))
    send_double("za_start", za);
}


x86 assembly (clang, -O0):
<send_coords>:
push   %rbp
mov    %rsp,%rbp
sub    $0x20,%rsp
movsd  %xmm0,-0x8(%rbp)
movsd  %xmm1,-0x10(%rbp)
movsd  %xmm2,-0x18(%rbp)
movsd  %xmm3,-0x20(%rbp)
movsd  -0x8(%rbp),%xmm0
xorps  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
jne    1166 <send_coords+0x56>
jp     1166 <send_coords+0x56>
movsd  -0x8(%rbp),%xmm0
movsd  0xeaf(%rip),%xmm1
ucomisd %xmm1,%xmm0
jne    1166 <send_coords+0x56>
jp     1166 <send_coords+0x56>
jmp    1177 <send_coords+0x67>
movsd  -0x8(%rbp),%xmm0
lea    0xe96(%rip),%rdi
call   1030 <send_double@plt>
movsd  -0x10(%rbp),%xmm0
xorps  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
jne    11b1 <send_coords+0xa1>
jp     11b1 <send_coords+0xa1>
movsd  -0x10(%rbp),%xmm0
movsd  0xe64(%rip),%xmm1
ucomisd %xmm1,%xmm0
jne    11b1 <send_coords+0xa1>
jp     11b1 <send_coords+0xa1>
jmp    11c2 <send_coords+0xb2>
movsd  -0x10(%rbp),%xmm0
lea    0xe53(%rip),%rdi
call   1030 <send_double@plt>
movsd  -0x18(%rbp),%xmm0
xorps  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
jne    11fc <send_coords+0xec>
jp     11fc <send_coords+0xec>
movsd  -0x18(%rbp),%xmm0
movsd  0xe19(%rip),%xmm1
ucomisd %xmm1,%xmm0
jne    11fc <send_coords+0xec>
jp     11fc <send_coords+0xec>
jmp    120d <send_coords+0xfd>
movsd  -0x18(%rbp),%xmm0
lea    0xe10(%rip),%rdi
call   1030 <send_double@plt>
movsd  -0x20(%rbp),%xmm0
xorps  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
jne    1247 <send_coords+0x137>
jp     1247 <send_coords+0x137>
movsd  -0x20(%rbp),%xmm0
movsd  0xdce(%rip),%xmm1
ucomisd %xmm1,%xmm0
jne    1247 <send_coords+0x137>
jp     1247 <send_coords+0x137>
jmp    1258 <send_coords+0x148>
movsd  -0x20(%rbp),%xmm0
lea    0xdce(%rip),%rdi
call   1030 <send_double@plt>
add    $0x20,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<send_coords>:
sub    $0x18,%rsp
movsd  %xmm3,0x10(%rsp)
xorpd  %xmm3,%xmm3
ucomisd %xmm3,%xmm0
movsd  %xmm2,(%rsp)
jne    1137 <send_coords+0x27>
jp     1137 <send_coords+0x27>
ucomisd 0xecd(%rip),%xmm0
jne    1137 <send_coords+0x27>
jnp    1154 <send_coords+0x44>
lea    0xeca(%rip),%rdi
movsd  %xmm1,0x8(%rsp)
call   1030 <send_double@plt>
movsd  0x8(%rsp),%xmm1
movsd  (%rsp),%xmm2
xorpd  %xmm0,%xmm0
ucomisd %xmm0,%xmm1
jne    116c <send_coords+0x5c>
jp     116c <send_coords+0x5c>
ucomisd 0xe98(%rip),%xmm1
jne    116c <send_coords+0x5c>
jnp    1181 <send_coords+0x71>
lea    0xe9d(%rip),%rdi
movapd %xmm1,%xmm0
call   1030 <send_double@plt>
movsd  (%rsp),%xmm2
xorpd  %xmm0,%xmm0
ucomisd %xmm0,%xmm2
jne    1199 <send_coords+0x89>
jp     1199 <send_coords+0x89>
ucomisd 0xe6b(%rip),%xmm2
jne    1199 <send_coords+0x89>
jnp    11a9 <send_coords+0x99>
lea    0xe78(%rip),%rdi
movapd %xmm2,%xmm0
call   1030 <send_double@plt>
xorpd  %xmm0,%xmm0
movsd  0x10(%rsp),%xmm1
ucomisd %xmm0,%xmm1
movapd %xmm1,%xmm0
jne    11d0 <send_coords+0xc0>
jp     11d0 <send_coords+0xc0>
ucomisd 0xe39(%rip),%xmm0
jne    11d0 <send_coords+0xc0>
jp     11d0 <send_coords+0xc0>
add    $0x18,%rsp
ret
lea    0xe4a(%rip),%rdi
add    $0x18,%rsp
jmp    1030 <send_double@plt>

LLVM IR (-O0):
@.str = [8 x i8] c"src_raj\00"
@.str.1 = [8 x i8] c"src_dej\00"
@.str.2 = [9 x i8] c"az_start\00"
@.str.3 = [9 x i8] c"za_start\00"
define void @send_coords(double %0, double %1, double %2, double %3) {
%5 = alloca double
%6 = alloca double
%7 = alloca double
%8 = alloca double
store double %0, double* %5
store double %1, double* %6
store double %2, double* %7
store double %3, double* %8
%9 = load double, double* %5
%10 = fcmp une double %9, 0.000000e+00
br i1 %10, label %14, label %11
11: ; preds = %4
%12 = load double, double* %5
%13 = fcmp une double %12, -1.000000e+00
br i1 %13, label %14, label %17
14: ; preds = %11, %4
%15 = load double, double* %5
%16 = call i32 @send_double(i8* getelementptr inbounds ([8 x i8], [8 x i8]* @.str, i64 0, i64 0), double %15)
br label %17
17: ; preds = %14, %11
%18 = load double, double* %6
%19 = fcmp une double %18, 0.000000e+00
br i1 %19, label %23, label %20
20: ; preds = %17
%21 = load double, double* %6
%22 = fcmp une double %21, -1.000000e+00
br i1 %22, label %23, label %26
23: ; preds = %20, %17
%24 = load double, double* %6
%25 = call i32 @send_double(i8* getelementptr inbounds ([8 x i8], [8 x i8]* @.str.1, i64 0, i64 0), double %24)
br label %26
26: ; preds = %23, %20
%27 = load double, double* %7
%28 = fcmp une double %27, 0.000000e+00
br i1 %28, label %32, label %29
29: ; preds = %26
%30 = load double, double* %7
%31 = fcmp une double %30, -1.000000e+00
br i1 %31, label %32, label %35
32: ; preds = %29, %26
%33 = load double, double* %7
%34 = call i32 @send_double(i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str.2, i64 0, i64 0), double %33)
br label %35
35: ; preds = %32, %29
%36 = load double, double* %8
%37 = fcmp une double %36, 0.000000e+00
br i1 %37, label %41, label %38
38: ; preds = %35
%39 = load double, double* %8
%40 = fcmp une double %39, -1.000000e+00
br i1 %40, label %41, label %44
41: ; preds = %38, %35
%42 = load double, double* %8
%43 = call i32 @send_double(i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str.3, i64 0, i64 0), double %42)
br label %44
44: ; preds = %41, %38
ret void
}

LLVM IR (-O2):
@.str = [8 x i8] c"src_raj\00"
@.str.1 = [8 x i8] c"src_dej\00"
@.str.2 = [9 x i8] c"az_start\00"
@.str.3 = [9 x i8] c"za_start\00"
define void @send_coords(double %0, double %1, double %2, double %3) {
%5 = fcmp une double %0, 0.000000e+00
%6 = fcmp une double %0, -1.000000e+00
%7 = or i1 %5, %6
br i1 %7, label %8, label %10
8: ; preds = %4
%9 = tail call i32 @send_double(i8* getelementptr inbounds ([8 x i8], [8 x i8]* @.str, i64 0, i64 0), double %0)
br label %10
10: ; preds = %4, %8
%11 = fcmp une double %1, 0.000000e+00
%12 = fcmp une double %1, -1.000000e+00
%13 = or i1 %11, %12
br i1 %13, label %14, label %16
14: ; preds = %10
%15 = tail call i32 @send_double(i8* getelementptr inbounds ([8 x i8], [8 x i8]* @.str.1, i64 0, i64 0), double %1)
br label %16
16: ; preds = %10, %14
%17 = fcmp une double %2, 0.000000e+00
%18 = fcmp une double %2, -1.000000e+00
%19 = or i1 %17, %18
br i1 %19, label %20, label %22
20: ; preds = %16
%21 = tail call i32 @send_double(i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str.2, i64 0, i64 0), double %2)
br label %22
22: ; preds = %16, %20
%23 = fcmp une double %3, 0.000000e+00
%24 = fcmp une double %3, -1.000000e+00
%25 = or i1 %23, %24
br i1 %25, label %26, label %28
26: ; preds = %22
%27 = tail call i32 @send_double(i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str.3, i64 0, i64 0), double %3)
br label %28
28: ; preds = %22, %26
ret void
}