double ephcom_cal2jd(int idate[6], int calendar_type) {
  double tjd;
  int jd;
  tjd = (idate[3] + (idate[4] + idate[5] / 60.0) / 60.0) / 24.0 - 0.5;
  if (calendar_type == -1 ||
      (calendar_type == 0 &&
       (idate[0] < 1582 ||
        (idate[0] == 1582 &&
         (idate[1] < 10 || (idate[1] == 10 && idate[2] < 15)))))) {
    jd = 367 * idate[0] - (7 * (idate[0] + 5001 + (idate[1] - 9) / 7)) / 4 +
         (275 * idate[1]) / 9 + idate[2] + 1729777;
  } else {
    jd = (1461 * (idate[0] + 4800 + (idate[1] - 14) / 12)) / 4 +
         (367 * (idate[1] - 2 - 12 * ((idate[1] - 14) / 12))) / 12 -
         (3 * ((idate[0] + 4900 + (idate[1] - 14) / 12) / 100)) / 4 + idate[2] -
         32075;
  }
  tjd += (double)jd;
  return (tjd);
}


x86 assembly (clang, -O0):
<ephcom_cal2jd>:
push   %rbp
mov    %rsp,%rbp
mov    %rdi,-0x8(%rbp)
mov    %esi,-0xc(%rbp)
mov    -0x8(%rbp),%rax
cvtsi2sdl 0xc(%rax),%xmm0
mov    -0x8(%rbp),%rax
cvtsi2sdl 0x10(%rax),%xmm1
mov    -0x8(%rbp),%rax
cvtsi2sdl 0x14(%rax),%xmm2
movsd  0xee2(%rip),%xmm3
divsd  %xmm3,%xmm2
addsd  %xmm2,%xmm1
movsd  0xed2(%rip),%xmm2
divsd  %xmm2,%xmm1
addsd  %xmm1,%xmm0
movsd  0xeba(%rip),%xmm1
divsd  %xmm1,%xmm0
movsd  0xea6(%rip),%xmm1
subsd  %xmm1,%xmm0
movsd  %xmm0,-0x18(%rbp)
cmpl   $0xffffffff,-0xc(%rbp)
je     11c1 <ephcom_cal2jd+0xc1>
cmpl   $0x0,-0xc(%rbp)
jne    1238 <ephcom_cal2jd+0x138>
mov    -0x8(%rbp),%rax
cmpl   $0x62e,(%rax)
jl     11c1 <ephcom_cal2jd+0xc1>
mov    -0x8(%rbp),%rax
cmpl   $0x62e,(%rax)
jne    1238 <ephcom_cal2jd+0x138>
mov    -0x8(%rbp),%rax
cmpl   $0xa,0x4(%rax)
jl     11c1 <ephcom_cal2jd+0xc1>
mov    -0x8(%rbp),%rax
cmpl   $0xa,0x4(%rax)
jne    1238 <ephcom_cal2jd+0x138>
mov    -0x8(%rbp),%rax
cmpl   $0xf,0x8(%rax)
jge    1238 <ephcom_cal2jd+0x138>
mov    -0x8(%rbp),%rax
imul   $0x16f,(%rax),%eax
mov    %eax,-0x24(%rbp)
mov    -0x8(%rbp),%rax
mov    (%rax),%eax
add    $0x1389,%eax
mov    %eax,-0x28(%rbp)
mov    -0x8(%rbp),%rax
mov    0x4(%rax),%eax
sub    $0x9,%eax
mov    $0x7,%ecx
cltd
idiv   %ecx
mov    %eax,%ecx
mov    -0x28(%rbp),%eax
add    %ecx,%eax
imul   $0x7,%eax,%eax
mov    $0x4,%ecx
cltd
idiv   %ecx
mov    %eax,%ecx
mov    -0x24(%rbp),%eax
sub    %ecx,%eax
mov    %eax,-0x20(%rbp)
mov    -0x8(%rbp),%rax
imul   $0x113,0x4(%rax),%eax
mov    $0x9,%ecx
cltd
idiv   %ecx
mov    %eax,%ecx
mov    -0x20(%rbp),%eax
add    %ecx,%eax
mov    -0x8(%rbp),%rcx
add    0x8(%rcx),%eax
add    $0x1a64f1,%eax
mov    %eax,-0x1c(%rbp)
jmp    1301 <ephcom_cal2jd+0x201>
mov    -0x8(%rbp),%rax
mov    (%rax),%eax
add    $0x12c0,%eax
mov    %eax,-0x3c(%rbp)
mov    -0x8(%rbp),%rax
mov    0x4(%rax),%eax
sub    $0xe,%eax
mov    $0xc,%ecx
cltd
idiv   %ecx
mov    %eax,%ecx
mov    -0x3c(%rbp),%eax
add    %ecx,%eax
imul   $0x5b5,%eax,%eax
mov    $0x4,%ecx
cltd
idiv   %ecx
mov    %eax,-0x34(%rbp)
mov    -0x8(%rbp),%rax
mov    0x4(%rax),%eax
sub    $0x2,%eax
mov    %eax,-0x38(%rbp)
mov    -0x8(%rbp),%rax
mov    0x4(%rax),%eax
sub    $0xe,%eax
mov    $0xc,%ecx
cltd
idiv   %ecx
mov    %eax,%ecx
mov    -0x38(%rbp),%eax
imul   $0xc,%ecx,%ecx
sub    %ecx,%eax
imul   $0x16f,%eax,%eax
mov    $0xc,%ecx
cltd
idiv   %ecx
mov    %eax,%ecx
mov    -0x34(%rbp),%eax
add    %ecx,%eax
mov    %eax,-0x2c(%rbp)
mov    -0x8(%rbp),%rax
mov    (%rax),%eax
add    $0x1324,%eax
mov    %eax,-0x30(%rbp)
mov    -0x8(%rbp),%rax
mov    0x4(%rax),%eax
sub    $0xe,%eax
mov    $0xc,%ecx
cltd
idiv   %ecx
mov    %eax,%ecx
mov    -0x30(%rbp),%eax
add    %ecx,%eax
mov    $0x64,%ecx
cltd
idiv   %ecx
imul   $0x3,%eax,%eax
mov    $0x4,%ecx
cltd
idiv   %ecx
mov    %eax,%ecx
mov    -0x2c(%rbp),%eax
sub    %ecx,%eax
mov    -0x8(%rbp),%rcx
add    0x8(%rcx),%eax
sub    $0x7d4b,%eax
mov    %eax,-0x1c(%rbp)
cvtsi2sdl -0x1c(%rbp),%xmm0
addsd  -0x18(%rbp),%xmm0
movsd  %xmm0,-0x18(%rbp)
movsd  -0x18(%rbp),%xmm0
pop    %rbp
ret

