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

```asm
<fft8>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x310,%rsp
  mov    %rdi,-0x308(%rbp)
  mov    %rsi,-0x310(%rbp)
  mov    -0x310(%rbp),%rax
  movsd  (%rax),%xmm0
  movsd  %xmm0,-0x300(%rbp)
  mov    -0x310(%rbp),%rax
  movsd  0x8(%rax),%xmm0
  movsd  %xmm0,-0x2f8(%rbp)
  movsd  -0x2f8(%rbp),%xmm0
  movsd  -0x300(%rbp),%xmm1
  movsd  %xmm1,-0x180(%rbp)
  movsd  %xmm0,-0x178(%rbp)
  mov    -0x310(%rbp),%rax
  movsd  0x40(%rax),%xmm0
  movsd  %xmm0,-0x2f0(%rbp)
  mov    -0x310(%rbp),%rax
  movsd  0x48(%rax),%xmm0
  movsd  %xmm0,-0x2e8(%rbp)
  movsd  -0x2e8(%rbp),%xmm0
  movsd  -0x2f0(%rbp),%xmm1
  movsd  %xmm1,-0x170(%rbp)
  movsd  %xmm0,-0x168(%rbp)
  movsd  -0x300(%rbp),%xmm0
  addsd  -0x2f0(%rbp),%xmm0
  movsd  %xmm0,-0x2e0(%rbp)
  movsd  -0x2f8(%rbp),%xmm0
  addsd  -0x2e8(%rbp),%xmm0
  movsd  %xmm0,-0x2d8(%rbp)
  movsd  -0x2d8(%rbp),%xmm0
  movsd  -0x2e0(%rbp),%xmm1
  movsd  %xmm1,-0x160(%rbp)
  movsd  %xmm0,-0x158(%rbp)
  movsd  -0x300(%rbp),%xmm0
  subsd  -0x2f0(%rbp),%xmm0
  movsd  %xmm0,-0x2d0(%rbp)
  movsd  -0x2f8(%rbp),%xmm0
  subsd  -0x2e8(%rbp),%xmm0
  movsd  %xmm0,-0x2c8(%rbp)
  movsd  -0x2c8(%rbp),%xmm0
  movsd  -0x2d0(%rbp),%xmm1
  movsd  %xmm1,-0x150(%rbp)
  movsd  %xmm0,-0x148(%rbp)
  mov    -0x310(%rbp),%rax
  movsd  0x20(%rax),%xmm0
  movsd  %xmm0,-0x2c0(%rbp)
  mov    -0x310(%rbp),%rax
  movsd  0x28(%rax),%xmm0
  movsd  %xmm0,-0x2b8(%rbp)
  movsd  -0x2b8(%rbp),%xmm0
  movsd  -0x2c0(%rbp),%xmm1
  movsd  %xmm1,-0x140(%rbp)
  movsd  %xmm0,-0x138(%rbp)
  mov    -0x310(%rbp),%rax
  movsd  0x60(%rax),%xmm0
  movsd  %xmm0,-0x2b0(%rbp)
  mov    -0x310(%rbp),%rax
  movsd  0x68(%rax),%xmm0
  movsd  %xmm0,-0x2a8(%rbp)
  movsd  -0x2a8(%rbp),%xmm0
  movsd  -0x2b0(%rbp),%xmm1
  movsd  %xmm1,-0x130(%rbp)
  movsd  %xmm0,-0x128(%rbp)
  movsd  -0x2c0(%rbp),%xmm0
  addsd  -0x2b0(%rbp),%xmm0
  movsd  %xmm0,-0x2a0(%rbp)
  movsd  -0x2b8(%rbp),%xmm0
  addsd  -0x2a8(%rbp),%xmm0
  movsd  %xmm0,-0x298(%rbp)
  movsd  -0x298(%rbp),%xmm0
  movsd  -0x2a0(%rbp),%xmm1
  movsd  %xmm1,-0x120(%rbp)
  movsd  %xmm0,-0x118(%rbp)
  movsd  -0x2e0(%rbp),%xmm0
  addsd  -0x2a0(%rbp),%xmm0
  movsd  %xmm0,-0x290(%rbp)
  movsd  -0x2d8(%rbp),%xmm0
  addsd  -0x298(%rbp),%xmm0
  movsd  %xmm0,-0x288(%rbp)
  movsd  -0x288(%rbp),%xmm0
  movsd  -0x290(%rbp),%xmm1
  movsd  %xmm1,-0x110(%rbp)
  movsd  %xmm0,-0x108(%rbp)
  movsd  -0x2e0(%rbp),%xmm0
  subsd  -0x2a0(%rbp),%xmm0
  movsd  %xmm0,-0x280(%rbp)
  movsd  -0x2d8(%rbp),%xmm0
  subsd  -0x298(%rbp),%xmm0
  movsd  %xmm0,-0x278(%rbp)
  movsd  -0x278(%rbp),%xmm0
  movsd  -0x280(%rbp),%xmm1
  movsd  %xmm1,-0x100(%rbp)
  movsd  %xmm0,-0xf8(%rbp)
  movsd  -0x2c0(%rbp),%xmm0
  subsd  -0x2b0(%rbp),%xmm0
  movq   %xmm0,%rax
  movsd  -0x2b8(%rbp),%xmm0
  subsd  -0x2a8(%rbp),%xmm0
  movsd  D37(%rip),%xmm1
  movapd %xmm1,%xmm3
  pxor   %xmm2,%xmm2
  movapd %xmm0,%xmm1
  movq   %rax,%xmm0
  call   <__muldc3>
  movq   %xmm0,%rax
  movapd %xmm1,%xmm0
  mov    %rax,-0xf0(%rbp)
  movsd  %xmm0,-0xe8(%rbp)
  movsd  -0xf0(%rbp),%xmm0
  movsd  %xmm0,-0x270(%rbp)
  movsd  -0xe8(%rbp),%xmm0
  movsd  %xmm0,-0x268(%rbp)
  movsd  -0x2d0(%rbp),%xmm0
  addsd  -0x270(%rbp),%xmm0
  movsd  %xmm0,-0x260(%rbp)
  movsd  -0x2c8(%rbp),%xmm0
  addsd  -0x268(%rbp),%xmm0
  movsd  %xmm0,-0x258(%rbp)
  movsd  -0x258(%rbp),%xmm0
  movsd  -0x260(%rbp),%xmm1
  movsd  %xmm1,-0xe0(%rbp)
  movsd  %xmm0,-0xd8(%rbp)
  movsd  -0x2d0(%rbp),%xmm0
  subsd  -0x270(%rbp),%xmm0
  movsd  %xmm0,-0x250(%rbp)
  movsd  -0x2c8(%rbp),%xmm0
  subsd  -0x268(%rbp),%xmm0
  movsd  %xmm0,-0x248(%rbp)
  movsd  -0x248(%rbp),%xmm0
  movsd  -0x250(%rbp),%xmm1
  movsd  %xmm1,-0xd0(%rbp)
  movsd  %xmm0,-0xc8(%rbp)
  mov    -0x310(%rbp),%rax
  movsd  0x10(%rax),%xmm0
  movsd  %xmm0,-0x240(%rbp)
  mov    -0x310(%rbp),%rax
  movsd  0x18(%rax),%xmm0
  movsd  %xmm0,-0x238(%rbp)
  movsd  -0x238(%rbp),%xmm0
  movsd  -0x240(%rbp),%xmm1
  movsd  %xmm1,-0xc0(%rbp)
  movsd  %xmm0,-0xb8(%rbp)
  mov    -0x310(%rbp),%rax
  movsd  0x50(%rax),%xmm0
  movsd  %xmm0,-0x230(%rbp)
  mov    -0x310(%rbp),%rax
  movsd  0x58(%rax),%xmm0
  movsd  %xmm0,-0x228(%rbp)
  movsd  -0x228(%rbp),%xmm0
  movsd  -0x230(%rbp),%xmm1
  movsd  %xmm1,-0xb0(%rbp)
  movsd  %xmm0,-0xa8(%rbp)
  movsd  -0x240(%rbp),%xmm0
  addsd  -0x230(%rbp),%xmm0
  movsd  %xmm0,-0x220(%rbp)
  movsd  -0x238(%rbp),%xmm0
  addsd  -0x228(%rbp),%xmm0
  movsd  %xmm0,-0x218(%rbp)
  movsd  -0x218(%rbp),%xmm0
  movsd  -0x220(%rbp),%xmm1
  movsd  %xmm1,-0xa0(%rbp)
  movsd  %xmm0,-0x98(%rbp)
  movsd  -0x240(%rbp),%xmm0
  subsd  -0x230(%rbp),%xmm0
  movq   %xmm0,%rax
  movsd  -0x238(%rbp),%xmm0
  subsd  -0x228(%rbp),%xmm0
  movsd  D63(%rip),%xmm2
  movsd  D63(%rip),%xmm1
  movapd %xmm2,%xmm3
  movapd %xmm1,%xmm2
  movapd %xmm0,%xmm1
  movq   %rax,%xmm0
  call   <__muldc3>
  movq   %xmm0,%rax
  movapd %xmm1,%xmm0
  mov    %rax,-0x90(%rbp)
  movsd  %xmm0,-0x88(%rbp)
  movsd  -0x90(%rbp),%xmm0
  movsd  %xmm0,-0x210(%rbp)
  movsd  -0x88(%rbp),%xmm0
  movsd  %xmm0,-0x208(%rbp)
  mov    -0x310(%rbp),%rax
  movsd  0x30(%rax),%xmm0
  movsd  %xmm0,-0x200(%rbp)
  mov    -0x310(%rbp),%rax
  movsd  0x38(%rax),%xmm0
  movsd  %xmm0,-0x1f8(%rbp)
  movsd  -0x1f8(%rbp),%xmm0
  movsd  -0x200(%rbp),%xmm1
  movsd  %xmm1,-0x80(%rbp)
  movsd  %xmm0,-0x78(%rbp)
  mov    -0x310(%rbp),%rax
  movsd  0x70(%rax),%xmm0
  movsd  %xmm0,-0x1f0(%rbp)
  mov    -0x310(%rbp),%rax
  movsd  0x78(%rax),%xmm0
  movsd  %xmm0,-0x1e8(%rbp)
  movsd  -0x1e8(%rbp),%xmm0
  movsd  -0x1f0(%rbp),%xmm1
  movsd  %xmm1,-0x70(%rbp)
  movsd  %xmm0,-0x68(%rbp)
  movsd  -0x200(%rbp),%xmm0
  addsd  -0x1f0(%rbp),%xmm0
  movsd  %xmm0,-0x1e0(%rbp)
  movsd  -0x1f8(%rbp),%xmm0
  addsd  -0x1e8(%rbp),%xmm0
  movsd  %xmm0,-0x1d8(%rbp)
  movsd  -0x1d8(%rbp),%xmm0
  movsd  -0x1e0(%rbp),%xmm1
  movsd  %xmm1,-0x60(%rbp)
  movsd  %xmm0,-0x58(%rbp)
  movsd  -0x200(%rbp),%xmm0
  subsd  -0x1f0(%rbp),%xmm0
  movq   %xmm0,%rax
  movsd  -0x1f8(%rbp),%xmm0
  subsd  -0x1e8(%rbp),%xmm0
  movsd  D63(%rip),%xmm2
  movsd  D24(%rip),%xmm1
  movapd %xmm2,%xmm3
  movapd %xmm1,%xmm2
  movapd %xmm0,%xmm1
  movq   %rax,%xmm0
  call   <__muldc3>
  movq   %xmm0,%rax
  movapd %xmm1,%xmm0
  mov    %rax,-0x50(%rbp)
  movsd  %xmm0,-0x48(%rbp)
  movsd  -0x50(%rbp),%xmm0
  movsd  %xmm0,-0x1d0(%rbp)
  movsd  -0x48(%rbp),%xmm0
  movsd  %xmm0,-0x1c8(%rbp)
  movsd  -0x220(%rbp),%xmm0
  addsd  -0x1e0(%rbp),%xmm0
  movsd  %xmm0,-0x1c0(%rbp)
  movsd  -0x218(%rbp),%xmm0
  addsd  -0x1d8(%rbp),%xmm0
  movsd  %xmm0,-0x1b8(%rbp)
  movsd  -0x1b8(%rbp),%xmm0
  movsd  -0x1c0(%rbp),%xmm1
  movsd  %xmm1,-0x40(%rbp)
  movsd  %xmm0,-0x38(%rbp)
  movsd  -0x220(%rbp),%xmm0
  subsd  -0x1e0(%rbp),%xmm0
  movq   %xmm0,%rax
  movsd  -0x218(%rbp),%xmm0
  subsd  -0x1d8(%rbp),%xmm0
  movsd  D37(%rip),%xmm1
  movapd %xmm1,%xmm3
  pxor   %xmm2,%xmm2
  movapd %xmm0,%xmm1
  movq   %rax,%xmm0
  call   <__muldc3>
  movq   %xmm0,%rax
  movapd %xmm1,%xmm0
  mov    %rax,-0x30(%rbp)
  movsd  %xmm0,-0x28(%rbp)
  movsd  -0x30(%rbp),%xmm0
  movsd  %xmm0,-0x1b0(%rbp)
  movsd  -0x28(%rbp),%xmm0
  movsd  %xmm0,-0x1a8(%rbp)
  movsd  -0x210(%rbp),%xmm0
  addsd  -0x1d0(%rbp),%xmm0
  movsd  %xmm0,-0x1a0(%rbp)
  movsd  -0x208(%rbp),%xmm0
  addsd  -0x1c8(%rbp),%xmm0
  movsd  %xmm0,-0x198(%rbp)
  movsd  -0x198(%rbp),%xmm0
  movsd  -0x1a0(%rbp),%xmm1
  movsd  %xmm1,-0x20(%rbp)
  movsd  %xmm0,-0x18(%rbp)
  movsd  -0x210(%rbp),%xmm0
  subsd  -0x1d0(%rbp),%xmm0
  movq   %xmm0,%rax
  movsd  -0x208(%rbp),%xmm0
  subsd  -0x1c8(%rbp),%xmm0
  movsd  D37(%rip),%xmm1
  movapd %xmm1,%xmm3
  pxor   %xmm2,%xmm2
  movapd %xmm0,%xmm1
  movq   %rax,%xmm0
  call   <__muldc3>
  movq   %xmm0,%rax
  movapd %xmm1,%xmm0
  mov    %rax,-0x10(%rbp)
  movsd  %xmm0,-0x8(%rbp)
  movsd  -0x10(%rbp),%xmm0
  movsd  %xmm0,-0x190(%rbp)
  movsd  -0x8(%rbp),%xmm0
  movsd  %xmm0,-0x188(%rbp)
  movsd  -0x290(%rbp),%xmm0
  movapd %xmm0,%xmm1
  addsd  -0x1c0(%rbp),%xmm1
  movsd  -0x288(%rbp),%xmm0
  addsd  -0x1b8(%rbp),%xmm0
  mov    -0x308(%rbp),%rax
  movsd  %xmm1,(%rax)
  mov    -0x308(%rbp),%rax
  movsd  %xmm0,0x8(%rax)
  mov    -0x308(%rbp),%rax
  add    $0x40,%rax
  movsd  -0x290(%rbp),%xmm0
  movapd %xmm0,%xmm1
  subsd  -0x1c0(%rbp),%xmm1
  movsd  -0x288(%rbp),%xmm0
  subsd  -0x1b8(%rbp),%xmm0
  movsd  %xmm1,(%rax)
  movsd  %xmm0,0x8(%rax)
  mov    -0x308(%rbp),%rax
  add    $0x10,%rax
  movsd  -0x260(%rbp),%xmm0
  movapd %xmm0,%xmm1
  addsd  -0x1a0(%rbp),%xmm1
  movsd  -0x258(%rbp),%xmm0
  addsd  -0x198(%rbp),%xmm0
  movsd  %xmm1,(%rax)
  movsd  %xmm0,0x8(%rax)
  mov    -0x308(%rbp),%rax
  add    $0x50,%rax
  movsd  -0x260(%rbp),%xmm0
  movapd %xmm0,%xmm1
  subsd  -0x1a0(%rbp),%xmm1
  movsd  -0x258(%rbp),%xmm0
  subsd  -0x198(%rbp),%xmm0
  movsd  %xmm1,(%rax)
  movsd  %xmm0,0x8(%rax)
  mov    -0x308(%rbp),%rax
  add    $0x20,%rax
  movsd  -0x280(%rbp),%xmm0
  movapd %xmm0,%xmm1
  addsd  -0x1b0(%rbp),%xmm1
  movsd  -0x278(%rbp),%xmm0
  addsd  -0x1a8(%rbp),%xmm0
  movsd  %xmm1,(%rax)
  movsd  %xmm0,0x8(%rax)
  mov    -0x308(%rbp),%rax
  add    $0x60,%rax
  movsd  -0x280(%rbp),%xmm0
  movapd %xmm0,%xmm1
  subsd  -0x1b0(%rbp),%xmm1
  movsd  -0x278(%rbp),%xmm0
  subsd  -0x1a8(%rbp),%xmm0
  movsd  %xmm1,(%rax)
  movsd  %xmm0,0x8(%rax)
  mov    -0x308(%rbp),%rax
  add    $0x30,%rax
  movsd  -0x250(%rbp),%xmm0
  movapd %xmm0,%xmm1
  addsd  -0x190(%rbp),%xmm1
  movsd  -0x248(%rbp),%xmm0
  addsd  -0x188(%rbp),%xmm0
  movsd  %xmm1,(%rax)
  movsd  %xmm0,0x8(%rax)
  mov    -0x308(%rbp),%rax
  add    $0x70,%rax
  movsd  -0x250(%rbp),%xmm0
  movapd %xmm0,%xmm1
  subsd  -0x190(%rbp),%xmm1
  movsd  -0x248(%rbp),%xmm0
  subsd  -0x188(%rbp),%xmm0
  movsd  %xmm1,(%rax)
  movsd  %xmm0,0x8(%rax)
  nop
  leave
  ret
```

