long unjulian(long date) {
  int i;
  long res = 0;
  for (i = 92001 / 1000; i < date / 1000; i++)
    res += 365 + ((!(i % 4) && (i % 100)) ? 1 : 0);
  res += date % 1000 - 1;
  return (res);
}


x86 assembly (clang, -O0):
<unjulian>:
push   %rbp
mov    %rsp,%rbp
mov    %rdi,-0x8(%rbp)
movq   $0x0,-0x18(%rbp)
movl   $0x5c,-0xc(%rbp)
movslq -0xc(%rbp),%rax
mov    %rax,-0x20(%rbp)
mov    -0x8(%rbp),%rax
mov    $0x3e8,%ecx
cqto
idiv   %rcx
mov    %rax,%rcx
mov    -0x20(%rbp),%rax
cmp    %rcx,%rax
jge    1197 <unjulian+0x97>
mov    -0xc(%rbp),%eax
mov    $0x4,%ecx
cltd
idiv   %ecx
xor    %eax,%eax
cmp    $0x0,%edx
mov    %al,-0x21(%rbp)
jne    116a <unjulian+0x6a>
mov    -0xc(%rbp),%eax
mov    $0x64,%ecx
cltd
idiv   %ecx
cmp    $0x0,%edx
setne  %al
mov    %al,-0x21(%rbp)
mov    -0x21(%rbp),%dl
xor    %eax,%eax
mov    $0x1,%ecx
test   $0x1,%dl
cmovne %ecx,%eax
add    $0x16d,%eax
cltq
add    -0x18(%rbp),%rax
mov    %rax,-0x18(%rbp)
mov    -0xc(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0xc(%rbp)
jmp    1117 <unjulian+0x17>
mov    -0x8(%rbp),%rax
mov    $0x3e8,%ecx
cqto
idiv   %rcx
mov    %rdx,%rax
sub    $0x1,%rax
add    -0x18(%rbp),%rax
mov    %rax,-0x18(%rbp)
mov    -0x18(%rbp),%rax
pop    %rbp
ret

x86 assembly (clang, -O2):
<unjulian>:
mov    %rdi,%r10
movabs $0x20c49ba5e353f7cf,%r8
9b c4 20
cmp    $0x16b48,%rdi
jl     113a <unjulian+0x3a>
mov    %r10,%rax
shr    $0x3,%rax
mul    %r8
shr    $0x4,%rdx
lea    -0x5c(%rdx),%r9
cmp    $0x4,%r9
jae    1141 <unjulian+0x41>
mov    $0x5c,%edi
xor    %esi,%esi
jmp    12a0 <unjulian+0x1a0>
xor    %esi,%esi
jmp    12d4 <unjulian+0x1d4>
mov    %r9,%rcx
and    $0xfffffffffffffffc,%rcx
lea    0x5c(%rcx),%rdi
movdqa 0xeac(%rip),%xmm4
pxor   %xmm10,%xmm10
movdqa 0xeae(%rip),%xmm11
movdqa 0xec5(%rip),%xmm13
movaps 0xecd(%rip),%xmm14
movdqa 0xed4(%rip),%xmm15
movdqa 0xeeb(%rip),%xmm9
movdqa 0xef3(%rip),%xmm1
movdqa 0xefa(%rip),%xmm12
mov    %rcx,%rsi
pxor   %xmm2,%xmm2
pxor   %xmm3,%xmm3
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax,%rax,1)
movdqa %xmm4,%xmm0
pmuludq %xmm13,%xmm0
pshufd $0xe8,%xmm0,%xmm8
pshufd $0xf5,%xmm4,%xmm5
pmuludq %xmm13,%xmm5
pshufd $0xe8,%xmm5,%xmm5
punpckldq %xmm5,%xmm8
movdqa %xmm8,%xmm5
psrld  $0x2,%xmm5
movdqa %xmm8,%xmm0
pslld  $0x1e,%xmm0
por    %xmm5,%xmm0
shufps $0xe4,%xmm8,%xmm0
paddd  0xe67(%rip),%xmm8
movdqa %xmm8,%xmm5
psrld  $0x2,%xmm5
movdqa %xmm8,%xmm6
pslld  $0x1e,%xmm6
por    %xmm5,%xmm6
pshufd $0xd4,%xmm4,%xmm5
shufps $0xe4,%xmm8,%xmm6
movdqa %xmm5,%xmm7
pand   %xmm11,%xmm7
pcmpeqd %xmm10,%xmm7
shufps $0xd4,%xmm0,%xmm0
xorps  %xmm14,%xmm0
pcmpgtd %xmm15,%xmm0
pand   %xmm9,%xmm7
pand   %xmm0,%xmm7
paddd  0xdd9(%rip),%xmm5
pand   %xmm11,%xmm5
pcmpeqd %xmm10,%xmm5
shufps $0xd4,%xmm6,%xmm6
xorps  %xmm14,%xmm6
pcmpgtd %xmm15,%xmm6
pand   %xmm9,%xmm5
pand   %xmm6,%xmm5
paddq  %xmm1,%xmm2
paddq  %xmm7,%xmm2
paddq  %xmm1,%xmm3
paddq  %xmm5,%xmm3
paddd  %xmm12,%xmm4
add    $0xfffffffffffffffc,%rsi
jne    11b0 <unjulian+0xb0>
paddq  %xmm2,%xmm3
pshufd $0xee,%xmm3,%xmm0
paddq  %xmm3,%xmm0
movq   %xmm0,%rsi
cmp    %rcx,%r9
je     12d4 <unjulian+0x1d4>
nopl   (%rax)
mov    %edi,%ecx
imul   $0x51eb851f,%rcx,%rcx
shr    $0x25,%rcx
imul   $0x64,%ecx,%ecx
test   $0x3,%dil
sete   %al
cmp    %ecx,%edi
setne  %cl
and    %al,%cl
movzbl %cl,%eax
add    %rax,%rsi
add    $0x16d,%rsi
add    $0x1,%rdi
cmp    %rdi,%rdx
jne    12a0 <unjulian+0x1a0>
mov    %r10,%rax
imul   %r8
mov    %rdx,%rax
shr    $0x3f,%rax
sar    $0x7,%rdx
add    %rax,%rdx
imul   $0x3e8,%rdx,%rax
sub    %rax,%r10
lea    (%rsi,%r10,1),%rax
add    $0xffffffffffffffff,%rax
ret

