// File: /workspace/github_c_makefile_star2_O1/pavel-demin[P]ft8d-c/pffft.c
// Function: pffft_cplx_preprocess
void pffft_cplx_preprocess(int Ncvec, const v4sf *in, v4sf *out, const v4sf *e) {
  int k, dk = Ncvec/SIMD_SZ; // number of 4x4 matrix blocks
  v4sf r0, i0, r1, i1, r2, i2, r3, i3;
  v4sf sr0, dr0, sr1, dr1, si0, di0, si1, di1;
  assert(in != out);
  for (k=0; k < dk; ++k) {
    r0 = in[8*k+0]; i0 = in[8*k+1];
    r1 = in[8*k+2]; i1 = in[8*k+3];
    r2 = in[8*k+4]; i2 = in[8*k+5];
    r3 = in[8*k+6]; i3 = in[8*k+7];

    sr0 = VADD(r0,r2); dr0 = VSUB(r0, r2);
    sr1 = VADD(r1,r3); dr1 = VSUB(r1, r3);
    si0 = VADD(i0,i2); di0 = VSUB(i0, i2);
    si1 = VADD(i1,i3); di1 = VSUB(i1, i3);

    r0 = VADD(sr0, sr1); i0 = VADD(si0, si1);
    r1 = VSUB(dr0, di1); i1 = VADD(di0, dr1);
    r2 = VSUB(sr0, sr1); i2 = VSUB(si0, si1);
    r3 = VADD(dr0, di1); i3 = VSUB(di0, dr1);

    VCPLXMULCONJ(r1,i1,e[k*6+0],e[k*6+1]);
    VCPLXMULCONJ(r2,i2,e[k*6+2],e[k*6+3]);
    VCPLXMULCONJ(r3,i3,e[k*6+4],e[k*6+5]);

    VTRANSPOSE4(r0,r1,r2,r3);
    VTRANSPOSE4(i0,i1,i2,i3);

    *out++ = r0; *out++ = i0; *out++ = r1; *out++ = i1;
    *out++ = r2; *out++ = i2; *out++ = r3; *out++ = i3;
  }
}

