mirror of
https://mirror.skon.top/https://github.com/FFmpeg/FFmpeg
synced 2026-04-20 12:50:49 +08:00
swscale/x86/ops: simplify SWS_OP_CLEAR patterns
Mark the components to be cleared, not the components to be preserved. Signed-off-by: Niklas Haas <git@haasn.dev>
This commit is contained in:
@@ -141,7 +141,7 @@ static int setup_clear(const SwsImplParams *params, SwsImplResult *out)
|
|||||||
DECL_ASM(U8, SWS_COMP_ALL, p##X##Y##Z##W##_clear##EXT, \
|
DECL_ASM(U8, SWS_COMP_ALL, p##X##Y##Z##W##_clear##EXT, \
|
||||||
.op = SWS_OP_CLEAR, \
|
.op = SWS_OP_CLEAR, \
|
||||||
.setup = setup_clear, \
|
.setup = setup_clear, \
|
||||||
.clear.mask = SWS_COMP_MASK(!X, !Y, !Z, !W), \
|
.clear.mask = SWS_COMP_MASK(X, Y, Z, W), \
|
||||||
);
|
);
|
||||||
|
|
||||||
#define DECL_SWIZZLE(EXT, X, Y, Z, W) \
|
#define DECL_SWIZZLE(EXT, X, Y, Z, W) \
|
||||||
@@ -589,16 +589,16 @@ static int setup_filter_4x4_h(const SwsImplParams *params, SwsImplResult *out)
|
|||||||
DECL_CLEAR_ZERO(EXT, 0) \
|
DECL_CLEAR_ZERO(EXT, 0) \
|
||||||
DECL_CLEAR_ZERO(EXT, 1) \
|
DECL_CLEAR_ZERO(EXT, 1) \
|
||||||
DECL_CLEAR_ZERO(EXT, 3) \
|
DECL_CLEAR_ZERO(EXT, 3) \
|
||||||
DECL_CLEAR(EXT, 1, 1, 1, 0) \
|
DECL_CLEAR(EXT, 0, 0, 0, 1) \
|
||||||
DECL_CLEAR(EXT, 0, 1, 1, 1) \
|
|
||||||
DECL_CLEAR(EXT, 0, 0, 1, 1) \
|
|
||||||
DECL_CLEAR(EXT, 1, 0, 0, 1) \
|
|
||||||
DECL_CLEAR(EXT, 1, 1, 0, 0) \
|
|
||||||
DECL_CLEAR(EXT, 0, 1, 0, 1) \
|
|
||||||
DECL_CLEAR(EXT, 1, 0, 1, 0) \
|
|
||||||
DECL_CLEAR(EXT, 1, 0, 0, 0) \
|
DECL_CLEAR(EXT, 1, 0, 0, 0) \
|
||||||
DECL_CLEAR(EXT, 0, 1, 0, 0) \
|
DECL_CLEAR(EXT, 1, 1, 0, 0) \
|
||||||
DECL_CLEAR(EXT, 0, 0, 1, 0) \
|
DECL_CLEAR(EXT, 0, 1, 1, 0) \
|
||||||
|
DECL_CLEAR(EXT, 0, 0, 1, 1) \
|
||||||
|
DECL_CLEAR(EXT, 1, 0, 1, 0) \
|
||||||
|
DECL_CLEAR(EXT, 0, 1, 0, 1) \
|
||||||
|
DECL_CLEAR(EXT, 0, 1, 1, 1) \
|
||||||
|
DECL_CLEAR(EXT, 1, 0, 1, 1) \
|
||||||
|
DECL_CLEAR(EXT, 1, 1, 0, 1) \
|
||||||
\
|
\
|
||||||
static const SwsOpTable ops8##EXT = { \
|
static const SwsOpTable ops8##EXT = { \
|
||||||
.cpu_flags = AV_CPU_FLAG_##FLAG, \
|
.cpu_flags = AV_CPU_FLAG_##FLAG, \
|
||||||
@@ -656,16 +656,16 @@ static const SwsOpTable ops8##EXT = {
|
|||||||
&op_clear_zero0##EXT, \
|
&op_clear_zero0##EXT, \
|
||||||
&op_clear_zero1##EXT, \
|
&op_clear_zero1##EXT, \
|
||||||
&op_clear_zero3##EXT, \
|
&op_clear_zero3##EXT, \
|
||||||
REF_PATTERN(clear##EXT, 1, 1, 1, 0), \
|
REF_PATTERN(clear##EXT, 0, 0, 0, 1), \
|
||||||
REF_PATTERN(clear##EXT, 0, 1, 1, 1), \
|
|
||||||
REF_PATTERN(clear##EXT, 0, 0, 1, 1), \
|
|
||||||
REF_PATTERN(clear##EXT, 1, 0, 0, 1), \
|
|
||||||
REF_PATTERN(clear##EXT, 1, 1, 0, 0), \
|
|
||||||
REF_PATTERN(clear##EXT, 0, 1, 0, 1), \
|
|
||||||
REF_PATTERN(clear##EXT, 1, 0, 1, 0), \
|
|
||||||
REF_PATTERN(clear##EXT, 1, 0, 0, 0), \
|
REF_PATTERN(clear##EXT, 1, 0, 0, 0), \
|
||||||
REF_PATTERN(clear##EXT, 0, 1, 0, 0), \
|
REF_PATTERN(clear##EXT, 1, 1, 0, 0), \
|
||||||
REF_PATTERN(clear##EXT, 0, 0, 1, 0), \
|
REF_PATTERN(clear##EXT, 0, 1, 1, 0), \
|
||||||
|
REF_PATTERN(clear##EXT, 0, 0, 1, 1), \
|
||||||
|
REF_PATTERN(clear##EXT, 1, 0, 1, 0), \
|
||||||
|
REF_PATTERN(clear##EXT, 0, 1, 0, 1), \
|
||||||
|
REF_PATTERN(clear##EXT, 0, 1, 1, 1), \
|
||||||
|
REF_PATTERN(clear##EXT, 1, 0, 1, 1), \
|
||||||
|
REF_PATTERN(clear##EXT, 1, 1, 0, 1), \
|
||||||
NULL \
|
NULL \
|
||||||
}, \
|
}, \
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -602,47 +602,45 @@ IF V2, mova %3, %2
|
|||||||
CONTINUE tmp0q
|
CONTINUE tmp0q
|
||||||
%endmacro
|
%endmacro
|
||||||
|
|
||||||
; note: the pattern is inverted for these functions; i.e. X=1 implies that we
|
|
||||||
; *keep* the X component, not that we clear it
|
|
||||||
%macro clear_generic 0
|
%macro clear_generic 0
|
||||||
op clear
|
op clear
|
||||||
LOAD_CONT tmp0q
|
LOAD_CONT tmp0q
|
||||||
%if cpuflag(avx2)
|
%if cpuflag(avx2)
|
||||||
IF !X, vpbroadcastd mx, [implq + SwsOpImpl.priv + 0]
|
IF X, vpbroadcastd mx, [implq + SwsOpImpl.priv + 0]
|
||||||
IF !Y, vpbroadcastd my, [implq + SwsOpImpl.priv + 4]
|
IF Y, vpbroadcastd my, [implq + SwsOpImpl.priv + 4]
|
||||||
IF !Z, vpbroadcastd mz, [implq + SwsOpImpl.priv + 8]
|
IF Z, vpbroadcastd mz, [implq + SwsOpImpl.priv + 8]
|
||||||
IF !W, vpbroadcastd mw, [implq + SwsOpImpl.priv + 12]
|
IF W, vpbroadcastd mw, [implq + SwsOpImpl.priv + 12]
|
||||||
%else ; !cpuflag(avx2)
|
%else ; !cpuflag(avx2)
|
||||||
IF !X, movd mx, [implq + SwsOpImpl.priv + 0]
|
IF X, movd mx, [implq + SwsOpImpl.priv + 0]
|
||||||
IF !Y, movd my, [implq + SwsOpImpl.priv + 4]
|
IF Y, movd my, [implq + SwsOpImpl.priv + 4]
|
||||||
IF !Z, movd mz, [implq + SwsOpImpl.priv + 8]
|
IF Z, movd mz, [implq + SwsOpImpl.priv + 8]
|
||||||
IF !W, movd mw, [implq + SwsOpImpl.priv + 12]
|
IF W, movd mw, [implq + SwsOpImpl.priv + 12]
|
||||||
IF !X, pshufd mx, mx, 0
|
IF X, pshufd mx, mx, 0
|
||||||
IF !Y, pshufd my, my, 0
|
IF Y, pshufd my, my, 0
|
||||||
IF !Z, pshufd mz, mz, 0
|
IF Z, pshufd mz, mz, 0
|
||||||
IF !W, pshufd mw, mw, 0
|
IF W, pshufd mw, mw, 0
|
||||||
%endif
|
%endif
|
||||||
%if V2
|
%if V2
|
||||||
IF !X, mova mx2, mx
|
IF X, mova mx2, mx
|
||||||
IF !Y, mova my2, my
|
IF Y, mova my2, my
|
||||||
IF !Z, mova mz2, mz
|
IF Z, mova mz2, mz
|
||||||
IF !W, mova mw2, mw
|
IF W, mova mw2, mw
|
||||||
%endif
|
%endif
|
||||||
CONTINUE tmp0q
|
CONTINUE tmp0q
|
||||||
%endmacro
|
%endmacro
|
||||||
|
|
||||||
%macro clear_funcs 0
|
%macro clear_funcs 0
|
||||||
decl_pattern 1, 1, 1, 0, clear_generic
|
decl_pattern 0, 0, 0, 1, clear_generic
|
||||||
decl_pattern 0, 1, 1, 1, clear_generic
|
|
||||||
decl_pattern 0, 0, 1, 1, clear_generic
|
|
||||||
decl_pattern 1, 0, 1, 1, clear_generic
|
|
||||||
decl_pattern 1, 0, 0, 1, clear_generic
|
|
||||||
decl_pattern 1, 1, 0, 0, clear_generic
|
|
||||||
decl_pattern 0, 1, 0, 1, clear_generic
|
|
||||||
decl_pattern 1, 0, 1, 0, clear_generic
|
|
||||||
decl_pattern 1, 0, 0, 0, clear_generic
|
decl_pattern 1, 0, 0, 0, clear_generic
|
||||||
|
decl_pattern 1, 1, 0, 0, clear_generic
|
||||||
decl_pattern 0, 1, 0, 0, clear_generic
|
decl_pattern 0, 1, 0, 0, clear_generic
|
||||||
decl_pattern 0, 0, 1, 0, clear_generic
|
decl_pattern 0, 1, 1, 0, clear_generic
|
||||||
|
decl_pattern 0, 0, 1, 1, clear_generic
|
||||||
|
decl_pattern 1, 0, 1, 0, clear_generic
|
||||||
|
decl_pattern 0, 1, 0, 1, clear_generic
|
||||||
|
decl_pattern 0, 1, 1, 1, clear_generic
|
||||||
|
decl_pattern 1, 0, 1, 1, clear_generic
|
||||||
|
decl_pattern 1, 1, 0, 1, clear_generic
|
||||||
%endmacro
|
%endmacro
|
||||||
|
|
||||||
;---------------------------------------------------------
|
;---------------------------------------------------------
|
||||||
|
|||||||
Reference in New Issue
Block a user