void RevertJulian(long Julian, int *Day, int *Month, int *Year) {
  long ja, jalpha, jb, jc, jd, je;
  if (Julian >= 2299161L) {
    jalpha = ((float)(Julian - 1867216L) - 0.25) / 36524.25L;
    ja = Julian + 1 + jalpha - (long)(0.24 * jalpha);
  } else
    ja = Julian;
  jb = ja + 1524;
  jc = 6680.0 + ((float)(jb - 2439870L) - 122.1) / 365.25;
  jd = 365 * jc + (0.25 * jc);
  je = (jb - jd) / 30.6001;
  *Day = (int)jb - jd - ((int)(30.6001 * je));
  *Month = (int)je - 1;
  if (*Month > 12)
    *Month -= 12;
  *Year = (int)jc - 4715;
  if (*Month > 2)
    --(*Year);
  if (*Year <= 0)
    --(*Year);
}


x86 assembly (clang, -O0):
<RevertJulian>:
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     11a1 <RevertJulian+0xa1>
mov    -0x8(%rbp),%rax
add    $0xffffffffffe38230,%rax
cvtsi2ss %rax,%xmm0
cvtss2sd %xmm0,%xmm0
movsd  0xecb(%rip),%xmm1
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x60(%rbp)
fldl   -0x60(%rbp)
flds   0xee9(%rip)
fdivrp %st,%st(1)
fnstcw -0x62(%rbp)
movzwl -0x62(%rbp),%eax
or     $0xc00,%eax
mov    %ax,-0x64(%rbp)
fldcw  -0x64(%rbp)
fistpll -0x58(%rbp)
fldcw  -0x62(%rbp)
mov    -0x58(%rbp),%rax
mov    %rax,-0x30(%rbp)
mov    -0x8(%rbp),%rax
add    $0x1,%rax
add    -0x30(%rbp),%rax
cvtsi2sdq -0x30(%rbp),%xmm1
movsd  0xe74(%rip),%xmm0
mulsd  %xmm1,%xmm0
cvttsd2si %xmm0,%rcx
sub    %rcx,%rax
mov    %rax,-0x28(%rbp)
jmp    11a9 <RevertJulian+0xa9>
mov    -0x8(%rbp),%rax
mov    %rax,-0x28(%rbp)
mov    -0x28(%rbp),%rax
add    $0x5f4,%rax
mov    %rax,-0x38(%rbp)
mov    -0x38(%rbp),%rax
sub    $0x253abe,%rax
cvtsi2ss %rax,%xmm0
cvtss2sd %xmm0,%xmm1
movsd  0xe5e(%rip),%xmm0
subsd  %xmm0,%xmm1
movsd  0xe4a(%rip),%xmm0
divsd  %xmm0,%xmm1
movsd  0xe36(%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  0xe06(%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  0xdd8(%rip),%xmm1
divsd  %xmm1,%xmm0
cvttsd2si %xmm0,%rax
mov    %rax,-0x50(%rbp)
mov    -0x38(%rbp),%rax
cltq
sub    -0x48(%rbp),%rax
cvtsi2sdq -0x50(%rbp),%xmm1
movsd  0xdb3(%rip),%xmm0
mulsd  %xmm1,%xmm0
cvttsd2si %xmm0,%ecx
movslq %ecx,%rcx
sub    %rcx,%rax
mov    %eax,%ecx
mov    -0x10(%rbp),%rax
mov    %ecx,(%rax)
mov    -0x50(%rbp),%rax
mov    %eax,%ecx
sub    $0x1,%ecx
mov    -0x18(%rbp),%rax
mov    %ecx,(%rax)
mov    -0x18(%rbp),%rax
cmpl   $0xc,(%rax)
jle    129a <RevertJulian+0x19a>
mov    -0x18(%rbp),%rax
mov    (%rax),%ecx
sub    $0xc,%ecx
mov    %ecx,(%rax)
mov    -0x40(%rbp),%rax
mov    %eax,%ecx
sub    $0x126b,%ecx
mov    -0x20(%rbp),%rax
mov    %ecx,(%rax)
mov    -0x18(%rbp),%rax
cmpl   $0x2,(%rax)
jle    12c4 <RevertJulian+0x1c4>
mov    -0x20(%rbp),%rax
mov    (%rax),%ecx
add    $0xffffffff,%ecx
mov    %ecx,(%rax)
mov    -0x20(%rbp),%rax
cmpl   $0x0,(%rax)
jg     12dc <RevertJulian+0x1dc>
mov    -0x20(%rbp),%rax
mov    (%rax),%ecx
add    $0xffffffff,%ecx
mov    %ecx,(%rax)
pop    %rbp
ret

x86 assembly (clang, -O2):
<RevertJulian>:
cmp    $0x231519,%rdi
jl     1174 <RevertJulian+0x74>
lea    -0x1c7dd0(%rdi),%rax
cvtsi2ss %rax,%xmm0
cvtss2sd %xmm0,%xmm0
addsd  0xedf(%rip),%xmm0
movsd  %xmm0,-0x10(%rsp)
fldl   -0x10(%rsp)
fdivs  0xf07(%rip)
fnstcw -0x14(%rsp)
movzwl -0x14(%rsp),%eax
or     $0xc00,%eax
mov    %ax,-0x12(%rsp)
fldcw  -0x12(%rsp)
fistpll -0x8(%rsp)
fldcw  -0x14(%rsp)
mov    -0x8(%rsp),%rax
add    %rax,%rdi
xorps  %xmm0,%xmm0
cvtsi2sd %rax,%xmm0
mulsd  0xea0(%rip),%xmm0
cvttsd2si %xmm0,%rax
sub    %rax,%rdi
add    $0x1,%rdi
lea    0x5f4(%rdi),%r8
add    $0xffffffffffdacb36,%rdi
xorps  %xmm0,%xmm0
cvtsi2ss %rdi,%xmm0
cvtss2sd %xmm0,%xmm0
addsd  0xe7a(%rip),%xmm0
divsd  0xe7a(%rip),%xmm0
addsd  0xe7a(%rip),%xmm0
cvttsd2si %xmm0,%rax
imul   $0x16d,%rax,%rdi
xorps  %xmm0,%xmm0
cvtsi2sd %rdi,%xmm0
cvtsi2sd %rax,%xmm1
mulsd  0xe61(%rip),%xmm1
addsd  %xmm0,%xmm1
cvttsd2si %xmm1,%r9
mov    %r8,%rdi
sub    %r9,%rdi
xorps  %xmm0,%xmm0
cvtsi2sd %rdi,%xmm0
movsd  0xe4a(%rip),%xmm1
divsd  %xmm1,%xmm0
cvttsd2si %xmm0,%r10
xorps  %xmm0,%xmm0
cvtsi2sd %r10,%xmm0
mulsd  %xmm1,%xmm0
cvttsd2si %xmm0,%edi
add    %edi,%r9d
sub    %r9d,%r8d
mov    %r8d,(%rsi)
lea    -0x1(%r10),%esi
lea    -0xd(%r10),%edi
cmp    $0xe,%r10d
cmovl  %esi,%edi
mov    %edi,(%rdx)
lea    -0x126b(%rax),%esi
mov    %esi,(%rcx)
mov    (%rdx),%edx
add    $0xffffed94,%eax
cmp    $0x3,%edx
cmovl  %esi,%eax
jge    1235 <RevertJulian+0x135>
test   %eax,%eax
jle    1235 <RevertJulian+0x135>
ret
xor    %edx,%edx
test   %eax,%eax
setle  %dl
sub    %edx,%eax
mov    %eax,(%rcx)
ret

LLVM IR (-O0):
define void @RevertJulian(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 %35
17: ; preds = %4
%18 = load i64, i64* %5
%19 = sub nsw i64 %18, 1867216
%20 = sitofp i64 %19 to float
%21 = fpext float %20 to double
%22 = fsub double %21, 2.500000e-01
%23 = fpext double %22 to x86_fp80
%24 = fdiv x86_fp80 %23, 0xK400E8EAC400000000000
%25 = fptosi x86_fp80 %24 to i64
store i64 %25, i64* %10
%26 = load i64, i64* %5
%27 = add nsw i64 %26, 1
%28 = load i64, i64* %10
%29 = add nsw i64 %27, %28
%30 = load i64, i64* %10
%31 = sitofp i64 %30 to double
%32 = fmul double 2.400000e-01, %31
%33 = fptosi double %32 to i64
%34 = sub nsw i64 %29, %33
store i64 %34, i64* %9
br label %37
35: ; preds = %4
%36 = load i64, i64* %5
store i64 %36, i64* %9
br label %37
37: ; preds = %35, %17
%38 = load i64, i64* %9
%39 = add nsw i64 %38, 1524
store i64 %39, i64* %11
%40 = load i64, i64* %11
%41 = sub nsw i64 %40, 2439870
%42 = sitofp i64 %41 to float
%43 = fpext float %42 to double
%44 = fsub double %43, 1.221000e+02
%45 = fdiv double %44, 3.652500e+02
%46 = fadd double 6.680000e+03, %45
%47 = fptosi double %46 to i64
store i64 %47, i64* %12
%48 = load i64, i64* %12
%49 = mul nsw i64 365, %48
%50 = sitofp i64 %49 to double
%51 = load i64, i64* %12
%52 = sitofp i64 %51 to double
%53 = call double @llvm.fmuladd.f64(double 2.500000e-01, double %52, double %50)
%54 = fptosi double %53 to i64
store i64 %54, i64* %13
%55 = load i64, i64* %11
%56 = load i64, i64* %13
%57 = sub nsw i64 %55, %56
%58 = sitofp i64 %57 to double
%59 = fdiv double %58, 3.060010e+01
%60 = fptosi double %59 to i64
store i64 %60, i64* %14
%61 = load i64, i64* %11
%62 = trunc i64 %61 to i32
%63 = sext i32 %62 to i64
%64 = load i64, i64* %13
%65 = sub nsw i64 %63, %64
%66 = load i64, i64* %14
%67 = sitofp i64 %66 to double
%68 = fmul double 3.060010e+01, %67
%69 = fptosi double %68 to i32
%70 = sext i32 %69 to i64
%71 = sub nsw i64 %65, %70
%72 = trunc i64 %71 to i32
%73 = load i32*, i32** %6
store i32 %72, i32* %73
%74 = load i64, i64* %14
%75 = trunc i64 %74 to i32
%76 = sub nsw i32 %75, 1
%77 = load i32*, i32** %7
store i32 %76, i32* %77
%78 = load i32*, i32** %7
%79 = load i32, i32* %78
%80 = icmp sgt i32 %79, 12
br i1 %80, label %81, label %85
81: ; preds = %37
%82 = load i32*, i32** %7
%83 = load i32, i32* %82
%84 = sub nsw i32 %83, 12
store i32 %84, i32* %82
br label %85
85: ; preds = %81, %37
%86 = load i64, i64* %12
%87 = trunc i64 %86 to i32
%88 = sub nsw i32 %87, 4715
%89 = load i32*, i32** %8
store i32 %88, i32* %89
%90 = load i32*, i32** %7
%91 = load i32, i32* %90
%92 = icmp sgt i32 %91, 2
br i1 %92, label %93, label %97
93: ; preds = %85
%94 = load i32*, i32** %8
%95 = load i32, i32* %94
%96 = add nsw i32 %95, -1
store i32 %96, i32* %94
br label %97
97: ; preds = %93, %85
%98 = load i32*, i32** %8
%99 = load i32, i32* %98
%100 = icmp sle i32 %99, 0
br i1 %100, label %101, label %105
101: ; preds = %97
%102 = load i32*, i32** %8
%103 = load i32, i32* %102
%104 = add nsw i32 %103, -1
store i32 %104, i32* %102
br label %105
105: ; preds = %101, %97
ret void
}

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