user: 这段汇编代码用C语言表示是什么样的?

```asm
<c_chapman>:
  endbr64
  push   %r15
  push   %r14
  push   %r13
  push   %r12
  push   %rbp
  push   %rbx
  sub    $0x78,%rsp
  mov    %edi,%r12d
  mov    %edx,%ebp
  mov    %rcx,%r13
  mov    %r8,%r15
  movsd  %xmm1,0x8(%rsp)
  movslq %edi,%rbx
  lea    0x0(,%rbx,8),%rax
  mov    %rax,0x58(%rsp)
  movsd  (%rcx,%rbx,8),%xmm1
  movsd  %xmm2,0x18(%rsp)
  movapd %xmm2,%xmm6
  addsd  %xmm1,%xmm6
  movsd  %xmm6,0x60(%rsp)
  movsd  -0x8(%rcx,%rax,1),%xmm2
  movapd %xmm2,%xmm7
  subsd  %xmm1,%xmm7
  movsd  %xmm7,0x68(%rsp)
  mulsd  %xmm7,%xmm0
  addsd  %xmm6,%xmm0
  movsd  %xmm0,0x48(%rsp)
  movsd  0x8(%rsp),%xmm5
  mulsd  D101(%rip),%xmm5
  movapd %xmm5,%xmm0
  call   <sin@plt>
  movapd %xmm0,%xmm7
  mulsd  0x48(%rsp),%xmm7
  movsd  %xmm7,0x20(%rsp)
  movsd  0x8(%rsp),%xmm5
  comisd D0(%rip),%xmm5
  jbe    L246
  movapd %xmm7,%xmm3
  movsd  D55(%rip),%xmm7
  movsd  %xmm7,(%rsp)
  movsd  0x18(%rsp),%xmm6
  comisd %xmm3,%xmm6
  ja     L232
L23:
  cmp    %ebp,%r12d
  jg     L324
  mov    %r12d,%r14d
  jmp    L284
L246:
  movsd  0x8(%rsp),%xmm5
  comisd D0(%rip),%xmm5
  ja     L23
L324:
  mov    %r12d,%r14d
  test   %r12d,%r12d
  jle    L210
L63:
  movsd  D0(%rip),%xmm0
  cmpltsd 0x8(%rsp),%xmm0
  movsd  D85(%rip),%xmm1
  andpd  %xmm0,%xmm1
  movsd  D39(%rip),%xmm2
  andnpd %xmm2,%xmm0
  orpd   %xmm1,%xmm0
  movsd  %xmm0,0x50(%rsp)
  mov    $0x0,%ebp
  pxor   %xmm7,%xmm7
  movsd  %xmm7,(%rsp)
  mov    $0x1,%ebx
  jmp    L287
L243:
  add    $0x1,%rbx
  cmp    %ebx,%ebp
  jl     L247
L284:
  movsd  0x18(%rsp),%xmm7
  movapd %xmm7,%xmm0
  addsd  -0x8(%r13,%rbx,8),%xmm0
  movsd  0x20(%rsp),%xmm4
  comisd %xmm4,%xmm0
  jbe    L243
  addsd  0x0(%r13,%rbx,8),%xmm7
  ucomisd %xmm7,%xmm4
  cmovae %ebx,%r14d
  jmp    L243
L247:
  test   %r14d,%r14d
  jg     L63
  pxor   %xmm6,%xmm6
  movsd  %xmm6,(%rsp)
  jmp    L22
L281:
  movsd  D39(%rip),%xmm6
  movsd  %xmm6,0x10(%rsp)
  jmp    L88
L73:
  call   <sqrt@plt>
  jmp    L227
L270:
  call   <sqrt@plt>
  movsd  %xmm0,0x30(%rsp)
  jmp    L43
L278:
  call   <sqrt@plt>
  jmp    L219
L298:
  movsd  0x20(%rsp),%xmm3
  mulsd  %xmm3,%xmm3
  movsd  %xmm3,0x8(%rsp)
  movsd  0x48(%rsp),%xmm0
  mulsd  %xmm0,%xmm0
  subsd  %xmm3,%xmm0
  pxor   %xmm1,%xmm1
  ucomisd %xmm0,%xmm1
  ja     L33
  sqrtsd %xmm0,%xmm0
  movq   %xmm0,%rbx
L13:
  movsd  0x60(%rsp),%xmm0
  mulsd  %xmm0,%xmm0
  subsd  0x8(%rsp),%xmm0
  pxor   %xmm1,%xmm1
  ucomisd %xmm0,%xmm1
  ja     L217
  movapd %xmm0,%xmm1
  sqrtsd %xmm1,%xmm1
L279:
  movq   %rbx,%xmm0
  subsd  %xmm1,%xmm0
  mov    0x58(%rsp),%rax
  mulsd  -0x8(%r15,%rax,1),%xmm0
  divsd  0x68(%rsp),%xmm0
  addsd  (%rsp),%xmm0
  movsd  %xmm0,(%rsp)
  jmp    L232
L33:
  call   <sqrt@plt>
  movq   %xmm0,%rbx
  jmp    L13
L217:
  call   <sqrt@plt>
  movapd %xmm0,%xmm1
  jmp    L279
L163:
  movsd  D60(%rip),%xmm5
  movsd  %xmm5,0x10(%rsp)
L88:
  movsd  0x0(%r13,%rbp,1),%xmm2
  movsd  0x18(%rsp),%xmm3
  movapd %xmm3,%xmm0
  addsd  %xmm2,%xmm0
  movsd  0x8(%r13,%rbp,1),%xmm1
  addsd  %xmm1,%xmm3
  movsd  %xmm3,0x28(%rsp)
  subsd  %xmm1,%xmm2
  movsd  %xmm2,0x8(%rsp)
  cmp    %r14d,%r12d
  jge    L164
  cmp    %r14d,%ebx
  jne    L164
  mulsd  %xmm0,%xmm0
  movsd  0x20(%rsp),%xmm6
  movapd %xmm6,%xmm1
  mulsd  %xmm6,%xmm1
  subsd  %xmm1,%xmm0
  pxor   %xmm1,%xmm1
  ucomisd %xmm0,%xmm1
  ja     L73
  sqrtsd %xmm0,%xmm0
L227:
  movsd  0x10(%rsp),%xmm1
  mulsd  (%r15,%rbp,1),%xmm1
  mulsd  %xmm1,%xmm0
  divsd  0x8(%rsp),%xmm0
  addsd  (%rsp),%xmm0
  movsd  %xmm0,(%rsp)
L22:
  cmp    %r14d,%r12d
  jl     L298
L232:
  movsd  (%rsp),%xmm0
  add    $0x78,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
L164:
  movsd  D39(%rip),%xmm3
  movsd  %xmm3,0x38(%rsp)
L40:
  movsd  0x20(%rsp),%xmm5
  movapd %xmm5,%xmm4
  mulsd  %xmm5,%xmm4
  movsd  %xmm4,0x40(%rsp)
  mulsd  %xmm0,%xmm0
  subsd  %xmm4,%xmm0
  pxor   %xmm1,%xmm1
  ucomisd %xmm0,%xmm1
  ja     L270
  sqrtsd %xmm0,%xmm0
  movsd  %xmm0,0x30(%rsp)
L43:
  movsd  0x28(%rsp),%xmm0
  mulsd  %xmm0,%xmm0
  subsd  0x40(%rsp),%xmm0
  pxor   %xmm1,%xmm1
  ucomisd %xmm0,%xmm1
  ja     L278
  sqrtsd %xmm0,%xmm0
L219:
  movsd  0x10(%rsp),%xmm1
  mulsd  (%r15,%rbp,1),%xmm1
  mulsd  0x38(%rsp),%xmm0
  movsd  0x30(%rsp),%xmm2
  subsd  %xmm0,%xmm2
  mulsd  %xmm2,%xmm1
  movapd %xmm1,%xmm0
  divsd  0x8(%rsp),%xmm0
  addsd  (%rsp),%xmm0
  movsd  %xmm0,(%rsp)
  add    $0x1,%ebx
  add    $0x8,%rbp
  cmp    %r14d,%ebx
  jg     L22
L287:
  cmp    %ebx,%r12d
  jl     L163
  jne    L281
  cmp    %r14d,%r12d
  jne    L281
  movsd  0x0(%r13,%rbp,1),%xmm1
  movsd  0x18(%rsp),%xmm0
  addsd  %xmm1,%xmm0
  subsd  0x8(%r13,%rbp,1),%xmm1
  movsd  %xmm1,0x8(%rsp)
  movsd  0x50(%rsp),%xmm6
  movsd  %xmm6,0x38(%rsp)
  movsd  0x48(%rsp),%xmm5
  movsd  %xmm5,0x28(%rsp)
  movsd  D39(%rip),%xmm3
  movsd  %xmm3,0x10(%rsp)
  jmp    L40
L210:
  pxor   %xmm4,%xmm4
  movsd  %xmm4,(%rsp)
  jmp    L232
```

