user: Please show me the C implementation that matches the assembly code listed below:

```asm
<overlap>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0xb0,%rsp
  movsd  %xmm0,-0x58(%rbp)
  mov    %edi,-0x5c(%rbp)
  mov    %esi,-0x60(%rbp)
  mov    %edx,-0x64(%rbp)
  movsd  %xmm1,-0x70(%rbp)
  movsd  %xmm2,-0x78(%rbp)
  movsd  %xmm3,-0x80(%rbp)
  movsd  %xmm4,-0x88(%rbp)
  mov    %ecx,-0x68(%rbp)
  mov    %r8d,-0x8c(%rbp)
  mov    %r9d,-0x90(%rbp)
  movsd  %xmm5,-0x98(%rbp)
  movsd  %xmm6,-0xa0(%rbp)
  movsd  %xmm7,-0xa8(%rbp)
  movsd  -0xa8(%rbp),%xmm4
  movsd  -0xa0(%rbp),%xmm3
  movsd  -0x98(%rbp),%xmm2
  movsd  -0x80(%rbp),%xmm1
  movsd  -0x78(%rbp),%xmm0
  mov    -0x70(%rbp),%rax
  movapd %xmm4,%xmm5
  movapd %xmm3,%xmm4
  movapd %xmm2,%xmm3
  movapd %xmm1,%xmm2
  movapd %xmm0,%xmm1
  movq   %rax,%xmm0
  call   <dist2@plt>
  movq   %xmm0,%rax
  mov    %rax,-0x48(%rbp)
  movsd  -0x58(%rbp),%xmm0
  addsd  -0x88(%rbp),%xmm0
  movsd  %xmm0,-0x40(%rbp)
  movsd  -0x98(%rbp),%xmm2
  movsd  -0x88(%rbp),%xmm1
  movsd  -0x70(%rbp),%xmm0
  mov    -0x58(%rbp),%rax
  movapd %xmm2,%xmm3
  movapd %xmm1,%xmm2
  movapd %xmm0,%xmm1
  movq   %rax,%xmm0
  call   <product_center_1D@plt>
  movq   %xmm0,%rax
  mov    %rax,-0x38(%rbp)
  movsd  -0xa0(%rbp),%xmm2
  movsd  -0x88(%rbp),%xmm1
  movsd  -0x78(%rbp),%xmm0
  mov    -0x58(%rbp),%rax
  movapd %xmm2,%xmm3
  movapd %xmm1,%xmm2
  movapd %xmm0,%xmm1
  movq   %rax,%xmm0
  call   <product_center_1D@plt>
  movq   %xmm0,%rax
  mov    %rax,-0x30(%rbp)
  movsd  -0xa8(%rbp),%xmm2
  movsd  -0x88(%rbp),%xmm1
  movsd  -0x80(%rbp),%xmm0
  mov    -0x58(%rbp),%rax
  movapd %xmm2,%xmm3
  movapd %xmm1,%xmm2
  movapd %xmm0,%xmm1
  movq   %rax,%xmm0
  call   <product_center_1D@plt>
  movq   %xmm0,%rax
  mov    %rax,-0x28(%rbp)
  movsd  D5(%rip),%xmm0
  divsd  -0x40(%rbp),%xmm0
  movq   %xmm0,%rax
  movsd  D19(%rip),%xmm0
  movapd %xmm0,%xmm1
  movq   %rax,%xmm0
  call   <pow@plt>
  movsd  %xmm0,-0xb0(%rbp)
  movsd  -0x58(%rbp),%xmm0
  movq   D20(%rip),%xmm1
  xorpd  %xmm1,%xmm0
  mulsd  -0x88(%rbp),%xmm0
  mulsd  -0x48(%rbp),%xmm0
  movapd %xmm0,%xmm6
  divsd  -0x40(%rbp),%xmm6
  movq   %xmm6,%rax
  movq   %rax,%xmm0
  call   <exp@plt>
  mulsd  -0xb0(%rbp),%xmm0
  movsd  %xmm0,-0x20(%rbp)
  movsd  -0x38(%rbp),%xmm0
  movapd %xmm0,%xmm1
  subsd  -0x98(%rbp),%xmm1
  movsd  -0x38(%rbp),%xmm0
  subsd  -0x70(%rbp),%xmm0
  movq   %xmm0,%rcx
  movsd  -0x40(%rbp),%xmm0
  mov    -0x68(%rbp),%edx
  mov    -0x5c(%rbp),%eax
  movapd %xmm0,%xmm2
  movq   %rcx,%xmm0
  mov    %edx,%esi
  mov    %eax,%edi
  call   <overlap_1D@plt>
  movq   %xmm0,%rax
  mov    %rax,-0x18(%rbp)
  movsd  -0x30(%rbp),%xmm0
  movapd %xmm0,%xmm1
  subsd  -0xa0(%rbp),%xmm1
  movsd  -0x30(%rbp),%xmm0
  subsd  -0x78(%rbp),%xmm0
  movq   %xmm0,%rcx
  movsd  -0x40(%rbp),%xmm0
  mov    -0x8c(%rbp),%edx
  mov    -0x60(%rbp),%eax
  movapd %xmm0,%xmm2
  movq   %rcx,%xmm0
  mov    %edx,%esi
  mov    %eax,%edi
  call   <overlap_1D@plt>
  movq   %xmm0,%rax
  mov    %rax,-0x10(%rbp)
  movsd  -0x28(%rbp),%xmm0
  movapd %xmm0,%xmm1
  subsd  -0xa8(%rbp),%xmm1
  movsd  -0x28(%rbp),%xmm0
  subsd  -0x80(%rbp),%xmm0
  movq   %xmm0,%rcx
  movsd  -0x40(%rbp),%xmm0
  mov    -0x90(%rbp),%edx
  mov    -0x64(%rbp),%eax
  movapd %xmm0,%xmm2
  movq   %rcx,%xmm0
  mov    %edx,%esi
  mov    %eax,%edi
  call   <overlap_1D@plt>
  movq   %xmm0,%rax
  mov    %rax,-0x8(%rbp)
  movsd  -0x20(%rbp),%xmm0
  mulsd  -0x18(%rbp),%xmm0
  mulsd  -0x10(%rbp),%xmm0
  mulsd  -0x8(%rbp),%xmm0
  movq   %xmm0,%rax
  movq   %rax,%xmm0
  leave
  ret
```

