netcdf2julian(record, sdate, stime, tstep, year, day, hour, min,
              sec) int record;
int sdate;
int stime;
int tstep;
int *year;
int *day;
int *hour;
int *min;
int *sec;
{
  int time;
  *year = sdate / 1000;
  *day = sdate - (*year * 1000);
  time = stime + (record - 1) * tstep;
  *hour = time / 10000;
  *min = (time - (*hour * 10000)) / 100;
  *sec = time - (*hour * 10000) - (*min * 100);
}


x86 assembly (clang, -O0):
<netcdf2julian>:
push   %rbp
mov    %rsp,%rbp
mov    0x20(%rbp),%rax
mov    0x18(%rbp),%rax
mov    0x10(%rbp),%rax
mov    %edi,-0x8(%rbp)
mov    %esi,-0xc(%rbp)
mov    %edx,-0x10(%rbp)
mov    %ecx,-0x14(%rbp)
mov    %r8,-0x20(%rbp)
mov    %r9,-0x28(%rbp)
mov    -0xc(%rbp),%eax
mov    $0x3e8,%ecx
cltd
idiv   %ecx
mov    %eax,%ecx
mov    -0x20(%rbp),%rax
mov    %ecx,(%rax)
mov    -0xc(%rbp),%ecx
mov    -0x20(%rbp),%rax
imul   $0x3e8,(%rax),%eax
sub    %eax,%ecx
mov    -0x28(%rbp),%rax
mov    %ecx,(%rax)
mov    -0x10(%rbp),%eax
mov    -0x8(%rbp),%ecx
sub    $0x1,%ecx
imul   -0x14(%rbp),%ecx
add    %ecx,%eax
mov    %eax,-0x2c(%rbp)
mov    -0x2c(%rbp),%eax
mov    $0x2710,%ecx
cltd
idiv   %ecx
mov    %eax,%ecx
mov    0x10(%rbp),%rax
mov    %ecx,(%rax)
mov    -0x2c(%rbp),%eax
mov    0x10(%rbp),%rcx
imul   $0x2710,(%rcx),%ecx
sub    %ecx,%eax
mov    $0x64,%ecx
cltd
idiv   %ecx
mov    %eax,%ecx
mov    0x18(%rbp),%rax
mov    %ecx,(%rax)
mov    -0x2c(%rbp),%ecx
mov    0x10(%rbp),%rax
imul   $0x2710,(%rax),%eax
sub    %eax,%ecx
mov    0x18(%rbp),%rax
imul   $0x64,(%rax),%eax
sub    %eax,%ecx
mov    0x20(%rbp),%rax
mov    %ecx,(%rax)
mov    -0x4(%rbp),%eax
pop    %rbp
ret

x86 assembly (clang, -O2):
<netcdf2julian>:
push   %r14
push   %rbx
mov    0x28(%rsp),%r10
mov    0x20(%rsp),%r11
mov    0x18(%rsp),%r14
movslq %esi,%rsi
imul   $0x10624dd3,%rsi,%rbx
mov    %rbx,%rax
shr    $0x3f,%rax
sar    $0x26,%rbx
add    %eax,%ebx
mov    %ebx,(%r8)
imul   $0xfffffc18,%ebx,%eax
add    %eax,%esi
mov    %esi,(%r9)
add    $0xffffffff,%edi
imul   %ecx,%edi
add    %edx,%edi
movslq %edi,%rax
imul   $0x68db8bad,%rax,%rcx
mov    %rcx,%rdx
shr    $0x3f,%rdx
sar    $0x2c,%rcx
add    %edx,%ecx
mov    %ecx,(%r14)
imul   $0xffffd8f0,%ecx,%ecx
add    %eax,%ecx
movslq %ecx,%rcx
imul   $0x51eb851f,%rcx,%rcx
mov    %rcx,%rdx
shr    $0x3f,%rdx
sar    $0x25,%rcx
add    %edx,%ecx
mov    %ecx,(%r11)
imul   $0xffffd8f0,(%r14),%edx
imul   $0xffffff9c,%ecx,%ecx
add    %eax,%ecx
add    %edx,%ecx
mov    %ecx,(%r10)
pop    %rbx
pop    %r14
ret