// Assembly:
pushq %rax
leal 0x3(%rdi), %eax
testl %edi, %edi
cmovnsl %edi, %eax
cmpq %rdx, %rsi
je 0x31d7
cmpl $0x4, %edi
jl 0x31d5
sarl $0x2, %eax
movl %eax, %eax
addq $0x50, %rcx
shlq $0x7, %rax
xorl %edi, %edi
movaps (%rsi,%rdi), %xmm3
movaps 0x10(%rsi,%rdi), %xmm1
movaps 0x20(%rsi,%rdi), %xmm9
movaps 0x30(%rsi,%rdi), %xmm4
movaps 0x40(%rsi,%rdi), %xmm0
movaps 0x50(%rsi,%rdi), %xmm2
movaps 0x60(%rsi,%rdi), %xmm5
movaps 0x70(%rsi,%rdi), %xmm6
movaps %xmm3, %xmm8
addps %xmm0, %xmm8
subps %xmm0, %xmm3
movaps %xmm9, %xmm10
addps %xmm5, %xmm10
subps %xmm5, %xmm9
movaps %xmm1, %xmm0
addps %xmm2, %xmm0
subps %xmm2, %xmm1
movaps %xmm4, %xmm11
addps %xmm6, %xmm11
subps %xmm6, %xmm4
movaps %xmm8, %xmm6
addps %xmm10, %xmm6
movaps %xmm0, %xmm2
addps %xmm11, %xmm2
movaps %xmm3, %xmm7
subps %xmm4, %xmm7
movaps %xmm1, %xmm5
addps %xmm9, %xmm5
subps %xmm10, %xmm8
subps %xmm11, %xmm0
addps %xmm3, %xmm4
subps %xmm9, %xmm1
movaps -0x50(%rcx), %xmm9
movaps -0x40(%rcx), %xmm10
movaps -0x30(%rcx), %xmm11
movaps -0x20(%rcx), %xmm3
movaps %xmm5, %xmm12
mulps %xmm10, %xmm12
mulps %xmm7, %xmm10
mulps %xmm9, %xmm7
addps %xmm12, %xmm7
mulps %xmm9, %xmm5
subps %xmm10, %xmm5
movaps %xmm8, %xmm9
mulps %xmm3, %xmm9
mulps %xmm11, %xmm8
mulps %xmm0, %xmm3
addps %xmm8, %xmm3
mulps %xmm11, %xmm0
subps %xmm9, %xmm0
movaps (%rcx), %xmm8
movaps %xmm4, %xmm9
mulps %xmm8, %xmm9
movaps -0x10(%rcx), %xmm10
mulps %xmm10, %xmm4
mulps %xmm1, %xmm8
addps %xmm4, %xmm8
mulps %xmm10, %xmm1
subps %xmm9, %xmm1
movaps %xmm6, %xmm4
unpcklps %xmm7, %xmm4            # xmm4 = xmm4[0],xmm7[0],xmm4[1],xmm7[1]
movaps %xmm3, %xmm9
unpcklps %xmm8, %xmm9            # xmm9 = xmm9[0],xmm8[0],xmm9[1],xmm8[1]
unpckhps %xmm7, %xmm6            # xmm6 = xmm6[2],xmm7[2],xmm6[3],xmm7[3]
unpckhps %xmm8, %xmm3            # xmm3 = xmm3[2],xmm8[2],xmm3[3],xmm8[3]
movaps %xmm4, %xmm7
movlhps %xmm9, %xmm7            # xmm7 = xmm7[0],xmm9[0]
movhlps %xmm4, %xmm9            # xmm9 = xmm4[1],xmm9[1]
movaps %xmm6, %xmm4
movlhps %xmm3, %xmm4            # xmm4 = xmm4[0],xmm3[0]
movhlps %xmm6, %xmm3            # xmm3 = xmm6[1],xmm3[1]
movaps %xmm2, %xmm6
unpcklps %xmm5, %xmm6            # xmm6 = xmm6[0],xmm5[0],xmm6[1],xmm5[1]
movaps %xmm0, %xmm8
unpcklps %xmm1, %xmm8            # xmm8 = xmm8[0],xmm1[0],xmm8[1],xmm1[1]
unpckhps %xmm5, %xmm2            # xmm2 = xmm2[2],xmm5[2],xmm2[3],xmm5[3]
unpckhps %xmm1, %xmm0            # xmm0 = xmm0[2],xmm1[2],xmm0[3],xmm1[3]
movaps %xmm6, %xmm1
movlhps %xmm8, %xmm1            # xmm1 = xmm1[0],xmm8[0]
movhlps %xmm6, %xmm8            # xmm8 = xmm6[1],xmm8[1]
movaps %xmm2, %xmm5
movlhps %xmm0, %xmm5            # xmm5 = xmm5[0],xmm0[0]
movhlps %xmm2, %xmm0            # xmm0 = xmm2[1],xmm0[1]
movaps %xmm7, (%rdx,%rdi)
movaps %xmm1, 0x10(%rdx,%rdi)
movaps %xmm9, 0x20(%rdx,%rdi)
movaps %xmm8, 0x30(%rdx,%rdi)
movaps %xmm4, 0x40(%rdx,%rdi)
movaps %xmm5, 0x50(%rdx,%rdi)
movaps %xmm3, 0x60(%rdx,%rdi)
movaps %xmm0, 0x70(%rdx,%rdi)
addq $0x60, %rcx
subq $-0x80, %rdi
cmpq %rdi, %rax
jne 0x305d
popq %rax
retq
leaq 0x528e(%rip), %rdi      # 0x846c
leaq 0x5044(%rip), %rsi      # 0x8229
leaq 0x531a(%rip), %rcx      # 0x8506
movl $0x56b, %edx            # imm = 0x56B
callq 0x1090