void ep_time_to_mdyhms(long *time, int *mon, int *day, int *yr, int *hour,
                       int *min, float *sec) {
  long ja, jalpha, jb, jc, jd, je;
  while (time[1] >= 86400000) {
    time[0]++;
    time[1] -= 86400000;
  }
  if (time[0] >= 2299161) {
    jalpha = ((double)(time[0] - 1867216) - 0.25) / 36524.25;
    ja = time[0] + 1 + jalpha - (long)(0.25 * jalpha);
  } else
    ja = time[0];
  jb = ja + 1524;
  jc = 6680.0 + ((double)(jb - 2439870) - 122.1) / 365.25;
  jd = 365 * jc + (0.25 * jc);
  je = (jb - jd) / 30.6001;
  *day = jb - jd - (int)(30.6001 * je);
  *mon = je - 1;
  if (*mon > 12)
    *mon -= 12;
  *yr = jc - 4715;
  if (*mon > 2)
    --(*yr);
  if (*yr <= 0)
    --(*yr);
  ja = time[1] / 1000;
  *hour = ja / 3600;
  *min = (ja - (*hour) * 3600) / 60;
  *sec = (float)(time[1] - ((*hour) * 3600 + (*min) * 60) * 1000) / 1000.0;
}


x86 assembly (clang, -O0):
<ep_time_to_mdyhms>:
push   %rbp
mov    %rsp,%rbp
mov    0x10(%rbp),%rax
mov    %rdi,-0x8(%rbp)
mov    %rsi,-0x10(%rbp)
mov    %rdx,-0x18(%rbp)
mov    %rcx,-0x20(%rbp)
mov    %r8,-0x28(%rbp)
mov    %r9,-0x30(%rbp)
mov    -0x8(%rbp),%rax
cmpq   $0x5265c00,0x8(%rax)
05
jl     1158 <ep_time_to_mdyhms+0x58>
mov    -0x8(%rbp),%rax
mov    (%rax),%rcx
add    $0x1,%rcx
mov    %rcx,(%rax)
mov    -0x8(%rbp),%rax
mov    0x8(%rax),%rcx
sub    $0x5265c00,%rcx
mov    %rcx,0x8(%rax)
jmp    1120 <ep_time_to_mdyhms+0x20>
mov    -0x8(%rbp),%rax
cmpq   $0x231519,(%rax)
jl     11ce <ep_time_to_mdyhms+0xce>
mov    -0x8(%rbp),%rax
mov    (%rax),%rax
sub    $0x1c7dd0,%rax
cvtsi2sd %rax,%xmm0
movsd  0xe7d(%rip),%xmm1
subsd  %xmm1,%xmm0
movsd  0xe79(%rip),%xmm1
divsd  %xmm1,%xmm0
cvttsd2si %xmm0,%rax
mov    %rax,-0x40(%rbp)
mov    -0x8(%rbp),%rax
mov    (%rax),%rax
add    $0x1,%rax
add    -0x40(%rbp),%rax
cvtsi2sdq -0x40(%rbp),%xmm1
movsd  0xe47(%rip),%xmm0
mulsd  %xmm1,%xmm0
cvttsd2si %xmm0,%rcx
sub    %rcx,%rax
mov    %rax,-0x38(%rbp)
jmp    11d9 <ep_time_to_mdyhms+0xd9>
mov    -0x8(%rbp),%rax
mov    (%rax),%rax
mov    %rax,-0x38(%rbp)
mov    -0x38(%rbp),%rax
add    $0x5f4,%rax
mov    %rax,-0x48(%rbp)
mov    -0x48(%rbp),%rax
sub    $0x253abe,%rax
cvtsi2sd %rax,%xmm1
movsd  0xe2a(%rip),%xmm0
subsd  %xmm0,%xmm1
movsd  0xe16(%rip),%xmm0
divsd  %xmm0,%xmm1
movsd  0xe02(%rip),%xmm0
addsd  %xmm1,%xmm0
cvttsd2si %xmm0,%rax
mov    %rax,-0x50(%rbp)
imul   $0x16d,-0x50(%rbp),%rax
cvtsi2sd %rax,%xmm1
cvtsi2sdq -0x50(%rbp),%xmm0
movsd  0xdc2(%rip),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
cvttsd2si %xmm0,%rax
mov    %rax,-0x58(%rbp)
mov    -0x48(%rbp),%rax
sub    -0x58(%rbp),%rax
cvtsi2sd %rax,%xmm0
movsd  0xdac(%rip),%xmm1
divsd  %xmm1,%xmm0
cvttsd2si %xmm0,%rax
mov    %rax,-0x60(%rbp)
mov    -0x48(%rbp),%rax
sub    -0x58(%rbp),%rax
cvtsi2sdq -0x60(%rbp),%xmm1
movsd  0xd89(%rip),%xmm0
mulsd  %xmm1,%xmm0
cvttsd2si %xmm0,%ecx
movslq %ecx,%rcx
sub    %rcx,%rax
mov    %eax,%ecx
mov    -0x18(%rbp),%rax
mov    %ecx,(%rax)
mov    -0x60(%rbp),%rax
sub    $0x1,%rax
mov    %eax,%ecx
mov    -0x10(%rbp),%rax
mov    %ecx,(%rax)
mov    -0x10(%rbp),%rax
cmpl   $0xc,(%rax)
jle    12c5 <ep_time_to_mdyhms+0x1c5>
mov    -0x10(%rbp),%rax
mov    (%rax),%ecx
sub    $0xc,%ecx
mov    %ecx,(%rax)
mov    -0x50(%rbp),%rax
sub    $0x126b,%rax
mov    %eax,%ecx
mov    -0x20(%rbp),%rax
mov    %ecx,(%rax)
mov    -0x10(%rbp),%rax
cmpl   $0x2,(%rax)
jle    12ef <ep_time_to_mdyhms+0x1ef>
mov    -0x20(%rbp),%rax
mov    (%rax),%ecx
add    $0xffffffff,%ecx
mov    %ecx,(%rax)
mov    -0x20(%rbp),%rax
cmpl   $0x0,(%rax)
jg     1307 <ep_time_to_mdyhms+0x207>
mov    -0x20(%rbp),%rax
mov    (%rax),%ecx
add    $0xffffffff,%ecx
mov    %ecx,(%rax)
mov    -0x8(%rbp),%rax
mov    0x8(%rax),%rax
mov    $0x3e8,%ecx
cqto
idiv   %rcx
mov    %rax,-0x38(%rbp)
mov    -0x38(%rbp),%rax
mov    $0xe10,%ecx
cqto
idiv   %rcx
mov    %eax,%ecx
mov    -0x28(%rbp),%rax
mov    %ecx,(%rax)
mov    -0x38(%rbp),%rax
mov    -0x28(%rbp),%rcx
imul   $0xe10,(%rcx),%ecx
movslq %ecx,%rcx
sub    %rcx,%rax
mov    $0x3c,%ecx
cqto
idiv   %rcx
mov    %eax,%ecx
mov    -0x30(%rbp),%rax
mov    %ecx,(%rax)
mov    -0x8(%rbp),%rax
mov    0x8(%rax),%rax
mov    -0x28(%rbp),%rcx
imul   $0xe10,(%rcx),%ecx
mov    -0x30(%rbp),%rdx
imul   $0x3c,(%rdx),%edx
add    %edx,%ecx
imul   $0x3e8,%ecx,%ecx
movslq %ecx,%rcx
sub    %rcx,%rax
cvtsi2ss %rax,%xmm0
cvtss2sd %xmm0,%xmm0
movsd  0xc9f(%rip),%xmm1
divsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
mov    0x10(%rbp),%rax
movss  %xmm0,(%rax)
pop    %rbp
ret

