user: Please show me the C implementation that matches the assembly code listed below:

```asm
<fftmx>:
  endbr64
  push   %r15
  push   %r14
  push   %r13
  push   %r12
  push   %rbp
  push   %rbx
  sub    $0xf8,%rsp
  mov    %rdi,%r15
  mov    %rsi,%r14
  mov    %edx,0xd4(%rsp)
  mov    %ecx,0xd0(%rsp)
  mov    %r9d,0xd8(%rsp)
  mov    0x140(%rsp),%r13
  mov    0x150(%rsp),%r12
  mov    %r9d,%eax
  neg    %eax
  cmovs  %r9d,%eax
  mov    %eax,0x24(%rsp)
  mov    %eax,%ebp
  imul   %edx,%ebp
  imul   %eax,%r8d
  mov    %r8d,0x94(%rsp)
  test   %r9d,%r9d
  js     L762
  pxor   %xmm1,%xmm1
  cvtsi2sd %ecx,%xmm1
  movsd  D24(%rip),%xmm0
  divsd  %xmm1,%xmm0
  test   %ebp,%ebp
  jle    L705
  movslq %eax,%rcx
  shl    $0x3,%rcx
  mov    $0x8,%eax
  mov    $0x1,%edx
L489:
  movapd %xmm0,%xmm1
  mulsd  (%r15,%rax,1),%xmm1
  movsd  %xmm1,(%r15,%rax,1)
  movapd %xmm0,%xmm1
  mulsd  (%r14,%rax,1),%xmm1
  movsd  %xmm1,(%r14,%rax,1)
  add    0x24(%rsp),%edx
  add    %rcx,%rax
  cmp    %edx,%ebp
  jge    L489
  movsd  D275(%rip),%xmm7
  movsd  %xmm7,0xa0(%rsp)
  movsd  D140(%rip),%xmm7
  movsd  %xmm7,0x88(%rsp)
  movsd  D258(%rip),%xmm7
  movsd  %xmm7,0x28(%rsp)
L744:
  mov    %ebp,%eax
  sub    0x24(%rsp),%eax
  mov    %eax,0x80(%rsp)
  mov    0x94(%rsp),%eax
  cltd
  idivl  0xd0(%rsp)
  mov    %eax,0x18(%rsp)
  mov    %eax,0x3c(%rsp)
  shl    $0x5,%eax
  mov    %eax,0x38(%rsp)
  mov    0x138(%rsp),%rax
  mov    (%rax),%eax
  mov    0x130(%rsp),%edx
  sub    %eax,%edx
  movslq %edx,%rdx
  mov    0x168(%rsp),%rdi
  mov    (%rdi,%rdx,4),%edi
  mov    %edi,0xc4(%rsp)
  test   %eax,%eax
  jle    L764
  cltq
  mov    0x168(%rsp),%rsi
  mov    (%rsi,%rax,4),%eax
  cmp    %eax,%edi
  cmovge %edi,%eax
  mov    %eax,0xc4(%rsp)
L764:
  mov    0x18(%rsp),%eax
  pxor   %xmm0,%xmm0
  cvtsi2sd %eax,%xmm0
  mulsd  D8(%rip),%xmm0
  movsd  %xmm0,0xc8(%rsp)
  mov    0x24(%rsp),%edi
  add    %edi,%edi
  mov    %edi,0xc0(%rsp)
  add    %eax,%eax
  mov    %eax,0x90(%rsp)
  mov    0x94(%rsp),%eax
  movq   $0x1,0xa8(%rsp)
  pxor   %xmm7,%xmm7
  movsd  %xmm7,0xb0(%rsp)
  movsd  %xmm7,0x68(%rsp)
  movsd  %xmm7,0xb8(%rsp)
  movsd  %xmm7,0x50(%rsp)
  movl   $0x0,0x84(%rsp)
  movl   $0x0,0x58(%rsp)
  mov    %r14,0x10(%rsp)
  mov    %r13,%r14
  mov    %eax,%r13d
  jmp    L441
L762:
  movsd  D90(%rip),%xmm7
  movsd  %xmm7,0xa0(%rsp)
  movsd  D174(%rip),%xmm7
  movsd  %xmm7,0x88(%rsp)
  movsd  D274(%rip),%xmm7
  movsd  %xmm7,0x28(%rsp)
  jmp    L744
L705:
  movsd  D275(%rip),%xmm7
  movsd  %xmm7,0xa0(%rsp)
  movsd  D140(%rip),%xmm7
  movsd  %xmm7,0x88(%rsp)
  movsd  D258(%rip),%xmm7
  movsd  %xmm7,0x28(%rsp)
  jmp    L744
L809:
  mov    %r13d,%ecx
  shr    $0x1f,%ecx
  add    %r13d,%ecx
  sar    %ecx
  mov    %ecx,0x20(%rsp)
  lea    0x2(%rcx),%eax
  mov    %eax,%r10d
  mov    $0x1,%ebx
L567:
  mov    0x20(%rsp),%r11d
  lea    (%rbx,%r11,1),%esi
  movslq %esi,%rdx
  shl    $0x3,%rdx
  lea    (%r15,%rdx,1),%r8
  movsd  (%r8),%xmm1
  mov    0x10(%rsp),%r9
  add    %r9,%rdx
  movsd  (%rdx),%xmm0
  movslq %ebx,%rax
  shl    $0x3,%rax
  lea    (%r15,%rax,1),%rdi
  movsd  (%rdi),%xmm2
  subsd  %xmm1,%xmm2
  movsd  %xmm2,(%r8)
  add    %r9,%rax
  movsd  (%rax),%xmm2
  subsd  %xmm0,%xmm2
  movsd  %xmm2,(%rdx)
  addsd  (%rdi),%xmm1
  movsd  %xmm1,(%rdi)
  addsd  (%rax),%xmm0
  movsd  %xmm0,(%rax)
  lea    (%r11,%rsi,1),%ebx
  mov    0x80(%rsp),%eax
  cmp    %ebx,%eax
  jge    L567
  sub    %eax,%ebx
  cmp    %ebx,0x18(%rsp)
  jge    L567
  cmp    %ebx,%ecx
  jl     L271
  movsd  D24(%rip),%xmm0
  subsd  0x60(%rsp),%xmm0
  movsd  %xmm0,0x70(%rsp)
  lea    0xe8(%rsp),%rax
  mov    %rax,0x48(%rsp)
  mov    %r14,0x140(%rsp)
  mov    %r10d,%r14d
  mov    %r12,0x150(%rsp)
  mov    %r11d,%r12d
  jmp    L875
L790:
  movsd  0x60(%rsp),%xmm7
  movapd %xmm7,%xmm1
  mulsd  %xmm3,%xmm1
  movsd  0x40(%rsp),%xmm6
  movapd %xmm6,%xmm2
  mulsd  %xmm5,%xmm2
  addsd  %xmm2,%xmm1
  mulsd  %xmm3,%xmm6
  movapd %xmm6,%xmm2
  mulsd  %xmm5,%xmm7
  subsd  %xmm7,%xmm2
  addsd  %xmm2,%xmm5
  movapd %xmm0,%xmm3
  subsd  %xmm1,%xmm3
L832:
  lea    (%rbx,%r12,1),%edx
  movslq %ebx,%rbx
  shl    $0x3,%rbx
  lea    (%r15,%rbx,1),%rsi
  movsd  (%rsi),%xmm2
  movslq %edx,%rax
  shl    $0x3,%rax
  lea    (%r15,%rax,1),%rcx
  movsd  (%rcx),%xmm4
  movapd %xmm2,%xmm0
  subsd  %xmm4,%xmm0
  mov    0x10(%rsp),%rdi
  add    %rdi,%rbx
  add    %rdi,%rax
  movsd  (%rbx),%xmm1
  subsd  (%rax),%xmm1
  addsd  %xmm4,%xmm2
  movsd  %xmm2,(%rsi)
  movsd  (%rbx),%xmm2
  addsd  (%rax),%xmm2
  movsd  %xmm2,(%rbx)
  movapd %xmm3,%xmm2
  mulsd  %xmm0,%xmm2
  movapd %xmm5,%xmm4
  mulsd  %xmm1,%xmm4
  subsd  %xmm4,%xmm2
  movsd  %xmm2,(%rcx)
  mulsd  %xmm5,%xmm0
  mulsd  %xmm3,%xmm1
  addsd  %xmm1,%xmm0
  movsd  %xmm0,(%rax)
  lea    (%r12,%rdx,1),%ebx
  cmp    %ebx,%ebp
  jg     L832
  mov    %ebx,%eax
  sub    %ebp,%eax
  xorpd  D48(%rip),%xmm3
  movapd %xmm3,%xmm0
  mov    %r14d,%ebx
  sub    %eax,%ebx
  cmp    %ebx,%eax
  jl     L832
  add    0x18(%rsp),%ebx
  cmp    %ebx,%r13d
  jge    L790
  cmp    %ebx,%eax
  jle    L798
  lea    0xe0(%rsp),%rsi
  lea    -0x1(%rbx),%eax
  cltd
  idivl  0x3c(%rsp)
  pxor   %xmm0,%xmm0
  cvtsi2sd %eax,%xmm0
  mulsd  0x30(%rsp),%xmm0
  mulsd  0x28(%rsp),%xmm0
  mov    0x48(%rsp),%rdi
  call   <sincos@plt>
  movsd  0xe0(%rsp),%xmm3
  movsd  0xe8(%rsp),%xmm5
  add    0x38(%rsp),%r13d
  mov    0x8(%rsp),%eax
  cmp    %r13d,%eax
  cmovle %eax,%r13d
  jmp    L832
L798:
  add    0xc0(%rsp),%r14d
  mov    %r14d,%eax
  sub    %r12d,%eax
  mov    %eax,%ebx
  shr    $0x1f,%ebx
  add    %eax,%ebx
  sar    %ebx
  add    0x18(%rsp),%ebx
  cmp    %ebx,0x90(%rsp)
  jl     L151
L875:
  movsd  0x70(%rsp),%xmm3
  mov    %r14d,%eax
  shr    $0x1f,%eax
  add    %r14d,%eax
  sar    %eax
  mov    %eax,0x8(%rsp)
  mov    0x38(%rsp),%r13d
  cmp    %r13d,%eax
  cmovle %eax,%r13d
  movsd  0x40(%rsp),%xmm5
  jmp    L832
L151:
  mov    0x140(%rsp),%r14
  mov    0x150(%rsp),%r12
  jmp    L132
L385:
  mov    $0x1,%eax
  movsd  D190(%rip),%xmm4
  mov    0x20(%rsp),%ecx
L382:
  lea    (%rax,%rcx,1),%edi
  lea    (%rcx,%rdi,1),%esi
  movslq %eax,%rdx
  shl    $0x3,%rdx
  lea    (%r15,%rdx,1),%r10
  movsd  (%r10),%xmm3
  mov    0x10(%rsp),%rbx
  add    %rbx,%rdx
  movsd  (%rdx),%xmm2
  movslq %edi,%rax
  shl    $0x3,%rax
  lea    (%r15,%rax,1),%r9
  movslq %esi,%rdi
  shl    $0x3,%rdi
  lea    (%r15,%rdi,1),%r8
  movsd  (%r9),%xmm1
  addsd  (%r8),%xmm1
  add    %rbx,%rax
  add    %rbx,%rdi
  movsd  (%rax),%xmm0
  addsd  (%rdi),%xmm0
  movapd %xmm3,%xmm5
  addsd  %xmm1,%xmm5
  movsd  %xmm5,(%r10)
  movapd %xmm2,%xmm5
  addsd  %xmm0,%xmm5
  movsd  %xmm5,(%rdx)
  mulsd  %xmm4,%xmm1
  addsd  %xmm3,%xmm1
  mulsd  %xmm4,%xmm0
  addsd  %xmm2,%xmm0
  movsd  (%r9),%xmm2
  subsd  (%r8),%xmm2
  movsd  0xa0(%rsp),%xmm7
  mulsd  %xmm7,%xmm2
  movsd  (%rax),%xmm3
  subsd  (%rdi),%xmm3
  mulsd  %xmm7,%xmm3
  movapd %xmm1,%xmm5
  subsd  %xmm3,%xmm5
  movsd  %xmm5,(%r9)
  movapd %xmm0,%xmm5
  addsd  %xmm2,%xmm5
  movsd  %xmm5,(%rax)
  addsd  %xmm3,%xmm1
  movsd  %xmm1,(%r8)
  subsd  %xmm2,%xmm0
  movsd  %xmm0,(%rdi)
  lea    (%rcx,%rsi,1),%eax
  mov    0x80(%rsp),%edi
  cmp    %eax,%edi
  jg     L382
  sub    %edi,%eax
  cmp    %eax,%ecx
  jge    L382
  jmp    L998
L491:
  lea    0x3(%r13),%eax
  test   %r13d,%r13d
  cmovns %r13d,%eax
  sar    $0x2,%eax
  mov    %eax,0x8(%rsp)
  mov    %eax,0x20(%rsp)
  mov    $0x1,%ebx
  movsd  0xb0(%rsp),%xmm11
  movsd  0x50(%rsp),%xmm8
  movsd  0x68(%rsp),%xmm10
  movsd  0xb8(%rsp),%xmm12
  mov    %r14,0x140(%rsp)
  mov    0xd8(%rsp),%r14d
  mov    %r12,0x150(%rsp)
  mov    %eax,%r12d
  jmp    L450
L882:
  movapd %xmm0,%xmm4
  addsd  %xmm2,%xmm4
  subsd  %xmm2,%xmm0
  movapd %xmm1,%xmm2
  subsd  %xmm9,%xmm2
  addsd  %xmm9,%xmm1
  ucomisd D84(%rip),%xmm3
  jp     L1003
  jne    L1003
L206:
  movsd  %xmm4,(%r9)
  movsd  %xmm2,(%rax)
  movsd  %xmm5,(%rsi)
  movsd  %xmm6,(%rdx)
  movsd  %xmm0,(%rcx)
  movsd  %xmm1,(%r10)
  lea    (%r12,%rdi,1),%ebx
  cmp    %ebx,%ebp
  jge    L221
  jmp    L188
L427:
  movsd  0x60(%rsp),%xmm6
  movapd %xmm6,%xmm0
  mulsd  %xmm7,%xmm0
  movsd  0x40(%rsp),%xmm5
  movapd %xmm5,%xmm1
  mulsd  %xmm3,%xmm1
  addsd  %xmm1,%xmm0
  mulsd  %xmm7,%xmm5
  movapd %xmm5,%xmm1
  mulsd  %xmm3,%xmm6
  subsd  %xmm6,%xmm1
  addsd  %xmm1,%xmm3
  subsd  %xmm0,%xmm7
L992:
  movapd %xmm3,%xmm0
  mulsd  %xmm3,%xmm0
  movapd %xmm7,%xmm8
  mulsd  %xmm7,%xmm8
  subsd  %xmm0,%xmm8
  movapd %xmm7,%xmm10
  mulsd  %xmm3,%xmm10
  addsd  %xmm10,%xmm10
  movapd %xmm7,%xmm12
  mulsd  %xmm8,%xmm12
  movapd %xmm3,%xmm0
  mulsd  %xmm10,%xmm0
  subsd  %xmm0,%xmm12
  movapd %xmm3,%xmm11
  mulsd  %xmm8,%xmm11
  movapd %xmm7,%xmm0
  mulsd  %xmm10,%xmm0
  addsd  %xmm0,%xmm11
L221:
  lea    (%rbx,%r12,1),%eax
  lea    (%r12,%rax,1),%edx
  lea    (%r12,%rdx,1),%edi
  movslq %ebx,%rbx
  shl    $0x3,%rbx
  lea    (%r15,%rbx,1),%r8
  movsd  (%r8),%xmm0
  movslq %edx,%rdx
  shl    $0x3,%rdx
  lea    (%r15,%rdx,1),%rsi
  movsd  (%rsi),%xmm1
  movapd %xmm0,%xmm5
  addsd  %xmm1,%xmm5
  subsd  %xmm1,%xmm0
  cltq
  shl    $0x3,%rax
  lea    (%r15,%rax,1),%r9
  movsd  (%r9),%xmm9
  movslq %edi,%r10
  shl    $0x3,%r10
  lea    (%r15,%r10,1),%rcx
  movsd  (%rcx),%xmm2
  movapd %xmm9,%xmm1
  addsd  %xmm2,%xmm1
  subsd  %xmm2,%xmm9
  movapd %xmm5,%xmm2
  addsd  %xmm1,%xmm2
  movsd  %xmm2,(%r8)
  subsd  %xmm1,%xmm5
  mov    0x10(%rsp),%r11
  add    %r11,%rbx
  movsd  (%rbx),%xmm1
  add    %r11,%rdx
  movsd  (%rdx),%xmm2
  movapd %xmm1,%xmm6
  addsd  %xmm2,%xmm6
  subsd  %xmm2,%xmm1
  add    %r11,%rax
  movsd  (%rax),%xmm2
  add    %r11,%r10
  movsd  (%r10),%xmm13
  movapd %xmm2,%xmm4
  addsd  %xmm13,%xmm4
  subsd  %xmm13,%xmm2
  movapd %xmm6,%xmm13
  addsd  %xmm4,%xmm13
  movsd  %xmm13,(%rbx)
  subsd  %xmm4,%xmm6
  test   %r14d,%r14d
  js     L882
  movapd %xmm0,%xmm4
  subsd  %xmm2,%xmm4
  addsd  %xmm2,%xmm0
  movapd %xmm9,%xmm2
  addsd  %xmm1,%xmm2
  subsd  %xmm9,%xmm1
  ucomisd D84(%rip),%xmm3
  jp     L1003
  je     L206
L1003:
  movapd %xmm4,%xmm9
  mulsd  %xmm7,%xmm9
  movapd %xmm2,%xmm13
  mulsd  %xmm3,%xmm13
  subsd  %xmm13,%xmm9
  movsd  %xmm9,(%r9)
  mulsd  %xmm3,%xmm4
  mulsd  %xmm7,%xmm2
  addsd  %xmm2,%xmm4
  movsd  %xmm4,(%rax)
  movapd %xmm8,%xmm2
  mulsd  %xmm5,%xmm2
  movapd %xmm10,%xmm4
  mulsd  %xmm6,%xmm4
  subsd  %xmm4,%xmm2
  movsd  %xmm2,(%rsi)
  mulsd  %xmm10,%xmm5
  mulsd  %xmm8,%xmm6
  addsd  %xmm6,%xmm5
  movsd  %xmm5,(%rdx)
  movapd %xmm0,%xmm2
  mulsd  %xmm12,%xmm2
  movapd %xmm1,%xmm4
  mulsd  %xmm11,%xmm4
  subsd  %xmm4,%xmm2
  movsd  %xmm2,(%rcx)
  mulsd  %xmm11,%xmm0
  mulsd  %xmm12,%xmm1
  addsd  %xmm1,%xmm0
  movsd  %xmm0,(%r10)
  lea    (%r12,%rdi,1),%ebx
  cmp    %ebx,%ebp
  jge    L221
L188:
  mov    %ebp,%eax
  sub    0x18(%rsp),%eax
  sub    %eax,%ebx
  cmp    %ebx,%r13d
  jge    L427
  cmp    %ebx,%r12d
  jle    L983
  lea    0xe8(%rsp),%rdi
  lea    0xe0(%rsp),%rsi
  lea    -0x1(%rbx),%eax
  cltd
  idivl  0x3c(%rsp)
  pxor   %xmm0,%xmm0
  cvtsi2sd %eax,%xmm0
  mulsd  0x30(%rsp),%xmm0
  mulsd  0x28(%rsp),%xmm0
  call   <sincos@plt>
  movsd  0xe0(%rsp),%xmm7
  movsd  0xe8(%rsp),%xmm3
  add    0x38(%rsp),%r13d
  cmp    %r12d,%r13d
  cmovg  %r12d,%r13d
  jmp    L992
L983:
  mov    %r12d,%eax
  sub    0x24(%rsp),%eax
  sub    %eax,%ebx
  cmp    %ebx,0x18(%rsp)
  jl     L61
L450:
  mov    0x38(%rsp),%eax
  cmp    %r12d,%eax
  mov    %eax,%r13d
  cmovg  %r12d,%r13d
  pxor   %xmm3,%xmm3
  mov    D24(%rip),%rax
  movq   %rax,%xmm7
  jmp    L221
L61:
  mov    %edi,0x84(%rsp)
  movsd  %xmm11,0xb0(%rsp)
  movsd  %xmm8,0x50(%rsp)
  movsd  %xmm10,0x68(%rsp)
  movsd  %xmm12,0xb8(%rsp)
  mov    0x140(%rsp),%r14
  mov    0x150(%rsp),%r12
  mov    0x8(%rsp),%edi
  cmp    %edi,0x18(%rsp)
  jne    L132
  mov    %r14,%r13
  mov    0x10(%rsp),%r14
  jmp    L1031
L635:
  movsd  D143(%rip),%xmm8
  movsd  0x88(%rsp),%xmm7
  movapd %xmm7,%xmm0
  mulsd  %xmm7,%xmm0
  subsd  %xmm0,%xmm8
  mulsd  D72(%rip),%xmm7
  movapd %xmm7,%xmm13
  mov    $0x1,%edi
L83:
  mov    0x20(%rsp),%esi
  lea    (%rdi,%rsi,1),%edx
  lea    (%rsi,%rdx,1),%eax
  lea    (%rsi,%rax,1),%r9d
  mov    %r9d,0x84(%rsp)
  add    %r9d,%esi
  movslq %edx,%rcx
  shl    $0x3,%rcx
  lea    (%r15,%rcx,1),%rbx
  movsd  (%rbx),%xmm2
  mov    %esi,0x8(%rsp)
  movslq %esi,%r8
  shl    $0x3,%r8
  lea    (%r15,%r8,1),%r11
  movsd  (%r11),%xmm0
  movapd %xmm2,%xmm1
  addsd  %xmm0,%xmm1
  subsd  %xmm0,%xmm2
  mov    0x10(%rsp),%rdx
  add    %rdx,%rcx
  movsd  (%rcx),%xmm3
  add    %rdx,%r8
  movsd  (%r8),%xmm4
  movapd %xmm3,%xmm0
  addsd  %xmm4,%xmm0
  subsd  %xmm4,%xmm3
  movslq %eax,%rdx
  shl    $0x3,%rdx
  lea    (%r15,%rdx,1),%r10
  movsd  (%r10),%xmm7
  movslq %r9d,%rsi
  shl    $0x3,%rsi
  lea    (%r15,%rsi,1),%r9
  movsd  (%r9),%xmm4
  movapd %xmm7,%xmm10
  addsd  %xmm4,%xmm10
  subsd  %xmm4,%xmm7
  mov    0x10(%rsp),%rax
  add    %rax,%rdx
  movsd  (%rdx),%xmm6
  add    %rax,%rsi
  movsd  (%rsi),%xmm4
  movapd %xmm6,%xmm9
  addsd  %xmm4,%xmm9
  subsd  %xmm4,%xmm6
  movslq %edi,%rax
  shl    $0x3,%rax
  lea    (%r15,%rax,1),%rdi
  movsd  (%rdi),%xmm14
  add    0x10(%rsp),%rax
  movsd  (%rax),%xmm12
  movapd %xmm1,%xmm4
  addsd  %xmm14,%xmm4
  addsd  %xmm10,%xmm4
  movsd  %xmm4,(%rdi)
  movapd %xmm0,%xmm4
  addsd  %xmm12,%xmm4
  addsd  %xmm9,%xmm4
  movsd  %xmm4,(%rax)
  movsd  D267(%rip),%xmm4
  mulsd  %xmm1,%xmm4
  movapd %xmm8,%xmm5
  mulsd  %xmm10,%xmm5
  addsd  %xmm4,%xmm5
  addsd  %xmm14,%xmm5
  movsd  D267(%rip),%xmm4
  mulsd  %xmm0,%xmm4
  movapd %xmm8,%xmm11
  mulsd  %xmm9,%xmm11
  addsd  %xmm11,%xmm4
  addsd  %xmm12,%xmm4
  movsd  0x88(%rsp),%xmm15
  mulsd  %xmm2,%xmm15
  movapd %xmm13,%xmm11
  mulsd  %xmm7,%xmm11
  addsd  %xmm11,%xmm15
  movsd  %xmm15,0x48(%rsp)
  movsd  0x88(%rsp),%xmm15
  mulsd  %xmm3,%xmm15
  movapd %xmm13,%xmm11
  mulsd  %xmm6,%xmm11
  addsd  %xmm15,%xmm11
  movapd %xmm5,%xmm15
  subsd  %xmm11,%xmm15
  movsd  %xmm15,(%rbx)
  addsd  %xmm11,%xmm5
  movsd  %xmm5,(%r11)
  movsd  0x48(%rsp),%xmm11
  movapd %xmm11,%xmm5
  addsd  %xmm4,%xmm5
  movsd  %xmm5,(%rcx)
  subsd  %xmm11,%xmm4
  movsd  %xmm4,(%r8)
  mulsd  %xmm8,%xmm1
  mulsd  D267(%rip),%xmm10
  addsd  %xmm10,%xmm1
  addsd  %xmm14,%xmm1
  mulsd  %xmm8,%xmm0
  mulsd  D267(%rip),%xmm9
  addsd  %xmm9,%xmm0
  addsd  %xmm12,%xmm0
  mulsd  %xmm13,%xmm2
  movsd  0x88(%rsp),%xmm5
  mulsd  %xmm5,%xmm7
  subsd  %xmm7,%xmm2
  mulsd  %xmm13,%xmm3
  mulsd  %xmm5,%xmm6
  subsd  %xmm6,%xmm3
  movapd %xmm1,%xmm4
  subsd  %xmm3,%xmm4
  movsd  %xmm4,(%r10)
  addsd  %xmm3,%xmm1
  movsd  %xmm1,(%r9)
  movapd %xmm0,%xmm1
  addsd  %xmm2,%xmm1
  movsd  %xmm1,(%rdx)
  subsd  %xmm2,%xmm0
  movsd  %xmm0,(%rsi)
  mov    0x8(%rsp),%edi
  mov    0x20(%rsp),%esi
  add    %esi,%edi
  mov    0x80(%rsp),%eax
  cmp    %edi,%eax
  jg     L83
  sub    %eax,%edi
  cmp    %edi,%esi
  jge    L83
  jmp    L998
L100:
  mov    0x58(%rsp),%ebx
  jmp    L649
L868:
  mov    0x68(%rsp),%eax
L310:
  mov    0x98(%rsp),%esi
  add    %eax,%esi
  mov    %esi,0x68(%rsp)
  movslq %eax,%rcx
  mov    %rcx,0x70(%rsp)
  lea    0x0(,%rcx,8),%rdx
  lea    (%r15,%rdx,1),%r11
  movsd  (%r11),%xmm6
  lea    0x0(%r13,%rdx,1),%rbp
  movsd  0x0(%rbp),%xmm7
  add    0x20(%rsp),%eax
  cltq
  movslq %esi,%rsi
  mov    %rsi,%rdx
  mov    %rsi,0x78(%rsp)
  lea    0x18(%r14),%rsi
  lea    0x18(%r12),%rcx
  movapd %xmm7,%xmm1
  movapd %xmm6,%xmm2
L255:
  movsd  (%r15,%rax,8),%xmm0
  addsd  (%r9,%rdx,8),%xmm0
  movsd  %xmm0,-0x8(%rsi)
  addsd  %xmm0,%xmm2
  movsd  0x0(%r13,%rax,8),%xmm0
  addsd  (%r10,%rdx,8),%xmm0
  movsd  %xmm0,-0x8(%rcx)
  addsd  %xmm0,%xmm1
  movsd  (%r15,%rax,8),%xmm0
  subsd  (%r9,%rdx,8),%xmm0
  movsd  %xmm0,(%rsi)
  movsd  0x0(%r13,%rax,8),%xmm0
  subsd  (%r10,%rdx,8),%xmm0
  movsd  %xmm0,(%rcx)
  add    0x8(%rsp),%rax
  add    0x50(%rsp),%rdx
  add    $0x10,%rsi
  add    $0x10,%rcx
  cmp    %eax,%edx
  jg     L255
  movsd  %xmm2,(%r11)
  movsd  %xmm1,0x0(%rbp)
  mov    0x70(%rsp),%rbp
  mov    0x8(%rsp),%rax
  add    %rax,%rbp
  shl    $0x3,%rbp
  mov    0x78(%rsp),%r11
  sub    %rax,%r11
  shl    $0x3,%r11
  mov    $0x1,%esi
  mov    %r9,0x70(%rsp)
  mov    0x9c(%rsp),%r9d
L771:
  movapd %xmm7,%xmm1
  movapd %xmm6,%xmm2
  mov    %esi,%edx
  mov    $0x1,%eax
  pxor   %xmm3,%xmm3
  movapd %xmm3,%xmm4
L1055:
  movslq %edx,%rcx
  movsd  (%rdi,%rcx,8),%xmm0
  movapd %xmm0,%xmm5
  mulsd  0x8(%r14,%rax,8),%xmm5
  addsd  %xmm5,%xmm2
  mulsd  0x8(%r12,%rax,8),%xmm0
  addsd  %xmm0,%xmm1
  movsd  (%r8,%rcx,8),%xmm0
  movapd %xmm0,%xmm5
  mulsd  0x10(%r14,%rax,8),%xmm5
  addsd  %xmm5,%xmm4
  mulsd  0x10(%r12,%rax,8),%xmm0
  addsd  %xmm0,%xmm3
  add    %esi,%edx
  mov    %edx,%ecx
  sub    %ebx,%ecx
  cmp    %ebx,%edx
  cmovg  %ecx,%edx
  add    $0x2,%rax
  cmp    %eax,%ebx
  jg     L1055
  movapd %xmm2,%xmm0
  subsd  %xmm3,%xmm0
  movsd  %xmm0,(%r15,%rbp,1)
  movapd %xmm1,%xmm0
  addsd  %xmm4,%xmm0
  movsd  %xmm0,0x0(%r13,%rbp,1)
  addsd  %xmm3,%xmm2
  movsd  %xmm2,(%r15,%r11,1)
  subsd  %xmm4,%xmm1
  movsd  %xmm1,0x0(%r13,%r11,1)
  add    $0x1,%esi
  add    0x48(%rsp),%rbp
  add    0x58(%rsp),%r11
  mov    %r9d,%eax
  sub    %esi,%eax
  cmp    %eax,%esi
  jl     L771
  mov    0x70(%rsp),%r9
  mov    0x80(%rsp),%esi
  mov    0x68(%rsp),%eax
  cmp    %eax,%esi
  jge    L868
  sub    %esi,%eax
  cmp    %eax,0x20(%rsp)
  jge    L310
  mov    0x98(%rsp),%r13d
  mov    0xdc(%rsp),%ebp
  mov    %ebx,0x58(%rsp)
L998:
  mov    0xa8(%rsp),%eax
  cmp    %eax,0x130(%rsp)
  je     L773
  mov    0x18(%rsp),%eax
  lea    0x1(%rax),%ebx
  movsd  D24(%rip),%xmm0
  subsd  0x60(%rsp),%xmm0
  movsd  %xmm0,0x48(%rsp)
  mov    0x38(%rsp),%esi
  mov    0x20(%rsp),%eax
  cmp    %eax,%esi
  mov    %eax,%edi
  cmovle %esi,%edi
  mov    %edi,0x50(%rsp)
  mov    %ebp,%edi
  sub    %eax,%edi
  mov    %edi,0x8(%rsp)
  mov    %r14,0x140(%rsp)
  mov    %r12,0x150(%rsp)
  mov    0x10(%rsp),%r12
  jmp    L277
L118:
  movsd  0x60(%rsp),%xmm7
  movapd %xmm7,%xmm0
  mulsd  %xmm6,%xmm0
  movsd  0x40(%rsp),%xmm4
  movapd %xmm4,%xmm1
  mulsd  %xmm5,%xmm1
  addsd  %xmm1,%xmm0
  mulsd  %xmm6,%xmm4
  movapd %xmm4,%xmm1
  mulsd  %xmm5,%xmm7
  subsd  %xmm7,%xmm1
  addsd  %xmm1,%xmm5
  subsd  %xmm0,%xmm6
L942:
  add    0x20(%rsp),%ebx
  movapd %xmm5,%xmm1
  movapd %xmm6,%xmm0
L49:
  movslq %ebx,%rax
  shl    $0x3,%rax
  lea    (%r15,%rax,1),%rdx
  movsd  (%rdx),%xmm2
  add    %r12,%rax
  movapd %xmm0,%xmm3
  mulsd  %xmm2,%xmm3
  movapd %xmm1,%xmm4
  mulsd  (%rax),%xmm4
  subsd  %xmm4,%xmm3
  movsd  %xmm3,(%rdx)
  movapd %xmm0,%xmm3
  mulsd  (%rax),%xmm3
  mulsd  %xmm1,%xmm2
  addsd  %xmm3,%xmm2
  movsd  %xmm2,(%rax)
  add    %r13d,%ebx
  cmp    %ebx,%ebp
  jge    L49
  movapd %xmm5,%xmm2
  mulsd  %xmm1,%xmm2
  mulsd  %xmm6,%xmm1
  movapd %xmm0,%xmm3
  mulsd  %xmm5,%xmm3
  addsd  %xmm3,%xmm1
  mulsd  %xmm6,%xmm0
  subsd  %xmm2,%xmm0
  sub    0x8(%rsp),%ebx
  cmp    %ebx,%r13d
  jge    L49
  mov    %r13d,%eax
  sub    0x18(%rsp),%eax
  sub    %eax,%ebx
  cmp    %ebx,%r14d
  jge    L118
  cmp    %ebx,0x20(%rsp)
  jle    L643
  lea    0xe8(%rsp),%rdi
  lea    0xe0(%rsp),%rsi
  lea    -0x1(%rbx),%eax
  cltd
  idivl  0x3c(%rsp)
  pxor   %xmm0,%xmm0
  cvtsi2sd %eax,%xmm0
  mulsd  0x30(%rsp),%xmm0
  mulsd  0x28(%rsp),%xmm0
  call   <sincos@plt>
  movsd  0xe0(%rsp),%xmm6
  movsd  0xe8(%rsp),%xmm5
  add    0x38(%rsp),%r14d
  mov    0x20(%rsp),%eax
  cmp    %eax,%r14d
  cmovg  %eax,%r14d
  jmp    L942
L643:
  mov    0x20(%rsp),%eax
  sub    0x18(%rsp),%eax
  sub    0x24(%rsp),%eax
  sub    %eax,%ebx
  cmp    %ebx,0x90(%rsp)
  jl     L617
L277:
  movsd  0x48(%rsp),%xmm6
  mov    0x50(%rsp),%r14d
  movsd  0x40(%rsp),%xmm5
  jmp    L942
L617:
  movsd  %xmm0,0x50(%rsp)
  movsd  %xmm1,0x68(%rsp)
  mov    0x140(%rsp),%r14
  mov    0x150(%rsp),%r12
L132:
  addq   $0x1,0xa8(%rsp)
  mov    0x20(%rsp),%r13d
L441:
  pxor   %xmm0,%xmm0
  cvtsi2sd %r13d,%xmm0
  movsd  0xc8(%rsp),%xmm7
  divsd  %xmm0,%xmm7
  movsd  %xmm7,0x30(%rsp)
  movapd %xmm7,%xmm0
  mulsd  D182(%rip),%xmm0
  mulsd  0x28(%rsp),%xmm0
  call   <sin@plt>
  movapd %xmm0,%xmm1
  addsd  %xmm0,%xmm1
  mulsd  %xmm0,%xmm1
  movsd  %xmm1,0x60(%rsp)
  movsd  0x28(%rsp),%xmm6
  mulsd  0x30(%rsp),%xmm6
  movapd %xmm6,%xmm0
  call   <sin@plt>
  movsd  %xmm0,0x40(%rsp)
  mov    0x168(%rsp),%rax
  mov    0xa8(%rsp),%rdi
  mov    (%rax,%rdi,4),%ebx
  cmp    $0x2,%ebx
  je     L809
  cmp    $0x4,%ebx
  je     L491
  mov    %r13d,%eax
  cltd
  idiv   %ebx
  mov    %eax,0x8(%rsp)
  mov    %eax,0x20(%rsp)
  cmp    $0x3,%ebx
  je     L385
  cmp    $0x5,%ebx
  je     L635
  cmp    0x58(%rsp),%ebx
  je     L100
  lea    0xe8(%rsp),%rdi
  lea    0xe0(%rsp),%rsi
  pxor   %xmm0,%xmm0
  cvtsi2sd %ebx,%xmm0
  mulsd  D1(%rip),%xmm0
  movsd  0x28(%rsp),%xmm1
  divsd  %xmm0,%xmm1
  movapd %xmm1,%xmm0
  call   <sincos@plt>
  movsd  0xe0(%rsp),%xmm1
  movsd  0xe8(%rsp),%xmm2
  movslq %ebx,%rax
  mov    0x148(%rsp),%rdi
  mov    D24(%rip),%rsi
  mov    %rsi,(%rdi,%rax,8)
  mov    0x158(%rsp),%rdi
  movq   $0x0,(%rdi,%rax,8)
  cmp    $0x1,%ebx
  jle    L649
  mov    $0x1,%edx
  movq   D48(%rip),%xmm3
  mov    0x148(%rsp),%rcx
  mov    %rdi,%rsi
L600:
  movapd %xmm1,%xmm0
  mulsd  (%rcx,%rax,8),%xmm0
  movapd %xmm2,%xmm4
  mulsd  (%rsi,%rax,8),%xmm4
  addsd  %xmm4,%xmm0
  movsd  %xmm0,(%rcx,%rdx,8)
  movapd %xmm2,%xmm0
  mulsd  (%rcx,%rax,8),%xmm0
  movapd %xmm1,%xmm4
  mulsd  (%rsi,%rax,8),%xmm4
  subsd  %xmm4,%xmm0
  movsd  %xmm0,(%rsi,%rdx,8)
  movsd  (%rcx,%rdx,8),%xmm0
  movsd  %xmm0,-0x8(%rcx,%rax,8)
  movsd  (%rsi,%rdx,8),%xmm0
  xorpd  %xmm3,%xmm0
  movsd  %xmm0,-0x8(%rsi,%rax,8)
  add    $0x1,%rdx
  sub    $0x1,%rax
  cmp    %edx,%eax
  jg     L600
L649:
  mov    0x8(%rsp),%esi
  movslq %esi,%rdi
  mov    %rdi,0x8(%rsp)
  mov    %rdi,%rax
  neg    %rax
  shl    $0x3,%rax
  lea    (%r15,%rax,1),%r9
  mov    0x10(%rsp),%rcx
  lea    (%rcx,%rax,1),%r10
  lea    0x0(,%rdi,8),%rax
  mov    %rax,0x48(%rsp)
  mov    %esi,%eax
  neg    %eax
  cltq
  mov    %rax,0x50(%rsp)
  shl    $0x3,%rax
  mov    %rax,0x58(%rsp)
  mov    $0x1,%eax
  lea    0x1(%rbx),%r11d
  mov    %r13d,0x98(%rsp)
  mov    %ebp,0xdc(%rsp)
  mov    %rcx,%r13
  mov    0x148(%rsp),%rdi
  mov    0x158(%rsp),%r8
  mov    %r11d,0x9c(%rsp)
  jmp    L310
L271:
  mov    %r14,%r13
  mov    0x10(%rsp),%r14
  jmp    L1031
L773:
  mov    %r14,%r13
  mov    0x10(%rsp),%r14
L1031:
  mov    0x160(%rsp),%rax
  mov    0x94(%rsp),%edi
  mov    %edi,0x4(%rax)
  mov    0x138(%rsp),%rax
  mov    (%rax),%eax
  mov    0x18(%rsp),%ecx
  mov    %ecx,0x20(%rsp)
  test   %eax,%eax
  je     L894
  add    %eax,%eax
  lea    0x1(%rax),%edi
  cmp    %edi,0x130(%rsp)
  cmovl  %eax,%edi
  movslq %edi,%rsi
  mov    0x160(%rsp),%rax
  mov    %ecx,0x4(%rax,%rsi,4)
  cmp    $0x1,%edi
  jle    L839
  mov    $0x1,%ecx
  mov    %rax,%r8
  mov    0x168(%rsp),%r9
L311:
  mov    (%r8,%rcx,4),%eax
  cltd
  idivl  (%r9,%rcx,4)
  mov    %eax,0x4(%r8,%rcx,4)
  mov    0x4(%r8,%rsi,4),%eax
  imul   (%r9,%rcx,4),%eax
  mov    %eax,(%r8,%rsi,4)
  add    $0x1,%rcx
  sub    $0x1,%rsi
  cmp    %esi,%ecx
  jl     L311
  lea    -0x1(%rdi),%edx
  lea    -0x2(%rdi),%eax
  shr    %eax
  mov    %edx,%edi
  sub    %eax,%edi
L839:
  movslq %edi,%rax
  mov    0x160(%rsp),%rdi
  mov    0x4(%rdi,%rax,4),%eax
  mov    %eax,0x20(%rsp)
  mov    0x8(%rdi),%r9d
  mov    0x18(%rsp),%esi
  lea    0x1(%rsi),%ecx
  lea    0x1(%r9),%eax
  mov    0xd0(%rsp),%ebx
  cmp    %ebx,0xd4(%rsp)
  je     L238
  mov    0x24(%rsp),%r8d
  movslq %r8d,%rdi
  mov    0x94(%rsp),%edx
  mov    %edx,%r10d
  sub    %esi,%r10d
  mov    %ebp,%r11d
  sub    %r9d,%r11d
  mov    %ebp,%ebx
  sub    %esi,%ebx
  mov    %r13,0x140(%rsp)
  mov    %r12,0x150(%rsp)
  mov    %edx,%r12d
L638:
  mov    0x18(%rsp),%esi
  lea    (%rcx,%rsi,1),%r13d
  cltq
  movslq %ecx,%rcx
L753:
  movsd  (%r15,%rcx,8),%xmm0
  movsd  (%r15,%rax,8),%xmm1
  movsd  %xmm1,(%r15,%rcx,8)
  movsd  %xmm0,(%r15,%rax,8)
  movsd  (%r14,%rcx,8),%xmm0
  movsd  (%r14,%rax,8),%xmm1
  movsd  %xmm1,(%r14,%rcx,8)
  movsd  %xmm0,(%r14,%rax,8)
  lea    (%r8,%rcx,1),%esi
  lea    (%r8,%rax,1),%edx
  add    %rdi,%rax
  add    %rdi,%rcx
  cmp    %ecx,%r13d
  jg     L753
  lea    (%r10,%rsi,1),%ecx
  lea    (%r10,%rdx,1),%eax
  cmp    %ecx,%ebp
  jg     L638
  sub    %r11d,%eax
  sub    %ebx,%ecx
  cmp    %eax,%r12d
  jg     L638
L508:
  mov    0x160(%rsp),%rsi
  lea    0x4(%rsi),%rdx
L167:
  sub    (%rdx),%eax
  add    0x8(%rdx),%eax
  add    $0x4,%rdx
  cmp    %eax,(%rdx)
  jl     L167
L432:
  cmp    %ecx,%eax
  jg     L638
  add    0x18(%rsp),%ecx
  add    %r9d,%eax
  cmp    %eax,%r12d
  jg     L432
  cmp    %ecx,%r12d
  jg     L508
  mov    0x140(%rsp),%r13
  mov    0x150(%rsp),%r12
  mov    0x20(%rsp),%eax
  mov    %eax,0x84(%rsp)
L894:
  mov    0x138(%rsp),%rax
  mov    (%rax),%edx
  lea    0x1(%rdx,%rdx,1),%eax
  cmp    0x130(%rsp),%eax
  jge    L249
  movslq %edx,%rax
  mov    0x160(%rsp),%rdi
  mov    0x4(%rdi,%rax,4),%eax
  mov    %eax,0x30(%rsp)
  mov    0x130(%rsp),%eax
  sub    %edx,%eax
  cltq
  mov    0x168(%rsp),%rdi
  movl   $0x1,0x4(%rdi,%rax,4)
  mov    %rdi,%rcx
L189:
  mov    (%rcx,%rax,4),%edx
  imul   0x4(%rcx,%rax,4),%edx
  mov    %edx,(%rcx,%rax,4)
  mov    0x138(%rsp),%rdi
  mov    (%rdi),%edx
  sub    $0x1,%rax
  cmp    %eax,%edx
  jne    L189
  lea    0x1(%rdx),%eax
  mov    %eax,(%rdi)
  cltq
  mov    0x168(%rsp),%rdi
  mov    (%rdi,%rax,4),%edi
  lea    -0x1(%rdi),%ecx
  lea    0x2(%rdx),%r8d
  mov    0x168(%rsp),%rsi
  mov    0x4(%rsi,%rax,4),%edx
  test   %ecx,%ecx
  jle    L348
  mov    0x160(%rsp),%rax
  lea    0x4(%rax),%rsi
  lea    -0x2(%rdi),%eax
  mov    0x160(%rsp),%rbx
  lea    0x8(%rbx,%rax,4),%r9
  mov    $0x0,%eax
  mov    0x138(%rsp),%r11
  mov    0x168(%rsp),%r10
  jmp    L710
L238:
  mov    0x94(%rsp),%edi
L364:
  movslq %ecx,%rdx
  shl    $0x3,%rdx
  lea    (%r15,%rdx,1),%r10
  movsd  (%r10),%xmm0
  movslq %eax,%rsi
  shl    $0x3,%rsi
  lea    (%r15,%rsi,1),%r8
  movsd  (%r8),%xmm1
  movsd  %xmm1,(%r10)
  movsd  %xmm0,(%r8)
  add    %r14,%rdx
  movsd  (%rdx),%xmm0
  add    %r14,%rsi
  movsd  (%rsi),%xmm1
  movsd  %xmm1,(%rdx)
  movsd  %xmm0,(%rsi)
  add    0x24(%rsp),%ecx
  add    %r9d,%eax
  cmp    %eax,%edi
  jg     L364
L926:
  mov    0x160(%rsp),%rsi
  lea    0x4(%rsi),%rdx
L92:
  sub    (%rdx),%eax
  add    0x8(%rdx),%eax
  add    $0x4,%rdx
  cmp    %eax,(%rdx)
  jl     L92
L412:
  cmp    %ecx,%eax
  jg     L364
  add    0x24(%rsp),%ecx
  add    %r9d,%eax
  cmp    %eax,%edi
  jg     L412
  cmp    %ecx,%edi
  jg     L926
  mov    0x20(%rsp),%eax
  mov    %eax,0x84(%rsp)
  jmp    L894
L791:
  sub    %edi,%eax
  mov    %edx,%edi
  mov    0x4(%r8),%edx
  add    %edx,%eax
  add    $0x4,%r8
  cmp    %edi,%eax
  jge    L791
L803:
  mov    %eax,(%rsi)
  mov    (%r11),%edx
  movslq %edx,%rbx
  mov    (%r10,%rbx,4),%edi
  lea    0x1(%rdx),%r8d
  mov    0x4(%r10,%rbx,4),%edx
  add    $0x4,%rsi
  cmp    %r9,%rsi
  je     L348
L710:
  add    %edx,%eax
  movslq %r8d,%r8
  lea    (%r10,%r8,4),%r8
  cmp    %edi,%eax
  jge    L791
  jmp    L803
L348:
  mov    $0x0,%edx
  mov    0x160(%rsp),%r8
  jmp    L101
L1008:
  cltq
  lea    (%r8,%rax,4),%rdx
  mov    (%rdx),%eax
  mov    %eax,%edi
  neg    %edi
  mov    %edi,(%rdx)
  cmp    %eax,%esi
  jne    L1008
  mov    %eax,0x84(%rsp)
  mov    %eax,%esi
L665:
  mov    %esi,%edx
L101:
  lea    0x1(%rdx),%esi
  movslq %esi,%rax
  lea    (%r8,%rax,4),%rdi
  mov    (%rdi),%eax
  test   %eax,%eax
  js     L665
  cmp    %eax,%esi
  jne    L1008
  not    %edx
  mov    %edx,(%rdi)
  cmp    %esi,%ecx
  jne    L665
  mov    0xc4(%rsp),%eax
  mov    0x24(%rsp),%edi
  imul   %edi,%eax
  mov    %eax,0x28(%rsp)
  mov    %ebp,%eax
  sub    0x30(%rsp),%eax
  mov    %eax,%edx
  sub    %edi,%edx
  mov    %eax,0x3c(%rsp)
  test   %eax,%eax
  js     L249
  sub    %eax,%edx
  lea    0x1(%rdx),%eax
  mov    %eax,0x40(%rsp)
  neg    %edi
  movslq %edi,%rcx
  mov    0x160(%rsp),%r11
  jmp    L381
L218:
  mov    %r9d,%edi
L22:
  mov    0x8(%rsp),%eax
  lea    (%rdi,%rax,1),%r8d
  movslq %r10d,%rax
  mov    (%r11,%rax,4),%ebp
  add    %ebp,%r10d
  imul   %r12d,%r10d
  mov    %r8d,%esi
  sub    %r10d,%esi
  mov    %ebp,%r10d
  neg    %r10d
  movslq %r8d,%rax
  movslq %esi,%rdx
  add    0x24(%rsp),%r8d
  sub    %r8d,%esi
L421:
  mov    %edx,%r8d
  movsd  (%r15,%rdx,8),%xmm0
  movsd  %xmm0,(%r15,%rax,8)
  movsd  (%r14,%rdx,8),%xmm0
  movsd  %xmm0,(%r14,%rax,8)
  lea    (%rsi,%rax,1),%r9d
  add    %rcx,%rax
  add    %rcx,%rdx
  cmp    %eax,%edi
  jne    L421
  cmp    %ebx,%r10d
  jne    L218
  mov    0x18(%rsp),%r12
  mov    0x8(%rsp),%eax
  add    %r9d,%eax
  cltq
  mov    $0x8,%edx
  mov    0x24(%rsp),%edi
L305:
  movsd  0x0(%r13,%rdx,1),%xmm0
  movsd  %xmm0,(%r15,%rax,8)
  movsd  (%r12,%rdx,1),%xmm0
  movsd  %xmm0,(%r14,%rax,8)
  add    %rcx,%rax
  add    $0x8,%rdx
  lea    (%rdi,%rax,1),%esi
  cmp    %esi,%r8d
  jne    L305
  cmpl   $0x0,0x10(%rsp)
  je     L425
L687:
  mov    0x10(%rsp),%eax
  mov    0x28(%rsp),%esi
  cmp    %esi,%eax
  cmovle %eax,%esi
  mov    %esi,0x8(%rsp)
  sub    %esi,%eax
  mov    %eax,0x10(%rsp)
  mov    (%r11,%rbx,4),%r10d
  mov    0x20(%rsp),%edi
  imul   %r10d,%edi
  add    0x38(%rsp),%edi
  add    %eax,%edi
  lea    (%rdi,%rsi,1),%eax
  cltq
  mov    $0x8,%edx
L429:
  movsd  (%r15,%rax,8),%xmm0
  movsd  %xmm0,0x0(%r13,%rdx,1)
  movsd  (%r14,%rax,8),%xmm0
  movsd  %xmm0,(%r12,%rdx,1)
  add    %rcx,%rax
  add    $0x8,%rdx
  cmp    %eax,%edi
  jne    L429
  mov    %r12,0x18(%rsp)
  mov    0x20(%rsp),%r12d
  jmp    L22
L425:
  cmp    $0xffffffff,%ebp
  je     L176
L860:
  sub    $0x1,%rbx
L907:
  cmpl   $0x0,(%r11,%rbx,4)
  js     L860
  mov    0x20(%rsp),%eax
  mov    %eax,0x10(%rsp)
  jmp    L687
L176:
  mov    0x30(%rsp),%edi
  sub    %edi,0x3c(%rsp)
  js     L249
L381:
  mov    0x40(%rsp),%eax
  add    0x3c(%rsp),%eax
  mov    %eax,0x38(%rsp)
  movslq 0x84(%rsp),%rbp
  mov    %rbp,%rbx
  jmp    L907
L249:
  add    $0xf8,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
```

