user: What is the c source code of the assembly code below:

```asm
<dfft>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0xe0,%rsp
  mov    %rdi,-0xc8(%rbp)
  mov    %rsi,-0xd0(%rbp)
  mov    %edx,-0xd4(%rbp)
  mov    -0xc8(%rbp),%rax
  sub    $0x8,%rax
  mov    %rax,-0x78(%rbp)
  mov    -0xd0(%rbp),%rax
  sub    $0x8,%rax
  mov    %rax,-0x70(%rbp)
  movl   $0x2,-0xb8(%rbp)
  movl   $0x1,-0xac(%rbp)
  jmp    L114
L135:
  shll   -0xb8(%rbp)
  addl   $0x1,-0xac(%rbp)
L114:
  mov    -0xb8(%rbp),%eax
  cmp    -0xd4(%rbp),%eax
  jl     L135
  mov    -0xb8(%rbp),%eax
  mov    %eax,-0x98(%rbp)
  mov    -0x98(%rbp),%eax
  cmp    -0xd4(%rbp),%eax
  je     L151
  mov    -0xd4(%rbp),%eax
  add    $0x1,%eax
  mov    %eax,-0xb8(%rbp)
  jmp    L154
L43:
  mov    -0xb8(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x78(%rbp),%rax
  add    %rdx,%rax
  pxor   %xmm0,%xmm0
  movsd  %xmm0,(%rax)
  mov    -0xb8(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x70(%rbp),%rax
  add    %rdx,%rax
  pxor   %xmm0,%xmm0
  movsd  %xmm0,(%rax)
  addl   $0x1,-0xb8(%rbp)
L154:
  mov    -0xb8(%rbp),%eax
  cmp    -0x98(%rbp),%eax
  jle    L43
  mov    -0x98(%rbp),%eax
  mov    %eax,%esi
  lea    D15(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
L151:
  mov    -0x98(%rbp),%eax
  add    %eax,%eax
  mov    %eax,-0x9c(%rbp)
  movsd  D6(%rip),%xmm0
  movsd  %xmm0,-0x68(%rbp)
  movl   $0x1,-0xb0(%rbp)
  jmp    L62
L213:
  mov    -0x9c(%rbp),%eax
  mov    %eax,%edx
  shr    $0x1f,%edx
  add    %edx,%eax
  sar    %eax
  mov    %eax,-0x9c(%rbp)
  mov    -0x9c(%rbp),%eax
  lea    0x3(%rax),%edx
  test   %eax,%eax
  cmovs  %edx,%eax
  sar    $0x2,%eax
  mov    %eax,-0x8c(%rbp)
  pxor   %xmm1,%xmm1
  cvtsi2sdl -0x9c(%rbp),%xmm1
  movsd  -0x68(%rbp),%xmm0
  divsd  %xmm1,%xmm0
  movsd  %xmm0,-0x50(%rbp)
  pxor   %xmm0,%xmm0
  movsd  %xmm0,-0x80(%rbp)
  movl   $0x1,-0xb4(%rbp)
  jmp    L110
L80:
  movsd  -0x80(%rbp),%xmm1
  movsd  D37(%rip),%xmm0
  mulsd  %xmm1,%xmm0
  movsd  %xmm0,-0x48(%rbp)
  mov    -0x80(%rbp),%rax
  movq   %rax,%xmm0
  call   <cos@plt>
  movq   %xmm0,%rax
  mov    %rax,-0x40(%rbp)
  mov    -0x80(%rbp),%rax
  movq   %rax,%xmm0
  call   <sin@plt>
  movq   %xmm0,%rax
  mov    %rax,-0x38(%rbp)
  mov    -0x48(%rbp),%rax
  movq   %rax,%xmm0
  call   <cos@plt>
  movq   %xmm0,%rax
  mov    %rax,-0x30(%rbp)
  mov    -0x48(%rbp),%rax
  movq   %rax,%xmm0
  call   <sin@plt>
  movq   %xmm0,%rax
  mov    %rax,-0x28(%rbp)
  pxor   %xmm0,%xmm0
  cvtsi2sdl -0xb4(%rbp),%xmm0
  movsd  -0x50(%rbp),%xmm1
  mulsd  %xmm1,%xmm0
  movsd  %xmm0,-0x80(%rbp)
  mov    -0xb4(%rbp),%eax
  mov    %eax,-0xa4(%rbp)
  mov    -0x9c(%rbp),%eax
  add    %eax,%eax
  mov    %eax,-0xa0(%rbp)
  jmp    L38
L26:
  mov    -0xa4(%rbp),%eax
  mov    %eax,-0xa8(%rbp)
  jmp    L86
L66:
  mov    -0xa8(%rbp),%edx
  mov    -0x8c(%rbp),%eax
  add    %edx,%eax
  mov    %eax,-0x90(%rbp)
  mov    -0x90(%rbp),%edx
  mov    -0x8c(%rbp),%eax
  add    %edx,%eax
  mov    %eax,-0x88(%rbp)
  mov    -0x88(%rbp),%edx
  mov    -0x8c(%rbp),%eax
  add    %edx,%eax
  mov    %eax,-0x84(%rbp)
  mov    -0xa8(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x78(%rbp),%rax
  add    %rdx,%rax
  movsd  (%rax),%xmm0
  mov    -0x88(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x78(%rbp),%rax
  add    %rdx,%rax
  movsd  (%rax),%xmm1
  subsd  %xmm1,%xmm0
  movsd  %xmm0,-0x58(%rbp)
  mov    -0xa8(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x78(%rbp),%rax
  add    %rdx,%rax
  movsd  (%rax),%xmm1
  mov    -0x88(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x78(%rbp),%rax
  add    %rdx,%rax
  movsd  (%rax),%xmm0
  mov    -0xa8(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x78(%rbp),%rax
  add    %rdx,%rax
  addsd  %xmm1,%xmm0
  movsd  %xmm0,(%rax)
  mov    -0x90(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x78(%rbp),%rax
  add    %rdx,%rax
  movsd  (%rax),%xmm0
  mov    -0x84(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x78(%rbp),%rax
  add    %rdx,%rax
  movsd  (%rax),%xmm1
  subsd  %xmm1,%xmm0
  movsd  %xmm0,-0x20(%rbp)
  mov    -0x90(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x78(%rbp),%rax
  add    %rdx,%rax
  movsd  (%rax),%xmm1
  mov    -0x84(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x78(%rbp),%rax
  add    %rdx,%rax
  movsd  (%rax),%xmm0
  mov    -0x90(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x78(%rbp),%rax
  add    %rdx,%rax
  addsd  %xmm1,%xmm0
  movsd  %xmm0,(%rax)
  mov    -0xa8(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x70(%rbp),%rax
  add    %rdx,%rax
  movsd  (%rax),%xmm0
  mov    -0x88(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x70(%rbp),%rax
  add    %rdx,%rax
  movsd  (%rax),%xmm1
  subsd  %xmm1,%xmm0
  movsd  %xmm0,-0x18(%rbp)
  mov    -0xa8(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x70(%rbp),%rax
  add    %rdx,%rax
  movsd  (%rax),%xmm1
  mov    -0x88(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x70(%rbp),%rax
  add    %rdx,%rax
  movsd  (%rax),%xmm0
  mov    -0xa8(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x70(%rbp),%rax
  add    %rdx,%rax
  addsd  %xmm1,%xmm0
  movsd  %xmm0,(%rax)
  mov    -0x90(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x70(%rbp),%rax
  add    %rdx,%rax
  movsd  (%rax),%xmm0
  mov    -0x84(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x70(%rbp),%rax
  add    %rdx,%rax
  movsd  (%rax),%xmm1
  subsd  %xmm1,%xmm0
  movsd  %xmm0,-0x10(%rbp)
  mov    -0x90(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x70(%rbp),%rax
  add    %rdx,%rax
  movsd  (%rax),%xmm1
  mov    -0x84(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x70(%rbp),%rax
  add    %rdx,%rax
  movsd  (%rax),%xmm0
  mov    -0x90(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x70(%rbp),%rax
  add    %rdx,%rax
  addsd  %xmm1,%xmm0
  movsd  %xmm0,(%rax)
  movsd  -0x58(%rbp),%xmm0
  subsd  -0x10(%rbp),%xmm0
  movsd  %xmm0,-0x8(%rbp)
  movsd  -0x58(%rbp),%xmm0
  addsd  -0x10(%rbp),%xmm0
  movsd  %xmm0,-0x58(%rbp)
  movsd  -0x20(%rbp),%xmm0
  subsd  -0x18(%rbp),%xmm0
  movsd  %xmm0,-0x10(%rbp)
  movsd  -0x20(%rbp),%xmm0
  addsd  -0x18(%rbp),%xmm0
  movsd  %xmm0,-0x20(%rbp)
  movsd  -0x58(%rbp),%xmm0
  mulsd  -0x40(%rbp),%xmm0
  movsd  -0x10(%rbp),%xmm1
  mulsd  -0x38(%rbp),%xmm1
  mov    -0x88(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x78(%rbp),%rax
  add    %rdx,%rax
  subsd  %xmm1,%xmm0
  movsd  %xmm0,(%rax)
  movsd  -0x10(%rbp),%xmm0
  movq   D24(%rip),%xmm1
  xorpd  %xmm1,%xmm0
  mulsd  -0x40(%rbp),%xmm0
  movsd  -0x58(%rbp),%xmm1
  mulsd  -0x38(%rbp),%xmm1
  mov    -0x88(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x70(%rbp),%rax
  add    %rdx,%rax
  subsd  %xmm1,%xmm0
  movsd  %xmm0,(%rax)
  movsd  -0x8(%rbp),%xmm0
  movapd %xmm0,%xmm1
  mulsd  -0x30(%rbp),%xmm1
  movsd  -0x20(%rbp),%xmm0
  mulsd  -0x28(%rbp),%xmm0
  mov    -0x84(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x78(%rbp),%rax
  add    %rdx,%rax
  addsd  %xmm1,%xmm0
  movsd  %xmm0,(%rax)
  movsd  -0x20(%rbp),%xmm0
  mulsd  -0x30(%rbp),%xmm0
  movsd  -0x8(%rbp),%xmm1
  mulsd  -0x28(%rbp),%xmm1
  mov    -0x84(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x70(%rbp),%rax
  add    %rdx,%rax
  subsd  %xmm1,%xmm0
  movsd  %xmm0,(%rax)
  mov    -0xa0(%rbp),%eax
  add    %eax,-0xa8(%rbp)
L86:
  mov    -0x98(%rbp),%eax
  cmp    -0xa8(%rbp),%eax
  jg     L66
  mov    -0xa0(%rbp),%eax
  add    %eax,%eax
  sub    -0x9c(%rbp),%eax
  mov    %eax,%edx
  mov    -0xb4(%rbp),%eax
  add    %edx,%eax
  mov    %eax,-0xa4(%rbp)
  shll   $0x2,-0xa0(%rbp)
L38:
  mov    -0xa4(%rbp),%eax
  cmp    -0x98(%rbp),%eax
  jl     L26
  addl   $0x1,-0xb4(%rbp)
L110:
  mov    -0xb4(%rbp),%eax
  cmp    -0x8c(%rbp),%eax
  jle    L80
  addl   $0x1,-0xb0(%rbp)
L62:
  mov    -0xac(%rbp),%eax
  cmp    -0xb0(%rbp),%eax
  jg     L213
  movl   $0x1,-0xa4(%rbp)
  movl   $0x4,-0xa0(%rbp)
  jmp    L40
L59:
  mov    -0xa4(%rbp),%eax
  mov    %eax,-0xa8(%rbp)
  jmp    L13
L163:
  mov    -0xa8(%rbp),%eax
  add    $0x1,%eax
  mov    %eax,-0x90(%rbp)
  mov    -0xa8(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x78(%rbp),%rax
  add    %rdx,%rax
  movsd  (%rax),%xmm0
  movsd  %xmm0,-0x58(%rbp)
  mov    -0x90(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x78(%rbp),%rax
  add    %rdx,%rax
  movsd  (%rax),%xmm0
  mov    -0xa8(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x78(%rbp),%rax
  add    %rdx,%rax
  addsd  -0x58(%rbp),%xmm0
  movsd  %xmm0,(%rax)
  mov    -0x90(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x78(%rbp),%rax
  add    %rdx,%rax
  movsd  (%rax),%xmm1
  mov    -0x90(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x78(%rbp),%rax
  add    %rdx,%rax
  movsd  -0x58(%rbp),%xmm0
  subsd  %xmm1,%xmm0
  movsd  %xmm0,(%rax)
  mov    -0xa8(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x70(%rbp),%rax
  add    %rdx,%rax
  movsd  (%rax),%xmm0
  movsd  %xmm0,-0x58(%rbp)
  mov    -0x90(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x70(%rbp),%rax
  add    %rdx,%rax
  movsd  (%rax),%xmm0
  mov    -0xa8(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x70(%rbp),%rax
  add    %rdx,%rax
  addsd  -0x58(%rbp),%xmm0
  movsd  %xmm0,(%rax)
  mov    -0x90(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x70(%rbp),%rax
  add    %rdx,%rax
  movsd  (%rax),%xmm1
  mov    -0x90(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x70(%rbp),%rax
  add    %rdx,%rax
  movsd  -0x58(%rbp),%xmm0
  subsd  %xmm1,%xmm0
  movsd  %xmm0,(%rax)
  mov    -0xa0(%rbp),%eax
  add    %eax,-0xa8(%rbp)
L13:
  mov    -0xa8(%rbp),%eax
  cmp    -0x98(%rbp),%eax
  jle    L163
  mov    -0xa0(%rbp),%eax
  add    %eax,%eax
  sub    $0x1,%eax
  mov    %eax,-0xa4(%rbp)
  shll   $0x2,-0xa0(%rbp)
L40:
  mov    -0xa4(%rbp),%eax
  cmp    -0x98(%rbp),%eax
  jl     L59
  movl   $0x1,-0xb4(%rbp)
  mov    -0x98(%rbp),%eax
  sub    $0x1,%eax
  mov    %eax,-0x94(%rbp)
  movl   $0x1,-0xb8(%rbp)
  jmp    L35
L95:
  mov    -0xb8(%rbp),%eax
  cmp    -0xb4(%rbp),%eax
  jge    L63
  mov    -0xb4(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x78(%rbp),%rax
  add    %rdx,%rax
  movsd  (%rax),%xmm0
  movsd  %xmm0,-0x60(%rbp)
  mov    -0xb8(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x78(%rbp),%rax
  add    %rax,%rdx
  mov    -0xb4(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rcx
  mov    -0x78(%rbp),%rax
  add    %rcx,%rax
  movsd  (%rdx),%xmm0
  movsd  %xmm0,(%rax)
  mov    -0xb8(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x78(%rbp),%rax
  add    %rdx,%rax
  movsd  -0x60(%rbp),%xmm0
  movsd  %xmm0,(%rax)
  mov    -0xb4(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x70(%rbp),%rax
  add    %rdx,%rax
  movsd  (%rax),%xmm0
  movsd  %xmm0,-0x60(%rbp)
  mov    -0xb8(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x70(%rbp),%rax
  add    %rax,%rdx
  mov    -0xb4(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rcx
  mov    -0x70(%rbp),%rax
  add    %rcx,%rax
  movsd  (%rdx),%xmm0
  movsd  %xmm0,(%rax)
  mov    -0xb8(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x70(%rbp),%rax
  add    %rdx,%rax
  movsd  -0x60(%rbp),%xmm0
  movsd  %xmm0,(%rax)
L63:
  mov    -0x98(%rbp),%eax
  mov    %eax,%edx
  shr    $0x1f,%edx
  add    %edx,%eax
  sar    %eax
  mov    %eax,-0xb0(%rbp)
  jmp    L183
L34:
  mov    -0xb0(%rbp),%eax
  sub    %eax,-0xb4(%rbp)
  mov    -0xb0(%rbp),%eax
  mov    %eax,%edx
  shr    $0x1f,%edx
  add    %edx,%eax
  sar    %eax
  mov    %eax,-0xb0(%rbp)
L183:
  mov    -0xb0(%rbp),%eax
  cmp    -0xb4(%rbp),%eax
  jl     L34
  mov    -0xb0(%rbp),%eax
  add    %eax,-0xb4(%rbp)
  addl   $0x1,-0xb8(%rbp)
L35:
  mov    -0xb8(%rbp),%eax
  cmp    -0x94(%rbp),%eax
  jle    L95
  mov    -0x98(%rbp),%eax
  leave
  ret
```

