user: Demonstrate the C code that generates the assembly output below:

```asm
<cftf082>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x58,%rsp
  mov    %rdi,-0xc8(%rbp)
  mov    %rsi,-0xd0(%rbp)
  mov    -0xd0(%rbp),%rax
  movsd  0x8(%rax),%xmm0
  movsd  %xmm0,-0xb8(%rbp)
  mov    -0xd0(%rbp),%rax
  movsd  0x20(%rax),%xmm0
  movsd  %xmm0,-0xb0(%rbp)
  mov    -0xd0(%rbp),%rax
  movsd  0x28(%rax),%xmm0
  movsd  %xmm0,-0xa8(%rbp)
  mov    -0xc8(%rbp),%rax
  movsd  (%rax),%xmm0
  mov    -0xc8(%rbp),%rax
  add    $0x48,%rax
  movsd  (%rax),%xmm1
  subsd  %xmm1,%xmm0
  movsd  %xmm0,-0xa0(%rbp)
  mov    -0xc8(%rbp),%rax
  add    $0x8,%rax
  movsd  (%rax),%xmm1
  mov    -0xc8(%rbp),%rax
  add    $0x40,%rax
  movsd  (%rax),%xmm0
  addsd  %xmm1,%xmm0
  movsd  %xmm0,-0x98(%rbp)
  mov    -0xc8(%rbp),%rax
  movsd  (%rax),%xmm1
  mov    -0xc8(%rbp),%rax
  add    $0x48,%rax
  movsd  (%rax),%xmm0
  addsd  %xmm1,%xmm0
  movsd  %xmm0,-0x90(%rbp)
  mov    -0xc8(%rbp),%rax
  add    $0x8,%rax
  movsd  (%rax),%xmm0
  mov    -0xc8(%rbp),%rax
  add    $0x40,%rax
  movsd  (%rax),%xmm1
  subsd  %xmm1,%xmm0
  movsd  %xmm0,-0x88(%rbp)
  mov    -0xc8(%rbp),%rax
  add    $0x20,%rax
  movsd  (%rax),%xmm0
  mov    -0xc8(%rbp),%rax
  add    $0x68,%rax
  movsd  (%rax),%xmm1
  subsd  %xmm1,%xmm0
  movsd  %xmm0,-0x80(%rbp)
  mov    -0xc8(%rbp),%rax
  add    $0x28,%rax
  movsd  (%rax),%xmm1
  mov    -0xc8(%rbp),%rax
  add    $0x60,%rax
  movsd  (%rax),%xmm0
  addsd  %xmm1,%xmm0
  movsd  %xmm0,-0x78(%rbp)
  movsd  -0x80(%rbp),%xmm0
  subsd  -0x78(%rbp),%xmm0
  movsd  -0xb8(%rbp),%xmm1
  mulsd  %xmm1,%xmm0
  movsd  %xmm0,-0x70(%rbp)
  movsd  -0x78(%rbp),%xmm0
  addsd  -0x80(%rbp),%xmm0
  movsd  -0xb8(%rbp),%xmm1
  mulsd  %xmm1,%xmm0
  movsd  %xmm0,-0x68(%rbp)
  mov    -0xc8(%rbp),%rax
  add    $0x20,%rax
  movsd  (%rax),%xmm1
  mov    -0xc8(%rbp),%rax
  add    $0x68,%rax
  movsd  (%rax),%xmm0
  addsd  %xmm1,%xmm0
  movsd  %xmm0,-0x80(%rbp)
  mov    -0xc8(%rbp),%rax
  add    $0x28,%rax
  movsd  (%rax),%xmm0
  mov    -0xc8(%rbp),%rax
  add    $0x60,%rax
  movsd  (%rax),%xmm1
  subsd  %xmm1,%xmm0
  movsd  %xmm0,-0x78(%rbp)
  movsd  -0x80(%rbp),%xmm0
  subsd  -0x78(%rbp),%xmm0
  movsd  -0xb8(%rbp),%xmm1
  mulsd  %xmm1,%xmm0
  movsd  %xmm0,-0x60(%rbp)
  movsd  -0x78(%rbp),%xmm0
  addsd  -0x80(%rbp),%xmm0
  movsd  -0xb8(%rbp),%xmm1
  mulsd  %xmm1,%xmm0
  movsd  %xmm0,-0x58(%rbp)
  mov    -0xc8(%rbp),%rax
  add    $0x10,%rax
  movsd  (%rax),%xmm0
  mov    -0xc8(%rbp),%rax
  add    $0x58,%rax
  movsd  (%rax),%xmm1
  subsd  %xmm1,%xmm0
  movsd  %xmm0,-0x80(%rbp)
  mov    -0xc8(%rbp),%rax
  add    $0x18,%rax
  movsd  (%rax),%xmm1
  mov    -0xc8(%rbp),%rax
  add    $0x50,%rax
  movsd  (%rax),%xmm0
  addsd  %xmm1,%xmm0
  movsd  %xmm0,-0x78(%rbp)
  movsd  -0xb0(%rbp),%xmm0
  mulsd  -0x80(%rbp),%xmm0
  movsd  -0xa8(%rbp),%xmm1
  mulsd  -0x78(%rbp),%xmm1
  subsd  %xmm1,%xmm0
  movsd  %xmm0,-0x50(%rbp)
  movsd  -0xb0(%rbp),%xmm0
  movapd %xmm0,%xmm1
  mulsd  -0x78(%rbp),%xmm1
  movsd  -0xa8(%rbp),%xmm0
  mulsd  -0x80(%rbp),%xmm0
  addsd  %xmm1,%xmm0
  movsd  %xmm0,-0x48(%rbp)
  mov    -0xc8(%rbp),%rax
  add    $0x10,%rax
  movsd  (%rax),%xmm1
  mov    -0xc8(%rbp),%rax
  add    $0x58,%rax
  movsd  (%rax),%xmm0
  addsd  %xmm1,%xmm0
  movsd  %xmm0,-0x80(%rbp)
  mov    -0xc8(%rbp),%rax
  add    $0x18,%rax
  movsd  (%rax),%xmm0
  mov    -0xc8(%rbp),%rax
  add    $0x50,%rax
  movsd  (%rax),%xmm1
  subsd  %xmm1,%xmm0
  movsd  %xmm0,-0x78(%rbp)
  movsd  -0xa8(%rbp),%xmm0
  mulsd  -0x80(%rbp),%xmm0
  movsd  -0xb0(%rbp),%xmm1
  mulsd  -0x78(%rbp),%xmm1
  subsd  %xmm1,%xmm0
  movsd  %xmm0,-0x40(%rbp)
  movsd  -0xa8(%rbp),%xmm0
  movapd %xmm0,%xmm1
  mulsd  -0x78(%rbp),%xmm1
  movsd  -0xb0(%rbp),%xmm0
  mulsd  -0x80(%rbp),%xmm0
  addsd  %xmm1,%xmm0
  movsd  %xmm0,-0x38(%rbp)
  mov    -0xc8(%rbp),%rax
  add    $0x30,%rax
  movsd  (%rax),%xmm0
  mov    -0xc8(%rbp),%rax
  add    $0x78,%rax
  movsd  (%rax),%xmm1
  subsd  %xmm1,%xmm0
  movsd  %xmm0,-0x80(%rbp)
  mov    -0xc8(%rbp),%rax
  add    $0x38,%rax
  movsd  (%rax),%xmm1
  mov    -0xc8(%rbp),%rax
  add    $0x70,%rax
  movsd  (%rax),%xmm0
  addsd  %xmm1,%xmm0
  movsd  %xmm0,-0x78(%rbp)
  movsd  -0xa8(%rbp),%xmm0
  mulsd  -0x80(%rbp),%xmm0
  movsd  -0xb0(%rbp),%xmm1
  mulsd  -0x78(%rbp),%xmm1
  subsd  %xmm1,%xmm0
  movsd  %xmm0,-0x30(%rbp)
  movsd  -0xa8(%rbp),%xmm0
  movapd %xmm0,%xmm1
  mulsd  -0x78(%rbp),%xmm1
  movsd  -0xb0(%rbp),%xmm0
  mulsd  -0x80(%rbp),%xmm0
  addsd  %xmm1,%xmm0
  movsd  %xmm0,-0x28(%rbp)
  mov    -0xc8(%rbp),%rax
  add    $0x30,%rax
  movsd  (%rax),%xmm1
  mov    -0xc8(%rbp),%rax
  add    $0x78,%rax
  movsd  (%rax),%xmm0
  addsd  %xmm1,%xmm0
  movsd  %xmm0,-0x80(%rbp)
  mov    -0xc8(%rbp),%rax
  add    $0x38,%rax
  movsd  (%rax),%xmm0
  mov    -0xc8(%rbp),%rax
  add    $0x70,%rax
  movsd  (%rax),%xmm1
  subsd  %xmm1,%xmm0
  movsd  %xmm0,-0x78(%rbp)
  movsd  -0xb0(%rbp),%xmm0
  mulsd  -0x80(%rbp),%xmm0
  movsd  -0xa8(%rbp),%xmm1
  mulsd  -0x78(%rbp),%xmm1
  subsd  %xmm1,%xmm0
  movsd  %xmm0,-0x20(%rbp)
  movsd  -0xb0(%rbp),%xmm0
  movapd %xmm0,%xmm1
  mulsd  -0x78(%rbp),%xmm1
  movsd  -0xa8(%rbp),%xmm0
  mulsd  -0x80(%rbp),%xmm0
  addsd  %xmm1,%xmm0
  movsd  %xmm0,-0x18(%rbp)
  movsd  -0xa0(%rbp),%xmm0
  addsd  -0x70(%rbp),%xmm0
  movsd  %xmm0,-0x80(%rbp)
  movsd  -0x98(%rbp),%xmm0
  addsd  -0x68(%rbp),%xmm0
  movsd  %xmm0,-0x78(%rbp)
  movsd  -0x50(%rbp),%xmm0
  addsd  -0x30(%rbp),%xmm0
  movsd  %xmm0,-0x10(%rbp)
  movsd  -0x48(%rbp),%xmm0
  addsd  -0x28(%rbp),%xmm0
  movsd  %xmm0,-0x8(%rbp)
  movsd  -0x80(%rbp),%xmm0
  addsd  -0x10(%rbp),%xmm0
  mov    -0xc8(%rbp),%rax
  movsd  %xmm0,(%rax)
  mov    -0xc8(%rbp),%rax
  add    $0x8,%rax
  movsd  -0x78(%rbp),%xmm0
  addsd  -0x8(%rbp),%xmm0
  movsd  %xmm0,(%rax)
  mov    -0xc8(%rbp),%rax
  add    $0x10,%rax
  movsd  -0x80(%rbp),%xmm0
  subsd  -0x10(%rbp),%xmm0
  movsd  %xmm0,(%rax)
  mov    -0xc8(%rbp),%rax
  add    $0x18,%rax
  movsd  -0x78(%rbp),%xmm0
  subsd  -0x8(%rbp),%xmm0
  movsd  %xmm0,(%rax)
  movsd  -0xa0(%rbp),%xmm0
  subsd  -0x70(%rbp),%xmm0
  movsd  %xmm0,-0x80(%rbp)
  movsd  -0x98(%rbp),%xmm0
  subsd  -0x68(%rbp),%xmm0
  movsd  %xmm0,-0x78(%rbp)
  movsd  -0x50(%rbp),%xmm0
  subsd  -0x30(%rbp),%xmm0
  movsd  %xmm0,-0x10(%rbp)
  movsd  -0x48(%rbp),%xmm0
  subsd  -0x28(%rbp),%xmm0
  movsd  %xmm0,-0x8(%rbp)
  mov    -0xc8(%rbp),%rax
  add    $0x20,%rax
  movsd  -0x80(%rbp),%xmm0
  subsd  -0x8(%rbp),%xmm0
  movsd  %xmm0,(%rax)
  mov    -0xc8(%rbp),%rax
  add    $0x28,%rax
  movsd  -0x78(%rbp),%xmm0
  addsd  -0x10(%rbp),%xmm0
  movsd  %xmm0,(%rax)
  mov    -0xc8(%rbp),%rax
  add    $0x30,%rax
  movsd  -0x80(%rbp),%xmm0
  addsd  -0x8(%rbp),%xmm0
  movsd  %xmm0,(%rax)
  mov    -0xc8(%rbp),%rax
  add    $0x38,%rax
  movsd  -0x78(%rbp),%xmm0
  subsd  -0x10(%rbp),%xmm0
  movsd  %xmm0,(%rax)
  movsd  -0x90(%rbp),%xmm0
  subsd  -0x58(%rbp),%xmm0
  movsd  %xmm0,-0x80(%rbp)
  movsd  -0x88(%rbp),%xmm0
  addsd  -0x60(%rbp),%xmm0
  movsd  %xmm0,-0x78(%rbp)
  movsd  -0x40(%rbp),%xmm0
  subsd  -0x20(%rbp),%xmm0
  movsd  %xmm0,-0x10(%rbp)
  movsd  -0x38(%rbp),%xmm0
  subsd  -0x18(%rbp),%xmm0
  movsd  %xmm0,-0x8(%rbp)
  mov    -0xc8(%rbp),%rax
  add    $0x40,%rax
  movsd  -0x80(%rbp),%xmm0
  addsd  -0x10(%rbp),%xmm0
  movsd  %xmm0,(%rax)
  mov    -0xc8(%rbp),%rax
  add    $0x48,%rax
  movsd  -0x78(%rbp),%xmm0
  addsd  -0x8(%rbp),%xmm0
  movsd  %xmm0,(%rax)
  mov    -0xc8(%rbp),%rax
  add    $0x50,%rax
  movsd  -0x80(%rbp),%xmm0
  subsd  -0x10(%rbp),%xmm0
  movsd  %xmm0,(%rax)
  mov    -0xc8(%rbp),%rax
  add    $0x58,%rax
  movsd  -0x78(%rbp),%xmm0
  subsd  -0x8(%rbp),%xmm0
  movsd  %xmm0,(%rax)
  movsd  -0x90(%rbp),%xmm0
  addsd  -0x58(%rbp),%xmm0
  movsd  %xmm0,-0x80(%rbp)
  movsd  -0x88(%rbp),%xmm0
  subsd  -0x60(%rbp),%xmm0
  movsd  %xmm0,-0x78(%rbp)
  movsd  -0x40(%rbp),%xmm0
  addsd  -0x20(%rbp),%xmm0
  movsd  %xmm0,-0x10(%rbp)
  movsd  -0x38(%rbp),%xmm0
  addsd  -0x18(%rbp),%xmm0
  movsd  %xmm0,-0x8(%rbp)
  mov    -0xc8(%rbp),%rax
  add    $0x60,%rax
  movsd  -0x80(%rbp),%xmm0
  subsd  -0x8(%rbp),%xmm0
  movsd  %xmm0,(%rax)
  mov    -0xc8(%rbp),%rax
  add    $0x68,%rax
  movsd  -0x78(%rbp),%xmm0
  addsd  -0x10(%rbp),%xmm0
  movsd  %xmm0,(%rax)
  mov    -0xc8(%rbp),%rax
  add    $0x70,%rax
  movsd  -0x80(%rbp),%xmm0
  addsd  -0x8(%rbp),%xmm0
  movsd  %xmm0,(%rax)
  mov    -0xc8(%rbp),%rax
  add    $0x78,%rax
  movsd  -0x78(%rbp),%xmm0
  subsd  -0x10(%rbp),%xmm0
  movsd  %xmm0,(%rax)
  nop
  leave
  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;
}
```