user: 请显示与下面列出的汇编代码相匹配的C语言实现:

```asm
<dt2i>:
  endbr64
  push   %r15
  pxor   %xmm4,%xmm4
  movapd %xmm0,%xmm3
  movapd %xmm0,%xmm2
  push   %r14
  cmpltsd %xmm4,%xmm0
  mov    %rdx,%r15
  mov    $0x1,%eax
  push   %r13
  mov    %r9,%r14
  mov    %rcx,%r13
  push   %r12
  mov    %rsi,%r12
  push   %rbp
  mov    %rdi,%rbp
  push   %rbx
  mov    %r8,%rbx
  sub    $0x28,%rsp
  xorpd  D3(%rip),%xmm2
  mov    0x60(%rsp),%edx
  movsd  %xmm3,0x10(%rsp)
  andpd  %xmm0,%xmm2
  andnpd %xmm3,%xmm0
  movsd  %xmm1,(%rsp)
  orpd   %xmm0,%xmm2
  movapd %xmm1,%xmm0
  addsd  D75(%rip),%xmm0
  mov    %edx,0x1c(%rsp)
  movsd  %xmm2,0x8(%rsp)
  call   <dint@plt>
  pxor   %xmm0,%xmm0
  movsd  (%rsp),%xmm1
  cvtsi2sd %eax,%xmm0
  mov    %eax,0x0(%r13)
  mov    $0x1,%eax
  subsd  %xmm0,%xmm1
  mulsd  D76(%rip),%xmm1
  movapd %xmm1,%xmm0
  addsd  D71(%rip),%xmm0
  movsd  %xmm1,(%rsp)
  call   <dint@plt>
  pxor   %xmm0,%xmm0
  movsd  (%rsp),%xmm1
  movsd  0x8(%rsp),%xmm2
  cvtsi2sd %eax,%xmm0
  mov    %eax,(%rbx)
  mov    $0x1,%eax
  movsd  %xmm2,(%rsp)
  subsd  %xmm0,%xmm1
  mulsd  D76(%rip),%xmm1
  movapd %xmm2,%xmm0
  addsd  D83(%rip),%xmm0
  movsd  %xmm1,(%r14)
  call   <dint@plt>
  pxor   %xmm0,%xmm0
  movsd  (%rsp),%xmm2
  movsd  0x10(%rsp),%xmm3
  cvtsi2sd %eax,%xmm0
  pxor   %xmm6,%xmm6
  mov    %eax,%ecx
  neg    %ecx
  ucomisd %xmm3,%xmm6
  subsd  %xmm0,%xmm2
  mulsd  D76(%rip),%xmm2
  cmova  %ecx,%eax
  mov    %eax,0x0(%rbp)
  mov    $0x1,%eax
  movapd %xmm2,%xmm0
  addsd  D35(%rip),%xmm0
  movsd  %xmm2,(%rsp)
  call   <dint@plt>
  pxor   %xmm0,%xmm0
  movsd  (%rsp),%xmm2
  cvtsi2sd %eax,%xmm0
  mov    %eax,(%r12)
  mov    $0x1,%eax
  subsd  %xmm0,%xmm2
  mulsd  D76(%rip),%xmm2
  addsd  D21(%rip),%xmm2
  movapd %xmm2,%xmm0
  call   <dint@plt>
  mov    0x1c(%rsp),%edx
  mov    %r14,%r9
  mov    %rbx,%r8
  mov    %eax,(%r15)
  mov    %r13,%rcx
  mov    %r12,%rsi
  mov    %rbp,%rdi
  mov    %edx,0x60(%rsp)
  add    $0x28,%rsp
  mov    %r15,%rdx
  xor    %eax,%eax
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  jmp    1070 <fixdate@plt>
```

tool_calls: name: parse_data
arguments: data_label: D3
type_infered: f32[4]
name: parse_data
arguments: data_label: D75
type_infered: f64
name: parse_data
arguments: data_label: D76
type_infered: f64
name: parse_data
arguments: data_label: D71
type_infered: f64
name: parse_data
arguments: data_label: D83
type_infered: f64
name: parse_data
arguments: data_label: D35
type_infered: f64
name: parse_data
arguments: data_label: D21
type_infered: f64

tool: {"D3": [0.0,-0.0,0.0,0.0]}

tool: D75: 1e-09

tool: D76: 100

tool: D71: 1e-07

tool: D83: 1e-05

tool: D35: 0.001

tool: D21: 0.1

assistant: ```c
void dt2i(date, time, iyr, imon, iday, ihr, imn, sec, ndsec) double date;
double time;
int *iyr;
int *imon;
int *iday;
int *ihr;
int *imn;
double *sec;
int ndsec;
{
  double t, d;
  t = time;
  if (date < 0.0)
    d = -date;
  else
    d = date;
  *ihr = dint(t + 0.000000001);
  t = 100.0 * (t - (double)*ihr);
  *imn = dint(t + 0.0000001);
  *sec = 100.0 * (t - (double)*imn);
  *iyr = dint(d + 0.00001);
  d = 100.0 * (d - (double)*iyr);
  if (date < 0.0)
    *iyr = -*iyr;
  *imon = dint(d + 0.001);
  d = 100.0 * (d - (double)*imon);
  *iday = dint(d + 0.1);
  fixdate(iyr, imon, iday, ihr, imn, sec, ndsec);
  return;
}
```