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

```asm
<CalcQuarticCoeffs>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0xf8,%rsp
  mov    %rdi,-0x158(%rbp)
  mov    %rsi,-0x160(%rbp)
  mov    %edx,-0x164(%rbp)
  mov    %rcx,-0x170(%rbp)
  mov    -0x158(%rbp),%rax
  mov    (%rax),%rax
  mov    %rax,-0x100(%rbp)
  mov    -0x158(%rbp),%rax
  mov    0x8(%rax),%rax
  mov    %rax,-0xf8(%rbp)
  mov    -0x158(%rbp),%rax
  mov    0x10(%rax),%rax
  mov    %rax,-0xf0(%rbp)
  mov    -0x160(%rbp),%rax
  mov    (%rax),%rax
  mov    %rax,-0xe8(%rbp)
  mov    -0x160(%rbp),%rax
  mov    0x8(%rax),%rax
  mov    %rax,-0xe0(%rbp)
  mov    -0x160(%rbp),%rax
  mov    0x10(%rax),%rax
  mov    %rax,-0xd8(%rbp)
  pxor   %xmm0,%xmm0
  movsd  %xmm0,-0x108(%rbp)
  movsd  -0x108(%rbp),%xmm0
  movsd  %xmm0,-0x110(%rbp)
  movsd  -0x110(%rbp),%xmm0
  movsd  %xmm0,-0x118(%rbp)
  movsd  -0x118(%rbp),%xmm0
  movsd  %xmm0,-0x120(%rbp)
  movsd  -0x120(%rbp),%xmm0
  movsd  %xmm0,-0x128(%rbp)
  movsd  -0x128(%rbp),%xmm0
  movsd  %xmm0,-0x130(%rbp)
  movsd  -0x130(%rbp),%xmm0
  movsd  %xmm0,-0x138(%rbp)
  movsd  -0x138(%rbp),%xmm0
  movsd  %xmm0,-0x140(%rbp)
  movsd  -0x140(%rbp),%xmm0
  movsd  %xmm0,-0x148(%rbp)
  movl   $0x0,-0x14c(%rbp)
  jmp    L6
L16:
  mov    -0x14c(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x100(%rbp),%rax
  add    %rdx,%rax
  movsd  (%rax),%xmm0
  movsd  %xmm0,-0x30(%rbp)
  mov    -0x14c(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0xf8(%rbp),%rax
  add    %rdx,%rax
  movsd  (%rax),%xmm0
  movsd  %xmm0,-0x28(%rbp)
  mov    -0x14c(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0xf0(%rbp),%rax
  add    %rdx,%rax
  movsd  (%rax),%xmm0
  movsd  %xmm0,-0x20(%rbp)
  mov    -0x14c(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0xe8(%rbp),%rax
  add    %rdx,%rax
  movsd  (%rax),%xmm0
  movsd  %xmm0,-0x18(%rbp)
  mov    -0x14c(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0xe0(%rbp),%rax
  add    %rdx,%rax
  movsd  (%rax),%xmm0
  movsd  %xmm0,-0x10(%rbp)
  mov    -0x14c(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0xd8(%rbp),%rax
  add    %rdx,%rax
  movsd  (%rax),%xmm0
  movsd  %xmm0,-0x8(%rbp)
  movsd  -0x30(%rbp),%xmm0
  mulsd  -0x18(%rbp),%xmm0
  movsd  -0x148(%rbp),%xmm1
  addsd  %xmm1,%xmm0
  movsd  %xmm0,-0x148(%rbp)
  movsd  -0x30(%rbp),%xmm0
  mulsd  -0x10(%rbp),%xmm0
  movsd  -0x140(%rbp),%xmm1
  addsd  %xmm1,%xmm0
  movsd  %xmm0,-0x140(%rbp)
  movsd  -0x30(%rbp),%xmm0
  mulsd  -0x8(%rbp),%xmm0
  movsd  -0x138(%rbp),%xmm1
  addsd  %xmm1,%xmm0
  movsd  %xmm0,-0x138(%rbp)
  movsd  -0x28(%rbp),%xmm0
  mulsd  -0x18(%rbp),%xmm0
  movsd  -0x130(%rbp),%xmm1
  addsd  %xmm1,%xmm0
  movsd  %xmm0,-0x130(%rbp)
  movsd  -0x28(%rbp),%xmm0
  mulsd  -0x10(%rbp),%xmm0
  movsd  -0x128(%rbp),%xmm1
  addsd  %xmm1,%xmm0
  movsd  %xmm0,-0x128(%rbp)
  movsd  -0x28(%rbp),%xmm0
  mulsd  -0x8(%rbp),%xmm0
  movsd  -0x120(%rbp),%xmm1
  addsd  %xmm1,%xmm0
  movsd  %xmm0,-0x120(%rbp)
  movsd  -0x20(%rbp),%xmm0
  mulsd  -0x18(%rbp),%xmm0
  movsd  -0x118(%rbp),%xmm1
  addsd  %xmm1,%xmm0
  movsd  %xmm0,-0x118(%rbp)
  movsd  -0x20(%rbp),%xmm0
  mulsd  -0x10(%rbp),%xmm0
  movsd  -0x110(%rbp),%xmm1
  addsd  %xmm1,%xmm0
  movsd  %xmm0,-0x110(%rbp)
  movsd  -0x20(%rbp),%xmm0
  mulsd  -0x8(%rbp),%xmm0
  movsd  -0x108(%rbp),%xmm1
  addsd  %xmm1,%xmm0
  movsd  %xmm0,-0x108(%rbp)
  addl   $0x1,-0x14c(%rbp)
L6:
  mov    -0x14c(%rbp),%eax
  cmp    -0x164(%rbp),%eax
  jl     L16
  movsd  -0x148(%rbp),%xmm0
  mulsd  %xmm0,%xmm0
  movsd  %xmm0,-0xd0(%rbp)
  movsd  -0x128(%rbp),%xmm0
  mulsd  %xmm0,%xmm0
  movsd  %xmm0,-0xc8(%rbp)
  movsd  -0x108(%rbp),%xmm0
  mulsd  %xmm0,%xmm0
  movsd  %xmm0,-0xc0(%rbp)
  movsd  -0x140(%rbp),%xmm0
  mulsd  %xmm0,%xmm0
  movsd  %xmm0,-0xb8(%rbp)
  movsd  -0x120(%rbp),%xmm0
  mulsd  %xmm0,%xmm0
  movsd  %xmm0,-0xb0(%rbp)
  movsd  -0x138(%rbp),%xmm0
  mulsd  %xmm0,%xmm0
  movsd  %xmm0,-0xa8(%rbp)
  movsd  -0x130(%rbp),%xmm0
  mulsd  %xmm0,%xmm0
  movsd  %xmm0,-0xa0(%rbp)
  movsd  -0x110(%rbp),%xmm0
  mulsd  %xmm0,%xmm0
  movsd  %xmm0,-0x98(%rbp)
  movsd  -0x118(%rbp),%xmm0
  mulsd  %xmm0,%xmm0
  movsd  %xmm0,-0x90(%rbp)
  movsd  -0x120(%rbp),%xmm0
  mulsd  -0x110(%rbp),%xmm0
  movsd  -0x128(%rbp),%xmm1
  mulsd  -0x108(%rbp),%xmm1
  subsd  %xmm1,%xmm0
  addsd  %xmm0,%xmm0
  movsd  %xmm0,-0x88(%rbp)
  movsd  -0xc8(%rbp),%xmm0
  addsd  -0xc0(%rbp),%xmm0
  subsd  -0xd0(%rbp),%xmm0
  addsd  -0xb0(%rbp),%xmm0
  movsd  -0x98(%rbp),%xmm1
  addsd  %xmm1,%xmm0
  movsd  %xmm0,-0x80(%rbp)
  movsd  -0xd0(%rbp),%xmm0
  addsd  -0xc8(%rbp),%xmm0
  addsd  -0xc0(%rbp),%xmm0
  addsd  -0xb8(%rbp),%xmm0
  addsd  -0xa0(%rbp),%xmm0
  addsd  -0xa8(%rbp),%xmm0
  addsd  -0x90(%rbp),%xmm0
  addsd  -0xb0(%rbp),%xmm0
  movapd %xmm0,%xmm1
  addsd  -0x98(%rbp),%xmm1
  mov    -0x170(%rbp),%rax
  add    $0x10,%rax
  movsd  D77(%rip),%xmm0
  mulsd  %xmm1,%xmm0
  movsd  %xmm0,(%rax)
  movsd  -0x148(%rbp),%xmm0
  mulsd  -0x120(%rbp),%xmm0
  movapd %xmm0,%xmm1
  mulsd  -0x110(%rbp),%xmm1
  movsd  -0x128(%rbp),%xmm0
  mulsd  -0x118(%rbp),%xmm0
  mulsd  -0x138(%rbp),%xmm0
  addsd  %xmm0,%xmm1
  movsd  -0x108(%rbp),%xmm0
  mulsd  -0x140(%rbp),%xmm0
  mulsd  -0x130(%rbp),%xmm0
  addsd  %xmm1,%xmm0
  movsd  -0x148(%rbp),%xmm1
  mulsd  -0x128(%rbp),%xmm1
  mulsd  -0x108(%rbp),%xmm1
  subsd  %xmm1,%xmm0
  movsd  -0x120(%rbp),%xmm1
  mulsd  -0x118(%rbp),%xmm1
  mulsd  -0x140(%rbp),%xmm1
  subsd  %xmm1,%xmm0
  movsd  -0x110(%rbp),%xmm1
  mulsd  -0x130(%rbp),%xmm1
  movapd %xmm1,%xmm2
  mulsd  -0x138(%rbp),%xmm2
  movapd %xmm0,%xmm1
  subsd  %xmm2,%xmm1
  mov    -0x170(%rbp),%rax
  add    $0x8,%rax
  movsd  D20(%rip),%xmm0
  mulsd  %xmm1,%xmm0
  movsd  %xmm0,(%rax)
  movsd  -0x138(%rbp),%xmm0
  addsd  -0x118(%rbp),%xmm0
  movsd  %xmm0,-0x78(%rbp)
  movsd  -0x120(%rbp),%xmm0
  addsd  -0x110(%rbp),%xmm0
  movsd  %xmm0,-0x70(%rbp)
  movsd  -0x140(%rbp),%xmm0
  addsd  -0x130(%rbp),%xmm0
  movsd  %xmm0,-0x68(%rbp)
  movsd  -0x120(%rbp),%xmm0
  subsd  -0x110(%rbp),%xmm0
  movsd  %xmm0,-0x60(%rbp)
  movsd  -0x138(%rbp),%xmm0
  subsd  -0x118(%rbp),%xmm0
  movsd  %xmm0,-0x58(%rbp)
  movsd  -0x140(%rbp),%xmm0
  subsd  -0x130(%rbp),%xmm0
  movsd  %xmm0,-0x50(%rbp)
  movsd  -0x148(%rbp),%xmm0
  addsd  -0x128(%rbp),%xmm0
  movsd  %xmm0,-0x48(%rbp)
  movsd  -0x148(%rbp),%xmm0
  subsd  -0x128(%rbp),%xmm0
  movsd  %xmm0,-0x40(%rbp)
  movsd  -0xb8(%rbp),%xmm0
  addsd  -0xa8(%rbp),%xmm0
  subsd  -0xa0(%rbp),%xmm0
  subsd  -0x90(%rbp),%xmm0
  movsd  %xmm0,-0x38(%rbp)
  movsd  -0x38(%rbp),%xmm0
  movapd %xmm0,%xmm1
  mulsd  %xmm0,%xmm1
  movsd  -0x80(%rbp),%xmm0
  movapd %xmm0,%xmm2
  addsd  -0x88(%rbp),%xmm2
  movsd  -0x80(%rbp),%xmm0
  subsd  -0x88(%rbp),%xmm0
  mulsd  %xmm2,%xmm0
  addsd  %xmm0,%xmm1
  movsd  -0x78(%rbp),%xmm0
  movq   D56(%rip),%xmm2
  xorpd  %xmm2,%xmm0
  movapd %xmm0,%xmm2
  mulsd  -0x60(%rbp),%xmm2
  movsd  -0x40(%rbp),%xmm0
  subsd  -0x108(%rbp),%xmm0
  mulsd  -0x50(%rbp),%xmm0
  addsd  %xmm0,%xmm2
  movsd  -0x58(%rbp),%xmm0
  movq   D56(%rip),%xmm3
  xorpd  %xmm3,%xmm0
  movapd %xmm0,%xmm3
  mulsd  -0x70(%rbp),%xmm3
  movsd  -0x40(%rbp),%xmm0
  addsd  -0x108(%rbp),%xmm0
  mulsd  -0x50(%rbp),%xmm0
  addsd  %xmm3,%xmm0
  mulsd  %xmm2,%xmm0
  movapd %xmm1,%xmm2
  addsd  %xmm0,%xmm2
  movsd  -0x78(%rbp),%xmm0
  movq   D56(%rip),%xmm1
  xorpd  %xmm1,%xmm0
  mulsd  -0x70(%rbp),%xmm0
  movsd  -0x48(%rbp),%xmm1
  subsd  -0x108(%rbp),%xmm1
  mulsd  -0x68(%rbp),%xmm1
  movapd %xmm0,%xmm3
  subsd  %xmm1,%xmm3
  movsd  -0x58(%rbp),%xmm0
  movq   D56(%rip),%xmm1
  xorpd  %xmm1,%xmm0
  mulsd  -0x60(%rbp),%xmm0
  movsd  -0x48(%rbp),%xmm1
  addsd  -0x108(%rbp),%xmm1
  mulsd  -0x68(%rbp),%xmm1
  subsd  %xmm1,%xmm0
  mulsd  %xmm3,%xmm0
  addsd  %xmm0,%xmm2
  movapd %xmm2,%xmm1
  movsd  -0x68(%rbp),%xmm0
  movapd %xmm0,%xmm2
  mulsd  -0x70(%rbp),%xmm2
  movsd  -0x40(%rbp),%xmm0
  addsd  -0x108(%rbp),%xmm0
  mulsd  -0x78(%rbp),%xmm0
  addsd  %xmm0,%xmm2
  movsd  -0x50(%rbp),%xmm0
  movq   D56(%rip),%xmm3
  xorpd  %xmm3,%xmm0
  movapd %xmm0,%xmm3
  mulsd  -0x60(%rbp),%xmm3
  movsd  -0x48(%rbp),%xmm0
  addsd  -0x108(%rbp),%xmm0
  mulsd  -0x78(%rbp),%xmm0
  addsd  %xmm3,%xmm0
  mulsd  %xmm2,%xmm0
  addsd  %xmm0,%xmm1
  movsd  -0x68(%rbp),%xmm0
  movapd %xmm0,%xmm2
  mulsd  -0x60(%rbp),%xmm2
  movsd  -0x40(%rbp),%xmm0
  subsd  -0x108(%rbp),%xmm0
  mulsd  -0x58(%rbp),%xmm0
  addsd  %xmm0,%xmm2
  movsd  -0x50(%rbp),%xmm0
  movq   D56(%rip),%xmm3
  xorpd  %xmm3,%xmm0
  movapd %xmm0,%xmm3
  mulsd  -0x70(%rbp),%xmm3
  movsd  -0x48(%rbp),%xmm0
  subsd  -0x108(%rbp),%xmm0
  mulsd  -0x58(%rbp),%xmm0
  addsd  %xmm3,%xmm0
  mulsd  %xmm2,%xmm0
  addsd  %xmm1,%xmm0
  mov    -0x170(%rbp),%rax
  movsd  %xmm0,(%rax)
  nop
  leave
  ret
```

