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]

Reply via email to