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

```asm
<mjd_to_date>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  push   %rbx
  sub    $0x38,%rsp
  mov    %rdi,-0x38(%rbp)
  mov    -0x38(%rbp),%rax
  add    $0x249f01,%rax
  mov    %rax,-0x20(%rbp)
  pxor   %xmm0,%xmm0
  cvtsi2sdq -0x20(%rbp),%xmm0
  movsd  D98(%rip),%xmm1
  subsd  %xmm1,%xmm0
  movsd  %xmm0,-0x40(%rbp)
  pxor   %xmm0,%xmm0
  cvtsi2sdq -0x20(%rbp),%xmm0
  movsd  D23(%rip),%xmm1
  subsd  %xmm1,%xmm0
  movsd  D89(%rip),%xmm1
  movapd %xmm0,%xmm4
  divsd  %xmm1,%xmm4
  movq   %xmm4,%rax
  movq   %rax,%xmm0
  call   <floor@plt>
  pxor   %xmm1,%xmm1
  cvtsi2sd %eax,%xmm1
  movsd  D61(%rip),%xmm0
  mulsd  %xmm0,%xmm1
  movq   %xmm1,%rax
  movq   %rax,%xmm0
  call   <floor@plt>
  pxor   %xmm0,%xmm0
  cvtsi2sd %eax,%xmm0
  addsd  -0x40(%rbp),%xmm0
  movsd  %xmm0,-0x18(%rbp)
  movsd  -0x18(%rbp),%xmm0
  movsd  D109(%rip),%xmm1
  divsd  %xmm1,%xmm0
  movq   %xmm0,%rax
  movq   %rax,%xmm0
  call   <floor@plt>
  pxor   %xmm1,%xmm1
  cvtsi2sd %eax,%xmm1
  movsd  D109(%rip),%xmm0
  mulsd  %xmm0,%xmm1
  movq   %xmm1,%rax
  movq   %rax,%xmm0
  call   <floor@plt>
  pxor   %xmm2,%xmm2
  cvtsi2sd %eax,%xmm2
  movsd  -0x18(%rbp),%xmm0
  movapd %xmm0,%xmm1
  subsd  %xmm2,%xmm1
  movsd  D111(%rip),%xmm0
  addsd  %xmm0,%xmm1
  movq   %xmm1,%rax
  movq   %rax,%xmm0
  call   <floor@plt>
  mov    %eax,-0x2c(%rbp)
  movsd  -0x18(%rbp),%xmm0
  movsd  D109(%rip),%xmm1
  divsd  %xmm1,%xmm0
  movq   %xmm0,%rax
  movq   %rax,%xmm0
  call   <floor@plt>
  mov    %eax,%ebx
  mov    -0x2c(%rbp),%eax
  movslq %eax,%rdx
  imul   $0x13187759,%rdx,%rdx
  shr    $0x20,%rdx
  sar    $0x5,%edx
  sar    $0x1f,%eax
  mov    %eax,%ecx
  mov    %edx,%eax
  sub    %ecx,%eax
  pxor   %xmm5,%xmm5
  cvtsi2sd %eax,%xmm5
  movq   %xmm5,%rax
  movq   %rax,%xmm0
  call   <floor@plt>
  add    %ebx,%eax
  mov    %eax,-0x28(%rbp)
  pxor   %xmm0,%xmm0
  cvtsi2sdl -0x2c(%rbp),%xmm0
  movsd  D20(%rip),%xmm1
  divsd  %xmm1,%xmm0
  movq   %xmm0,%rax
  movq   %rax,%xmm0
  call   <floor@plt>
  lea    -0x1(%rax),%ebx
  mov    -0x2c(%rbp),%eax
  movslq %eax,%rdx
  imul   $0x13187759,%rdx,%rdx
  shr    $0x20,%rdx
  sar    $0x5,%edx
  sar    $0x1f,%eax
  mov    %eax,%ecx
  mov    %edx,%eax
  sub    %ecx,%eax
  pxor   %xmm6,%xmm6
  cvtsi2sd %eax,%xmm6
  movq   %xmm6,%rax
  movq   %rax,%xmm0
  call   <floor@plt>
  mov    %eax,%edx
  mov    %edx,%eax
  shl    $0x2,%edx
  sub    %edx,%eax
  shl    $0x2,%eax
  add    %ebx,%eax
  mov    %eax,-0x24(%rbp)
  pxor   %xmm0,%xmm0
  cvtsi2sdl -0x2c(%rbp),%xmm0
  movsd  D20(%rip),%xmm1
  divsd  %xmm1,%xmm0
  movq   %xmm0,%rax
  movq   %rax,%xmm0
  call   <floor@plt>
  pxor   %xmm1,%xmm1
  cvtsi2sd %eax,%xmm1
  movsd  D20(%rip),%xmm0
  mulsd  %xmm0,%xmm1
  movq   %xmm1,%rax
  movq   %rax,%xmm0
  call   <floor@plt>
  sub    %eax,-0x2c(%rbp)
  mov    -0x28(%rbp),%ecx
  mov    -0x24(%rbp),%edx
  mov    -0x2c(%rbp),%eax
  mov    %eax,%esi
  lea    D56(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
  nop
  mov    -0x8(%rbp),%rbx
  leave
  ret
```

tool_calls: name: unpack_data
arguments: label: D98
datatype: f64
name: unpack_data
arguments: label: D23
datatype: f64
name: unpack_data
arguments: label: D89
datatype: f64
name: unpack_data
arguments: label: D61
datatype: f64
name: unpack_data
arguments: label: D109
datatype: f64
name: unpack_data
arguments: label: D111
datatype: f64
name: unpack_data
arguments: label: D20
datatype: f64
name: unpack_data
arguments: label: D56
datatype: string

tool: D98: 1721119.1

tool: D23: 1684594.75

tool: D89: 36524.25

tool: D61: 0.75

tool: D109: 365.25

tool: D111: 122.2

tool: D20: 30.61

tool: D56: %2d %2d %4d

assistant: ```c
void mjd_to_date(long mjd) {
  int day, month, year;
  long julian;
  double y2;
  julian = mjd + 2400001l;
  y2 = julian - 1721119.1 + floor(0.75 * floor((julian - 1684594.75) / 36524.25));
  day = floor(y2 - floor(365.25 * floor(y2 / 365.25)) + 122.2);
  year = floor(y2 / 365.25) + floor(day / 429);
  month = floor(day / 30.61) - 1 - floor(day / 429) * 12;
  day = day - floor(30.61 * floor(day / 30.61));
  printf("%2d %2d %4d", day, month, year);
}
```