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

```asm
<rffti1>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  push   %rbx
  sub    $0x88,%rsp
  mov    %edi,-0x74(%rbp)
  mov    %rsi,-0x80(%rbp)
  mov    %rdx,-0x88(%rbp)
  mov    -0x88(%rbp),%rcx
  mov    -0x74(%rbp),%eax
  lea    D5(%rip),%rdx
  mov    %rcx,%rsi
  mov    %eax,%edi
  call   <factorize@plt>
  mov    -0x88(%rbp),%rax
  mov    0x4(%rax),%eax
  mov    %eax,-0x48(%rbp)
  movsd  D3(%rip),%xmm0
  pxor   %xmm1,%xmm1
  cvtsi2sdl -0x74(%rbp),%xmm1
  divsd  %xmm1,%xmm0
  movsd  %xmm0,-0x28(%rbp)
  movl   $0x0,-0x4c(%rbp)
  mov    -0x48(%rbp),%eax
  sub    $0x1,%eax
  mov    %eax,-0x44(%rbp)
  movl   $0x1,-0x58(%rbp)
  cmpl   $0x0,-0x44(%rbp)
  je     L62
  movl   $0x1,-0x5c(%rbp)
  jmp    L40
L49:
  mov    -0x5c(%rbp),%eax
  cltq
  add    $0x1,%rax
  lea    0x0(,%rax,4),%rdx
  mov    -0x88(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%eax
  mov    %eax,-0x40(%rbp)
  movl   $0x0,-0x54(%rbp)
  mov    -0x58(%rbp),%eax
  imul   -0x40(%rbp),%eax
  mov    %eax,-0x3c(%rbp)
  mov    -0x74(%rbp),%eax
  cltd
  idivl  -0x3c(%rbp)
  mov    %eax,-0x38(%rbp)
  mov    -0x40(%rbp),%eax
  sub    $0x1,%eax
  mov    %eax,-0x34(%rbp)
  movl   $0x1,-0x60(%rbp)
  jmp    L35
L6:
  mov    -0x58(%rbp),%eax
  add    %eax,-0x54(%rbp)
  mov    -0x4c(%rbp),%eax
  mov    %eax,-0x64(%rbp)
  pxor   %xmm0,%xmm0
  cvtsi2sdl -0x54(%rbp),%xmm0
  movsd  -0x28(%rbp),%xmm1
  mulsd  %xmm1,%xmm0
  movsd  %xmm0,-0x20(%rbp)
  pxor   %xmm0,%xmm0
  movsd  %xmm0,-0x30(%rbp)
  movl   $0x3,-0x50(%rbp)
  jmp    L58
L60:
  addl   $0x2,-0x64(%rbp)
  movsd  -0x30(%rbp),%xmm1
  movsd  D6(%rip),%xmm0
  addsd  %xmm1,%xmm0
  movsd  %xmm0,-0x30(%rbp)
  movsd  -0x30(%rbp),%xmm0
  mulsd  -0x20(%rbp),%xmm0
  movsd  %xmm0,-0x18(%rbp)
  mov    -0x64(%rbp),%eax
  cltq
  shl    $0x3,%rax
  lea    -0x10(%rax),%rdx
  mov    -0x80(%rbp),%rax
  lea    (%rdx,%rax,1),%rbx
  mov    -0x18(%rbp),%rax
  movq   %rax,%xmm0
  call   <cos@plt>
  movq   %xmm0,%rax
  mov    %rax,(%rbx)
  mov    -0x64(%rbp),%eax
  cltq
  shl    $0x3,%rax
  lea    -0x8(%rax),%rdx
  mov    -0x80(%rbp),%rax
  lea    (%rdx,%rax,1),%rbx
  mov    -0x18(%rbp),%rax
  movq   %rax,%xmm0
  call   <sin@plt>
  movq   %xmm0,%rax
  mov    %rax,(%rbx)
  addl   $0x2,-0x50(%rbp)
L58:
  mov    -0x50(%rbp),%eax
  cmp    -0x38(%rbp),%eax
  jle    L60
  mov    -0x38(%rbp),%eax
  add    %eax,-0x4c(%rbp)
  addl   $0x1,-0x60(%rbp)
L35:
  mov    -0x60(%rbp),%eax
  cmp    -0x34(%rbp),%eax
  jle    L6
  mov    -0x3c(%rbp),%eax
  mov    %eax,-0x58(%rbp)
  addl   $0x1,-0x5c(%rbp)
L40:
  mov    -0x5c(%rbp),%eax
  cmp    -0x44(%rbp),%eax
  jle    L49
  jmp    L46
L62:
  nop
L46:
  mov    -0x8(%rbp),%rbx
  leave
  ret
```

tool_calls: name: extract_symbolic_data
arguments: tag: D5
type_guessed: string
name: extract_symbolic_data
arguments: tag: D3
type_guessed: f64
name: extract_symbolic_data
arguments: tag: D6
type_guessed: byte[8]

tool: D5: 

tool: D3: 6.28318530717959

tool: {"D6": [0x00,0x00,0x00,0x00,0x00,0x00,0xf0,0x3f]}

assistant: ```c
void rffti1(int n, double wa[], int ifac[13 + 2]) {
  static const double twopi = 6.28318530717959;
  double arg, argh, argld, fi;
  int i, j;
  int k1, l1, l2;
  int ld, ii, nf, ip, is;
  int ido, ipm, nfm1;
  static const int ntryh[4] = {4, 2, 3, 5};
  factorize(n, ifac, ntryh);
  nf = ifac[1];
  argh = twopi / n;
  is = 0;
  nfm1 = nf - 1;
  l1 = 1;
  if (nfm1 == 0)
    return;
  for (k1 = 1; k1 <= nfm1; k1++) {
    ip = ifac[k1 + 1];
    ld = 0;
    l2 = l1 * ip;
    ido = n / l2;
    ipm = ip - 1;
    for (j = 1; j <= ipm; ++j) {
      ld += l1;
      i = is;
      argld = (double)ld * argh;
      fi = 0;
      for (ii = 3; ii <= ido; ii += 2) {
        i += 2;
        fi += 1;
        arg = fi * argld;
        wa[i - 2] = cos(arg);
        wa[i - 1] = sin(arg);
      }
      is += ido;
    }
    l1 = l2;
  }
}
```