// File: /workspace/github_c_makefile_star2_O3/pavel-demin[P]ft8d-c/pffft.c
// Function: pffft_real_preprocess
static NEVER_INLINE(void) pffft_real_preprocess(int Ncvec, const v4sf *in, v4sf *out, const v4sf *e) {
  int k, dk = Ncvec/SIMD_SZ; // number of 4x4 matrix blocks
  /* fftpack order is f0r f1r f1i f2r f2i ... f(n-1)r f(n-1)i f(n)r */

  v4sf_union Xr, Xi, *uout = (v4sf_union*)out;
  float cr0, ci0, cr1, ci1, cr2, ci2, cr3, ci3;
  static const float s = M_SQRT2;
  assert(in != out);
  for (k=0; k < 4; ++k) {
    Xr.f[k] = ((float*)in)[8*k];
    Xi.f[k] = ((float*)in)[8*k+4];
  }

  pffft_real_preprocess_4x4(in, e, out+1, 1); // will write only 6 values

  /*
    [Xr0 Xr1 Xr2 Xr3 Xi0 Xi1 Xi2 Xi3]

    [cr0] [1   0   2   0   1   0   0   0]
    [cr1] [1   0   0   0  -1   0  -2   0]
    [cr2] [1   0  -2   0   1   0   0   0]
    [cr3] [1   0   0   0  -1   0   2   0]
    [ci0] [0   2   0   2   0   0   0   0]
    [ci1] [0   s   0  -s   0  -s   0  -s]
    [ci2] [0   0   0   0   0  -2   0   2]
    [ci3] [0  -s   0   s   0  -s   0  -s]
  */
  for (k=1; k < dk; ++k) {
    pffft_real_preprocess_4x4(in+8*k, e + k*6, out-1+k*8, 0);
  }

  cr0=(Xr.f[0]+Xi.f[0]) + 2*Xr.f[2]; uout[0].f[0] = cr0;
  cr1=(Xr.f[0]-Xi.f[0]) - 2*Xi.f[2]; uout[0].f[1] = cr1;
  cr2=(Xr.f[0]+Xi.f[0]) - 2*Xr.f[2]; uout[0].f[2] = cr2;
  cr3=(Xr.f[0]-Xi.f[0]) + 2*Xi.f[2]; uout[0].f[3] = cr3;
  ci0= 2*(Xr.f[1]+Xr.f[3]);                       uout[2*Ncvec-1].f[0] = ci0;
  ci1= s*(Xr.f[1]-Xr.f[3]) - s*(Xi.f[1]+Xi.f[3]); uout[2*Ncvec-1].f[1] = ci1;
  ci2= 2*(Xi.f[3]-Xi.f[1]);                       uout[2*Ncvec-1].f[2] = ci2;
  ci3=-s*(Xr.f[1]-Xr.f[3]) - s*(Xi.f[1]+Xi.f[3]); uout[2*Ncvec-1].f[3] = ci3;
}

