user: 请从给定的汇编指令推导出C源代码:

```asm
<dataoutput_delay>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  push   %rbx
  sub    $0x78,%rsp
  mov    %edi,-0x64(%rbp)
  mov    %esi,-0x68(%rbp)
  mov    %edx,-0x6c(%rbp)
  mov    %ecx,-0x70(%rbp)
  mov    %r8d,-0x74(%rbp)
  mov    %r9d,-0x78(%rbp)
  movsd  %xmm0,-0x80(%rbp)
  pxor   %xmm0,%xmm0
  cvtsi2sdl -0x64(%rbp),%xmm0
  addsd  %xmm0,%xmm0
  pxor   %xmm2,%xmm2
  cvtsi2sdl -0x68(%rbp),%xmm2
  movsd  D199(%rip),%xmm1
  mulsd  %xmm1,%xmm2
  pxor   %xmm1,%xmm1
  cvtsi2sdl -0x68(%rbp),%xmm1
  mulsd  %xmm1,%xmm2
  pxor   %xmm1,%xmm1
  cvtsi2sdl -0x6c(%rbp),%xmm1
  mulsd  %xmm1,%xmm2
  pxor   %xmm1,%xmm1
  cvtsi2sdl -0x6c(%rbp),%xmm1
  mulsd  %xmm1,%xmm2
  pxor   %xmm1,%xmm1
  cvtsi2sdl -0x70(%rbp),%xmm1
  mulsd  %xmm1,%xmm2
  pxor   %xmm1,%xmm1
  cvtsi2sdl -0x70(%rbp),%xmm1
  mulsd  %xmm1,%xmm2
  pxor   %xmm1,%xmm1
  cvtsi2sdl -0x74(%rbp),%xmm1
  mulsd  %xmm1,%xmm2
  pxor   %xmm1,%xmm1
  cvtsi2sdl -0x74(%rbp),%xmm1
  mulsd  %xmm2,%xmm1
  divsd  %xmm1,%xmm0
  movsd  %xmm0,-0x60(%rbp)
  movsd  -0x60(%rbp),%xmm0
  movsd  D157(%rip),%xmm1
  comisd %xmm1,%xmm0
  jbe    L13
  movsd  -0x60(%rbp),%xmm0
  jmp    L15
L13:
  movsd  D157(%rip),%xmm0
  divsd  -0x60(%rbp),%xmm0
L15:
  movsd  %xmm0,-0x58(%rbp)
  mov    -0x78(%rbp),%eax
  imul   -0x70(%rbp),%eax
  pxor   %xmm0,%xmm0
  cvtsi2sd %eax,%xmm0
  movsd  %xmm0,-0x50(%rbp)
  movsd  -0x50(%rbp),%xmm0
  divsd  -0x58(%rbp),%xmm0
  movq   %xmm0,%rax
  movq   %rax,%xmm0
  call   <sqrt@plt>
  movsd  -0x58(%rbp),%xmm1
  mulsd  %xmm1,%xmm0
  movsd  %xmm0,-0x58(%rbp)
  movsd  -0x50(%rbp),%xmm0
  divsd  -0x58(%rbp),%xmm0
  movsd  %xmm0,-0x48(%rbp)
  mov    D156(%rip),%rax
  mov    $0x1,%esi
  mov    $0x1,%edi
  movq   %rax,%xmm0
  mov    $0x1,%eax
  call   <draincap@plt>
  lea    (%rax,%rax,1),%ebx
  mov    D61(%rip),%rax
  mov    $0x2,%esi
  mov    $0x0,%edi
  movq   %rax,%xmm0
  mov    $0x1,%eax
  call   <draincap@plt>
  add    %eax,%ebx
  movsd  D73(%rip),%xmm0
  mov    D90(%rip),%rax
  movapd %xmm0,%xmm1
  movq   %rax,%xmm0
  mov    $0x2,%eax
  call   <gatecap@plt>
  add    %ebx,%eax
  pxor   %xmm0,%xmm0
  cvtsi2sd %eax,%xmm0
  movsd  %xmm0,-0x40(%rbp)
  mov    D61(%rip),%rax
  mov    $0x2,%esi
  mov    $0x0,%edi
  movq   %rax,%xmm0
  mov    $0x1,%eax
  call   <transreson@plt>
  pxor   %xmm0,%xmm0
  cvtsi2sd %eax,%xmm0
  movsd  -0x40(%rbp),%xmm1
  mulsd  %xmm1,%xmm0
  movsd  %xmm0,-0x38(%rbp)
  movsd  D18(%rip),%xmm2
  movsd  D37(%rip),%xmm1
  movsd  -0x38(%rbp),%xmm0
  mov    -0x80(%rbp),%rax
  mov    $0x0,%edi
  movapd %xmm2,%xmm3
  movapd %xmm1,%xmm2
  movapd %xmm0,%xmm1
  movq   %rax,%xmm0
  mov    $0x4,%eax
  call   <horowitz@plt>
  pxor   %xmm0,%xmm0
  cvtsi2sd %eax,%xmm0
  movsd  %xmm0,-0x30(%rbp)
  movsd  -0x30(%rbp),%xmm0
  movsd  D18(%rip),%xmm1
  divsd  %xmm1,%xmm0
  movsd  %xmm0,-0x28(%rbp)
  mov    D90(%rip),%rax
  mov    $0x1,%esi
  mov    $0x1,%edi
  movq   %rax,%xmm0
  mov    $0x1,%eax
  call   <draincap@plt>
  mov    %eax,%ebx
  mov    D119(%rip),%rax
  mov    $0x1,%esi
  mov    $0x0,%edi
  movq   %rax,%xmm0
  mov    $0x1,%eax
  call   <draincap@plt>
  lea    (%rbx,%rax,1),%ecx
  mov    -0x68(%rbp),%eax
  imul   -0x6c(%rbp),%eax
  lea    0x7(%rax),%edx
  test   %eax,%eax
  cmovs  %edx,%eax
  sar    $0x3,%eax
  imul   %ecx,%eax
  pxor   %xmm1,%xmm1
  cvtsi2sd %eax,%xmm1
  mov    -0x68(%rbp),%eax
  imul   -0x6c(%rbp),%eax
  imul   -0x74(%rbp),%eax
  shl    $0x3,%eax
  pxor   %xmm0,%xmm0
  cvtsi2sd %eax,%xmm0
  movapd %xmm0,%xmm2
  mulsd  -0x48(%rbp),%xmm2
  movsd  D201(%rip),%xmm0
  mulsd  %xmm2,%xmm0
  addsd  %xmm0,%xmm1
  movsd  D198(%rip),%xmm0
  addsd  %xmm1,%xmm0
  movsd  %xmm0,-0x40(%rbp)
  mov    -0x68(%rbp),%eax
  imul   -0x6c(%rbp),%eax
  imul   -0x74(%rbp),%eax
  shl    $0x3,%eax
  pxor   %xmm0,%xmm0
  cvtsi2sd %eax,%xmm0
  movapd %xmm0,%xmm1
  mulsd  -0x48(%rbp),%xmm1
  movsd  D70(%rip),%xmm0
  mulsd  %xmm1,%xmm0
  movsd  D185(%rip),%xmm1
  divsd  %xmm1,%xmm0
  movsd  %xmm0,-0x20(%rbp)
  mov    D119(%rip),%rax
  mov    $0x1,%esi
  mov    $0x0,%edi
  movq   %rax,%xmm0
  mov    $0x1,%eax
  call   <transreson@plt>
  pxor   %xmm0,%xmm0
  cvtsi2sd %eax,%xmm0
  addsd  -0x20(%rbp),%xmm0
  movsd  -0x40(%rbp),%xmm1
  mulsd  %xmm1,%xmm0
  movsd  %xmm0,-0x38(%rbp)
  movsd  D115(%rip),%xmm2
  movsd  D18(%rip),%xmm1
  movsd  -0x38(%rbp),%xmm0
  mov    -0x28(%rbp),%rax
  mov    $0x1,%edi
  movapd %xmm2,%xmm3
  movapd %xmm1,%xmm2
  movapd %xmm0,%xmm1
  movq   %rax,%xmm0
  mov    $0x4,%eax
  call   <horowitz@plt>
  pxor   %xmm0,%xmm0
  cvtsi2sd %eax,%xmm0
  movsd  %xmm0,-0x18(%rbp)
  movsd  -0x18(%rbp),%xmm0
  movsd  D115(%rip),%xmm1
  divsd  %xmm1,%xmm0
  mov    0x10(%rbp),%rax
  movsd  %xmm0,(%rax)
  movsd  -0x18(%rbp),%xmm0
  addsd  -0x30(%rbp),%xmm0
  movq   %xmm0,%rax
  movq   %rax,%xmm0
  mov    -0x8(%rbp),%rbx
  leave
  ret
```

