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

```asm
<dataoutput_delay>:
  endbr64
  push   %r14
  pxor   %xmm7,%xmm7
  pxor   %xmm1,%xmm1
  movapd %xmm0,%xmm4
  push   %r13
  cvtsi2sd %esi,%xmm7
  pxor   %xmm0,%xmm0
  pxor   %xmm6,%xmm6
  push   %r12
  cvtsi2sd %edi,%xmm1
  pxor   %xmm5,%xmm5
  mov    %edx,%r14d
  push   %rbp
  cvtsi2sd %edx,%xmm0
  mov    %esi,%ebp
  mov    %ecx,%eax
  push   %rbx
  cvtsi2sd %ecx,%xmm6
  mov    %r8d,%ebx
  cvtsi2sd %r8d,%xmm5
  movapd %xmm1,%xmm3
  sub    $0x20,%rsp
  movsd  D32(%rip),%xmm2
  addsd  %xmm1,%xmm3
  mulsd  %xmm7,%xmm2
  mulsd  %xmm7,%xmm2
  movapd %xmm2,%xmm1
  mulsd  %xmm0,%xmm1
  mulsd  %xmm1,%xmm0
  mulsd  %xmm6,%xmm0
  mulsd  %xmm6,%xmm0
  mulsd  %xmm5,%xmm0
  mulsd  %xmm5,%xmm0
  divsd  %xmm0,%xmm3
  movsd  D31(%rip),%xmm0
  comisd %xmm0,%xmm3
  movapd %xmm3,%xmm1
  ja     L0
  divsd  %xmm3,%xmm0
  movapd %xmm0,%xmm1
L0:
  imul   %r9d,%eax
  pxor   %xmm2,%xmm2
  pxor   %xmm3,%xmm3
  cvtsi2sd %eax,%xmm2
  movapd %xmm2,%xmm0
  divsd  %xmm1,%xmm0
  ucomisd %xmm0,%xmm3
  ja     L20
  sqrtsd %xmm0,%xmm0
L14:
  mulsd  %xmm0,%xmm1
  mov    $0x1,%esi
  mov    $0x1,%edi
  movsd  D54(%rip),%xmm0
  mov    $0x1,%eax
  movsd  %xmm4,0x8(%rsp)
  imul   %r14d,%ebp
  imul   %ebp,%ebx
  divsd  %xmm1,%xmm2
  shl    $0x3,%ebx
  movsd  %xmm2,0x10(%rsp)
  call   <draincap@plt>
  movsd  D9(%rip),%xmm2
  xor    %edi,%edi
  mov    $0x2,%esi
  mov    %eax,%r12d
  mov    $0x1,%eax
  movapd %xmm2,%xmm0
  call   <draincap@plt>
  movsd  D45(%rip),%xmm6
  movsd  D57(%rip),%xmm1
  lea    (%rax,%r12,2),%r12d
  mov    $0x2,%eax
  movapd %xmm6,%xmm0
  call   <gatecap@plt>
  mov    $0x2,%esi
  xor    %edi,%edi
  mov    %eax,%r13d
  mov    D9(%rip),%rax
  add    %r13d,%r12d
  movq   %rax,%xmm0
  mov    $0x1,%eax
  call   <transreson@plt>
  pxor   %xmm1,%xmm1
  pxor   %xmm0,%xmm0
  xor    %edi,%edi
  cvtsi2sd %eax,%xmm0
  movsd  D67(%rip),%xmm5
  mov    $0x4,%eax
  movsd  0x8(%rsp),%xmm4
  cvtsi2sd %r12d,%xmm1
  movsd  D71(%rip),%xmm2
  movapd %xmm5,%xmm3
  mulsd  %xmm0,%xmm1
  movapd %xmm4,%xmm0
  call   <horowitz@plt>
  pxor   %xmm4,%xmm4
  mov    $0x1,%esi
  mov    $0x1,%edi
  cvtsi2sd %eax,%xmm4
  mov    D45(%rip),%rax
  movq   %rax,%xmm0
  mov    $0x1,%eax
  movsd  %xmm4,0x8(%rsp)
  call   <draincap@plt>
  movsd  D149(%rip),%xmm0
  xor    %edi,%edi
  mov    $0x1,%esi
  mov    %eax,%r12d
  mov    $0x1,%eax
  call   <draincap@plt>
  pxor   %xmm2,%xmm2
  xor    %edi,%edi
  mov    $0x1,%esi
  cvtsi2sd %ebx,%xmm2
  mulsd  0x10(%rsp),%xmm2
  mov    %eax,%r13d
  mov    D149(%rip),%rax
  add    %r13d,%r12d
  movq   %rax,%xmm0
  mov    $0x1,%eax
  movsd  %xmm2,0x10(%rsp)
  call   <transreson@plt>
  test   %ebp,%ebp
  pxor   %xmm1,%xmm1
  mov    $0x1,%edi
  mov    %eax,%r8d
  lea    0x7(%rbp),%eax
  movsd  0x8(%rsp),%xmm4
  movsd  0x10(%rsp),%xmm2
  cmovns %ebp,%eax
  movsd  D85(%rip),%xmm0
  movsd  D152(%rip),%xmm3
  mulsd  %xmm2,%xmm0
  sar    $0x3,%eax
  imul   %eax,%r12d
  mov    D67(%rip),%rax
  mulsd  D51(%rip),%xmm2
  movq   %rax,%xmm5
  divsd  %xmm5,%xmm4
  cvtsi2sd %r12d,%xmm1
  addsd  %xmm0,%xmm1
  movapd %xmm2,%xmm0
  pxor   %xmm2,%xmm2
  mulsd  %xmm3,%xmm0
  cvtsi2sd %r8d,%xmm2
  addsd  D107(%rip),%xmm1
  addsd  %xmm2,%xmm0
  movq   %rax,%xmm2
  mov    $0x4,%eax
  mulsd  %xmm0,%xmm1
  movapd %xmm4,%xmm0
  call   <horowitz@plt>
  pxor   %xmm0,%xmm0
  cvtsi2sd %eax,%xmm0
  mov    0x50(%rsp),%rax
  movapd %xmm0,%xmm1
  addsd  %xmm0,%xmm1
  addsd  0x8(%rsp),%xmm0
  movsd  %xmm1,(%rax)
  add    $0x20,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  ret
L20:
  movsd  %xmm4,0x18(%rsp)
  movsd  %xmm2,0x10(%rsp)
  movsd  %xmm1,0x8(%rsp)
  call   <sqrt@plt>
  movsd  0x18(%rsp),%xmm4
  movsd  0x10(%rsp),%xmm2
  movsd  0x8(%rsp),%xmm1
  jmp    L14
```