tool_calls: name: disassemble_data
arguments: data_tag: D5
data_type: f64
name: disassemble_data
arguments: data_tag: D19
data_type: f64
name: disassemble_data
arguments: data_tag: D20
data_type: byte[8]

tool: D5: 3.141592653589793

tool: D19: 1.5

tool: {"D20": [0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80]}

assistant: ```c
double overlap(double alpha1, int l1, int m1, int n1, double xa, double ya, double za, double alpha2, int l2, int m2, int n2, double xb, double yb, double zb) {
  double rab2, gamma, xp, yp, zp, pre, wx, wy, wz;
  rab2 = dist2(xa, ya, za, xb, yb, zb);
  gamma = alpha1 + alpha2;
  xp = product_center_1D(alpha1, xa, alpha2, xb);
  yp = product_center_1D(alpha1, ya, alpha2, yb);
  zp = product_center_1D(alpha1, za, alpha2, zb);
  pre = pow(3.14159265358979323846 / gamma, 1.5) * exp(-alpha1 * alpha2 * rab2 / gamma);
  wx = overlap_1D(l1, l2, xp - xa, xp - xb, gamma);
  wy = overlap_1D(m1, m2, yp - ya, yp - yb, gamma);
  wz = overlap_1D(n1, n2, zp - za, zp - zb, gamma);
  return pre * wx * wy * wz;
}
```