tool_calls: name: unpack_data
arguments: label: D37
type: f64
name: unpack_data
arguments: label: D63
type: f64
name: unpack_data
arguments: label: D24
type: byte[8]

tool: D37: 1

tool: D63: 0.7071067811865476

tool: {"D24": [0xcd,0x3b,0x7f,0x66,0x9e,0xa0,0xe6,0xbf]}

assistant: ```c
void fft8(_Complex double *Y, _Complex double *X) {
  _Complex double a122, a123, t92, t93, a124, a125, t94, t95, t96, a126, t97, t98, a127, a128, t99, s9, a129, a130, t100, s10, t101, s11, t102, s12;
  a122 = *(X);
  a123 = *((X + 4));
  t92 = (a122 + a123);
  t93 = (a122 - a123);
  a124 = *((X + 2));
  a125 = *((X + 6));
  t94 = (a124 + a125);
  t95 = (t92 + t94);
  t96 = (t92 - t94);
  a126 = (1.0if * (a124 - a125));
  t97 = (t93 + a126);
  t98 = (t93 - a126);
  a127 = *((X + 1));
  a128 = *((X + 5));
  t99 = (a127 + a128);
  s9 = ((0.70710678118654757 + 1.0if * 0.70710678118654757) * (a127 - a128));
  a129 = *((X + 3));
  a130 = *((X + 7));
  t100 = (a129 + a130);
  s10 = ((-0.70710678118654757 + 1.0if * 0.70710678118654757) * (a129 - a130));
  t101 = (t99 + t100);
  s11 = (1.0if * (t99 - t100));
  t102 = (s9 + s10);
  s12 = (1.0if * (s9 - s10));
  *(Y) = (t95 + t101);
  *((Y + 4)) = (t95 - t101);
  *((Y + 1)) = (t97 + t102);
  *((Y + 5)) = (t97 - t102);
  *((Y + 2)) = (t96 + s11);
  *((Y + 6)) = (t96 - s11);
  *((Y + 3)) = (t98 + s12);
  *((Y + 7)) = (t98 - s12);
}
```