LLVM IR (-O0):
define i64 @unjulian(i64 %0) {
%2 = alloca i64
%3 = alloca i32
%4 = alloca i64
store i64 %0, i64* %2
store i64 0, i64* %4
store i32 92, i32* %3
br label %5
5: ; preds = %27, %1
%6 = load i32, i32* %3
%7 = sext i32 %6 to i64
%8 = load i64, i64* %2
%9 = sdiv i64 %8, 1000
%10 = icmp slt i64 %7, %9
br i1 %10, label %11, label %30
11: ; preds = %5
%12 = load i32, i32* %3
%13 = srem i32 %12, 4
%14 = icmp ne i32 %13, 0
br i1 %14, label %19, label %15
15: ; preds = %11
%16 = load i32, i32* %3
%17 = srem i32 %16, 100
%18 = icmp ne i32 %17, 0
br label %19
19: ; preds = %15, %11
%20 = phi i1 [ false, %11 ], [ %18, %15 ]
%21 = zext i1 %20 to i64
%22 = select i1 %20, i32 1, i32 0
%23 = add nsw i32 365, %22
%24 = sext i32 %23 to i64
%25 = load i64, i64* %4
%26 = add nsw i64 %25, %24
store i64 %26, i64* %4
br label %27
27: ; preds = %19
%28 = load i32, i32* %3
%29 = add nsw i32 %28, 1
store i32 %29, i32* %3
br label %5
30: ; preds = %5
%31 = load i64, i64* %2
%32 = srem i64 %31, 1000
%33 = sub nsw i64 %32, 1
%34 = load i64, i64* %4
%35 = add nsw i64 %34, %33
store i64 %35, i64* %4
%36 = load i64, i64* %4
ret i64 %36
}