// Assembly:
subq $0x28, %rsp
leal 0x3(%rdi), %eax
testl %edi, %edi
cmovnsl %edi, %eax
cmpq %rdx, %rsi
je 0x48bc
sarl $0x2, %eax
xorl %r8d, %r8d
movss (%rsi,%r8,8), %xmm0
movss %xmm0, 0x10(%rsp,%r8)
movss 0x10(%rsi,%r8,8), %xmm0
movss %xmm0, (%rsp,%r8)
addq $0x4, %r8
cmpq $0x10, %r8
jne 0x44e5
movaps (%rsi), %xmm2
movaps 0x10(%rsi), %xmm5
movaps 0x20(%rsi), %xmm3
movaps 0x30(%rsi), %xmm0
movaps 0x40(%rsi), %xmm1
movaps 0x50(%rsi), %xmm4
movaps 0x60(%rsi), %xmm6
movaps 0x70(%rsi), %xmm8
movaps %xmm2, %xmm7
addps %xmm6, %xmm7
subps %xmm6, %xmm2
movaps %xmm3, %xmm9
addps %xmm1, %xmm9
subps %xmm1, %xmm3
movaps %xmm5, %xmm1
addps %xmm8, %xmm1
subps %xmm8, %xmm5
movaps %xmm0, %xmm6
addps %xmm4, %xmm6
subps %xmm4, %xmm0
movaps %xmm9, %xmm4
addps %xmm7, %xmm4
subps %xmm9, %xmm7
movaps %xmm2, %xmm9
subps %xmm6, %xmm9
addps %xmm2, %xmm6
movaps %xmm5, %xmm2
subps %xmm0, %xmm2
addps %xmm5, %xmm0
movaps %xmm1, %xmm5
subps %xmm3, %xmm5
addps %xmm3, %xmm1
movaps (%rcx), %xmm10
movaps 0x10(%rcx), %xmm8
movaps 0x20(%rcx), %xmm11
movaps 0x30(%rcx), %xmm3
movaps %xmm9, %xmm12
mulps %xmm8, %xmm12
mulps %xmm10, %xmm9
mulps %xmm5, %xmm8
addps %xmm9, %xmm8
mulps %xmm10, %xmm5
subps %xmm12, %xmm5
movaps %xmm7, %xmm9
mulps %xmm3, %xmm9
mulps %xmm11, %xmm7
mulps %xmm0, %xmm3
addps %xmm7, %xmm3
mulps %xmm11, %xmm0
subps %xmm9, %xmm0
movaps 0x50(%rcx), %xmm7
movaps %xmm6, %xmm9
mulps %xmm7, %xmm9
movaps 0x40(%rcx), %xmm10
mulps %xmm10, %xmm6
mulps %xmm1, %xmm7
addps %xmm6, %xmm7
mulps %xmm10, %xmm1
subps %xmm9, %xmm1
movaps %xmm4, %xmm6
unpcklps %xmm8, %xmm6            # xmm6 = xmm6[0],xmm8[0],xmm6[1],xmm8[1]
movaps %xmm3, %xmm9
unpcklps %xmm7, %xmm9            # xmm9 = xmm9[0],xmm7[0],xmm9[1],xmm7[1]
movhlps %xmm6, %xmm9            # xmm9 = xmm6[1],xmm9[1]
unpckhps %xmm8, %xmm4            # xmm4 = xmm4[2],xmm8[2],xmm4[3],xmm8[3]
unpckhps %xmm7, %xmm3            # xmm3 = xmm3[2],xmm7[2],xmm3[3],xmm7[3]
movaps %xmm4, %xmm6
movlhps %xmm3, %xmm6            # xmm6 = xmm6[0],xmm3[0]
movhlps %xmm4, %xmm3            # xmm3 = xmm4[1],xmm3[1]
movaps %xmm2, %xmm4
unpcklps %xmm5, %xmm4            # xmm4 = xmm4[0],xmm5[0],xmm4[1],xmm5[1]
movaps %xmm0, %xmm7
unpcklps %xmm1, %xmm7            # xmm7 = xmm7[0],xmm1[0],xmm7[1],xmm1[1]
movhlps %xmm4, %xmm7            # xmm7 = xmm4[1],xmm7[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 %xmm2, %xmm1
movlhps %xmm0, %xmm1            # xmm1 = xmm1[0],xmm0[0]
movhlps %xmm2, %xmm0            # xmm0 = xmm2[1],xmm0[1]
movaps %xmm9, 0x10(%rdx)
movaps %xmm7, 0x20(%rdx)
movaps %xmm6, 0x30(%rdx)
movaps %xmm1, 0x40(%rdx)
movaps %xmm3, 0x50(%rdx)
movaps %xmm0, 0x60(%rdx)
cmpl $0x8, %edi
jl 0x4803
cmpl $0x3, %eax
movl $0x2, %r8d
cmovgel %eax, %r8d
addq $0xb0, %rcx
shlq $0x7, %r8
addq $-0x80, %r8
xorl %eax, %eax
movaps 0x80(%rsi,%rax), %xmm2
movaps 0x90(%rsi,%rax), %xmm5
movaps 0xa0(%rsi,%rax), %xmm3
movaps 0xb0(%rsi,%rax), %xmm0
movaps 0xc0(%rsi,%rax), %xmm1
movaps 0xd0(%rsi,%rax), %xmm4
movaps 0xe0(%rsi,%rax), %xmm6
movaps 0xf0(%rsi,%rax), %xmm8
movaps %xmm2, %xmm7
addps %xmm6, %xmm7
subps %xmm6, %xmm2
movaps %xmm3, %xmm9
addps %xmm1, %xmm9
subps %xmm1, %xmm3
movaps %xmm5, %xmm1
addps %xmm8, %xmm1
subps %xmm8, %xmm5
movaps %xmm0, %xmm6
addps %xmm4, %xmm6
subps %xmm4, %xmm0
movaps %xmm9, %xmm4
addps %xmm7, %xmm4
subps %xmm9, %xmm7
movaps %xmm2, %xmm9
subps %xmm6, %xmm9
addps %xmm2, %xmm6
movaps %xmm5, %xmm2
subps %xmm0, %xmm2
addps %xmm5, %xmm0
movaps %xmm1, %xmm5
subps %xmm3, %xmm5
addps %xmm3, %xmm1
movaps -0x50(%rcx), %xmm10
movaps -0x40(%rcx), %xmm8
movaps -0x30(%rcx), %xmm11
movaps -0x20(%rcx), %xmm3
movaps %xmm9, %xmm12
mulps %xmm8, %xmm12
mulps %xmm10, %xmm9
mulps %xmm5, %xmm8
addps %xmm9, %xmm8
mulps %xmm10, %xmm5
subps %xmm12, %xmm5
movaps %xmm7, %xmm9
mulps %xmm3, %xmm9
mulps %xmm11, %xmm7
mulps %xmm0, %xmm3
addps %xmm7, %xmm3
mulps %xmm11, %xmm0
subps %xmm9, %xmm0
movaps (%rcx), %xmm7
movaps %xmm6, %xmm9
mulps %xmm7, %xmm9
movaps -0x10(%rcx), %xmm10
mulps %xmm10, %xmm6
mulps %xmm1, %xmm7
addps %xmm6, %xmm7
mulps %xmm10, %xmm1
subps %xmm9, %xmm1
movaps %xmm4, %xmm6
unpcklps %xmm8, %xmm6            # xmm6 = xmm6[0],xmm8[0],xmm6[1],xmm8[1]
movaps %xmm3, %xmm9
unpcklps %xmm7, %xmm9            # xmm9 = xmm9[0],xmm7[0],xmm9[1],xmm7[1]
unpckhps %xmm8, %xmm4            # xmm4 = xmm4[2],xmm8[2],xmm4[3],xmm8[3]
unpckhps %xmm7, %xmm3            # xmm3 = xmm3[2],xmm7[2],xmm3[3],xmm7[3]
movaps %xmm6, %xmm7
movlhps %xmm9, %xmm7            # xmm7 = xmm7[0],xmm9[0]
movhlps %xmm6, %xmm9            # xmm9 = xmm6[1],xmm9[1]
movaps %xmm4, %xmm6
movlhps %xmm3, %xmm6            # xmm6 = xmm6[0],xmm3[0]
movhlps %xmm4, %xmm3            # xmm3 = xmm4[1],xmm3[1]
movaps %xmm2, %xmm4
unpcklps %xmm5, %xmm4            # xmm4 = xmm4[0],xmm5[0],xmm4[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 %xmm4, %xmm1
movlhps %xmm8, %xmm1            # xmm1 = xmm1[0],xmm8[0]
movhlps %xmm4, %xmm8            # xmm8 = xmm4[1],xmm8[1]
movaps %xmm2, %xmm4
movlhps %xmm0, %xmm4            # xmm4 = xmm4[0],xmm0[0]
movhlps %xmm2, %xmm0            # xmm0 = xmm2[1],xmm0[1]
movaps %xmm7, 0x70(%rdx,%rax)
movaps %xmm1, 0x80(%rdx,%rax)
movaps %xmm9, 0x90(%rdx,%rax)
movaps %xmm8, 0xa0(%rdx,%rax)
movaps %xmm6, 0xb0(%rdx,%rax)
movaps %xmm4, 0xc0(%rdx,%rax)
movaps %xmm3, 0xd0(%rdx,%rax)
movaps %xmm0, 0xe0(%rdx,%rax)
addq $0x60, %rcx
subq $-0x80, %rax
cmpq %rax, %r8
jne 0x4665
movss 0x10(%rsp), %xmm0
movss (%rsp), %xmm1
movaps %xmm0, %xmm2
addss %xmm1, %xmm2
subss %xmm1, %xmm0
unpcklps %xmm0, %xmm2            # xmm2 = xmm2[0],xmm0[0],xmm2[1],xmm0[1]
movss 0x8(%rsp), %xmm0
shufps $0xa0, 0x10(%rsp), %xmm0 # xmm0 = xmm0[0,0],mem[2,2]
shufps $0x22, %xmm0, %xmm0     # xmm0 = xmm0[2,0,2,0]
movlhps %xmm2, %xmm2            # xmm2 = xmm2[0,0]
mulps 0x399a(%rip), %xmm0     # 0x81d0
addps %xmm2, %xmm0
movaps %xmm0, (%rdx)
movss 0x14(%rsp), %xmm0
movss 0x1c(%rsp), %xmm1
movaps %xmm0, %xmm2
addss %xmm1, %xmm2
addss %xmm2, %xmm2
addl %edi, %edi
movslq %edi, %rax
shlq $0x4, %rax
movss %xmm2, -0x10(%rdx,%rax)
subss %xmm1, %xmm0
movss 0x4(%rsp), %xmm1
movss 0xc(%rsp), %xmm2
movaps %xmm1, %xmm3
addss %xmm2, %xmm3
movss 0x385f(%rip), %xmm4     # 0x80e0
mulss %xmm4, %xmm3
movss 0x3857(%rip), %xmm5     # 0x80e4
mulss %xmm0, %xmm5
addss %xmm3, %xmm5
movss %xmm5, -0xc(%rdx,%rax)
subss %xmm1, %xmm2
addss %xmm2, %xmm2
movss %xmm2, -0x8(%rdx,%rax)
mulss %xmm4, %xmm0
addss %xmm3, %xmm0
movss %xmm0, -0x4(%rdx,%rax)
addq $0x28, %rsp
retq
leaq 0x3bc9(%rip), %rdi      # 0x848c
leaq 0x397f(%rip), %rsi      # 0x8249
leaq 0x3f2f(%rip), %rcx      # 0x8800
movl $0x626, %edx            # imm = 0x626
callq 0x1090