Fix swizzling table & add struct.
authorJerome Glisse <glisse@freedesktop.org>
Fri, 20 Jan 2006 18:24:44 +0000 (18:24 +0000)
committerJerome Glisse <glisse@freedesktop.org>
Fri, 20 Jan 2006 18:24:44 +0000 (18:24 +0000)
src/mesa/drivers/dri/r300/r300_fragprog.h
src/mesa/drivers/dri/r300/r300_fragprog_swz.c

index 2bcc23d514cff8d025243e007152c35a9de2fb9a..d841af98a8000a8db30a7a4132865353994c7850 100644 (file)
@@ -26,6 +26,12 @@ typedef struct _pfs_reg_t {
        GLboolean valid:1;
 } pfs_reg_t;
 
+typedef struct r300_fragment_program_swizzle {
+       GLuint length;
+       GLuint src[4];
+       GLuint inst[8];
+} r300_fragment_program_swizzle_t;
+
 /* supported hw opcodes */
 #define PFS_OP_MAD 0
 #define PFS_OP_DP3 1
index 00977ce6848f00ac214b1d3200b9ebfbc1970470..b29331d7bde52cc3581a195b8eb1cf7378a46201 100644 (file)
                  (R300_FPI0_ARGC_SRC0CA_WZY) |                         \
                  (R300_FPI0_ARGC_ONE  << R300_FPI0_ARG1C_SHIFT) |      \
                  (R300_FPI0_ARGC_ZERO << R300_FPI0_ARG2C_SHIFT) )
+#define I0_WWW ( (R300_FPI0_OUTC_MAD) |                                \
+                 (R300_FPI0_ARGC_SRC0A) |                              \
+                 (R300_FPI0_ARGC_ONE  << R300_FPI0_ARG1C_SHIFT) |      \
+                 (R300_FPI0_ARGC_ZERO << R300_FPI0_ARG2C_SHIFT) )
 
 #define IEMPTY 0
-#define I1_CST R300_FPI1_SRC0C_CONST
 
 #define I1_XYZ ( R300_FPI1_SRC1C_CONST |       \
                  R300_FPI1_SRC2C_CONST |       \
