void caldat(long julian, int *mm, int *id, int *iyyy) {
  long ja, jalpha, jb, jc, jd, je;
  if (julian >= 2299161) {
    jalpha = (long)(((double)(julian - 1867216) - 0.25) / 36524.25);
    ja = julian + 1 + jalpha - (long)(0.25 * jalpha);
  } else if (julian < 0) {
    ja = julian + 36525 * (1 - julian / 36525);
  } else
    ja = julian;
  jb = ja + 1524;
  jc = (long)(6680.0 + ((double)(jb - 2439870) - 122.1) / 365.25);
  jd = (long)(365 * jc + (0.25 * jc));
  je = (long)((jb - jd) / 30.6001);
  *id = jb - jd - (long)(30.6001 * je);
  *mm = je - 1;
  if (*mm > 12)
    *mm -= 12;
  *iyyy = jc - 4715;
  if (*mm > 2)
    --(*iyyy);
  if (*iyyy <= 0)
    --(*iyyy);
  if (julian < 0)
    *iyyy -= 100 * (1 - julian / 36525);
}


x86 assembly (clang, -O0):
<caldat>:
push   %rbp
mov    %rsp,%rbp
mov    %rdi,-0x8(%rbp)
mov    %rsi,-0x10(%rbp)
mov    %rdx,-0x18(%rbp)
mov    %rcx,-0x20(%rbp)
cmpq   $0x231519,-0x8(%rbp)
jl     1181 <caldat+0x81>
mov    -0x8(%rbp),%rax
sub    $0x1c7dd0,%rax
cvtsi2sd %rax,%xmm0
movsd  0xec7(%rip),%xmm1
subsd  %xmm1,%xmm0
movsd  0xec3(%rip),%xmm1
divsd  %xmm1,%xmm0
cvttsd2si %xmm0,%rax
mov    %rax,-0x30(%rbp)
mov    -0x8(%rbp),%rax
add    $0x1,%rax
add    -0x30(%rbp),%rax
cvtsi2sdq -0x30(%rbp),%xmm1
movsd  0xe94(%rip),%xmm0
mulsd  %xmm1,%xmm0
cvttsd2si %xmm0,%rcx
sub    %rcx,%rax
mov    %rax,-0x28(%rbp)
jmp    11d1 <caldat+0xd1>
cmpq   $0x0,-0x8(%rbp)
jge    11c4 <caldat+0xc4>
mov    -0x8(%rbp),%rax
mov    %rax,-0x58(%rbp)
mov    -0x8(%rbp),%rax
mov    $0x8ead,%ecx
cqto
idiv   %rcx
mov    %rax,%rdx
mov    -0x58(%rbp),%rax
mov    $0x1,%ecx
sub    %rdx,%rcx
imul   $0x8ead,%rcx,%rcx
add    %rcx,%rax
mov    %rax,-0x28(%rbp)
jmp    11cc <caldat+0xcc>
mov    -0x8(%rbp),%rax
mov    %rax,-0x28(%rbp)
jmp    11d1 <caldat+0xd1>
mov    -0x28(%rbp),%rax
add    $0x5f4,%rax
mov    %rax,-0x38(%rbp)
mov    -0x38(%rbp),%rax
sub    $0x253abe,%rax
cvtsi2sd %rax,%xmm1
movsd  0xe32(%rip),%xmm0
subsd  %xmm0,%xmm1
movsd  0xe1e(%rip),%xmm0
divsd  %xmm0,%xmm1
movsd  0xe0a(%rip),%xmm0
addsd  %xmm1,%xmm0
cvttsd2si %xmm0,%rax
mov    %rax,-0x40(%rbp)
imul   $0x16d,-0x40(%rbp),%rax
cvtsi2sd %rax,%xmm1
cvtsi2sdq -0x40(%rbp),%xmm0
movsd  0xdca(%rip),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
cvttsd2si %xmm0,%rax
mov    %rax,-0x48(%rbp)
mov    -0x38(%rbp),%rax
sub    -0x48(%rbp),%rax
cvtsi2sd %rax,%xmm0
movsd  0xdb4(%rip),%xmm1
divsd  %xmm1,%xmm0
cvttsd2si %xmm0,%rax
mov    %rax,-0x50(%rbp)
mov    -0x38(%rbp),%rax
sub    -0x48(%rbp),%rax
cvtsi2sdq -0x50(%rbp),%xmm1
movsd  0xd91(%rip),%xmm0
mulsd  %xmm1,%xmm0
cvttsd2si %xmm0,%rcx
sub    %rcx,%rax
mov    %eax,%ecx
mov    -0x18(%rbp),%rax
mov    %ecx,(%rax)
mov    -0x50(%rbp),%rax
sub    $0x1,%rax
mov    %eax,%ecx
mov    -0x10(%rbp),%rax
mov    %ecx,(%rax)
mov    -0x10(%rbp),%rax
cmpl   $0xc,(%rax)
jle    12bb <caldat+0x1bb>
mov    -0x10(%rbp),%rax
mov    (%rax),%ecx
sub    $0xc,%ecx
mov    %ecx,(%rax)
mov    -0x40(%rbp),%rax
sub    $0x126b,%rax
mov    %eax,%ecx
mov    -0x20(%rbp),%rax
mov    %ecx,(%rax)
mov    -0x10(%rbp),%rax
cmpl   $0x2,(%rax)
jle    12e5 <caldat+0x1e5>
mov    -0x20(%rbp),%rax
mov    (%rax),%ecx
add    $0xffffffff,%ecx
mov    %ecx,(%rax)
mov    -0x20(%rbp),%rax
cmpl   $0x0,(%rax)
jg     12fd <caldat+0x1fd>
mov    -0x20(%rbp),%rax
mov    (%rax),%ecx
add    $0xffffffff,%ecx
mov    %ecx,(%rax)
cmpq   $0x0,-0x8(%rbp)
jge    1331 <caldat+0x231>
mov    -0x8(%rbp),%rax
mov    $0x8ead,%ecx
cqto
idiv   %rcx
mov    %rax,%rcx
mov    $0x1,%eax
sub    %rcx,%rax
imul   $0x64,%rax,%rdx
mov    -0x20(%rbp),%rax
movslq (%rax),%rcx
sub    %rdx,%rcx
mov    %ecx,(%rax)
pop    %rbp
ret

