user: What would the C source look like for the assembly code provided here:

```asm
<tm_getisoweek>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  push   %rbx
  sub    $0x28,%rsp
  mov    %rdi,%rax
  mov    %rsi,%rcx
  mov    %rcx,%rdx
  mov    %rax,-0x30(%rbp)
  mov    %rdx,-0x28(%rbp)
  mov    -0x30(%rbp),%esi
  mov    -0x2c(%rbp),%eax
  add    $0x6,%eax
  movslq %eax,%rdx
  imul   $0xffffffff92492493,%rdx,%rdx
  shr    $0x20,%rdx
  add    %eax,%edx
  sar    $0x2,%edx
  mov    %eax,%edi
  sar    $0x1f,%edi
  mov    %edx,%ecx
  sub    %edi,%ecx
  mov    %ecx,%edx
  shl    $0x3,%edx
  sub    %ecx,%edx
  sub    %edx,%eax
  mov    %eax,%ecx
  mov    %esi,%eax
  sub    %ecx,%eax
  add    $0xa,%eax
  movslq %eax,%rdx
  imul   $0xffffffff92492493,%rdx,%rdx
  shr    $0x20,%rdx
  add    %eax,%edx
  sar    $0x2,%edx
  sar    $0x1f,%eax
  mov    %eax,%ecx
  mov    %edx,%eax
  sub    %ecx,%eax
  mov    %eax,-0x14(%rbp)
  cmpl   $0x0,-0x14(%rbp)
  jne    L0
  mov    -0x30(%rbp),%eax
  lea    0x16d(%rax),%ebx
  mov    -0x28(%rbp),%rax
  add    $0x76b,%rax
  mov    %rax,%rdi
  call   <tm_isleapyear@plt>
  lea    (%rbx,%rax,1),%esi
  mov    -0x2c(%rbp),%eax
  add    $0x6,%eax
  movslq %eax,%rdx
  imul   $0xffffffff92492493,%rdx,%rdx
  shr    $0x20,%rdx
  add    %eax,%edx
  sar    $0x2,%edx
  mov    %eax,%edi
  sar    $0x1f,%edi
  mov    %edx,%ecx
  sub    %edi,%ecx
  mov    %ecx,%edx
  shl    $0x3,%edx
  sub    %ecx,%edx
  sub    %edx,%eax
  mov    %eax,%ecx
  mov    %esi,%eax
  sub    %ecx,%eax
  add    $0xa,%eax
  movslq %eax,%rdx
  imul   $0xffffffff92492493,%rdx,%rdx
  shr    $0x20,%rdx
  add    %eax,%edx
  sar    $0x2,%edx
  sar    $0x1f,%eax
  mov    %eax,%ecx
  mov    %edx,%eax
  sub    %ecx,%eax
  jmp    L33
L0:
  cmpl   $0x34,-0x14(%rbp)
  jle    L26
  mov    -0x30(%rbp),%eax
  lea    -0x16d(%rax),%ebx
  mov    -0x28(%rbp),%rax
  add    $0x76c,%rax
  mov    %rax,%rdi
  call   <tm_isleapyear@plt>
  sub    %eax,%ebx
  mov    %ebx,%esi
  mov    -0x2c(%rbp),%eax
  add    $0x6,%eax
  movslq %eax,%rdx
  imul   $0xffffffff92492493,%rdx,%rdx
  shr    $0x20,%rdx
  add    %eax,%edx
  sar    $0x2,%edx
  mov    %eax,%edi
  sar    $0x1f,%edi
  mov    %edx,%ecx
  sub    %edi,%ecx
  mov    %ecx,%edx
  shl    $0x3,%edx
  sub    %ecx,%edx
  sub    %edx,%eax
  mov    %eax,%ecx
  mov    %esi,%eax
  sub    %ecx,%eax
  cmp    $0xfffffffd,%eax
  jl     L26
  mov    -0x30(%rbp),%eax
  lea    -0x16d(%rax),%ebx
  mov    -0x28(%rbp),%rax
  add    $0x76c,%rax
  mov    %rax,%rdi
  call   <tm_isleapyear@plt>
  mov    %ebx,%esi
  sub    %eax,%esi
  mov    -0x2c(%rbp),%eax
  add    $0x6,%eax
  movslq %eax,%rdx
  imul   $0xffffffff92492493,%rdx,%rdx
  shr    $0x20,%rdx
  add    %eax,%edx
  sar    $0x2,%edx
  mov    %eax,%edi
  sar    $0x1f,%edi
  mov    %edx,%ecx
  sub    %edi,%ecx
  mov    %ecx,%edx
  shl    $0x3,%edx
  sub    %ecx,%edx
  sub    %edx,%eax
  mov    %eax,%ecx
  mov    %esi,%eax
  sub    %ecx,%eax
  add    $0xa,%eax
  movslq %eax,%rdx
  imul   $0xffffffff92492493,%rdx,%rdx
  shr    $0x20,%rdx
  add    %eax,%edx
  sar    $0x2,%edx
  sar    $0x1f,%eax
  mov    %eax,%ecx
  mov    %edx,%eax
  sub    %ecx,%eax
  jmp    L33
L26:
  mov    -0x14(%rbp),%eax
L33:
  mov    -0x8(%rbp),%rbx
  leave
  ret
```

assistant: ```c
int tm_getisoweek(struct tm date) {
  int week = (date.tm_yday - (date.tm_wday + 6) % 7 + 10) / 7;
  if (week == 0)
    return (date.tm_yday + 365 + tm_isleapyear(date.tm_year + 1900 - 1) - (date.tm_wday + 6) % 7 + 10) / 7;
  else if (week > 52 && ((date.tm_yday - 365 - tm_isleapyear(date.tm_year + 1900) - (date.tm_wday + 6) % 7 + 10) / 7) > 0)
    return (date.tm_yday - 365 - tm_isleapyear(date.tm_year + 1900) - (date.tm_wday + 6) % 7 + 10) / 7;
  else
    return week;
}
```