aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJames Almer <jamrial@gmail.com>2021-04-24 16:01:04 -0300
committerJames Almer <jamrial@gmail.com>2021-04-24 17:02:31 -0300
commitfddddc7ec215fc65bbcb1e626eea10b2a123151a (patch)
tree203283a924b79ff1902bc7ac610d20224f833385
parente448a4b4ea535aa2ec06f0aee167820df794a299 (diff)
downloadffmpeg-fddddc7ec215fc65bbcb1e626eea10b2a123151a.tar.gz
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>
-rw-r--r--libavutil/x86/tx_float.asm240
1 files changed, 121 insertions, 119 deletions
diff --git a/libavutil/x86/tx_float.asm b/libavutil/x86/tx_float.asm
index def61d86c1..f55a6201af 100644
--- a/libavutil/x86/tx_float.asm
+++ b/libavutil/x86/tx_float.asm
@@ -126,11 +126,11 @@ SECTION .text
; %2 - temporary
%macro FFT2 2
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
; Single 4-point in-place complex FFT (will do 2 transforms at once in [AVX] mode)
@@ -139,18 +139,18 @@ SECTION .text
; %3 - temporary
%macro FFT4 3
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 %1, %3, q2332 ; t34, r43
+ shufps %1, %1, %3, q2332 ; t34, r43
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 %2, %3, q2332 ; b1423
- shufps %2, %2, q1320 ; b1234 odd
+ shufps %2, %2, %3, q2332 ; b1423
+ shufps %2, %2, %2, q1320 ; b1234 odd
%endmacro
; 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 %6, %2, %4 ; k1-8
- subps %1, %3 ; r1-8
- subps %2, %4 ; j1-8
+ subps %1, %1, %3 ; r1-8
+ subps %2, %2, %4 ; j1-8
shufps %4, %1, %1, q2323 ; r4343
shufps %3, %5, %6, q3032 ; q34, k14
- shufps %1, %1, q1010 ; r1212
- shufps %5, %6, q1210 ; q12, k32
+ shufps %1, %1, %1, q1010 ; r1212
+ 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
- mulps %2, [d8_mult_odd] ; r8 * d8_mult_odd
- subps %5, %3 ; s34, g43
+ mulps %2, %2, [d8_mult_odd] ; r8 * d8_mult_odd
+ subps %5, %5, %3 ; s34, g43
addps %3, %1, %4 ; z1234
unpcklpd %1, %6, %5 ; s1234
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
- addsubps %5, %2 ; t1234
+ addsubps %5, %5, %2 ; t1234
subps %2, %1, %6 ; h1234 even
subps %4, %3, %5 ; u1234 odd
- addps %1, %6 ; w1234 even
- addps %3, %5 ; o1234 odd
+ addps %1, %1, %6 ; w1234 even
+ addps %3, %3, %5 ; o1234 odd
%endmacro
; Single 8-point in-place complex FFT in 20 instructions
@@ -203,18 +203,18 @@ SECTION .text
; %4 - temporary
%macro FFT8_AVX 4
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
shufps %4, %1, %1, q3322 ; q1122, q5566
movsldup %3, %3 ; r1133, r5577
- shufps %1, %1, q1100 ; q3344, q7788
+ shufps %1, %1, %1, q1100 ; q3344, q7788
- addsubps %3, %2 ; z1234, z5678
- addsubps %1, %4 ; s3142, s7586
+ addsubps %3, %3, %2 ; z1234, z5678
+ 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 !
shufps %2, %3, %3, q2332 ; junk, z7887
@@ -223,13 +223,13 @@ SECTION .text
vpermilps %3, %3, [s8_perm_odd2] ; z2314, z6556
vperm2f128 %1, %4, 0x03 ; e5687, s1234
- addsubps %2, %3 ; junk, t5678
- subps %1, %4 ; w1234, w5678 even
+ addsubps %2, %2, %3 ; junk, t5678
+ subps %1, %1, %4 ; w1234, w5678 even
vperm2f128 %2, %2, 0x11 ; t5678, t5678
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
%endmacro
@@ -258,23 +258,23 @@ SECTION .text
%define mask [mask_mpmppmpm]
%define perm [s16_perm]
%endif
- xorps %5, %5 ; 0
+ xorps %5, %5, %5 ; 0
shufps %6, %4, %4, q2301 ; z12.imre, z13.imre...
shufps %5, %5, %3, q2301 ; 0, 0, z8.imre...
- mulps %4, [s16_mult_odd1] ; z.reim * costab
- xorps %5, [mask_mppmmpmp]
+ mulps %4, %4, [s16_mult_odd1] ; z.reim * costab
+ xorps %5, %5, [mask_mppmmpmp]
%if cpuflag(fma3)
fmaddps %6, %6, [s16_mult_odd2], %4 ; s[8..15]
addps %5, %3, %5 ; s[0...7]
%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 %6, %4, %6 ; s[8..15]
%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 %3, %5, mask ; s[0...7]*mpmppmpm
@@ -282,8 +282,8 @@ SECTION .text
vperm2f128 %4, %4, 0x01 ; s[12..15, 8..11]
vperm2f128 %3, %3, 0x01 ; s[4..7, 0..3]
- addps %6, %4 ; y56, u56, y34, u34
- addps %5, %3 ; w56, x56, w34, x34
+ addps %6, %6, %4 ; y56, u56, y34, u34
+ addps %5, %5, %3 ; w56, x56, w34, x34
vpermilps %6, perm ; y56, u56, y43, u43
vpermilps %5, perm ; w56, x56, w43, x43
@@ -312,7 +312,7 @@ SECTION .text
shufps %12, %10, %10, q2200 ; cos00224466
shufps %13, %11, %11, q1133 ; wim77553311
movshdup %10, %10 ; cos11335577
- shufps %11, %11, q0022 ; wim66442200
+ shufps %11, %11, %11, q0022 ; wim66442200
%if %1 && mmsize == 32
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 %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 %16, %11 ; m2[0123]reim * wim7531 odd
- mulps %15, %13 ; m3[0123]reim * wim7531 even
- mulps %17, %11 ; m3[0123]reim * wim7531 odd
+ mulps %14, %14, %13 ; m2[0123]reim * wim7531 even
+ mulps %16, %16, %11 ; m2[0123]reim * wim7531 odd
+ mulps %15, %15, %13 ; m3[0123]reim * wim7531 even
+ mulps %17, %17, %11 ; m3[0123]reim * wim7531 odd
%else
mulps %14, %6, %13 ; m2,3[01]reim * wim7531 even
mulps %16, %8, %11 ; m2,3[01]reim * wim7531 odd
mulps %15, %7, %13 ; m2,3[23]reim * wim7531 even
mulps %17, %9, %11 ; m2,3[23]reim * wim7531 odd
; 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 %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 %9, %9, q2301 ; m2[2].imre, m2[3].imre, m3[2].imre, m3[3].imre odd
+ shufps %6, %6, %6, q2301 ; m2[0].imre, m2[1].imre, m3[0].imre, m3[1].imre even
+ shufps %8, %8, %8, q2301 ; m2[0].imre, m2[1].imre, m3[0].imre, m3[1].imre odd
+ shufps %7, %7, %7, q2301 ; m2[2].imre, m2[3].imre, m3[2].imre, m3[3].imre even
+ shufps %9, %9, %9, q2301 ; m2[2].imre, m2[3].imre, m3[2].imre, m3[3].imre odd
%endif
%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
movaps %13, [mask_pmpmpmpm] ; "subaddps? pfft, who needs that!"
%else
- mulps %6, %12 ; m2,3[01]imre * cos0246
- mulps %8, %10 ; m2,3[01]imre * cos0246
+ mulps %6, %6, %12 ; m2,3[01]imre * cos0246
+ mulps %8, %8, %10 ; m2,3[01]imre * cos0246
movaps %13, [mask_pmpmpmpm] ; "subaddps? pfft, who needs that!"
- mulps %7, %12 ; m2,3[23]reim * cos0246
- mulps %9, %10 ; m2,3[23]reim * cos0246
- addsubps %6, %14 ; w[0..8]
- addsubps %8, %16 ; w[0..8]
- xorps %15, %13 ; +-m2,3[23]imre * wim7531
- xorps %17, %13 ; +-m2,3[23]imre * wim7531
- addps %7, %15 ; j[0..8]
- addps %9, %17 ; j[0..8]
+ mulps %7, %7, %12 ; m2,3[23]reim * cos0246
+ mulps %9, %9, %10 ; m2,3[23]reim * cos0246
+ addsubps %6, %6, %14 ; w[0..8]
+ addsubps %8, %8, %16 ; w[0..8]
+ xorps %15, %15, %13 ; +-m2,3[23]imre * wim7531
+ xorps %17, %17, %13 ; +-m2,3[23]imre * wim7531
+ addps %7, %7, %15 ; j[0..8]
+ addps %9, %9, %17 ; j[0..8]
%endif
addps %14, %6, %7 ; t10235476 even
@@ -361,20 +361,20 @@ SECTION .text
subps %15, %6, %7 ; +-r[0..7] even
subps %17, %8, %9 ; +-r[0..7] odd
- shufps %14, %14, q2301 ; t[0..7] even
- shufps %16, %16, q2301 ; t[0..7] odd
- xorps %15, %13 ; r[0..7] even
- xorps %17, %13 ; r[0..7] odd
+ shufps %14, %14, %14, q2301 ; t[0..7] even
+ shufps %16, %16, %16, q2301 ; t[0..7] odd
+ xorps %15, %15, %13 ; r[0..7] even
+ xorps %17, %17, %13 ; r[0..7] odd
subps %6, %2, %14 ; m2,3[01] even
subps %8, %4, %16 ; m2,3[01] odd
subps %7, %3, %15 ; m2,3[23] even
subps %9, %5, %17 ; m2,3[23] odd
- addps %2, %14 ; m0 even
- addps %4, %16 ; m0 odd
- addps %3, %15 ; m1 even
- addps %5, %17 ; m1 odd
+ addps %2, %2, %14 ; m0 even
+ addps %4, %4, %16 ; m0 odd
+ addps %3, %3, %15 ; m1 even
+ addps %5, %5, %17 ; m1 odd
%endmacro
; Same as above, only does one parity at a time, takes 3 temporary registers,
@@ -390,35 +390,35 @@ SECTION .text
%endif
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 %5, %5, q2301 ; m2[2].imre, m2[3].imre, m3[2].imre, m3[3].imre even
+ shufps %4, %4, %4, q2301 ; m2[0].imre, m2[1].imre, m3[0].imre, m3[1].imre even
+ shufps %5, %5, %5, q2301 ; m2[2].imre, m2[3].imre, m3[2].imre, m3[3].imre even
%if cpuflag(fma3)
fmaddsubps %4, %4, %8, %10 ; w[0..8] even
fmsubaddps %5, %5, %8, %9 ; j[0..8] even
movaps %10, [mask_pmpmpmpm]
%else
- mulps %4, %8 ; m2,3[01]imre * cos0246
- mulps %5, %8 ; m2,3[23]reim * cos0246
- addsubps %4, %10 ; w[0..8]
+ mulps %4, %4, %8 ; m2,3[01]imre * cos0246
+ mulps %5, %5, %8 ; m2,3[23]reim * cos0246
+ addsubps %4, %4, %10 ; w[0..8]
movaps %10, [mask_pmpmpmpm]
- xorps %9, %10 ; +-m2,3[23]imre * wim7531
- addps %5, %9 ; j[0..8]
+ xorps %9, %9, %10 ; +-m2,3[23]imre * wim7531
+ addps %5, %5, %9 ; j[0..8]
%endif
addps %8, %4, %5 ; t10235476
subps %9, %4, %5 ; +-r[0..7]
- shufps %8, %8, q2301 ; t[0..7]
- xorps %9, %10 ; r[0..7]
+ shufps %8, %8, %8, q2301 ; t[0..7]
+ xorps %9, %9, %10 ; r[0..7]
subps %4, %2, %8 ; %3,3[01]
subps %5, %3, %9 ; %3,3[23]
- addps %2, %8 ; m0
- addps %3, %9 ; m1
+ addps %2, %2, %8 ; m0
+ addps %3, %3, %9 ; m1
%endmacro
; Same as above, tries REALLY hard to use 2 temporary registers.
@@ -431,14 +431,14 @@ SECTION .text
shufps %9, %7, %7, q0022 ; wim66442200
%endif
- mulps %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
+ mulps %9, %9, %4 ; m2,3[01]reim * wim7531 even
+ shufps %4, %4, %4, q2301 ; m2[0].imre, m2[1].imre, m3[0].imre, m3[1].imre even
%if cpuflag(fma3)
fmaddsubps %4, %4, %8, %9 ; w[0..8] even
%else
- mulps %4, %8 ; m2,3[01]imre * cos0246
- addsubps %4, %9 ; w[0..8]
+ mulps %4, %4, %8 ; m2,3[01]imre * cos0246
+ addsubps %4, %4, %9 ; w[0..8]
%endif
%if %1
@@ -447,27 +447,27 @@ SECTION .text
shufps %9, %7, %7, q0022 ; wim66442200
%endif
- mulps %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
+ mulps %9, %9, %5 ; m2,3[23]reim * wim7531 even
+ shufps %5, %5, %5, q2301 ; m2[2].imre, m2[3].imre, m3[2].imre, m3[3].imre even
%if cpuflag (fma3)
fmsubaddps %5, %5, %8, %9 ; j[0..8] even
%else
- mulps %5, %8 ; m2,3[23]reim * cos0246
- xorps %9, [mask_pmpmpmpm] ; +-m2,3[23]imre * wim7531
- addps %5, %9 ; j[0..8]
+ mulps %5, %5, %8 ; m2,3[23]reim * cos0246
+ xorps %9, %9, [mask_pmpmpmpm]; +-m2,3[23]imre * wim7531
+ addps %5, %5, %9 ; j[0..8]
%endif
addps %8, %4, %5 ; t10235476
subps %9, %4, %5 ; +-r[0..7]
- shufps %8, %8, q2301 ; t[0..7]
- xorps %9, [mask_pmpmpmpm] ; r[0..7]
+ shufps %8, %8, %8, q2301 ; t[0..7]
+ xorps %9, %9, [mask_pmpmpmpm] ; r[0..7]
subps %4, %2, %8 ; %3,3[01]
subps %5, %3, %9 ; %3,3[23]
- addps %2, %8 ; m0
- addps %3, %9 ; m1
+ addps %2, %2, %8 ; m0
+ addps %3, %3, %9 ; m1
%endmacro
%macro SPLIT_RADIX_COMBINE_64 0
@@ -591,10 +591,10 @@ SECTION .text
unpckhpd m11, m1, m3
unpckhpd m12, m4, m6
unpckhpd m13, m5, m7
- unpcklpd m0, m2
- unpcklpd m1, m3
- unpcklpd m4, m6
- unpcklpd m5, m7
+ unpcklpd m0, m0, m2
+ unpcklpd m1, m1, m3
+ unpcklpd m4, m4, m6
+ unpcklpd m5, m5, m7
vextractf128 [outq + (0 + 0 + %1)*mmsize + %6 + 0], m0, 0
vextractf128 [outq + (0 + 0 + %1)*mmsize + %6 + 16], m10, 0
@@ -639,10 +639,10 @@ SECTION .text
unpcklpd m9, m1, m3
unpcklpd m10, m4, m6
unpcklpd m11, m5, m7
- unpckhpd m0, m2
- unpckhpd m1, m3
- unpckhpd m4, m6
- unpckhpd m5, m7
+ unpckhpd m0, m0, m2
+ unpckhpd m1, m1, m3
+ unpckhpd m4, m4, m6
+ unpckhpd m5, m5, m7
vextractf128 [outq + (2 + 0 + %1)*mmsize + %6 + 0], m8, 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
shufps m2, m1, m0, q3210
- shufps m0, m1, q3210
+ shufps m0, m0, m1, q3210
movaps m1, m2
%endif
FFT4 m0, m1, m2
unpcklpd m2, m0, m1
- unpckhpd m0, m1
+ unpckhpd m0, m0, m1
movaps [outq + 0*mmsize], m2
movaps [outq + 1*mmsize], m0
@@ -721,8 +721,8 @@ cglobal fft8_float, 4, 4, 6, ctx, out, in, tmp
unpcklpd m4, m0, m3
unpcklpd m5, m1, m2
- unpckhpd m0, m3
- unpckhpd m1, m2
+ unpckhpd m0, m0, m3
+ unpckhpd m1, m1, m2
movups [outq + 0*mmsize], m4
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
unpcklpd m2, m0, m1
- unpckhpd m0, m1
+ unpckhpd m0, m0, m1
; Around 2% faster than 2x vperm2f128 + 2x movapd
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 m4, m0, m2
- unpckhpd m1, m3
- unpckhpd m0, m2
+ unpckhpd m1, m1, m3
+ unpckhpd m0, m0, m2
vextractf128 [outq + 16*0], m4, 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 m8, m0, m2
unpcklpd m11, m4, m6
- unpckhpd m1, m3
- unpckhpd m5, m7
- unpckhpd m0, m2
- unpckhpd m4, m6
+ unpckhpd m1, m1, m3
+ unpckhpd m5, m5, m7
+ unpckhpd m0, m0, m2
+ unpckhpd m4, m4, m6
vextractf128 [outq + 16* 0], m8, 0
vextractf128 [outq + 16* 1], m0, 0
@@ -858,7 +858,7 @@ ALIGN 16
POP lenq
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]
%if %0 > 1
@@ -989,7 +989,7 @@ ALIGN 16
POP lenq
sub outq, 24*mmsize
- mov rtabq, ff_cos_128_float
+ lea rtabq, [ff_cos_128_float]
lea itabq, [rtabq + 128 - 4*7]
cmp tgtq, 128
@@ -1016,7 +1016,7 @@ ALIGN 16
POP lenq
sub outq, 48*mmsize
- mov rtabq, ff_cos_256_float
+ lea rtabq, [ff_cos_256_float]
lea itabq, [rtabq + 256 - 4*7]
cmp tgtq, 256
@@ -1044,7 +1044,7 @@ ALIGN 16
POP lenq
sub outq, 96*mmsize
- mov rtabq, ff_cos_512_float
+ lea rtabq, [ff_cos_512_float]
lea itabq, [rtabq + 512 - 4*7]
cmp tgtq, 512
@@ -1079,7 +1079,7 @@ ALIGN 16
POP lenq
sub outq, 192*mmsize
- mov rtabq, ff_cos_1024_float
+ lea rtabq, [ff_cos_1024_float]
lea itabq, [rtabq + 1024 - 4*7]
cmp tgtq, 1024
@@ -1137,10 +1137,10 @@ FFT_SPLIT_RADIX_DEF 131072
unpcklpd tmp2, m1, m3
unpcklpd tw_o, tx1_e0, tx1_o0
unpcklpd tw_e, tx2_e0, tx2_o0
- unpckhpd m0, m2
- unpckhpd m1, m3
- unpckhpd tx1_e0, tx1_o0
- unpckhpd tx2_e0, tx2_o0
+ unpckhpd m0, m0, m2
+ unpckhpd m1, m1, m3
+ unpckhpd tx1_e0, tx1_e0, tx1_o0
+ unpckhpd tx2_e0, tx2_e0, tx2_o0
vextractf128 [outq + 0*mmsize + 0], tmp1, 0
vextractf128 [outq + 0*mmsize + 16], m0, 0
@@ -1178,10 +1178,10 @@ FFT_SPLIT_RADIX_DEF 131072
unpcklpd tmp2, m2, m3
unpcklpd tw_e, tx1_e1, tx1_o1
unpcklpd tw_o, tx2_e1, tx2_o1
- unpckhpd m0, m1
- unpckhpd m2, m3
- unpckhpd tx1_e1, tx1_o1
- unpckhpd tx2_e1, tx2_o1
+ unpckhpd m0, m0, m1
+ unpckhpd m2, m2, m3
+ unpckhpd tx1_e1, tx1_e1, tx1_o1
+ unpckhpd tx2_e1, tx2_e1, tx2_o1
vextractf128 [outq + 2*mmsize + 0], tmp1, 0
vextractf128 [outq + 2*mmsize + 16], m0, 0
@@ -1208,5 +1208,7 @@ FFT_SPLIT_RADIX_DEF 131072
%if ARCH_X86_64
FFT_SPLIT_RADIX_FN avx
+%if HAVE_AVX2_EXTERNAL
FFT_SPLIT_RADIX_FN avx2
%endif
+%endif