tool_calls: name: read_data
arguments: data_tag: D32
type: f64
name: read_data
arguments: data_tag: D31
type: f64
name: read_data
arguments: data_tag: D54
type: f64
name: read_data
arguments: data_tag: D9
type: f64
name: read_data
arguments: data_tag: D45
type: f64
name: read_data
arguments: data_tag: D57
type: f64
name: read_data
arguments: data_tag: D67
type: f64
name: read_data
arguments: data_tag: D71
type: f64
name: read_data
arguments: data_tag: D149
type: f64
name: read_data
arguments: data_tag: D85
type: byte[8]
name: read_data
arguments: data_tag: D152
type: f64
name: read_data
arguments: data_tag: D51
type: f64
name: read_data
arguments: data_tag: D107
type: byte[8]

tool: D32: 8

tool: D31: 1

tool: D54: 6

tool: D9: 40

tool: D45: 48

tool: D57: 10

tool: D67: 0.425

tool: D71: 0.431

tool: D149: 80

tool: {"D85": [0x7a,0xcd,0x69,0x75,0x84,0x36,0xe0,0x3c]}

tool: D152: 0.5

tool: D51: 0.08

tool: {"D107": [0x11,0xea,0x2d,0x81,0x99,0x97,0x61,0x3d]}

assistant: ```c
double dataoutput_delay(C, B, A, Ndbl, Nspd, Ndwl, inrisetime, outrisetime)
int C, B, A, Ndbl, Nspd, Ndwl;
double *outrisetime, inrisetime;
{
  double Ceq, Rwire, Rline;
  double aspectRatio;
  double ramBlocks;
  double tf;
  double nordel, outdel, nextinputtime;
  double hstack, vstack;
  aspectRatio = (2.0 * C) / (8.0 * B * B * A * A * Ndbl * Ndbl * Nspd * Nspd);
  hstack = (aspectRatio > 1.0) ? aspectRatio : 1.0 / aspectRatio;
  ramBlocks = Ndwl * Ndbl;
  hstack = hstack * sqrt(ramBlocks / hstack);
  vstack = ramBlocks / hstack;
  Ceq = 2 * draincap(6.0, 1, 1) + draincap(40.0, 0, 2) + gatecap(48.0, 10.0);
  tf = Ceq * transreson(40.0, 0, 2);
  nordel = horowitz(inrisetime, tf, 0.431, 0.425, 0);
  nextinputtime = nordel / (0.425);
  Ceq = (draincap(48.0, 1, 1) + draincap(80.0, 0, 1)) * ((8 * B * A) / 64) + 1.8e-15 * (8 * B * A * Nspd * (vstack)) + 0.5e-12;
  Rwire = 0.080 * (8 * B * A * Nspd * (vstack)) / 2;
  tf = Ceq * (transreson(80.0, 0, 1) + Rwire);
  outdel = horowitz(nextinputtime, tf, 0.425, 0.5, 1);
  *outrisetime = outdel / 0.5;
  return (outdel + nordel);
}
```