user: 请从给定的汇编指令推导出C源代码：

```asm
<wigNaiveSynthesis_symX>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  mov    %edi,-0x44(%rbp)
  mov    %esi,-0x48(%rbp)
  mov    %edx,-0x4c(%rbp)
  mov    %rcx,-0x58(%rbp)
  mov    %r8,-0x60(%rbp)
  mov    %r9,-0x68(%rbp)
  mov    -0x48(%rbp),%eax
  mov    %eax,%edx
  neg    %edx
  cmovs  %eax,%edx
  mov    -0x44(%rbp),%eax
  mov    %eax,%ecx
  neg    %ecx
  cmovns %ecx,%eax
  cmp    %eax,%edx
  cmovge %edx,%eax
  mov    %eax,-0x28(%rbp)
  mov    -0x4c(%rbp),%eax
  add    %eax,%eax
  mov    %eax,-0x24(%rbp)
  mov    -0x44(%rbp),%eax
  sub    -0x48(%rbp),%eax
  test   %eax,%eax
  jle    L68
  mov    -0x44(%rbp),%eax
  sub    -0x48(%rbp),%eax
  and    $0x1,%eax
  test   %eax,%eax
  setne  %al
  jmp    L59
L68:
  mov    -0x44(%rbp),%eax
  neg    %eax
  sub    -0x48(%rbp),%eax
  and    $0x1,%eax
  test   %eax,%eax
  setne  %al
L59:
  test   %al,%al
  je     L21
  movl   $0xffffffff,-0x2c(%rbp)
  jmp    L49
L21:
  movl   $0x1,-0x2c(%rbp)
L49:
  movl   $0x0,-0x34(%rbp)
  jmp    L91
L20:
  pxor   %xmm0,%xmm0
  movsd  %xmm0,-0x20(%rbp)
  pxor   %xmm0,%xmm0
  movsd  %xmm0,-0x18(%rbp)
  pxor   %xmm0,%xmm0
  movsd  %xmm0,-0x10(%rbp)
  pxor   %xmm0,%xmm0
  movsd  %xmm0,-0x8(%rbp)
  movl   $0x0,-0x30(%rbp)
  jmp    L36
L73:
  mov    -0x30(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x60(%rbp),%rax
  add    %rdx,%rax
  movsd  (%rax),%xmm1
  mov    -0x30(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x58(%rbp),%rax
  add    %rdx,%rax
  movsd  (%rax),%xmm0
  mulsd  %xmm1,%xmm0
  movsd  -0x20(%rbp),%xmm1
  addsd  %xmm1,%xmm0
  movsd  %xmm0,-0x20(%rbp)
  addl   $0x1,-0x30(%rbp)
L36:
  mov    -0x4c(%rbp),%eax
  sub    -0x28(%rbp),%eax
  cltd
  shr    $0x1e,%edx
  add    %edx,%eax
  and    $0x3,%eax
  sub    %edx,%eax
  cmp    %eax,-0x30(%rbp)
  jl     L73
  jmp    L56
L52:
  mov    -0x30(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x60(%rbp),%rax
  add    %rdx,%rax
  movsd  (%rax),%xmm1
  mov    -0x30(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x58(%rbp),%rax
  add    %rdx,%rax
  movsd  (%rax),%xmm0
  mulsd  %xmm1,%xmm0
  movsd  -0x20(%rbp),%xmm1
  addsd  %xmm1,%xmm0
  movsd  %xmm0,-0x20(%rbp)
  mov    -0x30(%rbp),%eax
  cltq
  add    $0x1,%rax
  lea    0x0(,%rax,8),%rdx
  mov    -0x60(%rbp),%rax
  add    %rdx,%rax
  movsd  (%rax),%xmm1
  mov    -0x30(%rbp),%eax
  cltq
  add    $0x1,%rax
  lea    0x0(,%rax,8),%rdx
  mov    -0x58(%rbp),%rax
  add    %rdx,%rax
  movsd  (%rax),%xmm0
  mulsd  %xmm1,%xmm0
  movsd  -0x18(%rbp),%xmm1
  addsd  %xmm1,%xmm0
  movsd  %xmm0,-0x18(%rbp)
  mov    -0x30(%rbp),%eax
  cltq
  add    $0x2,%rax
  lea    0x0(,%rax,8),%rdx
  mov    -0x60(%rbp),%rax
  add    %rdx,%rax
  movsd  (%rax),%xmm1
  mov    -0x30(%rbp),%eax
  cltq
  add    $0x2,%rax
  lea    0x0(,%rax,8),%rdx
  mov    -0x58(%rbp),%rax
  add    %rdx,%rax
  movsd  (%rax),%xmm0
  mulsd  %xmm1,%xmm0
  movsd  -0x10(%rbp),%xmm1
  addsd  %xmm1,%xmm0
  movsd  %xmm0,-0x10(%rbp)
  mov    -0x30(%rbp),%eax
  cltq
  add    $0x3,%rax
  lea    0x0(,%rax,8),%rdx
  mov    -0x60(%rbp),%rax
  add    %rdx,%rax
  movsd  (%rax),%xmm1
  mov    -0x30(%rbp),%eax
  cltq
  add    $0x3,%rax
  lea    0x0(,%rax,8),%rdx
  mov    -0x58(%rbp),%rax
  add    %rdx,%rax
  movsd  (%rax),%xmm0
  mulsd  %xmm1,%xmm0
  movsd  -0x8(%rbp),%xmm1
  addsd  %xmm1,%xmm0
  movsd  %xmm0,-0x8(%rbp)
  addl   $0x4,-0x30(%rbp)
L56:
  mov    -0x4c(%rbp),%eax
  sub    -0x28(%rbp),%eax
  cmp    %eax,-0x30(%rbp)
  jl     L52
  pxor   %xmm1,%xmm1
  cvtsi2sdl -0x2c(%rbp),%xmm1
  movsd  -0x20(%rbp),%xmm0
  addsd  -0x18(%rbp),%xmm0
  addsd  -0x10(%rbp),%xmm0
  addsd  -0x8(%rbp),%xmm0
  mov    -0x34(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x68(%rbp),%rax
  add    %rdx,%rax
  mulsd  %xmm1,%xmm0
  movsd  %xmm0,(%rax)
  mov    -0x4c(%rbp),%eax
  sub    -0x28(%rbp),%eax
  cltq
  shl    $0x3,%rax
  add    %rax,-0x60(%rbp)
  addl   $0x1,-0x34(%rbp)
L91:
  mov    -0x34(%rbp),%eax
  cmp    -0x24(%rbp),%eax
  jl     L20
  nop
  nop
  pop    %rbp
  ret
```