x86 assembly (clang, -O2):
<caldat>:
mov    %rdx,%r8
cmp    $0x231519,%rdi
jl     114f <caldat+0x4f>
lea    -0x1c7dd0(%rdi),%rax
cvtsi2sd %rax,%xmm0
addsd  0xee0(%rip),%xmm0
divsd  0xee0(%rip),%xmm0
cvttsd2si %xmm0,%rax
lea    (%rdi,%rax,1),%r9
xorps  %xmm0,%xmm0
cvtsi2sd %rax,%xmm0
mulsd  0xecf(%rip),%xmm0
cvttsd2si %xmm0,%rax
sub    %rax,%r9
add    $0x1,%r9
jmp    1180 <caldat+0x80>
mov    %rdi,%r9
test   %rdi,%rdi
jns    1180 <caldat+0x80>
mov    %rdi,%rax
neg    %rax
movabs $0xe5aae5e0b9ee9a9b,%rdx
e5 aa e5
mul    %rdx
shr    $0xf,%rdx
imul   $0x8ead,%rdx,%rax
lea    (%rax,%rdi,1),%r9
add    $0x8ead,%r9
lea    -0x2534ca(%r9),%rax
xorps  %xmm0,%xmm0
cvtsi2sd %rax,%xmm0
addsd  0xe81(%rip),%xmm0
divsd  0xe81(%rip),%xmm0
addsd  0xe81(%rip),%xmm0
cvttsd2si %xmm0,%r10
imul   $0x16d,%r10,%rdx
xorps  %xmm0,%xmm0
cvtsi2sd %rdx,%xmm0
cvtsi2sd %r10,%xmm1
mulsd  0xe48(%rip),%xmm1
addsd  %xmm0,%xmm1
cvttsd2si %xmm1,%rdx
neg    %rdx
add    %rdx,%r9
add    $0x5f4,%r9
xorps  %xmm0,%xmm0
cvtsi2sd %r9,%xmm0
movsd  0xe42(%rip),%xmm1
divsd  %xmm1,%xmm0
cvttsd2si %xmm0,%rdx
xorps  %xmm0,%xmm0
cvtsi2sd %rdx,%xmm0
mulsd  %xmm1,%xmm0
cvttsd2si %xmm0,%rax
sub    %eax,%r9d
mov    %r9d,(%r8)
lea    -0x1(%rdx),%eax
add    $0xfffffff3,%edx
cmp    $0xd,%eax
cmovl  %eax,%edx
mov    %edx,(%rsi)
lea    -0x126b(%r10),%r8d
mov    %r8d,(%rcx)
mov    (%rsi),%eax
add    $0xffffed94,%r10d
cmp    $0x3,%eax
cmovl  %r8d,%r10d
jge    1243 <caldat+0x143>
test   %r10d,%r10d
jle    1243 <caldat+0x143>
test   %rdi,%rdi
js     1259 <caldat+0x159>
ret
xor    %eax,%eax
test   %r10d,%r10d
setle  %al
sub    %eax,%r10d
mov    %r10d,(%rcx)
mov    %r10d,%r8d
test   %rdi,%rdi
jns    1242 <caldat+0x142>
neg    %rdi
movabs $0xe5aae5e0b9ee9a9b,%rdx
e5 aa e5
mov    %rdi,%rax
mul    %rdx
shr    $0xf,%rdx
imul   $0xffffff9c,%edx,%eax
add    %r8d,%eax
add    $0xffffff9c,%eax
mov    %eax,(%rcx)
ret

