user: 请将这段汇编代码片段转换成等效的C代码：

```asm
<matrix_ft_self_atimes>:
  endbr64
  mov    %rdi,%rdx
  mov    %rsi,%rax
  subsd  %xmm4,%xmm3
  subsd  %xmm7,%xmm6
  movapd %xmm0,%xmm12
  mulsd  %xmm0,%xmm12
  movapd %xmm1,%xmm9
  mulsd  %xmm1,%xmm9
  movapd %xmm2,%xmm8
  mulsd  %xmm2,%xmm8
  movapd %xmm0,%xmm11
  mulsd  %xmm1,%xmm11
  movapd %xmm1,%xmm10
  mulsd  %xmm2,%xmm10
  movapd %xmm0,%xmm13
  mulsd  %xmm2,%xmm13
  movsd  %xmm13,-0x10(%rsp)
  mulsd  %xmm5,%xmm0
  mulsd  %xmm5,%xmm1
  mulsd  %xmm2,%xmm5
  movsd  %xmm12,-0x8(%rsp)
  movapd %xmm12,%xmm15
  mulsd  %xmm3,%xmm15
  addsd  %xmm4,%xmm15
  mulsd  (%rdi),%xmm15
  addsd  (%rsi),%xmm15
  movsd  %xmm15,(%rsi)
  movapd %xmm3,%xmm2
  mulsd  %xmm9,%xmm2
  addsd  %xmm4,%xmm2
  mulsd  0x8(%rdi),%xmm2
  addsd  0x8(%rsi),%xmm2
  movsd  %xmm2,0x8(%rsi)
  movapd %xmm3,%xmm14
  mulsd  %xmm8,%xmm14
  addsd  %xmm14,%xmm4
  mulsd  0x10(%rdi),%xmm4
  addsd  0x10(%rsi),%xmm4
  movsd  %xmm4,0x10(%rsi)
  movapd %xmm3,%xmm14
  mulsd  %xmm11,%xmm14
  movapd %xmm14,%xmm13
  mulsd  0x8(%rdi),%xmm14
  addsd  %xmm15,%xmm14
  movapd %xmm14,%xmm12
  movsd  %xmm14,(%rsi)
  movapd %xmm13,%xmm15
  mulsd  (%rdi),%xmm15
  addsd  %xmm15,%xmm2
  movsd  %xmm2,0x8(%rsi)
  movapd %xmm3,%xmm14
  mulsd  %xmm10,%xmm14
  movapd %xmm14,%xmm15
  mulsd  0x10(%rdi),%xmm15
  addsd  %xmm2,%xmm15
  movsd  %xmm15,0x8(%rsi)
  mulsd  0x8(%rdi),%xmm14
  addsd  %xmm14,%xmm4
  movsd  %xmm4,0x10(%rsi)
  mulsd  -0x10(%rsp),%xmm3
  movapd %xmm3,%xmm2
  mulsd  (%rdi),%xmm2
  addsd  %xmm4,%xmm2
  movq   %xmm2,%rdi
  movsd  %xmm2,0x10(%rsi)
  mulsd  0x10(%rdx),%xmm3
  addsd  %xmm12,%xmm3
  movsd  %xmm3,(%rsi)
  movapd %xmm5,%xmm14
  mulsd  0x8(%rdx),%xmm14
  addsd  0x18(%rsi),%xmm14
  movsd  %xmm14,0x18(%rsi)
  movq   D3(%rip),%xmm2
  movapd %xmm1,%xmm4
  xorpd  %xmm2,%xmm4
  movapd %xmm4,%xmm13
  mulsd  0x10(%rdx),%xmm4
  addsd  %xmm14,%xmm4
  movq   %xmm4,%rsi
  movsd  %xmm4,0x18(%rax)
  movapd %xmm5,%xmm4
  xorpd  %xmm2,%xmm4
  movapd %xmm4,%xmm12
  movapd %xmm4,%xmm14
  mulsd  (%rdx),%xmm14
  addsd  0x20(%rax),%xmm14
  movsd  %xmm14,0x20(%rax)
  movapd %xmm0,%xmm4
  mulsd  0x10(%rdx),%xmm4
  addsd  %xmm14,%xmm4
  movq   %xmm4,%rcx
  movsd  %xmm4,0x20(%rax)
  movapd %xmm1,%xmm14
  mulsd  (%rdx),%xmm14
  addsd  0x28(%rax),%xmm14
  movsd  %xmm14,0x28(%rax)
  xorpd  %xmm0,%xmm2
  movapd %xmm2,%xmm4
  mulsd  0x8(%rdx),%xmm4
  addsd  %xmm14,%xmm4
  movsd  %xmm4,0x28(%rax)
  mulsd  0x18(%rdx),%xmm5
  addsd  %xmm15,%xmm5
  movsd  %xmm5,0x8(%rax)
  movapd %xmm13,%xmm15
  mulsd  0x18(%rdx),%xmm15
  movq   %rdi,%xmm14
  addsd  %xmm14,%xmm15
  movsd  %xmm15,0x10(%rax)
  movapd %xmm12,%xmm14
  mulsd  0x20(%rdx),%xmm14
  addsd  %xmm3,%xmm14
  movsd  %xmm14,(%rax)
  mulsd  0x20(%rdx),%xmm0
  addsd  %xmm15,%xmm0
  movsd  %xmm0,0x10(%rax)
  mulsd  0x28(%rdx),%xmm1
  addsd  %xmm14,%xmm1
  movsd  %xmm1,(%rax)
  mulsd  0x28(%rdx),%xmm2
  addsd  %xmm5,%xmm2
  movsd  %xmm2,0x8(%rax)
  movsd  -0x8(%rsp),%xmm0
  mulsd  %xmm6,%xmm0
  addsd  %xmm7,%xmm0
  mulsd  0x18(%rdx),%xmm0
  movq   %rsi,%xmm5
  addsd  %xmm5,%xmm0
  movsd  %xmm0,0x18(%rax)
  mulsd  %xmm6,%xmm9
  addsd  %xmm7,%xmm9
  mulsd  0x20(%rdx),%xmm9
  movq   %rcx,%xmm3
  addsd  %xmm3,%xmm9
  movsd  %xmm9,0x20(%rax)
  mulsd  %xmm6,%xmm8
  addsd  %xmm7,%xmm8
  mulsd  0x28(%rdx),%xmm8
  addsd  %xmm4,%xmm8
  movsd  %xmm8,0x28(%rax)
  mulsd  %xmm6,%xmm11
  movapd %xmm11,%xmm1
  mulsd  0x20(%rdx),%xmm1
  addsd  %xmm1,%xmm0
  movsd  %xmm0,0x18(%rax)
  mulsd  0x18(%rdx),%xmm11
  addsd  %xmm9,%xmm11
  movsd  %xmm11,0x20(%rax)
  mulsd  %xmm6,%xmm10
  movapd %xmm10,%xmm1
  mulsd  0x28(%rdx),%xmm1
  addsd  %xmm11,%xmm1
  movsd  %xmm1,0x20(%rax)
  mulsd  0x20(%rdx),%xmm10
  addsd  %xmm8,%xmm10
  movsd  %xmm10,0x28(%rax)
  mulsd  -0x10(%rsp),%xmm6
  movapd %xmm6,%xmm1
  mulsd  0x18(%rdx),%xmm1
  addsd  %xmm10,%xmm1
  movsd  %xmm1,0x28(%rax)
  mulsd  0x28(%rdx),%xmm6
  addsd  %xmm0,%xmm6
  movsd  %xmm6,0x18(%rax)
  ret
```

