user: 这段汇编代码用C语言表示是什么样的？

```asm
<cftexp2>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x30,%rsp
  mov    %edi,-0x14(%rbp)
  mov    %rsi,-0x20(%rbp)
  mov    %edx,-0x18(%rbp)
  mov    %rcx,-0x28(%rbp)
  mov    -0x14(%rbp),%eax
  sar    %eax
  mov    %eax,-0x4(%rbp)
  mov    -0x14(%rbp),%eax
  sar    $0x2,%eax
  mov    %eax,-0x8(%rbp)
  jmp    L74
L13:
  mov    -0x8(%rbp),%eax
  mov    %eax,-0xc(%rbp)
  jmp    L42
L89:
  mov    -0xc(%rbp),%eax
  sub    -0x8(%rbp),%eax
  mov    %eax,-0x10(%rbp)
  jmp    L37
L40:
  mov    -0x8(%rbp),%eax
  sar    %eax
  mov    %eax,%edx
  mov    -0x18(%rbp),%eax
  sub    %edx,%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x28(%rbp),%rax
  add    %rax,%rdx
  mov    -0x10(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rcx
  mov    -0x20(%rbp),%rax
  add    %rax,%rcx
  mov    -0x8(%rbp),%eax
  mov    %rcx,%rsi
  mov    %eax,%edi
  call   <cftmdl1@plt>
  mov    -0x8(%rbp),%eax
  sar    %eax
  mov    %eax,%edx
  mov    -0x18(%rbp),%eax
  sub    %edx,%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x28(%rbp),%rax
  add    %rax,%rdx
  mov    -0x4(%rbp),%ecx
  mov    -0x10(%rbp),%eax
  add    %ecx,%eax
  cltq
  lea    0x0(,%rax,8),%rcx
  mov    -0x20(%rbp),%rax
  add    %rax,%rcx
  mov    -0x8(%rbp),%eax
  mov    %rcx,%rsi
  mov    %eax,%edi
  call   <cftmdl1@plt>
  mov    -0xc(%rbp),%eax
  add    %eax,%eax
  add    %eax,-0x10(%rbp)
L37:
  mov    -0x10(%rbp),%eax
  cmp    -0x4(%rbp),%eax
  jl     L40
  mov    -0xc(%rbp),%eax
  add    %eax,%eax
  sub    -0x8(%rbp),%eax
  mov    %eax,-0x10(%rbp)
  jmp    L130
L82:
  mov    -0x18(%rbp),%eax
  sub    -0x8(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x28(%rbp),%rax
  add    %rax,%rdx
  mov    -0x10(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rcx
  mov    -0x20(%rbp),%rax
  add    %rax,%rcx
  mov    -0x8(%rbp),%eax
  mov    %rcx,%rsi
  mov    %eax,%edi
  call   <cftmdl2@plt>
  mov    -0x18(%rbp),%eax
  sub    -0x8(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x28(%rbp),%rax
  add    %rax,%rdx
  mov    -0x4(%rbp),%ecx
  mov    -0x10(%rbp),%eax
  add    %ecx,%eax
  cltq
  lea    0x0(,%rax,8),%rcx
  mov    -0x20(%rbp),%rax
  add    %rax,%rcx
  mov    -0x8(%rbp),%eax
  mov    %rcx,%rsi
  mov    %eax,%edi
  call   <cftmdl2@plt>
  mov    -0xc(%rbp),%eax
  shl    $0x2,%eax
  add    %eax,-0x10(%rbp)
L130:
  mov    -0x10(%rbp),%eax
  cmp    -0x4(%rbp),%eax
  jl     L82
  shll   $0x2,-0xc(%rbp)
L42:
  mov    -0xc(%rbp),%eax
  cmp    -0x4(%rbp),%eax
  jl     L89
  sarl   $0x2,-0x8(%rbp)
L74:
  cmpl   $0x80,-0x8(%rbp)
  jg     L13
  mov    -0x8(%rbp),%eax
  mov    %eax,-0xc(%rbp)
  jmp    L91
L57:
  mov    -0xc(%rbp),%eax
  sub    -0x8(%rbp),%eax
  mov    %eax,-0x10(%rbp)
  jmp    L9
L8:
  mov    -0x8(%rbp),%eax
  sar    %eax
  mov    %eax,%edx
  mov    -0x18(%rbp),%eax
  sub    %edx,%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x28(%rbp),%rax
  add    %rax,%rdx
  mov    -0x10(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rcx
  mov    -0x20(%rbp),%rax
  add    %rax,%rcx
  mov    -0x8(%rbp),%eax
  mov    %rcx,%rsi
  mov    %eax,%edi
  call   <cftmdl1@plt>
  mov    -0x10(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x20(%rbp),%rax
  lea    (%rdx,%rax,1),%rsi
  mov    -0x28(%rbp),%rcx
  mov    -0x18(%rbp),%edx
  mov    -0x8(%rbp),%eax
  mov    %eax,%edi
  call   <cftfx41@plt>
  mov    -0x8(%rbp),%eax
  sar    %eax
  mov    %eax,%edx
  mov    -0x18(%rbp),%eax
  sub    %edx,%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x28(%rbp),%rax
  add    %rax,%rdx
  mov    -0x4(%rbp),%ecx
  mov    -0x10(%rbp),%eax
  add    %ecx,%eax
  cltq
  lea    0x0(,%rax,8),%rcx
  mov    -0x20(%rbp),%rax
  add    %rax,%rcx
  mov    -0x8(%rbp),%eax
  mov    %rcx,%rsi
  mov    %eax,%edi
  call   <cftmdl1@plt>
  mov    -0x4(%rbp),%edx
  mov    -0x10(%rbp),%eax
  add    %edx,%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x20(%rbp),%rax
  lea    (%rdx,%rax,1),%rsi
  mov    -0x28(%rbp),%rcx
  mov    -0x18(%rbp),%edx
  mov    -0x8(%rbp),%eax
  mov    %eax,%edi
  call   <cftfx41@plt>
  mov    -0xc(%rbp),%eax
  add    %eax,%eax
  add    %eax,-0x10(%rbp)
L9:
  mov    -0x10(%rbp),%eax
  cmp    -0x4(%rbp),%eax
  jl     L8
  mov    -0xc(%rbp),%eax
  add    %eax,%eax
  sub    -0x8(%rbp),%eax
  mov    %eax,-0x10(%rbp)
  jmp    L126
L68:
  mov    -0x18(%rbp),%eax
  sub    -0x8(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x28(%rbp),%rax
  add    %rax,%rdx
  mov    -0x10(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rcx
  mov    -0x20(%rbp),%rax
  add    %rax,%rcx
  mov    -0x8(%rbp),%eax
  mov    %rcx,%rsi
  mov    %eax,%edi
  call   <cftmdl2@plt>
  mov    -0x10(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x20(%rbp),%rax
  lea    (%rdx,%rax,1),%rsi
  mov    -0x28(%rbp),%rcx
  mov    -0x18(%rbp),%edx
  mov    -0x8(%rbp),%eax
  mov    %eax,%edi
  call   <cftfx42@plt>
  mov    -0x18(%rbp),%eax
  sub    -0x8(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x28(%rbp),%rax
  add    %rax,%rdx
  mov    -0x4(%rbp),%ecx
  mov    -0x10(%rbp),%eax
  add    %ecx,%eax
  cltq
  lea    0x0(,%rax,8),%rcx
  mov    -0x20(%rbp),%rax
  add    %rax,%rcx
  mov    -0x8(%rbp),%eax
  mov    %rcx,%rsi
  mov    %eax,%edi
  call   <cftmdl2@plt>
  mov    -0x4(%rbp),%edx
  mov    -0x10(%rbp),%eax
  add    %edx,%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x20(%rbp),%rax
  lea    (%rdx,%rax,1),%rsi
  mov    -0x28(%rbp),%rcx
  mov    -0x18(%rbp),%edx
  mov    -0x8(%rbp),%eax
  mov    %eax,%edi
  call   <cftfx42@plt>
  mov    -0xc(%rbp),%eax
  shl    $0x2,%eax
  add    %eax,-0x10(%rbp)
L126:
  mov    -0x10(%rbp),%eax
  cmp    -0x4(%rbp),%eax
  jl     L68
  shll   $0x2,-0xc(%rbp)
L91:
  mov    -0xc(%rbp),%eax
  cmp    -0x4(%rbp),%eax
  jl     L57
  nop
  nop
  leave
  ret
```

