float julday(i_month, i_day, i_year)
int i_month;
int i_day;
int i_year;
{
  int aggregate_first_day_of_month[13];
  int leap_year = 0;
  int truncated_dividend;
  float year;
  float day;
  float decimal_date;
  float remainder = 0.0;
  float divisor = 4.0;
  float dividend;
  float left_over;
  aggregate_first_day_of_month[1] = 1;
  aggregate_first_day_of_month[2] = 32;
  aggregate_first_day_of_month[3] = 60;
  aggregate_first_day_of_month[4] = 91;
  aggregate_first_day_of_month[5] = 121;
  aggregate_first_day_of_month[6] = 152;
  aggregate_first_day_of_month[7] = 182;
  aggregate_first_day_of_month[8] = 213;
  aggregate_first_day_of_month[9] = 244;
  aggregate_first_day_of_month[10] = 274;
  aggregate_first_day_of_month[11] = 305;
  aggregate_first_day_of_month[12] = 335;
  year = i_year;
  if ((i_year != 1900) && (i_year != 2100)) {
    dividend = year / divisor;
    truncated_dividend = dividend;
    left_over = dividend - truncated_dividend;
    remainder = left_over * divisor;
    if ((remainder > 0.0) && (i_month > 2)) {
      leap_year = 1;
    } else {
      leap_year = 0;
    }
  }
  day = aggregate_first_day_of_month[i_month] + i_day - 1 + leap_year;
  if (leap_year) {
    decimal_date = year + (day / 366.0);
  } else {
    decimal_date = year + (day / 365.0);
  }
  return (decimal_date);
}


