// File: /workspace/github_c_makefile_star2_O1/pavel-demin[P]ft8d-c/pffft.c
// Function: pffft_real_finalize
static NEVER_INLINE(void) pffft_real_finalize(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 cr, ci, *uout = (v4sf_union*)out;
  v4sf save = in[7], zero=VZERO();
  float xr0, xi0, xr1, xi1, xr2, xi2, xr3, xi3;
  static const float s = M_SQRT2/2;

  cr.v = in[0]; ci.v = in[Ncvec*2-1];
  assert(in != out);
  pffft_real_finalize_4x4(&zero, &zero, in+1, e, out);

  /*
    [cr0 cr1 cr2 cr3 ci0 ci1 ci2 ci3]

    [Xr(1)]  ] [1   1   1   1   0   0   0   0]
    [Xr(N/4) ] [0   0   0   0   1   s   0  -s]
    [Xr(N/2) ] [1   0  -1   0   0   0   0   0]
    [Xr(3N/4)] [0   0   0   0   1  -s   0   s]
    [Xi(1)   ] [1  -1   1  -1   0   0   0   0]
    [Xi(N/4) ] [0   0   0   0   0  -s  -1  -s]
    [Xi(N/2) ] [0  -1   0   1   0   0   0   0]
    [Xi(3N/4)] [0   0   0   0   0  -s   1  -s]
  */

  xr0=(cr.f[0]+cr.f[2]) + (cr.f[1]+cr.f[3]); uout[0].f[0] = xr0;
  xi0=(cr.f[0]+cr.f[2]) - (cr.f[1]+cr.f[3]); uout[1].f[0] = xi0;
  xr2=(cr.f[0]-cr.f[2]);                     uout[4].f[0] = xr2;
  xi2=(cr.f[3]-cr.f[1]);                     uout[5].f[0] = xi2;
  xr1= ci.f[0] + s*(ci.f[1]-ci.f[3]);        uout[2].f[0] = xr1;
  xi1=-ci.f[2] - s*(ci.f[1]+ci.f[3]);        uout[3].f[0] = xi1;
  xr3= ci.f[0] - s*(ci.f[1]-ci.f[3]);        uout[6].f[0] = xr3;
  xi3= ci.f[2] - s*(ci.f[1]+ci.f[3]);        uout[7].f[0] = xi3;

  for (k=1; k < dk; ++k) {
    v4sf save_next = in[8*k+7];
    pffft_real_finalize_4x4(&save, &in[8*k+0], in + 8*k+1,
                           e + k*6, out + k*8);
    save = save_next;
  }

}

