user: 请将这段汇编代码片段转换成等效的C代码：

```asm
<decode_julday>:
  endbr64
  push   %r14
  push   %r13
  push   %r12
  push   %rbp
  push   %rbx
  sub    $0x10,%rsp
  mov    %edi,%r14d
  mov    %esi,%r13d
  mov    %rdx,%rbx
  mov    %rcx,%rbp
  mov    %r8,%r12
  pxor   %xmm2,%xmm2
  cvtsi2sd %esi,%xmm2
  movsd  %xmm2,(%rsp)
  movapd %xmm2,%xmm0
  subsd  D34(%rip),%xmm0
  divsd  D87(%rip),%xmm0
  cvttsd2si %xmm0,%edi
  call   <floor@plt>
  movsd  (%rsp),%xmm2
  addsd  %xmm0,%xmm2
  movsd  %xmm2,(%rsp)
  mulsd  D109(%rip),%xmm0
  cvttsd2si %xmm0,%edi
  call   <floor@plt>
  movapd %xmm0,%xmm1
  movsd  (%rsp),%xmm0
  subsd  %xmm1,%xmm0
  addsd  D69(%rip),%xmm0
  movsd  %xmm0,(%rsp)
  cmp    $0x231518,%r13d
  jg     L15
  test   %r14d,%r14d
  je     L18
L15:
  movsd  (%rsp),%xmm0
  subsd  D39(%rip),%xmm0
  divsd  D67(%rip),%xmm0
  cvttsd2si %xmm0,%edi
  call   <floor@plt>
  movsd  %xmm0,0x8(%rsp)
  movsd  D67(%rip),%xmm6
  mulsd  %xmm0,%xmm6
  cvttsd2si %xmm6,%edi
  call   <floor@plt>
  movsd  (%rsp),%xmm4
  subsd  %xmm0,%xmm4
  movq   %xmm4,%r13
  movapd %xmm4,%xmm7
  divsd  D104(%rip),%xmm7
  cvttsd2si %xmm7,%edi
  call   <floor@plt>
  movsd  %xmm0,(%rsp)
  movsd  D104(%rip),%xmm4
  mulsd  %xmm0,%xmm4
  cvttsd2si %xmm4,%edi
  call   <floor@plt>
  movq   %r13,%xmm6
  subsd  %xmm0,%xmm6
  cvttsd2si %xmm6,%eax
  mov    %eax,(%r12)
  movsd  (%rsp),%xmm0
  divsd  D90(%rip),%xmm0
  cvttsd2si %xmm0,%edi
  call   <floor@plt>
  movsd  (%rsp),%xmm1
  subsd  D96(%rip),%xmm1
  mulsd  D45(%rip),%xmm0
  subsd  %xmm0,%xmm1
  cvttsd2si %xmm1,%eax
  mov    %eax,0x0(%rbp)
  add    $0x7,%eax
  movslq %eax,%rdi
  imul   $0x66666667,%rdi,%rdi
  sar    $0x22,%rdi
  sar    $0x1f,%eax
  sub    %eax,%edi
  call   <floor@plt>
  movapd %xmm0,%xmm1
  movsd  0x8(%rsp),%xmm0
  subsd  D125(%rip),%xmm0
  subsd  %xmm1,%xmm0
  cvttsd2si %xmm0,%eax
  mov    %eax,(%rbx)
  add    $0x10,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  ret
L18:
  add    $0x5f4,%r13d
  pxor   %xmm3,%xmm3
  cvtsi2sd %r13d,%xmm3
  movsd  %xmm3,(%rsp)
  jmp    L15
```

tool_calls: name: read_data
arguments: label: D34
type_guessed: f64
name: read_data
arguments: label: D87
type_guessed: f64
name: read_data
arguments: label: D109
type_guessed: byte[8]
name: read_data
arguments: label: D69
type_guessed: byte[8]
name: read_data
arguments: label: D39
type_guessed: f64
name: read_data
arguments: label: D67
type_guessed: f64
name: read_data
arguments: label: D104
type_guessed: f64
name: read_data
arguments: label: D90
type_guessed: byte[8]
name: read_data
arguments: label: D96
type_guessed: byte[8]
name: read_data
arguments: label: D45
type_guessed: byte[8]
name: read_data
arguments: label: D125
type_guessed: byte[8]

tool: D34: 1867216.25

tool: D87: 36524.25

tool: {"D109": [0x00,0x00,0x00,0x00,0x00,0x00,0xd0,0x3f]}

tool: {"D69": [0x00,0x00,0x00,0x00,0x00,0xd4,0x97,0x40]}

tool: D39: 122.1

tool: D67: 365.25

tool: D104: 30.6001

tool: {"D90": [0x00,0x00,0x00,0x00,0x00,0x00,0x2c,0x40]}

tool: {"D96": [0x00,0x00,0x00,0x00,0x00,0x00,0xf0,0x3f]}

tool: {"D45": [0x00,0x00,0x00,0x00,0x00,0x00,0x28,0x40]}

tool: {"D125": [0x00,0x00,0x00,0x00,0x00,0x6b,0xb2,0x40]}

assistant: ```c
void decode_julday(int calendar, int julday, int *year, int *mon, int *day) {
  int a = julday;
  double b, c;
  double d, e, f;
  b = floor((a - 1867216.25) / 36524.25);
  c = a + b - floor(b / 4) + 1525;
  if (calendar == 0)
    if (a < 2299161) {
      c = a + 1524;
    }
  d = floor((c - 122.1) / 365.25);
  e = floor(365.25 * d);
  f = floor((c - e) / 30.6001);
  *day = (int)(c - e - floor(30.6001 * f));
  *mon = (int)(f - 1 - 12 * floor(f / 14));
  *year = (int)(d - 4715 - floor((7 + *mon) / 10));
}
```