x86 assembly (clang, -O0):
<julday>:
push   %rbp
mov    %rsp,%rbp
mov    %edi,-0x4(%rbp)
mov    %esi,-0x8(%rbp)
mov    %edx,-0xc(%rbp)
movl   $0x0,-0x44(%rbp)
xorps  %xmm0,%xmm0
movss  %xmm0,-0x58(%rbp)
movss  0xedc(%rip),%xmm0
movss  %xmm0,-0x5c(%rbp)
movl   $0x1,-0x3c(%rbp)
movl   $0x20,-0x38(%rbp)
movl   $0x3c,-0x34(%rbp)
movl   $0x5b,-0x30(%rbp)
movl   $0x79,-0x2c(%rbp)
movl   $0x98,-0x28(%rbp)
movl   $0xb6,-0x24(%rbp)
movl   $0xd5,-0x20(%rbp)
movl   $0xf4,-0x1c(%rbp)
movl   $0x112,-0x18(%rbp)
movl   $0x131,-0x14(%rbp)
movl   $0x14f,-0x10(%rbp)
cvtsi2ssl -0xc(%rbp),%xmm0
movss  %xmm0,-0x4c(%rbp)
cmpl   $0x76c,-0xc(%rbp)
je     1212 <julday+0x112>
cmpl   $0x834,-0xc(%rbp)
je     1212 <julday+0x112>
movss  -0x4c(%rbp),%xmm0
divss  -0x5c(%rbp),%xmm0
movss  %xmm0,-0x60(%rbp)
cvttss2si -0x60(%rbp),%eax
mov    %eax,-0x48(%rbp)
movss  -0x60(%rbp),%xmm0
cvtsi2ssl -0x48(%rbp),%xmm1
subss  %xmm1,%xmm0
movss  %xmm0,-0x64(%rbp)
movss  -0x64(%rbp),%xmm0
mulss  -0x5c(%rbp),%xmm0
movss  %xmm0,-0x58(%rbp)
movss  -0x58(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
xorps  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
jbe    1206 <julday+0x106>
cmpl   $0x2,-0x4(%rbp)
jle    1206 <julday+0x106>
movl   $0x1,-0x44(%rbp)
jmp    120d <julday+0x10d>
movl   $0x0,-0x44(%rbp)
jmp    1212 <julday+0x112>
movslq -0x4(%rbp),%rax
mov    -0x40(%rbp,%rax,4),%eax
add    -0x8(%rbp),%eax
sub    $0x1,%eax
add    -0x44(%rbp),%eax
cvtsi2ss %eax,%xmm0
movss  %xmm0,-0x50(%rbp)
cmpl   $0x0,-0x44(%rbp)
je     1266 <julday+0x166>
movss  -0x4c(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
movss  -0x50(%rbp),%xmm1
cvtss2sd %xmm1,%xmm1
movsd  0xdc0(%rip),%xmm2
divsd  %xmm2,%xmm1
addsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,-0x54(%rbp)
jmp    1291 <julday+0x191>
movss  -0x4c(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
movss  -0x50(%rbp),%xmm1
cvtss2sd %xmm1,%xmm1
movsd  0xd88(%rip),%xmm2
divsd  %xmm2,%xmm1
addsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,-0x54(%rbp)
movss  -0x54(%rbp),%xmm0
pop    %rbp
ret

x86 assembly (clang, -O2):
<julday>:
movaps 0xef9(%rip),%xmm0
movups %xmm0,-0x34(%rsp)
movaps 0xefd(%rip),%xmm0
movups %xmm0,-0x24(%rsp)
movaps 0xf01(%rip),%xmm0
movups %xmm0,-0x14(%rsp)
xorps  %xmm0,%xmm0
cvtsi2ss %edx,%xmm0
cmp    $0x834,%edx
je     113b <julday+0x3b>
cmp    $0x76c,%edx
jne    114d <julday+0x4d>
movslq %edi,%rax
mov    -0x38(%rsp,%rax,4),%eax
add    %esi,%eax
add    $0xffffffff,%eax
cvtsi2ss %eax,%xmm1
jmp    11a3 <julday+0xa3>
movss  0xedb(%rip),%xmm1
mulss  %xmm0,%xmm1
cvttps2dq %xmm1,%xmm2
cvtdq2ps %xmm2,%xmm2
subss  %xmm2,%xmm1
mulss  0xec8(%rip),%xmm1
xorps  %xmm2,%xmm2
ucomiss %xmm2,%xmm1
seta   %al
cmp    $0x3,%edi
setge  %cl
and    %al,%cl
movzbl %cl,%eax
movslq %edi,%rcx
mov    -0x38(%rsp,%rcx,4),%ecx
add    %eax,%esi
add    %esi,%ecx
add    $0xffffffff,%ecx
xorps  %xmm1,%xmm1
cvtsi2ss %ecx,%xmm1
test   %al,%al
je     11a3 <julday+0xa3>
movsd  0xe97(%rip),%xmm2
jmp    11ab <julday+0xab>
movsd  0xe95(%rip),%xmm2
cvtss2sd %xmm0,%xmm0
cvtss2sd %xmm1,%xmm1
divsd  %xmm2,%xmm1
addsd  %xmm0,%xmm1
xorps  %xmm0,%xmm0
cvtsd2ss %xmm1,%xmm0
ret

LLVM IR (-O0):
define float @julday(i32 %0, i32 %1, i32 %2) {
%4 = alloca i32
%5 = alloca i32
%6 = alloca i32
%7 = alloca [13 x i32]
%8 = alloca i32
%9 = alloca i32
%10 = alloca float
%11 = alloca float
%12 = alloca float
%13 = alloca float
%14 = alloca float
%15 = alloca float
%16 = alloca float
store i32 %0, i32* %4
store i32 %1, i32* %5
store i32 %2, i32* %6
store i32 0, i32* %8
store float 0.000000e+00, float* %13
store float 4.000000e+00, float* %14
%17 = getelementptr inbounds [13 x i32], [13 x i32]* %7, i64 0, i64 1
store i32 1, i32* %17
%18 = getelementptr inbounds [13 x i32], [13 x i32]* %7, i64 0, i64 2
store i32 32, i32* %18
%19 = getelementptr inbounds [13 x i32], [13 x i32]* %7, i64 0, i64 3
store i32 60, i32* %19
%20 = getelementptr inbounds [13 x i32], [13 x i32]* %7, i64 0, i64 4
store i32 91, i32* %20
%21 = getelementptr inbounds [13 x i32], [13 x i32]* %7, i64 0, i64 5
store i32 121, i32* %21
%22 = getelementptr inbounds [13 x i32], [13 x i32]* %7, i64 0, i64 6
store i32 152, i32* %22
%23 = getelementptr inbounds [13 x i32], [13 x i32]* %7, i64 0, i64 7
store i32 182, i32* %23
%24 = getelementptr inbounds [13 x i32], [13 x i32]* %7, i64 0, i64 8
store i32 213, i32* %24
%25 = getelementptr inbounds [13 x i32], [13 x i32]* %7, i64 0, i64 9
store i32 244, i32* %25
%26 = getelementptr inbounds [13 x i32], [13 x i32]* %7, i64 0, i64 10
store i32 274, i32* %26
%27 = getelementptr inbounds [13 x i32], [13 x i32]* %7, i64 0, i64 11
store i32 305, i32* %27
%28 = getelementptr inbounds [13 x i32], [13 x i32]* %7, i64 0, i64 12
store i32 335, i32* %28
%29 = load i32, i32* %6
%30 = sitofp i32 %29 to float
store float %30, float* %10
%31 = load i32, i32* %6
%32 = icmp ne i32 %31, 1900
br i1 %32, label %33, label %58
33: ; preds = %3
%34 = load i32, i32* %6
%35 = icmp ne i32 %34, 2100
br i1 %35, label %36, label %58
36: ; preds = %33
%37 = load float, float* %10
%38 = load float, float* %14
%39 = fdiv float %37, %38
store float %39, float* %15
%40 = load float, float* %15
%41 = fptosi float %40 to i32
store i32 %41, i32* %9
%42 = load float, float* %15
%43 = load i32, i32* %9
%44 = sitofp i32 %43 to float
%45 = fsub float %42, %44
store float %45, float* %16
%46 = load float, float* %16
%47 = load float, float* %14
%48 = fmul float %46, %47
store float %48, float* %13
%49 = load float, float* %13
%50 = fpext float %49 to double
%51 = fcmp ogt double %50, 0.000000e+00
br i1 %51, label %52, label %56
52: ; preds = %36
%53 = load i32, i32* %4
%54 = icmp sgt i32 %53, 2
br i1 %54, label %55, label %56
55: ; preds = %52
store i32 1, i32* %8
br label %57
56: ; preds = %52, %36
store i32 0, i32* %8
br label %57
57: ; preds = %56, %55
br label %58
58: ; preds = %57, %33, %3
%59 = load i32, i32* %4
%60 = sext i32 %59 to i64
%61 = getelementptr inbounds [13 x i32], [13 x i32]* %7, i64 0, i64 %60
%62 = load i32, i32* %61
%63 = load i32, i32* %5
%64 = add nsw i32 %62, %63
%65 = sub nsw i32 %64, 1
%66 = load i32, i32* %8
%67 = add nsw i32 %65, %66
%68 = sitofp i32 %67 to float
store float %68, float* %11
%69 = load i32, i32* %8
%70 = icmp ne i32 %69, 0
br i1 %70, label %71, label %79
71: ; preds = %58
%72 = load float, float* %10
%73 = fpext float %72 to double
%74 = load float, float* %11
%75 = fpext float %74 to double
%76 = fdiv double %75, 3.660000e+02
%77 = fadd double %73, %76
%78 = fptrunc double %77 to float
store float %78, float* %12
br label %87
79: ; preds = %58
%80 = load float, float* %10
%81 = fpext float %80 to double
%82 = load float, float* %11
%83 = fpext float %82 to double
%84 = fdiv double %83, 3.650000e+02
%85 = fadd double %81, %84
%86 = fptrunc double %85 to float
store float %86, float* %12
br label %87
87: ; preds = %79, %71
%88 = load float, float* %12
ret float %88
}

LLVM IR (-O2):
define float @julday(i32 %0, i32 %1, i32 %2) {
%4 = alloca [13 x i32]
%5 = bitcast [13 x i32]* %4 to i8*
%6 = getelementptr inbounds [13 x i32], [13 x i32]* %4, i64 0, i64 1
%7 = bitcast i32* %6 to <4 x i32>*
store <4 x i32> <i32 1, i32 32, i32 60, i32 91>, <4 x i32>* %7
%8 = getelementptr inbounds [13 x i32], [13 x i32]* %4, i64 0, i64 5
%9 = bitcast i32* %8 to <4 x i32>*
store <4 x i32> <i32 121, i32 152, i32 182, i32 213>, <4 x i32>* %9
%10 = getelementptr inbounds [13 x i32], [13 x i32]* %4, i64 0, i64 9
%11 = bitcast i32* %10 to <4 x i32>*
store <4 x i32> <i32 244, i32 274, i32 305, i32 335>, <4 x i32>* %11
%12 = sitofp i32 %2 to float
switch i32 %2, label %20 [
i32 2100, label %13
i32 1900, label %13
]
13: ; preds = %3, %3
%14 = sext i32 %0 to i64
%15 = getelementptr inbounds [13 x i32], [13 x i32]* %4, i64 0, i64 %14
%16 = load i32, i32* %15
%17 = add i32 %1, -1
%18 = add i32 %17, %16
%19 = sitofp i32 %18 to float
br label %37
20: ; preds = %3
%21 = fmul float %12, 2.500000e-01
%22 = fptosi float %21 to i32
%23 = sitofp i32 %22 to float
%24 = fsub float %21, %23
%25 = fmul float %24, 4.000000e+00
%26 = fcmp ogt float %25, 0.000000e+00
%27 = icmp sgt i32 %0, 2
%28 = and i1 %27, %26
%29 = zext i1 %28 to i32
%30 = sext i32 %0 to i64
%31 = getelementptr inbounds [13 x i32], [13 x i32]* %4, i64 0, i64 %30
%32 = load i32, i32* %31
%33 = add i32 %1, -1
%34 = add i32 %33, %29
%35 = add i32 %34, %32
%36 = sitofp i32 %35 to float
br i1 %28, label %39, label %37
37: ; preds = %13, %20
%38 = phi float [ %19, %13 ], [ %36, %20 ]
br label %39
39: ; preds = %20, %37
%40 = phi float [ %38, %37 ], [ %36, %20 ]
%41 = phi double [ 3.650000e+02, %37 ], [ 3.660000e+02, %20 ]
%42 = fpext float %12 to double
%43 = fpext float %40 to double
%44 = fdiv double %43, %41
%45 = fadd double %44, %42
%46 = fptrunc double %45 to float
ret float %46
}