tool_calls: name: retrieve_data
arguments: tag: D77
type_guessed: f32[2]
name: retrieve_data
arguments: tag: D20
type_guessed: f64
name: retrieve_data
arguments: tag: D56
type_guessed: f32[2]

tool: {"D77": [0.0,-2.0]}

tool: D20: 8

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

assistant: ```c
void CalcQuarticCoeffs(const double **coords1, const double **coords2, const int len, double *coeff) {
  double Sxx, Sxy, Sxz, Syx, Syy, Syz, Szx, Szy, Szz;
  double Szz2, Syy2, Sxx2, Sxy2, Syz2, Sxz2, Syx2, Szy2, Szx2, SyzSzymSyySzz2, Sxx2Syy2Szz2Syz2Szy2, Sxy2Sxz2Syx2Szx2, SxzpSzx, SyzpSzy, SxypSyx, SyzmSzy, SxzmSzx, SxymSyx, SxxpSyy, SxxmSyy;
  double x1, x2, y1, y2, z1, z2;
  const double *fx1 = coords1[0], *fy1 = coords1[1], *fz1 = coords1[2], *fx2 = coords2[0], *fy2 = coords2[1], *fz2 = coords2[2];
  int i;
  Sxx = Sxy = Sxz = Syx = Syy = Syz = Szx = Szy = Szz = 0.0;
  for (i = 0; i < len; ++i) {
    x1 = fx1[i];
    y1 = fy1[i];
    z1 = fz1[i];
    x2 = fx2[i];
    y2 = fy2[i];
    z2 = fz2[i];
    Sxx += (x1 * x2);
    Sxy += (x1 * y2);
    Sxz += (x1 * z2);
    Syx += (y1 * x2);
    Syy += (y1 * y2);
    Syz += (y1 * z2);
    Szx += (z1 * x2);
    Szy += (z1 * y2);
    Szz += (z1 * z2);
  }
  Sxx2 = Sxx * Sxx;
  Syy2 = Syy * Syy;
  Szz2 = Szz * Szz;
  Sxy2 = Sxy * Sxy;
  Syz2 = Syz * Syz;
  Sxz2 = Sxz * Sxz;
  Syx2 = Syx * Syx;
  Szy2 = Szy * Szy;
  Szx2 = Szx * Szx;
  SyzSzymSyySzz2 = 2.0 * (Syz * Szy - Syy * Szz);
  Sxx2Syy2Szz2Syz2Szy2 = Syy2 + Szz2 - Sxx2 + Syz2 + Szy2;
  coeff[2] = -2.0 * (Sxx2 + Syy2 + Szz2 + Sxy2 + Syx2 + Sxz2 + Szx2 + Syz2 + Szy2);
  coeff[1] = 8.0 * (Sxx * Syz * Szy + Syy * Szx * Sxz + Szz * Sxy * Syx - Sxx * Syy * Szz - Syz * Szx * Sxy - Szy * Syx * Sxz);
  SxzpSzx = Sxz + Szx;
  SyzpSzy = Syz + Szy;
  SxypSyx = Sxy + Syx;
  SyzmSzy = Syz - Szy;
  SxzmSzx = Sxz - Szx;
  SxymSyx = Sxy - Syx;
  SxxpSyy = Sxx + Syy;
  SxxmSyy = Sxx - Syy;
  Sxy2Sxz2Syx2Szx2 = Sxy2 + Sxz2 - Syx2 - Szx2;
  coeff[0] = Sxy2Sxz2Syx2Szx2 * Sxy2Sxz2Syx2Szx2 + (Sxx2Syy2Szz2Syz2Szy2 + SyzSzymSyySzz2) * (Sxx2Syy2Szz2Syz2Szy2 - SyzSzymSyySzz2) + (-(SxzpSzx) * (SyzmSzy) + (SxymSyx) * (SxxmSyy - Szz)) * (-(SxzmSzx) * (SyzpSzy) + (SxymSyx) * (SxxmSyy + Szz)) + (-(SxzpSzx) * (SyzpSzy) - (SxypSyx) * (SxxpSyy - Szz)) * (-(SxzmSzx) * (SyzmSzy) - (SxypSyx) * (SxxpSyy + Szz)) + (+(SxypSyx) * (SyzpSzy) + (SxzpSzx) * (SxxmSyy + Szz)) * (-(SxymSyx) * (SyzmSzy) + (SxzpSzx) * (SxxpSyy + Szz)) + (+(SxypSyx) * (SyzmSzy) + (SxzmSzx) * (SxxmSyy - Szz)) * (-(SxymSyx) * (SyzpSzy) + (SxzmSzx) * (SxxpSyy - Szz));
}
```