LLVM IR (-O0):
define void @caldat(i64 %0, i32* %1, i32* %2, i32* %3) {
%5 = alloca i64
%6 = alloca i32*
%7 = alloca i32*
%8 = alloca i32*
%9 = alloca i64
%10 = alloca i64
%11 = alloca i64
%12 = alloca i64
%13 = alloca i64
%14 = alloca i64
store i64 %0, i64* %5
store i32* %1, i32** %6
store i32* %2, i32** %7
store i32* %3, i32** %8
%15 = load i64, i64* %5
%16 = icmp sge i64 %15, 2299161
br i1 %16, label %17, label %33
17: ; preds = %4
%18 = load i64, i64* %5
%19 = sub nsw i64 %18, 1867216
%20 = sitofp i64 %19 to double
%21 = fsub double %20, 2.500000e-01
%22 = fdiv double %21, 0x40E1D58800000000
%23 = fptosi double %22 to i64
store i64 %23, i64* %10
%24 = load i64, i64* %5
%25 = add nsw i64 %24, 1
%26 = load i64, i64* %10
%27 = add nsw i64 %25, %26
%28 = load i64, i64* %10
%29 = sitofp i64 %28 to double
%30 = fmul double 2.500000e-01, %29
%31 = fptosi double %30 to i64
%32 = sub nsw i64 %27, %31
store i64 %32, i64* %9
br label %46
33: ; preds = %4
%34 = load i64, i64* %5
%35 = icmp slt i64 %34, 0
br i1 %35, label %36, label %43
36: ; preds = %33
%37 = load i64, i64* %5
%38 = load i64, i64* %5
%39 = sdiv i64 %38, 36525
%40 = sub nsw i64 1, %39
%41 = mul nsw i64 36525, %40
%42 = add nsw i64 %37, %41
store i64 %42, i64* %9
br label %45
43: ; preds = %33
%44 = load i64, i64* %5
store i64 %44, i64* %9
br label %45
45: ; preds = %43, %36
br label %46
46: ; preds = %45, %17
%47 = load i64, i64* %9
%48 = add nsw i64 %47, 1524
store i64 %48, i64* %11
%49 = load i64, i64* %11
%50 = sub nsw i64 %49, 2439870
%51 = sitofp i64 %50 to double
%52 = fsub double %51, 1.221000e+02
%53 = fdiv double %52, 3.652500e+02
%54 = fadd double 6.680000e+03, %53
%55 = fptosi double %54 to i64
store i64 %55, i64* %12
%56 = load i64, i64* %12
%57 = mul nsw i64 365, %56
%58 = sitofp i64 %57 to double
%59 = load i64, i64* %12
%60 = sitofp i64 %59 to double
%61 = call double @llvm.fmuladd.f64(double 2.500000e-01, double %60, double %58)
%62 = fptosi double %61 to i64
store i64 %62, i64* %13
%63 = load i64, i64* %11
%64 = load i64, i64* %13
%65 = sub nsw i64 %63, %64
%66 = sitofp i64 %65 to double
%67 = fdiv double %66, 3.060010e+01
%68 = fptosi double %67 to i64
store i64 %68, i64* %14
%69 = load i64, i64* %11
%70 = load i64, i64* %13
%71 = sub nsw i64 %69, %70
%72 = load i64, i64* %14
%73 = sitofp i64 %72 to double
%74 = fmul double 3.060010e+01, %73
%75 = fptosi double %74 to i64
%76 = sub nsw i64 %71, %75
%77 = trunc i64 %76 to i32
%78 = load i32*, i32** %7
store i32 %77, i32* %78
%79 = load i64, i64* %14
%80 = sub nsw i64 %79, 1
%81 = trunc i64 %80 to i32
%82 = load i32*, i32** %6
store i32 %81, i32* %82
%83 = load i32*, i32** %6
%84 = load i32, i32* %83
%85 = icmp sgt i32 %84, 12
br i1 %85, label %86, label %90
86: ; preds = %46
%87 = load i32*, i32** %6
%88 = load i32, i32* %87
%89 = sub nsw i32 %88, 12
store i32 %89, i32* %87
br label %90
90: ; preds = %86, %46
%91 = load i64, i64* %12
%92 = sub nsw i64 %91, 4715
%93 = trunc i64 %92 to i32
%94 = load i32*, i32** %8
store i32 %93, i32* %94
%95 = load i32*, i32** %6
%96 = load i32, i32* %95
%97 = icmp sgt i32 %96, 2
br i1 %97, label %98, label %102
98: ; preds = %90
%99 = load i32*, i32** %8
%100 = load i32, i32* %99
%101 = add nsw i32 %100, -1
store i32 %101, i32* %99
br label %102
102: ; preds = %98, %90
%103 = load i32*, i32** %8
%104 = load i32, i32* %103
%105 = icmp sle i32 %104, 0
br i1 %105, label %106, label %110
106: ; preds = %102
%107 = load i32*, i32** %8
%108 = load i32, i32* %107
%109 = add nsw i32 %108, -1
store i32 %109, i32* %107
br label %110
110: ; preds = %106, %102
%111 = load i64, i64* %5
%112 = icmp slt i64 %111, 0
br i1 %112, label %113, label %123
113: ; preds = %110
%114 = load i64, i64* %5
%115 = sdiv i64 %114, 36525
%116 = sub nsw i64 1, %115
%117 = mul nsw i64 100, %116
%118 = load i32*, i32** %8
%119 = load i32, i32* %118
%120 = sext i32 %119 to i64
%121 = sub nsw i64 %120, %117
%122 = trunc i64 %121 to i32
store i32 %122, i32* %118
br label %123
123: ; preds = %113, %110
ret void
}

