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

```asm
<mkgmtime>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  mov    %rdi,-0x18(%rbp)
  mov    -0x18(%rbp),%rax
  movzwl (%rax),%eax
  mov    %ax,-0x6(%rbp)
  mov    -0x18(%rbp),%rax
  movzwl 0x2(%rax),%eax
  mov    %eax,%esi
  movzwl -0x6(%rbp),%eax
  movswl %ax,%edx
  imul   $0x2aab,%edx,%edx
  shr    $0x10,%edx
  sar    %dx
  sar    $0xf,%ax
  mov    %eax,%ecx
  mov    %edx,%eax
  sub    %ecx,%eax
  add    %esi,%eax
  add    $0x76c,%ax
  mov    %ax,-0x4(%rbp)
  movzwl -0x6(%rbp),%edx
  movswl %dx,%eax
  imul   $0x2aab,%eax,%eax
  shr    $0x10,%eax
  sar    %ax
  mov    %edx,%esi
  sar    $0xf,%si
  sub    %esi,%eax
  mov    %eax,%ecx
  mov    %ecx,%eax
  add    %eax,%eax
  add    %ecx,%eax
  shl    $0x2,%eax
  sub    %eax,%edx
  mov    %dx,-0x6(%rbp)
  cmpw   $0x0,-0x6(%rbp)
  jns    L10
  movzwl -0x4(%rbp),%eax
  sub    $0x1,%eax
  mov    %ax,-0x4(%rbp)
  movzwl -0x6(%rbp),%eax
  add    $0xc,%eax
  mov    %ax,-0x6(%rbp)
L10:
  movswl -0x4(%rbp),%eax
  sub    $0x7b2,%eax
  mov    %eax,%edx
  mov    %edx,%eax
  shl    $0x3,%eax
  add    %edx,%eax
  shl    $0x3,%eax
  add    %edx,%eax
  lea    0x0(,%rax,4),%edx
  lea    (%rax,%rdx,1),%ecx
  movswl -0x6(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  lea    D3(%rip),%rax
  mov    (%rdx,%rax,1),%eax
  add    %ecx,%eax
  mov    %ax,-0x2(%rbp)
  cmpw   $0x1,-0x6(%rbp)
  jg     L16
  movzwl -0x4(%rbp),%eax
  sub    $0x1,%eax
  mov    %ax,-0x4(%rbp)
L16:
  movswl -0x4(%rbp),%eax
  sub    $0x7b0,%eax
  lea    0x3(%rax),%edx
  test   %eax,%eax
  cmovs  %edx,%eax
  sar    $0x2,%eax
  mov    %eax,%edx
  movzwl -0x2(%rbp),%eax
  add    %edx,%eax
  mov    %ax,-0x2(%rbp)
  movswl -0x4(%rbp),%eax
  sub    $0x76c,%eax
  movslq %eax,%rdx
  imul   $0x51eb851f,%rdx,%rdx
  shr    $0x20,%rdx
  sar    $0x5,%edx
  sar    $0x1f,%eax
  sub    %edx,%eax
  mov    %eax,%edx
  movzwl -0x2(%rbp),%eax
  add    %edx,%eax
  mov    %ax,-0x2(%rbp)
  movswl -0x4(%rbp),%eax
  sub    $0x640,%eax
  movslq %eax,%rdx
  imul   $0x51eb851f,%rdx,%rdx
  shr    $0x20,%rdx
  sar    $0x7,%edx
  sar    $0x1f,%eax
  mov    %eax,%ecx
  mov    %edx,%eax
  sub    %ecx,%eax
  mov    %eax,%edx
  movzwl -0x2(%rbp),%eax
  add    %edx,%eax
  mov    %ax,-0x2(%rbp)
  mov    -0x18(%rbp),%rax
  mov    0x20(%rax),%rax
  mov    %eax,%edx
  movzwl -0x2(%rbp),%eax
  add    %edx,%eax
  mov    %ax,-0x2(%rbp)
  movzwl -0x2(%rbp),%eax
  sub    $0x1,%eax
  mov    %ax,-0x2(%rbp)
  movzwl -0x2(%rbp),%edx
  mov    %edx,%eax
  add    %eax,%eax
  add    %edx,%eax
  shl    $0x3,%eax
  mov    %ax,-0x2(%rbp)
  mov    -0x18(%rbp),%rax
  mov    0x18(%rax),%rax
  mov    %eax,%edx
  movzwl -0x2(%rbp),%eax
  add    %edx,%eax
  mov    %ax,-0x2(%rbp)
  movzwl -0x2(%rbp),%edx
  mov    %edx,%eax
  shl    $0x4,%eax
  sub    %edx,%eax
  shl    $0x2,%eax
  mov    %ax,-0x2(%rbp)
  mov    -0x18(%rbp),%rax
  mov    0x10(%rax),%rax
  mov    %eax,%edx
  movzwl -0x2(%rbp),%eax
  add    %edx,%eax
  mov    %ax,-0x2(%rbp)
  movzwl -0x2(%rbp),%edx
  mov    %edx,%eax
  shl    $0x4,%eax
  sub    %edx,%eax
  shl    $0x2,%eax
  mov    %ax,-0x2(%rbp)
  mov    -0x18(%rbp),%rax
  mov    0x8(%rax),%rax
  mov    %eax,%edx
  movzwl -0x2(%rbp),%eax
  add    %edx,%eax
  mov    %ax,-0x2(%rbp)
  movzwl -0x2(%rbp),%eax
  pop    %rbp
  ret
```

assistant: ```c
time_t mkgmtime(struct tm *t) {
  short month, year;
  time_t result;
  static int m_to_d[12] = {0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334};
  month = t->tm_mon;
  year = t->tm_year + month / 12 + 1900;
  month %= 12;
  if (month < 0) {
    year -= 1;
    month += 12;
  }
  result = (year - 1970) * 365 + m_to_d[month];
  if (month <= 1)
    year -= 1;
  result += (year - 1968) / 4;
  result -= (year - 1900) / 100;
  result += (year - 1600) / 400;
  result += t->tm_mday;
  result -= 1;
  result *= 24;
  result += t->tm_hour;
  result *= 60;
  result += t->tm_min;
  result *= 60;
  result += t->tm_sec;
  return (result);
}
```