tool_calls: name: disassemble_data
arguments: data_label: D3
type_infered: byte[8]

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

assistant: ```c
void matrix_ft_self_atimes(const double *x, double *y, double ex, double ey, double ez, double xa, double ya, double yb, double xc, double yc) {
  double a1, a2;
  double b1;
  double c1, c2;
  double b1x, b1y, b1z;
  double exx, eyy, ezz, exy, eyz, exz;
  a1 = ya;
  a2 = xa - ya;
  b1 = yb;
  c1 = yc;
  c2 = xc - yc;
  exx = ex * ex;
  eyy = ey * ey;
  ezz = ez * ez;
  exy = ex * ey;
  eyz = ey * ez;
  exz = ez * ex;
  b1x = b1 * ex;
  b1y = b1 * ey;
  b1z = b1 * ez;
  y[0] += x[0] * (a1 + a2 * exx);
  y[1] += x[1] * (a1 + a2 * eyy);
  y[2] += x[2] * (a1 + a2 * ezz);
  y[0] += x[1] * (a2 * exy);
  y[1] += x[0] * (a2 * exy);
  y[1] += x[2] * (a2 * eyz);
  y[2] += x[1] * (a2 * eyz);
  y[2] += x[0] * (a2 * exz);
  y[0] += x[2] * (a2 * exz);
  y[3] += x[1] * (+b1z);
  y[3] += x[2] * (-b1y);
  y[4] += x[0] * (-b1z);
  y[4] += x[2] * (+b1x);
  y[5] += x[0] * (+b1y);
  y[5] += x[1] * (-b1x);
  y[1] += x[3] * (+b1z);
  y[2] += x[3] * (-b1y);
  y[0] += x[4] * (-b1z);
  y[2] += x[4] * (+b1x);
  y[0] += x[5] * (+b1y);
  y[1] += x[5] * (-b1x);
  y[3] += x[3] * (c1 + c2 * exx);
  y[4] += x[4] * (c1 + c2 * eyy);
  y[5] += x[5] * (c1 + c2 * ezz);
  y[3] += x[4] * (c2 * exy);
  y[4] += x[3] * (c2 * exy);
  y[4] += x[5] * (c2 * eyz);
  y[5] += x[4] * (c2 * eyz);
  y[5] += x[3] * (c2 * exz);
  y[3] += x[5] * (c2 * exz);
}
```