This is an automated email from the git hooks/post-receive script. Git pushed a commit to branch master in repository ffmpeg.
commit 44e1b60c6acf0511222f4e0892f3545696bb7769 Author: Niklas Haas <[email protected]> AuthorDate: Wed Jul 8 00:53:09 2026 +0200 Commit: Niklas Haas <[email protected]> CommitDate: Tue Jul 14 12:24:01 2026 +0000 swscale/uops: consolidate SWS_UOP_{PERMUTE,COPY,MOVE} Rather than having two uops for the C reference code and a separate uop for the x86 backend, we can just implement the C reference using the same register-register assignment logic. This results in only slightly worse codegen, since the compiler is smart enough to eliminate the unnecessary copies. The main downside is the fact that we need to allocate extra stack space to back-fill the remaining (unused) pointers. In theory, we could do this more efficiently by re-using unused *input* registers directly, but that would require a lot of reliance on compile-time constant folding teasing apart the entire register index tracking loop and duplicate check, so this is a useful middle ground. On platforms like x86, we still don't care about the PERMUTE vs COPY distinction, but it's also harmless (2-3 extra lines to instantiate the underlying MOVE macro on both uop variants). Finally, we need to add a mask to the move uops to keep track of which outputs are actually needed (especially for checkasm). Though it does result in the rather unfortunate downside that it bloats the names of the uop names. The op lists change to reflect the new representation, e.g.: rgb24 16x16 -> bgr24 16x16: [ u8 +++X] SWS_OP_READ : 3 elem(s) packed >> 0 min: {0 0 0 _}, max: {255 255 255 _} [ u8 +++X] SWS_OP_SWIZZLE : 2103 min: {0 0 0 _}, max: {255 255 255 _} [ u8 XXXX] SWS_OP_WRITE : 3 elem(s) packed >> 0 ('X' unused, 'z' byteswapped, '=' copied, '$' const, '+' integer, '0' zero) translated micro-ops: u8_read_packed_xyz - u8_permute_zyxw + u8_permute_xyzw_txz_xzt u8_write_packed_xyz Signed-off-by: Niklas Haas <[email protected]> --- libswscale/uops.c | 84 ++----- libswscale/uops.h | 15 +- libswscale/uops_list.h | 1 - libswscale/uops_macros.h | 470 +++++++++++++++------------------------ libswscale/uops_macros_gen.c | 12 +- libswscale/uops_tmpl.c | 72 +++--- libswscale/x86/ops.c | 8 +- libswscale/x86/ops_int.asm | 3 +- libswscale/x86/uops_macros.asm.h | 3 +- tests/checkasm/sw_ops.c | 8 +- tests/ref/fate/sws-ops-list | 2 +- 11 files changed, 261 insertions(+), 417 deletions(-) diff --git a/libswscale/uops.c b/libswscale/uops.c index 2c9916d4ed..8ad53abe7e 100644 --- a/libswscale/uops.c +++ b/libswscale/uops.c @@ -102,18 +102,7 @@ void ff_sws_uop_name(const SwsUOp *op, char buf[SWS_UOP_NAME_MAX]) av_bprintf(&bp, "_%u", par->shift.amount); break; case SWS_UOP_PERMUTE: - av_bprint_chars(&bp, '_', 1); - for (int i = 0; i < 4; i++) - av_bprint_chars(&bp, "xyzw"[par->swizzle.in[i]], 1); - break; case SWS_UOP_COPY: - av_bprint_chars(&bp, '_', 1); - for (int i = 0; i < 4; i++) { - if (SWS_COMP_TEST(op->mask, i)) - av_bprint_chars(&bp, "xyzw"[par->swizzle.in[i]], 1); - } - break; - case SWS_UOP_MOVE: av_bprint_chars(&bp, '_', 1); for (int i = 0; i < par->move.num_moves; i++) av_bprint_chars(&bp, "txyzw"[par->move.dst[i] + 1], 1); @@ -351,16 +340,17 @@ static int count_idx(const int *arr, size_t size, int val) return num; } -static int translate_move(SwsUOpList *ops, const SwsOp *op) +static int translate_swizzle(SwsUOpList *ops, const SwsOp *op) { SwsUOp uop = { - .uop = SWS_UOP_MOVE, + .uop = SWS_UOP_PERMUTE, .type = pixel_type_to_int(op->type), + .mask = ff_sws_comp_mask_needed(op), }; SwsMoveUOp *par = &uop.par.move; /* Mask of components that are not yet satisfied */ - SwsCompMask todo = ff_sws_comp_mask_needed(op); + SwsCompMask todo = uop.mask; for (int i = 0; i < 4; i++) { if (op->swizzle.in[i] == i) todo &= ~SWS_COMP(i); @@ -419,62 +409,26 @@ static int translate_move(SwsUOpList *ops, const SwsOp *op) idx[dst] = idx[src]; } - return ff_sws_uop_list_append(ops, &uop); -} - -static int translate_swizzle(SwsUOpList *ops, SwsUOpFlags flags, const SwsOp *op) -{ - if (flags & SWS_UOP_FLAG_MOVE) - return translate_move(ops, op); - - SwsUOp uop = { - .type = pixel_type_to_int(op->type), - .uop = SWS_UOP_PERMUTE, - .par.swizzle.in = {0, 1, 2, 3}, - }; - - SwsCompMask needed = ff_sws_comp_mask_needed(op); + /* Check for duplicates in the final register map */ SwsCompMask seen = 0; for (int i = 0; i < 4; i++) { - if (!SWS_COMP_TEST(needed, i)) + if (!SWS_COMP_TEST(uop.mask, i)) continue; - const int src = op->swizzle.in[i]; - if (SWS_COMP_TEST(seen, src)) - uop.uop = SWS_UOP_COPY; /* Swizzle mask contains duplicates */ - seen |= SWS_COMP(src); - uop.par.swizzle.in[i] = src; - } - - if (uop.uop == SWS_UOP_PERMUTE) { - /* Prevent overlap by moving unused components to unseen indices */ - for (int i = 0; i < 4; i++) { - if (SWS_COMP_TEST(needed, i)) - continue; - - /* Prefer identity mapping if possible */ - int unused = i; - if (SWS_COMP_TEST(seen, i)) { - for (int j = 0; j < 4; j++) { - if (!SWS_COMP_TEST(seen, j)) { - unused = j; - break; - } - } - } - - uop.par.swizzle.in[i] = unused; - seen |= SWS_COMP(unused); + av_assert2(idx[i] >= 0); /* should be no tmp register */ + const SwsCompMask bit = SWS_COMP(idx[i]); + if (seen & bit) { + uop.uop = SWS_UOP_COPY; + break; } + seen |= bit; } - if (uop.uop == SWS_UOP_COPY) { - /* Remove remaining trivial / identity components from the mask */ - for (int i = 0; i < 4; i++) { - if (uop.par.swizzle.in[i] == i) - needed &= ~SWS_COMP(i); - } - - uop.mask = needed; + /* Add any extra unused components to the mask, to prevent generating + * duplicate uops like permute_xyz_txy_xyt and permute_xyzw_txy_xyt */ + for (int i = 0; i < 4; i++) { + const SwsCompMask bit = SWS_COMP(i); + if (!(seen & bit) && idx[i] == i) + uop.mask |= bit; } return ff_sws_uop_list_append(ops, &uop); @@ -597,7 +551,7 @@ static int translate_op(SwsContext *ctx, SwsUOpList *uops, SwsUOpFlags flags, case SWS_OP_WRITE: return translate_rw_op(ctx, uops, flags, op); case SWS_OP_SWIZZLE: - return translate_swizzle(uops, flags, op); + return translate_swizzle(uops, op); case SWS_OP_DITHER: return translate_dither_op(uops, op); case SWS_OP_LINEAR: diff --git a/libswscale/uops.h b/libswscale/uops.h index bea017268a..1c4d9b36fc 100644 --- a/libswscale/uops.h +++ b/libswscale/uops.h @@ -95,7 +95,6 @@ typedef uint32_t SwsUOpFlags; typedef enum SwsUOpFlagBits { SWS_UOP_FLAG_NONE = 0, SWS_UOP_FLAG_FMA = (1 << 0), /* platform supports FMA ops */ - SWS_UOP_FLAG_MOVE = (1 << 1), /* platform supports SWS_UOP_MOVE */ } SwsUOpFlagBits; typedef enum SwsUOpType { @@ -116,10 +115,9 @@ typedef enum SwsUOpType { SWS_UOP_WRITE_NIBBLE, /* fractional write (4 bits) to single plane */ SWS_UOP_WRITE_BIT, /* fractional write (1 bit) to single plane */ - /* Data rearrangement uops; mask = non-trivial and needed components */ - SWS_UOP_PERMUTE, /* rearrange components (no duplicates) */ - SWS_UOP_COPY, /* copy/duplicate components */ - SWS_UOP_MOVE, /* series of register-register assignments */ + /* Data rearrangement uops; mask = needed or trivial components */ + SWS_UOP_PERMUTE, /* permute pointers (no duplicates) */ + SWS_UOP_COPY, /* permute data (may contain duplicates) */ /* Data conversion / manipulation uops; mask = affected components */ SWS_UOP_SWAP_BYTES, /* swap byte order in components */ @@ -159,10 +157,6 @@ typedef struct SwsShiftUOp { uint8_t amount; } SwsShiftUOp; -typedef struct SwsSwizzleUOp { - uint8_t in[4]; /* input component for each output component */ -} SwsSwizzleUOp; - typedef struct SwsMoveUOp { /* The worst case number of moves (for two independent cycles) */ #define SWS_UOP_MOVE_MAX 6 @@ -210,8 +204,7 @@ int ff_sws_dither_height(const SwsDitherUOp *dither); typedef union SwsUOpParams { SwsFilterUOp filter; /* for SWS_UOP_READ_*_FV/FH */ SwsShiftUOp shift; - SwsSwizzleUOp swizzle; - SwsMoveUOp move; + SwsMoveUOp move; /* for SWS_UOP_PERMUTE and SWS_UOP_COPY */ SwsPackUOp pack; SwsClearUOp clear; SwsLinearUOp lin; diff --git a/libswscale/uops_list.h b/libswscale/uops_list.h index 793678b1d3..047ead2750 100644 --- a/libswscale/uops_list.h +++ b/libswscale/uops_list.h @@ -36,7 +36,6 @@ ENTRY(SWS_UOP_WRITE_BIT, "write_bit") \ ENTRY(SWS_UOP_PERMUTE, "permute") \ ENTRY(SWS_UOP_COPY, "copy") \ - ENTRY(SWS_UOP_MOVE, "move") \ ENTRY(SWS_UOP_SWAP_BYTES, "swap_bytes") \ ENTRY(SWS_UOP_EXPAND_BIT, "expand_bit") \ ENTRY(SWS_UOP_EXPAND_PAIR, "expand_pair") \ diff --git a/libswscale/uops_macros.h b/libswscale/uops_macros.h index a382988361..b1ead287b6 100644 --- a/libswscale/uops_macros.h +++ b/libswscale/uops_macros.h @@ -106,119 +106,75 @@ #define SWS_FOR_STRUCT_U8_WRITE_BIT(MACRO, ...) \ MACRO(__VA_ARGS__, u8_write_bit_x , .type = SWS_PIXEL_U8 , .uop = SWS_UOP_WRITE_BIT , .mask = 0x1) #define SWS_FOR_U8_PERMUTE(MACRO, ...) \ - MACRO(__VA_ARGS__, u8_permute_xzyw , SWS_PIXEL_U8 , SWS_UOP_PERMUTE , 0x0, 0, 2, 1, 3) \ - MACRO(__VA_ARGS__, u8_permute_xzwy , SWS_PIXEL_U8 , SWS_UOP_PERMUTE , 0x0, 0, 2, 3, 1) \ - MACRO(__VA_ARGS__, u8_permute_xwzy , SWS_PIXEL_U8 , SWS_UOP_PERMUTE , 0x0, 0, 3, 2, 1) \ - MACRO(__VA_ARGS__, u8_permute_yxzw , SWS_PIXEL_U8 , SWS_UOP_PERMUTE , 0x0, 1, 0, 2, 3) \ - MACRO(__VA_ARGS__, u8_permute_yzxw , SWS_PIXEL_U8 , SWS_UOP_PERMUTE , 0x0, 1, 2, 0, 3) \ - MACRO(__VA_ARGS__, u8_permute_yzwx , SWS_PIXEL_U8 , SWS_UOP_PERMUTE , 0x0, 1, 2, 3, 0) \ - MACRO(__VA_ARGS__, u8_permute_ywzx , SWS_PIXEL_U8 , SWS_UOP_PERMUTE , 0x0, 1, 3, 2, 0) \ - MACRO(__VA_ARGS__, u8_permute_zxyw , SWS_PIXEL_U8 , SWS_UOP_PERMUTE , 0x0, 2, 0, 1, 3) \ - MACRO(__VA_ARGS__, u8_permute_zyxw , SWS_PIXEL_U8 , SWS_UOP_PERMUTE , 0x0, 2, 1, 0, 3) \ - MACRO(__VA_ARGS__, u8_permute_zywx , SWS_PIXEL_U8 , SWS_UOP_PERMUTE , 0x0, 2, 1, 3, 0) \ - MACRO(__VA_ARGS__, u8_permute_zwxy , SWS_PIXEL_U8 , SWS_UOP_PERMUTE , 0x0, 2, 3, 0, 1) \ - MACRO(__VA_ARGS__, u8_permute_wxyz , SWS_PIXEL_U8 , SWS_UOP_PERMUTE , 0x0, 3, 0, 1, 2) \ - MACRO(__VA_ARGS__, u8_permute_wxzy , SWS_PIXEL_U8 , SWS_UOP_PERMUTE , 0x0, 3, 0, 2, 1) \ - MACRO(__VA_ARGS__, u8_permute_wyxz , SWS_PIXEL_U8 , SWS_UOP_PERMUTE , 0x0, 3, 1, 0, 2) \ - MACRO(__VA_ARGS__, u8_permute_wyzx , SWS_PIXEL_U8 , SWS_UOP_PERMUTE , 0x0, 3, 1, 2, 0) \ - MACRO(__VA_ARGS__, u8_permute_wzxy , SWS_PIXEL_U8 , SWS_UOP_PERMUTE , 0x0, 3, 2, 0, 1) \ - MACRO(__VA_ARGS__, u8_permute_wzyx , SWS_PIXEL_U8 , SWS_UOP_PERMUTE , 0x0, 3, 2, 1, 0) + MACRO(__VA_ARGS__, u8_permute_xy_xy_zw , SWS_PIXEL_U8 , SWS_UOP_PERMUTE , 0x3, 2, 0, 1, 0, 0, 0, 0, 2, 3, 0, 0, 0, 0) \ + MACRO(__VA_ARGS__, u8_permute_xyz_x_w , SWS_PIXEL_U8 , SWS_UOP_PERMUTE , 0x7, 1, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0) \ + MACRO(__VA_ARGS__, u8_permute_xyz_y_w , SWS_PIXEL_U8 , SWS_UOP_PERMUTE , 0x7, 1, 1, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0) \ + MACRO(__VA_ARGS__, u8_permute_xyz_xy_yw , SWS_PIXEL_U8 , SWS_UOP_PERMUTE , 0x7, 2, 0, 1, 0, 0, 0, 0, 1, 3, 0, 0, 0, 0) \ + MACRO(__VA_ARGS__, u8_permute_xyz_yx_xw , SWS_PIXEL_U8 , SWS_UOP_PERMUTE , 0x7, 2, 1, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0) \ + MACRO(__VA_ARGS__, u8_permute_xyz_xyz_yzw , SWS_PIXEL_U8 , SWS_UOP_PERMUTE , 0x7, 3, 0, 1, 2, 0, 0, 0, 1, 2, 3, 0, 0, 0) \ + MACRO(__VA_ARGS__, u8_permute_xyz_xtyz_wyzt , SWS_PIXEL_U8 , SWS_UOP_PERMUTE , 0x7, 4, 0, -1, 1, 2, 0, 0, 3, 1, 2, -1, 0, 0) \ + MACRO(__VA_ARGS__, u8_permute_xyw_x_z , SWS_PIXEL_U8 , SWS_UOP_PERMUTE , 0xb, 1, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0) \ + MACRO(__VA_ARGS__, u8_permute_xzw_x_y , SWS_PIXEL_U8 , SWS_UOP_PERMUTE , 0xd, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0) \ + MACRO(__VA_ARGS__, u8_permute_yzw_y_x , SWS_PIXEL_U8 , SWS_UOP_PERMUTE , 0xe, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0) \ + MACRO(__VA_ARGS__, u8_permute_yzw_z_x , SWS_PIXEL_U8 , SWS_UOP_PERMUTE , 0xe, 1, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0) \ + MACRO(__VA_ARGS__, u8_permute_yzw_w_x , SWS_PIXEL_U8 , SWS_UOP_PERMUTE , 0xe, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0) \ + MACRO(__VA_ARGS__, u8_permute_yzw_wz_zx , SWS_PIXEL_U8 , SWS_UOP_PERMUTE , 0xe, 2, 3, 2, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0) \ + MACRO(__VA_ARGS__, u8_permute_yzw_wyz_yzx , SWS_PIXEL_U8 , SWS_UOP_PERMUTE , 0xe, 3, 3, 1, 2, 0, 0, 0, 1, 2, 0, 0, 0, 0) \ + MACRO(__VA_ARGS__, u8_permute_yzw_wzy_zyx , SWS_PIXEL_U8 , SWS_UOP_PERMUTE , 0xe, 3, 3, 2, 1, 0, 0, 0, 2, 1, 0, 0, 0, 0) \ + MACRO(__VA_ARGS__, u8_permute_yzw_wtyz_xyzt , SWS_PIXEL_U8 , SWS_UOP_PERMUTE , 0xe, 4, 3, -1, 1, 2, 0, 0, 0, 1, 2, -1, 0, 0) \ + MACRO(__VA_ARGS__, u8_permute_xyzw_txy_xyt , SWS_PIXEL_U8 , SWS_UOP_PERMUTE , 0xf, 3, -1, 0, 1, 0, 0, 0, 0, 1, -1, 0, 0, 0) \ + MACRO(__VA_ARGS__, u8_permute_xyzw_txz_xzt , SWS_PIXEL_U8 , SWS_UOP_PERMUTE , 0xf, 3, -1, 0, 2, 0, 0, 0, 0, 2, -1, 0, 0, 0) \ + MACRO(__VA_ARGS__, u8_permute_xyzw_tyz_yzt , SWS_PIXEL_U8 , SWS_UOP_PERMUTE , 0xf, 3, -1, 1, 2, 0, 0, 0, 1, 2, -1, 0, 0, 0) \ + MACRO(__VA_ARGS__, u8_permute_xyzw_tyw_ywt , SWS_PIXEL_U8 , SWS_UOP_PERMUTE , 0xf, 3, -1, 1, 3, 0, 0, 0, 1, 3, -1, 0, 0, 0) \ + MACRO(__VA_ARGS__, u8_permute_xyzw_txyz_xyzt , SWS_PIXEL_U8 , SWS_UOP_PERMUTE , 0xf, 4, -1, 0, 1, 2, 0, 0, 0, 1, 2, -1, 0, 0) \ + MACRO(__VA_ARGS__, u8_permute_xyzw_txzy_xzyt , SWS_PIXEL_U8 , SWS_UOP_PERMUTE , 0xf, 4, -1, 0, 2, 1, 0, 0, 0, 2, 1, -1, 0, 0) \ + MACRO(__VA_ARGS__, u8_permute_xyzw_txzw_xzwt , SWS_PIXEL_U8 , SWS_UOP_PERMUTE , 0xf, 4, -1, 0, 2, 3, 0, 0, 0, 2, 3, -1, 0, 0) \ + MACRO(__VA_ARGS__, u8_permute_xyzw_txwz_xwzt , SWS_PIXEL_U8 , SWS_UOP_PERMUTE , 0xf, 4, -1, 0, 3, 2, 0, 0, 0, 3, 2, -1, 0, 0) \ + MACRO(__VA_ARGS__, u8_permute_xyzw_tyzw_yzwt , SWS_PIXEL_U8 , SWS_UOP_PERMUTE , 0xf, 4, -1, 1, 2, 3, 0, 0, 1, 2, 3, -1, 0, 0) \ + MACRO(__VA_ARGS__, u8_permute_xyzw_txyzw_xyzwt , SWS_PIXEL_U8 , SWS_UOP_PERMUTE , 0xf, 5, -1, 0, 1, 2, 3, 0, 0, 1, 2, 3, -1, 0) \ + MACRO(__VA_ARGS__, u8_permute_xyzw_txwyz_xwyzt , SWS_PIXEL_U8 , SWS_UOP_PERMUTE , 0xf, 5, -1, 0, 3, 1, 2, 0, 0, 3, 1, 2, -1, 0) \ + MACRO(__VA_ARGS__, u8_permute_xyzw_txwzy_xwzyt , SWS_PIXEL_U8 , SWS_UOP_PERMUTE , 0xf, 5, -1, 0, 3, 2, 1, 0, 0, 3, 2, 1, -1, 0) \ + MACRO(__VA_ARGS__, u8_permute_xyzw_txwtyz_xwtyzt , SWS_PIXEL_U8 , SWS_UOP_PERMUTE , 0xf, 6, -1, 0, 3, -1, 1, 2, 0, 3, -1, 1, 2, -1) #define SWS_FOR_STRUCT_U8_PERMUTE(MACRO, ...) \ - MACRO(__VA_ARGS__, u8_permute_xzyw , .type = SWS_PIXEL_U8 , .uop = SWS_UOP_PERMUTE , .mask = 0x0, .par.swizzle.in = {0, 2, 1, 3}) \ - MACRO(__VA_ARGS__, u8_permute_xzwy , .type = SWS_PIXEL_U8 , .uop = SWS_UOP_PERMUTE , .mask = 0x0, .par.swizzle.in = {0, 2, 3, 1}) \ - MACRO(__VA_ARGS__, u8_permute_xwzy , .type = SWS_PIXEL_U8 , .uop = SWS_UOP_PERMUTE , .mask = 0x0, .par.swizzle.in = {0, 3, 2, 1}) \ - MACRO(__VA_ARGS__, u8_permute_yxzw , .type = SWS_PIXEL_U8 , .uop = SWS_UOP_PERMUTE , .mask = 0x0, .par.swizzle.in = {1, 0, 2, 3}) \ - MACRO(__VA_ARGS__, u8_permute_yzxw , .type = SWS_PIXEL_U8 , .uop = SWS_UOP_PERMUTE , .mask = 0x0, .par.swizzle.in = {1, 2, 0, 3}) \ - MACRO(__VA_ARGS__, u8_permute_yzwx , .type = SWS_PIXEL_U8 , .uop = SWS_UOP_PERMUTE , .mask = 0x0, .par.swizzle.in = {1, 2, 3, 0}) \ - MACRO(__VA_ARGS__, u8_permute_ywzx , .type = SWS_PIXEL_U8 , .uop = SWS_UOP_PERMUTE , .mask = 0x0, .par.swizzle.in = {1, 3, 2, 0}) \ - MACRO(__VA_ARGS__, u8_permute_zxyw , .type = SWS_PIXEL_U8 , .uop = SWS_UOP_PERMUTE , .mask = 0x0, .par.swizzle.in = {2, 0, 1, 3}) \ - MACRO(__VA_ARGS__, u8_permute_zyxw , .type = SWS_PIXEL_U8 , .uop = SWS_UOP_PERMUTE , .mask = 0x0, .par.swizzle.in = {2, 1, 0, 3}) \ - MACRO(__VA_ARGS__, u8_permute_zywx , .type = SWS_PIXEL_U8 , .uop = SWS_UOP_PERMUTE , .mask = 0x0, .par.swizzle.in = {2, 1, 3, 0}) \ - MACRO(__VA_ARGS__, u8_permute_zwxy , .type = SWS_PIXEL_U8 , .uop = SWS_UOP_PERMUTE , .mask = 0x0, .par.swizzle.in = {2, 3, 0, 1}) \ - MACRO(__VA_ARGS__, u8_permute_wxyz , .type = SWS_PIXEL_U8 , .uop = SWS_UOP_PERMUTE , .mask = 0x0, .par.swizzle.in = {3, 0, 1, 2}) \ - MACRO(__VA_ARGS__, u8_permute_wxzy , .type = SWS_PIXEL_U8 , .uop = SWS_UOP_PERMUTE , .mask = 0x0, .par.swizzle.in = {3, 0, 2, 1}) \ - MACRO(__VA_ARGS__, u8_permute_wyxz , .type = SWS_PIXEL_U8 , .uop = SWS_UOP_PERMUTE , .mask = 0x0, .par.swizzle.in = {3, 1, 0, 2}) \ - MACRO(__VA_ARGS__, u8_permute_wyzx , .type = SWS_PIXEL_U8 , .uop = SWS_UOP_PERMUTE , .mask = 0x0, .par.swizzle.in = {3, 1, 2, 0}) \ - MACRO(__VA_ARGS__, u8_permute_wzxy , .type = SWS_PIXEL_U8 , .uop = SWS_UOP_PERMUTE , .mask = 0x0, .par.swizzle.in = {3, 2, 0, 1}) \ - MACRO(__VA_ARGS__, u8_permute_wzyx , .type = SWS_PIXEL_U8 , .uop = SWS_UOP_PERMUTE , .mask = 0x0, .par.swizzle.in = {3, 2, 1, 0}) + MACRO(__VA_ARGS__, u8_permute_xy_xy_zw , .type = SWS_PIXEL_U8 , .uop = SWS_UOP_PERMUTE , .mask = 0x3, .par.move.num_moves = 2, .par.move.dst = {0, 1, 0, 0, 0, 0}, .par.move.src = {2, 3, 0, 0, 0, 0}) \ + MACRO(__VA_ARGS__, u8_permute_xyz_x_w , .type = SWS_PIXEL_U8 , .uop = SWS_UOP_PERMUTE , .mask = 0x7, .par.move.num_moves = 1, .par.move.dst = {0, 0, 0, 0, 0, 0}, .par.move.src = {3, 0, 0, 0, 0, 0}) \ + MACRO(__VA_ARGS__, u8_permute_xyz_y_w , .type = SWS_PIXEL_U8 , .uop = SWS_UOP_PERMUTE , .mask = 0x7, .par.move.num_moves = 1, .par.move.dst = {1, 0, 0, 0, 0, 0}, .par.move.src = {3, 0, 0, 0, 0, 0}) \ + MACRO(__VA_ARGS__, u8_permute_xyz_xy_yw , .type = SWS_PIXEL_U8 , .uop = SWS_UOP_PERMUTE , .mask = 0x7, .par.move.num_moves = 2, .par.move.dst = {0, 1, 0, 0, 0, 0}, .par.move.src = {1, 3, 0, 0, 0, 0}) \ + MACRO(__VA_ARGS__, u8_permute_xyz_yx_xw , .type = SWS_PIXEL_U8 , .uop = SWS_UOP_PERMUTE , .mask = 0x7, .par.move.num_moves = 2, .par.move.dst = {1, 0, 0, 0, 0, 0}, .par.move.src = {0, 3, 0, 0, 0, 0}) \ + MACRO(__VA_ARGS__, u8_permute_xyz_xyz_yzw , .type = SWS_PIXEL_U8 , .uop = SWS_UOP_PERMUTE , .mask = 0x7, .par.move.num_moves = 3, .par.move.dst = {0, 1, 2, 0, 0, 0}, .par.move.src = {1, 2, 3, 0, 0, 0}) \ + MACRO(__VA_ARGS__, u8_permute_xyz_xtyz_wyzt , .type = SWS_PIXEL_U8 , .uop = SWS_UOP_PERMUTE , .mask = 0x7, .par.move.num_moves = 4, .par.move.dst = {0, -1, 1, 2, 0, 0}, .par.move.src = {3, 1, 2, -1, 0, 0}) \ + MACRO(__VA_ARGS__, u8_permute_xyw_x_z , .type = SWS_PIXEL_U8 , .uop = SWS_UOP_PERMUTE , .mask = 0xb, .par.move.num_moves = 1, .par.move.dst = {0, 0, 0, 0, 0, 0}, .par.move.src = {2, 0, 0, 0, 0, 0}) \ + MACRO(__VA_ARGS__, u8_permute_xzw_x_y , .type = SWS_PIXEL_U8 , .uop = SWS_UOP_PERMUTE , .mask = 0xd, .par.move.num_moves = 1, .par.move.dst = {0, 0, 0, 0, 0, 0}, .par.move.src = {1, 0, 0, 0, 0, 0}) \ + MACRO(__VA_ARGS__, u8_permute_yzw_y_x , .type = SWS_PIXEL_U8 , .uop = SWS_UOP_PERMUTE , .mask = 0xe, .par.move.num_moves = 1, .par.move.dst = {1, 0, 0, 0, 0, 0}, .par.move.src = {0, 0, 0, 0, 0, 0}) \ + MACRO(__VA_ARGS__, u8_permute_yzw_z_x , .type = SWS_PIXEL_U8 , .uop = SWS_UOP_PERMUTE , .mask = 0xe, .par.move.num_moves = 1, .par.move.dst = {2, 0, 0, 0, 0, 0}, .par.move.src = {0, 0, 0, 0, 0, 0}) \ + MACRO(__VA_ARGS__, u8_permute_yzw_w_x , .type = SWS_PIXEL_U8 , .uop = SWS_UOP_PERMUTE , .mask = 0xe, .par.move.num_moves = 1, .par.move.dst = {3, 0, 0, 0, 0, 0}, .par.move.src = {0, 0, 0, 0, 0, 0}) \ + MACRO(__VA_ARGS__, u8_permute_yzw_wz_zx , .type = SWS_PIXEL_U8 , .uop = SWS_UOP_PERMUTE , .mask = 0xe, .par.move.num_moves = 2, .par.move.dst = {3, 2, 0, 0, 0, 0}, .par.move.src = {2, 0, 0, 0, 0, 0}) \ + MACRO(__VA_ARGS__, u8_permute_yzw_wyz_yzx , .type = SWS_PIXEL_U8 , .uop = SWS_UOP_PERMUTE , .mask = 0xe, .par.move.num_moves = 3, .par.move.dst = {3, 1, 2, 0, 0, 0}, .par.move.src = {1, 2, 0, 0, 0, 0}) \ + MACRO(__VA_ARGS__, u8_permute_yzw_wzy_zyx , .type = SWS_PIXEL_U8 , .uop = SWS_UOP_PERMUTE , .mask = 0xe, .par.move.num_moves = 3, .par.move.dst = {3, 2, 1, 0, 0, 0}, .par.move.src = {2, 1, 0, 0, 0, 0}) \ + MACRO(__VA_ARGS__, u8_permute_yzw_wtyz_xyzt , .type = SWS_PIXEL_U8 , .uop = SWS_UOP_PERMUTE , .mask = 0xe, .par.move.num_moves = 4, .par.move.dst = {3, -1, 1, 2, 0, 0}, .par.move.src = {0, 1, 2, -1, 0, 0}) \ + MACRO(__VA_ARGS__, u8_permute_xyzw_txy_xyt , .type = SWS_PIXEL_U8 , .uop = SWS_UOP_PERMUTE , .mask = 0xf, .par.move.num_moves = 3, .par.move.dst = {-1, 0, 1, 0, 0, 0}, .par.move.src = {0, 1, -1, 0, 0, 0}) \ + MACRO(__VA_ARGS__, u8_permute_xyzw_txz_xzt , .type = SWS_PIXEL_U8 , .uop = SWS_UOP_PERMUTE , .mask = 0xf, .par.move.num_moves = 3, .par.move.dst = {-1, 0, 2, 0, 0, 0}, .par.move.src = {0, 2, -1, 0, 0, 0}) \ + MACRO(__VA_ARGS__, u8_permute_xyzw_tyz_yzt , .type = SWS_PIXEL_U8 , .uop = SWS_UOP_PERMUTE , .mask = 0xf, .par.move.num_moves = 3, .par.move.dst = {-1, 1, 2, 0, 0, 0}, .par.move.src = {1, 2, -1, 0, 0, 0}) \ + MACRO(__VA_ARGS__, u8_permute_xyzw_tyw_ywt , .type = SWS_PIXEL_U8 , .uop = SWS_UOP_PERMUTE , .mask = 0xf, .par.move.num_moves = 3, .par.move.dst = {-1, 1, 3, 0, 0, 0}, .par.move.src = {1, 3, -1, 0, 0, 0}) \ + MACRO(__VA_ARGS__, u8_permute_xyzw_txyz_xyzt , .type = SWS_PIXEL_U8 , .uop = SWS_UOP_PERMUTE , .mask = 0xf, .par.move.num_moves = 4, .par.move.dst = {-1, 0, 1, 2, 0, 0}, .par.move.src = {0, 1, 2, -1, 0, 0}) \ + MACRO(__VA_ARGS__, u8_permute_xyzw_txzy_xzyt , .type = SWS_PIXEL_U8 , .uop = SWS_UOP_PERMUTE , .mask = 0xf, .par.move.num_moves = 4, .par.move.dst = {-1, 0, 2, 1, 0, 0}, .par.move.src = {0, 2, 1, -1, 0, 0}) \ + MACRO(__VA_ARGS__, u8_permute_xyzw_txzw_xzwt , .type = SWS_PIXEL_U8 , .uop = SWS_UOP_PERMUTE , .mask = 0xf, .par.move.num_moves = 4, .par.move.dst = {-1, 0, 2, 3, 0, 0}, .par.move.src = {0, 2, 3, -1, 0, 0}) \ + MACRO(__VA_ARGS__, u8_permute_xyzw_txwz_xwzt , .type = SWS_PIXEL_U8 , .uop = SWS_UOP_PERMUTE , .mask = 0xf, .par.move.num_moves = 4, .par.move.dst = {-1, 0, 3, 2, 0, 0}, .par.move.src = {0, 3, 2, -1, 0, 0}) \ + MACRO(__VA_ARGS__, u8_permute_xyzw_tyzw_yzwt , .type = SWS_PIXEL_U8 , .uop = SWS_UOP_PERMUTE , .mask = 0xf, .par.move.num_moves = 4, .par.move.dst = {-1, 1, 2, 3, 0, 0}, .par.move.src = {1, 2, 3, -1, 0, 0}) \ + MACRO(__VA_ARGS__, u8_permute_xyzw_txyzw_xyzwt , .type = SWS_PIXEL_U8 , .uop = SWS_UOP_PERMUTE , .mask = 0xf, .par.move.num_moves = 5, .par.move.dst = {-1, 0, 1, 2, 3, 0}, .par.move.src = {0, 1, 2, 3, -1, 0}) \ + MACRO(__VA_ARGS__, u8_permute_xyzw_txwyz_xwyzt , .type = SWS_PIXEL_U8 , .uop = SWS_UOP_PERMUTE , .mask = 0xf, .par.move.num_moves = 5, .par.move.dst = {-1, 0, 3, 1, 2, 0}, .par.move.src = {0, 3, 1, 2, -1, 0}) \ + MACRO(__VA_ARGS__, u8_permute_xyzw_txwzy_xwzyt , .type = SWS_PIXEL_U8 , .uop = SWS_UOP_PERMUTE , .mask = 0xf, .par.move.num_moves = 5, .par.move.dst = {-1, 0, 3, 2, 1, 0}, .par.move.src = {0, 3, 2, 1, -1, 0}) \ + MACRO(__VA_ARGS__, u8_permute_xyzw_txwtyz_xwtyzt , .type = SWS_PIXEL_U8 , .uop = SWS_UOP_PERMUTE , .mask = 0xf, .par.move.num_moves = 6, .par.move.dst = {-1, 0, 3, -1, 1, 2}, .par.move.src = {0, 3, -1, 1, 2, -1}) #define SWS_FOR_U8_COPY(MACRO, ...) \ - MACRO(__VA_ARGS__, u8_copy_yz_xx , SWS_PIXEL_U8 , SWS_UOP_COPY , 0x6, 0, 0, 0, 3) \ - MACRO(__VA_ARGS__, u8_copy_yzw_xxx , SWS_PIXEL_U8 , SWS_UOP_COPY , 0xe, 0, 0, 0, 0) \ - MACRO(__VA_ARGS__, u8_copy_yzw_xxy , SWS_PIXEL_U8 , SWS_UOP_COPY , 0xe, 0, 0, 0, 1) \ - MACRO(__VA_ARGS__, u8_copy_xyzw_yxxx , SWS_PIXEL_U8 , SWS_UOP_COPY , 0xf, 1, 0, 0, 0) + MACRO(__VA_ARGS__, u8_copy_yzw_yzw_xxx , SWS_PIXEL_U8 , SWS_UOP_COPY , 0xe, 3, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0) \ + MACRO(__VA_ARGS__, u8_copy_xyzw_yz_xx , SWS_PIXEL_U8 , SWS_UOP_COPY , 0xf, 2, 1, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0) \ + MACRO(__VA_ARGS__, u8_copy_xyzw_zwy_xyx , SWS_PIXEL_U8 , SWS_UOP_COPY , 0xf, 3, 2, 3, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0) \ + MACRO(__VA_ARGS__, u8_copy_xyzw_zxyw_xyzz , SWS_PIXEL_U8 , SWS_UOP_COPY , 0xf, 4, 2, 0, 1, 3, 0, 0, 0, 1, 2, 2, 0, 0) #define SWS_FOR_STRUCT_U8_COPY(MACRO, ...) \ - MACRO(__VA_ARGS__, u8_copy_yz_xx , .type = SWS_PIXEL_U8 , .uop = SWS_UOP_COPY , .mask = 0x6, .par.swizzle.in = {0, 0, 0, 3}) \ - MACRO(__VA_ARGS__, u8_copy_yzw_xxx , .type = SWS_PIXEL_U8 , .uop = SWS_UOP_COPY , .mask = 0xe, .par.swizzle.in = {0, 0, 0, 0}) \ - MACRO(__VA_ARGS__, u8_copy_yzw_xxy , .type = SWS_PIXEL_U8 , .uop = SWS_UOP_COPY , .mask = 0xe, .par.swizzle.in = {0, 0, 0, 1}) \ - MACRO(__VA_ARGS__, u8_copy_xyzw_yxxx , .type = SWS_PIXEL_U8 , .uop = SWS_UOP_COPY , .mask = 0xf, .par.swizzle.in = {1, 0, 0, 0}) -#define SWS_FOR_U8_MOVE(MACRO, ...) \ - MACRO(__VA_ARGS__, u8_move_x_y , SWS_PIXEL_U8 , SWS_UOP_MOVE , 0x0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0) \ - MACRO(__VA_ARGS__, u8_move_x_z , SWS_PIXEL_U8 , SWS_UOP_MOVE , 0x0, 1, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0) \ - MACRO(__VA_ARGS__, u8_move_x_w , SWS_PIXEL_U8 , SWS_UOP_MOVE , 0x0, 1, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0) \ - MACRO(__VA_ARGS__, u8_move_y_x , SWS_PIXEL_U8 , SWS_UOP_MOVE , 0x0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0) \ - MACRO(__VA_ARGS__, u8_move_y_w , SWS_PIXEL_U8 , SWS_UOP_MOVE , 0x0, 1, 1, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0) \ - MACRO(__VA_ARGS__, u8_move_z_x , SWS_PIXEL_U8 , SWS_UOP_MOVE , 0x0, 1, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0) \ - MACRO(__VA_ARGS__, u8_move_w_x , SWS_PIXEL_U8 , SWS_UOP_MOVE , 0x0, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0) \ - MACRO(__VA_ARGS__, u8_move_xy_yw , SWS_PIXEL_U8 , SWS_UOP_MOVE , 0x0, 2, 0, 1, 0, 0, 0, 0, 1, 3, 0, 0, 0, 0) \ - MACRO(__VA_ARGS__, u8_move_xy_zw , SWS_PIXEL_U8 , SWS_UOP_MOVE , 0x0, 2, 0, 1, 0, 0, 0, 0, 2, 3, 0, 0, 0, 0) \ - MACRO(__VA_ARGS__, u8_move_yx_xw , SWS_PIXEL_U8 , SWS_UOP_MOVE , 0x0, 2, 1, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0) \ - MACRO(__VA_ARGS__, u8_move_yz_xx , SWS_PIXEL_U8 , SWS_UOP_MOVE , 0x0, 2, 1, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0) \ - MACRO(__VA_ARGS__, u8_move_wz_zx , SWS_PIXEL_U8 , SWS_UOP_MOVE , 0x0, 2, 3, 2, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0) \ - MACRO(__VA_ARGS__, u8_move_xyz_yzw , SWS_PIXEL_U8 , SWS_UOP_MOVE , 0x0, 3, 0, 1, 2, 0, 0, 0, 1, 2, 3, 0, 0, 0) \ - MACRO(__VA_ARGS__, u8_move_yzw_xxx , SWS_PIXEL_U8 , SWS_UOP_MOVE , 0x0, 3, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0) \ - MACRO(__VA_ARGS__, u8_move_zwy_xyx , SWS_PIXEL_U8 , SWS_UOP_MOVE , 0x0, 3, 2, 3, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0) \ - MACRO(__VA_ARGS__, u8_move_wyz_yzx , SWS_PIXEL_U8 , SWS_UOP_MOVE , 0x0, 3, 3, 1, 2, 0, 0, 0, 1, 2, 0, 0, 0, 0) \ - MACRO(__VA_ARGS__, u8_move_wzy_zyx , SWS_PIXEL_U8 , SWS_UOP_MOVE , 0x0, 3, 3, 2, 1, 0, 0, 0, 2, 1, 0, 0, 0, 0) \ - MACRO(__VA_ARGS__, u8_move_txy_xyt , SWS_PIXEL_U8 , SWS_UOP_MOVE , 0x0, 3, -1, 0, 1, 0, 0, 0, 0, 1, -1, 0, 0, 0) \ - MACRO(__VA_ARGS__, u8_move_txz_xzt , SWS_PIXEL_U8 , SWS_UOP_MOVE , 0x0, 3, -1, 0, 2, 0, 0, 0, 0, 2, -1, 0, 0, 0) \ - MACRO(__VA_ARGS__, u8_move_tyz_yzt , SWS_PIXEL_U8 , SWS_UOP_MOVE , 0x0, 3, -1, 1, 2, 0, 0, 0, 1, 2, -1, 0, 0, 0) \ - MACRO(__VA_ARGS__, u8_move_tyw_ywt , SWS_PIXEL_U8 , SWS_UOP_MOVE , 0x0, 3, -1, 1, 3, 0, 0, 0, 1, 3, -1, 0, 0, 0) \ - MACRO(__VA_ARGS__, u8_move_xtyz_wyzt , SWS_PIXEL_U8 , SWS_UOP_MOVE , 0x0, 4, 0, -1, 1, 2, 0, 0, 3, 1, 2, -1, 0, 0) \ - MACRO(__VA_ARGS__, u8_move_zxyw_xyzz , SWS_PIXEL_U8 , SWS_UOP_MOVE , 0x0, 4, 2, 0, 1, 3, 0, 0, 0, 1, 2, 2, 0, 0) \ - MACRO(__VA_ARGS__, u8_move_wtyz_xyzt , SWS_PIXEL_U8 , SWS_UOP_MOVE , 0x0, 4, 3, -1, 1, 2, 0, 0, 0, 1, 2, -1, 0, 0) \ - MACRO(__VA_ARGS__, u8_move_txyz_xyzt , SWS_PIXEL_U8 , SWS_UOP_MOVE , 0x0, 4, -1, 0, 1, 2, 0, 0, 0, 1, 2, -1, 0, 0) \ - MACRO(__VA_ARGS__, u8_move_txzy_xzyt , SWS_PIXEL_U8 , SWS_UOP_MOVE , 0x0, 4, -1, 0, 2, 1, 0, 0, 0, 2, 1, -1, 0, 0) \ - MACRO(__VA_ARGS__, u8_move_txzw_xzwt , SWS_PIXEL_U8 , SWS_UOP_MOVE , 0x0, 4, -1, 0, 2, 3, 0, 0, 0, 2, 3, -1, 0, 0) \ - MACRO(__VA_ARGS__, u8_move_txwz_xwzt , SWS_PIXEL_U8 , SWS_UOP_MOVE , 0x0, 4, -1, 0, 3, 2, 0, 0, 0, 3, 2, -1, 0, 0) \ - MACRO(__VA_ARGS__, u8_move_tyzw_yzwt , SWS_PIXEL_U8 , SWS_UOP_MOVE , 0x0, 4, -1, 1, 2, 3, 0, 0, 1, 2, 3, -1, 0, 0) \ - MACRO(__VA_ARGS__, u8_move_txyzw_xyzwt , SWS_PIXEL_U8 , SWS_UOP_MOVE , 0x0, 5, -1, 0, 1, 2, 3, 0, 0, 1, 2, 3, -1, 0) \ - MACRO(__VA_ARGS__, u8_move_txwyz_xwyzt , SWS_PIXEL_U8 , SWS_UOP_MOVE , 0x0, 5, -1, 0, 3, 1, 2, 0, 0, 3, 1, 2, -1, 0) \ - MACRO(__VA_ARGS__, u8_move_txwzy_xwzyt , SWS_PIXEL_U8 , SWS_UOP_MOVE , 0x0, 5, -1, 0, 3, 2, 1, 0, 0, 3, 2, 1, -1, 0) \ - MACRO(__VA_ARGS__, u8_move_txwtyz_xwtyzt , SWS_PIXEL_U8 , SWS_UOP_MOVE , 0x0, 6, -1, 0, 3, -1, 1, 2, 0, 3, -1, 1, 2, -1) -#define SWS_FOR_STRUCT_U8_MOVE(MACRO, ...) \ - MACRO(__VA_ARGS__, u8_move_x_y , .type = SWS_PIXEL_U8 , .uop = SWS_UOP_MOVE , .mask = 0x0, .par.move.num_moves = 1, .par.move.dst = {0, 0, 0, 0, 0, 0}, .par.move.src = {1, 0, 0, 0, 0, 0}) \ - MACRO(__VA_ARGS__, u8_move_x_z , .type = SWS_PIXEL_U8 , .uop = SWS_UOP_MOVE , .mask = 0x0, .par.move.num_moves = 1, .par.move.dst = {0, 0, 0, 0, 0, 0}, .par.move.src = {2, 0, 0, 0, 0, 0}) \ - MACRO(__VA_ARGS__, u8_move_x_w , .type = SWS_PIXEL_U8 , .uop = SWS_UOP_MOVE , .mask = 0x0, .par.move.num_moves = 1, .par.move.dst = {0, 0, 0, 0, 0, 0}, .par.move.src = {3, 0, 0, 0, 0, 0}) \ - MACRO(__VA_ARGS__, u8_move_y_x , .type = SWS_PIXEL_U8 , .uop = SWS_UOP_MOVE , .mask = 0x0, .par.move.num_moves = 1, .par.move.dst = {1, 0, 0, 0, 0, 0}, .par.move.src = {0, 0, 0, 0, 0, 0}) \ - MACRO(__VA_ARGS__, u8_move_y_w , .type = SWS_PIXEL_U8 , .uop = SWS_UOP_MOVE , .mask = 0x0, .par.move.num_moves = 1, .par.move.dst = {1, 0, 0, 0, 0, 0}, .par.move.src = {3, 0, 0, 0, 0, 0}) \ - MACRO(__VA_ARGS__, u8_move_z_x , .type = SWS_PIXEL_U8 , .uop = SWS_UOP_MOVE , .mask = 0x0, .par.move.num_moves = 1, .par.move.dst = {2, 0, 0, 0, 0, 0}, .par.move.src = {0, 0, 0, 0, 0, 0}) \ - MACRO(__VA_ARGS__, u8_move_w_x , .type = SWS_PIXEL_U8 , .uop = SWS_UOP_MOVE , .mask = 0x0, .par.move.num_moves = 1, .par.move.dst = {3, 0, 0, 0, 0, 0}, .par.move.src = {0, 0, 0, 0, 0, 0}) \ - MACRO(__VA_ARGS__, u8_move_xy_yw , .type = SWS_PIXEL_U8 , .uop = SWS_UOP_MOVE , .mask = 0x0, .par.move.num_moves = 2, .par.move.dst = {0, 1, 0, 0, 0, 0}, .par.move.src = {1, 3, 0, 0, 0, 0}) \ - MACRO(__VA_ARGS__, u8_move_xy_zw , .type = SWS_PIXEL_U8 , .uop = SWS_UOP_MOVE , .mask = 0x0, .par.move.num_moves = 2, .par.move.dst = {0, 1, 0, 0, 0, 0}, .par.move.src = {2, 3, 0, 0, 0, 0}) \ - MACRO(__VA_ARGS__, u8_move_yx_xw , .type = SWS_PIXEL_U8 , .uop = SWS_UOP_MOVE , .mask = 0x0, .par.move.num_moves = 2, .par.move.dst = {1, 0, 0, 0, 0, 0}, .par.move.src = {0, 3, 0, 0, 0, 0}) \ - MACRO(__VA_ARGS__, u8_move_yz_xx , .type = SWS_PIXEL_U8 , .uop = SWS_UOP_MOVE , .mask = 0x0, .par.move.num_moves = 2, .par.move.dst = {1, 2, 0, 0, 0, 0}, .par.move.src = {0, 0, 0, 0, 0, 0}) \ - MACRO(__VA_ARGS__, u8_move_wz_zx , .type = SWS_PIXEL_U8 , .uop = SWS_UOP_MOVE , .mask = 0x0, .par.move.num_moves = 2, .par.move.dst = {3, 2, 0, 0, 0, 0}, .par.move.src = {2, 0, 0, 0, 0, 0}) \ - MACRO(__VA_ARGS__, u8_move_xyz_yzw , .type = SWS_PIXEL_U8 , .uop = SWS_UOP_MOVE , .mask = 0x0, .par.move.num_moves = 3, .par.move.dst = {0, 1, 2, 0, 0, 0}, .par.move.src = {1, 2, 3, 0, 0, 0}) \ - MACRO(__VA_ARGS__, u8_move_yzw_xxx , .type = SWS_PIXEL_U8 , .uop = SWS_UOP_MOVE , .mask = 0x0, .par.move.num_moves = 3, .par.move.dst = {1, 2, 3, 0, 0, 0}, .par.move.src = {0, 0, 0, 0, 0, 0}) \ - MACRO(__VA_ARGS__, u8_move_zwy_xyx , .type = SWS_PIXEL_U8 , .uop = SWS_UOP_MOVE , .mask = 0x0, .par.move.num_moves = 3, .par.move.dst = {2, 3, 1, 0, 0, 0}, .par.move.src = {0, 1, 0, 0, 0, 0}) \ - MACRO(__VA_ARGS__, u8_move_wyz_yzx , .type = SWS_PIXEL_U8 , .uop = SWS_UOP_MOVE , .mask = 0x0, .par.move.num_moves = 3, .par.move.dst = {3, 1, 2, 0, 0, 0}, .par.move.src = {1, 2, 0, 0, 0, 0}) \ - MACRO(__VA_ARGS__, u8_move_wzy_zyx , .type = SWS_PIXEL_U8 , .uop = SWS_UOP_MOVE , .mask = 0x0, .par.move.num_moves = 3, .par.move.dst = {3, 2, 1, 0, 0, 0}, .par.move.src = {2, 1, 0, 0, 0, 0}) \ - MACRO(__VA_ARGS__, u8_move_txy_xyt , .type = SWS_PIXEL_U8 , .uop = SWS_UOP_MOVE , .mask = 0x0, .par.move.num_moves = 3, .par.move.dst = {-1, 0, 1, 0, 0, 0}, .par.move.src = {0, 1, -1, 0, 0, 0}) \ - MACRO(__VA_ARGS__, u8_move_txz_xzt , .type = SWS_PIXEL_U8 , .uop = SWS_UOP_MOVE , .mask = 0x0, .par.move.num_moves = 3, .par.move.dst = {-1, 0, 2, 0, 0, 0}, .par.move.src = {0, 2, -1, 0, 0, 0}) \ - MACRO(__VA_ARGS__, u8_move_tyz_yzt , .type = SWS_PIXEL_U8 , .uop = SWS_UOP_MOVE , .mask = 0x0, .par.move.num_moves = 3, .par.move.dst = {-1, 1, 2, 0, 0, 0}, .par.move.src = {1, 2, -1, 0, 0, 0}) \ - MACRO(__VA_ARGS__, u8_move_tyw_ywt , .type = SWS_PIXEL_U8 , .uop = SWS_UOP_MOVE , .mask = 0x0, .par.move.num_moves = 3, .par.move.dst = {-1, 1, 3, 0, 0, 0}, .par.move.src = {1, 3, -1, 0, 0, 0}) \ - MACRO(__VA_ARGS__, u8_move_xtyz_wyzt , .type = SWS_PIXEL_U8 , .uop = SWS_UOP_MOVE , .mask = 0x0, .par.move.num_moves = 4, .par.move.dst = {0, -1, 1, 2, 0, 0}, .par.move.src = {3, 1, 2, -1, 0, 0}) \ - MACRO(__VA_ARGS__, u8_move_zxyw_xyzz , .type = SWS_PIXEL_U8 , .uop = SWS_UOP_MOVE , .mask = 0x0, .par.move.num_moves = 4, .par.move.dst = {2, 0, 1, 3, 0, 0}, .par.move.src = {0, 1, 2, 2, 0, 0}) \ - MACRO(__VA_ARGS__, u8_move_wtyz_xyzt , .type = SWS_PIXEL_U8 , .uop = SWS_UOP_MOVE , .mask = 0x0, .par.move.num_moves = 4, .par.move.dst = {3, -1, 1, 2, 0, 0}, .par.move.src = {0, 1, 2, -1, 0, 0}) \ - MACRO(__VA_ARGS__, u8_move_txyz_xyzt , .type = SWS_PIXEL_U8 , .uop = SWS_UOP_MOVE , .mask = 0x0, .par.move.num_moves = 4, .par.move.dst = {-1, 0, 1, 2, 0, 0}, .par.move.src = {0, 1, 2, -1, 0, 0}) \ - MACRO(__VA_ARGS__, u8_move_txzy_xzyt , .type = SWS_PIXEL_U8 , .uop = SWS_UOP_MOVE , .mask = 0x0, .par.move.num_moves = 4, .par.move.dst = {-1, 0, 2, 1, 0, 0}, .par.move.src = {0, 2, 1, -1, 0, 0}) \ - MACRO(__VA_ARGS__, u8_move_txzw_xzwt , .type = SWS_PIXEL_U8 , .uop = SWS_UOP_MOVE , .mask = 0x0, .par.move.num_moves = 4, .par.move.dst = {-1, 0, 2, 3, 0, 0}, .par.move.src = {0, 2, 3, -1, 0, 0}) \ - MACRO(__VA_ARGS__, u8_move_txwz_xwzt , .type = SWS_PIXEL_U8 , .uop = SWS_UOP_MOVE , .mask = 0x0, .par.move.num_moves = 4, .par.move.dst = {-1, 0, 3, 2, 0, 0}, .par.move.src = {0, 3, 2, -1, 0, 0}) \ - MACRO(__VA_ARGS__, u8_move_tyzw_yzwt , .type = SWS_PIXEL_U8 , .uop = SWS_UOP_MOVE , .mask = 0x0, .par.move.num_moves = 4, .par.move.dst = {-1, 1, 2, 3, 0, 0}, .par.move.src = {1, 2, 3, -1, 0, 0}) \ - MACRO(__VA_ARGS__, u8_move_txyzw_xyzwt , .type = SWS_PIXEL_U8 , .uop = SWS_UOP_MOVE , .mask = 0x0, .par.move.num_moves = 5, .par.move.dst = {-1, 0, 1, 2, 3, 0}, .par.move.src = {0, 1, 2, 3, -1, 0}) \ - MACRO(__VA_ARGS__, u8_move_txwyz_xwyzt , .type = SWS_PIXEL_U8 , .uop = SWS_UOP_MOVE , .mask = 0x0, .par.move.num_moves = 5, .par.move.dst = {-1, 0, 3, 1, 2, 0}, .par.move.src = {0, 3, 1, 2, -1, 0}) \ - MACRO(__VA_ARGS__, u8_move_txwzy_xwzyt , .type = SWS_PIXEL_U8 , .uop = SWS_UOP_MOVE , .mask = 0x0, .par.move.num_moves = 5, .par.move.dst = {-1, 0, 3, 2, 1, 0}, .par.move.src = {0, 3, 2, 1, -1, 0}) \ - MACRO(__VA_ARGS__, u8_move_txwtyz_xwtyzt , .type = SWS_PIXEL_U8 , .uop = SWS_UOP_MOVE , .mask = 0x0, .par.move.num_moves = 6, .par.move.dst = {-1, 0, 3, -1, 1, 2}, .par.move.src = {0, 3, -1, 1, 2, -1}) + MACRO(__VA_ARGS__, u8_copy_yzw_yzw_xxx , .type = SWS_PIXEL_U8 , .uop = SWS_UOP_COPY , .mask = 0xe, .par.move.num_moves = 3, .par.move.dst = {1, 2, 3, 0, 0, 0}, .par.move.src = {0, 0, 0, 0, 0, 0}) \ + MACRO(__VA_ARGS__, u8_copy_xyzw_yz_xx , .type = SWS_PIXEL_U8 , .uop = SWS_UOP_COPY , .mask = 0xf, .par.move.num_moves = 2, .par.move.dst = {1, 2, 0, 0, 0, 0}, .par.move.src = {0, 0, 0, 0, 0, 0}) \ + MACRO(__VA_ARGS__, u8_copy_xyzw_zwy_xyx , .type = SWS_PIXEL_U8 , .uop = SWS_UOP_COPY , .mask = 0xf, .par.move.num_moves = 3, .par.move.dst = {2, 3, 1, 0, 0, 0}, .par.move.src = {0, 1, 0, 0, 0, 0}) \ + MACRO(__VA_ARGS__, u8_copy_xyzw_zxyw_xyzz , .type = SWS_PIXEL_U8 , .uop = SWS_UOP_COPY , .mask = 0xf, .par.move.num_moves = 4, .par.move.dst = {2, 0, 1, 3, 0, 0}, .par.move.src = {0, 1, 2, 2, 0, 0}) #define SWS_FOR_U8_SWAP_BYTES(MACRO, ...) #define SWS_FOR_STRUCT_U8_SWAP_BYTES(MACRO, ...) #define SWS_FOR_U8_EXPAND_BIT(MACRO, ...) \ @@ -418,87 +374,55 @@ #define SWS_FOR_U16_WRITE_BIT(MACRO, ...) #define SWS_FOR_STRUCT_U16_WRITE_BIT(MACRO, ...) #define SWS_FOR_U16_PERMUTE(MACRO, ...) \ - MACRO(__VA_ARGS__, u16_permute_xzwy , SWS_PIXEL_U16, SWS_UOP_PERMUTE , 0x0, 0, 2, 3, 1) \ - MACRO(__VA_ARGS__, u16_permute_xwzy , SWS_PIXEL_U16, SWS_UOP_PERMUTE , 0x0, 0, 3, 2, 1) \ - MACRO(__VA_ARGS__, u16_permute_yxzw , SWS_PIXEL_U16, SWS_UOP_PERMUTE , 0x0, 1, 0, 2, 3) \ - MACRO(__VA_ARGS__, u16_permute_yzxw , SWS_PIXEL_U16, SWS_UOP_PERMUTE , 0x0, 1, 2, 0, 3) \ - MACRO(__VA_ARGS__, u16_permute_yzwx , SWS_PIXEL_U16, SWS_UOP_PERMUTE , 0x0, 1, 2, 3, 0) \ - MACRO(__VA_ARGS__, u16_permute_zxyw , SWS_PIXEL_U16, SWS_UOP_PERMUTE , 0x0, 2, 0, 1, 3) \ - MACRO(__VA_ARGS__, u16_permute_zyxw , SWS_PIXEL_U16, SWS_UOP_PERMUTE , 0x0, 2, 1, 0, 3) \ - MACRO(__VA_ARGS__, u16_permute_zywx , SWS_PIXEL_U16, SWS_UOP_PERMUTE , 0x0, 2, 1, 3, 0) \ - MACRO(__VA_ARGS__, u16_permute_wxyz , SWS_PIXEL_U16, SWS_UOP_PERMUTE , 0x0, 3, 0, 1, 2) \ - MACRO(__VA_ARGS__, u16_permute_wxzy , SWS_PIXEL_U16, SWS_UOP_PERMUTE , 0x0, 3, 0, 2, 1) \ - MACRO(__VA_ARGS__, u16_permute_wyxz , SWS_PIXEL_U16, SWS_UOP_PERMUTE , 0x0, 3, 1, 0, 2) \ - MACRO(__VA_ARGS__, u16_permute_wyzx , SWS_PIXEL_U16, SWS_UOP_PERMUTE , 0x0, 3, 1, 2, 0) \ - MACRO(__VA_ARGS__, u16_permute_wzyx , SWS_PIXEL_U16, SWS_UOP_PERMUTE , 0x0, 3, 2, 1, 0) + MACRO(__VA_ARGS__, u16_permute_xyz_x_w , SWS_PIXEL_U16, SWS_UOP_PERMUTE , 0x7, 1, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0) \ + MACRO(__VA_ARGS__, u16_permute_xyz_y_w , SWS_PIXEL_U16, SWS_UOP_PERMUTE , 0x7, 1, 1, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0) \ + MACRO(__VA_ARGS__, u16_permute_xyz_xz_zw , SWS_PIXEL_U16, SWS_UOP_PERMUTE , 0x7, 2, 0, 2, 0, 0, 0, 0, 2, 3, 0, 0, 0, 0) \ + MACRO(__VA_ARGS__, u16_permute_xyz_yx_xw , SWS_PIXEL_U16, SWS_UOP_PERMUTE , 0x7, 2, 1, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0) \ + MACRO(__VA_ARGS__, u16_permute_xyz_xyz_yzw , SWS_PIXEL_U16, SWS_UOP_PERMUTE , 0x7, 3, 0, 1, 2, 0, 0, 0, 1, 2, 3, 0, 0, 0) \ + MACRO(__VA_ARGS__, u16_permute_xyz_xtyz_wyzt , SWS_PIXEL_U16, SWS_UOP_PERMUTE , 0x7, 4, 0, -1, 1, 2, 0, 0, 3, 1, 2, -1, 0, 0) \ + MACRO(__VA_ARGS__, u16_permute_xyw_x_z , SWS_PIXEL_U16, SWS_UOP_PERMUTE , 0xb, 1, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0) \ + MACRO(__VA_ARGS__, u16_permute_xzw_x_y , SWS_PIXEL_U16, SWS_UOP_PERMUTE , 0xd, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0) \ + MACRO(__VA_ARGS__, u16_permute_yzw_y_x , SWS_PIXEL_U16, SWS_UOP_PERMUTE , 0xe, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0) \ + MACRO(__VA_ARGS__, u16_permute_yzw_w_x , SWS_PIXEL_U16, SWS_UOP_PERMUTE , 0xe, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0) \ + MACRO(__VA_ARGS__, u16_permute_yzw_wz_zx , SWS_PIXEL_U16, SWS_UOP_PERMUTE , 0xe, 2, 3, 2, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0) \ + MACRO(__VA_ARGS__, u16_permute_yzw_wzy_zyx , SWS_PIXEL_U16, SWS_UOP_PERMUTE , 0xe, 3, 3, 2, 1, 0, 0, 0, 2, 1, 0, 0, 0, 0) \ + MACRO(__VA_ARGS__, u16_permute_yzw_wtyz_xyzt , SWS_PIXEL_U16, SWS_UOP_PERMUTE , 0xe, 4, 3, -1, 1, 2, 0, 0, 0, 1, 2, -1, 0, 0) \ + MACRO(__VA_ARGS__, u16_permute_xyzw_txy_xyt , SWS_PIXEL_U16, SWS_UOP_PERMUTE , 0xf, 3, -1, 0, 1, 0, 0, 0, 0, 1, -1, 0, 0, 0) \ + MACRO(__VA_ARGS__, u16_permute_xyzw_txz_xzt , SWS_PIXEL_U16, SWS_UOP_PERMUTE , 0xf, 3, -1, 0, 2, 0, 0, 0, 0, 2, -1, 0, 0, 0) \ + MACRO(__VA_ARGS__, u16_permute_xyzw_txyz_xyzt , SWS_PIXEL_U16, SWS_UOP_PERMUTE , 0xf, 4, -1, 0, 1, 2, 0, 0, 0, 1, 2, -1, 0, 0) \ + MACRO(__VA_ARGS__, u16_permute_xyzw_txzy_xzyt , SWS_PIXEL_U16, SWS_UOP_PERMUTE , 0xf, 4, -1, 0, 2, 1, 0, 0, 0, 2, 1, -1, 0, 0) \ + MACRO(__VA_ARGS__, u16_permute_xyzw_tyzw_yzwt , SWS_PIXEL_U16, SWS_UOP_PERMUTE , 0xf, 4, -1, 1, 2, 3, 0, 0, 1, 2, 3, -1, 0, 0) \ + MACRO(__VA_ARGS__, u16_permute_xyzw_txyzw_xyzwt , SWS_PIXEL_U16, SWS_UOP_PERMUTE , 0xf, 5, -1, 0, 1, 2, 3, 0, 0, 1, 2, 3, -1, 0) \ + MACRO(__VA_ARGS__, u16_permute_xyzw_txwzy_xwzyt , SWS_PIXEL_U16, SWS_UOP_PERMUTE , 0xf, 5, -1, 0, 3, 2, 1, 0, 0, 3, 2, 1, -1, 0) \ + MACRO(__VA_ARGS__, u16_permute_xyzw_txwtyz_xwtyzt , SWS_PIXEL_U16, SWS_UOP_PERMUTE , 0xf, 6, -1, 0, 3, -1, 1, 2, 0, 3, -1, 1, 2, -1) #define SWS_FOR_STRUCT_U16_PERMUTE(MACRO, ...) \ - MACRO(__VA_ARGS__, u16_permute_xzwy , .type = SWS_PIXEL_U16, .uop = SWS_UOP_PERMUTE , .mask = 0x0, .par.swizzle.in = {0, 2, 3, 1}) \ - MACRO(__VA_ARGS__, u16_permute_xwzy , .type = SWS_PIXEL_U16, .uop = SWS_UOP_PERMUTE , .mask = 0x0, .par.swizzle.in = {0, 3, 2, 1}) \ - MACRO(__VA_ARGS__, u16_permute_yxzw , .type = SWS_PIXEL_U16, .uop = SWS_UOP_PERMUTE , .mask = 0x0, .par.swizzle.in = {1, 0, 2, 3}) \ - MACRO(__VA_ARGS__, u16_permute_yzxw , .type = SWS_PIXEL_U16, .uop = SWS_UOP_PERMUTE , .mask = 0x0, .par.swizzle.in = {1, 2, 0, 3}) \ - MACRO(__VA_ARGS__, u16_permute_yzwx , .type = SWS_PIXEL_U16, .uop = SWS_UOP_PERMUTE , .mask = 0x0, .par.swizzle.in = {1, 2, 3, 0}) \ - MACRO(__VA_ARGS__, u16_permute_zxyw , .type = SWS_PIXEL_U16, .uop = SWS_UOP_PERMUTE , .mask = 0x0, .par.swizzle.in = {2, 0, 1, 3}) \ - MACRO(__VA_ARGS__, u16_permute_zyxw , .type = SWS_PIXEL_U16, .uop = SWS_UOP_PERMUTE , .mask = 0x0, .par.swizzle.in = {2, 1, 0, 3}) \ - MACRO(__VA_ARGS__, u16_permute_zywx , .type = SWS_PIXEL_U16, .uop = SWS_UOP_PERMUTE , .mask = 0x0, .par.swizzle.in = {2, 1, 3, 0}) \ - MACRO(__VA_ARGS__, u16_permute_wxyz , .type = SWS_PIXEL_U16, .uop = SWS_UOP_PERMUTE , .mask = 0x0, .par.swizzle.in = {3, 0, 1, 2}) \ - MACRO(__VA_ARGS__, u16_permute_wxzy , .type = SWS_PIXEL_U16, .uop = SWS_UOP_PERMUTE , .mask = 0x0, .par.swizzle.in = {3, 0, 2, 1}) \ - MACRO(__VA_ARGS__, u16_permute_wyxz , .type = SWS_PIXEL_U16, .uop = SWS_UOP_PERMUTE , .mask = 0x0, .par.swizzle.in = {3, 1, 0, 2}) \ - MACRO(__VA_ARGS__, u16_permute_wyzx , .type = SWS_PIXEL_U16, .uop = SWS_UOP_PERMUTE , .mask = 0x0, .par.swizzle.in = {3, 1, 2, 0}) \ - MACRO(__VA_ARGS__, u16_permute_wzyx , .type = SWS_PIXEL_U16, .uop = SWS_UOP_PERMUTE , .mask = 0x0, .par.swizzle.in = {3, 2, 1, 0}) + MACRO(__VA_ARGS__, u16_permute_xyz_x_w , .type = SWS_PIXEL_U16, .uop = SWS_UOP_PERMUTE , .mask = 0x7, .par.move.num_moves = 1, .par.move.dst = {0, 0, 0, 0, 0, 0}, .par.move.src = {3, 0, 0, 0, 0, 0}) \ + MACRO(__VA_ARGS__, u16_permute_xyz_y_w , .type = SWS_PIXEL_U16, .uop = SWS_UOP_PERMUTE , .mask = 0x7, .par.move.num_moves = 1, .par.move.dst = {1, 0, 0, 0, 0, 0}, .par.move.src = {3, 0, 0, 0, 0, 0}) \ + MACRO(__VA_ARGS__, u16_permute_xyz_xz_zw , .type = SWS_PIXEL_U16, .uop = SWS_UOP_PERMUTE , .mask = 0x7, .par.move.num_moves = 2, .par.move.dst = {0, 2, 0, 0, 0, 0}, .par.move.src = {2, 3, 0, 0, 0, 0}) \ + MACRO(__VA_ARGS__, u16_permute_xyz_yx_xw , .type = SWS_PIXEL_U16, .uop = SWS_UOP_PERMUTE , .mask = 0x7, .par.move.num_moves = 2, .par.move.dst = {1, 0, 0, 0, 0, 0}, .par.move.src = {0, 3, 0, 0, 0, 0}) \ + MACRO(__VA_ARGS__, u16_permute_xyz_xyz_yzw , .type = SWS_PIXEL_U16, .uop = SWS_UOP_PERMUTE , .mask = 0x7, .par.move.num_moves = 3, .par.move.dst = {0, 1, 2, 0, 0, 0}, .par.move.src = {1, 2, 3, 0, 0, 0}) \ + MACRO(__VA_ARGS__, u16_permute_xyz_xtyz_wyzt , .type = SWS_PIXEL_U16, .uop = SWS_UOP_PERMUTE , .mask = 0x7, .par.move.num_moves = 4, .par.move.dst = {0, -1, 1, 2, 0, 0}, .par.move.src = {3, 1, 2, -1, 0, 0}) \ + MACRO(__VA_ARGS__, u16_permute_xyw_x_z , .type = SWS_PIXEL_U16, .uop = SWS_UOP_PERMUTE , .mask = 0xb, .par.move.num_moves = 1, .par.move.dst = {0, 0, 0, 0, 0, 0}, .par.move.src = {2, 0, 0, 0, 0, 0}) \ + MACRO(__VA_ARGS__, u16_permute_xzw_x_y , .type = SWS_PIXEL_U16, .uop = SWS_UOP_PERMUTE , .mask = 0xd, .par.move.num_moves = 1, .par.move.dst = {0, 0, 0, 0, 0, 0}, .par.move.src = {1, 0, 0, 0, 0, 0}) \ + MACRO(__VA_ARGS__, u16_permute_yzw_y_x , .type = SWS_PIXEL_U16, .uop = SWS_UOP_PERMUTE , .mask = 0xe, .par.move.num_moves = 1, .par.move.dst = {1, 0, 0, 0, 0, 0}, .par.move.src = {0, 0, 0, 0, 0, 0}) \ + MACRO(__VA_ARGS__, u16_permute_yzw_w_x , .type = SWS_PIXEL_U16, .uop = SWS_UOP_PERMUTE , .mask = 0xe, .par.move.num_moves = 1, .par.move.dst = {3, 0, 0, 0, 0, 0}, .par.move.src = {0, 0, 0, 0, 0, 0}) \ + MACRO(__VA_ARGS__, u16_permute_yzw_wz_zx , .type = SWS_PIXEL_U16, .uop = SWS_UOP_PERMUTE , .mask = 0xe, .par.move.num_moves = 2, .par.move.dst = {3, 2, 0, 0, 0, 0}, .par.move.src = {2, 0, 0, 0, 0, 0}) \ + MACRO(__VA_ARGS__, u16_permute_yzw_wzy_zyx , .type = SWS_PIXEL_U16, .uop = SWS_UOP_PERMUTE , .mask = 0xe, .par.move.num_moves = 3, .par.move.dst = {3, 2, 1, 0, 0, 0}, .par.move.src = {2, 1, 0, 0, 0, 0}) \ + MACRO(__VA_ARGS__, u16_permute_yzw_wtyz_xyzt , .type = SWS_PIXEL_U16, .uop = SWS_UOP_PERMUTE , .mask = 0xe, .par.move.num_moves = 4, .par.move.dst = {3, -1, 1, 2, 0, 0}, .par.move.src = {0, 1, 2, -1, 0, 0}) \ + MACRO(__VA_ARGS__, u16_permute_xyzw_txy_xyt , .type = SWS_PIXEL_U16, .uop = SWS_UOP_PERMUTE , .mask = 0xf, .par.move.num_moves = 3, .par.move.dst = {-1, 0, 1, 0, 0, 0}, .par.move.src = {0, 1, -1, 0, 0, 0}) \ + MACRO(__VA_ARGS__, u16_permute_xyzw_txz_xzt , .type = SWS_PIXEL_U16, .uop = SWS_UOP_PERMUTE , .mask = 0xf, .par.move.num_moves = 3, .par.move.dst = {-1, 0, 2, 0, 0, 0}, .par.move.src = {0, 2, -1, 0, 0, 0}) \ + MACRO(__VA_ARGS__, u16_permute_xyzw_txyz_xyzt , .type = SWS_PIXEL_U16, .uop = SWS_UOP_PERMUTE , .mask = 0xf, .par.move.num_moves = 4, .par.move.dst = {-1, 0, 1, 2, 0, 0}, .par.move.src = {0, 1, 2, -1, 0, 0}) \ + MACRO(__VA_ARGS__, u16_permute_xyzw_txzy_xzyt , .type = SWS_PIXEL_U16, .uop = SWS_UOP_PERMUTE , .mask = 0xf, .par.move.num_moves = 4, .par.move.dst = {-1, 0, 2, 1, 0, 0}, .par.move.src = {0, 2, 1, -1, 0, 0}) \ + MACRO(__VA_ARGS__, u16_permute_xyzw_tyzw_yzwt , .type = SWS_PIXEL_U16, .uop = SWS_UOP_PERMUTE , .mask = 0xf, .par.move.num_moves = 4, .par.move.dst = {-1, 1, 2, 3, 0, 0}, .par.move.src = {1, 2, 3, -1, 0, 0}) \ + MACRO(__VA_ARGS__, u16_permute_xyzw_txyzw_xyzwt , .type = SWS_PIXEL_U16, .uop = SWS_UOP_PERMUTE , .mask = 0xf, .par.move.num_moves = 5, .par.move.dst = {-1, 0, 1, 2, 3, 0}, .par.move.src = {0, 1, 2, 3, -1, 0}) \ + MACRO(__VA_ARGS__, u16_permute_xyzw_txwzy_xwzyt , .type = SWS_PIXEL_U16, .uop = SWS_UOP_PERMUTE , .mask = 0xf, .par.move.num_moves = 5, .par.move.dst = {-1, 0, 3, 2, 1, 0}, .par.move.src = {0, 3, 2, 1, -1, 0}) \ + MACRO(__VA_ARGS__, u16_permute_xyzw_txwtyz_xwtyzt , .type = SWS_PIXEL_U16, .uop = SWS_UOP_PERMUTE , .mask = 0xf, .par.move.num_moves = 6, .par.move.dst = {-1, 0, 3, -1, 1, 2}, .par.move.src = {0, 3, -1, 1, 2, -1}) #define SWS_FOR_U16_COPY(MACRO, ...) \ - MACRO(__VA_ARGS__, u16_copy_yz_xx , SWS_PIXEL_U16, SWS_UOP_COPY , 0x6, 0, 0, 0, 3) \ - MACRO(__VA_ARGS__, u16_copy_yzw_xxy , SWS_PIXEL_U16, SWS_UOP_COPY , 0xe, 0, 0, 0, 1) + MACRO(__VA_ARGS__, u16_copy_xyzw_yz_xx , SWS_PIXEL_U16, SWS_UOP_COPY , 0xf, 2, 1, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0) \ + MACRO(__VA_ARGS__, u16_copy_xyzw_zwy_xyx , SWS_PIXEL_U16, SWS_UOP_COPY , 0xf, 3, 2, 3, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0) #define SWS_FOR_STRUCT_U16_COPY(MACRO, ...) \ - MACRO(__VA_ARGS__, u16_copy_yz_xx , .type = SWS_PIXEL_U16, .uop = SWS_UOP_COPY , .mask = 0x6, .par.swizzle.in = {0, 0, 0, 3}) \ - MACRO(__VA_ARGS__, u16_copy_yzw_xxy , .type = SWS_PIXEL_U16, .uop = SWS_UOP_COPY , .mask = 0xe, .par.swizzle.in = {0, 0, 0, 1}) -#define SWS_FOR_U16_MOVE(MACRO, ...) \ - MACRO(__VA_ARGS__, u16_move_x_y , SWS_PIXEL_U16, SWS_UOP_MOVE , 0x0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0) \ - MACRO(__VA_ARGS__, u16_move_x_z , SWS_PIXEL_U16, SWS_UOP_MOVE , 0x0, 1, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0) \ - MACRO(__VA_ARGS__, u16_move_x_w , SWS_PIXEL_U16, SWS_UOP_MOVE , 0x0, 1, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0) \ - MACRO(__VA_ARGS__, u16_move_y_x , SWS_PIXEL_U16, SWS_UOP_MOVE , 0x0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0) \ - MACRO(__VA_ARGS__, u16_move_y_w , SWS_PIXEL_U16, SWS_UOP_MOVE , 0x0, 1, 1, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0) \ - MACRO(__VA_ARGS__, u16_move_w_x , SWS_PIXEL_U16, SWS_UOP_MOVE , 0x0, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0) \ - MACRO(__VA_ARGS__, u16_move_xz_zw , SWS_PIXEL_U16, SWS_UOP_MOVE , 0x0, 2, 0, 2, 0, 0, 0, 0, 2, 3, 0, 0, 0, 0) \ - MACRO(__VA_ARGS__, u16_move_yx_xw , SWS_PIXEL_U16, SWS_UOP_MOVE , 0x0, 2, 1, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0) \ - MACRO(__VA_ARGS__, u16_move_yz_xx , SWS_PIXEL_U16, SWS_UOP_MOVE , 0x0, 2, 1, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0) \ - MACRO(__VA_ARGS__, u16_move_wz_zx , SWS_PIXEL_U16, SWS_UOP_MOVE , 0x0, 2, 3, 2, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0) \ - MACRO(__VA_ARGS__, u16_move_xyz_yzw , SWS_PIXEL_U16, SWS_UOP_MOVE , 0x0, 3, 0, 1, 2, 0, 0, 0, 1, 2, 3, 0, 0, 0) \ - MACRO(__VA_ARGS__, u16_move_zwy_xyx , SWS_PIXEL_U16, SWS_UOP_MOVE , 0x0, 3, 2, 3, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0) \ - MACRO(__VA_ARGS__, u16_move_wzy_zyx , SWS_PIXEL_U16, SWS_UOP_MOVE , 0x0, 3, 3, 2, 1, 0, 0, 0, 2, 1, 0, 0, 0, 0) \ - MACRO(__VA_ARGS__, u16_move_txy_xyt , SWS_PIXEL_U16, SWS_UOP_MOVE , 0x0, 3, -1, 0, 1, 0, 0, 0, 0, 1, -1, 0, 0, 0) \ - MACRO(__VA_ARGS__, u16_move_txz_xzt , SWS_PIXEL_U16, SWS_UOP_MOVE , 0x0, 3, -1, 0, 2, 0, 0, 0, 0, 2, -1, 0, 0, 0) \ - MACRO(__VA_ARGS__, u16_move_xtyz_wyzt , SWS_PIXEL_U16, SWS_UOP_MOVE , 0x0, 4, 0, -1, 1, 2, 0, 0, 3, 1, 2, -1, 0, 0) \ - MACRO(__VA_ARGS__, u16_move_wtyz_xyzt , SWS_PIXEL_U16, SWS_UOP_MOVE , 0x0, 4, 3, -1, 1, 2, 0, 0, 0, 1, 2, -1, 0, 0) \ - MACRO(__VA_ARGS__, u16_move_txyz_xyzt , SWS_PIXEL_U16, SWS_UOP_MOVE , 0x0, 4, -1, 0, 1, 2, 0, 0, 0, 1, 2, -1, 0, 0) \ - MACRO(__VA_ARGS__, u16_move_txzy_xzyt , SWS_PIXEL_U16, SWS_UOP_MOVE , 0x0, 4, -1, 0, 2, 1, 0, 0, 0, 2, 1, -1, 0, 0) \ - MACRO(__VA_ARGS__, u16_move_tyzw_yzwt , SWS_PIXEL_U16, SWS_UOP_MOVE , 0x0, 4, -1, 1, 2, 3, 0, 0, 1, 2, 3, -1, 0, 0) \ - MACRO(__VA_ARGS__, u16_move_txyzw_xyzwt , SWS_PIXEL_U16, SWS_UOP_MOVE , 0x0, 5, -1, 0, 1, 2, 3, 0, 0, 1, 2, 3, -1, 0) \ - MACRO(__VA_ARGS__, u16_move_txwzy_xwzyt , SWS_PIXEL_U16, SWS_UOP_MOVE , 0x0, 5, -1, 0, 3, 2, 1, 0, 0, 3, 2, 1, -1, 0) \ - MACRO(__VA_ARGS__, u16_move_txwtyz_xwtyzt , SWS_PIXEL_U16, SWS_UOP_MOVE , 0x0, 6, -1, 0, 3, -1, 1, 2, 0, 3, -1, 1, 2, -1) -#define SWS_FOR_STRUCT_U16_MOVE(MACRO, ...) \ - MACRO(__VA_ARGS__, u16_move_x_y , .type = SWS_PIXEL_U16, .uop = SWS_UOP_MOVE , .mask = 0x0, .par.move.num_moves = 1, .par.move.dst = {0, 0, 0, 0, 0, 0}, .par.move.src = {1, 0, 0, 0, 0, 0}) \ - MACRO(__VA_ARGS__, u16_move_x_z , .type = SWS_PIXEL_U16, .uop = SWS_UOP_MOVE , .mask = 0x0, .par.move.num_moves = 1, .par.move.dst = {0, 0, 0, 0, 0, 0}, .par.move.src = {2, 0, 0, 0, 0, 0}) \ - MACRO(__VA_ARGS__, u16_move_x_w , .type = SWS_PIXEL_U16, .uop = SWS_UOP_MOVE , .mask = 0x0, .par.move.num_moves = 1, .par.move.dst = {0, 0, 0, 0, 0, 0}, .par.move.src = {3, 0, 0, 0, 0, 0}) \ - MACRO(__VA_ARGS__, u16_move_y_x , .type = SWS_PIXEL_U16, .uop = SWS_UOP_MOVE , .mask = 0x0, .par.move.num_moves = 1, .par.move.dst = {1, 0, 0, 0, 0, 0}, .par.move.src = {0, 0, 0, 0, 0, 0}) \ - MACRO(__VA_ARGS__, u16_move_y_w , .type = SWS_PIXEL_U16, .uop = SWS_UOP_MOVE , .mask = 0x0, .par.move.num_moves = 1, .par.move.dst = {1, 0, 0, 0, 0, 0}, .par.move.src = {3, 0, 0, 0, 0, 0}) \ - MACRO(__VA_ARGS__, u16_move_w_x , .type = SWS_PIXEL_U16, .uop = SWS_UOP_MOVE , .mask = 0x0, .par.move.num_moves = 1, .par.move.dst = {3, 0, 0, 0, 0, 0}, .par.move.src = {0, 0, 0, 0, 0, 0}) \ - MACRO(__VA_ARGS__, u16_move_xz_zw , .type = SWS_PIXEL_U16, .uop = SWS_UOP_MOVE , .mask = 0x0, .par.move.num_moves = 2, .par.move.dst = {0, 2, 0, 0, 0, 0}, .par.move.src = {2, 3, 0, 0, 0, 0}) \ - MACRO(__VA_ARGS__, u16_move_yx_xw , .type = SWS_PIXEL_U16, .uop = SWS_UOP_MOVE , .mask = 0x0, .par.move.num_moves = 2, .par.move.dst = {1, 0, 0, 0, 0, 0}, .par.move.src = {0, 3, 0, 0, 0, 0}) \ - MACRO(__VA_ARGS__, u16_move_yz_xx , .type = SWS_PIXEL_U16, .uop = SWS_UOP_MOVE , .mask = 0x0, .par.move.num_moves = 2, .par.move.dst = {1, 2, 0, 0, 0, 0}, .par.move.src = {0, 0, 0, 0, 0, 0}) \ - MACRO(__VA_ARGS__, u16_move_wz_zx , .type = SWS_PIXEL_U16, .uop = SWS_UOP_MOVE , .mask = 0x0, .par.move.num_moves = 2, .par.move.dst = {3, 2, 0, 0, 0, 0}, .par.move.src = {2, 0, 0, 0, 0, 0}) \ - MACRO(__VA_ARGS__, u16_move_xyz_yzw , .type = SWS_PIXEL_U16, .uop = SWS_UOP_MOVE , .mask = 0x0, .par.move.num_moves = 3, .par.move.dst = {0, 1, 2, 0, 0, 0}, .par.move.src = {1, 2, 3, 0, 0, 0}) \ - MACRO(__VA_ARGS__, u16_move_zwy_xyx , .type = SWS_PIXEL_U16, .uop = SWS_UOP_MOVE , .mask = 0x0, .par.move.num_moves = 3, .par.move.dst = {2, 3, 1, 0, 0, 0}, .par.move.src = {0, 1, 0, 0, 0, 0}) \ - MACRO(__VA_ARGS__, u16_move_wzy_zyx , .type = SWS_PIXEL_U16, .uop = SWS_UOP_MOVE , .mask = 0x0, .par.move.num_moves = 3, .par.move.dst = {3, 2, 1, 0, 0, 0}, .par.move.src = {2, 1, 0, 0, 0, 0}) \ - MACRO(__VA_ARGS__, u16_move_txy_xyt , .type = SWS_PIXEL_U16, .uop = SWS_UOP_MOVE , .mask = 0x0, .par.move.num_moves = 3, .par.move.dst = {-1, 0, 1, 0, 0, 0}, .par.move.src = {0, 1, -1, 0, 0, 0}) \ - MACRO(__VA_ARGS__, u16_move_txz_xzt , .type = SWS_PIXEL_U16, .uop = SWS_UOP_MOVE , .mask = 0x0, .par.move.num_moves = 3, .par.move.dst = {-1, 0, 2, 0, 0, 0}, .par.move.src = {0, 2, -1, 0, 0, 0}) \ - MACRO(__VA_ARGS__, u16_move_xtyz_wyzt , .type = SWS_PIXEL_U16, .uop = SWS_UOP_MOVE , .mask = 0x0, .par.move.num_moves = 4, .par.move.dst = {0, -1, 1, 2, 0, 0}, .par.move.src = {3, 1, 2, -1, 0, 0}) \ - MACRO(__VA_ARGS__, u16_move_wtyz_xyzt , .type = SWS_PIXEL_U16, .uop = SWS_UOP_MOVE , .mask = 0x0, .par.move.num_moves = 4, .par.move.dst = {3, -1, 1, 2, 0, 0}, .par.move.src = {0, 1, 2, -1, 0, 0}) \ - MACRO(__VA_ARGS__, u16_move_txyz_xyzt , .type = SWS_PIXEL_U16, .uop = SWS_UOP_MOVE , .mask = 0x0, .par.move.num_moves = 4, .par.move.dst = {-1, 0, 1, 2, 0, 0}, .par.move.src = {0, 1, 2, -1, 0, 0}) \ - MACRO(__VA_ARGS__, u16_move_txzy_xzyt , .type = SWS_PIXEL_U16, .uop = SWS_UOP_MOVE , .mask = 0x0, .par.move.num_moves = 4, .par.move.dst = {-1, 0, 2, 1, 0, 0}, .par.move.src = {0, 2, 1, -1, 0, 0}) \ - MACRO(__VA_ARGS__, u16_move_tyzw_yzwt , .type = SWS_PIXEL_U16, .uop = SWS_UOP_MOVE , .mask = 0x0, .par.move.num_moves = 4, .par.move.dst = {-1, 1, 2, 3, 0, 0}, .par.move.src = {1, 2, 3, -1, 0, 0}) \ - MACRO(__VA_ARGS__, u16_move_txyzw_xyzwt , .type = SWS_PIXEL_U16, .uop = SWS_UOP_MOVE , .mask = 0x0, .par.move.num_moves = 5, .par.move.dst = {-1, 0, 1, 2, 3, 0}, .par.move.src = {0, 1, 2, 3, -1, 0}) \ - MACRO(__VA_ARGS__, u16_move_txwzy_xwzyt , .type = SWS_PIXEL_U16, .uop = SWS_UOP_MOVE , .mask = 0x0, .par.move.num_moves = 5, .par.move.dst = {-1, 0, 3, 2, 1, 0}, .par.move.src = {0, 3, 2, 1, -1, 0}) \ - MACRO(__VA_ARGS__, u16_move_txwtyz_xwtyzt , .type = SWS_PIXEL_U16, .uop = SWS_UOP_MOVE , .mask = 0x0, .par.move.num_moves = 6, .par.move.dst = {-1, 0, 3, -1, 1, 2}, .par.move.src = {0, 3, -1, 1, 2, -1}) + MACRO(__VA_ARGS__, u16_copy_xyzw_yz_xx , .type = SWS_PIXEL_U16, .uop = SWS_UOP_COPY , .mask = 0xf, .par.move.num_moves = 2, .par.move.dst = {1, 2, 0, 0, 0, 0}, .par.move.src = {0, 0, 0, 0, 0, 0}) \ + MACRO(__VA_ARGS__, u16_copy_xyzw_zwy_xyx , .type = SWS_PIXEL_U16, .uop = SWS_UOP_COPY , .mask = 0xf, .par.move.num_moves = 3, .par.move.dst = {2, 3, 1, 0, 0, 0}, .par.move.src = {0, 1, 0, 0, 0, 0}) #define SWS_FOR_U16_SWAP_BYTES(MACRO, ...) \ MACRO(__VA_ARGS__, u16_swap_bytes_x , SWS_PIXEL_U16, SWS_UOP_SWAP_BYTES , 0x1) \ MACRO(__VA_ARGS__, u16_swap_bytes_y , SWS_PIXEL_U16, SWS_UOP_SWAP_BYTES , 0x2) \ @@ -706,113 +630,73 @@ #define SWS_FOR_U32_WRITE_BIT(MACRO, ...) #define SWS_FOR_STRUCT_U32_WRITE_BIT(MACRO, ...) #define SWS_FOR_U32_PERMUTE(MACRO, ...) \ - MACRO(__VA_ARGS__, u32_permute_xzyw , SWS_PIXEL_U32, SWS_UOP_PERMUTE , 0x0, 0, 2, 1, 3) \ - MACRO(__VA_ARGS__, u32_permute_xzwy , SWS_PIXEL_U32, SWS_UOP_PERMUTE , 0x0, 0, 2, 3, 1) \ - MACRO(__VA_ARGS__, u32_permute_xwzy , SWS_PIXEL_U32, SWS_UOP_PERMUTE , 0x0, 0, 3, 2, 1) \ - MACRO(__VA_ARGS__, u32_permute_yxzw , SWS_PIXEL_U32, SWS_UOP_PERMUTE , 0x0, 1, 0, 2, 3) \ - MACRO(__VA_ARGS__, u32_permute_yzxw , SWS_PIXEL_U32, SWS_UOP_PERMUTE , 0x0, 1, 2, 0, 3) \ - MACRO(__VA_ARGS__, u32_permute_yzwx , SWS_PIXEL_U32, SWS_UOP_PERMUTE , 0x0, 1, 2, 3, 0) \ - MACRO(__VA_ARGS__, u32_permute_zxyw , SWS_PIXEL_U32, SWS_UOP_PERMUTE , 0x0, 2, 0, 1, 3) \ - MACRO(__VA_ARGS__, u32_permute_zyxw , SWS_PIXEL_U32, SWS_UOP_PERMUTE , 0x0, 2, 1, 0, 3) \ - MACRO(__VA_ARGS__, u32_permute_zywx , SWS_PIXEL_U32, SWS_UOP_PERMUTE , 0x0, 2, 1, 3, 0) \ - MACRO(__VA_ARGS__, u32_permute_zwyx , SWS_PIXEL_U32, SWS_UOP_PERMUTE , 0x0, 2, 3, 1, 0) \ - MACRO(__VA_ARGS__, u32_permute_wxyz , SWS_PIXEL_U32, SWS_UOP_PERMUTE , 0x0, 3, 0, 1, 2) \ - MACRO(__VA_ARGS__, u32_permute_wxzy , SWS_PIXEL_U32, SWS_UOP_PERMUTE , 0x0, 3, 0, 2, 1) \ - MACRO(__VA_ARGS__, u32_permute_wyxz , SWS_PIXEL_U32, SWS_UOP_PERMUTE , 0x0, 3, 1, 0, 2) \ - MACRO(__VA_ARGS__, u32_permute_wyzx , SWS_PIXEL_U32, SWS_UOP_PERMUTE , 0x0, 3, 1, 2, 0) \ - MACRO(__VA_ARGS__, u32_permute_wzxy , SWS_PIXEL_U32, SWS_UOP_PERMUTE , 0x0, 3, 2, 0, 1) \ - MACRO(__VA_ARGS__, u32_permute_wzyx , SWS_PIXEL_U32, SWS_UOP_PERMUTE , 0x0, 3, 2, 1, 0) + MACRO(__VA_ARGS__, u32_permute_xyz_x_w , SWS_PIXEL_U32, SWS_UOP_PERMUTE , 0x7, 1, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0) \ + MACRO(__VA_ARGS__, u32_permute_xyz_y_w , SWS_PIXEL_U32, SWS_UOP_PERMUTE , 0x7, 1, 1, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0) \ + MACRO(__VA_ARGS__, u32_permute_xyz_xz_zw , SWS_PIXEL_U32, SWS_UOP_PERMUTE , 0x7, 2, 0, 2, 0, 0, 0, 0, 2, 3, 0, 0, 0, 0) \ + MACRO(__VA_ARGS__, u32_permute_xyz_zx_xw , SWS_PIXEL_U32, SWS_UOP_PERMUTE , 0x7, 2, 2, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0) \ + MACRO(__VA_ARGS__, u32_permute_xyz_xyz_yzw , SWS_PIXEL_U32, SWS_UOP_PERMUTE , 0x7, 3, 0, 1, 2, 0, 0, 0, 1, 2, 3, 0, 0, 0) \ + MACRO(__VA_ARGS__, u32_permute_xyz_xzy_zyw , SWS_PIXEL_U32, SWS_UOP_PERMUTE , 0x7, 3, 0, 2, 1, 0, 0, 0, 2, 1, 3, 0, 0, 0) \ + MACRO(__VA_ARGS__, u32_permute_xyz_xtyz_wyzt , SWS_PIXEL_U32, SWS_UOP_PERMUTE , 0x7, 4, 0, -1, 1, 2, 0, 0, 3, 1, 2, -1, 0, 0) \ + MACRO(__VA_ARGS__, u32_permute_xyw_x_z , SWS_PIXEL_U32, SWS_UOP_PERMUTE , 0xb, 1, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0) \ + MACRO(__VA_ARGS__, u32_permute_xzw_x_y , SWS_PIXEL_U32, SWS_UOP_PERMUTE , 0xd, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0) \ + MACRO(__VA_ARGS__, u32_permute_xzw_w_y , SWS_PIXEL_U32, SWS_UOP_PERMUTE , 0xd, 1, 3, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0) \ + MACRO(__VA_ARGS__, u32_permute_xzw_wx_xy , SWS_PIXEL_U32, SWS_UOP_PERMUTE , 0xd, 2, 3, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0) \ + MACRO(__VA_ARGS__, u32_permute_yzw_y_x , SWS_PIXEL_U32, SWS_UOP_PERMUTE , 0xe, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0) \ + MACRO(__VA_ARGS__, u32_permute_yzw_z_x , SWS_PIXEL_U32, SWS_UOP_PERMUTE , 0xe, 1, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0) \ + MACRO(__VA_ARGS__, u32_permute_yzw_w_x , SWS_PIXEL_U32, SWS_UOP_PERMUTE , 0xe, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0) \ + MACRO(__VA_ARGS__, u32_permute_yzw_wy_yx , SWS_PIXEL_U32, SWS_UOP_PERMUTE , 0xe, 2, 3, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0) \ + MACRO(__VA_ARGS__, u32_permute_yzw_wz_zx , SWS_PIXEL_U32, SWS_UOP_PERMUTE , 0xe, 2, 3, 2, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0) \ + MACRO(__VA_ARGS__, u32_permute_yzw_wyz_yzx , SWS_PIXEL_U32, SWS_UOP_PERMUTE , 0xe, 3, 3, 1, 2, 0, 0, 0, 1, 2, 0, 0, 0, 0) \ + MACRO(__VA_ARGS__, u32_permute_yzw_wzy_zyx , SWS_PIXEL_U32, SWS_UOP_PERMUTE , 0xe, 3, 3, 2, 1, 0, 0, 0, 2, 1, 0, 0, 0, 0) \ + MACRO(__VA_ARGS__, u32_permute_yzw_wtyz_xyzt , SWS_PIXEL_U32, SWS_UOP_PERMUTE , 0xe, 4, 3, -1, 1, 2, 0, 0, 0, 1, 2, -1, 0, 0) \ + MACRO(__VA_ARGS__, u32_permute_xyzw_txy_xyt , SWS_PIXEL_U32, SWS_UOP_PERMUTE , 0xf, 3, -1, 0, 1, 0, 0, 0, 0, 1, -1, 0, 0, 0) \ + MACRO(__VA_ARGS__, u32_permute_xyzw_txz_xzt , SWS_PIXEL_U32, SWS_UOP_PERMUTE , 0xf, 3, -1, 0, 2, 0, 0, 0, 0, 2, -1, 0, 0, 0) \ + MACRO(__VA_ARGS__, u32_permute_xyzw_tyz_yzt , SWS_PIXEL_U32, SWS_UOP_PERMUTE , 0xf, 3, -1, 1, 2, 0, 0, 0, 1, 2, -1, 0, 0, 0) \ + MACRO(__VA_ARGS__, u32_permute_xyzw_tyw_ywt , SWS_PIXEL_U32, SWS_UOP_PERMUTE , 0xf, 3, -1, 1, 3, 0, 0, 0, 1, 3, -1, 0, 0, 0) \ + MACRO(__VA_ARGS__, u32_permute_xyzw_txyz_xyzt , SWS_PIXEL_U32, SWS_UOP_PERMUTE , 0xf, 4, -1, 0, 1, 2, 0, 0, 0, 1, 2, -1, 0, 0) \ + MACRO(__VA_ARGS__, u32_permute_xyzw_txzy_xzyt , SWS_PIXEL_U32, SWS_UOP_PERMUTE , 0xf, 4, -1, 0, 2, 1, 0, 0, 0, 2, 1, -1, 0, 0) \ + MACRO(__VA_ARGS__, u32_permute_xyzw_txyzw_xyzwt , SWS_PIXEL_U32, SWS_UOP_PERMUTE , 0xf, 5, -1, 0, 1, 2, 3, 0, 0, 1, 2, 3, -1, 0) \ + MACRO(__VA_ARGS__, u32_permute_xyzw_txwyz_xwyzt , SWS_PIXEL_U32, SWS_UOP_PERMUTE , 0xf, 5, -1, 0, 3, 1, 2, 0, 0, 3, 1, 2, -1, 0) \ + MACRO(__VA_ARGS__, u32_permute_xyzw_txwzy_xwzyt , SWS_PIXEL_U32, SWS_UOP_PERMUTE , 0xf, 5, -1, 0, 3, 2, 1, 0, 0, 3, 2, 1, -1, 0) \ + MACRO(__VA_ARGS__, u32_permute_xyzw_txwtyz_xwtyzt , SWS_PIXEL_U32, SWS_UOP_PERMUTE , 0xf, 6, -1, 0, 3, -1, 1, 2, 0, 3, -1, 1, 2, -1) #define SWS_FOR_STRUCT_U32_PERMUTE(MACRO, ...) \ - MACRO(__VA_ARGS__, u32_permute_xzyw , .type = SWS_PIXEL_U32, .uop = SWS_UOP_PERMUTE , .mask = 0x0, .par.swizzle.in = {0, 2, 1, 3}) \ - MACRO(__VA_ARGS__, u32_permute_xzwy , .type = SWS_PIXEL_U32, .uop = SWS_UOP_PERMUTE , .mask = 0x0, .par.swizzle.in = {0, 2, 3, 1}) \ - MACRO(__VA_ARGS__, u32_permute_xwzy , .type = SWS_PIXEL_U32, .uop = SWS_UOP_PERMUTE , .mask = 0x0, .par.swizzle.in = {0, 3, 2, 1}) \ - MACRO(__VA_ARGS__, u32_permute_yxzw , .type = SWS_PIXEL_U32, .uop = SWS_UOP_PERMUTE , .mask = 0x0, .par.swizzle.in = {1, 0, 2, 3}) \ - MACRO(__VA_ARGS__, u32_permute_yzxw , .type = SWS_PIXEL_U32, .uop = SWS_UOP_PERMUTE , .mask = 0x0, .par.swizzle.in = {1, 2, 0, 3}) \ - MACRO(__VA_ARGS__, u32_permute_yzwx , .type = SWS_PIXEL_U32, .uop = SWS_UOP_PERMUTE , .mask = 0x0, .par.swizzle.in = {1, 2, 3, 0}) \ - MACRO(__VA_ARGS__, u32_permute_zxyw , .type = SWS_PIXEL_U32, .uop = SWS_UOP_PERMUTE , .mask = 0x0, .par.swizzle.in = {2, 0, 1, 3}) \ - MACRO(__VA_ARGS__, u32_permute_zyxw , .type = SWS_PIXEL_U32, .uop = SWS_UOP_PERMUTE , .mask = 0x0, .par.swizzle.in = {2, 1, 0, 3}) \ - MACRO(__VA_ARGS__, u32_permute_zywx , .type = SWS_PIXEL_U32, .uop = SWS_UOP_PERMUTE , .mask = 0x0, .par.swizzle.in = {2, 1, 3, 0}) \ - MACRO(__VA_ARGS__, u32_permute_zwyx , .type = SWS_PIXEL_U32, .uop = SWS_UOP_PERMUTE , .mask = 0x0, .par.swizzle.in = {2, 3, 1, 0}) \ - MACRO(__VA_ARGS__, u32_permute_wxyz , .type = SWS_PIXEL_U32, .uop = SWS_UOP_PERMUTE , .mask = 0x0, .par.swizzle.in = {3, 0, 1, 2}) \ - MACRO(__VA_ARGS__, u32_permute_wxzy , .type = SWS_PIXEL_U32, .uop = SWS_UOP_PERMUTE , .mask = 0x0, .par.swizzle.in = {3, 0, 2, 1}) \ - MACRO(__VA_ARGS__, u32_permute_wyxz , .type = SWS_PIXEL_U32, .uop = SWS_UOP_PERMUTE , .mask = 0x0, .par.swizzle.in = {3, 1, 0, 2}) \ - MACRO(__VA_ARGS__, u32_permute_wyzx , .type = SWS_PIXEL_U32, .uop = SWS_UOP_PERMUTE , .mask = 0x0, .par.swizzle.in = {3, 1, 2, 0}) \ - MACRO(__VA_ARGS__, u32_permute_wzxy , .type = SWS_PIXEL_U32, .uop = SWS_UOP_PERMUTE , .mask = 0x0, .par.swizzle.in = {3, 2, 0, 1}) \ - MACRO(__VA_ARGS__, u32_permute_wzyx , .type = SWS_PIXEL_U32, .uop = SWS_UOP_PERMUTE , .mask = 0x0, .par.swizzle.in = {3, 2, 1, 0}) + MACRO(__VA_ARGS__, u32_permute_xyz_x_w , .type = SWS_PIXEL_U32, .uop = SWS_UOP_PERMUTE , .mask = 0x7, .par.move.num_moves = 1, .par.move.dst = {0, 0, 0, 0, 0, 0}, .par.move.src = {3, 0, 0, 0, 0, 0}) \ + MACRO(__VA_ARGS__, u32_permute_xyz_y_w , .type = SWS_PIXEL_U32, .uop = SWS_UOP_PERMUTE , .mask = 0x7, .par.move.num_moves = 1, .par.move.dst = {1, 0, 0, 0, 0, 0}, .par.move.src = {3, 0, 0, 0, 0, 0}) \ + MACRO(__VA_ARGS__, u32_permute_xyz_xz_zw , .type = SWS_PIXEL_U32, .uop = SWS_UOP_PERMUTE , .mask = 0x7, .par.move.num_moves = 2, .par.move.dst = {0, 2, 0, 0, 0, 0}, .par.move.src = {2, 3, 0, 0, 0, 0}) \ + MACRO(__VA_ARGS__, u32_permute_xyz_zx_xw , .type = SWS_PIXEL_U32, .uop = SWS_UOP_PERMUTE , .mask = 0x7, .par.move.num_moves = 2, .par.move.dst = {2, 0, 0, 0, 0, 0}, .par.move.src = {0, 3, 0, 0, 0, 0}) \ + MACRO(__VA_ARGS__, u32_permute_xyz_xyz_yzw , .type = SWS_PIXEL_U32, .uop = SWS_UOP_PERMUTE , .mask = 0x7, .par.move.num_moves = 3, .par.move.dst = {0, 1, 2, 0, 0, 0}, .par.move.src = {1, 2, 3, 0, 0, 0}) \ + MACRO(__VA_ARGS__, u32_permute_xyz_xzy_zyw , .type = SWS_PIXEL_U32, .uop = SWS_UOP_PERMUTE , .mask = 0x7, .par.move.num_moves = 3, .par.move.dst = {0, 2, 1, 0, 0, 0}, .par.move.src = {2, 1, 3, 0, 0, 0}) \ + MACRO(__VA_ARGS__, u32_permute_xyz_xtyz_wyzt , .type = SWS_PIXEL_U32, .uop = SWS_UOP_PERMUTE , .mask = 0x7, .par.move.num_moves = 4, .par.move.dst = {0, -1, 1, 2, 0, 0}, .par.move.src = {3, 1, 2, -1, 0, 0}) \ + MACRO(__VA_ARGS__, u32_permute_xyw_x_z , .type = SWS_PIXEL_U32, .uop = SWS_UOP_PERMUTE , .mask = 0xb, .par.move.num_moves = 1, .par.move.dst = {0, 0, 0, 0, 0, 0}, .par.move.src = {2, 0, 0, 0, 0, 0}) \ + MACRO(__VA_ARGS__, u32_permute_xzw_x_y , .type = SWS_PIXEL_U32, .uop = SWS_UOP_PERMUTE , .mask = 0xd, .par.move.num_moves = 1, .par.move.dst = {0, 0, 0, 0, 0, 0}, .par.move.src = {1, 0, 0, 0, 0, 0}) \ + MACRO(__VA_ARGS__, u32_permute_xzw_w_y , .type = SWS_PIXEL_U32, .uop = SWS_UOP_PERMUTE , .mask = 0xd, .par.move.num_moves = 1, .par.move.dst = {3, 0, 0, 0, 0, 0}, .par.move.src = {1, 0, 0, 0, 0, 0}) \ + MACRO(__VA_ARGS__, u32_permute_xzw_wx_xy , .type = SWS_PIXEL_U32, .uop = SWS_UOP_PERMUTE , .mask = 0xd, .par.move.num_moves = 2, .par.move.dst = {3, 0, 0, 0, 0, 0}, .par.move.src = {0, 1, 0, 0, 0, 0}) \ + MACRO(__VA_ARGS__, u32_permute_yzw_y_x , .type = SWS_PIXEL_U32, .uop = SWS_UOP_PERMUTE , .mask = 0xe, .par.move.num_moves = 1, .par.move.dst = {1, 0, 0, 0, 0, 0}, .par.move.src = {0, 0, 0, 0, 0, 0}) \ + MACRO(__VA_ARGS__, u32_permute_yzw_z_x , .type = SWS_PIXEL_U32, .uop = SWS_UOP_PERMUTE , .mask = 0xe, .par.move.num_moves = 1, .par.move.dst = {2, 0, 0, 0, 0, 0}, .par.move.src = {0, 0, 0, 0, 0, 0}) \ + MACRO(__VA_ARGS__, u32_permute_yzw_w_x , .type = SWS_PIXEL_U32, .uop = SWS_UOP_PERMUTE , .mask = 0xe, .par.move.num_moves = 1, .par.move.dst = {3, 0, 0, 0, 0, 0}, .par.move.src = {0, 0, 0, 0, 0, 0}) \ + MACRO(__VA_ARGS__, u32_permute_yzw_wy_yx , .type = SWS_PIXEL_U32, .uop = SWS_UOP_PERMUTE , .mask = 0xe, .par.move.num_moves = 2, .par.move.dst = {3, 1, 0, 0, 0, 0}, .par.move.src = {1, 0, 0, 0, 0, 0}) \ + MACRO(__VA_ARGS__, u32_permute_yzw_wz_zx , .type = SWS_PIXEL_U32, .uop = SWS_UOP_PERMUTE , .mask = 0xe, .par.move.num_moves = 2, .par.move.dst = {3, 2, 0, 0, 0, 0}, .par.move.src = {2, 0, 0, 0, 0, 0}) \ + MACRO(__VA_ARGS__, u32_permute_yzw_wyz_yzx , .type = SWS_PIXEL_U32, .uop = SWS_UOP_PERMUTE , .mask = 0xe, .par.move.num_moves = 3, .par.move.dst = {3, 1, 2, 0, 0, 0}, .par.move.src = {1, 2, 0, 0, 0, 0}) \ + MACRO(__VA_ARGS__, u32_permute_yzw_wzy_zyx , .type = SWS_PIXEL_U32, .uop = SWS_UOP_PERMUTE , .mask = 0xe, .par.move.num_moves = 3, .par.move.dst = {3, 2, 1, 0, 0, 0}, .par.move.src = {2, 1, 0, 0, 0, 0}) \ + MACRO(__VA_ARGS__, u32_permute_yzw_wtyz_xyzt , .type = SWS_PIXEL_U32, .uop = SWS_UOP_PERMUTE , .mask = 0xe, .par.move.num_moves = 4, .par.move.dst = {3, -1, 1, 2, 0, 0}, .par.move.src = {0, 1, 2, -1, 0, 0}) \ + MACRO(__VA_ARGS__, u32_permute_xyzw_txy_xyt , .type = SWS_PIXEL_U32, .uop = SWS_UOP_PERMUTE , .mask = 0xf, .par.move.num_moves = 3, .par.move.dst = {-1, 0, 1, 0, 0, 0}, .par.move.src = {0, 1, -1, 0, 0, 0}) \ + MACRO(__VA_ARGS__, u32_permute_xyzw_txz_xzt , .type = SWS_PIXEL_U32, .uop = SWS_UOP_PERMUTE , .mask = 0xf, .par.move.num_moves = 3, .par.move.dst = {-1, 0, 2, 0, 0, 0}, .par.move.src = {0, 2, -1, 0, 0, 0}) \ + MACRO(__VA_ARGS__, u32_permute_xyzw_tyz_yzt , .type = SWS_PIXEL_U32, .uop = SWS_UOP_PERMUTE , .mask = 0xf, .par.move.num_moves = 3, .par.move.dst = {-1, 1, 2, 0, 0, 0}, .par.move.src = {1, 2, -1, 0, 0, 0}) \ + MACRO(__VA_ARGS__, u32_permute_xyzw_tyw_ywt , .type = SWS_PIXEL_U32, .uop = SWS_UOP_PERMUTE , .mask = 0xf, .par.move.num_moves = 3, .par.move.dst = {-1, 1, 3, 0, 0, 0}, .par.move.src = {1, 3, -1, 0, 0, 0}) \ + MACRO(__VA_ARGS__, u32_permute_xyzw_txyz_xyzt , .type = SWS_PIXEL_U32, .uop = SWS_UOP_PERMUTE , .mask = 0xf, .par.move.num_moves = 4, .par.move.dst = {-1, 0, 1, 2, 0, 0}, .par.move.src = {0, 1, 2, -1, 0, 0}) \ + MACRO(__VA_ARGS__, u32_permute_xyzw_txzy_xzyt , .type = SWS_PIXEL_U32, .uop = SWS_UOP_PERMUTE , .mask = 0xf, .par.move.num_moves = 4, .par.move.dst = {-1, 0, 2, 1, 0, 0}, .par.move.src = {0, 2, 1, -1, 0, 0}) \ + MACRO(__VA_ARGS__, u32_permute_xyzw_txyzw_xyzwt , .type = SWS_PIXEL_U32, .uop = SWS_UOP_PERMUTE , .mask = 0xf, .par.move.num_moves = 5, .par.move.dst = {-1, 0, 1, 2, 3, 0}, .par.move.src = {0, 1, 2, 3, -1, 0}) \ + MACRO(__VA_ARGS__, u32_permute_xyzw_txwyz_xwyzt , .type = SWS_PIXEL_U32, .uop = SWS_UOP_PERMUTE , .mask = 0xf, .par.move.num_moves = 5, .par.move.dst = {-1, 0, 3, 1, 2, 0}, .par.move.src = {0, 3, 1, 2, -1, 0}) \ + MACRO(__VA_ARGS__, u32_permute_xyzw_txwzy_xwzyt , .type = SWS_PIXEL_U32, .uop = SWS_UOP_PERMUTE , .mask = 0xf, .par.move.num_moves = 5, .par.move.dst = {-1, 0, 3, 2, 1, 0}, .par.move.src = {0, 3, 2, 1, -1, 0}) \ + MACRO(__VA_ARGS__, u32_permute_xyzw_txwtyz_xwtyzt , .type = SWS_PIXEL_U32, .uop = SWS_UOP_PERMUTE , .mask = 0xf, .par.move.num_moves = 6, .par.move.dst = {-1, 0, 3, -1, 1, 2}, .par.move.src = {0, 3, -1, 1, 2, -1}) #define SWS_FOR_U32_COPY(MACRO, ...) \ - MACRO(__VA_ARGS__, u32_copy_yz_xx , SWS_PIXEL_U32, SWS_UOP_COPY , 0x6, 0, 0, 0, 3) \ - MACRO(__VA_ARGS__, u32_copy_yzw_xxx , SWS_PIXEL_U32, SWS_UOP_COPY , 0xe, 0, 0, 0, 0) \ - MACRO(__VA_ARGS__, u32_copy_yzw_xxy , SWS_PIXEL_U32, SWS_UOP_COPY , 0xe, 0, 0, 0, 1) + MACRO(__VA_ARGS__, u32_copy_yzw_yzw_xxx , SWS_PIXEL_U32, SWS_UOP_COPY , 0xe, 3, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0) \ + MACRO(__VA_ARGS__, u32_copy_xyzw_yz_xx , SWS_PIXEL_U32, SWS_UOP_COPY , 0xf, 2, 1, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0) \ + MACRO(__VA_ARGS__, u32_copy_xyzw_zwy_xyx , SWS_PIXEL_U32, SWS_UOP_COPY , 0xf, 3, 2, 3, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0) #define SWS_FOR_STRUCT_U32_COPY(MACRO, ...) \ - MACRO(__VA_ARGS__, u32_copy_yz_xx , .type = SWS_PIXEL_U32, .uop = SWS_UOP_COPY , .mask = 0x6, .par.swizzle.in = {0, 0, 0, 3}) \ - MACRO(__VA_ARGS__, u32_copy_yzw_xxx , .type = SWS_PIXEL_U32, .uop = SWS_UOP_COPY , .mask = 0xe, .par.swizzle.in = {0, 0, 0, 0}) \ - MACRO(__VA_ARGS__, u32_copy_yzw_xxy , .type = SWS_PIXEL_U32, .uop = SWS_UOP_COPY , .mask = 0xe, .par.swizzle.in = {0, 0, 0, 1}) -#define SWS_FOR_U32_MOVE(MACRO, ...) \ - MACRO(__VA_ARGS__, u32_move_x_y , SWS_PIXEL_U32, SWS_UOP_MOVE , 0x0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0) \ - MACRO(__VA_ARGS__, u32_move_x_z , SWS_PIXEL_U32, SWS_UOP_MOVE , 0x0, 1, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0) \ - MACRO(__VA_ARGS__, u32_move_x_w , SWS_PIXEL_U32, SWS_UOP_MOVE , 0x0, 1, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0) \ - MACRO(__VA_ARGS__, u32_move_y_x , SWS_PIXEL_U32, SWS_UOP_MOVE , 0x0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0) \ - MACRO(__VA_ARGS__, u32_move_y_w , SWS_PIXEL_U32, SWS_UOP_MOVE , 0x0, 1, 1, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0) \ - MACRO(__VA_ARGS__, u32_move_z_x , SWS_PIXEL_U32, SWS_UOP_MOVE , 0x0, 1, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0) \ - MACRO(__VA_ARGS__, u32_move_w_x , SWS_PIXEL_U32, SWS_UOP_MOVE , 0x0, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0) \ - MACRO(__VA_ARGS__, u32_move_w_y , SWS_PIXEL_U32, SWS_UOP_MOVE , 0x0, 1, 3, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0) \ - MACRO(__VA_ARGS__, u32_move_xz_zw , SWS_PIXEL_U32, SWS_UOP_MOVE , 0x0, 2, 0, 2, 0, 0, 0, 0, 2, 3, 0, 0, 0, 0) \ - MACRO(__VA_ARGS__, u32_move_yz_xx , SWS_PIXEL_U32, SWS_UOP_MOVE , 0x0, 2, 1, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0) \ - MACRO(__VA_ARGS__, u32_move_zx_xw , SWS_PIXEL_U32, SWS_UOP_MOVE , 0x0, 2, 2, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0) \ - MACRO(__VA_ARGS__, u32_move_wx_xy , SWS_PIXEL_U32, SWS_UOP_MOVE , 0x0, 2, 3, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0) \ - MACRO(__VA_ARGS__, u32_move_wy_yx , SWS_PIXEL_U32, SWS_UOP_MOVE , 0x0, 2, 3, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0) \ - MACRO(__VA_ARGS__, u32_move_wz_zx , SWS_PIXEL_U32, SWS_UOP_MOVE , 0x0, 2, 3, 2, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0) \ - MACRO(__VA_ARGS__, u32_move_xyz_yzw , SWS_PIXEL_U32, SWS_UOP_MOVE , 0x0, 3, 0, 1, 2, 0, 0, 0, 1, 2, 3, 0, 0, 0) \ - MACRO(__VA_ARGS__, u32_move_xzy_zyw , SWS_PIXEL_U32, SWS_UOP_MOVE , 0x0, 3, 0, 2, 1, 0, 0, 0, 2, 1, 3, 0, 0, 0) \ - MACRO(__VA_ARGS__, u32_move_yzw_xxx , SWS_PIXEL_U32, SWS_UOP_MOVE , 0x0, 3, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0) \ - MACRO(__VA_ARGS__, u32_move_zwy_xyx , SWS_PIXEL_U32, SWS_UOP_MOVE , 0x0, 3, 2, 3, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0) \ - MACRO(__VA_ARGS__, u32_move_wyz_yzx , SWS_PIXEL_U32, SWS_UOP_MOVE , 0x0, 3, 3, 1, 2, 0, 0, 0, 1, 2, 0, 0, 0, 0) \ - MACRO(__VA_ARGS__, u32_move_wzy_zyx , SWS_PIXEL_U32, SWS_UOP_MOVE , 0x0, 3, 3, 2, 1, 0, 0, 0, 2, 1, 0, 0, 0, 0) \ - MACRO(__VA_ARGS__, u32_move_txy_xyt , SWS_PIXEL_U32, SWS_UOP_MOVE , 0x0, 3, -1, 0, 1, 0, 0, 0, 0, 1, -1, 0, 0, 0) \ - MACRO(__VA_ARGS__, u32_move_txz_xzt , SWS_PIXEL_U32, SWS_UOP_MOVE , 0x0, 3, -1, 0, 2, 0, 0, 0, 0, 2, -1, 0, 0, 0) \ - MACRO(__VA_ARGS__, u32_move_tyz_yzt , SWS_PIXEL_U32, SWS_UOP_MOVE , 0x0, 3, -1, 1, 2, 0, 0, 0, 1, 2, -1, 0, 0, 0) \ - MACRO(__VA_ARGS__, u32_move_tyw_ywt , SWS_PIXEL_U32, SWS_UOP_MOVE , 0x0, 3, -1, 1, 3, 0, 0, 0, 1, 3, -1, 0, 0, 0) \ - MACRO(__VA_ARGS__, u32_move_xtyz_wyzt , SWS_PIXEL_U32, SWS_UOP_MOVE , 0x0, 4, 0, -1, 1, 2, 0, 0, 3, 1, 2, -1, 0, 0) \ - MACRO(__VA_ARGS__, u32_move_wtyz_xyzt , SWS_PIXEL_U32, SWS_UOP_MOVE , 0x0, 4, 3, -1, 1, 2, 0, 0, 0, 1, 2, -1, 0, 0) \ - MACRO(__VA_ARGS__, u32_move_txyz_xyzt , SWS_PIXEL_U32, SWS_UOP_MOVE , 0x0, 4, -1, 0, 1, 2, 0, 0, 0, 1, 2, -1, 0, 0) \ - MACRO(__VA_ARGS__, u32_move_txzy_xzyt , SWS_PIXEL_U32, SWS_UOP_MOVE , 0x0, 4, -1, 0, 2, 1, 0, 0, 0, 2, 1, -1, 0, 0) \ - MACRO(__VA_ARGS__, u32_move_txyzw_xyzwt , SWS_PIXEL_U32, SWS_UOP_MOVE , 0x0, 5, -1, 0, 1, 2, 3, 0, 0, 1, 2, 3, -1, 0) \ - MACRO(__VA_ARGS__, u32_move_txwyz_xwyzt , SWS_PIXEL_U32, SWS_UOP_MOVE , 0x0, 5, -1, 0, 3, 1, 2, 0, 0, 3, 1, 2, -1, 0) \ - MACRO(__VA_ARGS__, u32_move_txwzy_xwzyt , SWS_PIXEL_U32, SWS_UOP_MOVE , 0x0, 5, -1, 0, 3, 2, 1, 0, 0, 3, 2, 1, -1, 0) \ - MACRO(__VA_ARGS__, u32_move_txwtyz_xwtyzt , SWS_PIXEL_U32, SWS_UOP_MOVE , 0x0, 6, -1, 0, 3, -1, 1, 2, 0, 3, -1, 1, 2, -1) -#define SWS_FOR_STRUCT_U32_MOVE(MACRO, ...) \ - MACRO(__VA_ARGS__, u32_move_x_y , .type = SWS_PIXEL_U32, .uop = SWS_UOP_MOVE , .mask = 0x0, .par.move.num_moves = 1, .par.move.dst = {0, 0, 0, 0, 0, 0}, .par.move.src = {1, 0, 0, 0, 0, 0}) \ - MACRO(__VA_ARGS__, u32_move_x_z , .type = SWS_PIXEL_U32, .uop = SWS_UOP_MOVE , .mask = 0x0, .par.move.num_moves = 1, .par.move.dst = {0, 0, 0, 0, 0, 0}, .par.move.src = {2, 0, 0, 0, 0, 0}) \ - MACRO(__VA_ARGS__, u32_move_x_w , .type = SWS_PIXEL_U32, .uop = SWS_UOP_MOVE , .mask = 0x0, .par.move.num_moves = 1, .par.move.dst = {0, 0, 0, 0, 0, 0}, .par.move.src = {3, 0, 0, 0, 0, 0}) \ - MACRO(__VA_ARGS__, u32_move_y_x , .type = SWS_PIXEL_U32, .uop = SWS_UOP_MOVE , .mask = 0x0, .par.move.num_moves = 1, .par.move.dst = {1, 0, 0, 0, 0, 0}, .par.move.src = {0, 0, 0, 0, 0, 0}) \ - MACRO(__VA_ARGS__, u32_move_y_w , .type = SWS_PIXEL_U32, .uop = SWS_UOP_MOVE , .mask = 0x0, .par.move.num_moves = 1, .par.move.dst = {1, 0, 0, 0, 0, 0}, .par.move.src = {3, 0, 0, 0, 0, 0}) \ - MACRO(__VA_ARGS__, u32_move_z_x , .type = SWS_PIXEL_U32, .uop = SWS_UOP_MOVE , .mask = 0x0, .par.move.num_moves = 1, .par.move.dst = {2, 0, 0, 0, 0, 0}, .par.move.src = {0, 0, 0, 0, 0, 0}) \ - MACRO(__VA_ARGS__, u32_move_w_x , .type = SWS_PIXEL_U32, .uop = SWS_UOP_MOVE , .mask = 0x0, .par.move.num_moves = 1, .par.move.dst = {3, 0, 0, 0, 0, 0}, .par.move.src = {0, 0, 0, 0, 0, 0}) \ - MACRO(__VA_ARGS__, u32_move_w_y , .type = SWS_PIXEL_U32, .uop = SWS_UOP_MOVE , .mask = 0x0, .par.move.num_moves = 1, .par.move.dst = {3, 0, 0, 0, 0, 0}, .par.move.src = {1, 0, 0, 0, 0, 0}) \ - MACRO(__VA_ARGS__, u32_move_xz_zw , .type = SWS_PIXEL_U32, .uop = SWS_UOP_MOVE , .mask = 0x0, .par.move.num_moves = 2, .par.move.dst = {0, 2, 0, 0, 0, 0}, .par.move.src = {2, 3, 0, 0, 0, 0}) \ - MACRO(__VA_ARGS__, u32_move_yz_xx , .type = SWS_PIXEL_U32, .uop = SWS_UOP_MOVE , .mask = 0x0, .par.move.num_moves = 2, .par.move.dst = {1, 2, 0, 0, 0, 0}, .par.move.src = {0, 0, 0, 0, 0, 0}) \ - MACRO(__VA_ARGS__, u32_move_zx_xw , .type = SWS_PIXEL_U32, .uop = SWS_UOP_MOVE , .mask = 0x0, .par.move.num_moves = 2, .par.move.dst = {2, 0, 0, 0, 0, 0}, .par.move.src = {0, 3, 0, 0, 0, 0}) \ - MACRO(__VA_ARGS__, u32_move_wx_xy , .type = SWS_PIXEL_U32, .uop = SWS_UOP_MOVE , .mask = 0x0, .par.move.num_moves = 2, .par.move.dst = {3, 0, 0, 0, 0, 0}, .par.move.src = {0, 1, 0, 0, 0, 0}) \ - MACRO(__VA_ARGS__, u32_move_wy_yx , .type = SWS_PIXEL_U32, .uop = SWS_UOP_MOVE , .mask = 0x0, .par.move.num_moves = 2, .par.move.dst = {3, 1, 0, 0, 0, 0}, .par.move.src = {1, 0, 0, 0, 0, 0}) \ - MACRO(__VA_ARGS__, u32_move_wz_zx , .type = SWS_PIXEL_U32, .uop = SWS_UOP_MOVE , .mask = 0x0, .par.move.num_moves = 2, .par.move.dst = {3, 2, 0, 0, 0, 0}, .par.move.src = {2, 0, 0, 0, 0, 0}) \ - MACRO(__VA_ARGS__, u32_move_xyz_yzw , .type = SWS_PIXEL_U32, .uop = SWS_UOP_MOVE , .mask = 0x0, .par.move.num_moves = 3, .par.move.dst = {0, 1, 2, 0, 0, 0}, .par.move.src = {1, 2, 3, 0, 0, 0}) \ - MACRO(__VA_ARGS__, u32_move_xzy_zyw , .type = SWS_PIXEL_U32, .uop = SWS_UOP_MOVE , .mask = 0x0, .par.move.num_moves = 3, .par.move.dst = {0, 2, 1, 0, 0, 0}, .par.move.src = {2, 1, 3, 0, 0, 0}) \ - MACRO(__VA_ARGS__, u32_move_yzw_xxx , .type = SWS_PIXEL_U32, .uop = SWS_UOP_MOVE , .mask = 0x0, .par.move.num_moves = 3, .par.move.dst = {1, 2, 3, 0, 0, 0}, .par.move.src = {0, 0, 0, 0, 0, 0}) \ - MACRO(__VA_ARGS__, u32_move_zwy_xyx , .type = SWS_PIXEL_U32, .uop = SWS_UOP_MOVE , .mask = 0x0, .par.move.num_moves = 3, .par.move.dst = {2, 3, 1, 0, 0, 0}, .par.move.src = {0, 1, 0, 0, 0, 0}) \ - MACRO(__VA_ARGS__, u32_move_wyz_yzx , .type = SWS_PIXEL_U32, .uop = SWS_UOP_MOVE , .mask = 0x0, .par.move.num_moves = 3, .par.move.dst = {3, 1, 2, 0, 0, 0}, .par.move.src = {1, 2, 0, 0, 0, 0}) \ - MACRO(__VA_ARGS__, u32_move_wzy_zyx , .type = SWS_PIXEL_U32, .uop = SWS_UOP_MOVE , .mask = 0x0, .par.move.num_moves = 3, .par.move.dst = {3, 2, 1, 0, 0, 0}, .par.move.src = {2, 1, 0, 0, 0, 0}) \ - MACRO(__VA_ARGS__, u32_move_txy_xyt , .type = SWS_PIXEL_U32, .uop = SWS_UOP_MOVE , .mask = 0x0, .par.move.num_moves = 3, .par.move.dst = {-1, 0, 1, 0, 0, 0}, .par.move.src = {0, 1, -1, 0, 0, 0}) \ - MACRO(__VA_ARGS__, u32_move_txz_xzt , .type = SWS_PIXEL_U32, .uop = SWS_UOP_MOVE , .mask = 0x0, .par.move.num_moves = 3, .par.move.dst = {-1, 0, 2, 0, 0, 0}, .par.move.src = {0, 2, -1, 0, 0, 0}) \ - MACRO(__VA_ARGS__, u32_move_tyz_yzt , .type = SWS_PIXEL_U32, .uop = SWS_UOP_MOVE , .mask = 0x0, .par.move.num_moves = 3, .par.move.dst = {-1, 1, 2, 0, 0, 0}, .par.move.src = {1, 2, -1, 0, 0, 0}) \ - MACRO(__VA_ARGS__, u32_move_tyw_ywt , .type = SWS_PIXEL_U32, .uop = SWS_UOP_MOVE , .mask = 0x0, .par.move.num_moves = 3, .par.move.dst = {-1, 1, 3, 0, 0, 0}, .par.move.src = {1, 3, -1, 0, 0, 0}) \ - MACRO(__VA_ARGS__, u32_move_xtyz_wyzt , .type = SWS_PIXEL_U32, .uop = SWS_UOP_MOVE , .mask = 0x0, .par.move.num_moves = 4, .par.move.dst = {0, -1, 1, 2, 0, 0}, .par.move.src = {3, 1, 2, -1, 0, 0}) \ - MACRO(__VA_ARGS__, u32_move_wtyz_xyzt , .type = SWS_PIXEL_U32, .uop = SWS_UOP_MOVE , .mask = 0x0, .par.move.num_moves = 4, .par.move.dst = {3, -1, 1, 2, 0, 0}, .par.move.src = {0, 1, 2, -1, 0, 0}) \ - MACRO(__VA_ARGS__, u32_move_txyz_xyzt , .type = SWS_PIXEL_U32, .uop = SWS_UOP_MOVE , .mask = 0x0, .par.move.num_moves = 4, .par.move.dst = {-1, 0, 1, 2, 0, 0}, .par.move.src = {0, 1, 2, -1, 0, 0}) \ - MACRO(__VA_ARGS__, u32_move_txzy_xzyt , .type = SWS_PIXEL_U32, .uop = SWS_UOP_MOVE , .mask = 0x0, .par.move.num_moves = 4, .par.move.dst = {-1, 0, 2, 1, 0, 0}, .par.move.src = {0, 2, 1, -1, 0, 0}) \ - MACRO(__VA_ARGS__, u32_move_txyzw_xyzwt , .type = SWS_PIXEL_U32, .uop = SWS_UOP_MOVE , .mask = 0x0, .par.move.num_moves = 5, .par.move.dst = {-1, 0, 1, 2, 3, 0}, .par.move.src = {0, 1, 2, 3, -1, 0}) \ - MACRO(__VA_ARGS__, u32_move_txwyz_xwyzt , .type = SWS_PIXEL_U32, .uop = SWS_UOP_MOVE , .mask = 0x0, .par.move.num_moves = 5, .par.move.dst = {-1, 0, 3, 1, 2, 0}, .par.move.src = {0, 3, 1, 2, -1, 0}) \ - MACRO(__VA_ARGS__, u32_move_txwzy_xwzyt , .type = SWS_PIXEL_U32, .uop = SWS_UOP_MOVE , .mask = 0x0, .par.move.num_moves = 5, .par.move.dst = {-1, 0, 3, 2, 1, 0}, .par.move.src = {0, 3, 2, 1, -1, 0}) \ - MACRO(__VA_ARGS__, u32_move_txwtyz_xwtyzt , .type = SWS_PIXEL_U32, .uop = SWS_UOP_MOVE , .mask = 0x0, .par.move.num_moves = 6, .par.move.dst = {-1, 0, 3, -1, 1, 2}, .par.move.src = {0, 3, -1, 1, 2, -1}) + MACRO(__VA_ARGS__, u32_copy_yzw_yzw_xxx , .type = SWS_PIXEL_U32, .uop = SWS_UOP_COPY , .mask = 0xe, .par.move.num_moves = 3, .par.move.dst = {1, 2, 3, 0, 0, 0}, .par.move.src = {0, 0, 0, 0, 0, 0}) \ + MACRO(__VA_ARGS__, u32_copy_xyzw_yz_xx , .type = SWS_PIXEL_U32, .uop = SWS_UOP_COPY , .mask = 0xf, .par.move.num_moves = 2, .par.move.dst = {1, 2, 0, 0, 0, 0}, .par.move.src = {0, 0, 0, 0, 0, 0}) \ + MACRO(__VA_ARGS__, u32_copy_xyzw_zwy_xyx , .type = SWS_PIXEL_U32, .uop = SWS_UOP_COPY , .mask = 0xf, .par.move.num_moves = 3, .par.move.dst = {2, 3, 1, 0, 0, 0}, .par.move.src = {0, 1, 0, 0, 0, 0}) #define SWS_FOR_U32_SWAP_BYTES(MACRO, ...) \ MACRO(__VA_ARGS__, u32_swap_bytes_x , SWS_PIXEL_U32, SWS_UOP_SWAP_BYTES , 0x1) \ MACRO(__VA_ARGS__, u32_swap_bytes_xy , SWS_PIXEL_U32, SWS_UOP_SWAP_BYTES , 0x3) \ @@ -961,8 +845,6 @@ #define SWS_FOR_STRUCT_F32_PERMUTE(MACRO, ...) #define SWS_FOR_F32_COPY(MACRO, ...) #define SWS_FOR_STRUCT_F32_COPY(MACRO, ...) -#define SWS_FOR_F32_MOVE(MACRO, ...) -#define SWS_FOR_STRUCT_F32_MOVE(MACRO, ...) #define SWS_FOR_F32_SWAP_BYTES(MACRO, ...) #define SWS_FOR_STRUCT_F32_SWAP_BYTES(MACRO, ...) #define SWS_FOR_F32_EXPAND_BIT(MACRO, ...) diff --git a/libswscale/uops_macros_gen.c b/libswscale/uops_macros_gen.c index 4181b3abde..33e328fcc3 100644 --- a/libswscale/uops_macros_gen.c +++ b/libswscale/uops_macros_gen.c @@ -79,11 +79,6 @@ static int generate_entry_struct(void *opaque, void *key) break; case SWS_UOP_PERMUTE: case SWS_UOP_COPY: - av_bprintf(bp, ", .par.swizzle.in = {%d, %d, %d, %d}", - par->swizzle.in[0], par->swizzle.in[1], - par->swizzle.in[2], par->swizzle.in[3]); - break; - case SWS_UOP_MOVE: av_bprintf(bp, ", .par.move.num_moves = %d", par->move.num_moves); av_bprintf(bp, ", .par.move.dst = {%d, %d, %d, %d, %d, %d}", par->move.dst[0], par->move.dst[1], par->move.dst[2], @@ -144,11 +139,6 @@ static int generate_entry_args(void *opaque, void *key) break; case SWS_UOP_PERMUTE: case SWS_UOP_COPY: - av_bprintf(bp, ", %d, %d, %d, %d", - par->swizzle.in[0], par->swizzle.in[1], - par->swizzle.in[2], par->swizzle.in[3]); - break; - case SWS_UOP_MOVE: av_bprintf(bp, ", %d", par->move.num_moves); av_bprintf(bp, ", %d, %d, %d, %d, %d, %d", par->move.dst[0], par->move.dst[1], par->move.dst[2], @@ -229,7 +219,7 @@ fail: static const SwsUOpFlags uop_flags[] = { 0, - SWS_UOP_FLAG_FMA | SWS_UOP_FLAG_MOVE, /* x86 backend */ + SWS_UOP_FLAG_FMA, /* x86 backend */ }; static int register_uops(SwsContext *ctx, const SwsOpList *ops, diff --git a/libswscale/uops_tmpl.c b/libswscale/uops_tmpl.c index 214f7a0ef9..172b7fb06b 100644 --- a/libswscale/uops_tmpl.c +++ b/libswscale/uops_tmpl.c @@ -360,35 +360,53 @@ SWS_FOR_STRUCT(PX, READ_PLANAR_FH, DECL_ENTRY, .setup = fn(setup_filter_h) ) * Permutation and copying * ***************************/ -/* Permute by directly swapping the order of arguments to the continuation. */ -#define DECL_PERMUTE(DUMMY, NAME, TYPE, UOP, MASK, IDX0, IDX1, IDX2, IDX3) \ - static void NAME##_c(SwsOpIter *restrict iter, \ - const SwsOpImpl *restrict impl, \ - void *restrict in0, void *restrict in1, \ - void *restrict in2, void *restrict in3) \ - { \ - CONTINUE(in##IDX0, in##IDX1, in##IDX2, in##IDX3); \ - } +DECL_FUNC(permute, const SwsCompMask mask, int num_moves, + int8_t d0, int8_t d1, int8_t d2, int8_t d3, int8_t d4, int8_t d5, + int8_t s0, int8_t s1, int8_t s2, int8_t s3, int8_t s4, int8_t s5) +{ + const int8_t dst[SWS_UOP_MOVE_MAX] = { d0, d1, d2, d3, d4, d5 }; + const int8_t src[SWS_UOP_MOVE_MAX] = { s0, s1, s2, s3, s4, s5 }; + + pixel_t *ptr[5] = { NULL, x, y, z, w }; + for (int n = 0; n < num_moves; n++) + ptr[dst[n] + 1] = ptr[src[n] + 1]; + + /* The unneeded registers may still alias the used ones, so point them + * back at the stack to avoid collisions */ + block_t xx, yy, zz, ww; + CONTINUE(X ? ptr[1] : xx.px, + Y ? ptr[2] : yy.px, + Z ? ptr[3] : zz.px, + W ? ptr[4] : ww.px); +} -#define DECL_COPY(DUMMY, NAME, TYPE, UOP, MASK, IDX0, IDX1, IDX2, IDX3) \ - static void NAME##_c(SwsOpIter *restrict iter, \ - const SwsOpImpl *restrict impl, \ - void *restrict in0, void *restrict in1, \ - void *restrict in2, void *restrict in3) \ - { \ - const SwsCompMask mask = (MASK); \ - block_t x, y, z, w; \ - \ - if (X) memcpy(&x.px, in##IDX0, SIZEOF_BLOCK); \ - if (Y) memcpy(&y.px, in##IDX1, SIZEOF_BLOCK); \ - if (Z) memcpy(&z.px, in##IDX2, SIZEOF_BLOCK); \ - if (W) memcpy(&w.px, in##IDX3, SIZEOF_BLOCK); \ - \ - CONTINUE(X ? &x : in0, Y ? &y : in1, Z ? &z : in2, W ? &w : in3); \ - } +DECL_FUNC(copy, const SwsCompMask mask, int num_moves, + int8_t d0, int8_t d1, int8_t d2, int8_t d3, int8_t d4, int8_t d5, + int8_t s0, int8_t s1, int8_t s2, int8_t s3, int8_t s4, int8_t s5) +{ + const size_t block_size = SWS_BLOCK_SIZE * sizeof(pixel_t); + const int8_t dst[SWS_UOP_MOVE_MAX] = { d0, d1, d2, d3, d4, d5 }; + const int8_t src[SWS_UOP_MOVE_MAX] = { s0, s1, s2, s3, s4, s5 }; + + block_t data[5]; + memcpy(&data[1].px, x, block_size); + memcpy(&data[2].px, y, block_size); + memcpy(&data[3].px, z, block_size); + memcpy(&data[4].px, w, block_size); + + for (int n = 0; n < num_moves; n++) + data[dst[n] + 1] = data[src[n] + 1]; + + memcpy(x, &data[1].px, block_size); + memcpy(y, &data[2].px, block_size); + memcpy(z, &data[3].px, block_size); + memcpy(w, &data[4].px, block_size); + + CONTINUE(x, y, z, w); +} -SWS_FOR(PX, PERMUTE, DECL_PERMUTE) -SWS_FOR(PX, COPY, DECL_COPY) +SWS_FOR(PX, PERMUTE, DECL_IMPL, permute) +SWS_FOR(PX, COPY, DECL_IMPL, copy) SWS_FOR_STRUCT(PX, PERMUTE, DECL_ENTRY) SWS_FOR_STRUCT(PX, COPY, DECL_ENTRY) diff --git a/libswscale/x86/ops.c b/libswscale/x86/ops.c index 8812da0ad2..70126d14fc 100644 --- a/libswscale/x86/ops.c +++ b/libswscale/x86/ops.c @@ -318,7 +318,8 @@ SWS_FOR_STRUCT(TYPE, WRITE_NIBBLE, DECL_ENTRY, EXT, NULL, NULL) SWS_FOR_STRUCT(TYPE, WRITE_BIT, DECL_ENTRY, EXT, NULL, NULL) \ SWS_FOR_STRUCT(TYPE, SWAP_BYTES, DECL_ENTRY, EXT, NULL, NULL) \ SWS_FOR_STRUCT(TYPE, EXPAND_BIT, DECL_ENTRY, EXT, NULL, NULL) \ -SWS_FOR_STRUCT(TYPE, MOVE, DECL_ENTRY, EXT, NULL, NULL) \ +SWS_FOR_STRUCT(TYPE, PERMUTE, DECL_ENTRY, EXT, NULL, NULL) \ +SWS_FOR_STRUCT(TYPE, COPY, DECL_ENTRY, EXT, NULL, NULL) \ SWS_FOR_STRUCT(TYPE, SCALE, DECL_ENTRY, EXT, NULL, setup_scale) \ SWS_FOR_STRUCT(TYPE, ADD, DECL_ENTRY, EXT, NULL, ff_sws_setup_vec4) \ SWS_FOR_STRUCT(TYPE, MIN, DECL_ENTRY, EXT, NULL, ff_sws_setup_vec4) \ @@ -341,7 +342,8 @@ SWS_FOR_STRUCT(TYPE, DITHER, DECL_ENTRY, EXT, NULL, setup_dither) SWS_FOR(TYPE, WRITE_BIT, REF_ENTRY, EXT) \ SWS_FOR(TYPE, SWAP_BYTES, REF_ENTRY, EXT) \ SWS_FOR(TYPE, EXPAND_BIT, REF_ENTRY, EXT) \ - SWS_FOR(TYPE, MOVE, REF_ENTRY, EXT) \ + SWS_FOR(TYPE, PERMUTE, REF_ENTRY, EXT) \ + SWS_FOR(TYPE, COPY, REF_ENTRY, EXT) \ SWS_FOR(TYPE, SCALE, REF_ENTRY, EXT) \ SWS_FOR(TYPE, ADD, REF_ENTRY, EXT) \ SWS_FOR(TYPE, MIN, REF_ENTRY, EXT) \ @@ -662,7 +664,7 @@ static int compile_x86(SwsContext *ctx, const SwsOpList *ops, SwsCompiledOp *out if (mmsize < 0) return mmsize; - SwsUOpFlags flags = SWS_UOP_FLAG_MOVE; + SwsUOpFlags flags = 0; if (EXTERNAL_FMA3(cpu_flags)) flags |= SWS_UOP_FLAG_FMA; diff --git a/libswscale/x86/ops_int.asm b/libswscale/x86/ops_int.asm index 395feb9531..76e369d1fa 100644 --- a/libswscale/x86/ops_int.asm +++ b/libswscale/x86/ops_int.asm @@ -781,7 +781,8 @@ assert 0, SWS_UOP_DITHER is not implemented for integer types DECL_%1_WRITE_PACKED (WRITE_PACKED) DECL_%1_WRITE_NIBBLE (WRITE_NIBBLE) DECL_%1_WRITE_BIT (WRITE_BIT) - DECL_%1_MOVE (MOVE) + DECL_%1_PERMUTE (MOVE) + DECL_%1_COPY (MOVE) DECL_%1_SWAP_BYTES (SWAP_BYTES) DECL_%1_EXPAND_BIT (EXPAND_BIT) DECL_%1_SCALE (SCALE) diff --git a/libswscale/x86/uops_macros.asm.h b/libswscale/x86/uops_macros.asm.h index fce08f320f..971f68c880 100644 --- a/libswscale/x86/uops_macros.asm.h +++ b/libswscale/x86/uops_macros.asm.h @@ -62,7 +62,8 @@ {DEF_MACRO(WRITE_NIBBLE, TYPE)}, \ {DEF_MACRO(WRITE_PACKED, TYPE)}, \ {DEF_MACRO(WRITE_PLANAR, TYPE)}, \ - {DEF_MACRO(MOVE, TYPE)}, \ + {DEF_MACRO(PERMUTE, TYPE)}, \ + {DEF_MACRO(COPY, TYPE)}, \ {DEF_MACRO(SWAP_BYTES, TYPE)}, \ {DEF_MACRO(EXPAND_BIT, TYPE)}, \ {DEF_MACRO(EXPAND_PAIR, TYPE)}, \ diff --git a/tests/checkasm/sw_ops.c b/tests/checkasm/sw_ops.c index bf83d753d4..d577663c9c 100644 --- a/tests/checkasm/sw_ops.c +++ b/tests/checkasm/sw_ops.c @@ -577,11 +577,15 @@ static void check_expand(const char *name, const SwsUOp *uop) static void check_swizzle(const char *name, const SwsUOp *uop) { - const SwsSwizzleUOp *swiz = &uop->par.swizzle; + const SwsMoveUOp *move = &uop->par.move; + int8_t idx[4 + 1] = { -1, 0, 1, 2, 3 }; + for (int n = 0; n < move->num_moves; n++) + idx[move->dst[n] + 1] = idx[move->src[n] + 1]; + CHECK_MASK(name, uop->mask, NULL, uop->type, uop->type, { .op = SWS_OP_SWIZZLE, .type = uop->type, - .swizzle.in = { swiz->in[0], swiz->in[1], swiz->in[2], swiz->in[3] }, + .swizzle.in = { idx[1], idx[2], idx[3], idx[4] }, }); } diff --git a/tests/ref/fate/sws-ops-list b/tests/ref/fate/sws-ops-list index 6d60f02ec1..09fbccd2a7 100644 --- a/tests/ref/fate/sws-ops-list +++ b/tests/ref/fate/sws-ops-list @@ -1 +1 @@ -53c637960d4d49e638a9ed8766266875 +8333b0aad3a2234c999febc709128779 _______________________________________________ ffmpeg-cvslog mailing list -- [email protected] To unsubscribe send an email to [email protected]
