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

```asm
<dataoutput_delay>:
  endbr64
  push   %r15
  push   %r14
  push   %r13
  push   %r12
  push   %rbp
  push   %rbx
  sub    $0x18,%rsp
  mov    %esi,%r12d
  mov    %edx,%ebx
  mov    %ecx,%eax
  mov    %r8d,%ebp
  movq   %xmm0,%r13
  pxor   %xmm1,%xmm1
  cvtsi2sd %esi,%xmm1
  pxor   %xmm6,%xmm6
  cvtsi2sd %edx,%xmm6
  pxor   %xmm5,%xmm5
  cvtsi2sd %ecx,%xmm5
  pxor   %xmm4,%xmm4
  cvtsi2sd %r8d,%xmm4
  pxor   %xmm0,%xmm0
  cvtsi2sd %edi,%xmm0
  movapd %xmm0,%xmm3
  addsd  %xmm0,%xmm3
  movapd %xmm1,%xmm2
  mulsd  D138(%rip),%xmm2
  mulsd  %xmm2,%xmm1
  mulsd  %xmm6,%xmm1
  mulsd  %xmm6,%xmm1
  movapd %xmm1,%xmm0
  mulsd  %xmm5,%xmm0
  mulsd  %xmm5,%xmm0
  mulsd  %xmm4,%xmm0
  mulsd  %xmm4,%xmm0
  divsd  %xmm0,%xmm3
  movsd  %xmm3,(%rsp)
  comisd D175(%rip),%xmm3
  jbe    L37
L19:
  imul   %r9d,%eax
  pxor   %xmm5,%xmm5
  cvtsi2sd %eax,%xmm5
  movq   %xmm5,%r14
  movapd %xmm5,%xmm0
  divsd  (%rsp),%xmm0
  pxor   %xmm1,%xmm1
  ucomisd %xmm0,%xmm1
  ja     L18
  sqrtsd %xmm0,%xmm0
L16:
  mulsd  (%rsp),%xmm0
  movq   %r14,%xmm6
  divsd  %xmm0,%xmm6
  movsd  %xmm6,0x8(%rsp)
  mov    $0x1,%esi
  mov    $0x1,%edi
  movsd  D168(%rip),%xmm0
  mov    $0x1,%eax
  call   <draincap@plt>
  mov    %eax,%r14d
  mov    $0x2,%esi
  mov    $0x0,%edi
  mov    D61(%rip),%rax
  movq   %rax,%xmm0
  mov    $0x1,%eax
  call   <draincap@plt>
  lea    (%rax,%r14,2),%r14d
  movsd  D60(%rip),%xmm1
  mov    D83(%rip),%rax
  movq   %rax,%xmm0
  mov    $0x2,%eax
  call   <gatecap@plt>
  mov    %eax,%r15d
  mov    $0x2,%esi
  mov    $0x0,%edi
  mov    D61(%rip),%rax
  movq   %rax,%xmm0
  mov    $0x1,%eax
  call   <transreson@plt>
  add    %r15d,%r14d
  pxor   %xmm1,%xmm1
  cvtsi2sd %r14d,%xmm1
  pxor   %xmm0,%xmm0
  cvtsi2sd %eax,%xmm0
  mov    $0x0,%edi
  mov    D115(%rip),%rax
  movq   %rax,%xmm3
  movsd  D153(%rip),%xmm2
  mulsd  %xmm0,%xmm1
  movq   %r13,%xmm0
  mov    $0x4,%eax
  call   <horowitz@plt>
  pxor   %xmm5,%xmm5
  cvtsi2sd %eax,%xmm5
  movsd  %xmm5,(%rsp)
  mov    $0x1,%esi
  mov    $0x1,%edi
  mov    D83(%rip),%rax
  movq   %rax,%xmm0
  mov    $0x1,%eax
  call   <draincap@plt>
  mov    %eax,%r13d
  mov    $0x1,%esi
  mov    $0x0,%edi
  mov    D184(%rip),%rax
  movq   %rax,%xmm0
  mov    $0x1,%eax
  call   <draincap@plt>
  mov    %eax,%r14d
  imul   %r12d,%ebx
  imul   %ebx,%ebp
  shl    $0x3,%ebp
  pxor   %xmm1,%xmm1
  cvtsi2sd %ebp,%xmm1
  mulsd  0x8(%rsp),%xmm1
  movq   %xmm1,%rbp
  mov    $0x1,%esi
  mov    $0x0,%edi
  mov    D184(%rip),%rax
  movq   %rax,%xmm0
  mov    $0x1,%eax
  call   <transreson@plt>
  mov    %eax,%edx
  movsd  D147(%rip),%xmm3
  add    %r14d,%r13d
  lea    0x7(%rbx),%eax
  test   %ebx,%ebx
  cmovns %ebx,%eax
  sar    $0x3,%eax
  imul   %eax,%r13d
  pxor   %xmm1,%xmm1
  cvtsi2sd %r13d,%xmm1
  movq   %rbp,%xmm0
  mulsd  D72(%rip),%xmm0
  addsd  %xmm0,%xmm1
  addsd  D8(%rip),%xmm1
  movq   %rbp,%xmm0
  mulsd  D38(%rip),%xmm0
  mulsd  %xmm3,%xmm0
  pxor   %xmm2,%xmm2
  cvtsi2sd %edx,%xmm2
  addsd  %xmm2,%xmm0
  movsd  (%rsp),%xmm4
  divsd  D115(%rip),%xmm4
  mov    $0x1,%edi
  mov    D115(%rip),%rax
  movq   %rax,%xmm2
  mulsd  %xmm0,%xmm1
  movapd %xmm4,%xmm0
  mov    $0x4,%eax
  call   <horowitz@plt>
  pxor   %xmm0,%xmm0
  cvtsi2sd %eax,%xmm0
  movapd %xmm0,%xmm1
  addsd  %xmm0,%xmm1
  mov    0x50(%rsp),%rax
  movsd  %xmm1,(%rax)
  addsd  (%rsp),%xmm0
  add    $0x18,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
L37:
  movsd  D175(%rip),%xmm0
  divsd  %xmm3,%xmm0
  movsd  %xmm0,(%rsp)
  jmp    L19
L18:
  call   <sqrt@plt>
  jmp    L16
```

tool_calls: name: extract_symbolic_data
arguments: tag: D138
data_type: f64
name: extract_symbolic_data
arguments: tag: D175
data_type: f64[2]
name: extract_symbolic_data
arguments: tag: D168
data_type: f64
name: extract_symbolic_data
arguments: tag: D61
data_type: f64
name: extract_symbolic_data
arguments: tag: D60
data_type: f64
name: extract_symbolic_data
arguments: tag: D83
data_type: f64
name: extract_symbolic_data
arguments: tag: D115
data_type: f64
name: extract_symbolic_data
arguments: tag: D153
data_type: f64
name: extract_symbolic_data
arguments: tag: D184
data_type: f64
name: extract_symbolic_data
arguments: tag: D147
data_type: f64
name: extract_symbolic_data
arguments: tag: D72
data_type: byte[8]
name: extract_symbolic_data
arguments: tag: D8
data_type: byte[8]
name: extract_symbolic_data
arguments: tag: D38
data_type: f64

tool: D138: 8

tool: {"D175": [1.0,6.0]}

tool: D168: 6

tool: D61: 40

tool: D60: 10

tool: D83: 48

tool: D115: 0.425

tool: D153: 0.431

tool: D184: 80

tool: D147: 0.5

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

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

tool: D38: 0.08

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);
}
```