double Julian_Date_of_Year(double year) {
  long A, B, i;
  double jdoy;
  year = year - 1;
  i = year / 100;
  A = i;
  i = A / 4;
  B = 2 - A + i;
  i = 365.25 * year;
  i += 30.6001 * 14;
  jdoy = i + 1720994.5 + B;
  return jdoy;
}


x86 assembly (clang, -O0):
<Julian_Date_of_Year>:
push   %rbp
mov    %rsp,%rbp
movsd  %xmm0,-0x8(%rbp)
movsd  -0x8(%rbp),%xmm0
movsd  0xf0a(%rip),%xmm1
subsd  %xmm1,%xmm0
movsd  %xmm0,-0x8(%rbp)
movsd  -0x8(%rbp),%xmm0
movsd  0xeec(%rip),%xmm1
divsd  %xmm1,%xmm0
cvttsd2si %xmm0,%rax
mov    %rax,-0x20(%rbp)
mov    -0x20(%rbp),%rax
mov    %rax,-0x10(%rbp)
mov    -0x10(%rbp),%rax
mov    $0x4,%ecx
cqto
idiv   %rcx
mov    %rax,-0x20(%rbp)
mov    $0x2,%eax
sub    -0x10(%rbp),%rax
add    -0x20(%rbp),%rax
mov    %rax,-0x18(%rbp)
movsd  0xea4(%rip),%xmm0
mulsd  -0x8(%rbp),%xmm0
cvttsd2si %xmm0,%rax
mov    %rax,-0x20(%rbp)
cvtsi2sdq -0x20(%rbp),%xmm0
movsd  0xe80(%rip),%xmm1
addsd  %xmm1,%xmm0
cvttsd2si %xmm0,%rax
mov    %rax,-0x20(%rbp)
cvtsi2sdq -0x20(%rbp),%xmm0
movsd  0xe5d(%rip),%xmm1
addsd  %xmm1,%xmm0
cvtsi2sdq -0x18(%rbp),%xmm1
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x28(%rbp)
movsd  -0x28(%rbp),%xmm0
pop    %rbp
ret

x86 assembly (clang, -O2):
<Julian_Date_of_Year>:
addsd  0xef8(%rip),%xmm0
movapd %xmm0,%xmm1
divsd  0xef4(%rip),%xmm1
cvttsd2si %xmm1,%rax
lea    0x3(%rax),%rcx
test   %rax,%rax
cmovns %rax,%rcx
sar    $0x2,%rcx
sub    %rax,%rcx
mulsd  0xedd(%rip),%xmm0
cvttsd2si %xmm0,%rax
xorps  %xmm0,%xmm0
cvtsi2sd %rax,%xmm0
addsd  0xed0(%rip),%xmm0
cvttsd2si %xmm0,%rax
xorps  %xmm1,%xmm1
cvtsi2sd %rax,%xmm1
addsd  0xec3(%rip),%xmm1
add    $0x2,%rcx
xorps  %xmm0,%xmm0
cvtsi2sd %rcx,%xmm0
addsd  %xmm1,%xmm0
ret

LLVM IR (-O0):
define double @Julian_Date_of_Year(double %0) {
%2 = alloca double
%3 = alloca i64
%4 = alloca i64
%5 = alloca i64
%6 = alloca double
store double %0, double* %2
%7 = load double, double* %2
%8 = fsub double %7, 1.000000e+00
store double %8, double* %2
%9 = load double, double* %2
%10 = fdiv double %9, 1.000000e+02
%11 = fptosi double %10 to i64
store i64 %11, i64* %5
%12 = load i64, i64* %5
store i64 %12, i64* %3
%13 = load i64, i64* %3
%14 = sdiv i64 %13, 4
store i64 %14, i64* %5
%15 = load i64, i64* %3
%16 = sub nsw i64 2, %15
%17 = load i64, i64* %5
%18 = add nsw i64 %16, %17
store i64 %18, i64* %4
%19 = load double, double* %2
%20 = fmul double 3.652500e+02, %19
%21 = fptosi double %20 to i64
store i64 %21, i64* %5
%22 = load i64, i64* %5
%23 = sitofp i64 %22 to double
%24 = fadd double %23, 0x407AC66C226809D5
%25 = fptosi double %24 to i64
store i64 %25, i64* %5
%26 = load i64, i64* %5
%27 = sitofp i64 %26 to double
%28 = fadd double %27, 0x413A42A280000000
%29 = load i64, i64* %4
%30 = sitofp i64 %29 to double
%31 = fadd double %28, %30
store double %31, double* %6
%32 = load double, double* %6
ret double %32
}

LLVM IR (-O2):
define double @Julian_Date_of_Year(double %0) {
%2 = fadd double %0, -1.000000e+00
%3 = fdiv double %2, 1.000000e+02
%4 = fptosi double %3 to i64
%5 = sdiv i64 %4, 4
%6 = sub i64 2, %4
%7 = add nsw i64 %6, %5
%8 = fmul double %2, 3.652500e+02
%9 = fptosi double %8 to i64
%10 = sitofp i64 %9 to double
%11 = fadd double %10, 0x407AC66C226809D5
%12 = fptosi double %11 to i64
%13 = sitofp i64 %12 to double
%14 = fadd double %13, 0x413A42A280000000
%15 = sitofp i64 %7 to double
%16 = fadd double %14, %15
ret double %16
}