assistant: ```c
void cftexp2(int n, double *a, int nw, double *w) {
  void cftmdl1(int n, double *a, double *w);
  void cftmdl2(int n, double *a, double *w);
  void cftfx41(int n, double *a, int nw, double *w);
  void cftfx42(int n, double *a, int nw, double *w);
  int j, k, l, m;
  m = n >> 1;
  l = n >> 2;
  while (l > 128) {
    for (k = l; k < m; k <<= 2) {
      for (j = k - l; j < m; j += 2 * k) {
        cftmdl1(l, &a[j], &w[nw - (l >> 1)]);
        cftmdl1(l, &a[m + j], &w[nw - (l >> 1)]);
      }
      for (j = 2 * k - l; j < m; j += 4 * k) {
        cftmdl2(l, &a[j], &w[nw - l]);
        cftmdl2(l, &a[m + j], &w[nw - l]);
      }
    }
    l >>= 2;
  }
  for (k = l; k < m; k <<= 2) {
    for (j = k - l; j < m; j += 2 * k) {
      cftmdl1(l, &a[j], &w[nw - (l >> 1)]);
      cftfx41(l, &a[j], nw, w);
      cftmdl1(l, &a[m + j], &w[nw - (l >> 1)]);
      cftfx41(l, &a[m + j], nw, w);
    }
    for (j = 2 * k - l; j < m; j += 4 * k) {
      cftmdl2(l, &a[j], &w[nw - l]);
      cftfx42(l, &a[j], nw, w);
      cftmdl2(l, &a[m + j], &w[nw - l]);
      cftfx42(l, &a[m + j], nw, w);
    }
  }
}
```