tool_calls: name: extract_symbolic_data
arguments: data_label: D24
type_guessed: f64
name: extract_symbolic_data
arguments: data_label: D275
type_guessed: f64
name: extract_symbolic_data
arguments: data_label: D140
type_guessed: f64
name: extract_symbolic_data
arguments: data_label: D258
type_guessed: f64
name: extract_symbolic_data
arguments: data_label: D8
type_guessed: f64
name: extract_symbolic_data
arguments: data_label: D90
type_guessed: byte[8]
name: extract_symbolic_data
arguments: data_label: D174
type_guessed: byte[8]
name: extract_symbolic_data
arguments: data_label: D274
type_guessed: byte[8]
name: extract_symbolic_data
arguments: data_label: D48
type_guessed: f32[4]
name: extract_symbolic_data
arguments: data_label: D190
type_guessed: f32[2]
name: extract_symbolic_data
arguments: data_label: D84
type_guessed: f32[2]
name: extract_symbolic_data
arguments: data_label: D143
type_guessed: byte[8]
name: extract_symbolic_data
arguments: data_label: D72
type_guessed: byte[8]
name: extract_symbolic_data
arguments: data_label: D267
type_guessed: f64
name: extract_symbolic_data
arguments: data_label: D182
type_guessed: f64
name: extract_symbolic_data
arguments: data_label: D1
type_guessed: f32[2]