x86 assembly (clang, -O2):
<ephcom_cal2jd>:
mov    0xc(%rdi),%r8d
mov    0x10(%rdi),%r9d
mov    0x14(%rdi),%r10d
cmp    $0xffffffff,%esi
je     1151 <ephcom_cal2jd+0x51>
test   %esi,%esi
jne    11cc <ephcom_cal2jd+0xcc>
mov    (%rdi),%r11d
cmp    $0x62e,%r11d
jl     1154 <ephcom_cal2jd+0x54>
jne    11cf <ephcom_cal2jd+0xcf>
mov    $0x62e,%r11d
cmpl   $0xa,0x4(%rdi)
jl     1154 <ephcom_cal2jd+0x54>
mov    $0x62e,%r11d
jne    11cf <ephcom_cal2jd+0xcf>
mov    $0x62e,%r11d
cmpl   $0xe,0x8(%rdi)
jle    1154 <ephcom_cal2jd+0x54>
jmp    11cf <ephcom_cal2jd+0xcf>
mov    (%rdi),%r11d
imul   $0x16f,%r11d,%eax
mov    0x4(%rdi),%ecx
lea    -0x9(%rcx),%edx
movslq %edx,%rdx
imul   $0xffffffff92492493,%rdx,%rdx
shr    $0x20,%rdx
add    %ecx,%edx
add    $0xfffffff7,%edx
mov    %edx,%esi
shr    $0x1f,%esi
sar    $0x2,%edx
add    %esi,%edx
add    %r11d,%edx
lea    0x0(,%rdx,8),%esi
sub    %edx,%esi
lea    0x88bf(%rsi),%edx
add    $0x88c2,%esi
test   %edx,%edx
cmovns %edx,%esi
sar    $0x2,%esi
imul   $0x113,%ecx,%ecx
movslq %ecx,%rcx
imul   $0x38e38e39,%rcx,%rcx
mov    %rcx,%rdx
shr    $0x3f,%rdx
sar    $0x21,%rcx
add    0x8(%rdi),%eax
add    %edx,%ecx
add    %ecx,%eax
sub    %esi,%eax
add    $0x1a64f1,%eax
jmp    1274 <ephcom_cal2jd+0x174>
mov    (%rdi),%r11d
mov    0x4(%rdi),%edx
lea    -0xe(%rdx),%eax
cltq
imul   $0x2aaaaaab,%rax,%rcx
mov    %rcx,%rax
shr    $0x3f,%rax
sar    $0x21,%rcx
add    %eax,%ecx
lea    (%rcx,%r11,1),%eax
imul   $0x5b5,%eax,%eax
lea    0x6b01c0(%rax),%esi
add    $0x6b01c3,%eax
test   %esi,%esi
cmovns %esi,%eax
sar    $0x2,%eax
lea    0x0(,%rcx,4),%esi
lea    (%rsi,%rsi,2),%esi
sub    %esi,%edx
imul   $0x16f,%edx,%edx
add    $0xfffffd22,%edx
movslq %edx,%rdx
imul   $0x2aaaaaab,%rdx,%rdx
mov    %rdx,%rsi
shr    $0x3f,%rsi
sar    $0x21,%rdx
add    %esi,%edx
add    %r11d,%ecx
add    $0x1324,%ecx
movslq %ecx,%rcx
imul   $0x51eb851f,%rcx,%rcx
mov    %rcx,%rsi
shr    $0x3f,%rsi
sar    $0x25,%rcx
add    %esi,%ecx
lea    (%rcx,%rcx,2),%esi
lea    (%rcx,%rcx,2),%ecx
add    $0x3,%ecx
test   %esi,%esi
cmovns %esi,%ecx
sar    $0x2,%ecx
add    0x8(%rdi),%eax
sub    %ecx,%eax
add    %edx,%eax
add    $0xffff82b5,%eax
cvtsi2sd %r10d,%xmm0
movsd  0xd7f(%rip),%xmm1
divsd  %xmm1,%xmm0
cvtsi2sd %r9d,%xmm2
addsd  %xmm0,%xmm2
divsd  %xmm1,%xmm2
xorps  %xmm1,%xmm1
cvtsi2sd %r8d,%xmm1
addsd  %xmm2,%xmm1
divsd  0xd62(%rip),%xmm1
addsd  0xd62(%rip),%xmm1
xorps  %xmm0,%xmm0
cvtsi2sd %eax,%xmm0
addsd  %xmm1,%xmm0
ret