x86 assembly (clang, -O2):
<ep_time_to_mdyhms>:
push   %rbp
push   %rbx
mov    %rdx,%r10
mov    (%rdi),%rbx
mov    0x8(%rdi),%r11
cmp    $0x5265c00,%r11
jl     1165 <ep_time_to_mdyhms+0x65>
cmp    $0xa4cb7ff,%r11
mov    $0xa4cb7ff,%eax
cmovl  %r11,%rax
neg    %rax
add    %r11,%rax
add    $0x5265bff,%rax
shr    $0xa,%rax
movabs $0x31b5d43afe99ef,%rdx
mul    %rdx
shr    $0x6,%rdx
add    %rdx,%rbx
add    $0x1,%rbx
imul   $0xfffffffffad9a400,%rdx,%rax
add    %rax,%r11
add    $0xfffffffffad9a400,%r11
mov    %rbx,(%rdi)
mov    %r11,0x8(%rdi)
cmp    $0x231519,%rbx
jl     11ae <ep_time_to_mdyhms+0xae>
lea    -0x1c7dd0(%rbx),%rax
cvtsi2sd %rax,%xmm0
addsd  0xe7e(%rip),%xmm0
divsd  0xe7e(%rip),%xmm0
cvttsd2si %xmm0,%rax
add    %rax,%rbx
xorps  %xmm0,%xmm0
cvtsi2sd %rax,%xmm0
mulsd  0xe6e(%rip),%xmm0
cvttsd2si %xmm0,%rax
sub    %rax,%rbx
add    $0x1,%rbx
lea    -0x2534ca(%rbx),%rax
xorps  %xmm0,%xmm0
cvtsi2sd %rax,%xmm0
addsd  0xe53(%rip),%xmm0
divsd  0xe53(%rip),%xmm0
addsd  0xe53(%rip),%xmm0
cvttsd2si %xmm0,%rax
imul   $0x16d,%rax,%rdx
xorps  %xmm0,%xmm0
cvtsi2sd %rdx,%xmm0
cvtsi2sd %rax,%xmm1
mulsd  0xe1a(%rip),%xmm1
addsd  %xmm0,%xmm1
cvttsd2si %xmm1,%rdx
neg    %rdx
add    %rbx,%rdx
add    $0x5f4,%rdx
xorps  %xmm0,%xmm0
cvtsi2sd %rdx,%xmm0
movsd  0xe14(%rip),%xmm1
divsd  %xmm1,%xmm0
cvttsd2si %xmm0,%rbx
xorps  %xmm0,%xmm0
cvtsi2sd %rbx,%xmm0
mulsd  %xmm1,%xmm0
cvttsd2si %xmm0,%ebp
mov    0x18(%rsp),%rdi
sub    %ebp,%edx
mov    %edx,(%r10)
lea    -0x1(%rbx),%edx
add    $0xfffffff3,%ebx
cmp    $0xd,%edx
cmovl  %edx,%ebx
mov    %ebx,(%rsi)
lea    -0x126b(%rax),%edx
mov    %edx,(%rcx)
mov    (%rsi),%esi
add    $0xffffed94,%eax
cmp    $0x3,%esi
cmovl  %edx,%eax
jge    1268 <ep_time_to_mdyhms+0x168>
test   %eax,%eax
jg     1273 <ep_time_to_mdyhms+0x173>
xor    %edx,%edx
test   %eax,%eax
setle  %dl
sub    %edx,%eax
mov    %eax,(%rcx)
movabs $0x20c49ba5e353f7cf,%rcx
9b c4 20
mov    %r11,%rax
imul   %rcx
mov    %rdx,%rcx
mov    %rdx,%rax
shr    $0x3f,%rax
sar    $0x7,%rcx
add    %rax,%rcx
movabs $0x4a90be587de6e565,%rdx
be 90 4a
mov    %r11,%rax
imul   %rdx
mov    %rdx,%rsi
mov    %rdx,%rax
shr    $0x3f,%rax
sar    $0x14,%rsi
add    %rax,%rsi
movabs $0xe1000000000,%rax
imul   %rsi,%rax
sar    $0x20,%rax
sub    %rax,%rcx
movabs $0x8888888888888889,%rdx
88 88 88
mov    %rcx,%rax
imul   %rdx
mov    %esi,(%r8)
add    %rcx,%rdx
mov    %rdx,%rax
shr    $0x3f,%rax
sar    $0x5,%rdx
add    %rax,%rdx
mov    %edx,(%r9)
movslq (%r8),%rax
imul   $0xe10,%rax,%rax
movslq %edx,%rcx
imul   $0x3c,%rcx,%rcx
add    %rax,%rcx
imul   $0x3e8,%rcx,%rax
sub    %rax,%r11
xorps  %xmm0,%xmm0
cvtsi2ss %r11,%xmm0
divss  0xd19(%rip),%xmm0
movss  %xmm0,(%rdi)
pop    %rbx
pop    %rbp
ret

