user: What is the c source code of the assembly code below:

```asm
<hc_fftw_to_mx>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  push   %rbx
  mov    %rsi,%rax
  mov    %rcx,-0x10(%rbp)
  mov    -0x10(%rbp),%rcx
  and    $0x1,%ecx
  test   %rcx,%rcx
  je     L46
  movsd  (%rdx),%xmm0
  movsd  %xmm0,(%rdi)
  pxor   %xmm0,%xmm0
  movsd  %xmm0,(%rax)
  mov    $0x1,%ebx
  jmp    L9
L52:
  mov    %rbx,%rcx
  shl    $0x3,%rcx
  add    %rdx,%rcx
  movsd  (%rcx),%xmm1
  mov    -0x10(%rbp),%rcx
  sub    %rbx,%rcx
  shl    $0x3,%rcx
  add    %rdx,%rcx
  movsd  (%rcx),%xmm2
  mov    %rbx,%rcx
  shl    $0x3,%rcx
  add    %rdi,%rcx
  movsd  %xmm1,(%rcx)
  mov    %rbx,%rcx
  shl    $0x3,%rcx
  add    %rax,%rcx
  movsd  %xmm2,(%rcx)
  mov    -0x10(%rbp),%rcx
  sub    %rbx,%rcx
  shl    $0x3,%rcx
  add    %rdi,%rcx
  movsd  %xmm1,(%rcx)
  mov    -0x10(%rbp),%rcx
  sub    %rbx,%rcx
  shl    $0x3,%rcx
  add    %rax,%rcx
  movq   D10(%rip),%xmm0
  xorpd  %xmm2,%xmm0
  movsd  %xmm0,(%rcx)
  add    $0x1,%rbx
L9:
  mov    -0x10(%rbp),%rcx
  add    $0x1,%rcx
  mov    %rcx,%rsi
  shr    $0x3f,%rsi
  add    %rsi,%rcx
  sar    %rcx
  cmp    %rcx,%rbx
  jl     L52
  jmp    L2
L46:
  movsd  (%rdx),%xmm0
  movsd  %xmm0,(%rdi)
  pxor   %xmm0,%xmm0
  movsd  %xmm0,(%rax)
  mov    $0x1,%ebx
  jmp    L45
L0:
  mov    %rbx,%rcx
  shl    $0x3,%rcx
  add    %rdx,%rcx
  movsd  (%rcx),%xmm3
  mov    -0x10(%rbp),%rcx
  sub    %rbx,%rcx
  shl    $0x3,%rcx
  add    %rdx,%rcx
  movsd  (%rcx),%xmm4
  mov    %rbx,%rcx
  shl    $0x3,%rcx
  add    %rdi,%rcx
  movsd  %xmm3,(%rcx)
  mov    %rbx,%rcx
  shl    $0x3,%rcx
  add    %rax,%rcx
  movsd  %xmm4,(%rcx)
  mov    -0x10(%rbp),%rcx
  sub    %rbx,%rcx
  shl    $0x3,%rcx
  add    %rdi,%rcx
  movsd  %xmm3,(%rcx)
  mov    -0x10(%rbp),%rcx
  sub    %rbx,%rcx
  shl    $0x3,%rcx
  add    %rax,%rcx
  movq   D10(%rip),%xmm0
  xorpd  %xmm4,%xmm0
  movsd  %xmm0,(%rcx)
  add    $0x1,%rbx
L45:
  mov    -0x10(%rbp),%rcx
  mov    %rcx,%rsi
  shr    $0x3f,%rsi
  add    %rsi,%rcx
  sar    %rcx
  cmp    %rcx,%rbx
  jl     L0
  mov    -0x10(%rbp),%rcx
  mov    %rcx,%rsi
  shr    $0x3f,%rsi
  add    %rsi,%rcx
  sar    %rcx
  shl    $0x3,%rcx
  add    %rdx,%rcx
  mov    -0x10(%rbp),%rdx
  mov    %rdx,%rsi
  shr    $0x3f,%rsi
  add    %rsi,%rdx
  sar    %rdx
  shl    $0x3,%rdx
  add    %rdi,%rdx
  movsd  (%rcx),%xmm0
  movsd  %xmm0,(%rdx)
  mov    -0x10(%rbp),%rdx
  mov    %rdx,%rcx
  shr    $0x3f,%rcx
  add    %rcx,%rdx
  sar    %rdx
  shl    $0x3,%rdx
  add    %rdx,%rax
  pxor   %xmm0,%xmm0
  movsd  %xmm0,(%rax)
L2:
  nop
  mov    -0x8(%rbp),%rbx
  leave
  ret
```

tool_calls: name: extract_symbolic_data
arguments: label: D10
data_type: f32[2]

tool: {"D10": [0.0,-0.0]}

assistant: ```c
void hc_fftw_to_mx(register double *Xr, register double *Xi, register double *X, long N) {
  register long k;
  register double re, im;
  if (N % 2) {
    Xr[0] = X[0];
    Xi[0] = 0.0;
    for (k = 1; k < ((N + 1) / 2); ++k) {
      re = X[k];
      im = X[N - k];
      Xr[k] = re;
      Xi[k] = im;
      Xr[N - k] = re;
      Xi[N - k] = -im;
    }
  } else {
    Xr[0] = X[0];
    Xi[0] = 0.0;
    for (k = 1; k < (N / 2); ++k) {
      re = X[k];
      im = X[N - k];
      Xr[k] = re;
      Xi[k] = im;
      Xr[N - k] = re;
      Xi[N - k] = -im;
    }
    Xr[N / 2] = X[N / 2];
    Xi[N / 2] = 0.0;
  }
}
```