LLVM IR (-O2):
define void @caldat(i64 %0, i32* nocapture %1, i32* nocapture writeonly %2, i32* nocapture %3) {
%5 = icmp sgt i64 %0, 2299160
br i1 %5, label %6, label %18
6: ; preds = %4
%7 = add nsw i64 %0, -1867216
%8 = sitofp i64 %7 to double
%9 = fadd double %8, -2.500000e-01
%10 = fdiv double %9, 0x40E1D58800000000
%11 = fptosi double %10 to i64
%12 = add nuw nsw i64 %0, 1
%13 = add nsw i64 %12, %11
%14 = sitofp i64 %11 to double
%15 = fmul double %14, 2.500000e-01
%16 = fptosi double %15 to i64
%17 = sub i64 %13, %16
br label %24
18: ; preds = %4
%19 = icmp slt i64 %0, 0
br i1 %19, label %20, label %24
20: ; preds = %18
%21 = sub i64 0, %0
%22 = urem i64 %21, 36525
%23 = sub nuw nsw i64 36525, %22
br label %24
24: ; preds = %18, %20, %6
%25 = phi i64 [ %17, %6 ], [ %23, %20 ], [ %0, %18 ]
%26 = add nsw i64 %25, 1524
%27 = add nsw i64 %25, -2438346
%28 = sitofp i64 %27 to double
%29 = fadd double %28, -1.221000e+02
%30 = fdiv double %29, 3.652500e+02
%31 = fadd double %30, 6.680000e+03
%32 = fptosi double %31 to i64
%33 = mul nsw i64 %32, 365
%34 = sitofp i64 %33 to double
%35 = sitofp i64 %32 to double
%36 = tail call double @llvm.fmuladd.f64(double %35, double 2.500000e-01, double %34)
%37 = fptosi double %36 to i64
%38 = sub i64 %26, %37
%39 = sitofp i64 %38 to double
%40 = fdiv double %39, 3.060010e+01
%41 = fptosi double %40 to i64
%42 = sitofp i64 %41 to double
%43 = fmul double %42, 3.060010e+01
%44 = fptosi double %43 to i64
%45 = sub nsw i64 %38, %44
%46 = trunc i64 %45 to i32
store i32 %46, i32* %2
%47 = trunc i64 %41 to i32
%48 = add i32 %47, -1
%49 = icmp sgt i32 %48, 12
%50 = add i32 %47, -13
%51 = select i1 %49, i32 %50, i32 %48
store i32 %51, i32* %1
%52 = trunc i64 %32 to i32
%53 = add i32 %52, -4715
store i32 %53, i32* %3
%54 = load i32, i32* %1
%55 = icmp sgt i32 %54, 2
%56 = add i32 %52, -4716
%57 = select i1 %55, i32 %56, i32 %53
%58 = icmp slt i32 %57, 1
%59 = or i1 %55, %58
br i1 %59, label %60, label %63
60: ; preds = %24
%61 = sext i1 %58 to i32
%62 = add nsw i32 %57, %61
store i32 %62, i32* %3
br label %63
63: ; preds = %24, %60
%64 = phi i32 [ %53, %24 ], [ %62, %60 ]
%65 = icmp slt i64 %0, 0
br i1 %65, label %66, label %73
66: ; preds = %63
%67 = sub i64 0, %0
%68 = udiv i64 %67, 36525
%69 = trunc i64 %68 to i32
%70 = mul i32 %69, -100
%71 = add i32 %70, -100
%72 = add i32 %71, %64
store i32 %72, i32* %3
br label %73
73: ; preds = %66, %63
ret void
}