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

```asm
<cftf082>:
  endbr64
  movsd  0x8(%rdi),%xmm2
  movsd  (%rdi),%xmm3
  movsd  0x40(%rdi),%xmm0
  movsd  0x48(%rdi),%xmm4
  movapd %xmm2,%xmm7
  movapd %xmm3,%xmm9
  movsd  0x8(%rsi),%xmm6
  movsd  0x68(%rdi),%xmm11
  addsd  %xmm0,%xmm7
  subsd  %xmm0,%xmm2
  movsd  0x20(%rdi),%xmm0
  movsd  0x60(%rdi),%xmm10
  subsd  %xmm4,%xmm9
  addsd  %xmm4,%xmm3
  movsd  0x28(%rdi),%xmm4
  movsd  0x20(%rsi),%xmm1
  movapd %xmm0,%xmm8
  addsd  %xmm11,%xmm0
  movsd  0x28(%rsi),%xmm5
  subsd  %xmm11,%xmm8
  movapd %xmm4,%xmm12
  subsd  %xmm10,%xmm4
  movsd  0x50(%rdi),%xmm11
  addsd  %xmm10,%xmm12
  movsd  %xmm2,-0x20(%rsp)
  movapd %xmm0,%xmm13
  subsd  %xmm4,%xmm13
  movapd %xmm8,%xmm14
  addsd  %xmm4,%xmm0
  subsd  %xmm12,%xmm14
  addsd  %xmm12,%xmm8
  movsd  0x10(%rdi),%xmm12
  mulsd  %xmm6,%xmm0
  movapd %xmm13,%xmm15
  movapd %xmm12,%xmm10
  mulsd  %xmm6,%xmm14
  movapd %xmm1,%xmm13
  mulsd  %xmm6,%xmm8
  mulsd  %xmm6,%xmm15
  movsd  0x58(%rdi),%xmm6
  subsd  %xmm6,%xmm10
  movsd  %xmm0,-0x10(%rsp)
  movsd  0x18(%rdi),%xmm0
  movapd %xmm0,%xmm4
  movsd  %xmm8,-0x28(%rsp)
  subsd  %xmm11,%xmm0
  mulsd  %xmm10,%xmm13
  addsd  %xmm11,%xmm4
  movapd %xmm1,%xmm11
  movsd  %xmm15,-0x18(%rsp)
  mulsd  %xmm5,%xmm10
  movsd  0x30(%rdi),%xmm15
  mulsd  %xmm0,%xmm11
  mulsd  %xmm5,%xmm0
  movapd %xmm13,%xmm8
  movapd %xmm5,%xmm13
  mulsd  %xmm4,%xmm13
  mulsd  %xmm1,%xmm4
  subsd  %xmm13,%xmm8
  movapd %xmm5,%xmm13
  addsd  %xmm10,%xmm4
  movapd %xmm12,%xmm10
  movapd %xmm1,%xmm12
  addsd  %xmm6,%xmm10
  movapd %xmm5,%xmm6
  mulsd  %xmm10,%xmm6
  mulsd  %xmm1,%xmm10
  subsd  %xmm11,%xmm6
  movapd %xmm15,%xmm11
  subsd  0x78(%rdi),%xmm11
  addsd  %xmm10,%xmm0
  movsd  0x38(%rdi),%xmm10
  addsd  0x70(%rdi),%xmm10
  mulsd  %xmm11,%xmm13
  mulsd  %xmm10,%xmm12
  mulsd  %xmm1,%xmm11
  mulsd  %xmm5,%xmm10
  subsd  %xmm12,%xmm13
  movsd  0x38(%rdi),%xmm12
  subsd  0x70(%rdi),%xmm12
  addsd  %xmm11,%xmm10
  movsd  0x78(%rdi),%xmm11
  movapd %xmm13,%xmm2
  movapd %xmm1,%xmm13
  addsd  %xmm15,%xmm11
  movapd %xmm5,%xmm15
  movsd  %xmm2,-0x8(%rsp)
  mulsd  %xmm12,%xmm15
  mulsd  %xmm12,%xmm1
  movapd %xmm4,%xmm12
  subsd  %xmm10,%xmm4
  mulsd  %xmm11,%xmm13
  addsd  %xmm10,%xmm12
  mulsd  %xmm11,%xmm5
  movapd %xmm9,%xmm11
  subsd  %xmm14,%xmm9
  addsd  %xmm14,%xmm11
  subsd  %xmm15,%xmm13
  movapd %xmm2,%xmm15
  movapd %xmm11,%xmm2
  addsd  %xmm8,%xmm15
  addsd  %xmm5,%xmm1
  movsd  -0x28(%rsp),%xmm5
  addsd  %xmm7,%xmm5
  addsd  %xmm15,%xmm2
  subsd  %xmm15,%xmm11
  movsd  %xmm2,(%rdi)
  movapd %xmm5,%xmm2
  subsd  %xmm12,%xmm5
  addsd  %xmm12,%xmm2
  movsd  %xmm11,0x10(%rdi)
  movsd  %xmm5,0x18(%rdi)
  movapd %xmm9,%xmm5
  addsd  %xmm4,%xmm9
  subsd  %xmm4,%xmm5
  movsd  %xmm2,0x8(%rdi)
  subsd  -0x28(%rsp),%xmm7
  movsd  -0x10(%rsp),%xmm12
  subsd  -0x8(%rsp),%xmm8
  movsd  -0x18(%rsp),%xmm14
  movsd  -0x20(%rsp),%xmm2
  movsd  %xmm9,0x30(%rdi)
  movsd  %xmm5,0x20(%rdi)
  movapd %xmm7,%xmm5
  movapd %xmm14,%xmm4
  addsd  %xmm8,%xmm5
  subsd  %xmm8,%xmm7
  movapd %xmm6,%xmm8
  subsd  %xmm13,%xmm8
  addsd  %xmm2,%xmm4
  subsd  %xmm14,%xmm2
  addsd  %xmm13,%xmm6
  movsd  %xmm5,0x28(%rdi)
  movapd %xmm3,%xmm5
  addsd  %xmm12,%xmm3
  subsd  %xmm12,%xmm5
  movsd  %xmm7,0x38(%rdi)
  movapd %xmm0,%xmm7
  addsd  %xmm1,%xmm0
  subsd  %xmm1,%xmm7
  movapd %xmm3,%xmm1
  movapd %xmm5,%xmm9
  subsd  %xmm0,%xmm1
  subsd  %xmm8,%xmm5
  addsd  %xmm8,%xmm9
  addsd  %xmm0,%xmm3
  movsd  %xmm1,0x60(%rdi)
  movapd %xmm2,%xmm1
  subsd  %xmm6,%xmm2
  movsd  %xmm9,0x40(%rdi)
  movapd %xmm4,%xmm9
  addsd  %xmm6,%xmm1
  subsd  %xmm7,%xmm4
  addsd  %xmm7,%xmm9
  movsd  %xmm5,0x50(%rdi)
  movsd  %xmm3,0x70(%rdi)
  movsd  %xmm4,0x58(%rdi)
  movsd  %xmm9,0x48(%rdi)
  movsd  %xmm1,0x68(%rdi)
  movsd  %xmm2,0x78(%rdi)
  ret
```