LLVM IR (-O0):
define double @ephcom_cal2jd(i32* %0, i32 %1) {
%3 = alloca i32*
%4 = alloca i32
%5 = alloca double
%6 = alloca i32
store i32* %0, i32** %3
store i32 %1, i32* %4
%7 = load i32*, i32** %3
%8 = getelementptr inbounds i32, i32* %7, i64 3
%9 = load i32, i32* %8
%10 = sitofp i32 %9 to double
%11 = load i32*, i32** %3
%12 = getelementptr inbounds i32, i32* %11, i64 4
%13 = load i32, i32* %12
%14 = sitofp i32 %13 to double
%15 = load i32*, i32** %3
%16 = getelementptr inbounds i32, i32* %15, i64 5
%17 = load i32, i32* %16
%18 = sitofp i32 %17 to double
%19 = fdiv double %18, 6.000000e+01
%20 = fadd double %14, %19
%21 = fdiv double %20, 6.000000e+01
%22 = fadd double %10, %21
%23 = fdiv double %22, 2.400000e+01
%24 = fsub double %23, 5.000000e-01
store double %24, double* %5
%25 = load i32, i32* %4
%26 = icmp eq i32 %25, -1
br i1 %26, label %55, label %27
27: ; preds = %2
%28 = load i32, i32* %4
%29 = icmp eq i32 %28, 0
br i1 %29, label %30, label %84
30: ; preds = %27
%31 = load i32*, i32** %3
%32 = getelementptr inbounds i32, i32* %31, i64 0
%33 = load i32, i32* %32
%34 = icmp slt i32 %33, 1582
br i1 %34, label %55, label %35
35: ; preds = %30
%36 = load i32*, i32** %3
%37 = getelementptr inbounds i32, i32* %36, i64 0
%38 = load i32, i32* %37
%39 = icmp eq i32 %38, 1582
br i1 %39, label %40, label %84
40: ; preds = %35
%41 = load i32*, i32** %3
%42 = getelementptr inbounds i32, i32* %41, i64 1
%43 = load i32, i32* %42
%44 = icmp slt i32 %43, 10
br i1 %44, label %55, label %45
45: ; preds = %40
%46 = load i32*, i32** %3
%47 = getelementptr inbounds i32, i32* %46, i64 1
%48 = load i32, i32* %47
%49 = icmp eq i32 %48, 10
br i1 %49, label %50, label %84
50: ; preds = %45
%51 = load i32*, i32** %3
%52 = getelementptr inbounds i32, i32* %51, i64 2
%53 = load i32, i32* %52
%54 = icmp slt i32 %53, 15
br i1 %54, label %55, label %84
55: ; preds = %50, %40, %30, %2
%56 = load i32*, i32** %3
%57 = getelementptr inbounds i32, i32* %56, i64 0
%58 = load i32, i32* %57
%59 = mul nsw i32 367, %58
%60 = load i32*, i32** %3
%61 = getelementptr inbounds i32, i32* %60, i64 0
%62 = load i32, i32* %61
%63 = add nsw i32 %62, 5001
%64 = load i32*, i32** %3
%65 = getelementptr inbounds i32, i32* %64, i64 1
%66 = load i32, i32* %65
%67 = sub nsw i32 %66, 9
%68 = sdiv i32 %67, 7
%69 = add nsw i32 %63, %68
%70 = mul nsw i32 7, %69
%71 = sdiv i32 %70, 4
%72 = sub nsw i32 %59, %71
%73 = load i32*, i32** %3
%74 = getelementptr inbounds i32, i32* %73, i64 1
%75 = load i32, i32* %74
%76 = mul nsw i32 275, %75
%77 = sdiv i32 %76, 9
%78 = add nsw i32 %72, %77
%79 = load i32*, i32** %3
%80 = getelementptr inbounds i32, i32* %79, i64 2
%81 = load i32, i32* %80
%82 = add nsw i32 %78, %81
%83 = add nsw i32 %82, 1729777
store i32 %83, i32* %6
br label %130
84: ; preds = %50, %45, %35, %27
%85 = load i32*, i32** %3
%86 = getelementptr inbounds i32, i32* %85, i64 0
%87 = load i32, i32* %86
%88 = add nsw i32 %87, 4800
%89 = load i32*, i32** %3
%90 = getelementptr inbounds i32, i32* %89, i64 1
%91 = load i32, i32* %90
%92 = sub nsw i32 %91, 14
%93 = sdiv i32 %92, 12
%94 = add nsw i32 %88, %93
%95 = mul nsw i32 1461, %94
%96 = sdiv i32 %95, 4
%97 = load i32*, i32** %3
%98 = getelementptr inbounds i32, i32* %97, i64 1
%99 = load i32, i32* %98
%100 = sub nsw i32 %99, 2
%101 = load i32*, i32** %3
%102 = getelementptr inbounds i32, i32* %101, i64 1
%103 = load i32, i32* %102
%104 = sub nsw i32 %103, 14
%105 = sdiv i32 %104, 12
%106 = mul nsw i32 12, %105
%107 = sub nsw i32 %100, %106
%108 = mul nsw i32 367, %107
%109 = sdiv i32 %108, 12
%110 = add nsw i32 %96, %109
%111 = load i32*, i32** %3
%112 = getelementptr inbounds i32, i32* %111, i64 0
%113 = load i32, i32* %112
%114 = add nsw i32 %113, 4900
%115 = load i32*, i32** %3
%116 = getelementptr inbounds i32, i32* %115, i64 1
%117 = load i32, i32* %116
%118 = sub nsw i32 %117, 14
%119 = sdiv i32 %118, 12
%120 = add nsw i32 %114, %119
%121 = sdiv i32 %120, 100
%122 = mul nsw i32 3, %121
%123 = sdiv i32 %122, 4
%124 = sub nsw i32 %110, %123
%125 = load i32*, i32** %3
%126 = getelementptr inbounds i32, i32* %125, i64 2
%127 = load i32, i32* %126
%128 = add nsw i32 %124, %127
%129 = sub nsw i32 %128, 32075
store i32 %129, i32* %6
br label %130
130: ; preds = %84, %55
%131 = load i32, i32* %6
%132 = sitofp i32 %131 to double
%133 = load double, double* %5
%134 = fadd double %133, %132
store double %134, double* %5
%135 = load double, double* %5
ret double %135
}

