user: 请将这段汇编代码片段转换成等效的C代码：

```asm
<rotateFct>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x70,%rsp
  mov    %edi,-0x34(%rbp)
  mov    %esi,-0x38(%rbp)
  mov    %edx,-0x3c(%rbp)
  mov    %rcx,-0x48(%rbp)
  mov    %r8,-0x50(%rbp)
  mov    %r9,-0x58(%rbp)
  movsd  %xmm0,-0x60(%rbp)
  movsd  %xmm1,-0x68(%rbp)
  movsd  %xmm2,-0x70(%rbp)
  mov    0x18(%rbp),%rax
  mov    %rax,-0x28(%rbp)
  mov    -0x34(%rbp),%eax
  imul   %eax,%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x28(%rbp),%rax
  add    %rdx,%rax
  mov    %rax,-0x20(%rbp)
  mov    -0x34(%rbp),%eax
  imul   %eax,%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x20(%rbp),%rax
  add    %rdx,%rax
  mov    %rax,-0x18(%rbp)
  mov    -0x38(%rbp),%eax
  imul   %eax,%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x18(%rbp),%rax
  add    %rdx,%rax
  mov    %rax,-0x10(%rbp)
  mov    -0x38(%rbp),%eax
  imul   %eax,%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x10(%rbp),%rax
  add    %rdx,%rax
  mov    %rax,-0x8(%rbp)
  movl   $0x0,-0x2c(%rbp)
  jmp    L16
L19:
  mov    -0x2c(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x18(%rbp),%rax
  add    %rdx,%rax
  pxor   %xmm0,%xmm0
  movsd  %xmm0,(%rax)
  mov    -0x2c(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x10(%rbp),%rax
  add    %rdx,%rax
  pxor   %xmm0,%xmm0
  movsd  %xmm0,(%rax)
  addl   $0x1,-0x2c(%rbp)
L16:
  mov    -0x38(%rbp),%eax
  imul   %eax,%eax
  cmp    %eax,-0x2c(%rbp)
  jl     L19
  mov    -0x34(%rbp),%eax
  lea    (%rax,%rax,1),%r10d
  mov    0x20(%rbp),%r8
  mov    -0x20(%rbp),%rcx
  mov    -0x28(%rbp),%rdx
  mov    -0x50(%rbp),%rsi
  mov    -0x48(%rbp),%rax
  sub    $0x8,%rsp
  mov    -0x34(%rbp),%edi
  push   %rdi
  push   $0x1
  push   -0x8(%rbp)
  mov    %r8,%r9
  mov    %r10d,%r8d
  mov    %rax,%rdi
  call   <FST_semi_memo@plt>
  add    $0x20,%rsp
  mov    -0x18(%rbp),%r9
  mov    -0x20(%rbp),%r8
  mov    -0x28(%rbp),%rcx
  movsd  -0x70(%rbp),%xmm1
  movsd  -0x68(%rbp),%xmm0
  mov    -0x60(%rbp),%rdi
  mov    -0x3c(%rbp),%edx
  mov    -0x38(%rbp),%esi
  mov    -0x34(%rbp),%eax
  push   -0x8(%rbp)
  push   -0x10(%rbp)
  movapd %xmm1,%xmm2
  movapd %xmm0,%xmm1
  movq   %rdi,%xmm0
  mov    %eax,%edi
  call   <rotateCoefAll@plt>
  add    $0x10,%rsp
  mov    -0x38(%rbp),%eax
  lea    (%rax,%rax,1),%r8d
  mov    0x28(%rbp),%rdi
  mov    -0x58(%rbp),%rdx
  mov    -0x10(%rbp),%rsi
  mov    -0x18(%rbp),%rax
  sub    $0x8,%rsp
  mov    -0x38(%rbp),%ecx
  push   %rcx
  push   $0x1
  push   -0x8(%rbp)
  mov    %rdi,%r9
  mov    0x10(%rbp),%rcx
  mov    %rax,%rdi
  call   <InvFST_semi_memo@plt>
  add    $0x20,%rsp
  nop
  leave
  ret
```

assistant: ```c
void rotateFct(int bwIn, int bwOut, int degOut, double *sigInR, double *sigInI, double *sigOutR, double *sigOutI, double alpha, double beta, double gamma, double *scratch, double **spharmonic_pml_table, double **transpose_spharmonic_pml_table) {
  double *rcoeffs, *icoeffs, *workspace;
  double *coefOutR, *coefOutI;
  int i;
  rcoeffs = scratch;
  icoeffs = rcoeffs + (bwIn * bwIn);
  coefOutR = icoeffs + (bwIn * bwIn);
  coefOutI = coefOutR + (bwOut * bwOut);
  workspace = coefOutI + (bwOut * bwOut);
  for (i = 0; i < (bwOut * bwOut); i++) {
    coefOutR[i] = 0.;
    coefOutI[i] = 0.;
  }
  FST_semi_memo(sigInR, sigInI, rcoeffs, icoeffs, 2 * bwIn, spharmonic_pml_table, workspace, 1, bwIn);
  rotateCoefAll(bwIn, bwOut, degOut, alpha, beta, gamma, rcoeffs, icoeffs, coefOutR, coefOutI, workspace);
  InvFST_semi_memo(coefOutR, coefOutI, sigOutR, sigOutI, 2 * bwOut, transpose_spharmonic_pml_table, workspace, 1, bwOut);
}
```