LLVM IR (-O0):
define void @ep_time_to_mdyhms(i64* %0, i32* %1, i32* %2, i32* %3, i32* %4, i32* %5, float* %6) {
%8 = alloca i64*
%9 = alloca i32*
%10 = alloca i32*
%11 = alloca i32*
%12 = alloca i32*
%13 = alloca i32*
%14 = alloca float*
%15 = alloca i64
%16 = alloca i64
%17 = alloca i64
%18 = alloca i64
%19 = alloca i64
%20 = alloca i64
store i64* %0, i64** %8
store i32* %1, i32** %9
store i32* %2, i32** %10
store i32* %3, i32** %11
store i32* %4, i32** %12
store i32* %5, i32** %13
store float* %6, float** %14
br label %21
21: ; preds = %26, %7
%22 = load i64*, i64** %8
%23 = getelementptr inbounds i64, i64* %22, i64 1
%24 = load i64, i64* %23
%25 = icmp sge i64 %24, 86400000
br i1 %25, label %26, label %35
26: ; preds = %21
%27 = load i64*, i64** %8
%28 = getelementptr inbounds i64, i64* %27, i64 0
%29 = load i64, i64* %28
%30 = add nsw i64 %29, 1
store i64 %30, i64* %28
%31 = load i64*, i64** %8
%32 = getelementptr inbounds i64, i64* %31, i64 1
%33 = load i64, i64* %32
%34 = sub nsw i64 %33, 86400000
store i64 %34, i64* %32
br label %21
35: ; preds = %21
%36 = load i64*, i64** %8
%37 = getelementptr inbounds i64, i64* %36, i64 0
%38 = load i64, i64* %37
%39 = icmp sge i64 %38, 2299161
br i1 %39, label %40, label %60
40: ; preds = %35
%41 = load i64*, i64** %8
%42 = getelementptr inbounds i64, i64* %41, i64 0
%43 = load i64, i64* %42
%44 = sub nsw i64 %43, 1867216
%45 = sitofp i64 %44 to double
%46 = fsub double %45, 2.500000e-01
%47 = fdiv double %46, 0x40E1D58800000000
%48 = fptosi double %47 to i64
store i64 %48, i64* %16
%49 = load i64*, i64** %8
%50 = getelementptr inbounds i64, i64* %49, i64 0
%51 = load i64, i64* %50
%52 = add nsw i64 %51, 1
%53 = load i64, i64* %16
%54 = add nsw i64 %52, %53
%55 = load i64, i64* %16
%56 = sitofp i64 %55 to double
%57 = fmul double 2.500000e-01, %56
%58 = fptosi double %57 to i64
%59 = sub nsw i64 %54, %58
store i64 %59, i64* %15
br label %64
60: ; preds = %35
%61 = load i64*, i64** %8
%62 = getelementptr inbounds i64, i64* %61, i64 0
%63 = load i64, i64* %62
store i64 %63, i64* %15
br label %64
64: ; preds = %60, %40
%65 = load i64, i64* %15
%66 = add nsw i64 %65, 1524
store i64 %66, i64* %17
%67 = load i64, i64* %17
%68 = sub nsw i64 %67, 2439870
%69 = sitofp i64 %68 to double
%70 = fsub double %69, 1.221000e+02
%71 = fdiv double %70, 3.652500e+02
%72 = fadd double 6.680000e+03, %71
%73 = fptosi double %72 to i64
store i64 %73, i64* %18
%74 = load i64, i64* %18
%75 = mul nsw i64 365, %74
%76 = sitofp i64 %75 to double
%77 = load i64, i64* %18
%78 = sitofp i64 %77 to double
%79 = call double @llvm.fmuladd.f64(double 2.500000e-01, double %78, double %76)
%80 = fptosi double %79 to i64
store i64 %80, i64* %19
%81 = load i64, i64* %17
%82 = load i64, i64* %19
%83 = sub nsw i64 %81, %82
%84 = sitofp i64 %83 to double
%85 = fdiv double %84, 3.060010e+01
%86 = fptosi double %85 to i64
store i64 %86, i64* %20
%87 = load i64, i64* %17
%88 = load i64, i64* %19
%89 = sub nsw i64 %87, %88
%90 = load i64, i64* %20
%91 = sitofp i64 %90 to double
%92 = fmul double 3.060010e+01, %91
%93 = fptosi double %92 to i32
%94 = sext i32 %93 to i64
%95 = sub nsw i64 %89, %94
%96 = trunc i64 %95 to i32
%97 = load i32*, i32** %10
store i32 %96, i32* %97
%98 = load i64, i64* %20
%99 = sub nsw i64 %98, 1
%100 = trunc i64 %99 to i32
%101 = load i32*, i32** %9
store i32 %100, i32* %101
%102 = load i32*, i32** %9
%103 = load i32, i32* %102
%104 = icmp sgt i32 %103, 12
br i1 %104, label %105, label %109
105: ; preds = %64
%106 = load i32*, i32** %9
%107 = load i32, i32* %106
%108 = sub nsw i32 %107, 12
store i32 %108, i32* %106
br label %109
109: ; preds = %105, %64
%110 = load i64, i64* %18
%111 = sub nsw i64 %110, 4715
%112 = trunc i64 %111 to i32
%113 = load i32*, i32** %11
store i32 %112, i32* %113
%114 = load i32*, i32** %9
%115 = load i32, i32* %114
%116 = icmp sgt i32 %115, 2
br i1 %116, label %117, label %121
117: ; preds = %109
%118 = load i32*, i32** %11
%119 = load i32, i32* %118
%120 = add nsw i32 %119, -1
store i32 %120, i32* %118
br label %121
121: ; preds = %117, %109
%122 = load i32*, i32** %11
%123 = load i32, i32* %122
%124 = icmp sle i32 %123, 0
br i1 %124, label %125, label %129
125: ; preds = %121
%126 = load i32*, i32** %11
%127 = load i32, i32* %126
%128 = add nsw i32 %127, -1
store i32 %128, i32* %126
br label %129
129: ; preds = %125, %121
%130 = load i64*, i64** %8
%131 = getelementptr inbounds i64, i64* %130, i64 1
%132 = load i64, i64* %131
%133 = sdiv i64 %132, 1000
store i64 %133, i64* %15
%134 = load i64, i64* %15
%135 = sdiv i64 %134, 3600
%136 = trunc i64 %135 to i32
%137 = load i32*, i32** %12
store i32 %136, i32* %137
%138 = load i64, i64* %15
%139 = load i32*, i32** %12
%140 = load i32, i32* %139
%141 = mul nsw i32 %140, 3600
%142 = sext i32 %141 to i64
%143 = sub nsw i64 %138, %142
%144 = sdiv i64 %143, 60
%145 = trunc i64 %144 to i32
%146 = load i32*, i32** %13
store i32 %145, i32* %146
%147 = load i64*, i64** %8
%148 = getelementptr inbounds i64, i64* %147, i64 1
%149 = load i64, i64* %148
%150 = load i32*, i32** %12
%151 = load i32, i32* %150
%152 = mul nsw i32 %151, 3600
%153 = load i32*, i32** %13
%154 = load i32, i32* %153
%155 = mul nsw i32 %154, 60
%156 = add nsw i32 %152, %155
%157 = mul nsw i32 %156, 1000
%158 = sext i32 %157 to i64
%159 = sub nsw i64 %149, %158
%160 = sitofp i64 %159 to float
%161 = fpext float %160 to double
%162 = fdiv double %161, 1.000000e+03
%163 = fptrunc double %162 to float
%164 = load float*, float** %14
store float %163, float* %164
ret void
}