LLVM IR (-O2):
define double @ephcom_cal2jd(i32* nocapture %0, i32 %1) {
%3 = getelementptr inbounds i32, i32* %0, i64 3
%4 = load i32, i32* %3
%5 = getelementptr inbounds i32, i32* %0, i64 4
%6 = load i32, i32* %5
%7 = getelementptr inbounds i32, i32* %0, i64 5
%8 = load i32, i32* %7
switch i32 %1, label %9 [
i32 -1, label %11
i32 0, label %13
]
9: ; preds = %2
%10 = load i32, i32* %0
br label %47
11: ; preds = %2
%12 = load i32, i32* %0
br label %28
13: ; preds = %2
%14 = load i32, i32* %0
%15 = icmp slt i32 %14, 1582
br i1 %15, label %28, label %16
16: ; preds = %13
%17 = icmp eq i32 %14, 1582
br i1 %17, label %18, label %47
18: ; preds = %16
%19 = getelementptr inbounds i32, i32* %0, i64 1
%20 = load i32, i32* %19
%21 = icmp slt i32 %20, 10
br i1 %21, label %28, label %22
22: ; preds = %18
%23 = icmp eq i32 %20, 10
br i1 %23, label %24, label %47
24: ; preds = %22
%25 = getelementptr inbounds i32, i32* %0, i64 2
%26 = load i32, i32* %25
%27 = icmp slt i32 %26, 15
br i1 %27, label %28, label %47
28: ; preds = %11, %24, %18, %13
%29 = phi i32 [ %12, %11 ], [ 1582, %24 ], [ 1582, %18 ], [ %14, %13 ]
%30 = mul nsw i32 %29, 367
%31 = add nsw i32 %29, 5001
%32 = getelementptr inbounds i32, i32* %0, i64 1
%33 = load i32, i32* %32
%34 = add nsw i32 %33, -9
%35 = sdiv i32 %34, 7
%36 = add nsw i32 %31, %35
%37 = mul nsw i32 %36, 7
%38 = sdiv i32 %37, -4
%39 = mul nsw i32 %33, 275
%40 = sdiv i32 %39, 9
%41 = getelementptr inbounds i32, i32* %0, i64 2
%42 = load i32, i32* %41
%43 = add i32 %30, 1729777
%44 = add i32 %43, %42
%45 = add i32 %44, %40
%46 = add i32 %45, %38
br label %72
47: ; preds = %9, %24, %22, %16
%48 = phi i32 [ %10, %9 ], [ 1582, %24 ], [ 1582, %22 ], [ %14, %16 ]
%49 = getelementptr inbounds i32, i32* %0, i64 1
%50 = load i32, i32* %49
%51 = add nsw i32 %50, -14
%52 = sdiv i32 %51, 12
%53 = add i32 %52, %48
%54 = mul i32 %53, 1461
%55 = add i32 %54, 7012800
%56 = sdiv i32 %55, 4
%57 = add nsw i32 %50, -2
%58 = mul nsw i32 %52, -12
%59 = add i32 %57, %58
%60 = mul nsw i32 %59, 367
%61 = sdiv i32 %60, 12
%62 = add i32 %53, 4900
%63 = sdiv i32 %62, 100
%64 = mul nsw i32 %63, 3
%65 = sdiv i32 %64, -4
%66 = getelementptr inbounds i32, i32* %0, i64 2
%67 = load i32, i32* %66
%68 = add i32 %67, -32075
%69 = add i32 %68, %56
%70 = add i32 %69, %65
%71 = add i32 %70, %61
br label %72
72: ; preds = %47, %28
%73 = phi i32 [ %46, %28 ], [ %71, %47 ]
%74 = sitofp i32 %8 to double
%75 = fdiv double %74, 6.000000e+01
%76 = sitofp i32 %6 to double
%77 = fadd double %75, %76
%78 = fdiv double %77, 6.000000e+01
%79 = sitofp i32 %4 to double
%80 = fadd double %78, %79
%81 = fdiv double %80, 2.400000e+01
%82 = fadd double %81, -5.000000e-01
%83 = sitofp i32 %73 to double
%84 = fadd double %82, %83
ret double %84
}