LLVM IR (-O0):
define i32 @netcdf2julian(i32 %0, i32 %1, i32 %2, i32 %3, i32* %4, i32* %5, i32* %6, i32* %7, i32* %8) {
%10 = alloca i32
%11 = alloca i32
%12 = alloca i32
%13 = alloca i32
%14 = alloca i32
%15 = alloca i32*
%16 = alloca i32*
%17 = alloca i32*
%18 = alloca i32*
%19 = alloca i32*
%20 = alloca i32
store i32 %0, i32* %11
store i32 %1, i32* %12
store i32 %2, i32* %13
store i32 %3, i32* %14
store i32* %4, i32** %15
store i32* %5, i32** %16
store i32* %6, i32** %17
store i32* %7, i32** %18
store i32* %8, i32** %19
%21 = load i32, i32* %12
%22 = sdiv i32 %21, 1000
%23 = load i32*, i32** %15
store i32 %22, i32* %23
%24 = load i32, i32* %12
%25 = load i32*, i32** %15
%26 = load i32, i32* %25
%27 = mul nsw i32 %26, 1000
%28 = sub nsw i32 %24, %27
%29 = load i32*, i32** %16
store i32 %28, i32* %29
%30 = load i32, i32* %13
%31 = load i32, i32* %11
%32 = sub nsw i32 %31, 1
%33 = load i32, i32* %14
%34 = mul nsw i32 %32, %33
%35 = add nsw i32 %30, %34
store i32 %35, i32* %20
%36 = load i32, i32* %20
%37 = sdiv i32 %36, 10000
%38 = load i32*, i32** %17
store i32 %37, i32* %38
%39 = load i32, i32* %20
%40 = load i32*, i32** %17
%41 = load i32, i32* %40
%42 = mul nsw i32 %41, 10000
%43 = sub nsw i32 %39, %42
%44 = sdiv i32 %43, 100
%45 = load i32*, i32** %18
store i32 %44, i32* %45
%46 = load i32, i32* %20
%47 = load i32*, i32** %17
%48 = load i32, i32* %47
%49 = mul nsw i32 %48, 10000
%50 = sub nsw i32 %46, %49
%51 = load i32*, i32** %18
%52 = load i32, i32* %51
%53 = mul nsw i32 %52, 100
%54 = sub nsw i32 %50, %53
%55 = load i32*, i32** %19
store i32 %54, i32* %55
%56 = load i32, i32* %10
ret i32 %56
}

LLVM IR (-O2):
define i32 @netcdf2julian(i32 %0, i32 %1, i32 %2, i32 %3, i32* nocapture writeonly %4, i32* nocapture writeonly %5, i32* nocapture %6, i32* nocapture writeonly %7, i32* nocapture writeonly %8) {
%10 = sdiv i32 %1, 1000
store i32 %10, i32* %4
%11 = mul nsw i32 %10, -1000
%12 = add i32 %11, %1
store i32 %12, i32* %5
%13 = add nsw i32 %0, -1
%14 = mul nsw i32 %13, %3
%15 = add nsw i32 %14, %2
%16 = sdiv i32 %15, 10000
store i32 %16, i32* %6
%17 = mul nsw i32 %16, -10000
%18 = add i32 %17, %15
%19 = sdiv i32 %18, 100
store i32 %19, i32* %7
%20 = load i32, i32* %6
%21 = mul i32 %20, -10000
%22 = mul nsw i32 %19, -100
%23 = add i32 %22, %15
%24 = add i32 %23, %21
store i32 %24, i32* %8
ret i32 undef
}