// Assembly:
pushq %rax
leal 0x3(%rdi), %eax
testl %edi, %edi
cmovnsl %edi, %eax
cmpq %rdx, %rsi
je 0x458e
movaps 0x70(%rsi), %xmm0
leal (%rdi,%rdi), %r8d
movslq %r8d, %r8
shlq $0x4, %r8
movaps -0x10(%rsi,%r8), %xmm1
movaps (%rsi), %xmm2
movaps 0x10(%rsi), %xmm5
movaps 0x20(%rsi), %xmm6
movaps 0x30(%rsi), %xmm3
movaps 0x40(%rsi), %xmm4
movaps 0x50(%rsi), %xmm8
movaps 0x60(%rsi), %xmm10
xorps %xmm11, %xmm11
xorps %xmm9, %xmm9
unpcklps %xmm5, %xmm9            # xmm9 = xmm9[0],xmm5[0],xmm9[1],xmm5[1]
movaps %xmm3, %xmm7
unpcklps %xmm8, %xmm7            # xmm7 = xmm7[0],xmm8[0],xmm7[1],xmm8[1]
xorps %xmm12, %xmm12
unpckhps %xmm5, %xmm12           # xmm12 = xmm12[2],xmm5[2],xmm12[3],xmm5[3]
unpckhps %xmm8, %xmm3            # xmm3 = xmm3[2],xmm8[2],xmm3[3],xmm8[3]
movaps %xmm9, %xmm5
movlhps %xmm7, %xmm5            # xmm5 = xmm5[0],xmm7[0]
movhlps %xmm9, %xmm7            # xmm7 = xmm9[1],xmm7[1]
movaps %xmm12, %xmm9
movlhps %xmm3, %xmm9            # xmm9 = xmm9[0],xmm3[0]
movhlps %xmm12, %xmm3           # xmm3 = xmm12[1],xmm3[1]
xorps %xmm12, %xmm12
unpcklps %xmm6, %xmm12           # xmm12 = xmm12[0],xmm6[0],xmm12[1],xmm6[1]
movaps %xmm4, %xmm8
unpcklps %xmm10, %xmm8           # xmm8 = xmm8[0],xmm10[0],xmm8[1],xmm10[1]
unpckhps %xmm6, %xmm11           # xmm11 = xmm11[2],xmm6[2],xmm11[3],xmm6[3]
unpckhps %xmm10, %xmm4           # xmm4 = xmm4[2],xmm10[2],xmm4[3],xmm10[3]
movaps %xmm12, %xmm6
movlhps %xmm8, %xmm6            # xmm6 = xmm6[0],xmm8[0]
movhlps %xmm12, %xmm8           # xmm8 = xmm12[1],xmm8[1]
movaps %xmm11, %xmm10
movlhps %xmm4, %xmm10           # xmm10 = xmm10[0],xmm4[0]
movhlps %xmm11, %xmm4           # xmm4 = xmm11[1],xmm4[1]
movaps (%rcx), %xmm11
movaps 0x10(%rcx), %xmm12
movaps 0x20(%rcx), %xmm13
movaps 0x30(%rcx), %xmm14
movaps %xmm7, %xmm15
mulps %xmm12, %xmm15
mulps %xmm11, %xmm7
mulps %xmm8, %xmm12
subps %xmm12, %xmm7
mulps %xmm11, %xmm8
addps %xmm15, %xmm8
movaps %xmm9, %xmm11
mulps %xmm14, %xmm11
mulps %xmm13, %xmm9
mulps %xmm10, %xmm14
subps %xmm14, %xmm9
mulps %xmm13, %xmm10
addps %xmm11, %xmm10
movaps 0x50(%rcx), %xmm11
movaps %xmm3, %xmm12
mulps %xmm11, %xmm12
movaps 0x40(%rcx), %xmm13
mulps %xmm13, %xmm3
mulps %xmm4, %xmm11
subps %xmm11, %xmm3
mulps %xmm13, %xmm4
addps %xmm12, %xmm4
movaps %xmm5, %xmm11
addps %xmm9, %xmm11
subps %xmm9, %xmm5
movaps %xmm7, %xmm9
addps %xmm3, %xmm9
subps %xmm7, %xmm3
movaps %xmm6, %xmm7
addps %xmm10, %xmm7
subps %xmm10, %xmm6
movaps %xmm8, %xmm10
addps %xmm4, %xmm10
subps %xmm8, %xmm4
movaps %xmm11, %xmm8
addps %xmm9, %xmm8
subps %xmm9, %xmm11
movaps %xmm7, %xmm9
addps %xmm10, %xmm9
subps %xmm7, %xmm10
movaps %xmm5, %xmm7
addps %xmm4, %xmm7
subps %xmm4, %xmm5
movaps %xmm3, %xmm4
subps %xmm6, %xmm4
addps %xmm3, %xmm6
movaps %xmm8, (%rdx)
movaps %xmm9, 0x10(%rdx)
movaps %xmm7, 0x20(%rdx)
movaps %xmm4, 0x30(%rdx)
movaps %xmm5, 0x40(%rdx)
movaps %xmm6, 0x50(%rdx)
movaps %xmm11, 0x60(%rdx)
movaps %xmm10, 0x70(%rdx)
movaps %xmm2, %xmm3
unpckhpd %xmm2, %xmm3            # xmm3 = xmm3[1],xmm2[1]
movaps %xmm2, %xmm4
addss %xmm3, %xmm4
movaps %xmm2, %xmm5
shufps $0x55, %xmm2, %xmm5     # xmm5 = xmm5[1,1],xmm2[1,1]
movaps %xmm2, %xmm6
shufps $0xff, %xmm2, %xmm6     # xmm6 = xmm6[3,3],xmm2[3,3]
movaps %xmm5, %xmm7
addss %xmm6, %xmm7
movaps %xmm4, %xmm8
addss %xmm7, %xmm8
movss %xmm8, (%rdx)
subss %xmm7, %xmm4
movss %xmm4, 0x10(%rdx)
subss %xmm3, %xmm2
movss %xmm2, 0x40(%rdx)
subss %xmm5, %xmm6
movss %xmm6, 0x50(%rdx)
movaps %xmm1, %xmm3
shufps $0x55, %xmm1, %xmm3     # xmm3 = xmm3[1,1],xmm1[1,1]
movaps %xmm1, %xmm2
shufps $0xff, %xmm1, %xmm2     # xmm2 = xmm2[3,3],xmm1[3,3]
movaps %xmm3, %xmm4
subss %xmm2, %xmm4
movss 0x3dcc(%rip), %xmm5     # 0x8140
mulss %xmm4, %xmm5
addss %xmm1, %xmm5
movss %xmm5, 0x20(%rdx)
movss 0x3dbb(%rip), %xmm5     # 0x8144
mulss %xmm5, %xmm4
addss %xmm1, %xmm4
movhlps %xmm1, %xmm1            # xmm1 = xmm1[1,1]
addss %xmm3, %xmm2
mulss %xmm5, %xmm2
movaps %xmm2, %xmm3
subss %xmm1, %xmm3
movss %xmm3, 0x30(%rdx)
movss %xmm4, 0x60(%rdx)
addss %xmm1, %xmm2
movss %xmm2, 0x70(%rdx)
cmpl $0x8, %edi
jl 0x458c
sarl $0x2, %eax
cmpl $0x3, %eax
movl $0x2, %edi
cmovgel %eax, %edi
addq $0xb0, %rcx
shlq $0x7, %rdi
addq $-0x80, %rdi
xorl %eax, %eax
movaps 0xf0(%rsi,%rax), %xmm1
movaps 0x80(%rsi,%rax), %xmm9
movaps 0x90(%rsi,%rax), %xmm4
movaps 0xa0(%rsi,%rax), %xmm8
movaps 0xb0(%rsi,%rax), %xmm2
movaps 0xc0(%rsi,%rax), %xmm3
movaps 0xd0(%rsi,%rax), %xmm6
movaps 0xe0(%rsi,%rax), %xmm10
movaps %xmm0, %xmm7
unpcklps %xmm4, %xmm7            # xmm7 = xmm7[0],xmm4[0],xmm7[1],xmm4[1]
movaps %xmm2, %xmm5
unpcklps %xmm6, %xmm5            # xmm5 = xmm5[0],xmm6[0],xmm5[1],xmm6[1]
unpckhps %xmm4, %xmm0            # xmm0 = xmm0[2],xmm4[2],xmm0[3],xmm4[3]
unpckhps %xmm6, %xmm2            # xmm2 = xmm2[2],xmm6[2],xmm2[3],xmm6[3]
movaps %xmm7, %xmm4
movlhps %xmm5, %xmm4            # xmm4 = xmm4[0],xmm5[0]
movhlps %xmm7, %xmm5            # xmm5 = xmm7[1],xmm5[1]
movaps %xmm0, %xmm7
movlhps %xmm2, %xmm7            # xmm7 = xmm7[0],xmm2[0]
movhlps %xmm0, %xmm2            # xmm2 = xmm0[1],xmm2[1]
movaps %xmm9, %xmm11
unpcklps %xmm8, %xmm11           # xmm11 = xmm11[0],xmm8[0],xmm11[1],xmm8[1]
movaps %xmm3, %xmm6
unpcklps %xmm10, %xmm6           # xmm6 = xmm6[0],xmm10[0],xmm6[1],xmm10[1]
unpckhps %xmm8, %xmm9            # xmm9 = xmm9[2],xmm8[2],xmm9[3],xmm8[3]
unpckhps %xmm10, %xmm3           # xmm3 = xmm3[2],xmm10[2],xmm3[3],xmm10[3]
movaps %xmm11, %xmm0
movlhps %xmm6, %xmm0            # xmm0 = xmm0[0],xmm6[0]
movhlps %xmm11, %xmm6           # xmm6 = xmm11[1],xmm6[1]
movaps %xmm9, %xmm8
movlhps %xmm3, %xmm8            # xmm8 = xmm8[0],xmm3[0]
movhlps %xmm9, %xmm3            # xmm3 = xmm9[1],xmm3[1]
movaps -0x50(%rcx), %xmm9
movaps -0x40(%rcx), %xmm10
movaps -0x30(%rcx), %xmm11
movaps -0x20(%rcx), %xmm12
movaps %xmm5, %xmm13
mulps %xmm10, %xmm13
mulps %xmm9, %xmm5
mulps %xmm6, %xmm10
subps %xmm10, %xmm5
mulps %xmm9, %xmm6
addps %xmm13, %xmm6
movaps %xmm7, %xmm9
mulps %xmm12, %xmm9
mulps %xmm11, %xmm7
mulps %xmm8, %xmm12
subps %xmm12, %xmm7
mulps %xmm11, %xmm8
addps %xmm9, %xmm8
movaps (%rcx), %xmm9
movaps %xmm2, %xmm10
mulps %xmm9, %xmm10
movaps -0x10(%rcx), %xmm11
mulps %xmm11, %xmm2
mulps %xmm3, %xmm9
subps %xmm9, %xmm2
mulps %xmm11, %xmm3
addps %xmm10, %xmm3
movaps %xmm4, %xmm9
addps %xmm7, %xmm9
subps %xmm7, %xmm4
movaps %xmm5, %xmm7
addps %xmm2, %xmm7
subps %xmm5, %xmm2
movaps %xmm0, %xmm5
addps %xmm8, %xmm5
subps %xmm8, %xmm0
movaps %xmm6, %xmm8
addps %xmm3, %xmm8
subps %xmm6, %xmm3
movaps %xmm9, %xmm6
addps %xmm7, %xmm6
subps %xmm7, %xmm9
movaps %xmm5, %xmm7
addps %xmm8, %xmm7
subps %xmm5, %xmm8
movaps %xmm4, %xmm5
addps %xmm3, %xmm5
subps %xmm3, %xmm4
movaps %xmm2, %xmm3
subps %xmm0, %xmm3
addps %xmm2, %xmm0
movaps %xmm6, 0x80(%rdx,%rax)
movaps %xmm7, 0x90(%rdx,%rax)
movaps %xmm5, 0xa0(%rdx,%rax)
movaps %xmm3, 0xb0(%rdx,%rax)
movaps %xmm4, 0xc0(%rdx,%rax)
movaps %xmm0, 0xd0(%rdx,%rax)
movaps %xmm9, 0xe0(%rdx,%rax)
movaps %xmm8, 0xf0(%rdx,%rax)
addq $0x60, %rcx
subq $-0x80, %rax
movaps %xmm1, %xmm0
cmpq %rax, %rdi
jne 0x43de
popq %rax
retq
leaq 0x3ed7(%rip), %rdi      # 0x846c
leaq 0x3c8d(%rip), %rsi      # 0x8229
leaq 0x41fb(%rip), %rcx      # 0x879e
movl $0x5cc, %edx            # imm = 0x5CC
callq 0x1090