]> git.sesse.net Git - ffmpeg/blobdiff - libavcodec/x86/dct32_sse.asm
x86: dct32: port to cpuflags
[ffmpeg] / libavcodec / x86 / dct32_sse.asm
index e3c8a455459eec1706463f4dbcefd03bb33c1132..9d6169ca66da3a1bdd728a4717f63487fb84c27c 100644 (file)
@@ -42,39 +42,24 @@ ps_cos_vec: dd   0.500603,  0.505471,  0.515447,  0.531043
 align 32
 ps_p1p1m1m1: dd 0, 0, 0x80000000, 0x80000000, 0, 0, 0x80000000, 0x80000000
 
-%macro BUTTERFLY_SSE 4
-    movaps %4, %1
-    subps  %1, %2
-    addps  %2, %4
-    mulps  %1, %3
-%endmacro
-
-%macro BUTTERFLY_AVX 4
-    vsubps  %4, %1, %2
-    vaddps  %2, %2, %1
-    vmulps  %1, %4, %3
-%endmacro
-
-%macro BUTTERFLY0_SSE 5
-    movaps %4, %1
-    shufps %1, %1, %5
-    xorps  %4, %2
-    addps  %1, %4
-    mulps  %1, %3
+%macro BUTTERFLY 4
+    subps  %4, %1, %2
+    addps  %2, %2, %1
+    mulps  %1, %4, %3
 %endmacro
 
-%macro BUTTERFLY0_SSE2 5
+%macro BUTTERFLY0 5
+%if cpuflag(sse2) && notcpuflag(avx)
     pshufd %4, %1, %5
     xorps  %1, %2
     addps  %1, %4
     mulps  %1, %3
-%endmacro
-
-%macro BUTTERFLY0_AVX 5
-    vshufps %4, %1, %1, %5
-    vxorps  %1, %1, %2
-    vaddps  %4, %4, %1
-    vmulps  %1, %4, %3
+%else
+    shufps %4, %1, %1, %5
+    xorps  %1, %1, %2
+    addps  %4, %4, %1
+    mulps  %1, %4, %3
+%endif
 %endmacro
 
 %macro BUTTERFLY2 4
@@ -206,14 +191,11 @@ ps_p1p1m1m1: dd 0, 0, 0x80000000, 0x80000000, 0, 0, 0x80000000, 0x80000000
     movss [outq+116], m6
 %endmacro
 
-%define BUTTERFLY  BUTTERFLY_AVX
-%define BUTTERFLY0 BUTTERFLY0_AVX
-
-INIT_YMM
+INIT_YMM avx
 SECTION_TEXT
 %if HAVE_AVX
 ; void ff_dct32_float_avx(FFTSample *out, const FFTSample *in)
-cglobal dct32_float_avx, 2,3,8, out, in, tmp
+cglobal dct32_float, 2,3,8, out, in, tmp
     ; pass 1
     vmovaps     m4, [inq+0]
     vinsertf128 m5, m5, [inq+96], 1
@@ -286,9 +268,6 @@ INIT_XMM
     RET
 %endif
 
-%define BUTTERFLY  BUTTERFLY_SSE
-%define BUTTERFLY0 BUTTERFLY0_SSE
-
 %if ARCH_X86_64
 %define SPILL SWAP
 %define UNSPILL SWAP
@@ -411,10 +390,9 @@ INIT_XMM
 %endif
 
 
-INIT_XMM
-%macro DCT32_FUNC 1
 ; void ff_dct32_float_sse(FFTSample *out, const FFTSample *in)
-cglobal dct32_float_%1, 2,3,16, out, in, tmp
+%macro DCT32_FUNC 0
+cglobal dct32_float, 2, 3, 16, out, in, tmp
     ; pass 1
 
     movaps      m0, [inq+0]
@@ -498,18 +476,16 @@ cglobal dct32_float_%1, 2,3,16, out, in, tmp
     RET
 %endmacro
 
-%macro LOAD_INV_SSE 2
+%macro LOAD_INV 2
+%if cpuflag(sse2)
+    pshufd      %1, %2, 0x1b
+%elif cpuflag(sse)
     movaps      %1, %2
     shufps      %1, %1, 0x1b
+%endif
 %endmacro
 
-%define LOAD_INV LOAD_INV_SSE
-DCT32_FUNC sse
-
-%macro LOAD_INV_SSE2 2
-    pshufd      %1, %2, 0x1b
-%endmacro
-
-%define LOAD_INV LOAD_INV_SSE2
-%define BUTTERFLY0 BUTTERFLY0_SSE2
-DCT32_FUNC sse2
+INIT_XMM sse
+DCT32_FUNC
+INIT_XMM sse2
+DCT32_FUNC