mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2024-12-23 12:43:46 +02:00
swscale: convert hscale to cpuflags().
This commit is contained in:
parent
e0febda22d
commit
aba7a827aa
@ -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
|
||||
|
Loading…
Reference in New Issue
Block a user