| @@ -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 | |||