assistant: ```c
void wigNaiveSynthesis_symX(int m1, int m2, int bw, double *coeffs, double *wignersTrans, double *signal, double *workspace) {
  int i, j, m, n;
  int fudge;
  double tmp0, tmp1, tmp2, tmp3;
  m = ((((m1) > 0 ? (m1) : (-m1))) > (((m2) > 0 ? (m2) : (-m2))) ? (((m1) > 0 ? (m1) : (-m1))) : (((m2) > 0 ? (m2) : (-m2))));
  n = 2 * bw;
  if (((m1 - m2) > 0 ? (m1 - m2) : (-m1 - m2)) % 2)
    fudge = -1;
  else
    fudge = 1;
  for (i = 0; i < n; i++) {
    tmp0 = 0.;
    tmp1 = 0.;
    tmp2 = 0.;
    tmp3 = 0.;
    for (j = 0; j < (bw - m) % 4; ++j)
      tmp0 += wignersTrans[j] * coeffs[j];
    for (; j < (bw - m); j += 4) {
      tmp0 += wignersTrans[j] * coeffs[j];
      tmp1 += wignersTrans[j + 1] * coeffs[j + 1];
      tmp2 += wignersTrans[j + 2] * coeffs[j + 2];
      tmp3 += wignersTrans[j + 3] * coeffs[j + 3];
    }
    signal[i] = fudge * (tmp0 + tmp1 + tmp2 + tmp3);
    wignersTrans += (bw - m);
  }
}
```