LLVM IR (-O2):
define i64 @unjulian(i64 %0) {
%2 = icmp sgt i64 %0, 92999
br i1 %2, label %3, label %53
3: ; preds = %1
%4 = udiv i64 %0, 1000
%5 = add nsw i64 %4, -92
%6 = icmp ult i64 %5, 4
br i1 %6, label %37, label %7
7: ; preds = %3
%8 = and i64 %5, -4
%9 = add nsw i64 %8, 92
br label %10
10: ; preds = %10, %7
%11 = phi i64 [ 0, %7 ], [ %30, %10 ]
%12 = phi <2 x i64> [ zeroinitializer, %7 ], [ %28, %10 ]
%13 = phi <2 x i64> [ zeroinitializer, %7 ], [ %29, %10 ]
%14 = phi <2 x i32> [ <i32 92, i32 93>, %7 ], [ %31, %10 ]
%15 = add <2 x i32> %14, <i32 2, i32 2>
%16 = and <2 x i32> %14, <i32 3, i32 3>
%17 = and <2 x i32> %15, <i32 3, i32 3>
%18 = icmp eq <2 x i32> %16, zeroinitializer
%19 = icmp eq <2 x i32> %17, zeroinitializer
%20 = urem <2 x i32> %14, <i32 100, i32 100>
%21 = urem <2 x i32> %15, <i32 100, i32 100>
%22 = icmp ne <2 x i32> %20, zeroinitializer
%23 = icmp ne <2 x i32> %21, zeroinitializer
%24 = and <2 x i1> %18, %22
%25 = and <2 x i1> %19, %23
%26 = select <2 x i1> %24, <2 x i64> <i64 366, i64 366>, <2 x i64> <i64 365, i64 365>
%27 = select <2 x i1> %25, <2 x i64> <i64 366, i64 366>, <2 x i64> <i64 365, i64 365>
%28 = add <2 x i64> %26, %12
%29 = add <2 x i64> %27, %13
%30 = add nuw i64 %11, 4
%31 = add <2 x i32> %14, <i32 4, i32 4>
%32 = icmp eq i64 %30, %8
br i1 %32, label %33, label %10
33: ; preds = %10
%34 = add <2 x i64> %29, %28
%35 = call i64 @llvm.vector.reduce.add.v2i64(<2 x i64> %34)
%36 = icmp eq i64 %5, %8
br i1 %36, label %53, label %37
37: ; preds = %3, %33
%38 = phi i64 [ 92, %3 ], [ %9, %33 ]
%39 = phi i64 [ 0, %3 ], [ %35, %33 ]
br label %40
40: ; preds = %37, %40
%41 = phi i64 [ %51, %40 ], [ %38, %37 ]
%42 = phi i64 [ %50, %40 ], [ %39, %37 ]
%43 = trunc i64 %41 to i32
%44 = and i32 %43, 3
%45 = icmp eq i32 %44, 0
%46 = urem i32 %43, 100
%47 = icmp ne i32 %46, 0
%48 = and i1 %45, %47
%49 = select i1 %48, i64 366, i64 365
%50 = add nuw nsw i64 %49, %42
%51 = add nuw nsw i64 %41, 1
%52 = icmp eq i64 %51, %4
br i1 %52, label %53, label %40
53: ; preds = %40, %33, %1
%54 = phi i64 [ 0, %1 ], [ %35, %33 ], [ %50, %40 ]
%55 = srem i64 %0, 1000
%56 = add nsw i64 %55, -1
%57 = add nsw i64 %56, %54
ret i64 %57
}