user: 下面的汇编指令对应的C源代码是什么:

```asm
<rfftf1>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  add    $0xffffffffffffff80,%rsp
  mov    %edi,-0x54(%rbp)
  mov    %rsi,-0x60(%rbp)
  mov    %rdx,-0x68(%rbp)
  mov    %rcx,-0x70(%rbp)
  mov    %r8,-0x78(%rbp)
  mov    -0x78(%rbp),%rax
  add    $0x4,%rax
  mov    (%rax),%eax
  mov    %eax,-0x34(%rbp)
  movl   $0x1,-0x3c(%rbp)
  mov    -0x54(%rbp),%eax
  mov    %eax,-0x40(%rbp)
  mov    -0x54(%rbp),%eax
  sub    $0x1,%eax
  mov    %eax,-0x38(%rbp)
  movl   $0x1,-0x44(%rbp)
  jmp    L111
L103:
  mov    -0x34(%rbp),%eax
  sub    -0x44(%rbp),%eax
  mov    %eax,-0x30(%rbp)
  mov    -0x30(%rbp),%eax
  cltq
  add    $0x2,%rax
  lea    0x0(,%rax,4),%rdx
  mov    -0x78(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%eax
  mov    %eax,-0x2c(%rbp)
  mov    -0x40(%rbp),%eax
  cltd
  idivl  -0x2c(%rbp)
  mov    %eax,-0x28(%rbp)
  mov    -0x54(%rbp),%eax
  cltd
  idivl  -0x40(%rbp)
  mov    %eax,-0x24(%rbp)
  mov    -0x24(%rbp),%eax
  imul   -0x28(%rbp),%eax
  mov    %eax,-0x20(%rbp)
  mov    -0x2c(%rbp),%eax
  sub    $0x1,%eax
  imul   -0x24(%rbp),%eax
  sub    %eax,-0x38(%rbp)
  cmpl   $0x0,-0x3c(%rbp)
  sete   %al
  movzbl %al,%eax
  mov    %eax,-0x3c(%rbp)
  cmpl   $0x0,-0x3c(%rbp)
  je     L120
  mov    -0x68(%rbp),%rax
  mov    %rax,-0x10(%rbp)
  mov    -0x60(%rbp),%rax
  mov    %rax,-0x8(%rbp)
  jmp    L37
L120:
  mov    -0x60(%rbp),%rax
  mov    %rax,-0x10(%rbp)
  mov    -0x68(%rbp),%rax
  mov    %rax,-0x8(%rbp)
L37:
  cmpl   $0x5,-0x2c(%rbp)
  je     L142
  cmpl   $0x5,-0x2c(%rbp)
  jg     L108
  cmpl   $0x4,-0x2c(%rbp)
  je     L123
  cmpl   $0x4,-0x2c(%rbp)
  jg     L108
  cmpl   $0x2,-0x2c(%rbp)
  je     L98
  cmpl   $0x3,-0x2c(%rbp)
  je     L24
  jmp    L108
L123:
  mov    -0x38(%rbp),%edx
  mov    -0x24(%rbp),%eax
  add    %edx,%eax
  mov    %eax,-0x1c(%rbp)
  mov    -0x1c(%rbp),%edx
  mov    -0x24(%rbp),%eax
  add    %edx,%eax
  mov    %eax,-0x18(%rbp)
  mov    -0x18(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x70(%rbp),%rax
  lea    (%rdx,%rax,1),%rdi
  mov    -0x1c(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x70(%rbp),%rax
  lea    (%rdx,%rax,1),%r9
  mov    -0x38(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x70(%rbp),%rax
  lea    (%rdx,%rax,1),%r8
  mov    -0x8(%rbp),%rcx
  mov    -0x10(%rbp),%rdx
  mov    -0x28(%rbp),%esi
  mov    -0x24(%rbp),%eax
  sub    $0x8,%rsp
  push   %rdi
  mov    %eax,%edi
  call   <radf4@plt>
  add    $0x10,%rsp
  jmp    L18
L98:
  mov    -0x38(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x70(%rbp),%rax
  lea    (%rdx,%rax,1),%rdi
  mov    -0x8(%rbp),%rcx
  mov    -0x10(%rbp),%rdx
  mov    -0x28(%rbp),%esi
  mov    -0x24(%rbp),%eax
  mov    %rdi,%r8
  mov    %eax,%edi
  call   <radf2@plt>
  jmp    L18
L24:
  mov    -0x38(%rbp),%edx
  mov    -0x24(%rbp),%eax
  add    %edx,%eax
  mov    %eax,-0x1c(%rbp)
  mov    -0x1c(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x70(%rbp),%rax
  lea    (%rdx,%rax,1),%r8
  mov    -0x38(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x70(%rbp),%rax
  lea    (%rdx,%rax,1),%rdi
  mov    -0x8(%rbp),%rcx
  mov    -0x10(%rbp),%rdx
  mov    -0x28(%rbp),%esi
  mov    -0x24(%rbp),%eax
  mov    %r8,%r9
  mov    %rdi,%r8
  mov    %eax,%edi
  call   <radf3@plt>
  jmp    L18
L142:
  mov    -0x38(%rbp),%edx
  mov    -0x24(%rbp),%eax
  add    %edx,%eax
  mov    %eax,-0x1c(%rbp)
  mov    -0x1c(%rbp),%edx
  mov    -0x24(%rbp),%eax
  add    %edx,%eax
  mov    %eax,-0x18(%rbp)
  mov    -0x18(%rbp),%edx
  mov    -0x24(%rbp),%eax
  add    %edx,%eax
  mov    %eax,-0x14(%rbp)
  mov    -0x14(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x70(%rbp),%rax
  lea    (%rdx,%rax,1),%r8
  mov    -0x18(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x70(%rbp),%rax
  lea    (%rdx,%rax,1),%rdi
  mov    -0x1c(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x70(%rbp),%rax
  lea    (%rdx,%rax,1),%r9
  mov    -0x38(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x70(%rbp),%rax
  lea    (%rdx,%rax,1),%r10
  mov    -0x8(%rbp),%rcx
  mov    -0x10(%rbp),%rdx
  mov    -0x28(%rbp),%esi
  mov    -0x24(%rbp),%eax
  push   %r8
  push   %rdi
  mov    %r10,%r8
  mov    %eax,%edi
  call   <radf5@plt>
  add    $0x10,%rsp
  jmp    L18
L108:
  cmpl   $0x1,-0x24(%rbp)
  jne    L140
  cmpl   $0x0,-0x3c(%rbp)
  sete   %al
  movzbl %al,%eax
  mov    %eax,-0x3c(%rbp)
L140:
  cmpl   $0x0,-0x3c(%rbp)
  jne    L8
  mov    -0x38(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x70(%rbp),%rax
  lea    (%rdx,%rax,1),%rdi
  mov    -0x68(%rbp),%r9
  mov    -0x60(%rbp),%r8
  mov    -0x20(%rbp),%ecx
  mov    -0x28(%rbp),%edx
  mov    -0x2c(%rbp),%esi
  mov    -0x24(%rbp),%eax
  sub    $0x8,%rsp
  push   %rdi
  mov    %eax,%edi
  call   <radfg@plt>
  add    $0x10,%rsp
  movl   $0x1,-0x3c(%rbp)
  jmp    L18
L8:
  mov    -0x38(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x70(%rbp),%rax
  lea    (%rdx,%rax,1),%rdi
  mov    -0x60(%rbp),%r9
  mov    -0x68(%rbp),%r8
  mov    -0x20(%rbp),%ecx
  mov    -0x28(%rbp),%edx
  mov    -0x2c(%rbp),%esi
  mov    -0x24(%rbp),%eax
  sub    $0x8,%rsp
  push   %rdi
  mov    %eax,%edi
  call   <radfg@plt>
  add    $0x10,%rsp
  movl   $0x0,-0x3c(%rbp)
L18:
  mov    -0x28(%rbp),%eax
  mov    %eax,-0x40(%rbp)
  addl   $0x1,-0x44(%rbp)
L111:
  mov    -0x44(%rbp),%eax
  cmp    -0x34(%rbp),%eax
  jle    L103
  cmpl   $0x1,-0x3c(%rbp)
  je     L23
  movl   $0x0,-0x48(%rbp)
  jmp    L74
L115:
  mov    -0x48(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x68(%rbp),%rax
  add    %rax,%rdx
  mov    -0x48(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rcx
  mov    -0x60(%rbp),%rax
  add    %rcx,%rax
  movsd  (%rdx),%xmm0
  movsd  %xmm0,(%rax)
  addl   $0x1,-0x48(%rbp)
L74:
  mov    -0x48(%rbp),%eax
  cmp    -0x54(%rbp),%eax
  jl     L115
  jmp    L170
L23:
  nop
L170:
  leave
  ret
```

