double AstAlg_jde(int year, int month, double day) {
  int a;
  double b;
  if (month <= 2) {
    year = year - 1;
    month = month + 12;
  }
  a = (int)(year / 100);
  b = (double)(2 - a + a / 4);
  return ((double)((long)(365.25 * (year + 4716)) +
                   (double)((long)(30.6001 * (month + 1)))) +
          day + b - 1524.5);
}


x86 assembly (clang, -O0):
<AstAlg_jde>:
push   %rbp
mov    %rsp,%rbp
mov    %edi,-0x4(%rbp)
mov    %esi,-0x8(%rbp)
movsd  %xmm0,-0x10(%rbp)
cmpl   $0x2,-0x8(%rbp)
jg     112b <AstAlg_jde+0x2b>
mov    -0x4(%rbp),%eax
sub    $0x1,%eax
mov    %eax,-0x4(%rbp)
mov    -0x8(%rbp),%eax
add    $0xc,%eax
mov    %eax,-0x8(%rbp)
mov    -0x4(%rbp),%eax
mov    $0x64,%ecx
cltd
idiv   %ecx
mov    %eax,-0x14(%rbp)
mov    $0x2,%eax
sub    -0x14(%rbp),%eax
mov    %eax,-0x24(%rbp)
mov    -0x14(%rbp),%eax
mov    $0x4,%ecx
cltd
idiv   %ecx
mov    %eax,%ecx
mov    -0x24(%rbp),%eax
add    %ecx,%eax
cvtsi2sd %eax,%xmm0
movsd  %xmm0,-0x20(%rbp)
mov    -0x4(%rbp),%eax
add    $0x126c,%eax
cvtsi2sd %eax,%xmm1
movsd  0xe9d(%rip),%xmm0
mulsd  %xmm1,%xmm0
cvttsd2si %xmm0,%rax
cvtsi2sd %rax,%xmm0
mov    -0x8(%rbp),%eax
add    $0x1,%eax
cvtsi2sd %eax,%xmm2
movsd  0xe75(%rip),%xmm1
mulsd  %xmm2,%xmm1
cvttsd2si %xmm1,%rax
cvtsi2sd %rax,%xmm1
addsd  %xmm1,%xmm0
addsd  -0x10(%rbp),%xmm0
addsd  -0x20(%rbp),%xmm0
movsd  0xe49(%rip),%xmm1
subsd  %xmm1,%xmm0
pop    %rbp
ret

x86 assembly (clang, -O2):
<AstAlg_jde>:
lea    0xc(%rsi),%eax
xor    %ecx,%ecx
cmp    $0x3,%esi
setl   %cl
cmovge %esi,%eax
sub    %ecx,%edi
movslq %edi,%rcx
imul   $0xffffffffae147ae1,%rcx,%rdx
mov    %rdx,%rsi
shr    $0x3f,%rsi
sar    $0x25,%rdx
add    %esi,%edx
imul   $0x51eb851f,%rcx,%rsi
mov    %rsi,%rdi
shr    $0x3f,%rdi
sar    $0x27,%rsi
add    %edi,%esi
add    %esi,%edx
add    $0x2,%edx
cvtsi2sd %edx,%xmm1
add    $0x126c,%ecx
cvtsi2sd %ecx,%xmm2
mulsd  0xeaa(%rip),%xmm2
cvttsd2si %xmm2,%rcx
xorps  %xmm2,%xmm2
cvtsi2sd %rcx,%xmm2
add    $0x1,%eax
cvtsi2sd %eax,%xmm3
mulsd  0xe96(%rip),%xmm3
cvttsd2si %xmm3,%rax
xorps  %xmm3,%xmm3
cvtsi2sd %rax,%xmm3
addsd  %xmm2,%xmm3
addsd  %xmm3,%xmm0
addsd  %xmm1,%xmm0
addsd  0xe7d(%rip),%xmm0
ret

LLVM IR (-O0):
define double @AstAlg_jde(i32 %0, i32 %1, double %2) {
%4 = alloca i32
%5 = alloca i32
%6 = alloca double
%7 = alloca i32
%8 = alloca double
store i32 %0, i32* %4
store i32 %1, i32* %5
store double %2, double* %6
%9 = load i32, i32* %5
%10 = icmp sle i32 %9, 2
br i1 %10, label %11, label %16
11: ; preds = %3
%12 = load i32, i32* %4
%13 = sub nsw i32 %12, 1
store i32 %13, i32* %4
%14 = load i32, i32* %5
%15 = add nsw i32 %14, 12
store i32 %15, i32* %5
br label %16
16: ; preds = %11, %3
%17 = load i32, i32* %4
%18 = sdiv i32 %17, 100
store i32 %18, i32* %7
%19 = load i32, i32* %7
%20 = sub nsw i32 2, %19
%21 = load i32, i32* %7
%22 = sdiv i32 %21, 4
%23 = add nsw i32 %20, %22
%24 = sitofp i32 %23 to double
store double %24, double* %8
%25 = load i32, i32* %4
%26 = add nsw i32 %25, 4716
%27 = sitofp i32 %26 to double
%28 = fmul double 3.652500e+02, %27
%29 = fptosi double %28 to i64
%30 = sitofp i64 %29 to double
%31 = load i32, i32* %5
%32 = add nsw i32 %31, 1
%33 = sitofp i32 %32 to double
%34 = fmul double 3.060010e+01, %33
%35 = fptosi double %34 to i64
%36 = sitofp i64 %35 to double
%37 = fadd double %30, %36
%38 = load double, double* %6
%39 = fadd double %37, %38
%40 = load double, double* %8
%41 = fadd double %39, %40
%42 = fsub double %41, 1.524500e+03
ret double %42
}

LLVM IR (-O2):
define double @AstAlg_jde(i32 %0, i32 %1, double %2) {
%4 = icmp slt i32 %1, 3
%5 = add nsw i32 %1, 12
%6 = select i1 %4, i32 %5, i32 %1
%7 = sext i1 %4 to i32
%8 = add nsw i32 %7, %0
%9 = sdiv i32 %8, -100
%10 = add nsw i32 %9, 2
%11 = sdiv i32 %8, 400
%12 = add nsw i32 %10, %11
%13 = sitofp i32 %12 to double
%14 = add nsw i32 %8, 4716
%15 = sitofp i32 %14 to double
%16 = fmul double %15, 3.652500e+02
%17 = fptosi double %16 to i64
%18 = sitofp i64 %17 to double
%19 = add nsw i32 %6, 1
%20 = sitofp i32 %19 to double
%21 = fmul double %20, 3.060010e+01
%22 = fptosi double %21 to i64
%23 = sitofp i64 %22 to double
%24 = fadd double %23, %18
%25 = fadd double %24, %2
%26 = fadd double %25, %13
%27 = fadd double %26, -1.524500e+03
ret double %27
}