summaryrefslogtreecommitdiffstats
path: root/libswscale
diff options
context:
space:
mode:
Diffstat (limited to 'libswscale')
-rw-r--r--libswscale/x86/scale.asm72
1 files changed, 37 insertions, 35 deletions
diff --git a/libswscale/x86/scale.asm b/libswscale/x86/scale.asm
index 2387d02..4e6d9c3 100644
--- a/libswscale/x86/scale.asm
+++ b/libswscale/x86/scale.asm
@@ -48,9 +48,9 @@ SECTION .text
; the first pixel is given in filterPos[nOutputPixel].
;-----------------------------------------------------------------------------
-; SCALE_FUNC source_width, intermediate_nbits, filtersize, filtersuffix, opt, n_args, n_xmm
-%macro SCALE_FUNC 7
-cglobal hscale%1to%2_%4_%5, %6, 7, %7
+; SCALE_FUNC source_width, intermediate_nbits, filtersize, filtersuffix, n_args, n_xmm
+%macro SCALE_FUNC 6
+cglobal hscale%1to%2_%4, %5, 7, %6
%if ARCH_X86_64
movsxd r2, r2d
%define mov32 movsxd
@@ -60,7 +60,7 @@ cglobal hscale%1to%2_%4_%5, %6, 7, %7
%if %2 == 19
%if mmsize == 8 ; mmx
mova m2, [max_19bit_int]
-%elifidn %5, sse4
+%elif cpuflag(sse4)
mova m2, [max_19bit_int]
%else ; ssse3/sse2
mova m2, [max_19bit_flt]
@@ -124,7 +124,7 @@ cglobal hscale%1to%2_%4_%5, %6, 7, %7
movd m5, [r3+r6*srcmul] ; src[filterPos[3] + {0,1,2,3}]
punpckldq m0, m4
punpckldq m1, m5
-%endif ; %1 == 8 && %5 <= ssse
+%endif ; %1 == 8
%endif ; mmsize == 8/16
%if %1 == 8
punpcklbw m0, m3 ; byte -> word
@@ -146,7 +146,7 @@ cglobal hscale%1to%2_%4_%5, %6, 7, %7
punpckldq m0, m1
punpckhdq m4, m1
paddd m0, m4
-%elifidn %5, sse2
+%elif notcpuflag(ssse3) ; sse2
mova m4, m0
shufps m0, m1, 10001000b
shufps m4, m1, 11011101b
@@ -201,7 +201,7 @@ cglobal hscale%1to%2_%4_%5, %6, 7, %7
punpckldq m0, m4
punpckhdq m1, m4
paddd m0, m1
-%elifidn %5, sse2
+%elif notcpuflag(ssse3) ; sse2
%if %1 == 8
%define mex m6
%else
@@ -304,7 +304,7 @@ cglobal hscale%1to%2_%4_%5, %6, 7, %7
%else ; %1 == 8
movd m1, [src_reg+(r1x+r6sub)*srcmul]
punpckldq m0, m1
-%endif ; %1 == 8 && %5 <= ssse
+%endif ; %1 == 8
%if %1 == 8
punpcklbw m0, m3
%endif ; %1 == 8
@@ -323,7 +323,7 @@ cglobal hscale%1to%2_%4_%5, %6, 7, %7
punpckhdq m0, m5
paddd m0, m4
%else ; mmsize == 16
-%ifidn %5, sse2
+%if notcpuflag(ssse3) ; sse2
mova m1, m4
punpcklqdq m4, m5
punpckhqdq m1, m5
@@ -334,7 +334,7 @@ cglobal hscale%1to%2_%4_%5, %6, 7, %7
%ifidn %4, X4
paddd m4, m0
%endif ; %3 == X4
-%ifidn %5, sse2
+%if notcpuflag(ssse3) ; sse2
pshufd m4, m4, 11011000b
movhlps m0, m4
paddd m0, m4
@@ -364,7 +364,7 @@ cglobal hscale%1to%2_%4_%5, %6, 7, %7
%else ; %2 == 19
%if mmsize == 8
PMINSD_MMX m0, m2, m4
-%elifidn %5, sse4
+%elif cpuflag(sse4)
pminsd m0, m2
%else ; sse2/ssse3
cvtdq2ps m0, m0
@@ -396,37 +396,39 @@ cglobal hscale%1to%2_%4_%5, %6, 7, %7
%endif ; %3 ==/!= X
%endmacro
-; SCALE_FUNCS source_width, intermediate_nbits, opt, n_xmm
-%macro SCALE_FUNCS 4
-SCALE_FUNC %1, %2, 4, 4, %3, 6, %4
-SCALE_FUNC %1, %2, 8, 8, %3, 6, %4
+; SCALE_FUNCS source_width, intermediate_nbits, n_xmm
+%macro SCALE_FUNCS 3
+SCALE_FUNC %1, %2, 4, 4, 6, %3
+SCALE_FUNC %1, %2, 8, 8, 6, %3
%if mmsize == 8
-SCALE_FUNC %1, %2, X, X, %3, 7, %4
+SCALE_FUNC %1, %2, X, X, 7, %3
%else
-SCALE_FUNC %1, %2, X, X4, %3, 7, %4
-SCALE_FUNC %1, %2, X, X8, %3, 7, %4
+SCALE_FUNC %1, %2, X, X4, 7, %3
+SCALE_FUNC %1, %2, X, X8, 7, %3
%endif
%endmacro
-; SCALE_FUNCS2 opt, 8_xmm_args, 9to10_xmm_args, 16_xmm_args
-%macro SCALE_FUNCS2 4
-%ifnidn %1, sse4
-SCALE_FUNCS 8, 15, %1, %2
-SCALE_FUNCS 9, 15, %1, %3
-SCALE_FUNCS 10, 15, %1, %3
-SCALE_FUNCS 16, 15, %1, %4
+; SCALE_FUNCS2 8_xmm_args, 9to10_xmm_args, 16_xmm_args
+%macro SCALE_FUNCS2 3
+%if notcpuflag(sse4)
+SCALE_FUNCS 8, 15, %1
+SCALE_FUNCS 9, 15, %2
+SCALE_FUNCS 10, 15, %2
+SCALE_FUNCS 16, 15, %3
%endif ; !sse4
-SCALE_FUNCS 8, 19, %1, %2
-SCALE_FUNCS 9, 19, %1, %3
-SCALE_FUNCS 10, 19, %1, %3
-SCALE_FUNCS 16, 19, %1, %4
+SCALE_FUNCS 8, 19, %1
+SCALE_FUNCS 9, 19, %2
+SCALE_FUNCS 10, 19, %2
+SCALE_FUNCS 16, 19, %3
%endmacro
%if ARCH_X86_32
-INIT_MMX
-SCALE_FUNCS2 mmx, 0, 0, 0
+INIT_MMX mmx
+SCALE_FUNCS2 0, 0, 0
%endif
-INIT_XMM
-SCALE_FUNCS2 sse2, 6, 7, 8
-SCALE_FUNCS2 ssse3, 6, 6, 8
-SCALE_FUNCS2 sse4, 6, 6, 8
+INIT_XMM sse2
+SCALE_FUNCS2 6, 7, 8
+INIT_XMM ssse3
+SCALE_FUNCS2 6, 6, 8
+INIT_XMM sse4
+SCALE_FUNCS2 6, 6, 8
OpenPOWER on IntegriCloud