tool_calls: name: extract_symbolic_data
arguments: tag: D15
type_infered: string
name: extract_symbolic_data
arguments: tag: D6
type_infered: byte[8]
name: extract_symbolic_data
arguments: tag: D37
type_infered: f64
name: extract_symbolic_data
arguments: tag: D24
type_infered: f32[2]

tool: D15: 
use %d point fft

tool: {"D6": [0x18,0x2d,0x44,0x54,0xfb,0x21,0x19,0x40]}

tool: D37: 3

tool: {"D24": [0.0,-0.0]}

assistant: ```c
int dfft(double x[], double y[], int np) {
  double *px, *py;
  int i, j, k, m, n, i0, i1, i2, i3, is, id, n1, n2, n4;
  double a, e, a3, cc1, ss1, cc3, ss3, r1, r2, s1, s2, s3, xt, tpi;
  px = x - 1;
  py = y - 1;
  i = 2;
  m = 1;
  while (i < np) {
    i = i + i;
    m = m + 1;
  }
  n = i;
  if (n != np) {
    for (i = np + 1; i <= n; i++) {
      px[i] = 0.0;
      py[i] = 0.0;
    }
    printf("\nuse %d point fft", n);
  }
  n2 = n + n;
  tpi = 2.0 * 3.14159265358979323846;
  for (k = 1; k <= m - 1; k++) {
    n2 = n2 / 2;
    n4 = n2 / 4;
    e = tpi / (double)n2;
    a = 0.0;
    for (j = 1; j <= n4; j++) {
      a3 = 3.0 * a;
      cc1 = cos(a);
      ss1 = sin(a);
      cc3 = cos(a3);
      ss3 = sin(a3);
      a = e * (double)j;
      is = j;
      id = 2 * n2;
      while (is < n) {
        for (i0 = is; i0 <= n - 1; i0 = i0 + id) {
          i1 = i0 + n4;
          i2 = i1 + n4;
          i3 = i2 + n4;
          r1 = px[i0] - px[i2];
          px[i0] = px[i0] + px[i2];
          r2 = px[i1] - px[i3];
          px[i1] = px[i1] + px[i3];
          s1 = py[i0] - py[i2];
          py[i0] = py[i0] + py[i2];
          s2 = py[i1] - py[i3];
          py[i1] = py[i1] + py[i3];
          s3 = r1 - s2;
          r1 = r1 + s2;
          s2 = r2 - s1;
          r2 = r2 + s1;
          px[i2] = r1 * cc1 - s2 * ss1;
          py[i2] = -s2 * cc1 - r1 * ss1;
          px[i3] = s3 * cc3 + r2 * ss3;
          py[i3] = r2 * cc3 - s3 * ss3;
        }
        is = 2 * id - n2 + j;
        id = 4 * id;
      }
    }
  }
  is = 1;
  id = 4;
  while (is < n) {
    for (i0 = is; i0 <= n; i0 = i0 + id) {
      i1 = i0 + 1;
      r1 = px[i0];
      px[i0] = r1 + px[i1];
      px[i1] = r1 - px[i1];
      r1 = py[i0];
      py[i0] = r1 + py[i1];
      py[i1] = r1 - py[i1];
    }
    is = 2 * id - 1;
    id = 4 * id;
  }
  j = 1;
  n1 = n - 1;
  for (i = 1; i <= n1; i++) {
    if (i < j) {
      xt = px[j];
      px[j] = px[i];
      px[i] = xt;
      xt = py[j];
      py[j] = py[i];
      py[i] = xt;
    }
    k = n / 2;
    while (k < j) {
      j = j - k;
      k = k / 2;
    }
    j = j + k;
  }
  return (n);
}
```