float J2kfrom(int y, int m, int d, float t) {
  float JD = d - 32075 + 1461 * (y + 4800 + (m - 14) / 12) / 4 +
             367 * (m - 2 - (m - 14) / 12 * 12) / 12 -
             3 * ((y + 4900 + (m - 14) / 12) / 100) / 4;
  return JD - 2451545.0 + (double)t - 0.5;
}


x86 assembly (clang, -O0):
<J2kfrom>:
push   %rbp
mov    %rsp,%rbp
mov    %edi,-0x4(%rbp)
mov    %esi,-0x8(%rbp)
mov    %edx,-0xc(%rbp)
movss  %xmm0,-0x10(%rbp)
mov    -0xc(%rbp),%eax
sub    $0x7d4b,%eax
mov    %eax,-0x28(%rbp)
mov    -0x4(%rbp),%eax
add    $0x12c0,%eax
mov    %eax,-0x2c(%rbp)
mov    -0x8(%rbp),%eax
sub    $0xe,%eax
mov    $0xc,%ecx
cltd
idiv   %ecx
mov    %eax,%ecx
mov    -0x2c(%rbp),%eax
add    %ecx,%eax
imul   $0x5b5,%eax,%eax
mov    $0x4,%ecx
cltd
idiv   %ecx
mov    %eax,%ecx
mov    -0x28(%rbp),%eax
add    %ecx,%eax
mov    %eax,-0x20(%rbp)
mov    -0x8(%rbp),%eax
sub    $0x2,%eax
mov    %eax,-0x24(%rbp)
mov    -0x8(%rbp),%eax
sub    $0xe,%eax
mov    $0xc,%ecx
cltd
idiv   %ecx
mov    %eax,%ecx
mov    -0x24(%rbp),%eax
imul   $0xc,%ecx,%ecx
sub    %ecx,%eax
imul   $0x16f,%eax,%eax
mov    $0xc,%ecx
cltd
idiv   %ecx
mov    %eax,%ecx
mov    -0x20(%rbp),%eax
add    %ecx,%eax
mov    %eax,-0x18(%rbp)
mov    -0x4(%rbp),%eax
add    $0x1324,%eax
mov    %eax,-0x1c(%rbp)
mov    -0x8(%rbp),%eax
sub    $0xe,%eax
mov    $0xc,%ecx
cltd
idiv   %ecx
mov    %eax,%ecx
mov    -0x1c(%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    -0x18(%rbp),%eax
sub    %ecx,%eax
cvtsi2ss %eax,%xmm0
movss  %xmm0,-0x14(%rbp)
movss  -0x14(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
movsd  0xe26(%rip),%xmm1
subsd  %xmm1,%xmm0
movss  -0x10(%rbp),%xmm1
cvtss2sd %xmm1,%xmm1
addsd  %xmm1,%xmm0
movsd  0xe05(%rip),%xmm1
subsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
pop    %rbp
ret

x86 assembly (clang, -O2):
<J2kfrom>:
lea    -0xe(%rsi),%eax
cltq
imul   $0x2aaaaaab,%rax,%rcx
mov    %rcx,%rax
shr    $0x3f,%rax
sar    $0x21,%rcx
add    %eax,%ecx
lea    (%rcx,%rdi,1),%eax
imul   $0x5b5,%eax,%eax
lea    0x6b01c0(%rax),%r8d
add    $0x6b01c3,%eax
test   %r8d,%r8d
cmovns %r8d,%eax
sar    $0x2,%eax
add    %edx,%eax
lea    0x0(,%rcx,4),%edx
lea    (%rdx,%rdx,2),%edx
sub    %edx,%esi
imul   $0x16f,%esi,%edx
add    $0xfffffd22,%edx
movslq %edx,%rdx
imul   $0x2aaaaaab,%rdx,%rdx
mov    %rdx,%rsi
shr    $0x3f,%rsi
sar    $0x21,%rdx
add    %esi,%edx
add    %edi,%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
sub    %ecx,%eax
add    %edx,%eax
add    $0xffff82b5,%eax
cvtsi2ss %eax,%xmm1
cvtss2sd %xmm1,%xmm1
addsd  0xe4e(%rip),%xmm1
cvtss2sd %xmm0,%xmm0
addsd  %xmm1,%xmm0
addsd  0xe46(%rip),%xmm0
cvtsd2ss %xmm0,%xmm0
ret

LLVM IR (-O0):
define float @J2kfrom(i32 %0, i32 %1, i32 %2, float %3) {
%5 = alloca i32
%6 = alloca i32
%7 = alloca i32
%8 = alloca float
%9 = alloca float
store i32 %0, i32* %5
store i32 %1, i32* %6
store i32 %2, i32* %7
store float %3, float* %8
%10 = load i32, i32* %7
%11 = sub nsw i32 %10, 32075
%12 = load i32, i32* %5
%13 = add nsw i32 %12, 4800
%14 = load i32, i32* %6
%15 = sub nsw i32 %14, 14
%16 = sdiv i32 %15, 12
%17 = add nsw i32 %13, %16
%18 = mul nsw i32 1461, %17
%19 = sdiv i32 %18, 4
%20 = add nsw i32 %11, %19
%21 = load i32, i32* %6
%22 = sub nsw i32 %21, 2
%23 = load i32, i32* %6
%24 = sub nsw i32 %23, 14
%25 = sdiv i32 %24, 12
%26 = mul nsw i32 %25, 12
%27 = sub nsw i32 %22, %26
%28 = mul nsw i32 367, %27
%29 = sdiv i32 %28, 12
%30 = add nsw i32 %20, %29
%31 = load i32, i32* %5
%32 = add nsw i32 %31, 4900
%33 = load i32, i32* %6
%34 = sub nsw i32 %33, 14
%35 = sdiv i32 %34, 12
%36 = add nsw i32 %32, %35
%37 = sdiv i32 %36, 100
%38 = mul nsw i32 3, %37
%39 = sdiv i32 %38, 4
%40 = sub nsw i32 %30, %39
%41 = sitofp i32 %40 to float
store float %41, float* %9
%42 = load float, float* %9
%43 = fpext float %42 to double
%44 = fsub double %43, 0x4142B42C80000000
%45 = load float, float* %8
%46 = fpext float %45 to double
%47 = fadd double %44, %46
%48 = fsub double %47, 5.000000e-01
%49 = fptrunc double %48 to float
ret float %49
}

LLVM IR (-O2):
define float @J2kfrom(i32 %0, i32 %1, i32 %2, float %3) {
%5 = add nsw i32 %2, -32075
%6 = add nsw i32 %1, -14
%7 = sdiv i32 %6, 12
%8 = add i32 %7, %0
%9 = mul i32 %8, 1461
%10 = add i32 %9, 7012800
%11 = sdiv i32 %10, 4
%12 = add nsw i32 %5, %11
%13 = add nsw i32 %1, -2
%14 = mul nsw i32 %7, -12
%15 = add i32 %13, %14
%16 = mul nsw i32 %15, 367
%17 = sdiv i32 %16, 12
%18 = add i32 %8, 4900
%19 = sdiv i32 %18, 100
%20 = mul nsw i32 %19, 3
%21 = sdiv i32 %20, -4
%22 = add i32 %12, %21
%23 = add i32 %22, %17
%24 = sitofp i32 %23 to float
%25 = fpext float %24 to double
%26 = fadd double %25, 0xC142B42C80000000
%27 = fpext float %3 to double
%28 = fadd double %26, %27
%29 = fadd double %28, -5.000000e-01
%30 = fptrunc double %29 to float
ret float %30
}