swscale: convert hscale to cpuflags().
authorRonald S. Bultje <rsbultje@gmail.com>
Mon, 12 Mar 2012 01:11:40 +0000 (18:11 -0700)
committerRonald S. Bultje <rsbultje@gmail.com>
Thu, 15 Mar 2012 03:09:53 +0000 (20:09 -0700)
libswscale/x86/scale.asm

index 2387d0266b31173ea26ffdaa96f87887b28c5512..4e6d9c376262558924e0f85e34b1ef77d1b6ae99 100644 (file)
@@ -48,9 +48,9 @@ SECTION .text
 ; the first pixel is given in filterPos[nOutputPixel].
 ;-----------------------------------------------------------------------------
 
 ; 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
 %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]
 %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]
     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
     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
 %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
     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
     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
     punpckldq     m0, m4
     punpckhdq     m1, m4
     paddd         m0, m1
-%elifidn %5, sse2
+%elif notcpuflag(ssse3) ; sse2
 %if %1 == 8
 %define mex m6
 %else
 %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
 %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
 %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
     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
     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 %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
     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
 %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
     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
 
 %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
 %if mmsize == 8
-SCALE_FUNC %1, %2, X, X,  %3, 7, %4
+SCALE_FUNC %1, %2, X, X,  7, %3
 %else
 %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
 
 %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
 %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
 %endmacro
 
 %if ARCH_X86_32
-INIT_MMX
-SCALE_FUNCS2 mmx,   0, 0, 0
+INIT_MMX mmx
+SCALE_FUNCS2 0, 0, 0
 %endif
 %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