tool_calls: name: disassemble_data
arguments: tag: D101
type_guessed: byte[8]
name: disassemble_data
arguments: tag: D0
type_guessed: f64[2]
name: disassemble_data
arguments: tag: D55
type_guessed: byte[8]
name: disassemble_data
arguments: tag: D85
type_guessed: f32[2]
name: disassemble_data
arguments: tag: D39
type_guessed: f64
name: disassemble_data
arguments: tag: D60
type_guessed: f64

tool: {"D101": [0x39,0x9d,0x52,0xa2,0x46,0xdf,0x91,0x3f]}

tool: {"D0": [90.0,-1.0]}

tool: {"D55": [0x40,0x8c,0xb5,0x78,0x1d,0xaf,0x15,0x44]}

tool: {"D85": [0.0,-1.875]}

tool: D39: 1

tool: D60: 2

assistant: ```c
double c_chapman(int lc, double taup, double *tauc, int nlyr, double *zd, double *dtau_c, double zenang, double r) {
  register int id, j;
  double zenrad, xp, xpsinz, sum, fact, fact2, rj, rjp1, dhj, dsj;
  zenrad = zenang * (3.14159265358979323846 / 180.);
  xp = r + zd[lc] + (zd[lc - 1] - zd[lc]) * taup;
  xpsinz = xp * sin(zenrad);
  if (zenang > 90. && xpsinz < r) {
    return 1.e+20;
  }
  id = lc;
  if (zenang > 90.) {
    for (j = lc; j <= nlyr; j++) {
      if (xpsinz < (zd[j - 1] + r) && (xpsinz >= zd[j] + r)) {
        id = j;
      }
    }
  }
  sum = 0.;
  for (j = 1; j <= id; j++) {
    fact = 1.;
    fact2 = 1.;
    if (j > lc) {
      fact = 2.;
    } else if (j == lc && lc == id && zenang > 90.) {
      fact2 = -1.;
    }
    rj = r + zd[j - 1];
    rjp1 = r + zd[j];
    if (j == lc && id == lc) {
      rjp1 = xp;
    }
    dhj = zd[j - 1] - zd[j];
    if (id > lc && j == id) {
      dsj = sqrt(rj * rj - xpsinz * xpsinz);
    } else {
      dsj = sqrt(rj * rj - xpsinz * xpsinz) - fact2 * sqrt(rjp1 * rjp1 - xpsinz * xpsinz);
    }
    sum += dtau_c[j - 1] * fact * dsj / dhj;
  }
  if (id > lc) {
    dhj = zd[lc - 1] - zd[lc];
    dsj = sqrt(xp * xp - xpsinz * xpsinz) - sqrt(({
                                                   const double _x = (double)(zd[lc] + r);
                                                   _x *_x;
                                                 }) -
                                                 xpsinz * xpsinz);
    sum += dtau_c[lc - 1] * dsj / dhj;
  }
  return sum;
}
```