LLVM IR (-O2):
define void @ep_time_to_mdyhms(i64* nocapture %0, i32* nocapture %1, i32* nocapture writeonly %2, i32* nocapture %3, i32* nocapture %4, i32* nocapture writeonly %5, float* nocapture writeonly %6) {
%8 = getelementptr inbounds i64, i64* %0, i64 1
%9 = load i64, i64* %8
%10 = icmp sgt i64 %9, 86399999
%11 = load i64, i64* %0
br i1 %10, label %12, label %22
12: ; preds = %7
%13 = add nuw i64 %9, 86399999
%14 = call i64 @llvm.smin.i64(i64 %9, i64 172799999)
%15 = sub nuw i64 %13, %14
%16 = udiv i64 %15, 86400000
%17 = add i64 %11, %16
%18 = add i64 %17, 1
%19 = mul nsw i64 %16, -86400000
%20 = add nsw i64 %9, -86400000
%21 = add nsw i64 %19, %20
store i64 %18, i64* %0
store i64 %21, i64* %8
br label %22
22: ; preds = %7, %12
%23 = phi i64 [ %18, %12 ], [ %11, %7 ]
%24 = phi i64 [ %21, %12 ], [ %9, %7 ]
%25 = icmp sgt i64 %23, 2299160
br i1 %25, label %26, label %38
26: ; preds = %22
%27 = add nsw i64 %23, -1867216
%28 = sitofp i64 %27 to double
%29 = fadd double %28, -2.500000e-01
%30 = fdiv double %29, 0x40E1D58800000000
%31 = fptosi double %30 to i64
%32 = add nuw nsw i64 %23, 1
%33 = add nsw i64 %32, %31
%34 = sitofp i64 %31 to double
%35 = fmul double %34, 2.500000e-01
%36 = fptosi double %35 to i64
%37 = sub i64 %33, %36
br label %38
38: ; preds = %22, %26
%39 = phi i64 [ %37, %26 ], [ %23, %22 ]
%40 = add nsw i64 %39, 1524
%41 = add nsw i64 %39, -2438346
%42 = sitofp i64 %41 to double
%43 = fadd double %42, -1.221000e+02
%44 = fdiv double %43, 3.652500e+02
%45 = fadd double %44, 6.680000e+03
%46 = fptosi double %45 to i64
%47 = mul nsw i64 %46, 365
%48 = sitofp i64 %47 to double
%49 = sitofp i64 %46 to double
%50 = tail call double @llvm.fmuladd.f64(double %49, double 2.500000e-01, double %48)
%51 = fptosi double %50 to i64
%52 = sub i64 %40, %51
%53 = sitofp i64 %52 to double
%54 = fdiv double %53, 3.060010e+01
%55 = fptosi double %54 to i64
%56 = sitofp i64 %55 to double
%57 = fmul double %56, 3.060010e+01
%58 = fptosi double %57 to i32
%59 = trunc i64 %52 to i32
%60 = sub i32 %59, %58
store i32 %60, i32* %2
%61 = trunc i64 %55 to i32
%62 = add i32 %61, -1
%63 = icmp sgt i32 %62, 12
%64 = add i32 %61, -13
%65 = select i1 %63, i32 %64, i32 %62
store i32 %65, i32* %1
%66 = trunc i64 %46 to i32
%67 = add i32 %66, -4715
store i32 %67, i32* %3
%68 = load i32, i32* %1
%69 = icmp sgt i32 %68, 2
%70 = add i32 %66, -4716
%71 = select i1 %69, i32 %70, i32 %67
%72 = icmp slt i32 %71, 1
%73 = or i1 %69, %72
br i1 %73, label %74, label %77
74: ; preds = %38
%75 = sext i1 %72 to i32
%76 = add nsw i32 %71, %75
store i32 %76, i32* %3
br label %77
77: ; preds = %38, %74
%78 = sdiv i64 %24, 1000
%79 = sdiv i64 %24, 3600000
%80 = trunc i64 %79 to i32
store i32 %80, i32* %4
%81 = mul i64 %79, 15461882265600
%82 = ashr exact i64 %81, 32
%83 = sub nsw i64 %78, %82
%84 = sdiv i64 %83, 60
%85 = trunc i64 %84 to i32
store i32 %85, i32* %5
%86 = load i32, i32* %4
%87 = mul nsw i32 %86, 3600
%88 = mul nsw i32 %85, 60
%89 = add nsw i32 %87, %88
%90 = mul nsw i32 %89, 1000
%91 = sext i32 %90 to i64
%92 = sub nsw i64 %24, %91
%93 = sitofp i64 %92 to float
%94 = fdiv float %93, 1.000000e+03
store float %94, float* %6
ret void
}