tool_calls: name: extract_symbolic_data
arguments: data_label: D199
datatype: f64
name: extract_symbolic_data
arguments: data_label: D157
datatype: f64
name: extract_symbolic_data
arguments: data_label: D156
datatype: f64
name: extract_symbolic_data
arguments: data_label: D61
datatype: f64
name: extract_symbolic_data
arguments: data_label: D73
datatype: f64
name: extract_symbolic_data
arguments: data_label: D90
datatype: f64
name: extract_symbolic_data
arguments: data_label: D18
datatype: f64
name: extract_symbolic_data
arguments: data_label: D37
datatype: f64
name: extract_symbolic_data
arguments: data_label: D119
datatype: f64
name: extract_symbolic_data
arguments: data_label: D201
datatype: byte[8]
name: extract_symbolic_data
arguments: data_label: D198
datatype: byte[8]
name: extract_symbolic_data
arguments: data_label: D70
datatype: f64
name: extract_symbolic_data
arguments: data_label: D185
datatype: f64
name: extract_symbolic_data
arguments: data_label: D115
datatype: f64

tool: D199: 8

tool: D157: 1

tool: D156: 6

tool: D61: 40

tool: D73: 10

tool: D90: 48

tool: D18: 0.425

tool: D37: 0.431

tool: D119: 80

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

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

tool: D70: 0.08

tool: D185: 2

tool: D115: 0.5

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