// File: /workspace/github_c_makefile_star2_O3/pavel-demin[P]ft8d-c/pffft.c
// Function: cfftf1_ps
v4sf *cfftf1_ps(int n, const v4sf *input_readonly, v4sf *work1, v4sf *work2, const float *wa, const int *ifac, int isign) {
  v4sf *in  = (v4sf*)input_readonly;
  v4sf *out = (in == work2 ? work1 : work2);
  int nf = ifac[1], k1;
  int l1 = 1;
  int iw = 0;
  assert(in != out && work1 != work2);
  for (k1=2; k1<=nf+1; k1++) {
    int ip = ifac[k1];
    int l2 = ip*l1;
    int ido = n / l2;
    int idot = ido + ido;
    switch (ip) {
      case 5: {
        int ix2 = iw + idot;
        int ix3 = ix2 + idot;
        int ix4 = ix3 + idot;
        passf5_ps(idot, l1, in, out, &wa[iw], &wa[ix2], &wa[ix3], &wa[ix4], isign);
      } break;
      case 4: {
        int ix2 = iw + idot;
        int ix3 = ix2 + idot;
        passf4_ps(idot, l1, in, out, &wa[iw], &wa[ix2], &wa[ix3], isign);
      } break;
      case 2: {
        passf2_ps(idot, l1, in, out, &wa[iw], isign);
      } break;
      case 3: {
        int ix2 = iw + idot;
        passf3_ps(idot, l1, in, out, &wa[iw], &wa[ix2], isign);
      } break;
      default:
        assert(0);
    }
    l1 = l2;
    iw += (ip - 1)*idot;
    if (out == work2) {
      out = work1; in = work2;
    } else {
      out = work2; in = work1;
    }
  }

  return in; /* this is in fact the output .. */
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x38, %rsp
movq %r9, 0x18(%rsp)
movq %r8, 0x8(%rsp)
movl %edi, 0x14(%rsp)
cmpq %rcx, %rsi
movq %rcx, %r13
cmoveq %rdx, %r13
movq %rcx, 0x30(%rsp)
movq %rdx, 0x28(%rsp)
cmpq %rcx, %rdx
je 0x1946
movq %rsi, %r11
cmpq %rsi, %r13
je 0x1946
movq 0x18(%rsp), %rax
movl 0x4(%rax), %ecx
testl %ecx, %ecx
jle 0x1915
cvtsi2ssl 0x70(%rsp), %xmm0
movss %xmm0, 0x4(%rsp)
addq $0x2, %rcx
xorl %ebx, %ebx
movl $0x1, %r14d
movl $0x2, %r12d
movq %rcx, 0x20(%rsp)
movl %r14d, %esi
movq 0x18(%rsp), %rax
movl (%rax,%r12,4), %r15d
movl %r15d, %r14d
imull %esi, %r14d
movl 0x14(%rsp), %eax
cltd
idivl %r14d
movl %eax, %ebp
leal -0x2(%r15), %eax
cmpl $0x3, %eax
ja 0x1927
addl %ebp, %ebp
leaq 0x68de(%rip), %rcx      # 0x80f0
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
movslq %ebx, %rax
movq 0x8(%rsp), %rdx
leaq (%rdx,%rax,4), %r8
movl %ebp, %edi
movq %r11, %rdx
movq %r13, %rcx
movss 0x4(%rsp), %xmm0
callq 0x212c
jmp 0x18e3
leal (%rbx,%rbp), %eax
movslq %ebx, %rdx
movq 0x8(%rsp), %rdi
leaq (%rdi,%rdx,4), %r8
movslq %eax, %rdx
addl %ebp, %eax
leaq (%rdi,%rdx,4), %r9
cltq
leaq (%rdi,%rax,4), %rax
subq $0x8, %rsp
movl %ebp, %edi
movq %r11, %rdx
movq %r13, %rcx
movss 0xc(%rsp), %xmm0
pushq %rax
callq 0x1d88
jmp 0x18b5
leal (%rbx,%rbp), %eax
leal (%rax,%rbp), %edx
movslq %ebx, %rdi
movq 0x8(%rsp), %r10
leaq (%r10,%rdi,4), %r8
cltq
leaq (%r10,%rax,4), %r9
movslq %edx, %rax
addl %ebp, %edx
leaq (%r10,%rax,4), %rax
movslq %edx, %rdx
leaq (%r10,%rdx,4), %r10
movl %ebp, %edi
movq %r11, %rdx
movq %r13, %rcx
movss 0x4(%rsp), %xmm0
pushq %r10
pushq %rax
callq 0x1965
addq $0x10, %rsp
jmp 0x18e3
leal (%rbx,%rbp), %eax
movslq %ebx, %rdx
movq 0x8(%rsp), %rdi
leaq (%rdi,%rdx,4), %r8
cltq
leaq (%rdi,%rax,4), %r9
movl %ebp, %edi
movq %r11, %rdx
movq %r13, %rcx
movss 0x4(%rsp), %xmm0
callq 0x227c
decl %r15d
imull %r15d, %ebp
addl %ebp, %ebx
movq 0x30(%rsp), %rax
cmpq %rax, %r13
movq %rax, %r13
movq 0x28(%rsp), %r11
cmoveq %r11, %r13
cmoveq %rax, %r11
incq %r12
movq 0x20(%rsp), %rcx
cmpq %r12, %rcx
jne 0x17df
movq %r11, %rax
addq $0x38, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
leaq 0x6b5c(%rip), %rdi      # 0x848a
leaq 0x6914(%rip), %rsi      # 0x8249
leaq 0x6a85(%rip), %rcx      # 0x83c1
movl $0x4a1, %edx            # imm = 0x4A1
callq 0x1090
leaq 0x6a58(%rip), %rdi      # 0x83a5
leaq 0x68f5(%rip), %rsi      # 0x8249
leaq 0x6a66(%rip), %rcx      # 0x83c1
movl $0x487, %edx            # imm = 0x487
callq 0x1090