assistant: ```c
void cftf082(double *a, double *w) {
  double wn4r, wk1r, wk1i, x0r, x0i, x1r, x1i, y0r, y0i, y1r, y1i, y2r, y2i, y3r, y3i, y4r, y4i, y5r, y5i, y6r, y6i, y7r, y7i;
  wn4r = w[1];
  wk1r = w[4];
  wk1i = w[5];
  y0r = a[0] - a[9];
  y0i = a[1] + a[8];
  y1r = a[0] + a[9];
  y1i = a[1] - a[8];
  x0r = a[4] - a[13];
  x0i = a[5] + a[12];
  y2r = wn4r * (x0r - x0i);
  y2i = wn4r * (x0i + x0r);
  x0r = a[4] + a[13];
  x0i = a[5] - a[12];
  y3r = wn4r * (x0r - x0i);
  y3i = wn4r * (x0i + x0r);
  x0r = a[2] - a[11];
  x0i = a[3] + a[10];
  y4r = wk1r * x0r - wk1i * x0i;
  y4i = wk1r * x0i + wk1i * x0r;
  x0r = a[2] + a[11];
  x0i = a[3] - a[10];
  y5r = wk1i * x0r - wk1r * x0i;
  y5i = wk1i * x0i + wk1r * x0r;
  x0r = a[6] - a[15];
  x0i = a[7] + a[14];
  y6r = wk1i * x0r - wk1r * x0i;
  y6i = wk1i * x0i + wk1r * x0r;
  x0r = a[6] + a[15];
  x0i = a[7] - a[14];
  y7r = wk1r * x0r - wk1i * x0i;
  y7i = wk1r * x0i + wk1i * x0r;
  x0r = y0r + y2r;
  x0i = y0i + y2i;
  x1r = y4r + y6r;
  x1i = y4i + y6i;
  a[0] = x0r + x1r;
  a[1] = x0i + x1i;
  a[2] = x0r - x1r;
  a[3] = x0i - x1i;
  x0r = y0r - y2r;
  x0i = y0i - y2i;
  x1r = y4r - y6r;
  x1i = y4i - y6i;
  a[4] = x0r - x1i;
  a[5] = x0i + x1r;
  a[6] = x0r + x1i;
  a[7] = x0i - x1r;
  x0r = y1r - y3i;
  x0i = y1i + y3r;
  x1r = y5r - y7r;
  x1i = y5i - y7i;
  a[8] = x0r + x1r;
  a[9] = x0i + x1i;
  a[10] = x0r - x1r;
  a[11] = x0i - x1i;
  x0r = y1r + y3i;
  x0i = y1i - y3r;
  x1r = y5r + y7r;
  x1i = y5i + y7i;
  a[12] = x0r - x1i;
  a[13] = x0i + x1r;
  a[14] = x0r + x1i;
  a[15] = x0i - x1r;
}
```