1
0
mirror of https://github.com/FFmpeg/FFmpeg.git synced 2025-08-15 14:13:16 +02:00

x86/tx_float: Fixes compilation with old yasm

Use three operand format on some instructions, and lea to load effective
addresses of tables.

Signed-off-by: James Almer <jamrial@gmail.com>
This commit is contained in:
James Almer
2021-04-24 16:01:04 -03:00
parent e448a4b4ea
commit fddddc7ec2

View File

@@ -126,11 +126,11 @@ SECTION .text
; %2 - temporary ; %2 - temporary
%macro FFT2 2 %macro FFT2 2
shufps %2, %1, %1, q3322 shufps %2, %1, %1, q3322
shufps %1, %1, q1100 shufps %1, %1, %1, q1100
addsubps %1, %2 addsubps %1, %1, %2
shufps %1, %1, q2031 shufps %1, %1, %1, q2031
%endmacro %endmacro
; Single 4-point in-place complex FFT (will do 2 transforms at once in [AVX] mode) ; Single 4-point in-place complex FFT (will do 2 transforms at once in [AVX] mode)
@@ -139,18 +139,18 @@ SECTION .text
; %3 - temporary ; %3 - temporary
%macro FFT4 3 %macro FFT4 3
subps %3, %1, %2 ; r1234, [r5678] subps %3, %1, %2 ; r1234, [r5678]
addps %1, %2 ; t1234, [t5678] addps %1, %1, %2 ; t1234, [t5678]
shufps %2, %1, %3, q1010 ; t12, r12 shufps %2, %1, %3, q1010 ; t12, r12
shufps %1, %3, q2332 ; t34, r43 shufps %1, %1, %3, q2332 ; t34, r43
subps %3, %2, %1 ; a34, b32 subps %3, %2, %1 ; a34, b32
addps %2, %1 ; a12, b14 addps %2, %2, %1 ; a12, b14
shufps %1, %2, %3, q1010 ; a1234 even shufps %1, %2, %3, q1010 ; a1234 even
shufps %2, %3, q2332 ; b1423 shufps %2, %2, %3, q2332 ; b1423
shufps %2, %2, q1320 ; b1234 odd shufps %2, %2, %2, q1320 ; b1234 odd
%endmacro %endmacro
; Single/Dual 8-point in-place complex FFT (will do 2 transforms in [AVX] mode) ; Single/Dual 8-point in-place complex FFT (will do 2 transforms in [AVX] mode)
@@ -164,36 +164,36 @@ SECTION .text
addps %5, %1, %3 ; q1-8 addps %5, %1, %3 ; q1-8
addps %6, %2, %4 ; k1-8 addps %6, %2, %4 ; k1-8
subps %1, %3 ; r1-8 subps %1, %1, %3 ; r1-8
subps %2, %4 ; j1-8 subps %2, %2, %4 ; j1-8
shufps %4, %1, %1, q2323 ; r4343 shufps %4, %1, %1, q2323 ; r4343
shufps %3, %5, %6, q3032 ; q34, k14 shufps %3, %5, %6, q3032 ; q34, k14
shufps %1, %1, q1010 ; r1212 shufps %1, %1, %1, q1010 ; r1212
shufps %5, %6, q1210 ; q12, k32 shufps %5, %5, %6, q1210 ; q12, k32
xorps %4, [mask_pmmppmmp] ; r4343 * pmmp xorps %4, %4, [mask_pmmppmmp] ; r4343 * pmmp
addps %6, %5, %3 ; s12, g12 addps %6, %5, %3 ; s12, g12
mulps %2, [d8_mult_odd] ; r8 * d8_mult_odd mulps %2, %2, [d8_mult_odd] ; r8 * d8_mult_odd
subps %5, %3 ; s34, g43 subps %5, %5, %3 ; s34, g43
addps %3, %1, %4 ; z1234 addps %3, %1, %4 ; z1234
unpcklpd %1, %6, %5 ; s1234 unpcklpd %1, %6, %5 ; s1234
shufps %4, %2, %2, q2301 ; j2143 shufps %4, %2, %2, q2301 ; j2143
shufps %6, %5, q2332 ; g1234 shufps %6, %6, %5, q2332 ; g1234
addsubps %2, %4 ; l2143 addsubps %2, %2, %4 ; l2143
shufps %5, %2, %2, q0123 ; l3412 shufps %5, %2, %2, q0123 ; l3412
addsubps %5, %2 ; t1234 addsubps %5, %5, %2 ; t1234
subps %2, %1, %6 ; h1234 even subps %2, %1, %6 ; h1234 even
subps %4, %3, %5 ; u1234 odd subps %4, %3, %5 ; u1234 odd
addps %1, %6 ; w1234 even addps %1, %1, %6 ; w1234 even
addps %3, %5 ; o1234 odd addps %3, %3, %5 ; o1234 odd
%endmacro %endmacro
; Single 8-point in-place complex FFT in 20 instructions ; Single 8-point in-place complex FFT in 20 instructions
@@ -203,18 +203,18 @@ SECTION .text
; %4 - temporary ; %4 - temporary
%macro FFT8_AVX 4 %macro FFT8_AVX 4
subps %3, %1, %2 ; r1234, r5678 subps %3, %1, %2 ; r1234, r5678
addps %1, %2 ; q1234, q5678 addps %1, %1, %2 ; q1234, q5678
vpermilps %2, %3, [s8_perm_odd1] ; r4422, r6688 vpermilps %2, %3, [s8_perm_odd1] ; r4422, r6688
shufps %4, %1, %1, q3322 ; q1122, q5566 shufps %4, %1, %1, q3322 ; q1122, q5566
movsldup %3, %3 ; r1133, r5577 movsldup %3, %3 ; r1133, r5577
shufps %1, %1, q1100 ; q3344, q7788 shufps %1, %1, %1, q1100 ; q3344, q7788
addsubps %3, %2 ; z1234, z5678 addsubps %3, %3, %2 ; z1234, z5678
addsubps %1, %4 ; s3142, s7586 addsubps %1, %1, %4 ; s3142, s7586
mulps %3, [s8_mult_odd] ; z * s8_mult_odd mulps %3, %3, [s8_mult_odd] ; z * s8_mult_odd
vpermilps %1, [s8_perm_even] ; s1234, s5687 ! vpermilps %1, [s8_perm_even] ; s1234, s5687 !
shufps %2, %3, %3, q2332 ; junk, z7887 shufps %2, %3, %3, q2332 ; junk, z7887
@@ -223,13 +223,13 @@ SECTION .text
vpermilps %3, %3, [s8_perm_odd2] ; z2314, z6556 vpermilps %3, %3, [s8_perm_odd2] ; z2314, z6556
vperm2f128 %1, %4, 0x03 ; e5687, s1234 vperm2f128 %1, %4, 0x03 ; e5687, s1234
addsubps %2, %3 ; junk, t5678 addsubps %2, %2, %3 ; junk, t5678
subps %1, %4 ; w1234, w5678 even subps %1, %1, %4 ; w1234, w5678 even
vperm2f128 %2, %2, 0x11 ; t5678, t5678 vperm2f128 %2, %2, 0x11 ; t5678, t5678
vperm2f128 %3, %3, 0x00 ; z2314, z2314 vperm2f128 %3, %3, 0x00 ; z2314, z2314
xorps %2, [mask_ppmpmmpm] ; t * ppmpmmpm xorps %2, %2, [mask_ppmpmmpm] ; t * ppmpmmpm
addps %2, %3, %2 ; u1234, u5678 odd addps %2, %3, %2 ; u1234, u5678 odd
%endmacro %endmacro
@@ -258,23 +258,23 @@ SECTION .text
%define mask [mask_mpmppmpm] %define mask [mask_mpmppmpm]
%define perm [s16_perm] %define perm [s16_perm]
%endif %endif
xorps %5, %5 ; 0 xorps %5, %5, %5 ; 0
shufps %6, %4, %4, q2301 ; z12.imre, z13.imre... shufps %6, %4, %4, q2301 ; z12.imre, z13.imre...
shufps %5, %5, %3, q2301 ; 0, 0, z8.imre... shufps %5, %5, %3, q2301 ; 0, 0, z8.imre...
mulps %4, [s16_mult_odd1] ; z.reim * costab mulps %4, %4, [s16_mult_odd1] ; z.reim * costab
xorps %5, [mask_mppmmpmp] xorps %5, %5, [mask_mppmmpmp]
%if cpuflag(fma3) %if cpuflag(fma3)
fmaddps %6, %6, [s16_mult_odd2], %4 ; s[8..15] fmaddps %6, %6, [s16_mult_odd2], %4 ; s[8..15]
addps %5, %3, %5 ; s[0...7] addps %5, %3, %5 ; s[0...7]
%else %else
mulps %6, [s16_mult_odd2] ; z.imre * costab mulps %6, %6, [s16_mult_odd2] ; z.imre * costab
addps %5, %3, %5 ; s[0...7] addps %5, %3, %5 ; s[0...7]
addps %6, %4, %6 ; s[8..15] addps %6, %4, %6 ; s[8..15]
%endif %endif
mulps %5, [s16_mult_even] ; s[0...7]*costab mulps %5, %5, [s16_mult_even] ; s[0...7]*costab
xorps %4, %6, mask ; s[8..15]*mpmppmpm xorps %4, %6, mask ; s[8..15]*mpmppmpm
xorps %3, %5, mask ; s[0...7]*mpmppmpm xorps %3, %5, mask ; s[0...7]*mpmppmpm
@@ -282,8 +282,8 @@ SECTION .text
vperm2f128 %4, %4, 0x01 ; s[12..15, 8..11] vperm2f128 %4, %4, 0x01 ; s[12..15, 8..11]
vperm2f128 %3, %3, 0x01 ; s[4..7, 0..3] vperm2f128 %3, %3, 0x01 ; s[4..7, 0..3]
addps %6, %4 ; y56, u56, y34, u34 addps %6, %6, %4 ; y56, u56, y34, u34
addps %5, %3 ; w56, x56, w34, x34 addps %5, %5, %3 ; w56, x56, w34, x34
vpermilps %6, perm ; y56, u56, y43, u43 vpermilps %6, perm ; y56, u56, y43, u43
vpermilps %5, perm ; w56, x56, w43, x43 vpermilps %5, perm ; w56, x56, w43, x43
@@ -312,7 +312,7 @@ SECTION .text
shufps %12, %10, %10, q2200 ; cos00224466 shufps %12, %10, %10, q2200 ; cos00224466
shufps %13, %11, %11, q1133 ; wim77553311 shufps %13, %11, %11, q1133 ; wim77553311
movshdup %10, %10 ; cos11335577 movshdup %10, %10 ; cos11335577
shufps %11, %11, q0022 ; wim66442200 shufps %11, %11, %11, q0022 ; wim66442200
%if %1 && mmsize == 32 %if %1 && mmsize == 32
shufps %6, %14, %14, q2301 ; m2[0].imre, m2[1].imre, m2[2].imre, m2[3].imre even shufps %6, %14, %14, q2301 ; m2[0].imre, m2[1].imre, m2[2].imre, m2[3].imre even
@@ -320,20 +320,20 @@ SECTION .text
shufps %7, %15, %15, q2301 ; m3[0].imre, m3[1].imre, m3[2].imre, m3[3].imre even shufps %7, %15, %15, q2301 ; m3[0].imre, m3[1].imre, m3[2].imre, m3[3].imre even
shufps %9, %17, %17, q2301 ; m3[0].imre, m3[1].imre, m3[2].imre, m3[3].imre odd shufps %9, %17, %17, q2301 ; m3[0].imre, m3[1].imre, m3[2].imre, m3[3].imre odd
mulps %14, %13 ; m2[0123]reim * wim7531 even mulps %14, %14, %13 ; m2[0123]reim * wim7531 even
mulps %16, %11 ; m2[0123]reim * wim7531 odd mulps %16, %16, %11 ; m2[0123]reim * wim7531 odd
mulps %15, %13 ; m3[0123]reim * wim7531 even mulps %15, %15, %13 ; m3[0123]reim * wim7531 even
mulps %17, %11 ; m3[0123]reim * wim7531 odd mulps %17, %17, %11 ; m3[0123]reim * wim7531 odd
%else %else
mulps %14, %6, %13 ; m2,3[01]reim * wim7531 even mulps %14, %6, %13 ; m2,3[01]reim * wim7531 even
mulps %16, %8, %11 ; m2,3[01]reim * wim7531 odd mulps %16, %8, %11 ; m2,3[01]reim * wim7531 odd
mulps %15, %7, %13 ; m2,3[23]reim * wim7531 even mulps %15, %7, %13 ; m2,3[23]reim * wim7531 even
mulps %17, %9, %11 ; m2,3[23]reim * wim7531 odd mulps %17, %9, %11 ; m2,3[23]reim * wim7531 odd
; reorder the multiplies to save movs reg, reg in the %if above ; reorder the multiplies to save movs reg, reg in the %if above
shufps %6, %6, q2301 ; m2[0].imre, m2[1].imre, m3[0].imre, m3[1].imre even shufps %6, %6, %6, q2301 ; m2[0].imre, m2[1].imre, m3[0].imre, m3[1].imre even
shufps %8, %8, q2301 ; m2[0].imre, m2[1].imre, m3[0].imre, m3[1].imre odd shufps %8, %8, %8, q2301 ; m2[0].imre, m2[1].imre, m3[0].imre, m3[1].imre odd
shufps %7, %7, q2301 ; m2[2].imre, m2[3].imre, m3[2].imre, m3[3].imre even shufps %7, %7, %7, q2301 ; m2[2].imre, m2[3].imre, m3[2].imre, m3[3].imre even
shufps %9, %9, q2301 ; m2[2].imre, m2[3].imre, m3[2].imre, m3[3].imre odd shufps %9, %9, %9, q2301 ; m2[2].imre, m2[3].imre, m3[2].imre, m3[3].imre odd
%endif %endif
%if cpuflag(fma3) ; 11 - 5 = 6 instructions saved through FMA! %if cpuflag(fma3) ; 11 - 5 = 6 instructions saved through FMA!
@@ -343,17 +343,17 @@ SECTION .text
fmsubaddps %9, %9, %10, %17 ; j[0..8] odd fmsubaddps %9, %9, %10, %17 ; j[0..8] odd
movaps %13, [mask_pmpmpmpm] ; "subaddps? pfft, who needs that!" movaps %13, [mask_pmpmpmpm] ; "subaddps? pfft, who needs that!"
%else %else
mulps %6, %12 ; m2,3[01]imre * cos0246 mulps %6, %6, %12 ; m2,3[01]imre * cos0246
mulps %8, %10 ; m2,3[01]imre * cos0246 mulps %8, %8, %10 ; m2,3[01]imre * cos0246
movaps %13, [mask_pmpmpmpm] ; "subaddps? pfft, who needs that!" movaps %13, [mask_pmpmpmpm] ; "subaddps? pfft, who needs that!"
mulps %7, %12 ; m2,3[23]reim * cos0246 mulps %7, %7, %12 ; m2,3[23]reim * cos0246
mulps %9, %10 ; m2,3[23]reim * cos0246 mulps %9, %9, %10 ; m2,3[23]reim * cos0246
addsubps %6, %14 ; w[0..8] addsubps %6, %6, %14 ; w[0..8]
addsubps %8, %16 ; w[0..8] addsubps %8, %8, %16 ; w[0..8]
xorps %15, %13 ; +-m2,3[23]imre * wim7531 xorps %15, %15, %13 ; +-m2,3[23]imre * wim7531
xorps %17, %13 ; +-m2,3[23]imre * wim7531 xorps %17, %17, %13 ; +-m2,3[23]imre * wim7531
addps %7, %15 ; j[0..8] addps %7, %7, %15 ; j[0..8]
addps %9, %17 ; j[0..8] addps %9, %9, %17 ; j[0..8]
%endif %endif
addps %14, %6, %7 ; t10235476 even addps %14, %6, %7 ; t10235476 even
@@ -361,20 +361,20 @@ SECTION .text
subps %15, %6, %7 ; +-r[0..7] even subps %15, %6, %7 ; +-r[0..7] even
subps %17, %8, %9 ; +-r[0..7] odd subps %17, %8, %9 ; +-r[0..7] odd
shufps %14, %14, q2301 ; t[0..7] even shufps %14, %14, %14, q2301 ; t[0..7] even
shufps %16, %16, q2301 ; t[0..7] odd shufps %16, %16, %16, q2301 ; t[0..7] odd
xorps %15, %13 ; r[0..7] even xorps %15, %15, %13 ; r[0..7] even
xorps %17, %13 ; r[0..7] odd xorps %17, %17, %13 ; r[0..7] odd
subps %6, %2, %14 ; m2,3[01] even subps %6, %2, %14 ; m2,3[01] even
subps %8, %4, %16 ; m2,3[01] odd subps %8, %4, %16 ; m2,3[01] odd
subps %7, %3, %15 ; m2,3[23] even subps %7, %3, %15 ; m2,3[23] even
subps %9, %5, %17 ; m2,3[23] odd subps %9, %5, %17 ; m2,3[23] odd
addps %2, %14 ; m0 even addps %2, %2, %14 ; m0 even
addps %4, %16 ; m0 odd addps %4, %4, %16 ; m0 odd
addps %3, %15 ; m1 even addps %3, %3, %15 ; m1 even
addps %5, %17 ; m1 odd addps %5, %5, %17 ; m1 odd
%endmacro %endmacro
; Same as above, only does one parity at a time, takes 3 temporary registers, ; Same as above, only does one parity at a time, takes 3 temporary registers,
@@ -390,35 +390,35 @@ SECTION .text
%endif %endif
mulps %10, %4, %9 ; m2,3[01]reim * wim7531 even mulps %10, %4, %9 ; m2,3[01]reim * wim7531 even
mulps %9, %5 ; m2,3[23]reim * wim7531 even mulps %9, %9, %5 ; m2,3[23]reim * wim7531 even
shufps %4, %4, q2301 ; m2[0].imre, m2[1].imre, m3[0].imre, m3[1].imre even shufps %4, %4, %4, q2301 ; m2[0].imre, m2[1].imre, m3[0].imre, m3[1].imre even
shufps %5, %5, q2301 ; m2[2].imre, m2[3].imre, m3[2].imre, m3[3].imre even shufps %5, %5, %5, q2301 ; m2[2].imre, m2[3].imre, m3[2].imre, m3[3].imre even
%if cpuflag(fma3) %if cpuflag(fma3)
fmaddsubps %4, %4, %8, %10 ; w[0..8] even fmaddsubps %4, %4, %8, %10 ; w[0..8] even
fmsubaddps %5, %5, %8, %9 ; j[0..8] even fmsubaddps %5, %5, %8, %9 ; j[0..8] even
movaps %10, [mask_pmpmpmpm] movaps %10, [mask_pmpmpmpm]
%else %else
mulps %4, %8 ; m2,3[01]imre * cos0246 mulps %4, %4, %8 ; m2,3[01]imre * cos0246
mulps %5, %8 ; m2,3[23]reim * cos0246 mulps %5, %5, %8 ; m2,3[23]reim * cos0246
addsubps %4, %10 ; w[0..8] addsubps %4, %4, %10 ; w[0..8]
movaps %10, [mask_pmpmpmpm] movaps %10, [mask_pmpmpmpm]
xorps %9, %10 ; +-m2,3[23]imre * wim7531 xorps %9, %9, %10 ; +-m2,3[23]imre * wim7531
addps %5, %9 ; j[0..8] addps %5, %5, %9 ; j[0..8]
%endif %endif
addps %8, %4, %5 ; t10235476 addps %8, %4, %5 ; t10235476
subps %9, %4, %5 ; +-r[0..7] subps %9, %4, %5 ; +-r[0..7]
shufps %8, %8, q2301 ; t[0..7] shufps %8, %8, %8, q2301 ; t[0..7]
xorps %9, %10 ; r[0..7] xorps %9, %9, %10 ; r[0..7]
subps %4, %2, %8 ; %3,3[01] subps %4, %2, %8 ; %3,3[01]
subps %5, %3, %9 ; %3,3[23] subps %5, %3, %9 ; %3,3[23]
addps %2, %8 ; m0 addps %2, %2, %8 ; m0
addps %3, %9 ; m1 addps %3, %3, %9 ; m1
%endmacro %endmacro
; Same as above, tries REALLY hard to use 2 temporary registers. ; Same as above, tries REALLY hard to use 2 temporary registers.
@@ -431,14 +431,14 @@ SECTION .text
shufps %9, %7, %7, q0022 ; wim66442200 shufps %9, %7, %7, q0022 ; wim66442200
%endif %endif
mulps %9, %4 ; m2,3[01]reim * wim7531 even mulps %9, %9, %4 ; m2,3[01]reim * wim7531 even
shufps %4, %4, q2301 ; m2[0].imre, m2[1].imre, m3[0].imre, m3[1].imre even shufps %4, %4, %4, q2301 ; m2[0].imre, m2[1].imre, m3[0].imre, m3[1].imre even
%if cpuflag(fma3) %if cpuflag(fma3)
fmaddsubps %4, %4, %8, %9 ; w[0..8] even fmaddsubps %4, %4, %8, %9 ; w[0..8] even
%else %else
mulps %4, %8 ; m2,3[01]imre * cos0246 mulps %4, %4, %8 ; m2,3[01]imre * cos0246
addsubps %4, %9 ; w[0..8] addsubps %4, %4, %9 ; w[0..8]
%endif %endif
%if %1 %if %1
@@ -447,27 +447,27 @@ SECTION .text
shufps %9, %7, %7, q0022 ; wim66442200 shufps %9, %7, %7, q0022 ; wim66442200
%endif %endif
mulps %9, %5 ; m2,3[23]reim * wim7531 even mulps %9, %9, %5 ; m2,3[23]reim * wim7531 even
shufps %5, %5, q2301 ; m2[2].imre, m2[3].imre, m3[2].imre, m3[3].imre even shufps %5, %5, %5, q2301 ; m2[2].imre, m2[3].imre, m3[2].imre, m3[3].imre even
%if cpuflag (fma3) %if cpuflag (fma3)
fmsubaddps %5, %5, %8, %9 ; j[0..8] even fmsubaddps %5, %5, %8, %9 ; j[0..8] even
%else %else
mulps %5, %8 ; m2,3[23]reim * cos0246 mulps %5, %5, %8 ; m2,3[23]reim * cos0246
xorps %9, [mask_pmpmpmpm] ; +-m2,3[23]imre * wim7531 xorps %9, %9, [mask_pmpmpmpm]; +-m2,3[23]imre * wim7531
addps %5, %9 ; j[0..8] addps %5, %5, %9 ; j[0..8]
%endif %endif
addps %8, %4, %5 ; t10235476 addps %8, %4, %5 ; t10235476
subps %9, %4, %5 ; +-r[0..7] subps %9, %4, %5 ; +-r[0..7]
shufps %8, %8, q2301 ; t[0..7] shufps %8, %8, %8, q2301 ; t[0..7]
xorps %9, [mask_pmpmpmpm] ; r[0..7] xorps %9, %9, [mask_pmpmpmpm] ; r[0..7]
subps %4, %2, %8 ; %3,3[01] subps %4, %2, %8 ; %3,3[01]
subps %5, %3, %9 ; %3,3[23] subps %5, %3, %9 ; %3,3[23]
addps %2, %8 ; m0 addps %2, %2, %8 ; m0
addps %3, %9 ; m1 addps %3, %3, %9 ; m1
%endmacro %endmacro
%macro SPLIT_RADIX_COMBINE_64 0 %macro SPLIT_RADIX_COMBINE_64 0
@@ -591,10 +591,10 @@ SECTION .text
unpckhpd m11, m1, m3 unpckhpd m11, m1, m3
unpckhpd m12, m4, m6 unpckhpd m12, m4, m6
unpckhpd m13, m5, m7 unpckhpd m13, m5, m7
unpcklpd m0, m2 unpcklpd m0, m0, m2
unpcklpd m1, m3 unpcklpd m1, m1, m3
unpcklpd m4, m6 unpcklpd m4, m4, m6
unpcklpd m5, m7 unpcklpd m5, m5, m7
vextractf128 [outq + (0 + 0 + %1)*mmsize + %6 + 0], m0, 0 vextractf128 [outq + (0 + 0 + %1)*mmsize + %6 + 0], m0, 0
vextractf128 [outq + (0 + 0 + %1)*mmsize + %6 + 16], m10, 0 vextractf128 [outq + (0 + 0 + %1)*mmsize + %6 + 16], m10, 0
@@ -639,10 +639,10 @@ SECTION .text
unpcklpd m9, m1, m3 unpcklpd m9, m1, m3
unpcklpd m10, m4, m6 unpcklpd m10, m4, m6
unpcklpd m11, m5, m7 unpcklpd m11, m5, m7
unpckhpd m0, m2 unpckhpd m0, m0, m2
unpckhpd m1, m3 unpckhpd m1, m1, m3
unpckhpd m4, m6 unpckhpd m4, m4, m6
unpckhpd m5, m7 unpckhpd m5, m5, m7
vextractf128 [outq + (2 + 0 + %1)*mmsize + %6 + 0], m8, 0 vextractf128 [outq + (2 + 0 + %1)*mmsize + %6 + 0], m8, 0
vextractf128 [outq + (2 + 0 + %1)*mmsize + %6 + 16], m0, 0 vextractf128 [outq + (2 + 0 + %1)*mmsize + %6 + 16], m0, 0
@@ -690,14 +690,14 @@ cglobal fft4_ %+ %1 %+ _float, 4, 4, 3, ctx, out, in, stride
%if %2 %if %2
shufps m2, m1, m0, q3210 shufps m2, m1, m0, q3210
shufps m0, m1, q3210 shufps m0, m0, m1, q3210
movaps m1, m2 movaps m1, m2
%endif %endif
FFT4 m0, m1, m2 FFT4 m0, m1, m2
unpcklpd m2, m0, m1 unpcklpd m2, m0, m1
unpckhpd m0, m1 unpckhpd m0, m0, m1
movaps [outq + 0*mmsize], m2 movaps [outq + 0*mmsize], m2
movaps [outq + 1*mmsize], m0 movaps [outq + 1*mmsize], m0
@@ -721,8 +721,8 @@ cglobal fft8_float, 4, 4, 6, ctx, out, in, tmp
unpcklpd m4, m0, m3 unpcklpd m4, m0, m3
unpcklpd m5, m1, m2 unpcklpd m5, m1, m2
unpckhpd m0, m3 unpckhpd m0, m0, m3
unpckhpd m1, m2 unpckhpd m1, m1, m2
movups [outq + 0*mmsize], m4 movups [outq + 0*mmsize], m4
movups [outq + 1*mmsize], m0 movups [outq + 1*mmsize], m0
@@ -741,7 +741,7 @@ cglobal fft8_float, 4, 4, 4, ctx, out, in, tmp
FFT8_AVX m0, m1, m2, m3 FFT8_AVX m0, m1, m2, m3
unpcklpd m2, m0, m1 unpcklpd m2, m0, m1
unpckhpd m0, m1 unpckhpd m0, m0, m1
; Around 2% faster than 2x vperm2f128 + 2x movapd ; Around 2% faster than 2x vperm2f128 + 2x movapd
vextractf128 [outq + 16*0], m2, 0 vextractf128 [outq + 16*0], m2, 0
@@ -765,8 +765,8 @@ cglobal fft16_float, 4, 4, 8, ctx, out, in, tmp
unpcklpd m5, m1, m3 unpcklpd m5, m1, m3
unpcklpd m4, m0, m2 unpcklpd m4, m0, m2
unpckhpd m1, m3 unpckhpd m1, m1, m3
unpckhpd m0, m2 unpckhpd m0, m0, m2
vextractf128 [outq + 16*0], m4, 0 vextractf128 [outq + 16*0], m4, 0
vextractf128 [outq + 16*1], m0, 0 vextractf128 [outq + 16*1], m0, 0
@@ -812,10 +812,10 @@ cglobal fft32_float, 4, 4, 16, ctx, out, in, tmp
unpcklpd m10, m5, m7 unpcklpd m10, m5, m7
unpcklpd m8, m0, m2 unpcklpd m8, m0, m2
unpcklpd m11, m4, m6 unpcklpd m11, m4, m6
unpckhpd m1, m3 unpckhpd m1, m1, m3
unpckhpd m5, m7 unpckhpd m5, m5, m7
unpckhpd m0, m2 unpckhpd m0, m0, m2
unpckhpd m4, m6 unpckhpd m4, m4, m6
vextractf128 [outq + 16* 0], m8, 0 vextractf128 [outq + 16* 0], m8, 0
vextractf128 [outq + 16* 1], m0, 0 vextractf128 [outq + 16* 1], m0, 0
@@ -858,7 +858,7 @@ ALIGN 16
POP lenq POP lenq
sub outq, (%1*4) + (%1*2) + (%1/2) sub outq, (%1*4) + (%1*2) + (%1/2)
mov rtabq, ff_cos_ %+ %1 %+ _float lea rtabq, [ff_cos_ %+ %1 %+ _float]
lea itabq, [rtabq + %1 - 4*7] lea itabq, [rtabq + %1 - 4*7]
%if %0 > 1 %if %0 > 1
@@ -989,7 +989,7 @@ ALIGN 16
POP lenq POP lenq
sub outq, 24*mmsize sub outq, 24*mmsize
mov rtabq, ff_cos_128_float lea rtabq, [ff_cos_128_float]
lea itabq, [rtabq + 128 - 4*7] lea itabq, [rtabq + 128 - 4*7]
cmp tgtq, 128 cmp tgtq, 128
@@ -1016,7 +1016,7 @@ ALIGN 16
POP lenq POP lenq
sub outq, 48*mmsize sub outq, 48*mmsize
mov rtabq, ff_cos_256_float lea rtabq, [ff_cos_256_float]
lea itabq, [rtabq + 256 - 4*7] lea itabq, [rtabq + 256 - 4*7]
cmp tgtq, 256 cmp tgtq, 256
@@ -1044,7 +1044,7 @@ ALIGN 16
POP lenq POP lenq
sub outq, 96*mmsize sub outq, 96*mmsize
mov rtabq, ff_cos_512_float lea rtabq, [ff_cos_512_float]
lea itabq, [rtabq + 512 - 4*7] lea itabq, [rtabq + 512 - 4*7]
cmp tgtq, 512 cmp tgtq, 512
@@ -1079,7 +1079,7 @@ ALIGN 16
POP lenq POP lenq
sub outq, 192*mmsize sub outq, 192*mmsize
mov rtabq, ff_cos_1024_float lea rtabq, [ff_cos_1024_float]
lea itabq, [rtabq + 1024 - 4*7] lea itabq, [rtabq + 1024 - 4*7]
cmp tgtq, 1024 cmp tgtq, 1024
@@ -1137,10 +1137,10 @@ FFT_SPLIT_RADIX_DEF 131072
unpcklpd tmp2, m1, m3 unpcklpd tmp2, m1, m3
unpcklpd tw_o, tx1_e0, tx1_o0 unpcklpd tw_o, tx1_e0, tx1_o0
unpcklpd tw_e, tx2_e0, tx2_o0 unpcklpd tw_e, tx2_e0, tx2_o0
unpckhpd m0, m2 unpckhpd m0, m0, m2
unpckhpd m1, m3 unpckhpd m1, m1, m3
unpckhpd tx1_e0, tx1_o0 unpckhpd tx1_e0, tx1_e0, tx1_o0
unpckhpd tx2_e0, tx2_o0 unpckhpd tx2_e0, tx2_e0, tx2_o0
vextractf128 [outq + 0*mmsize + 0], tmp1, 0 vextractf128 [outq + 0*mmsize + 0], tmp1, 0
vextractf128 [outq + 0*mmsize + 16], m0, 0 vextractf128 [outq + 0*mmsize + 16], m0, 0
@@ -1178,10 +1178,10 @@ FFT_SPLIT_RADIX_DEF 131072
unpcklpd tmp2, m2, m3 unpcklpd tmp2, m2, m3
unpcklpd tw_e, tx1_e1, tx1_o1 unpcklpd tw_e, tx1_e1, tx1_o1
unpcklpd tw_o, tx2_e1, tx2_o1 unpcklpd tw_o, tx2_e1, tx2_o1
unpckhpd m0, m1 unpckhpd m0, m0, m1
unpckhpd m2, m3 unpckhpd m2, m2, m3
unpckhpd tx1_e1, tx1_o1 unpckhpd tx1_e1, tx1_e1, tx1_o1
unpckhpd tx2_e1, tx2_o1 unpckhpd tx2_e1, tx2_e1, tx2_o1
vextractf128 [outq + 2*mmsize + 0], tmp1, 0 vextractf128 [outq + 2*mmsize + 0], tmp1, 0
vextractf128 [outq + 2*mmsize + 16], m0, 0 vextractf128 [outq + 2*mmsize + 16], m0, 0
@@ -1208,5 +1208,7 @@ FFT_SPLIT_RADIX_DEF 131072
%if ARCH_X86_64 %if ARCH_X86_64
FFT_SPLIT_RADIX_FN avx FFT_SPLIT_RADIX_FN avx
%if HAVE_AVX2_EXTERNAL
FFT_SPLIT_RADIX_FN avx2 FFT_SPLIT_RADIX_FN avx2
%endif %endif
%endif