void convertSeconds(int totSeconds, int *days, int *hours, int *minutes,
                    int *seconds) {
  *days = totSeconds / 86400;
  totSeconds -= 86400 * (*days);
  *hours = totSeconds / 3600;
  totSeconds -= 3600 * (*hours);
  *minutes = totSeconds / 60;
  totSeconds -= 60 * (*minutes);
  *seconds = totSeconds;
}


x86 assembly (clang, -O0):
<convertSeconds>:
push   %rbp
mov    %rsp,%rbp
mov    %edi,-0x4(%rbp)
mov    %rsi,-0x10(%rbp)
mov    %rdx,-0x18(%rbp)
mov    %rcx,-0x20(%rbp)
mov    %r8,-0x28(%rbp)
mov    -0x4(%rbp),%eax
mov    $0x15180,%ecx
cltd
idiv   %ecx
mov    %eax,%ecx
mov    -0x10(%rbp),%rax
mov    %ecx,(%rax)
mov    -0x10(%rbp),%rax
imul   $0x15180,(%rax),%ecx
mov    -0x4(%rbp),%eax
sub    %ecx,%eax
mov    %eax,-0x4(%rbp)
mov    -0x4(%rbp),%eax
mov    $0xe10,%ecx
cltd
idiv   %ecx
mov    %eax,%ecx
mov    -0x18(%rbp),%rax
mov    %ecx,(%rax)
mov    -0x18(%rbp),%rax
imul   $0xe10,(%rax),%ecx
mov    -0x4(%rbp),%eax
sub    %ecx,%eax
mov    %eax,-0x4(%rbp)
mov    -0x4(%rbp),%eax
mov    $0x3c,%ecx
cltd
idiv   %ecx
mov    %eax,%ecx
mov    -0x20(%rbp),%rax
mov    %ecx,(%rax)
mov    -0x20(%rbp),%rax
imul   $0x3c,(%rax),%ecx
mov    -0x4(%rbp),%eax
sub    %ecx,%eax
mov    %eax,-0x4(%rbp)
mov    -0x4(%rbp),%ecx
mov    -0x28(%rbp),%rax
mov    %ecx,(%rax)
pop    %rbp
ret

x86 assembly (clang, -O2):
<convertSeconds>:
movslq %edi,%r9
imul   $0xffffffffc22e4507,%r9,%rdi
shr    $0x20,%rdi
add    %r9d,%edi
mov    %edi,%eax
shr    $0x1f,%eax
sar    $0x10,%edi
add    %eax,%edi
mov    %edi,(%rsi)
imul   $0xfffeae80,%edi,%eax
add    %r9d,%eax
cltq
imul   $0xffffffff91a2b3c5,%rax,%rsi
shr    $0x20,%rsi
add    %eax,%esi
mov    %esi,%edi
shr    $0x1f,%edi
sar    $0xb,%esi
add    %edi,%esi
mov    %esi,(%rdx)
imul   $0xfffff1f0,%esi,%edx
add    %eax,%edx
movslq %edx,%rax
imul   $0xffffffff88888889,%rax,%rdx
shr    $0x20,%rdx
add    %eax,%edx
mov    %edx,%esi
shr    $0x1f,%esi
sar    $0x5,%edx
add    %esi,%edx
mov    %edx,(%rcx)
imul   $0xffffffc4,%edx,%ecx
add    %eax,%ecx
mov    %ecx,(%r8)
ret

LLVM IR (-O0):
define void @convertSeconds(i32 %0, i32* %1, i32* %2, i32* %3, i32* %4) {
%6 = alloca i32
%7 = alloca i32*
%8 = alloca i32*
%9 = alloca i32*
%10 = alloca i32*
store i32 %0, i32* %6
store i32* %1, i32** %7
store i32* %2, i32** %8
store i32* %3, i32** %9
store i32* %4, i32** %10
%11 = load i32, i32* %6
%12 = sdiv i32 %11, 86400
%13 = load i32*, i32** %7
store i32 %12, i32* %13
%14 = load i32*, i32** %7
%15 = load i32, i32* %14
%16 = mul nsw i32 86400, %15
%17 = load i32, i32* %6
%18 = sub nsw i32 %17, %16
store i32 %18, i32* %6
%19 = load i32, i32* %6
%20 = sdiv i32 %19, 3600
%21 = load i32*, i32** %8
store i32 %20, i32* %21
%22 = load i32*, i32** %8
%23 = load i32, i32* %22
%24 = mul nsw i32 3600, %23
%25 = load i32, i32* %6
%26 = sub nsw i32 %25, %24
store i32 %26, i32* %6
%27 = load i32, i32* %6
%28 = sdiv i32 %27, 60
%29 = load i32*, i32** %9
store i32 %28, i32* %29
%30 = load i32*, i32** %9
%31 = load i32, i32* %30
%32 = mul nsw i32 60, %31
%33 = load i32, i32* %6
%34 = sub nsw i32 %33, %32
store i32 %34, i32* %6
%35 = load i32, i32* %6
%36 = load i32*, i32** %10
store i32 %35, i32* %36
ret void
}

LLVM IR (-O2):
define void @convertSeconds(i32 %0, i32* nocapture writeonly %1, i32* nocapture writeonly %2, i32* nocapture writeonly %3, i32* nocapture writeonly %4) {
%6 = sdiv i32 %0, 86400
store i32 %6, i32* %1
%7 = mul nsw i32 %6, -86400
%8 = add i32 %7, %0
%9 = sdiv i32 %8, 3600
store i32 %9, i32* %2
%10 = mul nsw i32 %9, -3600
%11 = add i32 %10, %8
%12 = sdiv i32 %11, 60
store i32 %12, i32* %3
%13 = mul nsw i32 %12, -60
%14 = add i32 %13, %11
store i32 %14, i32* %4
ret void
}