tool: D24: 1

tool: D275: 0.8660254037844387

tool: D140: 0.9510565162951535

tool: D258: 0.7853981633974483

tool: D8: 8

tool: {"D90": [0xab,0x4c,0x58,0xe8,0x7a,0xb6,0xeb,0xbf]}

tool: {"D174": [0xff,0x54,0x44,0x13,0x0e,0x6f,0xee,0xbf]}

tool: {"D274": [0x18,0x2d,0x44,0x54,0xfb,0x21,0xe9,0xbf]}

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

tool: {"D190": [0.0,-1.75]}

tool: {"D84": [0.0,0.0]}

tool: {"D143": [0x62,0x2d,0xa0,0x91,0x21,0x72,0xb8,0x3f]}

tool: {"D72": [0x50,0xe9,0x2f,0x37,0xef,0xc6,0xe3,0x3f]}

tool: D267: 0.30901699437494745

tool: D182: 0.5

tool: {"D1": [0.0,1.5]}

assistant: ```c
void fftmx(double *a, double *b, int ntot, int n, int nspan, int isn, int m, int *kt, double *at, double *ck, double *bt, double *sk, int *np, int nfac[]) {
  int i, inc, j, jc, jf, jj, k, k1, k2, k3, k4, kk, klim, ks, kspan, kspnn, lim, maxf, mm, nn, nt;
  double aa, aj, ajm, ajp, ak, akm, akp, bb, bj, bjm, bjp, bk, bkm, bkp, c1, c2, c3, c72, cd, dr, rad, sd, s1, s2, s3, s72, s120;
  double xx;
  c2 = c3 = s2 = s3 = k3 = 0;
  inc = abs(isn);
  nt = inc * ntot;
  ks = inc * nspan;
  rad = 0.785398163397448278900;
  c72 = 0.309016994374947451270;
  s72 = 0.951056516295153531190;
  s120 = 0.866025403784438707600;
  if (isn < 0) {
    s72 = -s72;
    s120 = -s120;
    rad = -rad;
  } else {
    ak = 1.0 / (double)n;
    for (j = 1; j <= nt; j += inc) {
      a[j] *= (double)ak;
      b[j] *= (double)ak;
    }
  }
  kspan = ks;
  nn = nt - inc;
  jc = ks / n;
  lim = 32;
  klim = lim * jc;
  i = 0;
  jf = 0;
  maxf = m - (*kt);
  maxf = nfac[maxf];
  if ((*kt) > 0 && maxf < nfac[*kt])
    maxf = nfac[*kt];
lbl40:
  dr = (8.0 * (double)jc) / ((double)kspan);
  xx = sin((double)0.5 * dr * rad);
  cd = 2.0 * xx * xx;
  sd = sin(dr * rad);
  kk = 1;
  if (nfac[++i] != 2)
    goto lbl110;
  kspan /= 2;
  k1 = kspan + 2;
  do {
    do {
      k2 = kk + kspan;
      ak = a[k2];
      bk = b[k2];
      a[k2] = (a[kk]) - (double)ak;
      b[k2] = (b[kk]) - (double)bk;
      a[kk] = (a[kk]) + (double)ak;
      b[kk] = (b[kk]) + (double)bk;
      kk = k2 + kspan;
    } while (kk <= nn);
    kk -= nn;
  } while (kk <= jc);
  if (kk > kspan)
    goto lbl350;
lbl60:
  c1 = 1.0 - cd;
  s1 = sd;
  mm = (k1 / 2 < klim ? k1 / 2 : klim);
  goto lbl80;
lbl70:
  ak = c1 - ((cd * c1) + (sd * s1));
  s1 = ((sd * c1) - (cd * s1)) + s1;
  c1 = ak;
lbl80:
  do {
    do {
      k2 = kk + kspan;
      ak = a[kk] - a[k2];
      bk = b[kk] - b[k2];
      a[kk] = a[kk] + a[k2];
      b[kk] = b[kk] + b[k2];
      a[k2] = (double)((c1 * ak) - (s1 * bk));
      b[k2] = (double)((s1 * ak) + (c1 * bk));
      kk = k2 + kspan;
    } while (kk < nt);
    k2 = kk - nt;
    c1 = -c1;
    kk = k1 - k2;
  } while (kk > k2);
  kk += jc;
  if (kk <= mm)
    goto lbl70;
  if (kk < k2)
    goto lbl90;
  k1 += (inc + inc);
  kk = ((k1 - kspan) / 2) + jc;
  if (kk <= (jc + jc))
    goto lbl60;
  goto lbl40;
lbl90:
  s1 = ((double)((kk - 1) / jc)) * dr * rad;
  c1 = cos(s1);
  s1 = sin(s1);
  mm = (k1 / 2 < mm + klim ? k1 / 2 : mm + klim);
  goto lbl80;
lbl100:
  k1 = kk + kspan;
  k2 = k1 + kspan;
  ak = a[kk];
  bk = b[kk];
  aj = a[k1] + a[k2];
  bj = b[k1] + b[k2];
  a[kk] = (double)(ak + aj);
  b[kk] = (double)(bk + bj);
  ak += (-0.5 * aj);
  bk += (-0.5 * bj);
  aj = (a[k1] - a[k2]) * s120;
  bj = (b[k1] - b[k2]) * s120;
  a[k1] = (double)(ak - bj);
  b[k1] = (double)(bk + aj);
  a[k2] = (double)(ak + bj);
  b[k2] = (double)(bk - aj);
  kk = k2 + kspan;
  if (kk < nn)
    goto lbl100;
  kk -= nn;
  if (kk <= kspan)
    goto lbl100;
  goto lbl290;
lbl110:
  if (nfac[i] != 4)
    goto lbl230;
  kspnn = kspan;
  kspan = kspan / 4;
lbl120:
  c1 = 1.0;
  s1 = 0;
  mm = (kspan < klim ? kspan : klim);
  goto lbl150;
lbl130:
  c2 = c1 - ((cd * c1) + (sd * s1));
  s1 = ((sd * c1) - (cd * s1)) + s1;
  c1 = c2;
lbl140:
  c2 = (c1 * c1) - (s1 * s1);
  s2 = c1 * s1 * 2.0;
  c3 = (c2 * c1) - (s2 * s1);
  s3 = (c2 * s1) + (s2 * c1);
lbl150:
  k1 = kk + kspan;
  k2 = k1 + kspan;
  k3 = k2 + kspan;
  akp = a[kk] + a[k2];
  akm = a[kk] - a[k2];
  ajp = a[k1] + a[k3];
  ajm = a[k1] - a[k3];
  a[kk] = (double)(akp + ajp);
  ajp = akp - ajp;
  bkp = b[kk] + b[k2];
  bkm = b[kk] - b[k2];
  bjp = b[k1] + b[k3];
  bjm = b[k1] - b[k3];
  b[kk] = (double)(bkp + bjp);
  bjp = bkp - bjp;
  if (isn < 0)
    goto lbl180;
  akp = akm - bjm;
  akm = akm + bjm;
  bkp = bkm + ajm;
  bkm = bkm - ajm;
  if (s1 == 0.0)
    goto lbl190;
lbl160:
  a[k1] = (double)((akp * c1) - (bkp * s1));
  b[k1] = (double)((akp * s1) + (bkp * c1));
  a[k2] = (double)((ajp * c2) - (bjp * s2));
  b[k2] = (double)((ajp * s2) + (bjp * c2));
  a[k3] = (double)((akm * c3) - (bkm * s3));
  b[k3] = (double)((akm * s3) + (bkm * c3));
  kk = k3 + kspan;
  if (kk <= nt)
    goto lbl150;
lbl170:
  kk -= (nt - jc);
  if (kk <= mm)
    goto lbl130;
  if (kk < kspan)
    goto lbl200;
  kk -= (kspan - inc);
  if (kk <= jc)
    goto lbl120;
  if (kspan == jc)
    goto lbl350;
  goto lbl40;
lbl180:
  akp = akm + bjm;
  akm = akm - bjm;
  bkp = bkm - ajm;
  bkm = bkm + ajm;
  if (s1 != 0.0)
    goto lbl160;
lbl190:
  a[k1] = (double)akp;
  b[k1] = (double)bkp;
  a[k2] = (double)ajp;
  b[k2] = (double)bjp;
  a[k3] = (double)akm;
  b[k3] = (double)bkm;
  kk = k3 + kspan;
  if (kk <= nt)
    goto lbl150;
  goto lbl170;
lbl200:
  s1 = ((double)((kk - 1) / jc)) * dr * rad;
  c1 = cos(s1);
  s1 = sin(s1);
  mm = (kspan < mm + klim ? kspan : mm + klim);
  goto lbl140;
lbl210:
  c2 = (c72 * c72) - (s72 * s72);
  s2 = 2.0 * c72 * s72;
lbl220:
  k1 = kk + kspan;
  k2 = k1 + kspan;
  k3 = k2 + kspan;
  k4 = k3 + kspan;
  akp = a[k1] + a[k4];
  akm = a[k1] - a[k4];
  bkp = b[k1] + b[k4];
  bkm = b[k1] - b[k4];
  ajp = a[k2] + a[k3];
  ajm = a[k2] - a[k3];
  bjp = b[k2] + b[k3];
  bjm = b[k2] - b[k3];
  aa = a[kk];
  bb = b[kk];
  a[kk] = (double)(aa + akp + ajp);
  b[kk] = (double)(bb + bkp + bjp);
  ak = (akp * c72) + (ajp * c2) + aa;
  bk = (bkp * c72) + (bjp * c2) + bb;
  aj = (akm * s72) + (ajm * s2);
  bj = (bkm * s72) + (bjm * s2);
  a[k1] = (double)(ak - bj);
  a[k4] = (double)(ak + bj);
  b[k1] = (double)(bk + aj);
  b[k4] = (double)(bk - aj);
  ak = (akp * c2) + (ajp * c72) + aa;
  bk = (bkp * c2) + (bjp * c72) + bb;
  aj = (akm * s2) - (ajm * s72);
  bj = (bkm * s2) - (bjm * s72);
  a[k2] = (double)(ak - bj);
  a[k3] = (double)(ak + bj);
  b[k2] = (double)(bk + aj);
  b[k3] = (double)(bk - aj);
  kk = k4 + kspan;
  if (kk < nn)
    goto lbl220;
  kk -= nn;
  if (kk <= kspan)
    goto lbl220;
  goto lbl290;
lbl230:
  k = nfac[i];
  kspnn = kspan;
  kspan /= k;
  if (k == 3)
    goto lbl100;
  if (k == 5)
    goto lbl210;
  if (k == jf)
    goto lbl250;
  jf = k;
  s1 = rad / (((double)(k)) / 8.0);
  c1 = cos(s1);
  s1 = sin(s1);
  ck[jf] = 1.0;
  sk[jf] = 0.0;
  for (j = 1; j < k; j++) {
    ck[j] = (double)((ck[k]) * c1 + (sk[k]) * s1);
    sk[j] = (double)((ck[k]) * s1 - (sk[k]) * c1);
    k--;
    ck[k] = ck[j];
    sk[k] = -(sk[j]);
  }
lbl250:
  k1 = kk;
  k2 = kk + kspnn;
  aa = a[kk];
  bb = b[kk];
  ak = aa;
  bk = bb;
  j = 1;
  k1 += kspan;
  do {
    k2 -= kspan;
    j++;
    at[j] = a[k1] + a[k2];
    ak = at[j] + ak;
    bt[j] = b[k1] + b[k2];
    bk = bt[j] + bk;
    j++;
    at[j] = a[k1] - a[k2];
    bt[j] = b[k1] - b[k2];
    k1 += kspan;
  } while (k1 < k2);
  a[kk] = (double)ak;
  b[kk] = (double)bk;
  k1 = kk;
  k2 = kk + kspnn;
  j = 1;
lbl270:
  k1 += kspan;
  k2 -= kspan;
  jj = j;
  ak = aa;
  bk = bb;
  aj = 0.0;
  bj = 0.0;
  k = 1;
  do {
    k++;
    ak = (at[k] * ck[jj]) + ak;
    bk = (bt[k] * ck[jj]) + bk;
    k++;
    aj = (at[k] * sk[jj]) + aj;
    bj = (bt[k] * sk[jj]) + bj;
    jj += j;
    if (jj > jf)
      jj -= jf;
  } while (k < jf);
  k = jf - j;
  a[k1] = (double)(ak - bj);
  b[k1] = (double)(bk + aj);
  a[k2] = (double)(ak + bj);
  b[k2] = (double)(bk - aj);
  j++;
  if (j < k)
    goto lbl270;
  kk += kspnn;
  if (kk <= nn)
    goto lbl250;
  kk -= nn;
  if (kk <= kspan)
    goto lbl250;
lbl290:
  if (i == m)
    goto lbl350;
  kk = jc + 1;
lbl300:
  c2 = 1.0 - cd;
  s1 = sd;
  mm = (kspan < klim ? kspan : klim);
  goto lbl320;
lbl310:
  c2 = c1 - ((cd * c1) + (sd * s1));
  s1 = s1 + ((sd * c1) - (cd * s1));
lbl320:
  c1 = c2;
  s2 = s1;
  kk += kspan;
lbl330:
  ak = a[kk];
  a[kk] = (double)((c2 * ak) - (s2 * b[kk]));
  b[kk] = (double)((s2 * ak) + (c2 * b[kk]));
  kk += kspnn;
  if (kk <= nt)
    goto lbl330;
  ak = s1 * s2;
  s2 = (s1 * c2) + (c1 * s2);
  c2 = (c1 * c2) - ak;
  kk -= (nt - kspan);
  if (kk <= kspnn)
    goto lbl330;
  kk -= (kspnn - jc);
  if (kk <= mm)
    goto lbl310;
  if (kk < kspan)
    goto lbl340;
  kk -= (kspan - jc - inc);
  if (kk <= (jc + jc))
    goto lbl300;
  goto lbl40;
lbl340:
  s1 = ((double)((kk - 1) / jc)) * dr * rad;
  c2 = cos(s1);
  s1 = sin(s1);
  mm = (kspan < mm + klim ? kspan : mm + klim);
  goto lbl320;
lbl350:
  np[1] = ks;
  if (!(*kt))
    goto lbl440;
  k = *kt + *kt + 1;
  if (m < k)
    k--;
  np[k + 1] = jc;
  for (j = 1; j < k; j++, k--) {
    np[j + 1] = np[j] / nfac[j];
    np[k] = np[k + 1] * nfac[j];
  }
  k3 = np[k + 1];
  kspan = np[2];
  kk = jc + 1;
  k2 = kspan + 1;
  j = 1;
  if (n != ntot)
    goto lbl400;
lbl370:
  do {
    ak = a[kk];
    a[kk] = a[k2];
    a[k2] = (double)ak;
    bk = b[kk];
    b[kk] = b[k2];
    b[k2] = (double)bk;
    kk += inc;
    k2 += kspan;
  } while (k2 < ks);
lbl380:
  do {
    k2 -= np[j++];
    k2 += np[j + 1];
  } while (k2 > np[j]);
  j = 1;
lbl390:
  if (kk < k2) {
    goto lbl370;
  }
  kk += inc;
  k2 += kspan;
  if (k2 < ks)
    goto lbl390;
  if (kk < ks)
    goto lbl380;
  jc = k3;
  goto lbl440;
lbl400:
  do {
    do {
      k = kk + jc;
      do {
        ak = a[kk];
        a[kk] = a[k2];
        a[k2] = (double)ak;
        bk = b[kk];
        b[kk] = b[k2];
        b[k2] = (double)bk;
        kk += inc;
        k2 += inc;
      } while (kk < k);
      kk += (ks - jc);
      k2 += (ks - jc);
    } while (kk < nt);
    k2 -= (nt - kspan);
    kk -= (nt - jc);
  } while (k2 < ks);
lbl420:
  do {
    k2 -= np[j++];
    k2 += np[j + 1];
  } while (k2 > np[j]);
  j = 1;
lbl430:
  if (kk < k2)
    goto lbl400;
  kk += jc;
  k2 += kspan;
  if (k2 < ks)
    goto lbl430;
  if (kk < ks)
    goto lbl420;
  jc = k3;
lbl440:
  if ((2 * (*kt)) + 1 >= m)
    return;
  kspnn = *(np + *(kt) + 1);
  j = m - *kt;
  nfac[j + 1] = 1;
lbl450:
  nfac[j] = nfac[j] * nfac[j + 1];
  j--;
  if (j != *kt)
    goto lbl450;
  *kt = *(kt) + 1;
  nn = nfac[*kt] - 1;
  jj = 0;
  j = 0;
  goto lbl480;
lbl460:
  jj -= k2;
  k2 = kk;
  kk = nfac[++k];
lbl470:
  jj += kk;
  if (jj >= k2)
    goto lbl460;
  np[j] = jj;
lbl480:
  k2 = nfac[*kt];
  k = *kt + 1;
  kk = nfac[k];
  j++;
  if (j <= nn)
    goto lbl470;
  j = 0;
  goto lbl500;
lbl490:
  k = kk;
  kk = np[k];
  np[k] = -kk;
  if (kk != j)
    goto lbl490;
  k3 = kk;
lbl500:
  kk = np[++j];
  if (kk < 0)
    goto lbl500;
  if (kk != j)
    goto lbl490;
  np[j] = -j;
  if (j != nn)
    goto lbl500;
  maxf *= inc;
  goto lbl570;
lbl510:
  j--;
  if (np[j] < 0)
    goto lbl510;
  jj = jc;
lbl520:
  kspan = jj;
  if (jj > maxf)
    kspan = maxf;
  jj -= kspan;
  k = np[j];
  kk = (jc * k) + i + jj;
  k1 = kk + kspan;
  k2 = 0;
lbl530:
  k2++;
  at[k2] = a[k1];
  bt[k2] = b[k1];
  k1 -= inc;
  if (k1 != kk)
    goto lbl530;
lbl540:
  k1 = kk + kspan;
  k2 = k1 - (jc * (k + np[k]));
  k = -(np[k]);
lbl550:
  a[k1] = a[k2];
  b[k1] = b[k2];
  k1 -= inc;
  k2 -= inc;
  if (k1 != kk)
    goto lbl550;
  kk = k2;
  if (k != j)
    goto lbl540;
  k1 = kk + kspan;
  k2 = 0;
lbl560:
  k2++;
  a[k1] = at[k2];
  b[k1] = bt[k2];
  k1 -= inc;
  if (k1 != kk)
    goto lbl560;
  if (jj)
    goto lbl520;
  if (j != 1)
    goto lbl510;
lbl570:
  j = k3 + 1;
  nt -= kspnn;
  i = nt - inc + 1;
  if (nt >= 0)
    goto lbl510;
  return;
}
```