assistant: ```c
void rfftf1(int n, double c[], double ch[], const double wa[], const int ifac[13 + 2]) {
  int i;
  int k1, l1, l2, na, kh, nf, ip, iw, ix2, ix3, ix4, ido, idl1;
  double *cinput, *coutput;
  nf = ifac[1];
  na = 1;
  l2 = n;
  iw = n - 1;
  for (k1 = 1; k1 <= nf; ++k1) {
    kh = nf - k1;
    ip = ifac[kh + 2];
    l1 = l2 / ip;
    ido = n / l2;
    idl1 = ido * l1;
    iw -= (ip - 1) * ido;
    na = !na;
    if (na) {
      cinput = ch;
      coutput = c;
    } else {
      cinput = c;
      coutput = ch;
    }
    switch (ip) {
    case 4:
      ix2 = iw + ido;
      ix3 = ix2 + ido;
      radf4(ido, l1, cinput, coutput, &wa[iw], &wa[ix2], &wa[ix3]);
      break;
    case 2:
      radf2(ido, l1, cinput, coutput, &wa[iw]);
      break;
    case 3:
      ix2 = iw + ido;
      radf3(ido, l1, cinput, coutput, &wa[iw], &wa[ix2]);
      break;
    case 5:
      ix2 = iw + ido;
      ix3 = ix2 + ido;
      ix4 = ix3 + ido;
      radf5(ido, l1, cinput, coutput, &wa[iw], &wa[ix2], &wa[ix3], &wa[ix4]);
      break;
    default:
      if (ido == 1)
        na = !na;
      if (na == 0) {
        radfg(ido, ip, l1, idl1, c, ch, &wa[iw]);
        na = 1;
      } else {
        radfg(ido, ip, l1, idl1, ch, c, &wa[iw]);
        na = 0;
      }
    }
    l2 = l1;
  }
  if (na == 1)
    return;
  for (i = 0; i < n; i++)
    c[i] = ch[i];
}
```