@@ -100,8 +103,8 @@ struct r300_fragment_program_swizzle r300_swizzle [512] = {
        {1,{0,0,0,0},{ I0_XXX, I1_XYZ,
                       0, 0, 0, 0, 0, 0 } },
        /* YXX */
-       {2,{0,0,0,0},{ I0_YYY, I1_X__,
-                      I0_XXX, I1__YZ,
+       {2,{0,0,0,0},{ I0_YZX, I1_X_Z,
+                      I0_XXX, I1__Y_,
                       0,0,
                       0,0 } },
        /* ZXX */
@@ -116,12 +119,12 @@ struct r300_fragment_program_swizzle r300_swizzle [512] = {
                       0,0} },
        /* 0XX */
        {2,{0,2,0,0},{ I0_XXX, I1__YZ,
-                      I0_000, I1_X__ | I1_CST,
+                      I0_000, I1_X__,
                       0,0,
                       0,0 } },
        /* 1XX */
        {2,{0,2,0,0},{ I0_XXX, I1__YZ,
-                      I0_111, I1_X__ | I1_CST,
+                      I0_111, I1_X__,
                       0,0,0,0}},
        SEMPTY,SEMPTY,
        /* XYX */
@@ -145,12 +148,12 @@ struct r300_fragment_program_swizzle r300_swizzle [512] = {
        /* 0YX */
        {3,{0,0,2,0},{ I0_YYY, I1__Y_,
                       I0_XXX, I1___Z,
-                      I0_000, I1_X__ | I1_CST,
+                      I0_000, I1_X__,
                       0,0}},
        /* 1YX */
        {3,{0,0,2,0},{ I0_YYY, I1__Y_,
                       I0_XXX, I1___Z,
-                      I0_111, I1_X__ | I1_CST,
+                      I0_111, I1_X__,
                       0,0}},
        SEMPTY,SEMPTY,
        /* XZX */
@@ -164,102 +167,99 @@ struct r300_fragment_program_swizzle r300_swizzle [512] = {
        {2,{0,0,0,0},{ I0_YZX, I1__YZ,
                       I0_ZZZ, I1_X__,0,0,0,0}},
        /* WZX */
-       {2,{0,0,0,0},{ I0_WZY, I1__YZ,
-                      I0_XXX, I1_X__,0,0,0,0}},
+       {2,{0,0,0,0},{ I0_WZY, I1_XY_,
+                      I0_XXX, I1___Z,0,0,0,0}},
        /* 0ZX */
        {2,{0,2,0,0},{ I0_YZX, I1__YZ,
-                      I0_000, I1_X__ | I1_CST,
+                      I0_000, I1_X__,
                       0,0,0,0}},
        /* 1ZX */
        {2,{0,2,0,0},{ I0_YZX, I1__YZ,
-                      I0_111, I1_X__ | I1_CST,
+                      I0_111, I1_X__,
                       0,0,0,0}},
        SEMPTY,SEMPTY,
        /* XWX */
-       {3,{0,1,0,0},{ I0_WZY, I1_X__,
-                      I0_XXX, I1__Y_,
+       {2,{0,0,0,0},{ I0_WWW, I1__Y_,
                       I0_XXX, I1_X_Z,
-                      0,0}},
+                      0,0,0,0}},
        /* YWX */
-       {3,{0,1,0,0},{ I0_WZY, I1_X__,
-                      I0_XXX, I1__Y_,
+       {2,{0,0,0,0},{ I0_WWW, I1__Y_,
                       I0_YZX, I1_X_Z,
-                      0,0}},
+                      0,0,0,0}},
        /* ZWX */
-       {4,{0,1,0,0},{ I0_WZY, I1_X__,
-                      I0_XXX, I1__Y_,
+       {3,{0,0,0,0},{ I0_WWW, I1__Y_,
                       I0_ZZZ, I1_X__,
-                      I0_XXX, I1___Z } },
+                      I0_XXX, I1___Z,
+                      0,0}},
        /* WWX */
-       {3,{0,1,0,0},{ I0_WZY, I1_X__,
-                      I0_XXX, I1_XY_,
+       {2,{0,0,0,0},{ I0_WWW, I1_XY_,
                       I0_YZX, I1___Z,
-                      0,0}},
+                      0,0,0,0}},
        /* 0WX */
-       {4,{0,1,0,2},{ I0_WZY, I1_X__,
-                      I0_XXX, I1__Y_,
-                      I0_YZX, I1___Z,
-                      I0_000, I1_X__ | I1_CST } },
+       {3,{0,0,2,0},{ I0_WWW, I1__Y_,
+                      I0_XXX, I1___Z,
+                      I0_000, I1_X__,
+                      0,0}},
        /* 1WX */
-       {4,{0,1,0,2},{ I0_WZY, I1_X__,
-                      I0_XXX, I1__Y_,
-                      I0_YZX, I1___Z,
-                      I0_111, I1_X__ | I1_CST } },
+       {3,{0,0,2,0},{ I0_WWW, I1__Y_,
+                      I0_XXX, I1___Z,
+                      I0_111, I1_X__,
+                      0,0}},
        SEMPTY,SEMPTY,
        /* X0X */
        {2,{0,2,0,0},{ I0_XXX, I1_X_Z,
-                      I0_000, I1__Y_ | I1_CST,
+                      I0_000, I1__Y_,
                       0,0,0,0}},
        /* Y0X */
        {2,{0,2,0,0},{ I0_YZX, I1_X_Z,
-                      I0_000, I1__Y_ | I1_CST,
+                      I0_000, I1__Y_,
                       0,0,0,0}},
        /* Z0X */
        {3,{0,2,0,0},{ I0_XXX, I1___Z,
-                      I0_000, I1__Y_ | I1_CST,
+                      I0_000, I1__Y_,
                       I0_ZZZ, I1_X__,
                       0,0}},
        /* W0X */
-       {3,{0,2,0,0},{ I0_XXX, I1___Z,
-                      I0_000, I1__Y_ | I1_CST,
-                      I0_WZY, I1_X__,
+       {3,{0,0,2,0},{ I0_WZY, I1_XYZ,
+                      I0_XXX, I1___Z,                 
+                      I0_000, I1__Y_,
                       0,0}},
        /* 00X */
        {2,{0,2,0,0},{ I0_XXX, I1___Z,
-                      I0_000, I1_XY_ | I1_CST,
+                      I0_000, I1_XY_,
                       0,0,0,0}},
        /* 10X */
        {3,{0,2,0,0},{ I0_XXX, I1___Z,
-                      I0_000, I1__Y_ | I1_CST,
-                      I0_111, I1_X__ | I1_CST,
+                      I0_000, I1__Y_,
+                      I0_111, I1_X__,
                       0,0}},
        SEMPTY,SEMPTY,
        /* X1X */
        {2,{0,2,0,0},{ I0_XXX, I1_X_Z,
-                      I0_111, I1__Y_ | I1_CST,
+                      I0_111, I1__Y_,
                       0,0,0,0}},
        /* Y1X */
        {2,{0,2,0,0},{ I0_YZX, I1_X_Z,
-                      I0_111, I1__Y_ | I1_CST,
+                      I0_111, I1__Y_,
                       0,0,0,0}},
        /* Z1X */
        {3,{0,2,0,0},{ I0_XXX, I1___Z,
-                      I0_111, I1__Y_ | I1_CST,
+                      I0_111, I1__Y_,
                       I0_ZZZ, I1_X__,
                       0,0}},
        /* W1X */
-       {3,{0,2,0,0},{ I0_XXX, I1___Z,
-                      I0_111, I1__Y_ | I1_CST,
-                      I0_WZY, I1_X__,
+       {3,{0,0,2,0},{ I0_WZY, I1_XYZ,
+                      I0_XXX, I1___Z,
+                      I0_111, I1__Y_,
                       0,0}},
        /* 01X */
        {3,{0,2,0,0},{ I0_XXX, I1___Z,
-                      I0_111, I1__Y_ | I1_CST,
-                      I0_000, I1_X__ | I1_CST,
+                      I0_111, I1__Y_,
+                      I0_000, I1_X__,
                       0,0}},
        /* 11X */
        {2,{0,2,0,0},{ I0_XXX, I1___Z,
-                      I0_111, I1_XY_ | I1_CST,
+                      I0_111, I1_XY_,
                       0,0,0,0}},
        SEMPTY,SEMPTY,SEMPTY,SEMPTY,SEMPTY,SEMPTY,SEMPTY,SEMPTY,SEMPTY,SEMPTY,
        SEMPTY,SEMPTY,SEMPTY,SEMPTY,SEMPTY,SEMPTY,SEMPTY,SEMPTY,
@@ -280,11 +280,11 @@ struct r300_fragment_program_swizzle r300_swizzle [512] = {
                       0,0,0,0}},
        /* 0XY */
        {2,{0,0,0,0},{ I0_ZXY, I1__YZ,
-                      I0_000, I1_X__ | I1_CST,
+                      I0_000, I1_X__,
                       0,0,0,0}},
        /* 1XY */
        {2,{0,0,0,0},{ I0_ZXY, I1__YZ,
-                      I0_111, I1_X__ | I1_CST,
+                      I0_111, I1_X__,
                       0,0,0,0}},
        SEMPTY,SEMPTY,
        /* XYY */
@@ -299,16 +299,16 @@ struct r300_fragment_program_swizzle r300_swizzle [512] = {
                       I0_ZZZ, I1_X__,
                       0,0,0,0}},
        /* WYY */
-       {2,{0,0,0,0},{ I0_YYY, I1__YZ,
-                      I0_WZY, I1_X__,
+       {2,{0,0,0,0},{ I0_WZY, I1_XYZ,
+                      I0_YYY, I1__YZ,
                       0,0,0,0}},
        /* 0YY */
        {2,{0,0,0,0},{ I0_YYY, I1__YZ,
-                      I0_000, I1_X__ | I1_CST,
+                      I0_000, I1_X__,
                       0,0,0,0}},
        /* 1YY */
        {2,{0,0,0,0},{ I0_YYY, I1__YZ,
-                      I0_111, I1_X__ | I1_CST,
+                      I0_111, I1_X__,
                       0,0,0,0}},
        SEMPTY,SEMPTY,
        /* XZY */
@@ -328,96 +328,93 @@ struct r300_fragment_program_swizzle r300_swizzle [512] = {
                       0, 0, 0, 0, 0, 0 } },
        /* 0ZY */
        {2,{0,0,0,0},{ I0_WZY, I1__YZ,
-                      I0_000, I1_X__ | I1_CST,
+                      I0_000, I1_X__,
                       0,0,0,0}},
        /* 1ZY */
        {2,{0,0,0,0},{ I0_WZY, I1__YZ,
-                      I0_111, I1_X__ | I1_CST,
+                      I0_111, I1_X__,
                       0,0,0,0}},
        SEMPTY,SEMPTY,
        /* XWY */
-       {4,{0,1,0,0},{ I0_WZY, I1_X__,
-                      I0_XXX, I1__Y_,
+       {3,{0,0,0,0},{ I0_WWW, I1__Y_,
                       I0_XXX, I1_X__,
-                      I0_YYY, I1___Z } },
+                      I0_YYY, I1___Z,
+                      0,0}},
        /* YWY */
-       {3,{0,1,0,0},{ I0_WZY, I1_X__,
-                      I0_XXX, I1__Y_,
+       {2,{0,0,0,0},{ I0_WWW, I1__Y_,
                       I0_YYY, I1_X_Z,
-                      0,0}},
+                      0,0,0,0}},
        /* ZWY */
-       {3,{0,1,0,0},{ I0_WZY, I1_X__,
-                      I0_XXX, I1__Y_,
+       {2,{0,0,0,0},{ I0_WWW, I1__Y_,
                       I0_ZXY, I1_X_Z,
-                      0,0}},
+                      0,0,0,0}},
        /* WWY */
-       {3,{0,1,0,0},{ I0_WZY, I1_X__,
-                      I0_XXX, I1_XY_,
+       {2,{0,0,0,0},{ I0_WWW, I1_XY_,
                       I0_ZXY, I1___Z,
-                      0,0}},
+                      0,0,0,0}},
        /* 0WY */
-       {4,{0,1,0,0},{ I0_WZY, I1_X__,
-                      I0_XXX, I1__Y_,
+       {3,{0,0,2,0},{ I0_WWW, I1__Y_,
                       I0_ZXY, I1___Z,
-                      I0_000, I1_X__ | I1_CST } },
+                      I0_000, I1_X__,
+                      0,0}},
        /* 1WY */
-       {4,{0,1,0,0},{ I0_WZY, I1_X__,
-                      I0_XXX, I1__Y_,
+       {3,{0,0,0,0},{ I0_WWW, I1__Y_,
                       I0_ZXY, I1___Z,
-                      I0_111, I1_X__ | I1_CST } },
+                      I0_111, I1_X__,
+                      0,0}},
        SEMPTY,SEMPTY,
        /* X0Y */
        {3,{0,2,0,0},{ I0_XXX, I1_X__,
-                      I0_000, I1__Y_ | I1_CST,
+                      I0_000, I1__Y_,
                       I0_YYY, I1___Z,
                       0,0}},
        /* Y0Y */
        {2,{0,2,0,0},{ I0_YYY, I1_X_Z,
-                      I0_000, I1__Y_ | I1_CST,
+                      I0_000, I1__Y_,
                       0,0,0,0}},
        /* Z0Y */
        {2,{0,2,0,0},{ I0_ZXY, I1_X_Z,
-                      I0_000, I1__Y_ | I1_CST,
+                      I0_000, I1__Y_,
                       0,0,0,0}},
        /* W0Y */
        {2,{0,2,0,0},{ I0_WZY, I1_X_Z,
-                      I0_000, I1__Y_ | I1_CST,
+                      I0_000, I1__Y_,
                       0,0,0,0}},
        /* 00Y */
        {2,{0,2,0,0},{ I0_YYY, I1___Z,
-                      I0_000, I1_XY_ | I1_CST,
+                      I0_000, I1_XY_,
                       0,0,0,0}},
        /* 10Y */
        {3,{0,2,0,0},{ I0_YYY, I1___Z,
-                      I0_000, I1__Y_ | I1_CST,
-                      I0_111, I1_X__ | I1_CST,
+                      I0_000, I1__Y_,
+                      I0_111, I1_X__,
                       0,0}},
        SEMPTY,SEMPTY,
        /* X1Y */
        {3,{0,2,0,0},{ I0_XXX, I1_X__,
-                      I0_111, I1__Y_ | I1_CST,
+                      I0_111, I1__Y_,
                       I0_YYY, I1___Z,
                       0,0}},
        /* Y1Y */
        {2,{0,2,0,0},{ I0_YYY, I1_X_Z,
-                      I0_111, I1__Y_ | I1_CST,
+                      I0_111, I1__Y_,
                       0,0,0,0}},
        /* Z1Y */
        {2,{0,2,0,0},{ I0_ZXY, I1_X_Z,
-                      I0_111, I1__Y_ | I1_CST,
+                      I0_111, I1__Y_,
                       0,0,0,0}},
        /* W1Y */
        {3,{0,2,0,0},{ I0_WZY, I1_X_Z,
-                      I0_111, I1__Y_ | I1_CST,
+                      I0_111, I1__Y_,
                       0,0,0,0}},
        /* 01Y */
        {3,{0,2,0,0},{ I0_YYY, I1___Z,
-                      I0_111, I1__Y_ | I1_CST,
-                      I0_000, I1_X__ | I1_CST,
+                      I0_111, I1__Y_,
+                      I0_000, I1_X__,
                       0,0}},
        /* 11Y */
        {2,{0,2,0,0},{ I0_YYY, I1___Z,
-                      I0_111, I1_XY_ | I1_CST,
+                      I0_111, I1_XY_,
                       0,0,0,0}},
        SEMPTY,SEMPTY,SEMPTY,SEMPTY,SEMPTY,SEMPTY,SEMPTY,SEMPTY,SEMPTY,SEMPTY,
        SEMPTY,SEMPTY,SEMPTY,SEMPTY,SEMPTY,SEMPTY,SEMPTY,SEMPTY,
@@ -435,19 +432,19 @@ struct r300_fragment_program_swizzle r300_swizzle [512] = {
                       I0_ZZZ, I1_X_Z,
                       0,0,0,0}},
        /* WXZ */
-       {3,{0,0,0,0},{ I0_XXX, I1__Y_,
+       {3,{0,0,0,0},{ I0_WZY, I1_XYZ,
+                      I0_XXX, I1__Y_,
                       I0_ZZZ, I1___Z,
-                      I0_WZY, I1_X__,
                       0,0}},
        /* 0XZ */
        {3,{0,0,2,0},{ I0_XXX, I1__Y_,
                       I0_ZZZ, I1___Z,
-                      I0_000, I1_X__ | I1_CST,
+                      I0_000, I1_X__,
                       0,0}},
        /* 1XZ */
        {3,{0,0,2,0},{ I0_XXX, I1__Y_,
                       I0_ZZZ, I1___Z,
-                      I0_111, I1_X__ | I1_CST,
+                      I0_111, I1_X__,
                       0,0}},
        SEMPTY,SEMPTY,
        /* XYZ */
@@ -462,16 +459,16 @@ struct r300_fragment_program_swizzle r300_swizzle [512] = {
                       I0_YYY, I1__Y_,
                       0,0,0,0}},
        /* WYZ */
-       {2,{0,0,0,0},{ I0_XYZ, I1__YZ,
-                      I0_WZY, I1_X__,
+       {2,{0,0,0,0},{ I0_WZY, I1_XYZ,
+                      I0_XYZ, I1__YZ,
                       0,0,0,0}},
        /* 0YZ */
        {2,{0,2,0,0},{ I0_XYZ, I1__YZ,
-                      I0_000, I1_X__ | I1_CST,
+                      I0_000, I1_X__,
                       0,0,0,0}},
        /* 1YZ */
        {2,{0,2,0,0},{ I0_XYZ, I1__YZ,
-                      I0_111, I1_X__ | I1_CST,
+                      I0_111, I1_X__,
                       0,0,0,0}},
        SEMPTY,SEMPTY,
        /* XZZ */
@@ -486,449 +483,436 @@ struct r300_fragment_program_swizzle r300_swizzle [512] = {
        {1,{0,0,0,0},{ I0_ZZZ, I1_XYZ,
                       0, 0, 0, 0, 0, 0 } },
        /* WZZ */
-       {2,{0,0,0,0},{ I0_ZZZ, I1__YZ,
-                      I0_WZY, I1_X__,
+       {2,{0,0,0,0},{ I0_WZY, I1_XYZ,
+                      I0_ZZZ, I1__YZ,
                       0,0,0,0}},
        /* 0ZZ */
        {2,{0,2,0,0},{ I0_ZZZ, I1__YZ,
-                      I0_000, I1_X__ | I1_CST,
+                      I0_000, I1_X__,
                       0,0,0,0}},
        /* 1ZZ */
        {2,{0,2,0,0},{ I0_ZZZ, I1__YZ,
-                      I0_111, I1_X__ | I1_CST,
+                      I0_111, I1_X__,
                       0,0,0,0}},
        SEMPTY,SEMPTY,
        /* XWZ */
-       {3,{0,1,0,0},{ I0_WZY, I1_X__,
-                      I0_XXX, I1__Y_,
+       {2,{0,0,0,0},{ I0_WWW, I1__Y_,
                       I0_XYZ, I1_X_Z,
-                      0,0}},
+                      0,0,0,0}},
        /* YWZ */
-       {4,{0,1,0,0},{ I0_WZY, I1_X__,
-                      I0_XXX, I1__Y_,
+       {3,{0,0,0,0},{ I0_WWW, I1__Y_,
                       I0_YYY, I1_X__,
-                      I0_XYZ, I1___Z } },
+                      I0_XYZ, I1___Z,
+                      0,0}},
        /* ZWZ */
-       {3,{0,1,0,0},{ I0_WZY, I1_X__,
-                      I0_XXX, I1__Y_,
+       {2,{0,0,0,0},{ I0_WWW, I1__Y_,
                       I0_ZZZ, I1_X_Z,
-                      0,0}},
+                      0,0,0,0}},
        /* WWZ */
-       {3,{0,1,0,0},{ I0_WZY, I1_X__,
-                      I0_XXX, I1_XY_,
+       {2,{0,0,0,0},{ I0_WWW, I1_XY_,
                       I0_XYZ, I1___Z,
-                      0,0}},
+                      0,0,0,0}},
        /* 0WZ */
-       {4,{0,1,0,2},{ I0_WZY, I1_X__,
-                      I0_XXX, I1__Y_,
+       {3,{0,0,2,0},{ I0_WWW, I1__Y_,
                       I0_XYZ, I1___Z,
-                      I0_000, I1_X__ | I1_CST } },
+                      I0_000, I1_X__,
+                      0,0}},
        /* 1WZ */
-       {4,{0,1,0,2},{ I0_WZY, I1_X__,
-                      I0_XXX, I1__Y_,
+       {3,{0,0,2,0},{ I0_WWW, I1__Y_,
                       I0_XYZ, I1___Z,
-                      I0_111, I1_X__ | I1_CST } },
+                      I0_111, I1_X__,
+                      0,0}},
        SEMPTY,SEMPTY,
        /* X0Z */
        {2,{0,2,0,0},{ I0_XYZ, I1_X_Z,
-                      I0_000, I1__Y_ | I1_CST,
+                      I0_000, I1__Y_,
                       0,0,0,0}},
        /* Y0Z */
        {3,{0,2,0,0},{ I0_ZZZ, I1___Z,
-                      I0_000, I1__Y_ | I1_CST,
+                      I0_000, I1__Y_,
                       I0_YYY, I1_X__,
                       0,0}},
        /* Z0Z */
        {2,{0,2,0,0},{ I0_ZZZ, I1_X_Z,
-                      I0_000, I1__Y_ | I1_CST,
+                      I0_000, I1__Y_,
                       0,0,0,0}},
        /* W0Z */
-       {3,{0,2,0,0},{ I0_ZZZ, I1___Z,
-                      I0_000, I1__Y_ | I1_CST,
-                      I0_WZY, I1_X__,
+       {3,{0,0,2,0},{ I0_WZY, I1_X_Z,
+                      I0_ZZZ, I1___Z,
+                      I0_000, I1__Y_,
                       0,0}},
        /* 00Z */
        {2,{0,2,0,0},{ I0_ZZZ, I1___Z,
-                      I0_000, I1_XY_ | I1_CST,
+                      I0_000, I1_XY_,
                       0,0,0,0}},
        /* 10Z */
        {3,{0,2,2,0},{ I0_ZZZ, I1___Z,
-                      I0_000, I1__Y_ | I1_CST,
-                      I0_111, I1_X__ | I1_CST,
+                      I0_000, I1__Y_,
+                      I0_111, I1_X__,
                       0,0}},
        SEMPTY,SEMPTY,
        /* X1Z */
        {2,{0,2,0,0},{ I0_XYZ, I1_X_Z,
-                      I0_111, I1__Y_ | I1_CST,
+                      I0_111, I1__Y_,
                       0,0,0,0}},
        /* Y1Z */
        {3,{0,2,0,0},{ I0_ZZZ, I1___Z,
-                      I0_111, I1__Y_ | I1_CST,
+                      I0_111, I1__Y_,
                       I0_YYY, I1_X__,
                       0,0}},
        /* Z1Z */
        {2,{0,2,0,0},{ I0_ZZZ, I1_X_Z,
-                      I0_111, I1__Y_ | I1_CST,
+                      I0_111, I1__Y_,
                       0,0,0,0}},
        /* W1Z */
-       {3,{0,2,0,0},{ I0_ZZZ, I1___Z,
-                      I0_111, I1__Y_ | I1_CST,
-                      I0_WZY, I1_X__,
+       {3,{0,0,2,0},{ I0_WZY, I1_XYZ,
+                      I0_ZZZ, I1___Z,
+                      I0_111, I1__Y_,
                       0,0}},
        /* 01Z */
        {3,{0,2,2,0},{ I0_ZZZ, I1___Z,
-                      I0_111, I1__Y_ | I1_CST,
-                      I0_000, I1_X__ | I1_CST,
+                      I0_111, I1__Y_,
+                      I0_000, I1_X__,
                       0,0}},
        /* 11Z */
        {2,{0,2,0,0},{ I0_ZZZ, I1___Z,
-                      I0_111, I1_XY_ | I1_CST,
+                      I0_111, I1_XY_,
                       0,0,0,0}},
        SEMPTY,SEMPTY,SEMPTY,SEMPTY,SEMPTY,SEMPTY,SEMPTY,SEMPTY,SEMPTY,SEMPTY,
        SEMPTY,SEMPTY,SEMPTY,SEMPTY,SEMPTY,SEMPTY,SEMPTY,SEMPTY,
        /* XXW */
-       {3,{0,1,0,0},{ I0_WZY, I1_X__,
-                      I0_XXX, I1___Z,
+       {2,{0,0,0,0},{ I0_WWW, I1___Z,
                       I0_XXX, I1_XY_,
-                      0,0}},
+                      0,0,0,0}},
        /* YXW */
-       {4,{0,1,0,0},{ I0_WZY, I1_X__,
-                      I0_XXX, I1___Z,
+       {3,{0,0,0,0},{ I0_WWW, I1___Z,
                       I0_XXX, I1__Y_,
-                      I0_YYY, I1_X__ } },
+                      I0_YYY, I1_X__,
+                      0,0}},
        /* ZXW */
-       {3,{0,1,0,0},{ I0_WZY, I1_X__,
-                      I0_XXX, I1___Z,
+       {2,{0,0,0,0},{ I0_WWW, I1___Z,
                       I0_ZXY, I1_XY_,
-                      0,0}},
+                      0,0,0,0}},
        /* WXW */
-       {3,{0,1,0,0},{ I0_WZY, I1_X__,
-                      I0_XXX, I1_X_Z,
+       {2,{0,0,0,0},{ I0_WWW, I1_X_Z,
                       I0_XXX, I1__Y_,
-                      0,0}},
+                      0,0,0,0}},
        /* 0XW */
-       {4,{0,1,0,2},{ I0_WZY, I1_X__,
-                      I0_XXX, I1___Z,
+       {3,{0,0,2,0},{ I0_WWW, I1___Z,
                       I0_XXX, I1__Y_,
-                      I0_000, I1_X__ | I1_CST } },
+                      I0_000, I1_X__,
+                      0,0}},
        /* 1XW */
-       {4,{0,1,0,2},{ I0_WZY, I1_X__,
-                      I0_XXX, I1___Z,
+       {3,{0,0,2,0},{ I0_WWW, I1___Z,
                       I0_XXX, I1__Y_,
-                      I0_111, I1_X__ | I1_CST } },
+                      I0_111, I1_X__,
+                      0,0}},
        SEMPTY,SEMPTY,
        /* XYW */
-       {3,{0,1,0,0},{ I0_WZY, I1_X__,
-                      I0_XXX, I1___Z,
+       {2,{0,0,0,0},{ I0_WWW, I1___Z,
                       I0_XYZ, I1_XY_,
-                      0,0}},
+                      0,0,0,0}},
        /* YYW */
-       {3,{0,1,0,0},{ I0_WZY, I1_X__,
-                      I0_XXX, I1___Z,
+       {2,{0,0,0,0},{ I0_WWW, I1___Z,
                       I0_YYY, I1_XY_,
                       0,0}},
        /* ZYW */
-       {4,{0,1,0,0},{ I0_WZY, I1_X__,
-                      I0_XXX, I1___Z,
+       {3,{0,0,0,0},{ I0_WWW, I1___Z,
                       I0_XYZ, I1__Y_,
-                      I0_ZZZ, I1_X__ } },
+                      I0_ZZZ, I1_X__,
+                      0,0}},
        /* WYW */
-       {3,{0,1,0,0},{ I0_WZY, I1_X__,
-                      I0_XXX, I1_X_Z,
+       {2,{0,0,0,0},{ I0_WWW, I1_X_Z,
                       I0_YYY, I1__Y_,
-                      0,0}},
+                      0,0,0,0}},
        /* 0YW */
-       {4,{0,1,0,2},{ I0_WZY, I1_X__,
-                      I0_XXX, I1___Z,
+       {3,{0,0,2,0},{ I0_WWW, I1___Z,
                       I0_YYY, I1__Y_,
-                      I0_000, I1_X__ | I1_CST } },
+                      I0_000, I1_X__,
+                      0,0}},
        /* 1YW */
-       {4,{0,1,0,2},{ I0_WZY, I1_X__,
-                      I0_XXX, I1___Z,
+       {3,{0,0,2,0},{ I0_WWW, I1___Z,
                       I0_YYY, I1__Y_,
-                      I0_111, I1_X__ | I1_CST } },
+                      I0_111, I1_X__,
+                      0,0}},
 
        SEMPTY,SEMPTY,
        /* XZW */
-       {4,{0,1,0,0},{ I0_WZY, I1_X__,
-                      I0_XXX, I1___Z,
+       {3,{0,0,0,0},{ I0_WWW, I1___Z,
                       I0_XYZ, I1_X__,
-                      I0_ZZZ, I1__Y_ } },
+                      I0_ZZZ, I1__Y_,
+                      0,0}},
        /* YZW */
-       {3,{0,1,0,0},{ I0_WZY, I1_X__,
-                      I0_XXX, I1___Z,
+       {2,{0,0,0,0},{ I0_WWW, I1___Z,
                       I0_YZX, I1_XY_,
-                      0,0}},
+                      0,0,0,0}},
        /* ZZW */
-       {3,{0,1,0,0},{ I0_WZY, I1_X__,
-                      I0_XXX, I1___Z,
+       {2,{0,0,0,0},{ I0_WWW, I1___Z,
                       I0_ZZZ, I1_XY_,
-                      0,0}},
+                      0,0,0,0}},
        /* WZW */
-       {3,{0,1,0,0},{ I0_WZY, I1_X__,
-                      I0_XXX, I1_X_Z,
+       {2,{0,0,0,0},{ I0_WWW, I1_X_Z,
                       I0_ZZZ, I1__Y_,
-                      0,0}},
+                      0,0,0,0}},
        /* 0ZW */
-       {4,{0,1,0,2},{ I0_WZY, I1_X__,
-                      I0_XXX, I1___Z,
+       {3,{0,0,2,0},{ I0_WWW, I1___Z,
                       I0_ZZZ, I1__Y_,
-                      I0_000, I1_X__ | I1_CST } },
+                      I0_000, I1_X__,
+                      0,0}},
        /* 1ZW */
-       {4,{0,1,0,2},{ I0_WZY, I1_X__,
-                      I0_XXX, I1___Z,
+       {3,{0,0,2,0},{ I0_WWW, I1___Z,
                       I0_ZZZ, I1__Y_,
-                      I0_111, I1_X__ | I1_CST } },
+                      I0_111, I1_X__,
+                      0,0}},
 
        SEMPTY,SEMPTY,
        /* XWW */
-       {3,{0,1,0,0},{ I0_WZY, I1_X__,
-                      I0_XXX, I1__YZ,
+       {2,{0,0,0,0},{ I0_WWW, I1__YZ,
                       I0_XYZ, I1_X__,
-                      0,0}},
+                      0,0,0,0}},
        /* YWW */
-       {3,{0,1,0,0},{ I0_WZY, I1_X__,
-                      I0_XXX, I1__YZ,
+       {2,{0,0,0,0},{ I0_WWW, I1__YZ,
                       I0_YYY, I1_X__,
-                      0,0}},
+                      0,0,0,0}},
        /* ZWW */
-       {3,{0,1,0,0},{ I0_WZY, I1_X__,
-                      I0_XXX, I1__YZ,
+       {2,{0,0,0,0},{ I0_WWW, I1__YZ,
                       I0_ZZZ, I1_X__,
-                      0,0}},
-       /* WWW */
-       {2,{0,1,0,0},{ I0_WZY, I1_X__,
-                      I0_XXX, I1_XYZ,
                       0,0,0,0}},
+       /* WWW */
+       {1,{0,0,0,0},{ I0_WWW, I1_XYZ,
+                      0,0,0,0,0,0}},
        /* 0WW */
-       {3,{0,1,2,0},{ I0_WZY, I1_X__,
-                      I0_XXX, I1__YZ,
-                      I0_000, I1_X__ | I1_CST,
-                      0,0}},
+       {2,{0,2,0,0},{ I0_WWW, I1__YZ,
+                      I0_000, I1_X__,
+                      0,0,0,0}},
        /* 1WW */
-       {3,{0,1,2,0},{ I0_WZY, I1_X__,
-                      I0_XXX, I1__YZ,
-                      I0_111, I1_X__ | I1_CST,
+       {2,{0,2,0,0},{ I0_WWW, I1__YZ,
+                      I0_111, I1_X__,
                       0,0}},
        SEMPTY,SEMPTY,
        /* X0W */
-       {4,{0,1,0,2},{ I0_WZY, I1_X__,
-                      I0_XXX, I1___Z,
+       {3,{0,0,2,0},{ I0_WWW, I1___Z,
                       I0_XYZ, I1_X__,
-                      I0_000, I1__Y_ | I1_CST } },
+                      I0_000, I1__Y_,
+                      0,0}},
        /* Y0W */
-       {4,{0,1,0,2},{ I0_WZY, I1_X__,
-                      I0_XXX, I1___Z,
+       {3,{0,0,2,0},{ I0_WWW, I1___Z,
                       I0_YYY, I1_X__,
-                      I0_000, I1__Y_ | I1_CST } },
+                      I0_000, I1__Y_,
+                      0,0}},
        /* Z0W */
-       {4,{0,1,0,2},{ I0_WZY, I1_X__,
-                      I0_XXX, I1___Z,
+       {3,{0,0,2,0},{ I0_WWW, I1___Z,
                       I0_ZZZ, I1_X__,
-                      I0_000, I1__Y_ | I1_CST } },
-       /* 00W */
-       {3,{0,1,0,2},{ I0_WZY, I1_X__,
-                      I0_XXX, I1___Z,
-                      I0_000, I1_XY_ | I1_CST,
+                      I0_000, I1__Y_,
                       0,0}},
+       /* W0W */
+       {2,{0,2,0,0},{ I0_WWW, I1_X_Z,
+                      I0_000, I1__Y_,
+                      0,0,0,0}},
+       /* 00W */
+       {2,{0,2,0,0},{ I0_WWW, I1___Z,
+                      I0_000, I1_XY_,
+                      0,0,0,0}},
        /* 10W */
-       {4,{0,1,2,2},{ I0_WZY, I1_X__,
-                      I0_XXX, I1___Z,
-                      I0_111, I1_X__ | I1_CST,
-                      I0_000, I1__Y_ | I1_CST } },
+       {3,{0,2,2,0},{ I0_WWW, I1___Z,
+                      I0_111, I1_X__,
+                      I0_000, I1__Y_,
+                      0,0}},
        SEMPTY,SEMPTY,
        /* X1W */
-       {4,{0,1,0,2},{ I0_WZY, I1_X__,
-                      I0_XXX, I1___Z,
+       {3,{0,0,2,0},{ I0_WWW, I1___Z,
                       I0_XYZ, I1_X__,
-                      I0_111, I1__Y_ | I1_CST } },
+                      I0_111, I1__Y_,
+                      0,0}},
        /* Y1W */
-       {4,{0,1,0,2},{ I0_WZY, I1_X__,
-                      I0_XXX, I1___Z,
+       {3,{0,0,2,0},{ I0_WWW, I1___Z,
                       I0_YYY, I1_X__,
-                      I0_111, I1__Y_ | I1_CST } },
+                      I0_111, I1__Y_,
+                      0,0}},
        /* Z1W */
-       {4,{0,1,0,2},{ I0_WZY, I1_X__,
-                      I0_XXX, I1___Z,
+       {3,{0,0,2,0},{ I0_WWW, I1___Z,
                       I0_ZZZ, I1_X__,
-                      I0_111, I1__Y_ | I1_CST } },
+                      I0_111, I1__Y_,
+                      0,0}},
+       /* W1W */
+       {2,{0,2,0,0},{ I0_WWW, I1_XYZ,
+                      I0_111, I1__Y_,
+                      0,0,0,0}},
        /* 01W */
-       {4,{0,1,2,2},{ I0_WZY, I1_X__,
-                      I0_XXX, I1___Z,
-                      I0_000, I1_X__ | I1_CST,
-                      I0_111, I1__Y_ | I1_CST } },
-       /* 11W */
-       {3,{0,1,0,2},{ I0_WZY, I1_X__,
-                      I0_XXX, I1___Z,
-                      I0_111, I1_XY_ | I1_CST,
+       {3,{0,2,2,0},{ I0_WWW, I1___Z,
+                      I0_000, I1_X__,
+                      I0_111, I1__Y_,
                       0,0}},
+       /* 11W */
+       {2,{0,2,0,0},{ I0_WWW, I1___Z,
+                      I0_111, I1_XY_,
+                      0,0,0,0}},
        SEMPTY,SEMPTY,SEMPTY,SEMPTY,SEMPTY,SEMPTY,SEMPTY,SEMPTY,SEMPTY,SEMPTY,
        SEMPTY,SEMPTY,SEMPTY,SEMPTY,SEMPTY,SEMPTY,SEMPTY,SEMPTY,
        /* XX0 */
-       {2,{2,0,0,0},{ I0_000, I1___Z | I1_CST,
-                      I0_XXX, I1_XY_,
+       {2,{0,2,0,0},{ I0_XXX, I1_XY_,
+                      I0_000, I1___Z,
                       0,0,0,0}},
        /* YX0 */
-       {3,{2,0,0,0},{ I0_000, I1___Z | I1_CST,
+       {3,{0,0,2,0},{ I0_YYY, I1_X__,
                       I0_XXX, I1__Y_,
-                      I0_YYY, I1_X__,
+                      I0_000, I1___Z,
                       0,0}},
        /* ZX0 */
-       {2,{2,0,0,0},{ I0_000, I1___Z | I1_CST,
-                      I0_ZXY, I1_XY_,
+       {2,{0,2,0,0},{ I0_ZXY, I1_XY_,
+                      I0_000, I1___Z,
                       0,0,0,0}},
        /* WX0 */
-       {3,{2,0,0,0},{ I0_000, I1___Z | I1_CST,
+       {3,{0,0,2,0},{ I0_WZY, I1_X__,
                       I0_XXX, I1__Y_,
-                      I0_WZY, I1_X__,
+                      I0_000, I1___Z,
                       0,0}},
        /* 0X0 */
-       {2,{2,0,0,0},{ I0_000, I1_X_Z | I1_CST,
-                      I0_XXX, I1__Y_,
+       {2,{0,2,0,0},{ I0_XXX, I1__Y_,
+                      I0_000, I1_X_Z,
                       0,0,0,0}},
        /* 1X0 */
-       {3,{2,0,2,0},{ I0_000, I1___Z | I1_CST,
-                      I0_XXX, I1__Y_,
-                      I0_111, I1_X__ | I1_CST,
+       {3,{0,2,2,0},{ I0_XXX, I1__Y_,
+                      I0_000, I1___Z,
+                      I0_111, I1_X__,
                       0,0}},
        SEMPTY,SEMPTY,
        /* XY0 */
-       {2,{2,0,0,0},{ I0_000, I1___Z | I1_CST,
-                      I0_XYZ, I1_XY_,
+       {2,{0,2,0,0},{ I0_XYZ, I1_XY_,
+                      I0_000, I1___Z,
                       0,0,0,0}},
        /* YY0 */
-       {2,{2,0,0,0},{ I0_000, I1___Z | I1_CST,
-                      I0_YYY, I1_XY_,
+       {2,{0,2,0,0},{ I0_YYY, I1_XY_,
+                      I0_000, I1___Z,
                       0,0,0,0}},
        /* ZY0 */
-       {3,{2,0,0,0},{ I0_000, I1___Z | I1_CST,
+       {3,{0,0,2,0},{ I0_YYY, I1__Y_,
                       I0_ZZZ, I1_X__,
-                      I0_YYY, I1__Y_,
+                      I0_000, I1___Z,
                       0,0}},
        /* WY0 */
-       {3,{2,0,0,0},{ I0_000, I1___Z | I1_CST,
+       {3,{0,0,2,0},{ I0_WZY, I1_X__,
                       I0_XYZ, I1__Y_,
-                      I0_WZY, I1_X__,
+                      I0_000, I1___Z,
                       0,0}},
        /* 0Y0 */
-       {2,{2,0,0,0},{ I0_000, I1_X_Z | I1_CST,
-                      I0_XYZ, I1__Y_,
+       {2,{0,2,0,0},{ I0_XYZ, I1__Y_,
+                      I0_000, I1_X_Z,
                       0,0,0,0}},
        /* 1Y0 */
-       {3,{2,0,2,0},{ I0_000, I1___Z | I1_CST,
-                      I0_XYZ, I1__Y_,
-                      I0_111, I1_X__ | I1_CST,
+       {3,{0,2,2,0},{ I0_XYZ, I1__Y_,
+                      I0_000, I1___Z,
+                      I0_111, I1_X__,
                       0,0}},
        SEMPTY,SEMPTY,
        /* XZ0 */
-       {3,{2,0,0,0},{ I0_000, I1___Z | I1_CST,
+       {3,{0,0,2,0},{ I0_ZZZ, I1__Y_,
                       I0_XYZ, I1_X__,
-                      I0_ZZZ, I1__Y_,
+                      I0_000, I1___Z,
                       0,0}},
        /* YZ0 */
-       {2,{2,0,0,0},{ I0_000, I1___Z | I1_CST,
-                      I0_YZX, I1_XY_,
+       {2,{0,2,0,0},{ I0_YZX, I1_XY_,
+                      I0_000, I1___Z,
                       0,0,0,0}},
        /* ZZ0 */
-       {2,{2,0,0,0},{ I0_000, I1___Z | I1_CST,
-                      I0_ZZZ, I1_XY_,
+       {2,{0,2,0,0},{ I0_ZZZ, I1_XY_,
+                      I0_000, I1___Z,
                       0,0,0,0}},
        /* WZ0 */
-       {2,{2,0,0,0},{ I0_000, I1___Z | I1_CST,
+       {3,{0,0,2,0},{ I0_XYZ, I1_XYZ,
                       I0_WZY, I1_XY_,
-                      0,0,0,0}},
+                      I0_000, I1___Z,
+                      0,0}},
        /* 0Z0 */
-       {2,{2,0,0,0},{ I0_000, I1_X_Z | I1_CST,
-                      I0_ZZZ, I1__Y_,
+       {2,{0,2,0,0},{ I0_ZZZ, I1__Y_,
+                      I0_000, I1_X_Z,
                       0,0,0,0}},
        /* 1Z0 */
-       {3,{2,0,2,0},{ I0_000, I1___Z | I1_CST,
-                      I0_ZZZ, I1__Y_,
-                      I0_111, I1_X__ | I1_CST,
+       {3,{0,2,2,0},{ I0_ZZZ, I1__Y_,
+                      I0_000, I1___Z,
+                      I0_111, I1_X__,
                       0,0}},
        SEMPTY,SEMPTY,
        /* XW0 */
-       {4,{0,1,2,0},{ I0_WZY, I1_XYZ,
-                      I0_XXX, I1__Y_,
-                      I0_000, I1___Z | I1_CST,
-                      I0_XYZ, I1_X__ } },
+       {3,{0,0,2,0},{ I0_WWW, I1__Y_,
+                      I0_XYZ, I1_X__,
+                      I0_000, I1___Z,
+                      0,0}},
        /* YW0 */
-       {4,{0,1,2,0},{ I0_WZY, I1_XYZ,
-                      I0_XXX, I1__Y_,
-                      I0_000, I1___Z | I1_CST,
-                      I0_YYY, I1_X__ } },
+       {3,{0,2,0,0},{ I0_WWW, I1__Y_,
+                      I0_000, I1___Z,
+                      I0_YYY, I1_X__,
+                      0,0}},
        /* ZW0 */
-       {4,{0,1,2,0},{ I0_WZY, I1_XYZ,
-                      I0_XXX, I1__Y_,
-                      I0_000, I1___Z | I1_CST,
-                      I0_ZZZ, I1_X__ } },
-       /* WW0 */
-       {3,{0,1,2,0},{ I0_WZY, I1_XYZ,
-                      I0_XXX, I1_XY_,
-                      I0_000, I1___Z | I1_CST,
+       {3,{0,2,0,0},{ I0_WWW, I1__Y_,
+                      I0_000, I1___Z,
+                      I0_ZZZ, I1_X__,
                       0,0}},
+       /* WW0 */
+       {2,{0,2,0,0},{ I0_WWW, I1_XY_,
+                      I0_000, I1___Z,
+                      0,0,0,0}},
        /* 0W0 */
-       {3,{0,1,2,0},{ I0_WZY, I1_XYZ,
-                      I0_XXX, I1__Y_,
-                      I0_000, I1_X_Z | I1_CST,
-                      0,0}},
+       {2,{0,2,0,0},{ I0_WWW, I1__Y_,
+                      I0_000, I1_X_Z,
+                      0,0,0,0}},
        /* 1W0 */
-       {4,{0,1,2,2},{ I0_WZY, I1_XYZ,
-                      I0_XXX, I1__Y_,
-                      I0_000, I1___Z | I1_CST,
-                      I0_111, I1_X__ | I1_CST } },
+       {3,{0,2,2,0},{ I0_WWW, I1__Y_,
+                      I0_000, I1___Z,
+                      I0_111, I1_X__,
+                      0,0}},
        SEMPTY,SEMPTY,
        /* X00 */
-       {2,{2,0,0,0},{ I0_000, I1__YZ | I1_CST,
-                      I0_XYZ, I1_X__,
+       {2,{0,2,0,0},{ I0_XYZ, I1_X__,
+                      I0_000, I1__YZ,
                       0,0,0,0}},
        /* Y00 */
-       {2,{2,0,0,0},{ I0_000, I1__YZ | I1_CST,
-                      I0_YYY, I1_X__,
+       {2,{0,2,0,0},{ I0_YYY, I1_X__,
+                      I0_000, I1__YZ,
                       0,0,0,0}},
        /* Z00 */
-       {2,{2,0,0,0},{ I0_000, I1__YZ | I1_CST,
-                      I0_ZZZ, I1_X__,
+       {2,{0,2,0,0},{ I0_ZZZ, I1_X__,
+                      I0_000, I1__YZ,
                       0,0,0,0}},
        /* W00 */
-       {2,{2,0,0,0},{ I0_000, I1__YZ | I1_CST,
-                      I0_WZY, I1_X__,
+       {2,{2,0,0,0},{ I0_WZY, I1_X__,
+                      I0_000, I1__YZ,
                       0,0,0,0}},
        /* 000 */
-       {1,{2,0,0,0},{ I0_000, I1_XYZ | I1_CST,
+       {1,{2,0,0,0},{ I0_000, I1_XYZ,
                       0, 0, 0, 0, 0, 0 } },
        /* 100 */
-       {2,{2,2,0,0},{ I0_000, I1__YZ | I1_CST,
-                      I0_111, I1_X__ | I1_CST,
+       {2,{2,2,0,0},{ I0_000, I1__YZ,
+                      I0_111, I1_X__,
                       0,0,0,0}},
        SEMPTY,SEMPTY,
        /* X10 */
-       {3,{2,0,2,0},{ I0_000, I1___Z | I1_CST,
-                      I0_XYZ, I1_X__,
-                      I0_111, I1__Y_ | I1_CST,
+       {3,{0,2,2,0},{ I0_XYZ, I1_XYZ,
+                      I0_000, I1___Z,
+                      I0_111, I1__Y_,
                       0,0}},
        /* Y10 */
-       {3,{2,0,2,0},{ I0_000, I1___Z | I1_CST,
-                      I0_YYY, I1_X__,
-                      I0_111, I1__Y_ | I1_CST,
+       {3,{0,2,2,0},{ I0_YYY, I1_XYZ,
+                      I0_000, I1___Z,
+                      I0_111, I1__Y_,
                       0,0}},
        /* Z10 */
-       {3,{2,0,2,0},{ I0_000, I1___Z | I1_CST,
-                      I0_ZZZ, I1_X__,
-                      I0_111, I1__Y_ | I1_CST,
+       {3,{0,2,2,0},{ I0_ZZZ, I1_XYZ,
+                      I0_000, I1___Z,
+                      I0_111, I1__Y_,
                       0,0}},
        /* W10 */
-       {3,{2,0,2,0},{ I0_000, I1___Z | I1_CST,
-                      I0_WZY, I1_X__,
-                      I0_111, I1__Y_ | I1_CST,
+       {3,{0,2,2,0},{ I0_WZY, I1_XYZ,
+                      I0_000, I1___Z,
+                      I0_111, I1__Y_,
                       0,0}},
        /* 010 */
-       {2,{2,2,0,0},{ I0_000, I1_X_Z | I1_CST,
-                      I0_111, I1__Y_ | I1_CST,
+       {2,{2,2,0,0},{ I0_000, I1_X_Z,
+                      I0_111, I1__Y_,
                       0, 0, 0, 0 } },
        /* 110 */
-       {2,{2,2,0,0},{ I0_000, I1___Z | I1_CST,
-                      I0_111, I1_XY_ | I1_CST,
+       {2,{2,2,0,0},{ I0_000, I1___Z,
+                      I0_111, I1_XY_,
                       0,0,0,0}},
        SEMPTY,SEMPTY,SEMPTY,SEMPTY,SEMPTY,SEMPTY,SEMPTY,SEMPTY,SEMPTY,SEMPTY,
        SEMPTY,SEMPTY,SEMPTY,SEMPTY,SEMPTY,SEMPTY,SEMPTY,SEMPTY,
@@ -936,170 +920,168 @@ struct r300_fragment_program_swizzle r300_swizzle [512] = {
 
 
        /* XX1 */
-       {2,{2,0,0,0},{ I0_111, I1___Z | I1_CST,
-                      I0_XXX, I1_XY_,
+       {2,{0,2,0,0},{ I0_XXX, I1_XY_,
+                      I0_111, I1___Z,
                       0,0,0,0}},
        /* YX1 */
-       {3,{2,0,0,0},{ I0_111, I1___Z | I1_CST,
+       {3,{0,0,2,0},{ I0_YYY, I1_X__,
                       I0_XXX, I1__Y_,
-                      I0_YYY, I1_X__,
+                      I0_111, I1___Z,
                       0,0}},
        /* ZX1 */
-       {2,{2,0,0,0},{ I0_111, I1___Z | I1_CST,
-                      I0_ZXY, I1_XY_,
+       {2,{0,2,0,0},{ I0_ZXY, I1_XY_,
+                      I0_111, I1___Z,
                       0,0,0,0}},
        /* WX1 */
-       {3,{2,0,0,0},{ I0_111, I1___Z | I1_CST,
+       {3,{0,0,2,0},{ I0_WZY, I1_XYZ,
                       I0_XXX, I1__Y_,
-                      I0_WZY, I1_X__,
+                      I0_111, I1___Z,
                       0,0}},
        /* 0X1 */
-       {3,{2,0,2,0},{ I0_111, I1___Z | I1_CST,
-                      I0_XXX, I1__Y_,
-                      I0_000, I1_X__ | I1_CST,
+       {3,{0,2,2,0},{ I0_XXX, I1__Y_,
+                      I0_111, I1___Z,
+                      I0_000, I1_X__,
                       0,0}},
        /* 1X1 */
-       {2,{2,0,0,0},{ I0_111, I1_X_Z | I1_CST,
-                      I0_XXX, I1__Y_,
+       {2,{0,2,0,0},{ I0_XXX, I1__Y_,
+                      I0_111, I1_X_Z,
                       0,0,0,0}},
        SEMPTY,SEMPTY,
        /* XY1 */
-       {2,{2,0,0,0},{ I0_111, I1___Z | I1_CST,
-                      I0_XYZ, I1_XY_,
+       {2,{0,2,0,0},{ I0_XYZ, I1_XY_,
+                      I0_111, I1___Z,
                       0,0,0,0}},
        /* YY1 */
-       {2,{2,0,0,0},{ I0_111, I1___Z | I1_CST,
-                      I0_YYY, I1_XY_,
+       {2,{0,2,0,0},{ I0_YYY, I1_XY_,
+                      I0_111, I1___Z,
                       0,0,0,0}},
        /* ZY1 */
-       {3,{2,0,0,0},{ I0_111, I1___Z | I1_CST,
+       {3,{0,0,2,0},{ I0_YYY, I1__Y_,
                       I0_ZZZ, I1_X__,
-                      I0_YYY, I1__Y_,
+                      I0_111, I1___Z,
                       0,0}},
        /* WY1 */
-       {3,{2,0,0,0},{ I0_111, I1___Z | I1_CST,
+       {3,{0,0,2,0},{ I0_WZY, I1_XYZ,
                       I0_XYZ, I1__Y_,
-                      I0_WZY, I1_X__,
+                      I0_111, I1___Z,
                       0,0}},
        /* 0Y1 */
-       {3,{2,0,2,0},{ I0_111, I1___Z | I1_CST,
-                      I0_XYZ, I1__Y_,
-                      I0_000, I1_X__ | I1_CST,
+       {3,{0,2,2,0},{ I0_XYZ, I1__Y_,
+                      I0_111, I1___Z,
+                      I0_000, I1_X__,
                       0,0}},
        /* 1Y1 */
-       {2,{2,0,0,0},{ I0_111, I1_X_Z | I1_CST,
-                      I0_XYZ, I1__Y_,
+       {2,{0,2,0,0},{ I0_XYZ, I1__Y_,
+                      I0_111, I1_X_Z,
                       0,0,0,0}},
        SEMPTY,SEMPTY,
        /* XZ1 */
-       {3,{2,0,0,0},{ I0_111, I1___Z | I1_CST,
+       {3,{0,0,2,0},{ I0_ZZZ, I1__Y_,
                       I0_XYZ, I1_X__,
-                      I0_ZZZ, I1__Y_,
+                      I0_111, I1___Z,
                       0,0}},
        /* YZ1 */
-       {2,{2,0,0,0},{ I0_111, I1___Z | I1_CST,
-                      I0_YZX, I1_XY_,
+       {2,{0,2,0,0},{ I0_YZX, I1_XY_,
+                      I0_111, I1___Z,
                       0,0,0,0}},
        /* ZZ1 */
-       {2,{2,0,0,0},{ I0_111, I1___Z | I1_CST,
-                      I0_ZZZ, I1_XY_,
+       {2,{0,2,0,0},{ I0_ZZZ, I1_XYZ,
+                      I0_111, I1___Z,
                       0,0,0,0}},
        /* WZ1 */
-       {2,{2,0,0,0},{ I0_111, I1___Z | I1_CST,
-                      I0_WZY, I1_XY_,
+       {2,{0,2,0,0},{ I0_WZY, I1_XY_,
+                      I0_111, I1___Z,
                       0,0,0,0}},
        /* 0Z1 */
-       {3,{2,0,2,0},{ I0_111, I1___Z | I1_CST,
-                      I0_ZZZ, I1__Y_,
-                      I0_000, I1_X__ | I1_CST,
+       {3,{0,2,2,0},{ I0_ZZZ, I1_XYZ,
+                      I0_111, I1___Z,
+                      I0_000, I1_X__,
                       0,0}},
        /* 1Z1 */
-       {2,{2,0,0,0},{ I0_111, I1_X_Z | I1_CST,
-                      I0_ZZZ, I1__Y_,
+       {2,{0,2,0,0},{ I0_ZZZ, I1__Y_,
+                      I0_111, I1_X_Z,
                       0,0,0,0}},
        SEMPTY,SEMPTY,
        /* XW1 */
-       {4,{0,1,2,0},{ I0_WZY, I1_XYZ,
-                      I0_XXX, I1__Y_,
-                      I0_000, I1___Z | I1_CST,
-                      I0_XYZ, I1_X__ } },
+       {3,{0,0,2,0},{ I0_WWW, I1__Y_,
+                      I0_XYZ, I1_X__,
+                      I0_111, I1___Z,
+                      0,0}},
        /* YW1 */
-       {4,{0,1,2,0},{ I0_WZY, I1_XYZ,
-                      I0_XXX, I1__Y_,
-                      I0_111, I1___Z | I1_CST,
-                      I0_YYY, I1_X__ } },
+       {3,{0,2,0,0},{ I0_WWW, I1__Y_,
+                      I0_111, I1___Z,
+                      I0_YYY, I1_X__,
+                      0,0}},
        /* ZW1 */
-       {4,{0,1,2,0},{ I0_WZY, I1_XYZ,
-                      I0_XXX, I1__Y_,
-                      I0_111, I1___Z | I1_CST,
-                      I0_ZZZ, I1_X__ } },
-       /* WW1 */
-       {3,{0,1,2,0},{ I0_WZY, I1_XYZ,
-                      I0_XXX, I1_XY_,
-                      I0_111, I1___Z | I1_CST,
+       {3,{0,2,0,0},{ I0_WWW, I1__Y_,
+                      I0_111, I1___Z,
+                      I0_ZZZ, I1_X__,
                       0,0}},
+       /* WW1 */
+       {2,{0,2,0,0},{ I0_WWW, I1_XY_,
+                      I0_111, I1___Z,
+                      0,0,0,0}},
        /* 0W1 */
-       {4,{0,1,2,2},{ I0_WZY, I1_XYZ,
-                      I0_XXX, I1__Y_,
-                      I0_111, I1___Z | I1_CST,
-                      I0_000, I1_X__ | I1_CST } },
-       /* 1W1 */
-       {3,{0,1,2,0},{ I0_WZY, I1_XYZ,
-                      I0_XXX, I1__Y_,
-                      I0_111, I1_X_Z | I1_CST,
+       {3,{0,2,2,0},{ I0_WWW, I1__Y_,
+                      I0_111, I1___Z,
+                      I0_000, I1_X__,
                       0,0}},
+       /* 1W1 */
+       {2,{0,2,0,0},{ I0_WWW, I1__Y_,
+                      I0_111, I1_X_Z,
+                      0,0,0,0}},
        SEMPTY,SEMPTY,
        /* X01 */
-       {3,{2,0,2,0},{ I0_111, I1___Z | I1_CST,
-                      I0_XYZ, I1_X__,
-                      I0_000, I1__Y_ | I1_CST,
+       {3,{0,2,2,0},{ I0_XYZ, I1_X__,
+                      I0_111, I1___Z,
+                      I0_000, I1__Y_,
                       0,0}},
        /* Y01 */
-       {3,{2,0,2,0},{ I0_111, I1___Z | I1_CST,
-                      I0_YYY, I1_X__,
-                      I0_000, I1__Y_ | I1_CST,
+       {3,{0,2,2,0},{ I0_YYY, I1_X__,
+                      I0_111, I1___Z,
+                      I0_000, I1__Y_,
                       0,0}},
        /* Z01 */
-       {3,{2,0,2,0},{ I0_111, I1___Z | I1_CST,
-                      I0_ZZZ, I1_X__,
-                      I0_000, I1__Y_ | I1_CST,
+       {3,{0,2,2,0},{ I0_ZZZ, I1_X__,
+                      I0_111, I1___Z,
+                      I0_000, I1__Y_,
                       0,0}},
        /* W01 */
-       {3,{2,0,2,0},{ I0_111, I1___Z | I1_CST,
-                      I0_WZY, I1_X__,
-                      I0_000, I1__Y_ | I1_CST,
+       {3,{0,2,2,0},{ I0_WZY, I1_XYZ,
+                      I0_111, I1___Z,
+                      I0_000, I1__Y_,
                       0,0}},
        /* 001 */
-       {2,{2,2,0,0},{ I0_111, I1___Z | I1_CST,
-                      I0_000, I1_XY_ | I1_CST,
+       {2,{2,2,0,0},{ I0_111, I1___Z,
+                      I0_000, I1_XY_,
                       0,0,0,0}},
        /* 101 */
-       {2,{2,2,0,0},{ I0_111, I1_X_Z | I1_CST,
-                      I0_000, I1__Y_ | I1_CST,
+       {2,{2,2,0,0},{ I0_111, I1_X_Z,
+                      I0_000, I1__Y_,
                       0, 0, 0, 0 } },
        SEMPTY,SEMPTY,
        /* X11 */
-       {2,{2,0,0,0},{ I0_111, I1__YZ | I1_CST,
-                      I0_XYZ, I1_X__,
+       {2,{0,2,0,0},{ I0_XYZ, I1_X__,
+                      I0_111, I1__YZ,
                       0,0,0,0}},
        /* Y11 */
-       {2,{2,0,0,0},{ I0_111, I1__YZ | I1_CST,
-                      I0_YYY, I1_X__,
+       {2,{0,2,0,0},{ I0_YYY, I1_X__,
+                      I0_111, I1__YZ,
                       0,0,0,0}},
        /* Z11 */
-       {2,{2,0,0,0},{ I0_111, I1__YZ | I1_CST,
-                      I0_ZZZ, I1_X__,
+       {2,{0,2,0,0},{ I0_ZZZ, I1_X__,
+                      I0_111, I1__YZ,
                       0,0,0,0}},
        /* W11 */
-       {2,{2,0,0,0},{ I0_111, I1__YZ | I1_CST,
-                      I0_WZY, I1_X__,
+       {2,{0,2,0,0},{ I0_WZY, I1_XYZ,
+                      I0_111, I1__YZ,
                       0,0,0,0}},
        /* 011 */
-       {2,{2,2,0,0},{ I0_111, I1__YZ | I1_CST,
-                      I0_000, I1_X__ | I1_CST,
+       {2,{2,2,0,0},{ I0_111, I1__YZ,
+                      I0_000, I1_X__,
                       0,0,0,0}},
        /* 111 */
-       {1,{2,0,0,0},{ I0_111, I1_XYZ | I1_CST,
+       {1,{2,0,0,0},{ I0_111, I1_XYZ,
                       0, 0, 0, 0, 0, 0 } },
        SEMPTY,SEMPTY,SEMPTY,SEMPTY,SEMPTY,SEMPTY,SEMPTY,SEMPTY,SEMPTY,SEMPTY,
        SEMPTY,SEMPTY,SEMPTY,SEMPTY,SEMPTY,SEMPTY,SEMPTY,SEMPTY,SEMPTY,SEMPTY,
@@ -1128,6 +1110,7 @@ struct r300_fragment_program_swizzle r300_swizzle [512] = {
 #define S0XXX  R300_FPI0_ARGC_SRC0C_XXX
 #define S0YYY  R300_FPI0_ARGC_SRC0C_YYY
 #define S0ZZZ  R300_FPI0_ARGC_SRC0C_ZZZ
+#define S0WWW  R300_FPI0_ARGC_SRC0A
 #define S0XYZ  R300_FPI0_ARGC_SRC0C_XYZ
 #define S0ZXY  R300_FPI0_ARGC_SRC0C_ZXY
 #define S0YZX  R300_FPI0_ARGC_SRC0C_YZX
@@ -1137,6 +1120,7 @@ struct r300_fragment_program_swizzle r300_swizzle [512] = {
 #define S1XXX  R300_FPI0_ARGC_SRC1C_XXX
 #define S1YYY  R300_FPI0_ARGC_SRC1C_YYY
 #define S1ZZZ  R300_FPI0_ARGC_SRC1C_ZZZ
+#define S1WWW  R300_FPI0_ARGC_SRC1A
 #define S1XYZ  R300_FPI0_ARGC_SRC1C_XYZ
 #define S1ZXY  R300_FPI0_ARGC_SRC1C_ZXY
 #define S1YZX  R300_FPI0_ARGC_SRC1C_YZX
@@ -1145,6 +1129,7 @@ struct r300_fragment_program_swizzle r300_swizzle [512] = {
 #define S2XXX  R300_FPI0_ARGC_SRC2C_XXX
 #define S2YYY  R300_FPI0_ARGC_SRC2C_YYY
 #define S2ZZZ  R300_FPI0_ARGC_SRC2C_ZZZ
+#define S2WWW  R300_FPI0_ARGC_SRC2A
 #define S2XYZ  R300_FPI0_ARGC_SRC2C_XYZ
 #define S2ZXY  R300_FPI0_ARGC_SRC2C_ZXY
 #define S2YZX  R300_FPI0_ARGC_SRC2C_YZX
@@ -1175,7 +1160,7 @@ const GLuint r300_swz_srcc_mask[3][512] = {
                ntnat,ntnat,ntnat,ntnat,ntnat,ntnat,ntnat,ntnat,ntnat,ntnat,
                ntnat,ntnat,ntnat,ntnat,ntnat,ntnat,ntnat,ntnat,ntnat,ntnat,
                ntnat,ntnat,ntnat,ntnat,ntnat,ntnat,ntnat,ntnat,ntnat,ntnat,
-               ntnat,ntnat,ntnat,ntnat,ntnat,ntnat,ntnat,ntnat,ntnat,ntnat,
+               ntnat,ntnat,ntnat,ntnat,ntnat,ntnat,ntnat,ntnat,ntnat,S0WWW,
                ntnat,ntnat,ntnat,ntnat,ntnat,ntnat,ntnat,ntnat,ntnat,ntnat,
                ntnat,ntnat,ntnat,ntnat,ntnat,ntnat,ntnat,ntnat,ntnat,ntnat,
                ntnat,ntnat,ntnat,ntnat,ntnat,ntnat,ntnat,ntnat,ntnat,ntnat,
@@ -1229,7 +1214,7 @@ const GLuint r300_swz_srcc_mask[3][512] = {
                ntnat,ntnat,ntnat,ntnat,ntnat,ntnat,ntnat,ntnat,ntnat,ntnat,
                ntnat,ntnat,ntnat,ntnat,ntnat,ntnat,ntnat,ntnat,ntnat,ntnat,
                ntnat,ntnat,ntnat,ntnat,ntnat,ntnat,ntnat,ntnat,ntnat,ntnat,
-               ntnat,ntnat,ntnat,ntnat,ntnat,ntnat,ntnat,ntnat,ntnat,ntnat,
+               ntnat,ntnat,ntnat,ntnat,ntnat,ntnat,ntnat,ntnat,ntnat,S1WWW,
                ntnat,ntnat,ntnat,ntnat,ntnat,ntnat,ntnat,ntnat,ntnat,ntnat,
                ntnat,ntnat,ntnat,ntnat,ntnat,ntnat,ntnat,ntnat,ntnat,ntnat,
                ntnat,ntnat,ntnat,ntnat,ntnat,ntnat,ntnat,ntnat,ntnat,ntnat,
@@ -1283,7 +1268,7 @@ const GLuint r300_swz_srcc_mask[3][512] = {
                ntnat,ntnat,ntnat,ntnat,ntnat,ntnat,ntnat,ntnat,ntnat,ntnat,
                ntnat,ntnat,ntnat,ntnat,ntnat,ntnat,ntnat,ntnat,ntnat,ntnat,
                ntnat,ntnat,ntnat,ntnat,ntnat,ntnat,ntnat,ntnat,ntnat,ntnat,
-               ntnat,ntnat,ntnat,ntnat,ntnat,ntnat,ntnat,ntnat,ntnat,ntnat,
+               ntnat,ntnat,ntnat,ntnat,ntnat,ntnat,ntnat,ntnat,ntnat,S2WWW,
                ntnat,ntnat,ntnat,ntnat,ntnat,ntnat,ntnat,ntnat,ntnat,ntnat,
                ntnat,ntnat,ntnat,ntnat,ntnat,ntnat,ntnat,ntnat,ntnat,ntnat,
                ntnat,ntnat,ntnat,ntnat,ntnat,ntnat,ntnat,ntnat,ntnat,ntnat,