Fix append_* function calls
authorjsteube <jens.steube@gmail.com>
Tue, 15 Dec 2015 12:42:37 +0000 (13:42 +0100)
committerjsteube <jens.steube@gmail.com>
Tue, 15 Dec 2015 12:42:37 +0000 (13:42 +0100)
147 files changed:
OpenCL/common.c
OpenCL/m00010_a0.cl
OpenCL/m00010_a1.cl
OpenCL/m00020_a0.cl
OpenCL/m00020_a1.cl
OpenCL/m00030_a0.cl
OpenCL/m00030_a1.cl
OpenCL/m00040_a0.cl
OpenCL/m00040_a1.cl
OpenCL/m00060_a0.cl
OpenCL/m00060_a1.cl
OpenCL/m00060_a3.cl
OpenCL/m00100_a0.cl
OpenCL/m00100_a1.cl
OpenCL/m00110_a0.cl
OpenCL/m00110_a1.cl
OpenCL/m00120_a0.cl
OpenCL/m00120_a1.cl
OpenCL/m00130_a0.cl
OpenCL/m00130_a1.cl
OpenCL/m00140_a0.cl
OpenCL/m00140_a1.cl
OpenCL/m00160_a0.cl
OpenCL/m00160_a1.cl
OpenCL/m00190_a0.cl
OpenCL/m00190_a1.cl
OpenCL/m00300_a0.cl
OpenCL/m00300_a1.cl
OpenCL/m00900_a0.cl
OpenCL/m00900_a1.cl
OpenCL/m01000_a0.cl
OpenCL/m01000_a1.cl
OpenCL/m01100_a0.cl
OpenCL/m01100_a1.cl
OpenCL/m01400_a0.cl
OpenCL/m01400_a1.cl
OpenCL/m01410_a0.cl
OpenCL/m01410_a1.cl
OpenCL/m01420_a0.cl
OpenCL/m01420_a1.cl
OpenCL/m01430_a0.cl
OpenCL/m01430_a1.cl
OpenCL/m01440_a0.cl
OpenCL/m01440_a1.cl
OpenCL/m01460_a0.cl
OpenCL/m01460_a1.cl
OpenCL/m01600.cl
OpenCL/m01700_a0.cl
OpenCL/m01700_a1.cl
OpenCL/m01710_a0.cl
OpenCL/m01710_a1.cl
OpenCL/m01720_a0.cl
OpenCL/m01720_a1.cl
OpenCL/m01730_a0.cl
OpenCL/m01730_a1.cl
OpenCL/m01740_a0.cl
OpenCL/m01740_a1.cl
OpenCL/m01760_a0.cl
OpenCL/m01760_a1.cl
OpenCL/m02100.cl
OpenCL/m02500.cl
OpenCL/m02610_a0.cl
OpenCL/m02610_a1.cl
OpenCL/m02710_a0.cl
OpenCL/m02710_a1.cl
OpenCL/m02810_a0.cl
OpenCL/m02810_a1.cl
OpenCL/m03710_a0.cl
OpenCL/m03710_a1.cl
OpenCL/m03800_a0.cl
OpenCL/m03800_a1.cl
OpenCL/m03800_a3.cl
OpenCL/m04310_a0.cl
OpenCL/m04310_a1.cl
OpenCL/m04400_a0.cl
OpenCL/m04400_a1.cl
OpenCL/m04500_a0.cl
OpenCL/m04500_a1.cl
OpenCL/m04700_a0.cl
OpenCL/m04700_a1.cl
OpenCL/m04900_a0.cl
OpenCL/m04900_a1.cl
OpenCL/m04900_a3.cl
OpenCL/m05000_a0.cl
OpenCL/m05000_a1.cl
OpenCL/m05100_a0.cl
OpenCL/m05100_a1.cl
OpenCL/m05200.cl
OpenCL/m05500_a0.cl
OpenCL/m05500_a1.cl
OpenCL/m05600_a0.cl
OpenCL/m05600_a1.cl
OpenCL/m06000_a0.cl
OpenCL/m06000_a1.cl
OpenCL/m06100_a0.cl
OpenCL/m06100_a1.cl
OpenCL/m06300.cl
OpenCL/m06400.cl
OpenCL/m06500.cl
OpenCL/m06600.cl
OpenCL/m06700.cl
OpenCL/m06800.cl
OpenCL/m07400.cl
OpenCL/m07500_a0.cl
OpenCL/m07500_a1.cl
OpenCL/m07500_a3.cl
OpenCL/m07600_a0.cl
OpenCL/m07600_a1.cl
OpenCL/m07900.cl
OpenCL/m08100_a0.cl
OpenCL/m08100_a1.cl
OpenCL/m08100_a3.cl
OpenCL/m08400_a0.cl
OpenCL/m08400_a1.cl
OpenCL/m08800.cl
OpenCL/m09000.cl
OpenCL/m09400.cl
OpenCL/m09500.cl
OpenCL/m09600.cl
OpenCL/m09700_a0.cl
OpenCL/m09700_a1.cl
OpenCL/m09720_a0.cl
OpenCL/m09720_a1.cl
OpenCL/m09800_a0.cl
OpenCL/m09800_a1.cl
OpenCL/m09820_a0.cl
OpenCL/m09820_a1.cl
OpenCL/m10300.cl
OpenCL/m10420_a1.cl
OpenCL/m10700.cl
OpenCL/m10800_a0.cl
OpenCL/m10800_a1.cl
OpenCL/m11000_a0.cl
OpenCL/m11000_a1.cl
OpenCL/m11200_a0.cl
OpenCL/m11200_a1.cl
OpenCL/m11400_a0.cl
OpenCL/m11400_a1.cl
OpenCL/m11600.cl
OpenCL/m11700_a0.cl
OpenCL/m11700_a1.cl
OpenCL/m11800_a0.cl
OpenCL/m11800_a1.cl
OpenCL/m12200.cl
OpenCL/m12600_a0.cl
OpenCL/m12600_a1.cl
OpenCL/m12800.cl

index 18e67a4..df7a2bb 100644 (file)
@@ -3,7 +3,7 @@
  * License.....: MIT
  */
 
-static int device_memcmp (const u32 d1[4], __global u32 *d2)
+static int hash_comp (const u32 d1[4], __global u32 *d2)
 {
   if (d1[3] > d2[DGST_R3]) return ( 1);
   if (d1[3] < d2[DGST_R3]) return (-1);
@@ -25,7 +25,7 @@ static int find_hash (const u32 digest[4], const u32 digests_cnt, __global diges
 
     const u32 c = l + m;
 
-    const int cmp = device_memcmp (digest, digests_buf[c].digest_buf);
+    const int cmp = hash_comp (digest, digests_buf[c].digest_buf);
 
     if (cmp > 0)
     {
@@ -2757,141 +2757,6 @@ static void append_0x80_2x4 (u32 w0[4], u32 w1[4], const u32 offset)
   }
 }
 
-// before: append_0x80_2_be
-static void append_0x80_2x4_be (u32 w0[4], u32 w1[4], const u32 offset)
-{
-  switch (offset)
-  {
-    case  0:
-      w0[0] |= 0x80000000;
-      break;
-
-    case  1:
-      w0[0] |= 0x800000;
-      break;
-
-    case  2:
-      w0[0] |= 0x8000;
-      break;
-
-    case  3:
-      w0[0] |= 0x80;
-      break;
-
-    case  4:
-      w0[1] |= 0x80000000;
-      break;
-
-    case  5:
-      w0[1] |= 0x800000;
-      break;
-
-    case  6:
-      w0[1] |= 0x8000;
-      break;
-
-    case  7:
-      w0[1] |= 0x80;
-      break;
-
-    case  8:
-      w0[2] |= 0x80000000;
-      break;
-
-    case  9:
-      w0[2] |= 0x800000;
-      break;
-
-    case 10:
-      w0[2] |= 0x8000;
-      break;
-
-    case 11:
-      w0[2] |= 0x80;
-      break;
-
-    case 12:
-      w0[3] |= 0x80000000;
-      break;
-
-    case 13:
-      w0[3] |= 0x800000;
-      break;
-
-    case 14:
-      w0[3] |= 0x8000;
-      break;
-
-    case 15:
-      w0[3] |= 0x80;
-      break;
-
-    case 16:
-      w1[0] |= 0x80000000;
-      break;
-
-    case 17:
-      w1[0] |= 0x800000;
-      break;
-
-    case 18:
-      w1[0] |= 0x8000;
-      break;
-
-    case 19:
-      w1[0] |= 0x80;
-      break;
-
-    case 20:
-      w1[1] |= 0x80000000;
-      break;
-
-    case 21:
-      w1[1] |= 0x800000;
-      break;
-
-    case 22:
-      w1[1] |= 0x8000;
-      break;
-
-    case 23:
-      w1[1] |= 0x80;
-      break;
-
-    case 24:
-      w1[2] |= 0x80000000;
-      break;
-
-    case 25:
-      w1[2] |= 0x800000;
-      break;
-
-    case 26:
-      w1[2] |= 0x8000;
-      break;
-
-    case 27:
-      w1[2] |= 0x80;
-      break;
-
-    case 28:
-      w1[3] |= 0x80000000;
-      break;
-
-    case 29:
-      w1[3] |= 0x800000;
-      break;
-
-    case 30:
-      w1[3] |= 0x8000;
-      break;
-
-    case 31:
-      w1[3] |= 0x80;
-      break;
-  }
-}
-
 // before: append_0x80_3
 static void append_0x80_3x4 (u32 w0[4], u32 w1[4], u32 w2[4], const u32 offset)
 {
@@ -3873,4108 +3738,4245 @@ static void append_0x80_8x4 (u32 w0[4], u32 w1[4], u32 w2[4], u32 w3[4], u32 w4[
   }
 }
 
-// before: append_0x80_4
-static void append_0x80_1x16 (u32 w[16], const u32 offset)
+// before: device_memcat2L
+static void memcat_c7_d1x2_sl1x2_sr1x2 (const u32 offset, u32 dst0[2], u32 src_l0[2], u32 src_r0[2])
 {
   switch (offset)
   {
-    case 0:
-      w[ 0] = 0x80;
-      break;
-
     case 1:
-      w[ 0] = w[ 0] | 0x8000;
+      dst0[0] = src_l0[0]       | src_r0[0] <<  8;
+      dst0[1] = src_r0[0] >> 24 | src_r0[1] <<  8;
       break;
 
     case 2:
-      w[ 0] = w[ 0] | 0x800000;
+      dst0[0] = src_l0[0]       | src_r0[0] << 16;
+      dst0[1] = src_r0[0] >> 16 | src_r0[1] << 16;
       break;
 
     case 3:
-      w[ 0] = w[ 0] | 0x80000000;
+      dst0[0] = src_l0[0]       | src_r0[0] << 24;
+      dst0[1] = src_r0[0] >>  8 | src_r0[1] << 24;
       break;
 
     case 4:
-      w[ 1] = 0x80;
+      dst0[1] = src_r0[0];
       break;
 
     case 5:
-      w[ 1] = w[ 1] | 0x8000;
+      dst0[1] = src_l0[1]       | src_r0[0] <<  8;
       break;
 
     case 6:
-      w[ 1] = w[ 1] | 0x800000;
+      dst0[1] = src_l0[1]       | src_r0[0] << 16;
       break;
 
     case 7:
-      w[ 1] = w[ 1] | 0x80000000;
-      break;
-
-    case 8:
-      w[ 2] = 0x80;
+      dst0[1] = src_l0[1]       | src_r0[0] << 24;
       break;
+  }
+}
 
-    case 9:
-      w[ 2] = w[ 2] | 0x8000;
+// before: device_memcat4L
+static void memcat_c15_d1x4_sl1x4_sr1x4 (const u32 offset, u32 dst0[4], u32 src_l0[4], u32 src_r0[4])
+{
+  switch (offset)
+  {
+    case 1:
+      dst0[0] = src_l0[0]       | src_r0[0] <<  8;
+      dst0[1] = src_r0[0] >> 24 | src_r0[1] <<  8;
+      dst0[2] = src_r0[1] >> 24 | src_r0[2] <<  8;
+      dst0[3] = src_r0[2] >> 24 | src_r0[3] <<  8;
       break;
 
-    case 10:
-      w[ 2] = w[ 2] | 0x800000;
+    case 2:
+      dst0[0] = src_l0[0]       | src_r0[0] << 16;
+      dst0[1] = src_r0[0] >> 16 | src_r0[1] << 16;
+      dst0[2] = src_r0[1] >> 16 | src_r0[2] << 16;
+      dst0[3] = src_r0[2] >> 16 | src_r0[3] << 16;
       break;
 
-    case 11:
-      w[ 2] = w[ 2] | 0x80000000;
+    case 3:
+      dst0[0] = src_l0[0]       | src_r0[0] << 24;
+      dst0[1] = src_r0[0] >>  8 | src_r0[1] << 24;
+      dst0[2] = src_r0[1] >>  8 | src_r0[2] << 24;
+      dst0[3] = src_r0[2] >>  8 | src_r0[3] << 24;
       break;
 
-    case 12:
-      w[ 3] = 0x80;
+    case 4:
+      dst0[1] = src_r0[0];
+      dst0[2] = src_r0[1];
+      dst0[3] = src_r0[2];
       break;
 
-    case 13:
-      w[ 3] = w[ 3] | 0x8000;
+    case 5:
+      dst0[1] = src_l0[1]       | src_r0[0] <<  8;
+      dst0[2] = src_r0[0] >> 24 | src_r0[1] <<  8;
+      dst0[3] = src_r0[1] >> 24 | src_r0[2] <<  8;
       break;
 
-    case 14:
-      w[ 3] = w[ 3] | 0x800000;
+    case 6:
+      dst0[1] = src_l0[1]       | src_r0[0] << 16;
+      dst0[2] = src_r0[0] >> 16 | src_r0[1] << 16;
+      dst0[3] = src_r0[1] >> 16 | src_r0[2] << 16;
       break;
 
-    case 15:
-      w[ 3] = w[ 3] | 0x80000000;
+    case 7:
+      dst0[1] = src_l0[1]       | src_r0[0] << 24;
+      dst0[2] = src_r0[0] >>  8 | src_r0[1] << 24;
+      dst0[3] = src_r0[1] >>  8 | src_r0[2] << 24;
       break;
 
-    case 16:
-      w[ 4] = 0x80;
+    case 8:
+      dst0[2] = src_r0[0];
+      dst0[3] = src_r0[1];
       break;
 
-    case 17:
-      w[ 4] = w[ 4] | 0x8000;
+    case 9:
+      dst0[2] = src_l0[2]       | src_r0[0] <<  8;
+      dst0[3] = src_r0[0] >> 24 | src_r0[1] <<  8;
       break;
 
-    case 18:
-      w[ 4] = w[ 4] | 0x800000;
+    case 10:
+      dst0[2] = src_l0[2]       | src_r0[0] << 16;
+      dst0[3] = src_r0[0] >> 16 | src_r0[1] << 16;
       break;
 
-    case 19:
-      w[ 4] = w[ 4] | 0x80000000;
+    case 11:
+      dst0[2] = src_l0[2]       | src_r0[0] << 24;
+      dst0[3] = src_r0[0] >>  8 | src_r0[1] << 24;
       break;
 
-    case 20:
-      w[ 5] = 0x80;
+    case 12:
+      dst0[3] = src_r0[0];
       break;
 
-    case 21:
-      w[ 5] = w[ 5] | 0x8000;
+    case 13:
+      dst0[3] = src_l0[3]       | src_r0[0] <<  8;
       break;
 
-    case 22:
-      w[ 5] = w[ 5] | 0x800000;
+    case 14:
+      dst0[3] = src_l0[3]       | src_r0[0] << 16;
       break;
 
-    case 23:
-      w[ 5] = w[ 5] | 0x80000000;
+    case 15:
+      dst0[3] = src_l0[3]       | src_r0[0] << 24;
       break;
+  }
+}
 
-    case 24:
-      w[ 6] = 0x80;
+// before: device_memcat8L
+static void memcat_c31_d2x4_sl2x4_sr1x4 (const u32 offset, u32 dst0[4], u32 dst1[4], u32 src_l0[4], u32 src_l1[4], u32 src_r0[4])
+{
+  switch (offset)
+  {
+    case 1:
+      dst0[0] = src_l0[0]       | src_r0[0] <<  8;
+      dst0[1] = src_r0[0] >> 24 | src_r0[1] <<  8;
+      dst0[2] = src_r0[1] >> 24 | src_r0[2] <<  8;
+      dst0[3] = src_r0[2] >> 24 | src_r0[3] <<  8;
+      dst1[0] = src_r0[3] >> 24;
       break;
 
-    case 25:
-      w[ 6] = w[ 6] | 0x8000;
+    case 2:
+      dst0[0] = src_l0[0]       | src_r0[0] << 16;
+      dst0[1] = src_r0[0] >> 16 | src_r0[1] << 16;
+      dst0[2] = src_r0[1] >> 16 | src_r0[2] << 16;
+      dst0[3] = src_r0[2] >> 16 | src_r0[3] << 16;
+      dst1[0] = src_r0[3] >> 16;
       break;
 
-    case 26:
-      w[ 6] = w[ 6] | 0x800000;
+    case 3:
+      dst0[0] = src_l0[0]       | src_r0[0] << 24;
+      dst0[1] = src_r0[0] >>  8 | src_r0[1] << 24;
+      dst0[2] = src_r0[1] >>  8 | src_r0[2] << 24;
+      dst0[3] = src_r0[2] >>  8 | src_r0[3] << 24;
+      dst1[0] = src_r0[3] >>  8;
       break;
 
-    case 27:
-      w[ 6] = w[ 6] | 0x80000000;
+    case 4:
+      dst0[1] = src_r0[0];
+      dst0[2] = src_r0[1];
+      dst0[3] = src_r0[2];
+      dst1[0] = src_r0[3];
       break;
 
-    case 28:
-      w[ 7] = 0x80;
+    case 5:
+      dst0[1] = src_l0[1]       | src_r0[0] <<  8;
+      dst0[2] = src_r0[0] >> 24 | src_r0[1] <<  8;
+      dst0[3] = src_r0[1] >> 24 | src_r0[2] <<  8;
+      dst1[0] = src_r0[2] >> 24 | src_r0[3] <<  8;
+      dst1[1] = src_r0[3] >> 24;
       break;
 
-    case 29:
-      w[ 7] = w[ 7] | 0x8000;
+    case 6:
+      dst0[1] = src_l0[1]       | src_r0[0] << 16;
+      dst0[2] = src_r0[0] >> 16 | src_r0[1] << 16;
+      dst0[3] = src_r0[1] >> 16 | src_r0[2] << 16;
+      dst1[0] = src_r0[2] >> 16 | src_r0[3] << 16;
+      dst1[1] = src_r0[3] >> 16;
       break;
 
-    case 30:
-      w[ 7] = w[ 7] | 0x800000;
+    case 7:
+      dst0[1] = src_l0[1]       | src_r0[0] << 24;
+      dst0[2] = src_r0[0] >>  8 | src_r0[1] << 24;
+      dst0[3] = src_r0[1] >>  8 | src_r0[2] << 24;
+      dst1[0] = src_r0[2] >>  8 | src_r0[3] << 24;
+      dst1[1] = src_r0[3] >>  8;
       break;
 
-    case 31:
-      w[ 7] = w[ 7] | 0x80000000;
+    case 8:
+      dst0[2] = src_r0[0];
+      dst0[3] = src_r0[1];
+      dst1[0] = src_r0[2];
+      dst1[1] = src_r0[3];
       break;
 
-    case 32:
-      w[ 8] = 0x80;
+    case 9:
+      dst0[2] = src_l0[2]       | src_r0[0] <<  8;
+      dst0[3] = src_r0[0] >> 24 | src_r0[1] <<  8;
+      dst1[0] = src_r0[1] >> 24 | src_r0[2] <<  8;
+      dst1[1] = src_r0[2] >> 24 | src_r0[3] <<  8;
+      dst1[2] = src_r0[3] >> 24;
       break;
 
-    case 33:
-      w[ 8] = w[ 8] | 0x8000;
+    case 10:
+      dst0[2] = src_l0[2]       | src_r0[0] << 16;
+      dst0[3] = src_r0[0] >> 16 | src_r0[1] << 16;
+      dst1[0] = src_r0[1] >> 16 | src_r0[2] << 16;
+      dst1[1] = src_r0[2] >> 16 | src_r0[3] << 16;
+      dst1[2] = src_r0[3] >> 16;
       break;
 
-    case 34:
-      w[ 8] = w[ 8] | 0x800000;
+    case 11:
+      dst0[2] = src_l0[2]       | src_r0[0] << 24;
+      dst0[3] = src_r0[0] >>  8 | src_r0[1] << 24;
+      dst1[0] = src_r0[1] >>  8 | src_r0[2] << 24;
+      dst1[1] = src_r0[2] >>  8 | src_r0[3] << 24;
+      dst1[2] = src_r0[3] >>  8;
       break;
 
-    case 35:
-      w[ 8] = w[ 8] | 0x80000000;
+    case 12:
+      dst0[3] = src_r0[0];
+      dst1[0] = src_r0[1];
+      dst1[1] = src_r0[2];
+      dst1[2] = src_r0[3];
       break;
 
-    case 36:
-      w[ 9] = 0x80;
+    case 13:
+      dst0[3] = src_l0[3]       | src_r0[0] <<  8;
+      dst1[0] = src_r0[0] >> 24 | src_r0[1] <<  8;
+      dst1[1] = src_r0[1] >> 24 | src_r0[2] <<  8;
+      dst1[2] = src_r0[2] >> 24 | src_r0[3] <<  8;
+      dst1[3] = src_r0[3] >> 24;
       break;
 
-    case 37:
-      w[ 9] = w[ 9] | 0x8000;
+    case 14:
+      dst0[3] = src_l0[3]       | src_r0[0] << 16;
+      dst1[0] = src_r0[0] >> 16 | src_r0[1] << 16;
+      dst1[1] = src_r0[1] >> 16 | src_r0[2] << 16;
+      dst1[2] = src_r0[2] >> 16 | src_r0[3] << 16;
+      dst1[3] = src_r0[3] >> 16;
       break;
 
-    case 38:
-      w[ 9] = w[ 9] | 0x800000;
+    case 15:
+      dst0[3] = src_l0[3]       | src_r0[0] << 24;
+      dst1[0] = src_r0[0] >>  8 | src_r0[1] << 24;
+      dst1[1] = src_r0[1] >>  8 | src_r0[2] << 24;
+      dst1[2] = src_r0[2] >>  8 | src_r0[3] << 24;
+      dst1[3] = src_r0[3] >>  8;
       break;
 
-    case 39:
-      w[ 9] = w[ 9] | 0x80000000;
+    case 16:
+      dst1[0] = src_r0[0];
+      dst1[1] = src_r0[1];
+      dst1[2] = src_r0[2];
+      dst1[3] = src_r0[3];
       break;
 
-    case 40:
-      w[10] = 0x80;
+    case 17:
+      dst1[0] = src_l1[0]       | src_r0[0] <<  8;
+      dst1[1] = src_r0[0] >> 24 | src_r0[1] <<  8;
+      dst1[2] = src_r0[1] >> 24 | src_r0[2] <<  8;
+      dst1[3] = src_r0[2] >> 24 | src_r0[3] <<  8;
       break;
 
-    case 41:
-      w[10] = w[10] | 0x8000;
+    case 18:
+      dst1[0] = src_l1[0]       | src_r0[0] << 16;
+      dst1[1] = src_r0[0] >> 16 | src_r0[1] << 16;
+      dst1[2] = src_r0[1] >> 16 | src_r0[2] << 16;
+      dst1[3] = src_r0[2] >> 16 | src_r0[3] << 16;
       break;
 
-    case 42:
-      w[10] = w[10] | 0x800000;
+    case 19:
+      dst1[0] = src_l1[0]       | src_r0[0] << 24;
+      dst1[1] = src_r0[0] >>  8 | src_r0[1] << 24;
+      dst1[2] = src_r0[1] >>  8 | src_r0[2] << 24;
+      dst1[3] = src_r0[2] >>  8 | src_r0[3] << 24;
       break;
 
-    case 43:
-      w[10] = w[10] | 0x80000000;
+    case 20:
+      dst1[1] = src_r0[0];
+      dst1[2] = src_r0[1];
+      dst1[3] = src_r0[2];
       break;
 
-    case 44:
-      w[11] = 0x80;
+    case 21:
+      dst1[1] = src_l1[1]       | src_r0[0] <<  8;
+      dst1[2] = src_r0[0] >> 24 | src_r0[1] <<  8;
+      dst1[3] = src_r0[1] >> 24 | src_r0[2] <<  8;
       break;
 
-    case 45:
-      w[11] = w[11] | 0x8000;
+    case 22:
+      dst1[1] = src_l1[1]       | src_r0[0] << 16;
+      dst1[2] = src_r0[0] >> 16 | src_r0[1] << 16;
+      dst1[3] = src_r0[1] >> 16 | src_r0[2] << 16;
       break;
 
-    case 46:
-      w[11] = w[11] | 0x800000;
+    case 23:
+      dst1[1] = src_l1[1]       | src_r0[0] << 24;
+      dst1[2] = src_r0[0] >>  8 | src_r0[1] << 24;
+      dst1[3] = src_r0[1] >>  8 | src_r0[2] << 24;
       break;
 
-    case 47:
-      w[11] = w[11] | 0x80000000;
+    case 24:
+      dst1[2] = src_r0[0];
+      dst1[3] = src_r0[1];
       break;
 
-    case 48:
-      w[12] = 0x80;
+    case 25:
+      dst1[2] = src_l1[2]       | src_r0[0] <<  8;
+      dst1[3] = src_r0[0] >> 24 | src_r0[1] <<  8;
       break;
 
-    case 49:
-      w[12] = w[12] | 0x8000;
+    case 26:
+      dst1[2] = src_l1[2]       | src_r0[0] << 16;
+      dst1[3] = src_r0[0] >> 16 | src_r0[1] << 16;
       break;
 
-    case 50:
-      w[12] = w[12] | 0x800000;
+    case 27:
+      dst1[2] = src_l1[2]       | src_r0[0] << 24;
+      dst1[3] = src_r0[0] >>  8 | src_r0[1] << 24;
       break;
 
-    case 51:
-      w[12] = w[12] | 0x80000000;
+    case 28:
+      dst1[3] = src_r0[0];
       break;
 
-    case 52:
-      w[13] = 0x80;
+    case 29:
+      dst1[3] = src_l1[3]       | src_r0[0] <<  8;
       break;
 
-    case 53:
-      w[13] = w[13] | 0x8000;
+    case 30:
+      dst1[3] = src_l1[3]       | src_r0[0] << 16;
       break;
 
-    case 54:
-      w[13] = w[13] | 0x800000;
+    case 31:
+      dst1[3] = src_l1[3]       | src_r0[0] << 24;
       break;
+  }
+}
 
-    case 55:
-      w[13] = w[13] | 0x80000000;
+// before: device_memcat12L
+static void memcat_c47_d3x4_sl3x4_sr1x4 (const u32 offset, u32 dst0[4], u32 dst1[4], u32 dst2[4], u32 src_l0[4], u32 src_l1[4], u32 src_l2[4], u32 src_r0[4])
+{
+  switch (offset)
+  {
+    case 1:
+      dst0[0] = src_l0[0]       | src_r0[0] <<  8;
+      dst0[1] = src_r0[0] >> 24 | src_r0[1] <<  8;
+      dst0[2] = src_r0[1] >> 24 | src_r0[2] <<  8;
+      dst0[3] = src_r0[2] >> 24 | src_r0[3] <<  8;
+      dst1[0] = src_r0[3] >> 24;
       break;
 
-    case 56:
-      w[14] = 0x80;
+    case 2:
+      dst0[0] = src_l0[0]       | src_r0[0] << 16;
+      dst0[1] = src_r0[0] >> 16 | src_r0[1] << 16;
+      dst0[2] = src_r0[1] >> 16 | src_r0[2] << 16;
+      dst0[3] = src_r0[2] >> 16 | src_r0[3] << 16;
+      dst1[0] = src_r0[3] >> 16;
       break;
 
-    case 57:
-      w[14] = w[14] | 0x8000;
+    case 3:
+      dst0[0] = src_l0[0]       | src_r0[0] << 24;
+      dst0[1] = src_r0[0] >>  8 | src_r0[1] << 24;
+      dst0[2] = src_r0[1] >>  8 | src_r0[2] << 24;
+      dst0[3] = src_r0[2] >>  8 | src_r0[3] << 24;
+      dst1[0] = src_r0[3] >>  8;
       break;
 
-    case 58:
-      w[14] = w[14] | 0x800000;
+    case 4:
+      dst0[1] = src_r0[0];
+      dst0[2] = src_r0[1];
+      dst0[3] = src_r0[2];
+      dst1[0] = src_r0[3];
       break;
 
-    case 59:
-      w[14] = w[14] | 0x80000000;
-      break;
-
-    case 60:
-      w[15] = 0x80;
-      break;
-
-    case 61:
-      w[15] = w[15] | 0x8000;
-      break;
-
-    case 62:
-      w[15] = w[15] | 0x800000;
-      break;
-
-    case 63:
-      w[15] = w[15] | 0x80000000;
-      break;
-  }
-}
-
-// before: append_0x80_8
-static void append_0x80_1x32 (u32 w[32], const u32 offset)
-{
-  switch (offset)
-  {
-    case 0:
-      w[ 0] = 0x80;
-      break;
-
-    case 1:
-      w[ 0] = w[ 0] | 0x8000;
-      break;
-
-    case 2:
-      w[ 0] = w[ 0] | 0x800000;
-      break;
-
-    case 3:
-      w[ 0] = w[ 0] | 0x80000000;
-      break;
-
-    case 4:
-      w[ 1] = 0x80;
-      break;
-
-    case 5:
-      w[ 1] = w[ 1] | 0x8000;
+    case 5:
+      dst0[1] = src_l0[1]       | src_r0[0] <<  8;
+      dst0[2] = src_r0[0] >> 24 | src_r0[1] <<  8;
+      dst0[3] = src_r0[1] >> 24 | src_r0[2] <<  8;
+      dst1[0] = src_r0[2] >> 24 | src_r0[3] <<  8;
+      dst1[1] = src_r0[3] >> 24;
       break;
 
     case 6:
-      w[ 1] = w[ 1] | 0x800000;
+      dst0[1] = src_l0[1]       | src_r0[0] << 16;
+      dst0[2] = src_r0[0] >> 16 | src_r0[1] << 16;
+      dst0[3] = src_r0[1] >> 16 | src_r0[2] << 16;
+      dst1[0] = src_r0[2] >> 16 | src_r0[3] << 16;
+      dst1[1] = src_r0[3] >> 16;
       break;
 
     case 7:
-      w[ 1] = w[ 1] | 0x80000000;
+      dst0[1] = src_l0[1]       | src_r0[0] << 24;
+      dst0[2] = src_r0[0] >>  8 | src_r0[1] << 24;
+      dst0[3] = src_r0[1] >>  8 | src_r0[2] << 24;
+      dst1[0] = src_r0[2] >>  8 | src_r0[3] << 24;
+      dst1[1] = src_r0[3] >>  8;
       break;
 
     case 8:
-      w[ 2] = 0x80;
+      dst0[2] = src_r0[0];
+      dst0[3] = src_r0[1];
+      dst1[0] = src_r0[2];
+      dst1[1] = src_r0[3];
       break;
 
     case 9:
-      w[ 2] = w[ 2] | 0x8000;
+      dst0[2] = src_l0[2]       | src_r0[0] <<  8;
+      dst0[3] = src_r0[0] >> 24 | src_r0[1] <<  8;
+      dst1[0] = src_r0[1] >> 24 | src_r0[2] <<  8;
+      dst1[1] = src_r0[2] >> 24 | src_r0[3] <<  8;
+      dst1[2] = src_r0[3] >> 24;
       break;
 
     case 10:
-      w[ 2] = w[ 2] | 0x800000;
+      dst0[2] = src_l0[2]       | src_r0[0] << 16;
+      dst0[3] = src_r0[0] >> 16 | src_r0[1] << 16;
+      dst1[0] = src_r0[1] >> 16 | src_r0[2] << 16;
+      dst1[1] = src_r0[2] >> 16 | src_r0[3] << 16;
+      dst1[2] = src_r0[3] >> 16;
       break;
 
     case 11:
-      w[ 2] = w[ 2] | 0x80000000;
+      dst0[2] = src_l0[2]       | src_r0[0] << 24;
+      dst0[3] = src_r0[0] >>  8 | src_r0[1] << 24;
+      dst1[0] = src_r0[1] >>  8 | src_r0[2] << 24;
+      dst1[1] = src_r0[2] >>  8 | src_r0[3] << 24;
+      dst1[2] = src_r0[3] >>  8;
       break;
 
     case 12:
-      w[ 3] = 0x80;
+      dst0[3] = src_r0[0];
+      dst1[0] = src_r0[1];
+      dst1[1] = src_r0[2];
+      dst1[2] = src_r0[3];
       break;
 
     case 13:
-      w[ 3] = w[ 3] | 0x8000;
+      dst0[3] = src_l0[3]       | src_r0[0] <<  8;
+      dst1[0] = src_r0[0] >> 24 | src_r0[1] <<  8;
+      dst1[1] = src_r0[1] >> 24 | src_r0[2] <<  8;
+      dst1[2] = src_r0[2] >> 24 | src_r0[3] <<  8;
+      dst1[3] = src_r0[3] >> 24;
       break;
 
     case 14:
-      w[ 3] = w[ 3] | 0x800000;
+      dst0[3] = src_l0[3]       | src_r0[0] << 16;
+      dst1[0] = src_r0[0] >> 16 | src_r0[1] << 16;
+      dst1[1] = src_r0[1] >> 16 | src_r0[2] << 16;
+      dst1[2] = src_r0[2] >> 16 | src_r0[3] << 16;
+      dst1[3] = src_r0[3] >> 16;
       break;
 
     case 15:
-      w[ 3] = w[ 3] | 0x80000000;
+      dst0[3] = src_l0[3]       | src_r0[0] << 24;
+      dst1[0] = src_r0[0] >>  8 | src_r0[1] << 24;
+      dst1[1] = src_r0[1] >>  8 | src_r0[2] << 24;
+      dst1[2] = src_r0[2] >>  8 | src_r0[3] << 24;
+      dst1[3] = src_r0[3] >>  8;
       break;
 
     case 16:
-      w[ 4] = 0x80;
+      dst1[0] = src_r0[0];
+      dst1[1] = src_r0[1];
+      dst1[2] = src_r0[2];
+      dst1[3] = src_r0[3];
       break;
 
     case 17:
-      w[ 4] = w[ 4] | 0x8000;
+      dst1[0] = src_l1[0]       | src_r0[0] <<  8;
+      dst1[1] = src_r0[0] >> 24 | src_r0[1] <<  8;
+      dst1[2] = src_r0[1] >> 24 | src_r0[2] <<  8;
+      dst1[3] = src_r0[2] >> 24 | src_r0[3] <<  8;
+      dst2[0] = src_r0[3] >> 24;
       break;
 
     case 18:
-      w[ 4] = w[ 4] | 0x800000;
+      dst1[0] = src_l1[0]       | src_r0[0] << 16;
+      dst1[1] = src_r0[0] >> 16 | src_r0[1] << 16;
+      dst1[2] = src_r0[1] >> 16 | src_r0[2] << 16;
+      dst1[3] = src_r0[2] >> 16 | src_r0[3] << 16;
+      dst2[0] = src_r0[3] >> 16;
       break;
 
     case 19:
-      w[ 4] = w[ 4] | 0x80000000;
+      dst1[0] = src_l1[0]       | src_r0[0] << 24;
+      dst1[1] = src_r0[0] >>  8 | src_r0[1] << 24;
+      dst1[2] = src_r0[1] >>  8 | src_r0[2] << 24;
+      dst1[3] = src_r0[2] >>  8 | src_r0[3] << 24;
+      dst2[0] = src_r0[3] >>  8;
       break;
 
     case 20:
-      w[ 5] = 0x80;
+      dst1[1] = src_r0[0];
+      dst1[2] = src_r0[1];
+      dst1[3] = src_r0[2];
+      dst2[0] = src_r0[3];
       break;
 
     case 21:
-      w[ 5] = w[ 5] | 0x8000;
+      dst1[1] = src_l1[1]       | src_r0[0] <<  8;
+      dst1[2] = src_r0[0] >> 24 | src_r0[1] <<  8;
+      dst1[3] = src_r0[1] >> 24 | src_r0[2] <<  8;
+      dst2[0] = src_r0[2] >> 24 | src_r0[3] <<  8;
+      dst2[1] = src_r0[3] >> 24;
       break;
 
     case 22:
-      w[ 5] = w[ 5] | 0x800000;
+      dst1[1] = src_l1[1]       | src_r0[0] << 16;
+      dst1[2] = src_r0[0] >> 16 | src_r0[1] << 16;
+      dst1[3] = src_r0[1] >> 16 | src_r0[2] << 16;
+      dst2[0] = src_r0[2] >> 16 | src_r0[3] << 16;
+      dst2[1] = src_r0[3] >> 16;
       break;
 
     case 23:
-      w[ 5] = w[ 5] | 0x80000000;
+      dst1[1] = src_l1[1]       | src_r0[0] << 24;
+      dst1[2] = src_r0[0] >>  8 | src_r0[1] << 24;
+      dst1[3] = src_r0[1] >>  8 | src_r0[2] << 24;
+      dst2[0] = src_r0[2] >>  8 | src_r0[3] << 24;
+      dst2[1] = src_r0[3] >>  8;
       break;
 
     case 24:
-      w[ 6] = 0x80;
+      dst1[2] = src_r0[0];
+      dst1[3] = src_r0[1];
+      dst2[0] = src_r0[2];
+      dst2[1] = src_r0[3];
       break;
 
     case 25:
-      w[ 6] = w[ 6] | 0x8000;
+      dst1[2] = src_l1[2]       | src_r0[0] <<  8;
+      dst1[3] = src_r0[0] >> 24 | src_r0[1] <<  8;
+      dst2[0] = src_r0[1] >> 24 | src_r0[2] <<  8;
+      dst2[1] = src_r0[2] >> 24 | src_r0[3] <<  8;
+      dst2[2] = src_r0[3] >> 24;
       break;
 
     case 26:
-      w[ 6] = w[ 6] | 0x800000;
+      dst1[2] = src_l1[2]       | src_r0[0] << 16;
+      dst1[3] = src_r0[0] >> 16 | src_r0[1] << 16;
+      dst2[0] = src_r0[1] >> 16 | src_r0[2] << 16;
+      dst2[1] = src_r0[2] >> 16 | src_r0[3] << 16;
+      dst2[2] = src_r0[3] >> 16;
       break;
 
     case 27:
-      w[ 6] = w[ 6] | 0x80000000;
+      dst1[2] = src_l1[2]       | src_r0[0] << 24;
+      dst1[3] = src_r0[0] >>  8 | src_r0[1] << 24;
+      dst2[0] = src_r0[1] >>  8 | src_r0[2] << 24;
+      dst2[1] = src_r0[2] >>  8 | src_r0[3] << 24;
+      dst2[2] = src_r0[3] >>  8;
       break;
 
     case 28:
-      w[ 7] = 0x80;
+      dst1[3] = src_r0[0];
+      dst2[0] = src_r0[1];
+      dst2[1] = src_r0[2];
+      dst2[2] = src_r0[3];
       break;
 
     case 29:
-      w[ 7] = w[ 7] | 0x8000;
+      dst1[3] = src_l1[3]       | src_r0[0] <<  8;
+      dst2[0] = src_r0[0] >> 24 | src_r0[1] <<  8;
+      dst2[1] = src_r0[1] >> 24 | src_r0[2] <<  8;
+      dst2[2] = src_r0[2] >> 24 | src_r0[3] <<  8;
+      dst2[3] = src_r0[3] >> 24;
       break;
 
     case 30:
-      w[ 7] = w[ 7] | 0x800000;
+      dst1[3] = src_l1[3]       | src_r0[0] << 16;
+      dst2[0] = src_r0[0] >> 16 | src_r0[1] << 16;
+      dst2[1] = src_r0[1] >> 16 | src_r0[2] << 16;
+      dst2[2] = src_r0[2] >> 16 | src_r0[3] << 16;
+      dst2[3] = src_r0[3] >> 16;
       break;
 
     case 31:
-      w[ 7] = w[ 7] | 0x80000000;
+      dst1[3] = src_l1[3]       | src_r0[0] << 24;
+      dst2[0] = src_r0[0] >>  8 | src_r0[1] << 24;
+      dst2[1] = src_r0[1] >>  8 | src_r0[2] << 24;
+      dst2[2] = src_r0[2] >>  8 | src_r0[3] << 24;
+      dst2[3] = src_r0[3] >>  8;
       break;
 
     case 32:
-      w[ 8] = 0x80;
+      dst2[0] = src_r0[0];
+      dst2[1] = src_r0[1];
+      dst2[2] = src_r0[2];
+      dst2[3] = src_r0[3];
       break;
 
     case 33:
-      w[ 8] = w[ 8] | 0x8000;
+      dst2[0] = src_l2[0]       | src_r0[0] <<  8;
+      dst2[1] = src_r0[0] >> 24 | src_r0[1] <<  8;
+      dst2[2] = src_r0[1] >> 24 | src_r0[2] <<  8;
+      dst2[3] = src_r0[2] >> 24 | src_r0[3] <<  8;
       break;
 
     case 34:
-      w[ 8] = w[ 8] | 0x800000;
+      dst2[0] = src_l2[0]       | src_r0[0] << 16;
+      dst2[1] = src_r0[0] >> 16 | src_r0[1] << 16;
+      dst2[2] = src_r0[1] >> 16 | src_r0[2] << 16;
+      dst2[3] = src_r0[2] >> 16 | src_r0[3] << 16;
       break;
 
     case 35:
-      w[ 8] = w[ 8] | 0x80000000;
+      dst2[0] = src_l2[0]       | src_r0[0] << 24;
+      dst2[1] = src_r0[0] >>  8 | src_r0[1] << 24;
+      dst2[2] = src_r0[1] >>  8 | src_r0[2] << 24;
+      dst2[3] = src_r0[2] >>  8 | src_r0[3] << 24;
       break;
 
     case 36:
-      w[ 9] = 0x80;
+      dst2[1] = src_r0[0];
+      dst2[2] = src_r0[1];
+      dst2[3] = src_r0[2];
       break;
 
     case 37:
-      w[ 9] = w[ 9] | 0x8000;
+      dst2[1] = src_l2[1]       | src_r0[0] <<  8;
+      dst2[2] = src_r0[0] >> 24 | src_r0[1] <<  8;
+      dst2[3] = src_r0[1] >> 24 | src_r0[2] <<  8;
       break;
 
     case 38:
-      w[ 9] = w[ 9] | 0x800000;
+      dst2[1] = src_l2[1]       | src_r0[0] << 16;
+      dst2[2] = src_r0[0] >> 16 | src_r0[1] << 16;
+      dst2[3] = src_r0[1] >> 16 | src_r0[2] << 16;
       break;
 
     case 39:
-      w[ 9] = w[ 9] | 0x80000000;
+      dst2[1] = src_l2[1]       | src_r0[0] << 24;
+      dst2[2] = src_r0[0] >>  8 | src_r0[1] << 24;
+      dst2[3] = src_r0[1] >>  8 | src_r0[2] << 24;
       break;
 
     case 40:
-      w[10] = 0x80;
+      dst2[2] = src_r0[0];
+      dst2[3] = src_r0[1];
       break;
 
     case 41:
-      w[10] = w[10] | 0x8000;
+      dst2[2] = src_l2[2]       | src_r0[0] <<  8;
+      dst2[3] = src_r0[0] >> 24 | src_r0[1] <<  8;
       break;
 
     case 42:
-      w[10] = w[10] | 0x800000;
+      dst2[2] = src_l2[2]       | src_r0[0] << 16;
+      dst2[3] = src_r0[0] >> 16 | src_r0[1] << 16;
       break;
 
     case 43:
-      w[10] = w[10] | 0x80000000;
+      dst2[2] = src_l2[2]       | src_r0[0] << 24;
+      dst2[3] = src_r0[0] >>  8 | src_r0[1] << 24;
       break;
 
     case 44:
-      w[11] = 0x80;
+      dst2[3] = src_r0[0];
       break;
 
     case 45:
-      w[11] = w[11] | 0x8000;
+      dst2[3] = src_l2[3]       | src_r0[0] <<  8;
       break;
 
     case 46:
-      w[11] = w[11] | 0x800000;
+      dst2[3] = src_l2[3]       | src_r0[0] << 16;
       break;
 
     case 47:
-      w[11] = w[11] | 0x80000000;
+      dst2[3] = src_l2[3]       | src_r0[0] << 24;
       break;
+  }
+}
 
-    case 48:
-      w[12] = 0x80;
-      break;
+// before: device_memcat12L
+static void memcat_c47_d3x4_sl3x4_sr2x4 (const u32 offset, u32 dst0[4], u32 dst1[4], u32 dst2[4], u32 src_l0[4], u32 src_l1[4], u32 src_l2[4], u32 src_r0[4], u32 src_r1[4])
+{
+  switch (offset)
+  {
+    case 0:
+      dst0[0] = src_r0[0];
+      dst0[1] = src_r0[1];
+      dst0[2] = src_r0[2];
+      dst0[3] = src_r0[3];
+      dst1[0] = src_r1[0];
+      dst1[1] = src_r1[1];
+      dst1[2] = src_r1[2];
+      dst1[3] = src_r1[3];
+      break;
 
-    case 49:
-      w[12] = w[12] | 0x8000;
+    case 1:
+      dst0[0] = src_l0[0]       | src_r0[0] <<  8;
+      dst0[1] = src_r0[0] >> 24 | src_r0[1] <<  8;
+      dst0[2] = src_r0[1] >> 24 | src_r0[2] <<  8;
+      dst0[3] = src_r0[2] >> 24 | src_r0[3] <<  8;
+      dst1[0] = src_r0[3] >> 24 | src_r1[0] <<  8;
+      dst1[1] = src_r1[0] >> 24 | src_r1[1] <<  8;
+      dst1[2] = src_r1[1] >> 24 | src_r1[2] <<  8;
+      dst1[3] = src_r1[2] >> 24 | src_r1[3] <<  8;
+      dst2[0] = src_r1[3] >> 24;
       break;
 
-    case 50:
-      w[12] = w[12] | 0x800000;
+    case 2:
+      dst0[0] = src_l0[0]       | src_r0[0] << 16;
+      dst0[1] = src_r0[0] >> 16 | src_r0[1] << 16;
+      dst0[2] = src_r0[1] >> 16 | src_r0[2] << 16;
+      dst0[3] = src_r0[2] >> 16 | src_r0[3] << 16;
+      dst1[0] = src_r0[3] >> 16 | src_r1[0] << 16;
+      dst1[1] = src_r1[0] >> 16 | src_r1[1] << 16;
+      dst1[2] = src_r1[1] >> 16 | src_r1[2] << 16;
+      dst1[3] = src_r1[2] >> 16 | src_r1[3] << 16;
+      dst2[0] = src_r1[3] >> 16;
       break;
 
-    case 51:
-      w[12] = w[12] | 0x80000000;
+    case 3:
+      dst0[0] = src_l0[0]       | src_r0[0] << 24;
+      dst0[1] = src_r0[0] >>  8 | src_r0[1] << 24;
+      dst0[2] = src_r0[1] >>  8 | src_r0[2] << 24;
+      dst0[3] = src_r0[2] >>  8 | src_r0[3] << 24;
+      dst1[0] = src_r0[3] >>  8 | src_r1[0] << 24;
+      dst1[1] = src_r1[0] >>  8 | src_r1[1] << 24;
+      dst1[2] = src_r1[1] >>  8 | src_r1[2] << 24;
+      dst1[3] = src_r1[2] >>  8 | src_r1[3] << 24;
+      dst2[0] = src_r1[3] >>  8;
       break;
 
-    case 52:
-      w[13] = 0x80;
+    case 4:
+      dst0[1] = src_r0[0];
+      dst0[2] = src_r0[1];
+      dst0[3] = src_r0[2];
+      dst1[0] = src_r0[3];
+      dst1[1] = src_r1[0];
+      dst1[2] = src_r1[1];
+      dst1[3] = src_r1[2];
+      dst2[0] = src_r1[3];
       break;
 
-    case 53:
-      w[13] = w[13] | 0x8000;
+    case 5:
+      dst0[1] = src_l0[1]       | src_r0[0] <<  8;
+      dst0[2] = src_r0[0] >> 24 | src_r0[1] <<  8;
+      dst0[3] = src_r0[1] >> 24 | src_r0[2] <<  8;
+      dst1[0] = src_r0[2] >> 24 | src_r0[3] <<  8;
+      dst1[1] = src_r0[3] >> 24 | src_r1[0] <<  8;
+      dst1[2] = src_r1[0] >> 24 | src_r1[1] <<  8;
+      dst1[3] = src_r1[1] >> 24 | src_r1[2] <<  8;
+      dst2[0] = src_r1[2] >> 24 | src_r1[3] <<  8;
+      dst2[1] = src_r1[3] >> 24;
       break;
 
-    case 54:
-      w[13] = w[13] | 0x800000;
+    case 6:
+      dst0[1] = src_l0[1]       | src_r0[0] << 16;
+      dst0[2] = src_r0[0] >> 16 | src_r0[1] << 16;
+      dst0[3] = src_r0[1] >> 16 | src_r0[2] << 16;
+      dst1[0] = src_r0[2] >> 16 | src_r0[3] << 16;
+      dst1[1] = src_r0[3] >> 16 | src_r1[0] << 16;
+      dst1[2] = src_r1[0] >> 16 | src_r1[1] << 16;
+      dst1[3] = src_r1[1] >> 16 | src_r1[2] << 16;
+      dst2[0] = src_r1[2] >> 16 | src_r1[3] << 16;
+      dst2[1] = src_r1[3] >> 16;
       break;
 
-    case 55:
-      w[13] = w[13] | 0x80000000;
+    case 7:
+      dst0[1] = src_l0[1]       | src_r0[0] << 24;
+      dst0[2] = src_r0[0] >>  8 | src_r0[1] << 24;
+      dst0[3] = src_r0[1] >>  8 | src_r0[2] << 24;
+      dst1[0] = src_r0[2] >>  8 | src_r0[3] << 24;
+      dst1[1] = src_r0[3] >>  8 | src_r1[0] << 24;
+      dst1[2] = src_r1[0] >>  8 | src_r1[1] << 24;
+      dst1[3] = src_r1[1] >>  8 | src_r1[2] << 24;
+      dst2[0] = src_r1[2] >>  8 | src_r1[3] << 24;
+      dst2[1] = src_r1[3] >>  8;
       break;
 
-    case 56:
-      w[14] = 0x80;
+    case 8:
+      dst0[2] = src_r0[0];
+      dst0[3] = src_r0[1];
+      dst1[0] = src_r0[2];
+      dst1[1] = src_r0[3];
+      dst1[2] = src_r1[0];
+      dst1[3] = src_r1[1];
+      dst2[0] = src_r1[2];
+      dst2[1] = src_r1[3];
       break;
 
-    case 57:
-      w[14] = w[14] | 0x8000;
+    case 9:
+      dst0[2] = src_l0[2]       | src_r0[0] <<  8;
+      dst0[3] = src_r0[0] >> 24 | src_r0[1] <<  8;
+      dst1[0] = src_r0[1] >> 24 | src_r0[2] <<  8;
+      dst1[1] = src_r0[2] >> 24 | src_r0[3] <<  8;
+      dst1[2] = src_r0[3] >> 24 | src_r1[0] <<  8;
+      dst1[3] = src_r1[0] >> 24 | src_r1[1] <<  8;
+      dst2[0] = src_r1[1] >> 24 | src_r1[2] <<  8;
+      dst2[1] = src_r1[2] >> 24 | src_r1[3] <<  8;
+      dst2[2] = src_r1[3] >> 24;
       break;
 
-    case 58:
-      w[14] = w[14] | 0x800000;
+    case 10:
+      dst0[2] = src_l0[2]       | src_r0[0] << 16;
+      dst0[3] = src_r0[0] >> 16 | src_r0[1] << 16;
+      dst1[0] = src_r0[1] >> 16 | src_r0[2] << 16;
+      dst1[1] = src_r0[2] >> 16 | src_r0[3] << 16;
+      dst1[2] = src_r0[3] >> 16 | src_r1[0] << 16;
+      dst1[3] = src_r1[0] >> 16 | src_r1[1] << 16;
+      dst2[0] = src_r1[1] >> 16 | src_r1[2] << 16;
+      dst2[1] = src_r1[2] >> 16 | src_r1[3] << 16;
+      dst2[2] = src_r1[3] >> 16;
       break;
 
-    case 59:
-      w[14] = w[14] | 0x80000000;
+    case 11:
+      dst0[2] = src_l0[2]       | src_r0[0] << 24;
+      dst0[3] = src_r0[0] >>  8 | src_r0[1] << 24;
+      dst1[0] = src_r0[1] >>  8 | src_r0[2] << 24;
+      dst1[1] = src_r0[2] >>  8 | src_r0[3] << 24;
+      dst1[2] = src_r0[3] >>  8 | src_r1[0] << 24;
+      dst1[3] = src_r1[0] >>  8 | src_r1[1] << 24;
+      dst2[0] = src_r1[1] >>  8 | src_r1[2] << 24;
+      dst2[1] = src_r1[2] >>  8 | src_r1[3] << 24;
+      dst2[2] = src_r1[3] >>  8;
       break;
 
-    case 60:
-      w[15] = 0x80;
+    case 12:
+      dst0[3] = src_r0[0];
+      dst1[0] = src_r0[1];
+      dst1[1] = src_r0[2];
+      dst1[2] = src_r0[3];
+      dst1[3] = src_r1[0];
+      dst2[0] = src_r1[1];
+      dst2[1] = src_r1[2];
+      dst2[2] = src_r1[3];
       break;
 
-    case 61:
-      w[15] = w[15] | 0x8000;
+    case 13:
+      dst0[3] = src_l0[3]       | src_r0[0] <<  8;
+      dst1[0] = src_r0[0] >> 24 | src_r0[1] <<  8;
+      dst1[1] = src_r0[1] >> 24 | src_r0[2] <<  8;
+      dst1[2] = src_r0[2] >> 24 | src_r0[3] <<  8;
+      dst1[3] = src_r0[3] >> 24 | src_r1[0] <<  8;
+      dst2[0] = src_r1[0] >> 24 | src_r1[1] <<  8;
+      dst2[1] = src_r1[1] >> 24 | src_r1[2] <<  8;
+      dst2[2] = src_r1[2] >> 24 | src_r1[3] <<  8;
+      dst2[3] = src_r1[3] >> 24;
       break;
 
-    case 62:
-      w[15] = w[15] | 0x800000;
+    case 14:
+      dst0[3] = src_l0[3]       | src_r0[0] << 16;
+      dst1[0] = src_r0[0] >> 16 | src_r0[1] << 16;
+      dst1[1] = src_r0[1] >> 16 | src_r0[2] << 16;
+      dst1[2] = src_r0[2] >> 16 | src_r0[3] << 16;
+      dst1[3] = src_r0[3] >> 16 | src_r1[0] << 16;
+      dst2[0] = src_r1[0] >> 16 | src_r1[1] << 16;
+      dst2[1] = src_r1[1] >> 16 | src_r1[2] << 16;
+      dst2[2] = src_r1[2] >> 16 | src_r1[3] << 16;
+      dst2[3] = src_r1[3] >> 16;
       break;
 
-    case 63:
-      w[15] = w[15] | 0x80000000;
+    case 15:
+      dst0[3] = src_l0[3]       | src_r0[0] << 24;
+      dst1[0] = src_r0[0] >>  8 | src_r0[1] << 24;
+      dst1[1] = src_r0[1] >>  8 | src_r0[2] << 24;
+      dst1[2] = src_r0[2] >>  8 | src_r0[3] << 24;
+      dst1[3] = src_r0[3] >>  8 | src_r1[0] << 24;
+      dst2[0] = src_r1[0] >>  8 | src_r1[1] << 24;
+      dst2[1] = src_r1[1] >>  8 | src_r1[2] << 24;
+      dst2[2] = src_r1[2] >>  8 | src_r1[3] << 24;
+      dst2[3] = src_r1[3] >>  8;
       break;
 
-    case 64:
-      w[16] = 0x80;
+    case 16:
+      dst1[0] = src_r0[0];
+      dst1[1] = src_r0[1];
+      dst1[2] = src_r0[2];
+      dst1[3] = src_r0[3];
+      dst2[0] = src_r1[0];
+      dst2[1] = src_r1[1];
+      dst2[2] = src_r1[2];
+      dst2[3] = src_r1[3];
       break;
 
-    case 65:
-      w[16] = w[16] | 0x8000;
+    case 17:
+      dst1[0] = src_l1[0]       | src_r0[0] <<  8;
+      dst1[1] = src_r0[0] >> 24 | src_r0[1] <<  8;
+      dst1[2] = src_r0[1] >> 24 | src_r0[2] <<  8;
+      dst1[3] = src_r0[2] >> 24 | src_r0[3] <<  8;
+      dst2[0] = src_r0[3] >> 24 | src_r1[0] <<  8;
+      dst2[1] = src_r1[0] >> 24 | src_r1[1] <<  8;
+      dst2[2] = src_r1[1] >> 24 | src_r1[2] <<  8;
+      dst2[3] = src_r1[2] >> 24 | src_r1[3] <<  8;
       break;
 
-    case 66:
-      w[16] = w[16] | 0x800000;
+    case 18:
+      dst1[0] = src_l1[0]       | src_r0[0] << 16;
+      dst1[1] = src_r0[0] >> 16 | src_r0[1] << 16;
+      dst1[2] = src_r0[1] >> 16 | src_r0[2] << 16;
+      dst1[3] = src_r0[2] >> 16 | src_r0[3] << 16;
+      dst2[0] = src_r0[3] >> 16 | src_r1[0] << 16;
+      dst2[1] = src_r1[0] >> 16 | src_r1[1] << 16;
+      dst2[2] = src_r1[1] >> 16 | src_r1[2] << 16;
+      dst2[3] = src_r1[2] >> 16 | src_r1[3] << 16;
       break;
 
-    case 67:
-      w[16] = w[16] | 0x80000000;
+    case 19:
+      dst1[0] = src_l1[0]       | src_r0[0] << 24;
+      dst1[1] = src_r0[0] >>  8 | src_r0[1] << 24;
+      dst1[2] = src_r0[1] >>  8 | src_r0[2] << 24;
+      dst1[3] = src_r0[2] >>  8 | src_r0[3] << 24;
+      dst2[0] = src_r0[3] >>  8 | src_r1[0] << 24;
+      dst2[1] = src_r1[0] >>  8 | src_r1[1] << 24;
+      dst2[2] = src_r1[1] >>  8 | src_r1[2] << 24;
+      dst2[3] = src_r1[2] >>  8 | src_r1[3] << 24;
       break;
 
-    case 68:
-      w[17] = 0x80;
+    case 20:
+      dst1[1] = src_r1[0];
+      dst1[2] = src_r0[1];
+      dst1[3] = src_r0[2];
+      dst2[0] = src_r0[3];
+      dst2[1] = src_r1[0];
+      dst2[2] = src_r1[1];
+      dst2[3] = src_r1[2];
       break;
 
-    case 69:
-      w[17] = w[17] | 0x8000;
+    case 21:
+      dst1[1] = src_l1[1]       | src_r0[0] <<  8;
+      dst1[2] = src_r0[0] >> 24 | src_r0[1] <<  8;
+      dst1[3] = src_r0[1] >> 24 | src_r0[2] <<  8;
+      dst2[0] = src_r0[2] >> 24 | src_r0[3] <<  8;
+      dst2[1] = src_r0[3] >> 24 | src_r1[0] <<  8;
+      dst2[2] = src_r1[0] >> 24 | src_r1[1] <<  8;
+      dst2[3] = src_r1[1] >> 24 | src_r1[2] <<  8;
       break;
 
-    case 70:
-      w[17] = w[17] | 0x800000;
-      break;
-
-    case 71:
-      w[17] = w[17] | 0x80000000;
-      break;
-
-    case 72:
-      w[18] = 0x80;
+    case 22:
+      dst1[1] = src_l1[1]       | src_r0[0] << 16;
+      dst1[2] = src_r0[0] >> 16 | src_r0[1] << 16;
+      dst1[3] = src_r0[1] >> 16 | src_r0[2] << 16;
+      dst2[0] = src_r0[2] >> 16 | src_r0[3] << 16;
+      dst2[1] = src_r0[3] >> 16 | src_r1[0] << 16;
+      dst2[2] = src_r1[0] >> 16 | src_r1[1] << 16;
+      dst2[3] = src_r1[1] >> 16 | src_r1[2] << 16;
       break;
 
-    case 73:
-      w[18] = w[18] | 0x8000;
+    case 23:
+      dst1[1] = src_l1[1]       | src_r0[0] << 24;
+      dst1[2] = src_r0[0] >>  8 | src_r0[1] << 24;
+      dst1[3] = src_r0[1] >>  8 | src_r0[2] << 24;
+      dst2[0] = src_r0[2] >>  8 | src_r0[3] << 24;
+      dst2[1] = src_r0[3] >>  8 | src_r1[0] << 24;
+      dst2[2] = src_r1[0] >>  8 | src_r1[1] << 24;
+      dst2[3] = src_r1[1] >>  8 | src_r1[2] << 24;
       break;
 
-    case 74:
-      w[18] = w[18] | 0x800000;
+    case 24:
+      dst1[2] = src_r1[0];
+      dst1[3] = src_r0[1];
+      dst2[0] = src_r0[2];
+      dst2[1] = src_r0[3];
+      dst2[2] = src_r1[0];
+      dst2[3] = src_r1[1];
       break;
 
-    case 75:
-      w[18] = w[18] | 0x80000000;
+    case 25:
+      dst1[2] = src_l1[2]       | src_r0[0] <<  8;
+      dst1[3] = src_r0[0] >> 24 | src_r0[1] <<  8;
+      dst2[0] = src_r0[1] >> 24 | src_r0[2] <<  8;
+      dst2[1] = src_r0[2] >> 24 | src_r0[3] <<  8;
+      dst2[2] = src_r0[3] >> 24 | src_r1[0] <<  8;
+      dst2[3] = src_r1[0] >> 24 | src_r1[1] <<  8;
       break;
 
-    case 76:
-      w[19] = 0x80;
+    case 26:
+      dst1[2] = src_l1[2]       | src_r0[0] << 16;
+      dst1[3] = src_r0[0] >> 16 | src_r0[1] << 16;
+      dst2[0] = src_r0[1] >> 16 | src_r0[2] << 16;
+      dst2[1] = src_r0[2] >> 16 | src_r0[3] << 16;
+      dst2[2] = src_r0[3] >> 16 | src_r1[0] << 16;
+      dst2[3] = src_r1[0] >> 16 | src_r1[1] << 16;
       break;
 
-    case 77:
-      w[19] = w[19] | 0x8000;
+    case 27:
+      dst1[2] = src_l1[2]       | src_r0[0] << 24;
+      dst1[3] = src_r0[0] >>  8 | src_r0[1] << 24;
+      dst2[0] = src_r0[1] >>  8 | src_r0[2] << 24;
+      dst2[1] = src_r0[2] >>  8 | src_r0[3] << 24;
+      dst2[2] = src_r0[3] >>  8 | src_r1[0] << 24;
+      dst2[3] = src_r1[0] >>  8 | src_r1[1] << 24;
       break;
 
-    case 78:
-      w[19] = w[19] | 0x800000;
+    case 28:
+      dst1[3] = src_r1[0];
+      dst2[0] = src_r0[1];
+      dst2[1] = src_r0[2];
+      dst2[2] = src_r0[3];
+      dst2[3] = src_r1[0];
       break;
 
-    case 79:
-      w[19] = w[19] | 0x80000000;
+    case 29:
+      dst1[3] = src_l1[3]       | src_r0[0] <<  8;
+      dst2[0] = src_r0[0] >> 24 | src_r0[1] <<  8;
+      dst2[1] = src_r0[1] >> 24 | src_r0[2] <<  8;
+      dst2[2] = src_r0[2] >> 24 | src_r0[3] <<  8;
+      dst2[3] = src_r0[3] >> 24 | src_r1[0] <<  8;
       break;
 
-    case 80:
-      w[20] = 0x80;
+    case 30:
+      dst1[3] = src_l1[3]       | src_r0[0] << 16;
+      dst2[0] = src_r0[0] >> 16 | src_r0[1] << 16;
+      dst2[1] = src_r0[1] >> 16 | src_r0[2] << 16;
+      dst2[2] = src_r0[2] >> 16 | src_r0[3] << 16;
+      dst2[3] = src_r0[3] >> 16 | src_r1[0] << 16;
       break;
 
-    case 81:
-      w[20] = w[20] | 0x8000;
+    case 31:
+      dst1[3] = src_l1[3]       | src_r0[0] << 24;
+      dst2[0] = src_r0[0] >>  8 | src_r0[1] << 24;
+      dst2[1] = src_r0[1] >>  8 | src_r0[2] << 24;
+      dst2[2] = src_r0[2] >>  8 | src_r0[3] << 24;
+      dst2[3] = src_r0[3] >>  8 | src_r1[0] << 24;
       break;
 
-    case 82:
-      w[20] = w[20] | 0x800000;
+    case 32:
+      dst2[0] = src_r0[0];
+      dst2[1] = src_r0[1];
+      dst2[2] = src_r0[2];
+      dst2[3] = src_r0[3];
       break;
 
-    case 83:
-      w[20] = w[20] | 0x80000000;
+    case 33:
+      dst2[0] = src_l2[0]       | src_r0[0] <<  8;
+      dst2[1] = src_r0[0] >> 24 | src_r0[1] <<  8;
+      dst2[2] = src_r0[1] >> 24 | src_r0[2] <<  8;
+      dst2[3] = src_r0[2] >> 24 | src_r0[3] <<  8;
       break;
 
-    case 84:
-      w[21] = 0x80;
+    case 34:
+      dst2[0] = src_l2[0]       | src_r0[0] << 16;
+      dst2[1] = src_r0[0] >> 16 | src_r0[1] << 16;
+      dst2[2] = src_r0[1] >> 16 | src_r0[2] << 16;
+      dst2[3] = src_r0[2] >> 16 | src_r0[3] << 16;
       break;
 
-    case 85:
-      w[21] = w[21] | 0x8000;
+    case 35:
+      dst2[0] = src_l2[0]       | src_r0[0] << 24;
+      dst2[1] = src_r0[0] >>  8 | src_r0[1] << 24;
+      dst2[2] = src_r0[1] >>  8 | src_r0[2] << 24;
+      dst2[3] = src_r0[2] >>  8 | src_r0[3] << 24;
       break;
 
-    case 86:
-      w[21] = w[21] | 0x800000;
+    case 36:
+      dst2[1] = src_r0[0];
+      dst2[2] = src_r0[1];
+      dst2[3] = src_r0[2];
       break;
 
-    case 87:
-      w[21] = w[21] | 0x80000000;
+    case 37:
+      dst2[1] = src_l2[1]       | src_r0[0] <<  8;
+      dst2[2] = src_r0[0] >> 24 | src_r0[1] <<  8;
+      dst2[3] = src_r0[1] >> 24 | src_r0[2] <<  8;
       break;
 
-    case 88:
-      w[22] = 0x80;
+    case 38:
+      dst2[1] = src_l2[1]       | src_r0[0] << 16;
+      dst2[2] = src_r0[0] >> 16 | src_r0[1] << 16;
+      dst2[3] = src_r0[1] >> 16 | src_r0[2] << 16;
       break;
 
-    case 89:
-      w[22] = w[22] | 0x8000;
+    case 39:
+      dst2[1] = src_l2[1]       | src_r0[0] << 24;
+      dst2[2] = src_r0[0] >>  8 | src_r0[1] << 24;
+      dst2[3] = src_r0[1] >>  8 | src_r0[2] << 24;
       break;
 
-    case 90:
-      w[22] = w[22] | 0x800000;
+    case 40:
+      dst2[2] = src_r0[0];
+      dst2[3] = src_r0[1];
       break;
 
-    case 91:
-      w[22] = w[22] | 0x80000000;
+    case 41:
+      dst2[2] = src_l2[2]       | src_r0[0] <<  8;
+      dst2[3] = src_r0[0] >> 24 | src_r0[1] <<  8;
       break;
 
-    case 92:
-      w[23] = 0x80;
+    case 42:
+      dst2[2] = src_l2[2]       | src_r0[0] << 16;
+      dst2[3] = src_r0[0] >> 16 | src_r0[1] << 16;
       break;
 
-    case 93:
-      w[23] = w[23] | 0x8000;
+    case 43:
+      dst2[2] = src_l2[2]       | src_r0[0] << 24;
+      dst2[3] = src_r0[0] >>  8 | src_r0[1] << 24;
       break;
 
-    case 94:
-      w[23] = w[23] | 0x800000;
+    case 44:
+      dst2[3] = src_r0[0];
       break;
 
-    case 95:
-      w[23] = w[23] | 0x80000000;
+    case 45:
+      dst2[3] = src_l2[3]       | src_r0[0] <<  8;
       break;
 
-    case 96:
-      w[24] = 0x80;
+    case 46:
+      dst2[3] = src_l2[3]       | src_r0[0] << 16;
       break;
 
-    case 97:
-      w[24] = w[24] | 0x8000;
+    case 47:
+      dst2[3] = src_l2[3]       | src_r0[0] << 24;
       break;
+  }
+}
 
-    case 98:
-      w[24] = w[24] | 0x800000;
+// before: memcat16_9
+static void memcat_c15_w4x4_a3x4 (u32 w0[4], u32 w1[4], u32 w2[4], u32 w3[4], const u32 append0[4], const u32 append1[4], const u32 append2[4], const u32 offset)
+{
+  switch (offset)
+  {
+    case 0:
+      w0[0] = append0[0];
+      w0[1] = append0[1];
+      w0[2] = append0[2];
+      w0[3] = append0[3];
+      w1[0] = append1[0];
+      w1[1] = append1[1];
+      w1[2] = append1[2];
+      w1[3] = append1[3];
+      w2[0] = append2[0];
       break;
 
-    case 99:
-      w[24] = w[24] | 0x80000000;
+    case 1:
+      w0[0] = w0[0]            | append0[0] <<  8;
+      w0[1] = append0[0] >> 24 | append0[1] <<  8;
+      w0[2] = append0[1] >> 24 | append0[2] <<  8;
+      w0[3] = append0[2] >> 24 | append0[3] <<  8;
+      w1[0] = append0[3] >> 24 | append1[0] <<  8;
+      w1[1] = append1[0] >> 24 | append1[1] <<  8;
+      w1[2] = append1[1] >> 24 | append1[2] <<  8;
+      w1[3] = append1[2] >> 24 | append1[3] <<  8;
+      w2[0] = append1[3] >> 24 | append2[0] <<  8;
+      w2[1] = append2[0] >> 24;
       break;
 
-    case 100:
-      w[25] = 0x80;
+    case 2:
+      w0[0] = w0[0]            | append0[0] << 16;
+      w0[1] = append0[0] >> 16 | append0[1] << 16;
+      w0[2] = append0[1] >> 16 | append0[2] << 16;
+      w0[3] = append0[2] >> 16 | append0[3] << 16;
+      w1[0] = append0[3] >> 16 | append1[0] << 16;
+      w1[1] = append1[0] >> 16 | append1[1] << 16;
+      w1[2] = append1[1] >> 16 | append1[2] << 16;
+      w1[3] = append1[2] >> 16 | append1[3] << 16;
+      w2[0] = append1[3] >> 16 | append2[0] << 16;
+      w2[1] = append2[0] >> 16;
       break;
 
-    case 101:
-      w[25] = w[25] | 0x8000;
+    case 3:
+      w0[0] = w0[0]            | append0[0] << 24;
+      w0[1] = append0[0] >>  8 | append0[1] << 24;
+      w0[2] = append0[1] >>  8 | append0[2] << 24;
+      w0[3] = append0[2] >>  8 | append0[3] << 24;
+      w1[0] = append0[3] >>  8 | append1[0] << 24;
+      w1[1] = append1[0] >>  8 | append1[1] << 24;
+      w1[2] = append1[1] >>  8 | append1[2] << 24;
+      w1[3] = append1[2] >>  8 | append1[3] << 24;
+      w2[0] = append1[3] >>  8 | append2[0] << 24;
+      w2[1] = append2[0] >>  8;
       break;
 
-    case 102:
-      w[25] = w[25] | 0x800000;
+    case 4:
+      w0[1] = append0[0];
+      w0[2] = append0[1];
+      w0[3] = append0[2];
+      w1[0] = append0[3];
+      w1[1] = append1[0];
+      w1[2] = append1[1];
+      w1[3] = append1[2];
+      w2[0] = append1[3];
+      w2[1] = append2[0];
       break;
 
-    case 103:
-      w[25] = w[25] | 0x80000000;
-      break;
-
-    case 104:
-      w[26] = 0x80;
-      break;
-
-    case 105:
-      w[26] = w[26] | 0x8000;
-      break;
-
-    case 106:
-      w[26] = w[26] | 0x800000;
-      break;
-
-    case 107:
-      w[26] = w[26] | 0x80000000;
-      break;
-
-    case 108:
-      w[27] = 0x80;
-      break;
-
-    case 109:
-      w[27] = w[27] | 0x8000;
-      break;
-
-    case 110:
-      w[27] = w[27] | 0x800000;
-      break;
-
-    case 111:
-      w[27] = w[27] | 0x80000000;
-      break;
-
-    case 112:
-      w[28] = 0x80;
-      break;
-
-    case 113:
-      w[28] = w[28] | 0x8000;
-      break;
-
-    case 114:
-      w[28] = w[28] | 0x800000;
-      break;
-
-    case 115:
-      w[28] = w[28] | 0x80000000;
-      break;
-
-    case 116:
-      w[29] = 0x80;
-      break;
-
-    case 117:
-      w[29] = w[29] | 0x8000;
+    case 5:
+      w0[1] = w0[1]            | append0[0] <<  8;
+      w0[2] = append0[0] >> 24 | append0[1] <<  8;
+      w0[3] = append0[1] >> 24 | append0[2] <<  8;
+      w1[0] = append0[2] >> 24 | append0[3] <<  8;
+      w1[1] = append0[3] >> 24 | append1[0] <<  8;
+      w1[2] = append1[0] >> 24 | append1[1] <<  8;
+      w1[3] = append1[1] >> 24 | append1[2] <<  8;
+      w2[0] = append1[2] >> 24 | append1[3] <<  8;
+      w2[1] = append1[3] >> 24 | append2[0] <<  8;
+      w2[2] = append2[0] >> 24;
       break;
 
-    case 118:
-      w[29] = w[29] | 0x800000;
+    case 6:
+      w0[1] = w0[1]            | append0[0] << 16;
+      w0[2] = append0[0] >> 16 | append0[1] << 16;
+      w0[3] = append0[1] >> 16 | append0[2] << 16;
+      w1[0] = append0[2] >> 16 | append0[3] << 16;
+      w1[1] = append0[3] >> 16 | append1[0] << 16;
+      w1[2] = append1[0] >> 16 | append1[1] << 16;
+      w1[3] = append1[1] >> 16 | append1[2] << 16;
+      w2[0] = append1[2] >> 16 | append1[3] << 16;
+      w2[1] = append1[3] >> 16 | append2[0] << 16;
+      w2[2] = append2[0] >> 16;
       break;
 
-    case 119:
-      w[29] = w[29] | 0x80000000;
+    case 7:
+      w0[1] = w0[1]            | append0[0] << 24;
+      w0[2] = append0[0] >>  8 | append0[1] << 24;
+      w0[3] = append0[1] >>  8 | append0[2] << 24;
+      w1[0] = append0[2] >>  8 | append0[3] << 24;
+      w1[1] = append0[3] >>  8 | append1[0] << 24;
+      w1[2] = append1[0] >>  8 | append1[1] << 24;
+      w1[3] = append1[1] >>  8 | append1[2] << 24;
+      w2[0] = append1[2] >>  8 | append1[3] << 24;
+      w2[1] = append1[3] >>  8 | append2[0] << 24;
+      w2[2] = append2[0] >>  8;
       break;
 
-    case 120:
-      w[30] = 0x80;
+    case 8:
+      w0[2] = append0[0];
+      w0[3] = append0[1];
+      w1[0] = append0[2];
+      w1[1] = append0[3];
+      w1[2] = append1[0];
+      w1[3] = append1[1];
+      w2[0] = append1[2];
+      w2[1] = append1[3];
+      w2[2] = append2[0];
       break;
 
-    case 121:
-      w[30] = w[30] | 0x8000;
+    case 9:
+      w0[2] = w0[2]            | append0[0] <<  8;
+      w0[3] = append0[0] >> 24 | append0[1] <<  8;
+      w1[0] = append0[1] >> 24 | append0[2] <<  8;
+      w1[1] = append0[2] >> 24 | append0[3] <<  8;
+      w1[2] = append0[3] >> 24 | append1[0] <<  8;
+      w1[3] = append1[0] >> 24 | append1[1] <<  8;
+      w2[0] = append1[1] >> 24 | append1[2] <<  8;
+      w2[1] = append1[2] >> 24 | append1[3] <<  8;
+      w2[2] = append1[3] >> 24 | append2[0] <<  8;
+      w2[3] = append2[0] >> 24;
       break;
 
-    case 122:
-      w[30] = w[30] | 0x800000;
+    case 10:
+      w0[2] = w0[2]            | append0[0] << 16;
+      w0[3] = append0[0] >> 16 | append0[1] << 16;
+      w1[0] = append0[1] >> 16 | append0[2] << 16;
+      w1[1] = append0[2] >> 16 | append0[3] << 16;
+      w1[2] = append0[3] >> 16 | append1[0] << 16;
+      w1[3] = append1[0] >> 16 | append1[1] << 16;
+      w2[0] = append1[1] >> 16 | append1[2] << 16;
+      w2[1] = append1[2] >> 16 | append1[3] << 16;
+      w2[2] = append1[3] >> 16 | append2[0] << 16;
+      w2[3] = append2[0] >> 16;
       break;
 
-    case 123:
-      w[30] = w[30] | 0x80000000;
+    case 11:
+      w0[2] = w0[2]            | append0[0] << 24;
+      w0[3] = append0[0] >>  8 | append0[1] << 24;
+      w1[0] = append0[1] >>  8 | append0[2] << 24;
+      w1[1] = append0[2] >>  8 | append0[3] << 24;
+      w1[2] = append0[3] >>  8 | append1[0] << 24;
+      w1[3] = append1[0] >>  8 | append1[1] << 24;
+      w2[0] = append1[1] >>  8 | append1[2] << 24;
+      w2[1] = append1[2] >>  8 | append1[3] << 24;
+      w2[2] = append1[3] >>  8 | append2[0] << 24;
+      w2[3] = append2[0] >>  8;
       break;
 
-    case 124:
-      w[31] = 0x80;
+    case 12:
+      w0[3] = append0[0];
+      w1[0] = append0[1];
+      w1[1] = append0[2];
+      w1[2] = append0[3];
+      w1[3] = append1[0];
+      w2[0] = append1[1];
+      w2[1] = append1[2];
+      w2[2] = append1[3];
+      w2[3] = append2[0];
       break;
 
-    case 125:
-      w[31] = w[31] | 0x8000;
+    case 13:
+      w0[3] = w0[3]            | append0[0] <<  8;
+      w1[0] = append0[0] >> 24 | append0[1] <<  8;
+      w1[1] = append0[1] >> 24 | append0[2] <<  8;
+      w1[2] = append0[2] >> 24 | append0[3] <<  8;
+      w1[3] = append0[3] >> 24 | append1[0] <<  8;
+      w2[0] = append1[0] >> 24 | append1[1] <<  8;
+      w2[1] = append1[1] >> 24 | append1[2] <<  8;
+      w2[2] = append1[2] >> 24 | append1[3] <<  8;
+      w2[3] = append1[3] >> 24 | append2[0] <<  8;
+      w3[0] = append2[0] >> 24;
       break;
 
-    case 126:
-      w[31] = w[31] | 0x800000;
+    case 14:
+      w0[3] = w0[3]            | append0[0] << 16;
+      w1[0] = append0[0] >> 16 | append0[1] << 16;
+      w1[1] = append0[1] >> 16 | append0[2] << 16;
+      w1[2] = append0[2] >> 16 | append0[3] << 16;
+      w1[3] = append0[3] >> 16 | append1[0] << 16;
+      w2[0] = append1[0] >> 16 | append1[1] << 16;
+      w2[1] = append1[1] >> 16 | append1[2] << 16;
+      w2[2] = append1[2] >> 16 | append1[3] << 16;
+      w2[3] = append1[3] >> 16 | append2[0] << 16;
+      w3[0] = append2[0] >> 16;
       break;
 
-    case 127:
-      w[31] = w[31] | 0x80000000;
+    case 15:
+      w0[3] = w0[3]            | append0[0] << 24;
+      w1[0] = append0[0] >>  8 | append0[1] << 24;
+      w1[1] = append0[1] >>  8 | append0[2] << 24;
+      w1[2] = append0[2] >>  8 | append0[3] << 24;
+      w1[3] = append0[3] >>  8 | append1[0] << 24;
+      w2[0] = append1[0] >>  8 | append1[1] << 24;
+      w2[1] = append1[1] >>  8 | append1[2] << 24;
+      w2[2] = append1[2] >>  8 | append1[3] << 24;
+      w2[3] = append1[3] >>  8 | append2[0] << 24;
+      w3[0] = append2[0] >>  8;
       break;
   }
 }
 
-// before: device_memcat2L
-static void memcat_c7_d1x2_sl1x2_sr1x2 (const u32 offset, u32 dst0[2], u32 src_l0[2], u32 src_r0[2])
+// before: memcat32_8
+static void memcat_c32_w4x4_a2x4 (u32 w0[4], u32 w1[4], u32 w2[4], u32 w3[4], const u32 append0[4], const u32 append1[4], const u32 offset)
 {
   switch (offset)
   {
+    case 0:
+      w0[0] = append0[0];
+      w0[1] = append0[1];
+      w0[2] = append0[2];
+      w0[3] = append0[3];
+      w1[0] = append1[0];
+      w1[1] = append1[1];
+      w1[2] = append1[2];
+      w1[3] = append1[3];
+      break;
+
     case 1:
-      dst0[0] = src_l0[0]       | src_r0[0] <<  8;
-      dst0[1] = src_r0[0] >> 24 | src_r0[1] <<  8;
+      w0[0] = w0[0]            | append0[0] <<  8;
+      w0[1] = append0[0] >> 24 | append0[1] <<  8;
+      w0[2] = append0[1] >> 24 | append0[2] <<  8;
+      w0[3] = append0[2] >> 24 | append0[3] <<  8;
+      w1[0] = append0[3] >> 24 | append1[0] <<  8;
+      w1[1] = append1[0] >> 24 | append1[1] <<  8;
+      w1[2] = append1[1] >> 24 | append1[2] <<  8;
+      w1[3] = append1[2] >> 24 | append1[3] <<  8;
+      w2[0] = append1[3] >> 24;
       break;
 
     case 2:
-      dst0[0] = src_l0[0]       | src_r0[0] << 16;
-      dst0[1] = src_r0[0] >> 16 | src_r0[1] << 16;
+      w0[0] = w0[0]            | append0[0] << 16;
+      w0[1] = append0[0] >> 16 | append0[1] << 16;
+      w0[2] = append0[1] >> 16 | append0[2] << 16;
+      w0[3] = append0[2] >> 16 | append0[3] << 16;
+      w1[0] = append0[3] >> 16 | append1[0] << 16;
+      w1[1] = append1[0] >> 16 | append1[1] << 16;
+      w1[2] = append1[1] >> 16 | append1[2] << 16;
+      w1[3] = append1[2] >> 16 | append1[3] << 16;
+      w2[0] = append1[3] >> 16;
       break;
 
     case 3:
-      dst0[0] = src_l0[0]       | src_r0[0] << 24;
-      dst0[1] = src_r0[0] >>  8 | src_r0[1] << 24;
+      w0[0] = w0[0]            | append0[0] << 24;
+      w0[1] = append0[0] >>  8 | append0[1] << 24;
+      w0[2] = append0[1] >>  8 | append0[2] << 24;
+      w0[3] = append0[2] >>  8 | append0[3] << 24;
+      w1[0] = append0[3] >>  8 | append1[0] << 24;
+      w1[1] = append1[0] >>  8 | append1[1] << 24;
+      w1[2] = append1[1] >>  8 | append1[2] << 24;
+      w1[3] = append1[2] >>  8 | append1[3] << 24;
+      w2[0] = append1[3] >>  8;
       break;
 
     case 4:
-      dst0[1] = src_r0[0];
+      w0[1] = append0[0];
+      w0[2] = append0[1];
+      w0[3] = append0[2];
+      w1[0] = append0[3];
+      w1[1] = append1[0];
+      w1[2] = append1[1];
+      w1[3] = append1[2];
+      w2[0] = append1[3];
       break;
 
     case 5:
-      dst0[1] = src_l0[1]       | src_r0[0] <<  8;
-      break;
-
-    case 6:
-      dst0[1] = src_l0[1]       | src_r0[0] << 16;
-      break;
-
-    case 7:
-      dst0[1] = src_l0[1]       | src_r0[0] << 24;
-      break;
-  }
-}
-
-// before: device_memcat4L
-static void memcat_c15_d1x4_sl1x4_sr1x4 (const u32 offset, u32 dst0[4], u32 src_l0[4], u32 src_r0[4])
-{
-  switch (offset)
-  {
-    case 1:
-      dst0[0] = src_l0[0]       | src_r0[0] <<  8;
-      dst0[1] = src_r0[0] >> 24 | src_r0[1] <<  8;
-      dst0[2] = src_r0[1] >> 24 | src_r0[2] <<  8;
-      dst0[3] = src_r0[2] >> 24 | src_r0[3] <<  8;
-      break;
-
-    case 2:
-      dst0[0] = src_l0[0]       | src_r0[0] << 16;
-      dst0[1] = src_r0[0] >> 16 | src_r0[1] << 16;
-      dst0[2] = src_r0[1] >> 16 | src_r0[2] << 16;
-      dst0[3] = src_r0[2] >> 16 | src_r0[3] << 16;
-      break;
-
-    case 3:
-      dst0[0] = src_l0[0]       | src_r0[0] << 24;
-      dst0[1] = src_r0[0] >>  8 | src_r0[1] << 24;
-      dst0[2] = src_r0[1] >>  8 | src_r0[2] << 24;
-      dst0[3] = src_r0[2] >>  8 | src_r0[3] << 24;
-      break;
-
-    case 4:
-      dst0[1] = src_r0[0];
-      dst0[2] = src_r0[1];
-      dst0[3] = src_r0[2];
-      break;
-
-    case 5:
-      dst0[1] = src_l0[1]       | src_r0[0] <<  8;
-      dst0[2] = src_r0[0] >> 24 | src_r0[1] <<  8;
-      dst0[3] = src_r0[1] >> 24 | src_r0[2] <<  8;
+      w0[1] = w0[1]            | append0[0] <<  8;
+      w0[2] = append0[0] >> 24 | append0[1] <<  8;
+      w0[3] = append0[1] >> 24 | append0[2] <<  8;
+      w1[0] = append0[2] >> 24 | append0[3] <<  8;
+      w1[1] = append0[3] >> 24 | append1[0] <<  8;
+      w1[2] = append1[0] >> 24 | append1[1] <<  8;
+      w1[3] = append1[1] >> 24 | append1[2] <<  8;
+      w2[0] = append1[2] >> 24 | append1[3] <<  8;
+      w2[1] = append1[3] >> 24;
       break;
 
     case 6:
-      dst0[1] = src_l0[1]       | src_r0[0] << 16;
-      dst0[2] = src_r0[0] >> 16 | src_r0[1] << 16;
-      dst0[3] = src_r0[1] >> 16 | src_r0[2] << 16;
+      w0[1] = w0[1]            | append0[0] << 16;
+      w0[2] = append0[0] >> 16 | append0[1] << 16;
+      w0[3] = append0[1] >> 16 | append0[2] << 16;
+      w1[0] = append0[2] >> 16 | append0[3] << 16;
+      w1[1] = append0[3] >> 16 | append1[0] << 16;
+      w1[2] = append1[0] >> 16 | append1[1] << 16;
+      w1[3] = append1[1] >> 16 | append1[2] << 16;
+      w2[0] = append1[2] >> 16 | append1[3] << 16;
+      w2[1] = append1[3] >> 16;
       break;
 
     case 7:
-      dst0[1] = src_l0[1]       | src_r0[0] << 24;
-      dst0[2] = src_r0[0] >>  8 | src_r0[1] << 24;
-      dst0[3] = src_r0[1] >>  8 | src_r0[2] << 24;
+      w0[1] = w0[1]            | append0[0] << 24;
+      w0[2] = append0[0] >>  8 | append0[1] << 24;
+      w0[3] = append0[1] >>  8 | append0[2] << 24;
+      w1[0] = append0[2] >>  8 | append0[3] << 24;
+      w1[1] = append0[3] >>  8 | append1[0] << 24;
+      w1[2] = append1[0] >>  8 | append1[1] << 24;
+      w1[3] = append1[1] >>  8 | append1[2] << 24;
+      w2[0] = append1[2] >>  8 | append1[3] << 24;
+      w2[1] = append1[3] >>  8;
       break;
 
     case 8:
-      dst0[2] = src_r0[0];
-      dst0[3] = src_r0[1];
+      w0[2] = append0[0];
+      w0[3] = append0[1];
+      w1[0] = append0[2];
+      w1[1] = append0[3];
+      w1[2] = append1[0];
+      w1[3] = append1[1];
+      w2[0] = append1[2];
+      w2[1] = append1[3];
       break;
 
     case 9:
-      dst0[2] = src_l0[2]       | src_r0[0] <<  8;
-      dst0[3] = src_r0[0] >> 24 | src_r0[1] <<  8;
+      w0[2] = w0[2]            | append0[0] <<  8;
+      w0[3] = append0[0] >> 24 | append0[1] <<  8;
+      w1[0] = append0[1] >> 24 | append0[2] <<  8;
+      w1[1] = append0[2] >> 24 | append0[3] <<  8;
+      w1[2] = append0[3] >> 24 | append1[0] <<  8;
+      w1[3] = append1[0] >> 24 | append1[1] <<  8;
+      w2[0] = append1[1] >> 24 | append1[2] <<  8;
+      w2[1] = append1[2] >> 24 | append1[3] <<  8;
+      w2[2] = append1[3] >> 24;
       break;
 
     case 10:
-      dst0[2] = src_l0[2]       | src_r0[0] << 16;
-      dst0[3] = src_r0[0] >> 16 | src_r0[1] << 16;
+      w0[2] = w0[2]            | append0[0] << 16;
+      w0[3] = append0[0] >> 16 | append0[1] << 16;
+      w1[0] = append0[1] >> 16 | append0[2] << 16;
+      w1[1] = append0[2] >> 16 | append0[3] << 16;
+      w1[2] = append0[3] >> 16 | append1[0] << 16;
+      w1[3] = append1[0] >> 16 | append1[1] << 16;
+      w2[0] = append1[1] >> 16 | append1[2] << 16;
+      w2[1] = append1[2] >> 16 | append1[3] << 16;
+      w2[2] = append1[3] >> 16;
       break;
 
     case 11:
-      dst0[2] = src_l0[2]       | src_r0[0] << 24;
-      dst0[3] = src_r0[0] >>  8 | src_r0[1] << 24;
+      w0[2] = w0[2]            | append0[0] << 24;
+      w0[3] = append0[0] >>  8 | append0[1] << 24;
+      w1[0] = append0[1] >>  8 | append0[2] << 24;
+      w1[1] = append0[2] >>  8 | append0[3] << 24;
+      w1[2] = append0[3] >>  8 | append1[0] << 24;
+      w1[3] = append1[0] >>  8 | append1[1] << 24;
+      w2[0] = append1[1] >>  8 | append1[2] << 24;
+      w2[1] = append1[2] >>  8 | append1[3] << 24;
+      w2[2] = append1[3] >>  8;
       break;
 
     case 12:
-      dst0[3] = src_r0[0];
+      w0[3] = append0[0];
+      w1[0] = append0[1];
+      w1[1] = append0[2];
+      w1[2] = append0[3];
+      w1[3] = append1[0];
+      w2[0] = append1[1];
+      w2[1] = append1[2];
+      w2[2] = append1[3];
       break;
 
     case 13:
-      dst0[3] = src_l0[3]       | src_r0[0] <<  8;
+      w0[3] = w0[3]            | append0[0] <<  8;
+      w1[0] = append0[0] >> 24 | append0[1] <<  8;
+      w1[1] = append0[1] >> 24 | append0[2] <<  8;
+      w1[2] = append0[2] >> 24 | append0[3] <<  8;
+      w1[3] = append0[3] >> 24 | append1[0] <<  8;
+      w2[0] = append1[0] >> 24 | append1[1] <<  8;
+      w2[1] = append1[1] >> 24 | append1[2] <<  8;
+      w2[2] = append1[2] >> 24 | append1[3] <<  8;
+      w2[3] = append1[3] >> 24;
       break;
 
     case 14:
-      dst0[3] = src_l0[3]       | src_r0[0] << 16;
+      w0[3] = w0[3]            | append0[0] << 16;
+      w1[0] = append0[0] >> 16 | append0[1] << 16;
+      w1[1] = append0[1] >> 16 | append0[2] << 16;
+      w1[2] = append0[2] >> 16 | append0[3] << 16;
+      w1[3] = append0[3] >> 16 | append1[0] << 16;
+      w2[0] = append1[0] >> 16 | append1[1] << 16;
+      w2[1] = append1[1] >> 16 | append1[2] << 16;
+      w2[2] = append1[2] >> 16 | append1[3] << 16;
+      w2[3] = append1[3] >> 16;
       break;
 
     case 15:
-      dst0[3] = src_l0[3]       | src_r0[0] << 24;
-      break;
-  }
-}
-
-// before: device_memcat8L
-static void memcat_c31_d2x4_sl2x4_sr1x4 (const u32 offset, u32 dst0[4], u32 dst1[4], u32 src_l0[4], u32 src_l1[4], u32 src_r0[4])
-{
-  switch (offset)
-  {
-    case 1:
-      dst0[0] = src_l0[0]       | src_r0[0] <<  8;
-      dst0[1] = src_r0[0] >> 24 | src_r0[1] <<  8;
-      dst0[2] = src_r0[1] >> 24 | src_r0[2] <<  8;
-      dst0[3] = src_r0[2] >> 24 | src_r0[3] <<  8;
-      dst1[0] = src_r0[3] >> 24;
+      w0[3] = w0[3]            | append0[0] << 24;
+      w1[0] = append0[0] >>  8 | append0[1] << 24;
+      w1[1] = append0[1] >>  8 | append0[2] << 24;
+      w1[2] = append0[2] >>  8 | append0[3] << 24;
+      w1[3] = append0[3] >>  8 | append1[0] << 24;
+      w2[0] = append1[0] >>  8 | append1[1] << 24;
+      w2[1] = append1[1] >>  8 | append1[2] << 24;
+      w2[2] = append1[2] >>  8 | append1[3] << 24;
+      w2[3] = append1[3] >>  8;
       break;
 
-    case 2:
-      dst0[0] = src_l0[0]       | src_r0[0] << 16;
-      dst0[1] = src_r0[0] >> 16 | src_r0[1] << 16;
-      dst0[2] = src_r0[1] >> 16 | src_r0[2] << 16;
-      dst0[3] = src_r0[2] >> 16 | src_r0[3] << 16;
-      dst1[0] = src_r0[3] >> 16;
+    case 16:
+      w1[0] = append0[0];
+      w1[1] = append0[1];
+      w1[2] = append0[2];
+      w1[3] = append0[3];
+      w2[0] = append1[0];
+      w2[1] = append1[1];
+      w2[2] = append1[2];
+      w2[3] = append1[3];
       break;
 
-    case 3:
-      dst0[0] = src_l0[0]       | src_r0[0] << 24;
-      dst0[1] = src_r0[0] >>  8 | src_r0[1] << 24;
-      dst0[2] = src_r0[1] >>  8 | src_r0[2] << 24;
-      dst0[3] = src_r0[2] >>  8 | src_r0[3] << 24;
-      dst1[0] = src_r0[3] >>  8;
+    case 17:
+      w1[0] = w1[0]            | append0[0] <<  8;
+      w1[1] = append0[0] >> 24 | append0[1] <<  8;
+      w1[2] = append0[1] >> 24 | append0[2] <<  8;
+      w1[3] = append0[2] >> 24 | append0[3] <<  8;
+      w2[0] = append0[3] >> 24 | append1[0] <<  8;
+      w2[1] = append1[0] >> 24 | append1[1] <<  8;
+      w2[2] = append1[1] >> 24 | append1[2] <<  8;
+      w2[3] = append1[2] >> 24 | append1[3] <<  8;
+      w3[0] = append1[3] >> 24;
       break;
 
-    case 4:
-      dst0[1] = src_r0[0];
-      dst0[2] = src_r0[1];
-      dst0[3] = src_r0[2];
-      dst1[0] = src_r0[3];
+    case 18:
+      w1[0] = w1[0]            | append0[0] << 16;
+      w1[1] = append0[0] >> 16 | append0[1] << 16;
+      w1[2] = append0[1] >> 16 | append0[2] << 16;
+      w1[3] = append0[2] >> 16 | append0[3] << 16;
+      w2[0] = append0[3] >> 16 | append1[0] << 16;
+      w2[1] = append1[0] >> 16 | append1[1] << 16;
+      w2[2] = append1[1] >> 16 | append1[2] << 16;
+      w2[3] = append1[2] >> 16 | append1[3] << 16;
+      w3[0] = append1[3] >> 16;
       break;
 
-    case 5:
-      dst0[1] = src_l0[1]       | src_r0[0] <<  8;
-      dst0[2] = src_r0[0] >> 24 | src_r0[1] <<  8;
-      dst0[3] = src_r0[1] >> 24 | src_r0[2] <<  8;
-      dst1[0] = src_r0[2] >> 24 | src_r0[3] <<  8;
-      dst1[1] = src_r0[3] >> 24;
+    case 19:
+      w1[0] = w1[0]            | append0[0] << 24;
+      w1[1] = append0[0] >>  8 | append0[1] << 24;
+      w1[2] = append0[1] >>  8 | append0[2] << 24;
+      w1[3] = append0[2] >>  8 | append0[3] << 24;
+      w2[0] = append0[3] >>  8 | append1[0] << 24;
+      w2[1] = append1[0] >>  8 | append1[1] << 24;
+      w2[2] = append1[1] >>  8 | append1[2] << 24;
+      w2[3] = append1[2] >>  8 | append1[3] << 24;
+      w3[0] = append1[3] >>  8;
       break;
 
-    case 6:
-      dst0[1] = src_l0[1]       | src_r0[0] << 16;
-      dst0[2] = src_r0[0] >> 16 | src_r0[1] << 16;
-      dst0[3] = src_r0[1] >> 16 | src_r0[2] << 16;
-      dst1[0] = src_r0[2] >> 16 | src_r0[3] << 16;
-      dst1[1] = src_r0[3] >> 16;
-      break;
-
-    case 7:
-      dst0[1] = src_l0[1]       | src_r0[0] << 24;
-      dst0[2] = src_r0[0] >>  8 | src_r0[1] << 24;
-      dst0[3] = src_r0[1] >>  8 | src_r0[2] << 24;
-      dst1[0] = src_r0[2] >>  8 | src_r0[3] << 24;
-      dst1[1] = src_r0[3] >>  8;
-      break;
-
-    case 8:
-      dst0[2] = src_r0[0];
-      dst0[3] = src_r0[1];
-      dst1[0] = src_r0[2];
-      dst1[1] = src_r0[3];
-      break;
-
-    case 9:
-      dst0[2] = src_l0[2]       | src_r0[0] <<  8;
-      dst0[3] = src_r0[0] >> 24 | src_r0[1] <<  8;
-      dst1[0] = src_r0[1] >> 24 | src_r0[2] <<  8;
-      dst1[1] = src_r0[2] >> 24 | src_r0[3] <<  8;
-      dst1[2] = src_r0[3] >> 24;
-      break;
-
-    case 10:
-      dst0[2] = src_l0[2]       | src_r0[0] << 16;
-      dst0[3] = src_r0[0] >> 16 | src_r0[1] << 16;
-      dst1[0] = src_r0[1] >> 16 | src_r0[2] << 16;
-      dst1[1] = src_r0[2] >> 16 | src_r0[3] << 16;
-      dst1[2] = src_r0[3] >> 16;
-      break;
-
-    case 11:
-      dst0[2] = src_l0[2]       | src_r0[0] << 24;
-      dst0[3] = src_r0[0] >>  8 | src_r0[1] << 24;
-      dst1[0] = src_r0[1] >>  8 | src_r0[2] << 24;
-      dst1[1] = src_r0[2] >>  8 | src_r0[3] << 24;
-      dst1[2] = src_r0[3] >>  8;
-      break;
-
-    case 12:
-      dst0[3] = src_r0[0];
-      dst1[0] = src_r0[1];
-      dst1[1] = src_r0[2];
-      dst1[2] = src_r0[3];
-      break;
-
-    case 13:
-      dst0[3] = src_l0[3]       | src_r0[0] <<  8;
-      dst1[0] = src_r0[0] >> 24 | src_r0[1] <<  8;
-      dst1[1] = src_r0[1] >> 24 | src_r0[2] <<  8;
-      dst1[2] = src_r0[2] >> 24 | src_r0[3] <<  8;
-      dst1[3] = src_r0[3] >> 24;
-      break;
-
-    case 14:
-      dst0[3] = src_l0[3]       | src_r0[0] << 16;
-      dst1[0] = src_r0[0] >> 16 | src_r0[1] << 16;
-      dst1[1] = src_r0[1] >> 16 | src_r0[2] << 16;
-      dst1[2] = src_r0[2] >> 16 | src_r0[3] << 16;
-      dst1[3] = src_r0[3] >> 16;
-      break;
-
-    case 15:
-      dst0[3] = src_l0[3]       | src_r0[0] << 24;
-      dst1[0] = src_r0[0] >>  8 | src_r0[1] << 24;
-      dst1[1] = src_r0[1] >>  8 | src_r0[2] << 24;
-      dst1[2] = src_r0[2] >>  8 | src_r0[3] << 24;
-      dst1[3] = src_r0[3] >>  8;
-      break;
-
-    case 16:
-      dst1[0] = src_r0[0];
-      dst1[1] = src_r0[1];
-      dst1[2] = src_r0[2];
-      dst1[3] = src_r0[3];
-      break;
-
-    case 17:
-      dst1[0] = src_l1[0]       | src_r0[0] <<  8;
-      dst1[1] = src_r0[0] >> 24 | src_r0[1] <<  8;
-      dst1[2] = src_r0[1] >> 24 | src_r0[2] <<  8;
-      dst1[3] = src_r0[2] >> 24 | src_r0[3] <<  8;
-      break;
-
-    case 18:
-      dst1[0] = src_l1[0]       | src_r0[0] << 16;
-      dst1[1] = src_r0[0] >> 16 | src_r0[1] << 16;
-      dst1[2] = src_r0[1] >> 16 | src_r0[2] << 16;
-      dst1[3] = src_r0[2] >> 16 | src_r0[3] << 16;
-      break;
-
-    case 19:
-      dst1[0] = src_l1[0]       | src_r0[0] << 24;
-      dst1[1] = src_r0[0] >>  8 | src_r0[1] << 24;
-      dst1[2] = src_r0[1] >>  8 | src_r0[2] << 24;
-      dst1[3] = src_r0[2] >>  8 | src_r0[3] << 24;
-      break;
-
-    case 20:
-      dst1[1] = src_r0[0];
-      dst1[2] = src_r0[1];
-      dst1[3] = src_r0[2];
+    case 20:
+      w1[1] = append0[0];
+      w1[2] = append0[1];
+      w1[3] = append0[2];
+      w2[0] = append0[3];
+      w2[1] = append1[0];
+      w2[2] = append1[1];
+      w2[3] = append1[2];
+      w3[0] = append1[3];
       break;
 
     case 21:
-      dst1[1] = src_l1[1]       | src_r0[0] <<  8;
-      dst1[2] = src_r0[0] >> 24 | src_r0[1] <<  8;
-      dst1[3] = src_r0[1] >> 24 | src_r0[2] <<  8;
+      w1[1] = w1[1]            | append0[0] <<  8;
+      w1[2] = append0[0] >> 24 | append0[1] <<  8;
+      w1[3] = append0[1] >> 24 | append0[2] <<  8;
+      w2[0] = append0[2] >> 24 | append0[3] <<  8;
+      w2[1] = append0[3] >> 24 | append1[0] <<  8;
+      w2[2] = append1[0] >> 24 | append1[1] <<  8;
+      w2[3] = append1[1] >> 24 | append1[2] <<  8;
+      w3[0] = append1[2] >> 24 | append1[3] <<  8;
+      w3[1] = append1[3] >> 24;
       break;
 
     case 22:
-      dst1[1] = src_l1[1]       | src_r0[0] << 16;
-      dst1[2] = src_r0[0] >> 16 | src_r0[1] << 16;
-      dst1[3] = src_r0[1] >> 16 | src_r0[2] << 16;
+      w1[1] = w1[1]            | append0[0] << 16;
+      w1[2] = append0[0] >> 16 | append0[1] << 16;
+      w1[3] = append0[1] >> 16 | append0[2] << 16;
+      w2[0] = append0[2] >> 16 | append0[3] << 16;
+      w2[1] = append0[3] >> 16 | append1[0] << 16;
+      w2[2] = append1[0] >> 16 | append1[1] << 16;
+      w2[3] = append1[1] >> 16 | append1[2] << 16;
+      w3[0] = append1[2] >> 16 | append1[3] << 16;
+      w3[1] = append1[3] >> 16;
       break;
 
     case 23:
-      dst1[1] = src_l1[1]       | src_r0[0] << 24;
-      dst1[2] = src_r0[0] >>  8 | src_r0[1] << 24;
-      dst1[3] = src_r0[1] >>  8 | src_r0[2] << 24;
+      w1[1] = w1[1]            | append0[0] << 24;
+      w1[2] = append0[0] >>  8 | append0[1] << 24;
+      w1[3] = append0[1] >>  8 | append0[2] << 24;
+      w2[0] = append0[2] >>  8 | append0[3] << 24;
+      w2[1] = append0[3] >>  8 | append1[0] << 24;
+      w2[2] = append1[0] >>  8 | append1[1] << 24;
+      w2[3] = append1[1] >>  8 | append1[2] << 24;
+      w3[0] = append1[2] >>  8 | append1[3] << 24;
+      w3[1] = append1[3] >>  8;
       break;
 
     case 24:
-      dst1[2] = src_r0[0];
-      dst1[3] = src_r0[1];
+      w1[2] = append0[0];
+      w1[3] = append0[1];
+      w2[0] = append0[2];
+      w2[1] = append0[3];
+      w2[2] = append1[0];
+      w2[3] = append1[1];
+      w3[0] = append1[2];
+      w3[1] = append1[3];
       break;
 
     case 25:
-      dst1[2] = src_l1[2]       | src_r0[0] <<  8;
-      dst1[3] = src_r0[0] >> 24 | src_r0[1] <<  8;
+      w1[2] = w1[2]            | append0[0] <<  8;
+      w1[3] = append0[0] >> 24 | append0[1] <<  8;
+      w2[0] = append0[1] >> 24 | append0[2] <<  8;
+      w2[1] = append0[2] >> 24 | append0[3] <<  8;
+      w2[2] = append0[3] >> 24 | append1[0] <<  8;
+      w2[3] = append1[0] >> 24 | append1[1] <<  8;
+      w3[0] = append1[1] >> 24 | append1[2] <<  8;
+      w3[1] = append1[2] >> 24 | append1[3] <<  8;
       break;
 
     case 26:
-      dst1[2] = src_l1[2]       | src_r0[0] << 16;
-      dst1[3] = src_r0[0] >> 16 | src_r0[1] << 16;
+      w1[2] = w1[2]            | append0[0] << 16;
+      w1[3] = append0[0] >> 16 | append0[1] << 16;
+      w2[0] = append0[1] >> 16 | append0[2] << 16;
+      w2[1] = append0[2] >> 16 | append0[3] << 16;
+      w2[2] = append0[3] >> 16 | append1[0] << 16;
+      w2[3] = append1[0] >> 16 | append1[1] << 16;
+      w3[0] = append1[1] >> 16 | append1[2] << 16;
+      w3[1] = append1[2] >> 16 | append1[3] << 16;
       break;
 
     case 27:
-      dst1[2] = src_l1[2]       | src_r0[0] << 24;
-      dst1[3] = src_r0[0] >>  8 | src_r0[1] << 24;
+      w1[2] = w1[2]            | append0[0] << 24;
+      w1[3] = append0[0] >>  8 | append0[1] << 24;
+      w2[0] = append0[1] >>  8 | append0[2] << 24;
+      w2[1] = append0[2] >>  8 | append0[3] << 24;
+      w2[2] = append0[3] >>  8 | append1[0] << 24;
+      w2[3] = append1[0] >>  8 | append1[1] << 24;
+      w3[0] = append1[1] >>  8 | append1[2] << 24;
+      w3[1] = append1[2] >>  8 | append1[3] << 24;
       break;
 
     case 28:
-      dst1[3] = src_r0[0];
+      w1[3] = append0[0];
+      w2[0] = append0[1];
+      w2[1] = append0[2];
+      w2[2] = append0[3];
+      w2[3] = append1[0];
+      w3[0] = append1[1];
+      w3[1] = append1[2];
       break;
 
     case 29:
-      dst1[3] = src_l1[3]       | src_r0[0] <<  8;
+      w1[3] = w1[3]            | append0[0] <<  8;
+      w2[0] = append0[0] >> 24 | append0[1] <<  8;
+      w2[1] = append0[1] >> 24 | append0[2] <<  8;
+      w2[2] = append0[2] >> 24 | append0[3] <<  8;
+      w2[3] = append0[3] >> 24 | append1[0] <<  8;
+      w3[0] = append1[0] >> 24 | append1[1] <<  8;
+      w3[1] = append1[1] >> 24 | append1[2] <<  8;
       break;
 
     case 30:
-      dst1[3] = src_l1[3]       | src_r0[0] << 16;
+      w1[3] = w1[3]            | append0[0] << 16;
+      w2[0] = append0[0] >> 16 | append0[1] << 16;
+      w2[1] = append0[1] >> 16 | append0[2] << 16;
+      w2[2] = append0[2] >> 16 | append0[3] << 16;
+      w2[3] = append0[3] >> 16 | append1[0] << 16;
+      w3[0] = append1[0] >> 16 | append1[1] << 16;
+      w3[1] = append1[1] >> 16 | append1[2] << 16;
       break;
 
     case 31:
-      dst1[3] = src_l1[3]       | src_r0[0] << 24;
+      w1[3] = w1[3]            | append0[0] << 24;
+      w2[0] = append0[0] >>  8 | append0[1] << 24;
+      w2[1] = append0[1] >>  8 | append0[2] << 24;
+      w2[2] = append0[2] >>  8 | append0[3] << 24;
+      w2[3] = append0[3] >>  8 | append1[0] << 24;
+      w3[0] = append1[0] >>  8 | append1[1] << 24;
+      w3[1] = append1[1] >>  8 | append1[2] << 24;
+      break;
+
+    case 32:
+      w2[0] = append0[0];
+      w2[1] = append0[1];
+      w2[2] = append0[2];
+      w2[3] = append0[3];
+      w3[0] = append1[0];
+      w3[1] = append1[1];
       break;
   }
 }
 
-// before: device_memcat12L
-static void memcat_c47_d3x4_sl3x4_sr1x4 (const u32 offset, u32 dst0[4], u32 dst1[4], u32 dst2[4], u32 src_l0[4], u32 src_l1[4], u32 src_l2[4], u32 src_r0[4])
+// before: memcat32_9
+static void memcat_c32_w4x4_a3x4 (u32 w0[4], u32 w1[4], u32 w2[4], u32 w3[4], const u32 append0[4], const u32 append1[4], const u32 append2[4], const u32 offset)
 {
   switch (offset)
   {
-    case 1:
-      dst0[0] = src_l0[0]       | src_r0[0] <<  8;
-      dst0[1] = src_r0[0] >> 24 | src_r0[1] <<  8;
-      dst0[2] = src_r0[1] >> 24 | src_r0[2] <<  8;
-      dst0[3] = src_r0[2] >> 24 | src_r0[3] <<  8;
-      dst1[0] = src_r0[3] >> 24;
+    case 0:
+      w0[0] = append0[0];
+      w0[1] = append0[1];
+      w0[2] = append0[2];
+      w0[3] = append0[3];
+      w1[0] = append1[0];
+      w1[1] = append1[1];
+      w1[2] = append1[2];
+      w1[3] = append1[3];
+      w2[0] = append2[0];
       break;
 
-    case 2:
-      dst0[0] = src_l0[0]       | src_r0[0] << 16;
-      dst0[1] = src_r0[0] >> 16 | src_r0[1] << 16;
-      dst0[2] = src_r0[1] >> 16 | src_r0[2] << 16;
-      dst0[3] = src_r0[2] >> 16 | src_r0[3] << 16;
-      dst1[0] = src_r0[3] >> 16;
+    case 1:
+      w0[0] = w0[0]            | append0[0] <<  8;
+      w0[1] = append0[0] >> 24 | append0[1] <<  8;
+      w0[2] = append0[1] >> 24 | append0[2] <<  8;
+      w0[3] = append0[2] >> 24 | append0[3] <<  8;
+      w1[0] = append0[3] >> 24 | append1[0] <<  8;
+      w1[1] = append1[0] >> 24 | append1[1] <<  8;
+      w1[2] = append1[1] >> 24 | append1[2] <<  8;
+      w1[3] = append1[2] >> 24 | append1[3] <<  8;
+      w2[0] = append1[3] >> 24 | append2[0] <<  8;
+      w2[1] = append2[0] >> 24;
       break;
 
-    case 3:
-      dst0[0] = src_l0[0]       | src_r0[0] << 24;
-      dst0[1] = src_r0[0] >>  8 | src_r0[1] << 24;
-      dst0[2] = src_r0[1] >>  8 | src_r0[2] << 24;
-      dst0[3] = src_r0[2] >>  8 | src_r0[3] << 24;
-      dst1[0] = src_r0[3] >>  8;
+    case 2:
+      w0[0] = w0[0]            | append0[0] << 16;
+      w0[1] = append0[0] >> 16 | append0[1] << 16;
+      w0[2] = append0[1] >> 16 | append0[2] << 16;
+      w0[3] = append0[2] >> 16 | append0[3] << 16;
+      w1[0] = append0[3] >> 16 | append1[0] << 16;
+      w1[1] = append1[0] >> 16 | append1[1] << 16;
+      w1[2] = append1[1] >> 16 | append1[2] << 16;
+      w1[3] = append1[2] >> 16 | append1[3] << 16;
+      w2[0] = append1[3] >> 16 | append2[0] << 16;
+      w2[1] = append2[0] >> 16;
+      break;
+
+    case 3:
+      w0[0] = w0[0]            | append0[0] << 24;
+      w0[1] = append0[0] >>  8 | append0[1] << 24;
+      w0[2] = append0[1] >>  8 | append0[2] << 24;
+      w0[3] = append0[2] >>  8 | append0[3] << 24;
+      w1[0] = append0[3] >>  8 | append1[0] << 24;
+      w1[1] = append1[0] >>  8 | append1[1] << 24;
+      w1[2] = append1[1] >>  8 | append1[2] << 24;
+      w1[3] = append1[2] >>  8 | append1[3] << 24;
+      w2[0] = append1[3] >>  8 | append2[0] << 24;
+      w2[1] = append2[0] >>  8;
       break;
 
     case 4:
-      dst0[1] = src_r0[0];
-      dst0[2] = src_r0[1];
-      dst0[3] = src_r0[2];
-      dst1[0] = src_r0[3];
+      w0[1] = append0[0];
+      w0[2] = append0[1];
+      w0[3] = append0[2];
+      w1[0] = append0[3];
+      w1[1] = append1[0];
+      w1[2] = append1[1];
+      w1[3] = append1[2];
+      w2[0] = append1[3];
+      w2[1] = append2[0];
       break;
 
     case 5:
-      dst0[1] = src_l0[1]       | src_r0[0] <<  8;
-      dst0[2] = src_r0[0] >> 24 | src_r0[1] <<  8;
-      dst0[3] = src_r0[1] >> 24 | src_r0[2] <<  8;
-      dst1[0] = src_r0[2] >> 24 | src_r0[3] <<  8;
-      dst1[1] = src_r0[3] >> 24;
+      w0[1] = w0[1]            | append0[0] <<  8;
+      w0[2] = append0[0] >> 24 | append0[1] <<  8;
+      w0[3] = append0[1] >> 24 | append0[2] <<  8;
+      w1[0] = append0[2] >> 24 | append0[3] <<  8;
+      w1[1] = append0[3] >> 24 | append1[0] <<  8;
+      w1[2] = append1[0] >> 24 | append1[1] <<  8;
+      w1[3] = append1[1] >> 24 | append1[2] <<  8;
+      w2[0] = append1[2] >> 24 | append1[3] <<  8;
+      w2[1] = append1[3] >> 24 | append2[0] <<  8;
+      w2[2] = append2[0] >> 24;
       break;
 
     case 6:
-      dst0[1] = src_l0[1]       | src_r0[0] << 16;
-      dst0[2] = src_r0[0] >> 16 | src_r0[1] << 16;
-      dst0[3] = src_r0[1] >> 16 | src_r0[2] << 16;
-      dst1[0] = src_r0[2] >> 16 | src_r0[3] << 16;
-      dst1[1] = src_r0[3] >> 16;
+      w0[1] = w0[1]            | append0[0] << 16;
+      w0[2] = append0[0] >> 16 | append0[1] << 16;
+      w0[3] = append0[1] >> 16 | append0[2] << 16;
+      w1[0] = append0[2] >> 16 | append0[3] << 16;
+      w1[1] = append0[3] >> 16 | append1[0] << 16;
+      w1[2] = append1[0] >> 16 | append1[1] << 16;
+      w1[3] = append1[1] >> 16 | append1[2] << 16;
+      w2[0] = append1[2] >> 16 | append1[3] << 16;
+      w2[1] = append1[3] >> 16 | append2[0] << 16;
+      w2[2] = append2[0] >> 16;
       break;
 
     case 7:
-      dst0[1] = src_l0[1]       | src_r0[0] << 24;
-      dst0[2] = src_r0[0] >>  8 | src_r0[1] << 24;
-      dst0[3] = src_r0[1] >>  8 | src_r0[2] << 24;
-      dst1[0] = src_r0[2] >>  8 | src_r0[3] << 24;
-      dst1[1] = src_r0[3] >>  8;
+      w0[1] = w0[1]            | append0[0] << 24;
+      w0[2] = append0[0] >>  8 | append0[1] << 24;
+      w0[3] = append0[1] >>  8 | append0[2] << 24;
+      w1[0] = append0[2] >>  8 | append0[3] << 24;
+      w1[1] = append0[3] >>  8 | append1[0] << 24;
+      w1[2] = append1[0] >>  8 | append1[1] << 24;
+      w1[3] = append1[1] >>  8 | append1[2] << 24;
+      w2[0] = append1[2] >>  8 | append1[3] << 24;
+      w2[1] = append1[3] >>  8 | append2[0] << 24;
+      w2[2] = append2[0] >>  8;
       break;
 
     case 8:
-      dst0[2] = src_r0[0];
-      dst0[3] = src_r0[1];
-      dst1[0] = src_r0[2];
-      dst1[1] = src_r0[3];
+      w0[2] = append0[0];
+      w0[3] = append0[1];
+      w1[0] = append0[2];
+      w1[1] = append0[3];
+      w1[2] = append1[0];
+      w1[3] = append1[1];
+      w2[0] = append1[2];
+      w2[1] = append1[3];
+      w2[2] = append2[0];
       break;
 
     case 9:
-      dst0[2] = src_l0[2]       | src_r0[0] <<  8;
-      dst0[3] = src_r0[0] >> 24 | src_r0[1] <<  8;
-      dst1[0] = src_r0[1] >> 24 | src_r0[2] <<  8;
-      dst1[1] = src_r0[2] >> 24 | src_r0[3] <<  8;
-      dst1[2] = src_r0[3] >> 24;
+      w0[2] = w0[2]            | append0[0] <<  8;
+      w0[3] = append0[0] >> 24 | append0[1] <<  8;
+      w1[0] = append0[1] >> 24 | append0[2] <<  8;
+      w1[1] = append0[2] >> 24 | append0[3] <<  8;
+      w1[2] = append0[3] >> 24 | append1[0] <<  8;
+      w1[3] = append1[0] >> 24 | append1[1] <<  8;
+      w2[0] = append1[1] >> 24 | append1[2] <<  8;
+      w2[1] = append1[2] >> 24 | append1[3] <<  8;
+      w2[2] = append1[3] >> 24 | append2[0] <<  8;
+      w2[3] = append2[0] >> 24;
       break;
 
     case 10:
-      dst0[2] = src_l0[2]       | src_r0[0] << 16;
-      dst0[3] = src_r0[0] >> 16 | src_r0[1] << 16;
-      dst1[0] = src_r0[1] >> 16 | src_r0[2] << 16;
-      dst1[1] = src_r0[2] >> 16 | src_r0[3] << 16;
-      dst1[2] = src_r0[3] >> 16;
+      w0[2] = w0[2]            | append0[0] << 16;
+      w0[3] = append0[0] >> 16 | append0[1] << 16;
+      w1[0] = append0[1] >> 16 | append0[2] << 16;
+      w1[1] = append0[2] >> 16 | append0[3] << 16;
+      w1[2] = append0[3] >> 16 | append1[0] << 16;
+      w1[3] = append1[0] >> 16 | append1[1] << 16;
+      w2[0] = append1[1] >> 16 | append1[2] << 16;
+      w2[1] = append1[2] >> 16 | append1[3] << 16;
+      w2[2] = append1[3] >> 16 | append2[0] << 16;
+      w2[3] = append2[0] >> 16;
       break;
 
     case 11:
-      dst0[2] = src_l0[2]       | src_r0[0] << 24;
-      dst0[3] = src_r0[0] >>  8 | src_r0[1] << 24;
-      dst1[0] = src_r0[1] >>  8 | src_r0[2] << 24;
-      dst1[1] = src_r0[2] >>  8 | src_r0[3] << 24;
-      dst1[2] = src_r0[3] >>  8;
+      w0[2] = w0[2]            | append0[0] << 24;
+      w0[3] = append0[0] >>  8 | append0[1] << 24;
+      w1[0] = append0[1] >>  8 | append0[2] << 24;
+      w1[1] = append0[2] >>  8 | append0[3] << 24;
+      w1[2] = append0[3] >>  8 | append1[0] << 24;
+      w1[3] = append1[0] >>  8 | append1[1] << 24;
+      w2[0] = append1[1] >>  8 | append1[2] << 24;
+      w2[1] = append1[2] >>  8 | append1[3] << 24;
+      w2[2] = append1[3] >>  8 | append2[0] << 24;
+      w2[3] = append2[0] >>  8;
       break;
 
     case 12:
-      dst0[3] = src_r0[0];
-      dst1[0] = src_r0[1];
-      dst1[1] = src_r0[2];
-      dst1[2] = src_r0[3];
+      w0[3] = append0[0];
+      w1[0] = append0[1];
+      w1[1] = append0[2];
+      w1[2] = append0[3];
+      w1[3] = append1[0];
+      w2[0] = append1[1];
+      w2[1] = append1[2];
+      w2[2] = append1[3];
+      w2[3] = append2[0];
       break;
 
     case 13:
-      dst0[3] = src_l0[3]       | src_r0[0] <<  8;
-      dst1[0] = src_r0[0] >> 24 | src_r0[1] <<  8;
-      dst1[1] = src_r0[1] >> 24 | src_r0[2] <<  8;
-      dst1[2] = src_r0[2] >> 24 | src_r0[3] <<  8;
-      dst1[3] = src_r0[3] >> 24;
+      w0[3] = w0[3]            | append0[0] <<  8;
+      w1[0] = append0[0] >> 24 | append0[1] <<  8;
+      w1[1] = append0[1] >> 24 | append0[2] <<  8;
+      w1[2] = append0[2] >> 24 | append0[3] <<  8;
+      w1[3] = append0[3] >> 24 | append1[0] <<  8;
+      w2[0] = append1[0] >> 24 | append1[1] <<  8;
+      w2[1] = append1[1] >> 24 | append1[2] <<  8;
+      w2[2] = append1[2] >> 24 | append1[3] <<  8;
+      w2[3] = append1[3] >> 24 | append2[0] <<  8;
+      w3[0] = append2[0] >> 24;
       break;
 
     case 14:
-      dst0[3] = src_l0[3]       | src_r0[0] << 16;
-      dst1[0] = src_r0[0] >> 16 | src_r0[1] << 16;
-      dst1[1] = src_r0[1] >> 16 | src_r0[2] << 16;
-      dst1[2] = src_r0[2] >> 16 | src_r0[3] << 16;
-      dst1[3] = src_r0[3] >> 16;
+      w0[3] = w0[3]            | append0[0] << 16;
+      w1[0] = append0[0] >> 16 | append0[1] << 16;
+      w1[1] = append0[1] >> 16 | append0[2] << 16;
+      w1[2] = append0[2] >> 16 | append0[3] << 16;
+      w1[3] = append0[3] >> 16 | append1[0] << 16;
+      w2[0] = append1[0] >> 16 | append1[1] << 16;
+      w2[1] = append1[1] >> 16 | append1[2] << 16;
+      w2[2] = append1[2] >> 16 | append1[3] << 16;
+      w2[3] = append1[3] >> 16 | append2[0] << 16;
+      w3[0] = append2[0] >> 16;
       break;
 
     case 15:
-      dst0[3] = src_l0[3]       | src_r0[0] << 24;
-      dst1[0] = src_r0[0] >>  8 | src_r0[1] << 24;
-      dst1[1] = src_r0[1] >>  8 | src_r0[2] << 24;
-      dst1[2] = src_r0[2] >>  8 | src_r0[3] << 24;
-      dst1[3] = src_r0[3] >>  8;
+      w0[3] = w0[3]            | append0[0] << 24;
+      w1[0] = append0[0] >>  8 | append0[1] << 24;
+      w1[1] = append0[1] >>  8 | append0[2] << 24;
+      w1[2] = append0[2] >>  8 | append0[3] << 24;
+      w1[3] = append0[3] >>  8 | append1[0] << 24;
+      w2[0] = append1[0] >>  8 | append1[1] << 24;
+      w2[1] = append1[1] >>  8 | append1[2] << 24;
+      w2[2] = append1[2] >>  8 | append1[3] << 24;
+      w2[3] = append1[3] >>  8 | append2[0] << 24;
+      w3[0] = append2[0] >>  8;
       break;
 
     case 16:
-      dst1[0] = src_r0[0];
-      dst1[1] = src_r0[1];
-      dst1[2] = src_r0[2];
-      dst1[3] = src_r0[3];
+      w1[0] = append0[0];
+      w1[1] = append0[1];
+      w1[2] = append0[2];
+      w1[3] = append0[3];
+      w2[0] = append1[0];
+      w2[1] = append1[1];
+      w2[2] = append1[2];
+      w2[3] = append1[3];
+      w3[0] = append2[0];
       break;
 
     case 17:
-      dst1[0] = src_l1[0]       | src_r0[0] <<  8;
-      dst1[1] = src_r0[0] >> 24 | src_r0[1] <<  8;
-      dst1[2] = src_r0[1] >> 24 | src_r0[2] <<  8;
-      dst1[3] = src_r0[2] >> 24 | src_r0[3] <<  8;
-      dst2[0] = src_r0[3] >> 24;
+      w1[0] = w1[0]            | append0[0] <<  8;
+      w1[1] = append0[0] >> 24 | append0[1] <<  8;
+      w1[2] = append0[1] >> 24 | append0[2] <<  8;
+      w1[3] = append0[2] >> 24 | append0[3] <<  8;
+      w2[0] = append0[3] >> 24 | append1[0] <<  8;
+      w2[1] = append1[0] >> 24 | append1[1] <<  8;
+      w2[2] = append1[1] >> 24 | append1[2] <<  8;
+      w2[3] = append1[2] >> 24 | append1[3] <<  8;
+      w3[0] = append1[3] >> 24 | append2[0] <<  8;
+      w3[1] = append2[0] >> 24;
       break;
 
     case 18:
-      dst1[0] = src_l1[0]       | src_r0[0] << 16;
-      dst1[1] = src_r0[0] >> 16 | src_r0[1] << 16;
-      dst1[2] = src_r0[1] >> 16 | src_r0[2] << 16;
-      dst1[3] = src_r0[2] >> 16 | src_r0[3] << 16;
-      dst2[0] = src_r0[3] >> 16;
+      w1[0] = w1[0]            | append0[0] << 16;
+      w1[1] = append0[0] >> 16 | append0[1] << 16;
+      w1[2] = append0[1] >> 16 | append0[2] << 16;
+      w1[3] = append0[2] >> 16 | append0[3] << 16;
+      w2[0] = append0[3] >> 16 | append1[0] << 16;
+      w2[1] = append1[0] >> 16 | append1[1] << 16;
+      w2[2] = append1[1] >> 16 | append1[2] << 16;
+      w2[3] = append1[2] >> 16 | append1[3] << 16;
+      w3[0] = append1[3] >> 16 | append2[0] << 16;
+      w3[1] = append2[0] >> 16;
       break;
 
     case 19:
-      dst1[0] = src_l1[0]       | src_r0[0] << 24;
-      dst1[1] = src_r0[0] >>  8 | src_r0[1] << 24;
-      dst1[2] = src_r0[1] >>  8 | src_r0[2] << 24;
-      dst1[3] = src_r0[2] >>  8 | src_r0[3] << 24;
-      dst2[0] = src_r0[3] >>  8;
-      break;
-
-    case 20:
-      dst1[1] = src_r0[0];
-      dst1[2] = src_r0[1];
-      dst1[3] = src_r0[2];
-      dst2[0] = src_r0[3];
+      w1[0] = w1[0]            | append0[0] << 24;
+      w1[1] = append0[0] >>  8 | append0[1] << 24;
+      w1[2] = append0[1] >>  8 | append0[2] << 24;
+      w1[3] = append0[2] >>  8 | append0[3] << 24;
+      w2[0] = append0[3] >>  8 | append1[0] << 24;
+      w2[1] = append1[0] >>  8 | append1[1] << 24;
+      w2[2] = append1[1] >>  8 | append1[2] << 24;
+      w2[3] = append1[2] >>  8 | append1[3] << 24;
+      w3[0] = append1[3] >>  8 | append2[0] << 24;
+      w3[1] = append2[0] >>  8;
+      break;
+
+    case 20:
+      w1[1] = append0[0];
+      w1[2] = append0[1];
+      w1[3] = append0[2];
+      w2[0] = append0[3];
+      w2[1] = append1[0];
+      w2[2] = append1[1];
+      w2[3] = append1[2];
+      w3[0] = append1[3];
+      w3[1] = append2[0];
       break;
 
     case 21:
-      dst1[1] = src_l1[1]       | src_r0[0] <<  8;
-      dst1[2] = src_r0[0] >> 24 | src_r0[1] <<  8;
-      dst1[3] = src_r0[1] >> 24 | src_r0[2] <<  8;
-      dst2[0] = src_r0[2] >> 24 | src_r0[3] <<  8;
-      dst2[1] = src_r0[3] >> 24;
+      w1[1] = w1[1]            | append0[0] <<  8;
+      w1[2] = append0[0] >> 24 | append0[1] <<  8;
+      w1[3] = append0[1] >> 24 | append0[2] <<  8;
+      w2[0] = append0[2] >> 24 | append0[3] <<  8;
+      w2[1] = append0[3] >> 24 | append1[0] <<  8;
+      w2[2] = append1[0] >> 24 | append1[1] <<  8;
+      w2[3] = append1[1] >> 24 | append1[2] <<  8;
+      w3[0] = append1[2] >> 24 | append1[3] <<  8;
+      w3[1] = append1[3] >> 24 | append2[0] <<  8;
       break;
 
     case 22:
-      dst1[1] = src_l1[1]       | src_r0[0] << 16;
-      dst1[2] = src_r0[0] >> 16 | src_r0[1] << 16;
-      dst1[3] = src_r0[1] >> 16 | src_r0[2] << 16;
-      dst2[0] = src_r0[2] >> 16 | src_r0[3] << 16;
-      dst2[1] = src_r0[3] >> 16;
+      w1[1] = w1[1]            | append0[0] << 16;
+      w1[2] = append0[0] >> 16 | append0[1] << 16;
+      w1[3] = append0[1] >> 16 | append0[2] << 16;
+      w2[0] = append0[2] >> 16 | append0[3] << 16;
+      w2[1] = append0[3] >> 16 | append1[0] << 16;
+      w2[2] = append1[0] >> 16 | append1[1] << 16;
+      w2[3] = append1[1] >> 16 | append1[2] << 16;
+      w3[0] = append1[2] >> 16 | append1[3] << 16;
+      w3[1] = append1[3] >> 16 | append2[0] << 16;
       break;
 
     case 23:
-      dst1[1] = src_l1[1]       | src_r0[0] << 24;
-      dst1[2] = src_r0[0] >>  8 | src_r0[1] << 24;
-      dst1[3] = src_r0[1] >>  8 | src_r0[2] << 24;
-      dst2[0] = src_r0[2] >>  8 | src_r0[3] << 24;
-      dst2[1] = src_r0[3] >>  8;
+      w1[1] = w1[1]            | append0[0] << 24;
+      w1[2] = append0[0] >>  8 | append0[1] << 24;
+      w1[3] = append0[1] >>  8 | append0[2] << 24;
+      w2[0] = append0[2] >>  8 | append0[3] << 24;
+      w2[1] = append0[3] >>  8 | append1[0] << 24;
+      w2[2] = append1[0] >>  8 | append1[1] << 24;
+      w2[3] = append1[1] >>  8 | append1[2] << 24;
+      w3[0] = append1[2] >>  8 | append1[3] << 24;
+      w3[1] = append1[3] >>  8 | append2[0] << 24;
       break;
 
     case 24:
-      dst1[2] = src_r0[0];
-      dst1[3] = src_r0[1];
-      dst2[0] = src_r0[2];
-      dst2[1] = src_r0[3];
+      w1[2] = append0[0];
+      w1[3] = append0[1];
+      w2[0] = append0[2];
+      w2[1] = append0[3];
+      w2[2] = append1[0];
+      w2[3] = append1[1];
+      w3[0] = append1[2];
+      w3[1] = append1[3];
       break;
 
     case 25:
-      dst1[2] = src_l1[2]       | src_r0[0] <<  8;
-      dst1[3] = src_r0[0] >> 24 | src_r0[1] <<  8;
-      dst2[0] = src_r0[1] >> 24 | src_r0[2] <<  8;
-      dst2[1] = src_r0[2] >> 24 | src_r0[3] <<  8;
-      dst2[2] = src_r0[3] >> 24;
+      w1[2] = w1[2]            | append0[0] <<  8;
+      w1[3] = append0[0] >> 24 | append0[1] <<  8;
+      w2[0] = append0[1] >> 24 | append0[2] <<  8;
+      w2[1] = append0[2] >> 24 | append0[3] <<  8;
+      w2[2] = append0[3] >> 24 | append1[0] <<  8;
+      w2[3] = append1[0] >> 24 | append1[1] <<  8;
+      w3[0] = append1[1] >> 24 | append1[2] <<  8;
+      w3[1] = append1[2] >> 24 | append1[3] <<  8;
       break;
 
     case 26:
-      dst1[2] = src_l1[2]       | src_r0[0] << 16;
-      dst1[3] = src_r0[0] >> 16 | src_r0[1] << 16;
-      dst2[0] = src_r0[1] >> 16 | src_r0[2] << 16;
-      dst2[1] = src_r0[2] >> 16 | src_r0[3] << 16;
-      dst2[2] = src_r0[3] >> 16;
+      w1[2] = w1[2]            | append0[0] << 16;
+      w1[3] = append0[0] >> 16 | append0[1] << 16;
+      w2[0] = append0[1] >> 16 | append0[2] << 16;
+      w2[1] = append0[2] >> 16 | append0[3] << 16;
+      w2[2] = append0[3] >> 16 | append1[0] << 16;
+      w2[3] = append1[0] >> 16 | append1[1] << 16;
+      w3[0] = append1[1] >> 16 | append1[2] << 16;
+      w3[1] = append1[2] >> 16 | append1[3] << 16;
       break;
 
     case 27:
-      dst1[2] = src_l1[2]       | src_r0[0] << 24;
-      dst1[3] = src_r0[0] >>  8 | src_r0[1] << 24;
-      dst2[0] = src_r0[1] >>  8 | src_r0[2] << 24;
-      dst2[1] = src_r0[2] >>  8 | src_r0[3] << 24;
-      dst2[2] = src_r0[3] >>  8;
+      w1[2] = w1[2]            | append0[0] << 24;
+      w1[3] = append0[0] >>  8 | append0[1] << 24;
+      w2[0] = append0[1] >>  8 | append0[2] << 24;
+      w2[1] = append0[2] >>  8 | append0[3] << 24;
+      w2[2] = append0[3] >>  8 | append1[0] << 24;
+      w2[3] = append1[0] >>  8 | append1[1] << 24;
+      w3[0] = append1[1] >>  8 | append1[2] << 24;
+      w3[1] = append1[2] >>  8 | append1[3] << 24;
       break;
 
     case 28:
-      dst1[3] = src_r0[0];
-      dst2[0] = src_r0[1];
-      dst2[1] = src_r0[2];
-      dst2[2] = src_r0[3];
+      w1[3] = append0[0];
+      w2[0] = append0[1];
+      w2[1] = append0[2];
+      w2[2] = append0[3];
+      w2[3] = append1[0];
+      w3[0] = append1[1];
+      w3[1] = append1[2];
       break;
 
     case 29:
-      dst1[3] = src_l1[3]       | src_r0[0] <<  8;
-      dst2[0] = src_r0[0] >> 24 | src_r0[1] <<  8;
-      dst2[1] = src_r0[1] >> 24 | src_r0[2] <<  8;
-      dst2[2] = src_r0[2] >> 24 | src_r0[3] <<  8;
-      dst2[3] = src_r0[3] >> 24;
+      w1[3] = w1[3]            | append0[0] <<  8;
+      w2[0] = append0[0] >> 24 | append0[1] <<  8;
+      w2[1] = append0[1] >> 24 | append0[2] <<  8;
+      w2[2] = append0[2] >> 24 | append0[3] <<  8;
+      w2[3] = append0[3] >> 24 | append1[0] <<  8;
+      w3[0] = append1[0] >> 24 | append1[1] <<  8;
+      w3[1] = append1[1] >> 24 | append1[2] <<  8;
       break;
 
     case 30:
-      dst1[3] = src_l1[3]       | src_r0[0] << 16;
-      dst2[0] = src_r0[0] >> 16 | src_r0[1] << 16;
-      dst2[1] = src_r0[1] >> 16 | src_r0[2] << 16;
-      dst2[2] = src_r0[2] >> 16 | src_r0[3] << 16;
-      dst2[3] = src_r0[3] >> 16;
+      w1[3] = w1[3]            | append0[0] << 16;
+      w2[0] = append0[0] >> 16 | append0[1] << 16;
+      w2[1] = append0[1] >> 16 | append0[2] << 16;
+      w2[2] = append0[2] >> 16 | append0[3] << 16;
+      w2[3] = append0[3] >> 16 | append1[0] << 16;
+      w3[0] = append1[0] >> 16 | append1[1] << 16;
+      w3[1] = append1[1] >> 16 | append1[2] << 16;
       break;
 
     case 31:
-      dst1[3] = src_l1[3]       | src_r0[0] << 24;
-      dst2[0] = src_r0[0] >>  8 | src_r0[1] << 24;
-      dst2[1] = src_r0[1] >>  8 | src_r0[2] << 24;
-      dst2[2] = src_r0[2] >>  8 | src_r0[3] << 24;
-      dst2[3] = src_r0[3] >>  8;
+      w1[3] = w1[3]            | append0[0] << 24;
+      w2[0] = append0[0] >>  8 | append0[1] << 24;
+      w2[1] = append0[1] >>  8 | append0[2] << 24;
+      w2[2] = append0[2] >>  8 | append0[3] << 24;
+      w2[3] = append0[3] >>  8 | append1[0] << 24;
+      w3[0] = append1[0] >>  8 | append1[1] << 24;
+      w3[1] = append1[1] >>  8 | append1[2] << 24;
       break;
 
     case 32:
-      dst2[0] = src_r0[0];
-      dst2[1] = src_r0[1];
-      dst2[2] = src_r0[2];
-      dst2[3] = src_r0[3];
-      break;
-
-    case 33:
-      dst2[0] = src_l2[0]       | src_r0[0] <<  8;
-      dst2[1] = src_r0[0] >> 24 | src_r0[1] <<  8;
-      dst2[2] = src_r0[1] >> 24 | src_r0[2] <<  8;
-      dst2[3] = src_r0[2] >> 24 | src_r0[3] <<  8;
-      break;
-
-    case 34:
-      dst2[0] = src_l2[0]       | src_r0[0] << 16;
-      dst2[1] = src_r0[0] >> 16 | src_r0[1] << 16;
-      dst2[2] = src_r0[1] >> 16 | src_r0[2] << 16;
-      dst2[3] = src_r0[2] >> 16 | src_r0[3] << 16;
+      w2[0] = append0[0];
+      w2[1] = append0[1];
+      w2[2] = append0[2];
+      w2[3] = append0[3];
+      w3[0] = append1[0];
+      w3[1] = append1[1];
       break;
+  }
+}
 
-    case 35:
-      dst2[0] = src_l2[0]       | src_r0[0] << 24;
-      dst2[1] = src_r0[0] >>  8 | src_r0[1] << 24;
-      dst2[2] = src_r0[1] >>  8 | src_r0[2] << 24;
-      dst2[3] = src_r0[2] >>  8 | src_r0[3] << 24;
-      break;
+static void switch_buffer_by_offset (u32 w0[4], u32 w1[4], u32 w2[4], u32 w3[4], const u32 offset)
+{
+  #ifdef IS_AMD
+  const int offset_mod_4 = offset & 3;
 
-    case 36:
-      dst2[1] = src_r0[0];
-      dst2[2] = src_r0[1];
-      dst2[3] = src_r0[2];
-      break;
+  const int offset_minus_4 = 4 - offset;
 
-    case 37:
-      dst2[1] = src_l2[1]       | src_r0[0] <<  8;
-      dst2[2] = src_r0[0] >> 24 | src_r0[1] <<  8;
-      dst2[3] = src_r0[1] >> 24 | src_r0[2] <<  8;
-      break;
+  switch (offset / 4)
+  {
+    case 0:
+      w3[2] = amd_bytealign (    0, w3[1], offset_minus_4);
+      w3[1] = amd_bytealign (w3[1], w3[0], offset_minus_4);
+      w3[0] = amd_bytealign (w3[0], w2[3], offset_minus_4);
+      w2[3] = amd_bytealign (w2[3], w2[2], offset_minus_4);
+      w2[2] = amd_bytealign (w2[2], w2[1], offset_minus_4);
+      w2[1] = amd_bytealign (w2[1], w2[0], offset_minus_4);
+      w2[0] = amd_bytealign (w2[0], w1[3], offset_minus_4);
+      w1[3] = amd_bytealign (w1[3], w1[2], offset_minus_4);
+      w1[2] = amd_bytealign (w1[2], w1[1], offset_minus_4);
+      w1[1] = amd_bytealign (w1[1], w1[0], offset_minus_4);
+      w1[0] = amd_bytealign (w1[0], w0[3], offset_minus_4);
+      w0[3] = amd_bytealign (w0[3], w0[2], offset_minus_4);
+      w0[2] = amd_bytealign (w0[2], w0[1], offset_minus_4);
+      w0[1] = amd_bytealign (w0[1], w0[0], offset_minus_4);
+      w0[0] = amd_bytealign (w0[0],     0, offset_minus_4);
 
-    case 38:
-      dst2[1] = src_l2[1]       | src_r0[0] << 16;
-      dst2[2] = src_r0[0] >> 16 | src_r0[1] << 16;
-      dst2[3] = src_r0[1] >> 16 | src_r0[2] << 16;
-      break;
+      if (offset_mod_4 == 0)
+      {
+        w0[0] = w0[1];
+        w0[1] = w0[2];
+        w0[2] = w0[3];
+        w0[3] = w1[0];
+        w1[0] = w1[1];
+        w1[1] = w1[2];
+        w1[2] = w1[3];
+        w1[3] = w2[0];
+        w2[0] = w2[1];
+        w2[1] = w2[2];
+        w2[2] = w2[3];
+        w2[3] = w3[0];
+        w3[0] = w3[1];
+        w3[1] = w3[2];
+        w3[2] = 0;
+      }
 
-    case 39:
-      dst2[1] = src_l2[1]       | src_r0[0] << 24;
-      dst2[2] = src_r0[0] >>  8 | src_r0[1] << 24;
-      dst2[3] = src_r0[1] >>  8 | src_r0[2] << 24;
       break;
 
-    case 40:
-      dst2[2] = src_r0[0];
-      dst2[3] = src_r0[1];
+    case 1:
+      w3[2] = amd_bytealign (    0, w3[0], offset_minus_4);
+      w3[1] = amd_bytealign (w3[0], w2[3], offset_minus_4);
+      w3[0] = amd_bytealign (w2[3], w2[2], offset_minus_4);
+      w2[3] = amd_bytealign (w2[2], w2[1], offset_minus_4);
+      w2[2] = amd_bytealign (w2[1], w2[0], offset_minus_4);
+      w2[1] = amd_bytealign (w2[0], w1[3], offset_minus_4);
+      w2[0] = amd_bytealign (w1[3], w1[2], offset_minus_4);
+      w1[3] = amd_bytealign (w1[2], w1[1], offset_minus_4);
+      w1[2] = amd_bytealign (w1[1], w1[0], offset_minus_4);
+      w1[1] = amd_bytealign (w1[0], w0[3], offset_minus_4);
+      w1[0] = amd_bytealign (w0[3], w0[2], offset_minus_4);
+      w0[3] = amd_bytealign (w0[2], w0[1], offset_minus_4);
+      w0[2] = amd_bytealign (w0[1], w0[0], offset_minus_4);
+      w0[1] = amd_bytealign (w0[0],     0, offset_minus_4);
+      w0[0] = 0;
+
+      if (offset_mod_4 == 0)
+      {
+        w0[1] = w0[2];
+        w0[2] = w0[3];
+        w0[3] = w1[0];
+        w1[0] = w1[1];
+        w1[1] = w1[2];
+        w1[2] = w1[3];
+        w1[3] = w2[0];
+        w2[0] = w2[1];
+        w2[1] = w2[2];
+        w2[2] = w2[3];
+        w2[3] = w3[0];
+        w3[0] = w3[1];
+        w3[1] = w3[2];
+        w3[2] = 0;
+      }
+
+      break;
+
+    case 2:
+      w3[2] = amd_bytealign (    0, w2[3], offset_minus_4);
+      w3[1] = amd_bytealign (w2[3], w2[2], offset_minus_4);
+      w3[0] = amd_bytealign (w2[2], w2[1], offset_minus_4);
+      w2[3] = amd_bytealign (w2[1], w2[0], offset_minus_4);
+      w2[2] = amd_bytealign (w2[0], w1[3], offset_minus_4);
+      w2[1] = amd_bytealign (w1[3], w1[2], offset_minus_4);
+      w2[0] = amd_bytealign (w1[2], w1[1], offset_minus_4);
+      w1[3] = amd_bytealign (w1[1], w1[0], offset_minus_4);
+      w1[2] = amd_bytealign (w1[0], w0[3], offset_minus_4);
+      w1[1] = amd_bytealign (w0[3], w0[2], offset_minus_4);
+      w1[0] = amd_bytealign (w0[2], w0[1], offset_minus_4);
+      w0[3] = amd_bytealign (w0[1], w0[0], offset_minus_4);
+      w0[2] = amd_bytealign (w0[0],     0, offset_minus_4);
+      w0[1] = 0;
+      w0[0] = 0;
+
+      if (offset_mod_4 == 0)
+      {
+        w0[2] = w0[3];
+        w0[3] = w1[0];
+        w1[0] = w1[1];
+        w1[1] = w1[2];
+        w1[2] = w1[3];
+        w1[3] = w2[0];
+        w2[0] = w2[1];
+        w2[1] = w2[2];
+        w2[2] = w2[3];
+        w2[3] = w3[0];
+        w3[0] = w3[1];
+        w3[1] = w3[2];
+        w3[2] = 0;
+      }
+
+      break;
+
+    case 3:
+      w3[2] = amd_bytealign (    0, w2[2], offset_minus_4);
+      w3[1] = amd_bytealign (w2[2], w2[1], offset_minus_4);
+      w3[0] = amd_bytealign (w2[1], w2[0], offset_minus_4);
+      w2[3] = amd_bytealign (w2[0], w1[3], offset_minus_4);
+      w2[2] = amd_bytealign (w1[3], w1[2], offset_minus_4);
+      w2[1] = amd_bytealign (w1[2], w1[1], offset_minus_4);
+      w2[0] = amd_bytealign (w1[1], w1[0], offset_minus_4);
+      w1[3] = amd_bytealign (w1[0], w0[3], offset_minus_4);
+      w1[2] = amd_bytealign (w0[3], w0[2], offset_minus_4);
+      w1[1] = amd_bytealign (w0[2], w0[1], offset_minus_4);
+      w1[0] = amd_bytealign (w0[1], w0[0], offset_minus_4);
+      w0[3] = amd_bytealign (w0[0],     0, offset_minus_4);
+      w0[2] = 0;
+      w0[1] = 0;
+      w0[0] = 0;
+
+      if (offset_mod_4 == 0)
+      {
+        w0[3] = w1[0];
+        w1[0] = w1[1];
+        w1[1] = w1[2];
+        w1[2] = w1[3];
+        w1[3] = w2[0];
+        w2[0] = w2[1];
+        w2[1] = w2[2];
+        w2[2] = w2[3];
+        w2[3] = w3[0];
+        w3[0] = w3[1];
+        w3[1] = w3[2];
+        w3[2] = 0;
+      }
+
+      break;
+
+    case 4:
+      w3[2] = amd_bytealign (    0, w2[1], offset_minus_4);
+      w3[1] = amd_bytealign (w2[1], w2[0], offset_minus_4);
+      w3[0] = amd_bytealign (w2[0], w1[3], offset_minus_4);
+      w2[3] = amd_bytealign (w1[3], w1[2], offset_minus_4);
+      w2[2] = amd_bytealign (w1[2], w1[1], offset_minus_4);
+      w2[1] = amd_bytealign (w1[1], w1[0], offset_minus_4);
+      w2[0] = amd_bytealign (w1[0], w0[3], offset_minus_4);
+      w1[3] = amd_bytealign (w0[3], w0[2], offset_minus_4);
+      w1[2] = amd_bytealign (w0[2], w0[1], offset_minus_4);
+      w1[1] = amd_bytealign (w0[1], w0[0], offset_minus_4);
+      w1[0] = amd_bytealign (w0[0],     0, offset_minus_4);
+      w0[3] = 0;
+      w0[2] = 0;
+      w0[1] = 0;
+      w0[0] = 0;
+
+      if (offset_mod_4 == 0)
+      {
+        w1[0] = w1[1];
+        w1[1] = w1[2];
+        w1[2] = w1[3];
+        w1[3] = w2[0];
+        w2[0] = w2[1];
+        w2[1] = w2[2];
+        w2[2] = w2[3];
+        w2[3] = w3[0];
+        w3[0] = w3[1];
+        w3[1] = w3[2];
+        w3[2] = 0;
+      }
+
+      break;
+
+    case 5:
+      w3[2] = amd_bytealign (    0, w2[0], offset_minus_4);
+      w3[1] = amd_bytealign (w2[0], w1[3], offset_minus_4);
+      w3[0] = amd_bytealign (w1[3], w1[2], offset_minus_4);
+      w2[3] = amd_bytealign (w1[2], w1[1], offset_minus_4);
+      w2[2] = amd_bytealign (w1[1], w1[0], offset_minus_4);
+      w2[1] = amd_bytealign (w1[0], w0[3], offset_minus_4);
+      w2[0] = amd_bytealign (w0[3], w0[2], offset_minus_4);
+      w1[3] = amd_bytealign (w0[2], w0[1], offset_minus_4);
+      w1[2] = amd_bytealign (w0[1], w0[0], offset_minus_4);
+      w1[1] = amd_bytealign (w0[0],     0, offset_minus_4);
+      w1[0] = 0;
+      w0[3] = 0;
+      w0[2] = 0;
+      w0[1] = 0;
+      w0[0] = 0;
+
+      if (offset_mod_4 == 0)
+      {
+        w1[1] = w1[2];
+        w1[2] = w1[3];
+        w1[3] = w2[0];
+        w2[0] = w2[1];
+        w2[1] = w2[2];
+        w2[2] = w2[3];
+        w2[3] = w3[0];
+        w3[0] = w3[1];
+        w3[1] = w3[2];
+        w3[2] = 0;
+      }
+
+      break;
+
+    case 6:
+      w3[2] = amd_bytealign (    0, w1[3], offset_minus_4);
+      w3[1] = amd_bytealign (w1[3], w1[2], offset_minus_4);
+      w3[0] = amd_bytealign (w1[2], w1[1], offset_minus_4);
+      w2[3] = amd_bytealign (w1[1], w1[0], offset_minus_4);
+      w2[2] = amd_bytealign (w1[0], w0[3], offset_minus_4);
+      w2[1] = amd_bytealign (w0[3], w0[2], offset_minus_4);
+      w2[0] = amd_bytealign (w0[2], w0[1], offset_minus_4);
+      w1[3] = amd_bytealign (w0[1], w0[0], offset_minus_4);
+      w1[2] = amd_bytealign (w0[0],     0, offset_minus_4);
+      w1[1] = 0;
+      w1[0] = 0;
+      w0[3] = 0;
+      w0[2] = 0;
+      w0[1] = 0;
+      w0[0] = 0;
+
+      if (offset_mod_4 == 0)
+      {
+        w1[2] = w1[3];
+        w1[3] = w2[0];
+        w2[0] = w2[1];
+        w2[1] = w2[2];
+        w2[2] = w2[3];
+        w2[3] = w3[0];
+        w3[0] = w3[1];
+        w3[1] = w3[2];
+        w3[2] = 0;
+      }
+
+      break;
+
+    case 7:
+      w3[2] = amd_bytealign (    0, w1[2], offset_minus_4);
+      w3[1] = amd_bytealign (w1[2], w1[1], offset_minus_4);
+      w3[0] = amd_bytealign (w1[1], w1[0], offset_minus_4);
+      w2[3] = amd_bytealign (w1[0], w0[3], offset_minus_4);
+      w2[2] = amd_bytealign (w0[3], w0[2], offset_minus_4);
+      w2[1] = amd_bytealign (w0[2], w0[1], offset_minus_4);
+      w2[0] = amd_bytealign (w0[1], w0[0], offset_minus_4);
+      w1[3] = amd_bytealign (w0[0],     0, offset_minus_4);
+      w1[2] = 0;
+      w1[1] = 0;
+      w1[0] = 0;
+      w0[3] = 0;
+      w0[2] = 0;
+      w0[1] = 0;
+      w0[0] = 0;
+
+      if (offset_mod_4 == 0)
+      {
+        w1[3] = w2[0];
+        w2[0] = w2[1];
+        w2[1] = w2[2];
+        w2[2] = w2[3];
+        w2[3] = w3[0];
+        w3[0] = w3[1];
+        w3[1] = w3[2];
+        w3[2] = 0;
+      }
+
+      break;
+
+    case 8:
+      w3[2] = amd_bytealign (    0, w1[1], offset_minus_4);
+      w3[1] = amd_bytealign (w1[1], w1[0], offset_minus_4);
+      w3[0] = amd_bytealign (w1[0], w0[3], offset_minus_4);
+      w2[3] = amd_bytealign (w0[3], w0[2], offset_minus_4);
+      w2[2] = amd_bytealign (w0[2], w0[1], offset_minus_4);
+      w2[1] = amd_bytealign (w0[1], w0[0], offset_minus_4);
+      w2[0] = amd_bytealign (w0[0],     0, offset_minus_4);
+      w1[3] = 0;
+      w1[2] = 0;
+      w1[1] = 0;
+      w1[0] = 0;
+      w0[3] = 0;
+      w0[2] = 0;
+      w0[1] = 0;
+      w0[0] = 0;
+
+      if (offset_mod_4 == 0)
+      {
+        w2[0] = w2[1];
+        w2[1] = w2[2];
+        w2[2] = w2[3];
+        w2[3] = w3[0];
+        w3[0] = w3[1];
+        w3[1] = w3[2];
+        w3[2] = 0;
+      }
+
+      break;
+
+    case 9:
+      w3[2] = amd_bytealign (    0, w1[0], offset_minus_4);
+      w3[1] = amd_bytealign (w1[0], w0[3], offset_minus_4);
+      w3[0] = amd_bytealign (w0[3], w0[2], offset_minus_4);
+      w2[3] = amd_bytealign (w0[2], w0[1], offset_minus_4);
+      w2[2] = amd_bytealign (w0[1], w0[0], offset_minus_4);
+      w2[1] = amd_bytealign (w0[0],     0, offset_minus_4);
+      w2[0] = 0;
+      w1[3] = 0;
+      w1[2] = 0;
+      w1[1] = 0;
+      w1[0] = 0;
+      w0[3] = 0;
+      w0[2] = 0;
+      w0[1] = 0;
+      w0[0] = 0;
+
+      if (offset_mod_4 == 0)
+      {
+        w2[1] = w2[2];
+        w2[2] = w2[3];
+        w2[3] = w3[0];
+        w3[0] = w3[1];
+        w3[1] = w3[2];
+        w3[2] = 0;
+      }
+
+      break;
+
+    case 10:
+      w3[2] = amd_bytealign (    0, w0[3], offset_minus_4);
+      w3[1] = amd_bytealign (w0[3], w0[2], offset_minus_4);
+      w3[0] = amd_bytealign (w0[2], w0[1], offset_minus_4);
+      w2[3] = amd_bytealign (w0[1], w0[0], offset_minus_4);
+      w2[2] = amd_bytealign (w0[0],     0, offset_minus_4);
+      w2[1] = 0;
+      w2[0] = 0;
+      w1[3] = 0;
+      w1[2] = 0;
+      w1[1] = 0;
+      w1[0] = 0;
+      w0[3] = 0;
+      w0[2] = 0;
+      w0[1] = 0;
+      w0[0] = 0;
+
+      if (offset_mod_4 == 0)
+      {
+        w2[2] = w2[3];
+        w2[3] = w3[0];
+        w3[0] = w3[1];
+        w3[1] = w3[2];
+        w3[2] = 0;
+      }
+
+      break;
+
+    case 11:
+      w3[2] = amd_bytealign (    0, w0[2], offset_minus_4);
+      w3[1] = amd_bytealign (w0[2], w0[1], offset_minus_4);
+      w3[0] = amd_bytealign (w0[1], w0[0], offset_minus_4);
+      w2[3] = amd_bytealign (w0[0],     0, offset_minus_4);
+      w2[2] = 0;
+      w2[1] = 0;
+      w2[0] = 0;
+      w1[3] = 0;
+      w1[2] = 0;
+      w1[1] = 0;
+      w1[0] = 0;
+      w0[3] = 0;
+      w0[2] = 0;
+      w0[1] = 0;
+      w0[0] = 0;
+
+      if (offset_mod_4 == 0)
+      {
+        w2[3] = w3[0];
+        w3[0] = w3[1];
+        w3[1] = w3[2];
+        w3[2] = 0;
+      }
+
+      break;
+
+    case 12:
+      w3[2] = amd_bytealign (    0, w0[1], offset_minus_4);
+      w3[1] = amd_bytealign (w0[1], w0[0], offset_minus_4);
+      w3[0] = amd_bytealign (w0[0],     0, offset_minus_4);
+      w2[3] = 0;
+      w2[2] = 0;
+      w2[1] = 0;
+      w2[0] = 0;
+      w1[3] = 0;
+      w1[2] = 0;
+      w1[1] = 0;
+      w1[0] = 0;
+      w0[3] = 0;
+      w0[2] = 0;
+      w0[1] = 0;
+      w0[0] = 0;
+
+      if (offset_mod_4 == 0)
+      {
+        w3[0] = w3[1];
+        w3[1] = w3[2];
+        w3[2] = 0;
+      }
+
+      break;
+
+    case 13:
+      w3[2] = amd_bytealign (    0, w0[0], offset_minus_4);
+      w3[1] = amd_bytealign (w0[0],     0, offset_minus_4);
+      w3[0] = 0;
+      w2[3] = 0;
+      w2[2] = 0;
+      w2[1] = 0;
+      w2[0] = 0;
+      w1[3] = 0;
+      w1[2] = 0;
+      w1[1] = 0;
+      w1[0] = 0;
+      w0[3] = 0;
+      w0[2] = 0;
+      w0[1] = 0;
+      w0[0] = 0;
+
+      if (offset_mod_4 == 0)
+      {
+        w3[1] = w3[2];
+        w3[2] = 0;
+      }
+
+      break;
+  }
+  #endif
+
+  #ifdef IS_NV
+  const int offset_minus_4 = 4 - (offset % 4);
+
+  const int selector = (0x76543210 >> (offset_minus_4 * 4)) & 0xffff;
+
+  switch (offset / 4)
+  {
+    case 0:
+      w3[1] = __byte_perm (w3[0], w3[1], selector);
+      w3[0] = __byte_perm (w2[3], w3[0], selector);
+      w2[3] = __byte_perm (w2[2], w2[3], selector);
+      w2[2] = __byte_perm (w2[1], w2[2], selector);
+      w2[1] = __byte_perm (w2[0], w2[1], selector);
+      w2[0] = __byte_perm (w1[3], w2[0], selector);
+      w1[3] = __byte_perm (w1[2], w1[3], selector);
+      w1[2] = __byte_perm (w1[1], w1[2], selector);
+      w1[1] = __byte_perm (w1[0], w1[1], selector);
+      w1[0] = __byte_perm (w0[3], w1[0], selector);
+      w0[3] = __byte_perm (w0[2], w0[3], selector);
+      w0[2] = __byte_perm (w0[1], w0[2], selector);
+      w0[1] = __byte_perm (w0[0], w0[1], selector);
+      w0[0] = __byte_perm (    0, w0[0], selector);
+
+      break;
+
+    case 1:
+      w3[1] = __byte_perm (w2[3], w3[0], selector);
+      w3[0] = __byte_perm (w2[2], w2[3], selector);
+      w2[3] = __byte_perm (w2[1], w2[2], selector);
+      w2[2] = __byte_perm (w2[0], w2[1], selector);
+      w2[1] = __byte_perm (w1[3], w2[0], selector);
+      w2[0] = __byte_perm (w1[2], w1[3], selector);
+      w1[3] = __byte_perm (w1[1], w1[2], selector);
+      w1[2] = __byte_perm (w1[0], w1[1], selector);
+      w1[1] = __byte_perm (w0[3], w1[0], selector);
+      w1[0] = __byte_perm (w0[2], w0[3], selector);
+      w0[3] = __byte_perm (w0[1], w0[2], selector);
+      w0[2] = __byte_perm (w0[0], w0[1], selector);
+      w0[1] = __byte_perm (    0, w0[0], selector);
+      w0[0] = 0;
+
+      break;
+
+    case 2:
+      w3[1] = __byte_perm (w2[2], w2[3], selector);
+      w3[0] = __byte_perm (w2[1], w2[2], selector);
+      w2[3] = __byte_perm (w2[0], w2[1], selector);
+      w2[2] = __byte_perm (w1[3], w2[0], selector);
+      w2[1] = __byte_perm (w1[2], w1[3], selector);
+      w2[0] = __byte_perm (w1[1], w1[2], selector);
+      w1[3] = __byte_perm (w1[0], w1[1], selector);
+      w1[2] = __byte_perm (w0[3], w1[0], selector);
+      w1[1] = __byte_perm (w0[2], w0[3], selector);
+      w1[0] = __byte_perm (w0[1], w0[2], selector);
+      w0[3] = __byte_perm (w0[0], w0[1], selector);
+      w0[2] = __byte_perm (    0, w0[0], selector);
+      w0[1] = 0;
+      w0[0] = 0;
+
+      break;
+
+    case 3:
+      w3[1] = __byte_perm (w2[1], w2[2], selector);
+      w3[0] = __byte_perm (w2[0], w2[1], selector);
+      w2[3] = __byte_perm (w1[3], w2[0], selector);
+      w2[2] = __byte_perm (w1[2], w1[3], selector);
+      w2[1] = __byte_perm (w1[1], w1[2], selector);
+      w2[0] = __byte_perm (w1[0], w1[1], selector);
+      w1[3] = __byte_perm (w0[3], w1[0], selector);
+      w1[2] = __byte_perm (w0[2], w0[3], selector);
+      w1[1] = __byte_perm (w0[1], w0[2], selector);
+      w1[0] = __byte_perm (w0[0], w0[1], selector);
+      w0[3] = __byte_perm (    0, w0[0], selector);
+      w0[2] = 0;
+      w0[1] = 0;
+      w0[0] = 0;
+
+      break;
+
+    case 4:
+      w3[1] = __byte_perm (w2[0], w2[1], selector);
+      w3[0] = __byte_perm (w1[3], w2[0], selector);
+      w2[3] = __byte_perm (w1[2], w1[3], selector);
+      w2[2] = __byte_perm (w1[1], w1[2], selector);
+      w2[1] = __byte_perm (w1[0], w1[1], selector);
+      w2[0] = __byte_perm (w0[3], w1[0], selector);
+      w1[3] = __byte_perm (w0[2], w0[3], selector);
+      w1[2] = __byte_perm (w0[1], w0[2], selector);
+      w1[1] = __byte_perm (w0[0], w0[1], selector);
+      w1[0] = __byte_perm (    0, w0[0], selector);
+      w0[3] = 0;
+      w0[2] = 0;
+      w0[1] = 0;
+      w0[0] = 0;
+
       break;
 
-    case 41:
-      dst2[2] = src_l2[2]       | src_r0[0] <<  8;
-      dst2[3] = src_r0[0] >> 24 | src_r0[1] <<  8;
+    case 5:
+      w3[1] = __byte_perm (w1[3], w2[0], selector);
+      w3[0] = __byte_perm (w1[2], w1[3], selector);
+      w2[3] = __byte_perm (w1[1], w1[2], selector);
+      w2[2] = __byte_perm (w1[0], w1[1], selector);
+      w2[1] = __byte_perm (w0[3], w1[0], selector);
+      w2[0] = __byte_perm (w0[2], w0[3], selector);
+      w1[3] = __byte_perm (w0[1], w0[2], selector);
+      w1[2] = __byte_perm (w0[0], w0[1], selector);
+      w1[1] = __byte_perm (    0, w0[0], selector);
+      w1[0] = 0;
+      w0[3] = 0;
+      w0[2] = 0;
+      w0[1] = 0;
+      w0[0] = 0;
+
       break;
 
-    case 42:
-      dst2[2] = src_l2[2]       | src_r0[0] << 16;
-      dst2[3] = src_r0[0] >> 16 | src_r0[1] << 16;
+    case 6:
+      w3[1] = __byte_perm (w1[2], w1[3], selector);
+      w3[0] = __byte_perm (w1[1], w1[2], selector);
+      w2[3] = __byte_perm (w1[0], w1[1], selector);
+      w2[2] = __byte_perm (w0[3], w1[0], selector);
+      w2[1] = __byte_perm (w0[2], w0[3], selector);
+      w2[0] = __byte_perm (w0[1], w0[2], selector);
+      w1[3] = __byte_perm (w0[0], w0[1], selector);
+      w1[2] = __byte_perm (    0, w0[0], selector);
+      w1[1] = 0;
+      w1[0] = 0;
+      w0[3] = 0;
+      w0[2] = 0;
+      w0[1] = 0;
+      w0[0] = 0;
+
       break;
 
-    case 43:
-      dst2[2] = src_l2[2]       | src_r0[0] << 24;
-      dst2[3] = src_r0[0] >>  8 | src_r0[1] << 24;
+    case 7:
+      w3[1] = __byte_perm (w1[1], w1[2], selector);
+      w3[0] = __byte_perm (w1[0], w1[1], selector);
+      w2[3] = __byte_perm (w0[3], w1[0], selector);
+      w2[2] = __byte_perm (w0[2], w0[3], selector);
+      w2[1] = __byte_perm (w0[1], w0[2], selector);
+      w2[0] = __byte_perm (w0[0], w0[1], selector);
+      w1[3] = __byte_perm (    0, w0[0], selector);
+      w1[2] = 0;
+      w1[1] = 0;
+      w1[0] = 0;
+      w0[3] = 0;
+      w0[2] = 0;
+      w0[1] = 0;
+      w0[0] = 0;
+
       break;
 
-    case 44:
-      dst2[3] = src_r0[0];
+    case 8:
+      w3[1] = __byte_perm (w1[0], w1[1], selector);
+      w3[0] = __byte_perm (w0[3], w1[0], selector);
+      w2[3] = __byte_perm (w0[2], w0[3], selector);
+      w2[2] = __byte_perm (w0[1], w0[2], selector);
+      w2[1] = __byte_perm (w0[0], w0[1], selector);
+      w2[0] = __byte_perm (    0, w0[0], selector);
+      w1[3] = 0;
+      w1[2] = 0;
+      w1[1] = 0;
+      w1[0] = 0;
+      w0[3] = 0;
+      w0[2] = 0;
+      w0[1] = 0;
+      w0[0] = 0;
+
       break;
 
-    case 45:
-      dst2[3] = src_l2[3]       | src_r0[0] <<  8;
+    case 9:
+      w3[1] = __byte_perm (w0[3], w1[0], selector);
+      w3[0] = __byte_perm (w0[2], w0[3], selector);
+      w2[3] = __byte_perm (w0[1], w0[2], selector);
+      w2[2] = __byte_perm (w0[0], w0[1], selector);
+      w2[1] = __byte_perm (    0, w0[0], selector);
+      w2[0] = 0;
+      w1[3] = 0;
+      w1[2] = 0;
+      w1[1] = 0;
+      w1[0] = 0;
+      w0[3] = 0;
+      w0[2] = 0;
+      w0[1] = 0;
+      w0[0] = 0;
+
       break;
 
-    case 46:
-      dst2[3] = src_l2[3]       | src_r0[0] << 16;
+    case 10:
+      w3[1] = __byte_perm (w0[2], w0[3], selector);
+      w3[0] = __byte_perm (w0[1], w0[2], selector);
+      w2[3] = __byte_perm (w0[0], w0[1], selector);
+      w2[2] = __byte_perm (    0, w0[0], selector);
+      w2[1] = 0;
+      w2[0] = 0;
+      w1[3] = 0;
+      w1[2] = 0;
+      w1[1] = 0;
+      w1[0] = 0;
+      w0[3] = 0;
+      w0[2] = 0;
+      w0[1] = 0;
+      w0[0] = 0;
+
       break;
 
-    case 47:
-      dst2[3] = src_l2[3]       | src_r0[0] << 24;
+    case 11:
+      w3[1] = __byte_perm (w0[1], w0[2], selector);
+      w3[0] = __byte_perm (w0[0], w0[1], selector);
+      w2[3] = __byte_perm (    0, w0[0], selector);
+      w2[2] = 0;
+      w2[1] = 0;
+      w2[0] = 0;
+      w1[3] = 0;
+      w1[2] = 0;
+      w1[1] = 0;
+      w1[0] = 0;
+      w0[3] = 0;
+      w0[2] = 0;
+      w0[1] = 0;
+      w0[0] = 0;
+
+      break;
+
+    case 12:
+      w3[1] = __byte_perm (w0[0], w0[1], selector);
+      w3[0] = __byte_perm (    0, w0[0], selector);
+      w2[3] = 0;
+      w2[2] = 0;
+      w2[1] = 0;
+      w2[0] = 0;
+      w1[3] = 0;
+      w1[2] = 0;
+      w1[1] = 0;
+      w1[0] = 0;
+      w0[3] = 0;
+      w0[2] = 0;
+      w0[1] = 0;
+      w0[0] = 0;
+
+      break;
+
+    case 13:
+      w3[1] = __byte_perm (    0, w0[0], selector);
+      w3[0] = 0;
+      w2[3] = 0;
+      w2[2] = 0;
+      w2[1] = 0;
+      w2[0] = 0;
+      w1[3] = 0;
+      w1[2] = 0;
+      w1[1] = 0;
+      w1[0] = 0;
+      w0[3] = 0;
+      w0[2] = 0;
+      w0[1] = 0;
+      w0[0] = 0;
+
       break;
   }
+  #endif
 }
 
-// before: device_memcat12L
-static void memcat_c47_d3x4_sl3x4_sr2x4 (const u32 offset, u32 dst0[4], u32 dst1[4], u32 dst2[4], u32 src_l0[4], u32 src_l1[4], u32 src_l2[4], u32 src_r0[4], u32 src_r1[4])
+static void switch_buffer_by_offset_be (u32 w0[4], u32 w1[4], u32 w2[4], u32 w3[4], const u32 offset)
 {
-  switch (offset)
+  #ifdef IS_AMD
+  switch (offset / 4)
   {
     case 0:
-      dst0[0] = src_r0[0];
-      dst0[1] = src_r0[1];
-      dst0[2] = src_r0[2];
-      dst0[3] = src_r0[3];
-      dst1[0] = src_r1[0];
-      dst1[1] = src_r1[1];
-      dst1[2] = src_r1[2];
-      dst1[3] = src_r1[3];
+      w3[2] = amd_bytealign (w3[1],     0, offset);
+      w3[1] = amd_bytealign (w3[0], w3[1], offset);
+      w3[0] = amd_bytealign (w2[3], w3[0], offset);
+      w2[3] = amd_bytealign (w2[2], w2[3], offset);
+      w2[2] = amd_bytealign (w2[1], w2[2], offset);
+      w2[1] = amd_bytealign (w2[0], w2[1], offset);
+      w2[0] = amd_bytealign (w1[3], w2[0], offset);
+      w1[3] = amd_bytealign (w1[2], w1[3], offset);
+      w1[2] = amd_bytealign (w1[1], w1[2], offset);
+      w1[1] = amd_bytealign (w1[0], w1[1], offset);
+      w1[0] = amd_bytealign (w0[3], w1[0], offset);
+      w0[3] = amd_bytealign (w0[2], w0[3], offset);
+      w0[2] = amd_bytealign (w0[1], w0[2], offset);
+      w0[1] = amd_bytealign (w0[0], w0[1], offset);
+      w0[0] = amd_bytealign (    0, w0[0], offset);
       break;
 
     case 1:
-      dst0[0] = src_l0[0]       | src_r0[0] <<  8;
-      dst0[1] = src_r0[0] >> 24 | src_r0[1] <<  8;
-      dst0[2] = src_r0[1] >> 24 | src_r0[2] <<  8;
-      dst0[3] = src_r0[2] >> 24 | src_r0[3] <<  8;
-      dst1[0] = src_r0[3] >> 24 | src_r1[0] <<  8;
-      dst1[1] = src_r1[0] >> 24 | src_r1[1] <<  8;
-      dst1[2] = src_r1[1] >> 24 | src_r1[2] <<  8;
-      dst1[3] = src_r1[2] >> 24 | src_r1[3] <<  8;
-      dst2[0] = src_r1[3] >> 24;
+      w3[2] = amd_bytealign (w3[0],     0, offset);
+      w3[1] = amd_bytealign (w2[3], w3[0], offset);
+      w3[0] = amd_bytealign (w2[2], w2[3], offset);
+      w2[3] = amd_bytealign (w2[1], w2[2], offset);
+      w2[2] = amd_bytealign (w2[0], w2[1], offset);
+      w2[1] = amd_bytealign (w1[3], w2[0], offset);
+      w2[0] = amd_bytealign (w1[2], w1[3], offset);
+      w1[3] = amd_bytealign (w1[1], w1[2], offset);
+      w1[2] = amd_bytealign (w1[0], w1[1], offset);
+      w1[1] = amd_bytealign (w0[3], w1[0], offset);
+      w1[0] = amd_bytealign (w0[2], w0[3], offset);
+      w0[3] = amd_bytealign (w0[1], w0[2], offset);
+      w0[2] = amd_bytealign (w0[0], w0[1], offset);
+      w0[1] = amd_bytealign (    0, w0[0], offset);
+      w0[0] = 0;
       break;
 
     case 2:
-      dst0[0] = src_l0[0]       | src_r0[0] << 16;
-      dst0[1] = src_r0[0] >> 16 | src_r0[1] << 16;
-      dst0[2] = src_r0[1] >> 16 | src_r0[2] << 16;
-      dst0[3] = src_r0[2] >> 16 | src_r0[3] << 16;
-      dst1[0] = src_r0[3] >> 16 | src_r1[0] << 16;
-      dst1[1] = src_r1[0] >> 16 | src_r1[1] << 16;
-      dst1[2] = src_r1[1] >> 16 | src_r1[2] << 16;
-      dst1[3] = src_r1[2] >> 16 | src_r1[3] << 16;
-      dst2[0] = src_r1[3] >> 16;
+      w3[2] = amd_bytealign (w2[3],     0, offset);
+      w3[1] = amd_bytealign (w2[2], w2[3], offset);
+      w3[0] = amd_bytealign (w2[1], w2[2], offset);
+      w2[3] = amd_bytealign (w2[0], w2[1], offset);
+      w2[2] = amd_bytealign (w1[3], w2[0], offset);
+      w2[1] = amd_bytealign (w1[2], w1[3], offset);
+      w2[0] = amd_bytealign (w1[1], w1[2], offset);
+      w1[3] = amd_bytealign (w1[0], w1[1], offset);
+      w1[2] = amd_bytealign (w0[3], w1[0], offset);
+      w1[1] = amd_bytealign (w0[2], w0[3], offset);
+      w1[0] = amd_bytealign (w0[1], w0[2], offset);
+      w0[3] = amd_bytealign (w0[0], w0[1], offset);
+      w0[2] = amd_bytealign (    0, w0[0], offset);
+      w0[1] = 0;
+      w0[0] = 0;
       break;
 
     case 3:
-      dst0[0] = src_l0[0]       | src_r0[0] << 24;
-      dst0[1] = src_r0[0] >>  8 | src_r0[1] << 24;
-      dst0[2] = src_r0[1] >>  8 | src_r0[2] << 24;
-      dst0[3] = src_r0[2] >>  8 | src_r0[3] << 24;
-      dst1[0] = src_r0[3] >>  8 | src_r1[0] << 24;
-      dst1[1] = src_r1[0] >>  8 | src_r1[1] << 24;
-      dst1[2] = src_r1[1] >>  8 | src_r1[2] << 24;
-      dst1[3] = src_r1[2] >>  8 | src_r1[3] << 24;
-      dst2[0] = src_r1[3] >>  8;
+      w3[2] = amd_bytealign (w2[2],     0, offset);
+      w3[1] = amd_bytealign (w2[1], w2[2], offset);
+      w3[0] = amd_bytealign (w2[0], w2[1], offset);
+      w2[3] = amd_bytealign (w1[3], w2[0], offset);
+      w2[2] = amd_bytealign (w1[2], w1[3], offset);
+      w2[1] = amd_bytealign (w1[1], w1[2], offset);
+      w2[0] = amd_bytealign (w1[0], w1[1], offset);
+      w1[3] = amd_bytealign (w0[3], w1[0], offset);
+      w1[2] = amd_bytealign (w0[2], w0[3], offset);
+      w1[1] = amd_bytealign (w0[1], w0[2], offset);
+      w1[0] = amd_bytealign (w0[0], w0[1], offset);
+      w0[3] = amd_bytealign (    0, w0[0], offset);
+      w0[2] = 0;
+      w0[1] = 0;
+      w0[0] = 0;
       break;
 
     case 4:
-      dst0[1] = src_r0[0];
-      dst0[2] = src_r0[1];
-      dst0[3] = src_r0[2];
-      dst1[0] = src_r0[3];
-      dst1[1] = src_r1[0];
-      dst1[2] = src_r1[1];
-      dst1[3] = src_r1[2];
-      dst2[0] = src_r1[3];
+      w3[2] = amd_bytealign (w2[1],     0, offset);
+      w3[1] = amd_bytealign (w2[0], w2[1], offset);
+      w3[0] = amd_bytealign (w1[3], w2[0], offset);
+      w2[3] = amd_bytealign (w1[2], w1[3], offset);
+      w2[2] = amd_bytealign (w1[1], w1[2], offset);
+      w2[1] = amd_bytealign (w1[0], w1[1], offset);
+      w2[0] = amd_bytealign (w0[3], w1[0], offset);
+      w1[3] = amd_bytealign (w0[2], w0[3], offset);
+      w1[2] = amd_bytealign (w0[1], w0[2], offset);
+      w1[1] = amd_bytealign (w0[0], w0[1], offset);
+      w1[0] = amd_bytealign (    0, w0[0], offset);
+      w0[3] = 0;
+      w0[2] = 0;
+      w0[1] = 0;
+      w0[0] = 0;
       break;
 
     case 5:
-      dst0[1] = src_l0[1]       | src_r0[0] <<  8;
-      dst0[2] = src_r0[0] >> 24 | src_r0[1] <<  8;
-      dst0[3] = src_r0[1] >> 24 | src_r0[2] <<  8;
-      dst1[0] = src_r0[2] >> 24 | src_r0[3] <<  8;
-      dst1[1] = src_r0[3] >> 24 | src_r1[0] <<  8;
-      dst1[2] = src_r1[0] >> 24 | src_r1[1] <<  8;
-      dst1[3] = src_r1[1] >> 24 | src_r1[2] <<  8;
-      dst2[0] = src_r1[2] >> 24 | src_r1[3] <<  8;
-      dst2[1] = src_r1[3] >> 24;
+      w3[2] = amd_bytealign (w2[0],     0, offset);
+      w3[1] = amd_bytealign (w1[3], w2[0], offset);
+      w3[0] = amd_bytealign (w1[2], w1[3], offset);
+      w2[3] = amd_bytealign (w1[1], w1[2], offset);
+      w2[2] = amd_bytealign (w1[0], w1[1], offset);
+      w2[1] = amd_bytealign (w0[3], w1[0], offset);
+      w2[0] = amd_bytealign (w0[2], w0[3], offset);
+      w1[3] = amd_bytealign (w0[1], w0[2], offset);
+      w1[2] = amd_bytealign (w0[0], w0[1], offset);
+      w1[1] = amd_bytealign (    0, w0[0], offset);
+      w1[0] = 0;
+      w0[3] = 0;
+      w0[2] = 0;
+      w0[1] = 0;
+      w0[0] = 0;
       break;
 
     case 6:
-      dst0[1] = src_l0[1]       | src_r0[0] << 16;
-      dst0[2] = src_r0[0] >> 16 | src_r0[1] << 16;
-      dst0[3] = src_r0[1] >> 16 | src_r0[2] << 16;
-      dst1[0] = src_r0[2] >> 16 | src_r0[3] << 16;
-      dst1[1] = src_r0[3] >> 16 | src_r1[0] << 16;
-      dst1[2] = src_r1[0] >> 16 | src_r1[1] << 16;
-      dst1[3] = src_r1[1] >> 16 | src_r1[2] << 16;
-      dst2[0] = src_r1[2] >> 16 | src_r1[3] << 16;
-      dst2[1] = src_r1[3] >> 16;
+      w3[2] = amd_bytealign (w1[3],     0, offset);
+      w3[1] = amd_bytealign (w1[2], w1[3], offset);
+      w3[0] = amd_bytealign (w1[1], w1[2], offset);
+      w2[3] = amd_bytealign (w1[0], w1[1], offset);
+      w2[2] = amd_bytealign (w0[3], w1[0], offset);
+      w2[1] = amd_bytealign (w0[2], w0[3], offset);
+      w2[0] = amd_bytealign (w0[1], w0[2], offset);
+      w1[3] = amd_bytealign (w0[0], w0[1], offset);
+      w1[2] = amd_bytealign (    0, w0[0], offset);
+      w1[1] = 0;
+      w1[0] = 0;
+      w0[3] = 0;
+      w0[2] = 0;
+      w0[1] = 0;
+      w0[0] = 0;
       break;
 
     case 7:
-      dst0[1] = src_l0[1]       | src_r0[0] << 24;
-      dst0[2] = src_r0[0] >>  8 | src_r0[1] << 24;
-      dst0[3] = src_r0[1] >>  8 | src_r0[2] << 24;
-      dst1[0] = src_r0[2] >>  8 | src_r0[3] << 24;
-      dst1[1] = src_r0[3] >>  8 | src_r1[0] << 24;
-      dst1[2] = src_r1[0] >>  8 | src_r1[1] << 24;
-      dst1[3] = src_r1[1] >>  8 | src_r1[2] << 24;
-      dst2[0] = src_r1[2] >>  8 | src_r1[3] << 24;
-      dst2[1] = src_r1[3] >>  8;
+      w3[2] = amd_bytealign (w1[2],     0, offset);
+      w3[1] = amd_bytealign (w1[1], w1[2], offset);
+      w3[0] = amd_bytealign (w1[0], w1[1], offset);
+      w2[3] = amd_bytealign (w0[3], w1[0], offset);
+      w2[2] = amd_bytealign (w0[2], w0[3], offset);
+      w2[1] = amd_bytealign (w0[1], w0[2], offset);
+      w2[0] = amd_bytealign (w0[0], w0[1], offset);
+      w1[3] = amd_bytealign (    0, w0[0], offset);
+      w1[2] = 0;
+      w1[1] = 0;
+      w1[0] = 0;
+      w0[3] = 0;
+      w0[2] = 0;
+      w0[1] = 0;
+      w0[0] = 0;
       break;
 
     case 8:
-      dst0[2] = src_r0[0];
-      dst0[3] = src_r0[1];
-      dst1[0] = src_r0[2];
-      dst1[1] = src_r0[3];
-      dst1[2] = src_r1[0];
-      dst1[3] = src_r1[1];
-      dst2[0] = src_r1[2];
-      dst2[1] = src_r1[3];
+      w3[2] = amd_bytealign (w1[1],     0, offset);
+      w3[1] = amd_bytealign (w1[0], w1[1], offset);
+      w3[0] = amd_bytealign (w0[3], w1[0], offset);
+      w2[3] = amd_bytealign (w0[2], w0[3], offset);
+      w2[2] = amd_bytealign (w0[1], w0[2], offset);
+      w2[1] = amd_bytealign (w0[0], w0[1], offset);
+      w2[0] = amd_bytealign (    0, w0[0], offset);
+      w1[3] = 0;
+      w1[2] = 0;
+      w1[1] = 0;
+      w1[0] = 0;
+      w0[3] = 0;
+      w0[2] = 0;
+      w0[1] = 0;
+      w0[0] = 0;
       break;
 
     case 9:
-      dst0[2] = src_l0[2]       | src_r0[0] <<  8;
-      dst0[3] = src_r0[0] >> 24 | src_r0[1] <<  8;
-      dst1[0] = src_r0[1] >> 24 | src_r0[2] <<  8;
-      dst1[1] = src_r0[2] >> 24 | src_r0[3] <<  8;
-      dst1[2] = src_r0[3] >> 24 | src_r1[0] <<  8;
-      dst1[3] = src_r1[0] >> 24 | src_r1[1] <<  8;
-      dst2[0] = src_r1[1] >> 24 | src_r1[2] <<  8;
-      dst2[1] = src_r1[2] >> 24 | src_r1[3] <<  8;
-      dst2[2] = src_r1[3] >> 24;
+      w3[2] = amd_bytealign (w1[0],     0, offset);
+      w3[1] = amd_bytealign (w0[3], w1[0], offset);
+      w3[0] = amd_bytealign (w0[2], w0[3], offset);
+      w2[3] = amd_bytealign (w0[1], w0[2], offset);
+      w2[2] = amd_bytealign (w0[0], w0[1], offset);
+      w2[1] = amd_bytealign (    0, w0[0], offset);
+      w2[0] = 0;
+      w1[3] = 0;
+      w1[2] = 0;
+      w1[1] = 0;
+      w1[0] = 0;
+      w0[3] = 0;
+      w0[2] = 0;
+      w0[1] = 0;
+      w0[0] = 0;
       break;
 
     case 10:
-      dst0[2] = src_l0[2]       | src_r0[0] << 16;
-      dst0[3] = src_r0[0] >> 16 | src_r0[1] << 16;
-      dst1[0] = src_r0[1] >> 16 | src_r0[2] << 16;
-      dst1[1] = src_r0[2] >> 16 | src_r0[3] << 16;
-      dst1[2] = src_r0[3] >> 16 | src_r1[0] << 16;
-      dst1[3] = src_r1[0] >> 16 | src_r1[1] << 16;
-      dst2[0] = src_r1[1] >> 16 | src_r1[2] << 16;
-      dst2[1] = src_r1[2] >> 16 | src_r1[3] << 16;
-      dst2[2] = src_r1[3] >> 16;
+      w3[2] = amd_bytealign (w0[3],     0, offset);
+      w3[1] = amd_bytealign (w0[2], w0[3], offset);
+      w3[0] = amd_bytealign (w0[1], w0[2], offset);
+      w2[3] = amd_bytealign (w0[0], w0[1], offset);
+      w2[2] = amd_bytealign (    0, w0[0], offset);
+      w2[1] = 0;
+      w2[0] = 0;
+      w1[3] = 0;
+      w1[2] = 0;
+      w1[1] = 0;
+      w1[0] = 0;
+      w0[3] = 0;
+      w0[2] = 0;
+      w0[1] = 0;
+      w0[0] = 0;
       break;
 
     case 11:
-      dst0[2] = src_l0[2]       | src_r0[0] << 24;
-      dst0[3] = src_r0[0] >>  8 | src_r0[1] << 24;
-      dst1[0] = src_r0[1] >>  8 | src_r0[2] << 24;
-      dst1[1] = src_r0[2] >>  8 | src_r0[3] << 24;
-      dst1[2] = src_r0[3] >>  8 | src_r1[0] << 24;
-      dst1[3] = src_r1[0] >>  8 | src_r1[1] << 24;
-      dst2[0] = src_r1[1] >>  8 | src_r1[2] << 24;
-      dst2[1] = src_r1[2] >>  8 | src_r1[3] << 24;
-      dst2[2] = src_r1[3] >>  8;
-      break;
-
-    case 12:
-      dst0[3] = src_r0[0];
-      dst1[0] = src_r0[1];
-      dst1[1] = src_r0[2];
-      dst1[2] = src_r0[3];
-      dst1[3] = src_r1[0];
-      dst2[0] = src_r1[1];
-      dst2[1] = src_r1[2];
-      dst2[2] = src_r1[3];
-      break;
-
-    case 13:
-      dst0[3] = src_l0[3]       | src_r0[0] <<  8;
-      dst1[0] = src_r0[0] >> 24 | src_r0[1] <<  8;
-      dst1[1] = src_r0[1] >> 24 | src_r0[2] <<  8;
-      dst1[2] = src_r0[2] >> 24 | src_r0[3] <<  8;
-      dst1[3] = src_r0[3] >> 24 | src_r1[0] <<  8;
-      dst2[0] = src_r1[0] >> 24 | src_r1[1] <<  8;
-      dst2[1] = src_r1[1] >> 24 | src_r1[2] <<  8;
-      dst2[2] = src_r1[2] >> 24 | src_r1[3] <<  8;
-      dst2[3] = src_r1[3] >> 24;
-      break;
-
-    case 14:
-      dst0[3] = src_l0[3]       | src_r0[0] << 16;
-      dst1[0] = src_r0[0] >> 16 | src_r0[1] << 16;
-      dst1[1] = src_r0[1] >> 16 | src_r0[2] << 16;
-      dst1[2] = src_r0[2] >> 16 | src_r0[3] << 16;
-      dst1[3] = src_r0[3] >> 16 | src_r1[0] << 16;
-      dst2[0] = src_r1[0] >> 16 | src_r1[1] << 16;
-      dst2[1] = src_r1[1] >> 16 | src_r1[2] << 16;
-      dst2[2] = src_r1[2] >> 16 | src_r1[3] << 16;
-      dst2[3] = src_r1[3] >> 16;
-      break;
-
-    case 15:
-      dst0[3] = src_l0[3]       | src_r0[0] << 24;
-      dst1[0] = src_r0[0] >>  8 | src_r0[1] << 24;
-      dst1[1] = src_r0[1] >>  8 | src_r0[2] << 24;
-      dst1[2] = src_r0[2] >>  8 | src_r0[3] << 24;
-      dst1[3] = src_r0[3] >>  8 | src_r1[0] << 24;
-      dst2[0] = src_r1[0] >>  8 | src_r1[1] << 24;
-      dst2[1] = src_r1[1] >>  8 | src_r1[2] << 24;
-      dst2[2] = src_r1[2] >>  8 | src_r1[3] << 24;
-      dst2[3] = src_r1[3] >>  8;
-      break;
-
-    case 16:
-      dst1[0] = src_r0[0];
-      dst1[1] = src_r0[1];
-      dst1[2] = src_r0[2];
-      dst1[3] = src_r0[3];
-      dst2[0] = src_r1[0];
-      dst2[1] = src_r1[1];
-      dst2[2] = src_r1[2];
-      dst2[3] = src_r1[3];
+      w3[2] = amd_bytealign (w0[2],     0, offset);
+      w3[1] = amd_bytealign (w0[1], w0[2], offset);
+      w3[0] = amd_bytealign (w0[0], w0[1], offset);
+      w2[3] = amd_bytealign (    0, w0[0], offset);
+      w2[2] = 0;
+      w2[1] = 0;
+      w2[0] = 0;
+      w1[3] = 0;
+      w1[2] = 0;
+      w1[1] = 0;
+      w1[0] = 0;
+      w0[3] = 0;
+      w0[2] = 0;
+      w0[1] = 0;
+      w0[0] = 0;
       break;
 
-    case 17:
-      dst1[0] = src_l1[0]       | src_r0[0] <<  8;
-      dst1[1] = src_r0[0] >> 24 | src_r0[1] <<  8;
-      dst1[2] = src_r0[1] >> 24 | src_r0[2] <<  8;
-      dst1[3] = src_r0[2] >> 24 | src_r0[3] <<  8;
-      dst2[0] = src_r0[3] >> 24 | src_r1[0] <<  8;
-      dst2[1] = src_r1[0] >> 24 | src_r1[1] <<  8;
-      dst2[2] = src_r1[1] >> 24 | src_r1[2] <<  8;
-      dst2[3] = src_r1[2] >> 24 | src_r1[3] <<  8;
+    case 12:
+      w3[2] = amd_bytealign (w0[1],     0, offset);
+      w3[1] = amd_bytealign (w0[0], w0[1], offset);
+      w3[0] = amd_bytealign (    0, w0[0], offset);
+      w2[3] = 0;
+      w2[2] = 0;
+      w2[1] = 0;
+      w2[0] = 0;
+      w1[3] = 0;
+      w1[2] = 0;
+      w1[1] = 0;
+      w1[0] = 0;
+      w0[3] = 0;
+      w0[2] = 0;
+      w0[1] = 0;
+      w0[0] = 0;
       break;
 
-    case 18:
-      dst1[0] = src_l1[0]       | src_r0[0] << 16;
-      dst1[1] = src_r0[0] >> 16 | src_r0[1] << 16;
-      dst1[2] = src_r0[1] >> 16 | src_r0[2] << 16;
-      dst1[3] = src_r0[2] >> 16 | src_r0[3] << 16;
-      dst2[0] = src_r0[3] >> 16 | src_r1[0] << 16;
-      dst2[1] = src_r1[0] >> 16 | src_r1[1] << 16;
-      dst2[2] = src_r1[1] >> 16 | src_r1[2] << 16;
-      dst2[3] = src_r1[2] >> 16 | src_r1[3] << 16;
+    case 13:
+      w3[2] = amd_bytealign (w0[0],     0, offset);
+      w3[1] = amd_bytealign (    0, w0[0], offset);
+      w3[0] = 0;
+      w2[3] = 0;
+      w2[2] = 0;
+      w2[1] = 0;
+      w2[0] = 0;
+      w1[3] = 0;
+      w1[2] = 0;
+      w1[1] = 0;
+      w1[0] = 0;
+      w0[3] = 0;
+      w0[2] = 0;
+      w0[1] = 0;
+      w0[0] = 0;
       break;
+  }
+  #endif
 
-    case 19:
-      dst1[0] = src_l1[0]       | src_r0[0] << 24;
-      dst1[1] = src_r0[0] >>  8 | src_r0[1] << 24;
-      dst1[2] = src_r0[1] >>  8 | src_r0[2] << 24;
-      dst1[3] = src_r0[2] >>  8 | src_r0[3] << 24;
-      dst2[0] = src_r0[3] >>  8 | src_r1[0] << 24;
-      dst2[1] = src_r1[0] >>  8 | src_r1[1] << 24;
-      dst2[2] = src_r1[1] >>  8 | src_r1[2] << 24;
-      dst2[3] = src_r1[2] >>  8 | src_r1[3] << 24;
-      break;
+  #ifdef IS_NV
+  const int selector = (0x76543210 >> ((offset & 3) * 4)) & 0xffff;
 
-    case 20:
-      dst1[1] = src_r1[0];
-      dst1[2] = src_r0[1];
-      dst1[3] = src_r0[2];
-      dst2[0] = src_r0[3];
-      dst2[1] = src_r1[0];
-      dst2[2] = src_r1[1];
-      dst2[3] = src_r1[2];
+  switch (offset / 4)
+  {
+    case 0:
+      w3[1] = __byte_perm (w3[1], w3[0], selector);
+      w3[0] = __byte_perm (w3[0], w2[3], selector);
+      w2[3] = __byte_perm (w2[3], w2[2], selector);
+      w2[2] = __byte_perm (w2[2], w2[1], selector);
+      w2[1] = __byte_perm (w2[1], w2[0], selector);
+      w2[0] = __byte_perm (w2[0], w1[3], selector);
+      w1[3] = __byte_perm (w1[3], w1[2], selector);
+      w1[2] = __byte_perm (w1[2], w1[1], selector);
+      w1[1] = __byte_perm (w1[1], w1[0], selector);
+      w1[0] = __byte_perm (w1[0], w0[3], selector);
+      w0[3] = __byte_perm (w0[3], w0[2], selector);
+      w0[2] = __byte_perm (w0[2], w0[1], selector);
+      w0[1] = __byte_perm (w0[1], w0[0], selector);
+      w0[0] = __byte_perm (w0[0],     0, selector);
       break;
 
-    case 21:
-      dst1[1] = src_l1[1]       | src_r0[0] <<  8;
-      dst1[2] = src_r0[0] >> 24 | src_r0[1] <<  8;
-      dst1[3] = src_r0[1] >> 24 | src_r0[2] <<  8;
-      dst2[0] = src_r0[2] >> 24 | src_r0[3] <<  8;
-      dst2[1] = src_r0[3] >> 24 | src_r1[0] <<  8;
-      dst2[2] = src_r1[0] >> 24 | src_r1[1] <<  8;
-      dst2[3] = src_r1[1] >> 24 | src_r1[2] <<  8;
+    case 1:
+      w3[1] = __byte_perm (w3[0], w2[3], selector);
+      w3[0] = __byte_perm (w2[3], w2[2], selector);
+      w2[3] = __byte_perm (w2[2], w2[1], selector);
+      w2[2] = __byte_perm (w2[1], w2[0], selector);
+      w2[1] = __byte_perm (w2[0], w1[3], selector);
+      w2[0] = __byte_perm (w1[3], w1[2], selector);
+      w1[3] = __byte_perm (w1[2], w1[1], selector);
+      w1[2] = __byte_perm (w1[1], w1[0], selector);
+      w1[1] = __byte_perm (w1[0], w0[3], selector);
+      w1[0] = __byte_perm (w0[3], w0[2], selector);
+      w0[3] = __byte_perm (w0[2], w0[1], selector);
+      w0[2] = __byte_perm (w0[1], w0[0], selector);
+      w0[1] = __byte_perm (w0[0],     0, selector);
+      w0[0] = 0;
       break;
 
-    case 22:
-      dst1[1] = src_l1[1]       | src_r0[0] << 16;
-      dst1[2] = src_r0[0] >> 16 | src_r0[1] << 16;
-      dst1[3] = src_r0[1] >> 16 | src_r0[2] << 16;
-      dst2[0] = src_r0[2] >> 16 | src_r0[3] << 16;
-      dst2[1] = src_r0[3] >> 16 | src_r1[0] << 16;
-      dst2[2] = src_r1[0] >> 16 | src_r1[1] << 16;
-      dst2[3] = src_r1[1] >> 16 | src_r1[2] << 16;
+    case 2:
+      w3[1] = __byte_perm (w2[3], w2[2], selector);
+      w3[0] = __byte_perm (w2[2], w2[1], selector);
+      w2[3] = __byte_perm (w2[1], w2[0], selector);
+      w2[2] = __byte_perm (w2[0], w1[3], selector);
+      w2[1] = __byte_perm (w1[3], w1[2], selector);
+      w2[0] = __byte_perm (w1[2], w1[1], selector);
+      w1[3] = __byte_perm (w1[1], w1[0], selector);
+      w1[2] = __byte_perm (w1[0], w0[3], selector);
+      w1[1] = __byte_perm (w0[3], w0[2], selector);
+      w1[0] = __byte_perm (w0[2], w0[1], selector);
+      w0[3] = __byte_perm (w0[1], w0[0], selector);
+      w0[2] = __byte_perm (w0[0],     0, selector);
+      w0[1] = 0;
+      w0[0] = 0;
       break;
 
-    case 23:
-      dst1[1] = src_l1[1]       | src_r0[0] << 24;
-      dst1[2] = src_r0[0] >>  8 | src_r0[1] << 24;
-      dst1[3] = src_r0[1] >>  8 | src_r0[2] << 24;
-      dst2[0] = src_r0[2] >>  8 | src_r0[3] << 24;
-      dst2[1] = src_r0[3] >>  8 | src_r1[0] << 24;
-      dst2[2] = src_r1[0] >>  8 | src_r1[1] << 24;
-      dst2[3] = src_r1[1] >>  8 | src_r1[2] << 24;
+    case 3:
+      w3[1] = __byte_perm (w2[2], w2[1], selector);
+      w3[0] = __byte_perm (w2[1], w2[0], selector);
+      w2[3] = __byte_perm (w2[0], w1[3], selector);
+      w2[2] = __byte_perm (w1[3], w1[2], selector);
+      w2[1] = __byte_perm (w1[2], w1[1], selector);
+      w2[0] = __byte_perm (w1[1], w1[0], selector);
+      w1[3] = __byte_perm (w1[0], w0[3], selector);
+      w1[2] = __byte_perm (w0[3], w0[2], selector);
+      w1[1] = __byte_perm (w0[2], w0[1], selector);
+      w1[0] = __byte_perm (w0[1], w0[0], selector);
+      w0[3] = __byte_perm (w0[0],     0, selector);
+      w0[2] = 0;
+      w0[1] = 0;
+      w0[0] = 0;
       break;
 
-    case 24:
-      dst1[2] = src_r1[0];
-      dst1[3] = src_r0[1];
-      dst2[0] = src_r0[2];
-      dst2[1] = src_r0[3];
-      dst2[2] = src_r1[0];
-      dst2[3] = src_r1[1];
+    case 4:
+      w3[1] = __byte_perm (w2[1], w2[0], selector);
+      w3[0] = __byte_perm (w2[0], w1[3], selector);
+      w2[3] = __byte_perm (w1[3], w1[2], selector);
+      w2[2] = __byte_perm (w1[2], w1[1], selector);
+      w2[1] = __byte_perm (w1[1], w1[0], selector);
+      w2[0] = __byte_perm (w1[0], w0[3], selector);
+      w1[3] = __byte_perm (w0[3], w0[2], selector);
+      w1[2] = __byte_perm (w0[2], w0[1], selector);
+      w1[1] = __byte_perm (w0[1], w0[0], selector);
+      w1[0] = __byte_perm (w0[0],     0, selector);
+      w0[3] = 0;
+      w0[2] = 0;
+      w0[1] = 0;
+      w0[0] = 0;
       break;
 
-    case 25:
-      dst1[2] = src_l1[2]       | src_r0[0] <<  8;
-      dst1[3] = src_r0[0] >> 24 | src_r0[1] <<  8;
-      dst2[0] = src_r0[1] >> 24 | src_r0[2] <<  8;
-      dst2[1] = src_r0[2] >> 24 | src_r0[3] <<  8;
-      dst2[2] = src_r0[3] >> 24 | src_r1[0] <<  8;
-      dst2[3] = src_r1[0] >> 24 | src_r1[1] <<  8;
+    case 5:
+      w3[1] = __byte_perm (w2[0], w1[3], selector);
+      w3[0] = __byte_perm (w1[3], w1[2], selector);
+      w2[3] = __byte_perm (w1[2], w1[1], selector);
+      w2[2] = __byte_perm (w1[1], w1[0], selector);
+      w2[1] = __byte_perm (w1[0], w0[3], selector);
+      w2[0] = __byte_perm (w0[3], w0[2], selector);
+      w1[3] = __byte_perm (w0[2], w0[1], selector);
+      w1[2] = __byte_perm (w0[1], w0[0], selector);
+      w1[1] = __byte_perm (w0[0],     0, selector);
+      w1[0] = 0;
+      w0[3] = 0;
+      w0[2] = 0;
+      w0[1] = 0;
+      w0[0] = 0;
       break;
 
-    case 26:
-      dst1[2] = src_l1[2]       | src_r0[0] << 16;
-      dst1[3] = src_r0[0] >> 16 | src_r0[1] << 16;
-      dst2[0] = src_r0[1] >> 16 | src_r0[2] << 16;
-      dst2[1] = src_r0[2] >> 16 | src_r0[3] << 16;
-      dst2[2] = src_r0[3] >> 16 | src_r1[0] << 16;
-      dst2[3] = src_r1[0] >> 16 | src_r1[1] << 16;
+    case 6:
+      w3[1] = __byte_perm (w1[3], w1[2], selector);
+      w3[0] = __byte_perm (w1[2], w1[1], selector);
+      w2[3] = __byte_perm (w1[1], w1[0], selector);
+      w2[2] = __byte_perm (w1[0], w0[3], selector);
+      w2[1] = __byte_perm (w0[3], w0[2], selector);
+      w2[0] = __byte_perm (w0[2], w0[1], selector);
+      w1[3] = __byte_perm (w0[1], w0[0], selector);
+      w1[2] = __byte_perm (w0[0],     0, selector);
+      w1[1] = 0;
+      w1[0] = 0;
+      w0[3] = 0;
+      w0[2] = 0;
+      w0[1] = 0;
+      w0[0] = 0;
       break;
 
-    case 27:
-      dst1[2] = src_l1[2]       | src_r0[0] << 24;
-      dst1[3] = src_r0[0] >>  8 | src_r0[1] << 24;
-      dst2[0] = src_r0[1] >>  8 | src_r0[2] << 24;
-      dst2[1] = src_r0[2] >>  8 | src_r0[3] << 24;
-      dst2[2] = src_r0[3] >>  8 | src_r1[0] << 24;
-      dst2[3] = src_r1[0] >>  8 | src_r1[1] << 24;
+    case 7:
+      w3[1] = __byte_perm (w1[2], w1[1], selector);
+      w3[0] = __byte_perm (w1[1], w1[0], selector);
+      w2[3] = __byte_perm (w1[0], w0[3], selector);
+      w2[2] = __byte_perm (w0[3], w0[2], selector);
+      w2[1] = __byte_perm (w0[2], w0[1], selector);
+      w2[0] = __byte_perm (w0[1], w0[0], selector);
+      w1[3] = __byte_perm (w0[0],     0, selector);
+      w1[2] = 0;
+      w1[1] = 0;
+      w1[0] = 0;
+      w0[3] = 0;
+      w0[2] = 0;
+      w0[1] = 0;
+      w0[0] = 0;
       break;
 
-    case 28:
-      dst1[3] = src_r1[0];
-      dst2[0] = src_r0[1];
-      dst2[1] = src_r0[2];
-      dst2[2] = src_r0[3];
-      dst2[3] = src_r1[0];
+    case 8:
+      w3[1] = __byte_perm (w1[1], w1[0], selector);
+      w3[0] = __byte_perm (w1[0], w0[3], selector);
+      w2[3] = __byte_perm (w0[3], w0[2], selector);
+      w2[2] = __byte_perm (w0[2], w0[1], selector);
+      w2[1] = __byte_perm (w0[1], w0[0], selector);
+      w2[0] = __byte_perm (w0[0],     0, selector);
+      w1[3] = 0;
+      w1[2] = 0;
+      w1[1] = 0;
+      w1[0] = 0;
+      w0[3] = 0;
+      w0[2] = 0;
+      w0[1] = 0;
+      w0[0] = 0;
       break;
 
-    case 29:
-      dst1[3] = src_l1[3]       | src_r0[0] <<  8;
-      dst2[0] = src_r0[0] >> 24 | src_r0[1] <<  8;
-      dst2[1] = src_r0[1] >> 24 | src_r0[2] <<  8;
-      dst2[2] = src_r0[2] >> 24 | src_r0[3] <<  8;
-      dst2[3] = src_r0[3] >> 24 | src_r1[0] <<  8;
+    case 9:
+      w3[1] = __byte_perm (w1[0], w0[3], selector);
+      w3[0] = __byte_perm (w0[3], w0[2], selector);
+      w2[3] = __byte_perm (w0[2], w0[1], selector);
+      w2[2] = __byte_perm (w0[1], w0[0], selector);
+      w2[1] = __byte_perm (w0[0],     0, selector);
+      w2[0] = 0;
+      w1[3] = 0;
+      w1[2] = 0;
+      w1[1] = 0;
+      w1[0] = 0;
+      w0[3] = 0;
+      w0[2] = 0;
+      w0[1] = 0;
+      w0[0] = 0;
       break;
 
-    case 30:
-      dst1[3] = src_l1[3]       | src_r0[0] << 16;
-      dst2[0] = src_r0[0] >> 16 | src_r0[1] << 16;
-      dst2[1] = src_r0[1] >> 16 | src_r0[2] << 16;
-      dst2[2] = src_r0[2] >> 16 | src_r0[3] << 16;
-      dst2[3] = src_r0[3] >> 16 | src_r1[0] << 16;
+    case 10:
+      w3[1] = __byte_perm (w0[3], w0[2], selector);
+      w3[0] = __byte_perm (w0[2], w0[1], selector);
+      w2[3] = __byte_perm (w0[1], w0[0], selector);
+      w2[2] = __byte_perm (w0[0],     0, selector);
+      w2[1] = 0;
+      w2[0] = 0;
+      w1[3] = 0;
+      w1[2] = 0;
+      w1[1] = 0;
+      w1[0] = 0;
+      w0[3] = 0;
+      w0[2] = 0;
+      w0[1] = 0;
+      w0[0] = 0;
       break;
 
-    case 31:
-      dst1[3] = src_l1[3]       | src_r0[0] << 24;
-      dst2[0] = src_r0[0] >>  8 | src_r0[1] << 24;
-      dst2[1] = src_r0[1] >>  8 | src_r0[2] << 24;
-      dst2[2] = src_r0[2] >>  8 | src_r0[3] << 24;
-      dst2[3] = src_r0[3] >>  8 | src_r1[0] << 24;
+    case 11:
+      w3[1] = __byte_perm (w0[2], w0[1], selector);
+      w3[0] = __byte_perm (w0[1], w0[0], selector);
+      w2[3] = __byte_perm (w0[0],     0, selector);
+      w2[2] = 0;
+      w2[1] = 0;
+      w2[0] = 0;
+      w1[3] = 0;
+      w1[2] = 0;
+      w1[1] = 0;
+      w1[0] = 0;
+      w0[3] = 0;
+      w0[2] = 0;
+      w0[1] = 0;
+      w0[0] = 0;
       break;
 
-    case 32:
-      dst2[0] = src_r0[0];
-      dst2[1] = src_r0[1];
-      dst2[2] = src_r0[2];
-      dst2[3] = src_r0[3];
+    case 12:
+      w3[1] = __byte_perm (w0[1], w0[0], selector);
+      w3[0] = __byte_perm (w0[0],     0, selector);
+      w2[3] = 0;
+      w2[2] = 0;
+      w2[1] = 0;
+      w2[0] = 0;
+      w1[3] = 0;
+      w1[2] = 0;
+      w1[1] = 0;
+      w1[0] = 0;
+      w0[3] = 0;
+      w0[2] = 0;
+      w0[1] = 0;
+      w0[0] = 0;
       break;
 
-    case 33:
-      dst2[0] = src_l2[0]       | src_r0[0] <<  8;
-      dst2[1] = src_r0[0] >> 24 | src_r0[1] <<  8;
-      dst2[2] = src_r0[1] >> 24 | src_r0[2] <<  8;
-      dst2[3] = src_r0[2] >> 24 | src_r0[3] <<  8;
+    case 13:
+      w3[1] = __byte_perm (w0[0],     0, selector);
+      w3[0] = 0;
+      w2[3] = 0;
+      w2[2] = 0;
+      w2[1] = 0;
+      w2[0] = 0;
+      w1[3] = 0;
+      w1[2] = 0;
+      w1[1] = 0;
+      w1[0] = 0;
+      w0[3] = 0;
+      w0[2] = 0;
+      w0[1] = 0;
+      w0[0] = 0;
       break;
+  }
+  #endif
+}
 
-    case 34:
-      dst2[0] = src_l2[0]       | src_r0[0] << 16;
-      dst2[1] = src_r0[0] >> 16 | src_r0[1] << 16;
-      dst2[2] = src_r0[1] >> 16 | src_r0[2] << 16;
-      dst2[3] = src_r0[2] >> 16 | src_r0[3] << 16;
+/* not needed anymore?
+// before: append_0x80_2_be
+static void append_0x80_2x4_be (u32 w0[4], u32 w1[4], const u32 offset)
+{
+  switch (offset)
+  {
+    case  0:
+      w0[0] |= 0x80000000;
       break;
 
-    case 35:
-      dst2[0] = src_l2[0]       | src_r0[0] << 24;
-      dst2[1] = src_r0[0] >>  8 | src_r0[1] << 24;
-      dst2[2] = src_r0[1] >>  8 | src_r0[2] << 24;
-      dst2[3] = src_r0[2] >>  8 | src_r0[3] << 24;
+    case  1:
+      w0[0] |= 0x800000;
       break;
 
-    case 36:
-      dst2[1] = src_r0[0];
-      dst2[2] = src_r0[1];
-      dst2[3] = src_r0[2];
+    case  2:
+      w0[0] |= 0x8000;
       break;
 
-    case 37:
-      dst2[1] = src_l2[1]       | src_r0[0] <<  8;
-      dst2[2] = src_r0[0] >> 24 | src_r0[1] <<  8;
-      dst2[3] = src_r0[1] >> 24 | src_r0[2] <<  8;
+    case  3:
+      w0[0] |= 0x80;
       break;
 
-    case 38:
-      dst2[1] = src_l2[1]       | src_r0[0] << 16;
-      dst2[2] = src_r0[0] >> 16 | src_r0[1] << 16;
-      dst2[3] = src_r0[1] >> 16 | src_r0[2] << 16;
+    case  4:
+      w0[1] |= 0x80000000;
       break;
 
-    case 39:
-      dst2[1] = src_l2[1]       | src_r0[0] << 24;
-      dst2[2] = src_r0[0] >>  8 | src_r0[1] << 24;
-      dst2[3] = src_r0[1] >>  8 | src_r0[2] << 24;
+    case  5:
+      w0[1] |= 0x800000;
       break;
 
-    case 40:
-      dst2[2] = src_r0[0];
-      dst2[3] = src_r0[1];
+    case  6:
+      w0[1] |= 0x8000;
       break;
 
-    case 41:
-      dst2[2] = src_l2[2]       | src_r0[0] <<  8;
-      dst2[3] = src_r0[0] >> 24 | src_r0[1] <<  8;
+    case  7:
+      w0[1] |= 0x80;
       break;
 
-    case 42:
-      dst2[2] = src_l2[2]       | src_r0[0] << 16;
-      dst2[3] = src_r0[0] >> 16 | src_r0[1] << 16;
+    case  8:
+      w0[2] |= 0x80000000;
       break;
 
-    case 43:
-      dst2[2] = src_l2[2]       | src_r0[0] << 24;
-      dst2[3] = src_r0[0] >>  8 | src_r0[1] << 24;
+    case  9:
+      w0[2] |= 0x800000;
       break;
 
-    case 44:
-      dst2[3] = src_r0[0];
+    case 10:
+      w0[2] |= 0x8000;
       break;
 
-    case 45:
-      dst2[3] = src_l2[3]       | src_r0[0] <<  8;
+    case 11:
+      w0[2] |= 0x80;
       break;
 
-    case 46:
-      dst2[3] = src_l2[3]       | src_r0[0] << 16;
+    case 12:
+      w0[3] |= 0x80000000;
       break;
 
-    case 47:
-      dst2[3] = src_l2[3]       | src_r0[0] << 24;
+    case 13:
+      w0[3] |= 0x800000;
       break;
-  }
-}
 
-// before: memcat16_9
-static void memcat_c15_w4x4_a3x4 (u32 w0[4], u32 w1[4], u32 w2[4], u32 w3[4], const u32 append0[4], const u32 append1[4], const u32 append2[4], const u32 offset)
-{
-  switch (offset)
-  {
-    case 0:
-      w0[0] = append0[0];
-      w0[1] = append0[1];
-      w0[2] = append0[2];
-      w0[3] = append0[3];
-      w1[0] = append1[0];
-      w1[1] = append1[1];
-      w1[2] = append1[2];
-      w1[3] = append1[3];
-      w2[0] = append2[0];
+    case 14:
+      w0[3] |= 0x8000;
       break;
 
-    case 1:
-      w0[0] = w0[0]            | append0[0] <<  8;
-      w0[1] = append0[0] >> 24 | append0[1] <<  8;
-      w0[2] = append0[1] >> 24 | append0[2] <<  8;
-      w0[3] = append0[2] >> 24 | append0[3] <<  8;
-      w1[0] = append0[3] >> 24 | append1[0] <<  8;
-      w1[1] = append1[0] >> 24 | append1[1] <<  8;
-      w1[2] = append1[1] >> 24 | append1[2] <<  8;
-      w1[3] = append1[2] >> 24 | append1[3] <<  8;
-      w2[0] = append1[3] >> 24 | append2[0] <<  8;
-      w2[1] = append2[0] >> 24;
+    case 15:
+      w0[3] |= 0x80;
       break;
 
-    case 2:
-      w0[0] = w0[0]            | append0[0] << 16;
-      w0[1] = append0[0] >> 16 | append0[1] << 16;
-      w0[2] = append0[1] >> 16 | append0[2] << 16;
-      w0[3] = append0[2] >> 16 | append0[3] << 16;
-      w1[0] = append0[3] >> 16 | append1[0] << 16;
-      w1[1] = append1[0] >> 16 | append1[1] << 16;
-      w1[2] = append1[1] >> 16 | append1[2] << 16;
-      w1[3] = append1[2] >> 16 | append1[3] << 16;
-      w2[0] = append1[3] >> 16 | append2[0] << 16;
-      w2[1] = append2[0] >> 16;
+    case 16:
+      w1[0] |= 0x80000000;
       break;
-
-    case 3:
-      w0[0] = w0[0]            | append0[0] << 24;
-      w0[1] = append0[0] >>  8 | append0[1] << 24;
-      w0[2] = append0[1] >>  8 | append0[2] << 24;
-      w0[3] = append0[2] >>  8 | append0[3] << 24;
-      w1[0] = append0[3] >>  8 | append1[0] << 24;
-      w1[1] = append1[0] >>  8 | append1[1] << 24;
-      w1[2] = append1[1] >>  8 | append1[2] << 24;
-      w1[3] = append1[2] >>  8 | append1[3] << 24;
-      w2[0] = append1[3] >>  8 | append2[0] << 24;
-      w2[1] = append2[0] >>  8;
+
+    case 17:
+      w1[0] |= 0x800000;
       break;
 
-    case 4:
-      w0[1] = append0[0];
-      w0[2] = append0[1];
-      w0[3] = append0[2];
-      w1[0] = append0[3];
-      w1[1] = append1[0];
-      w1[2] = append1[1];
-      w1[3] = append1[2];
-      w2[0] = append1[3];
-      w2[1] = append2[0];
+    case 18:
+      w1[0] |= 0x8000;
       break;
 
-    case 5:
-      w0[1] = w0[1]            | append0[0] <<  8;
-      w0[2] = append0[0] >> 24 | append0[1] <<  8;
-      w0[3] = append0[1] >> 24 | append0[2] <<  8;
-      w1[0] = append0[2] >> 24 | append0[3] <<  8;
-      w1[1] = append0[3] >> 24 | append1[0] <<  8;
-      w1[2] = append1[0] >> 24 | append1[1] <<  8;
-      w1[3] = append1[1] >> 24 | append1[2] <<  8;
-      w2[0] = append1[2] >> 24 | append1[3] <<  8;
-      w2[1] = append1[3] >> 24 | append2[0] <<  8;
-      w2[2] = append2[0] >> 24;
+    case 19:
+      w1[0] |= 0x80;
       break;
 
-    case 6:
-      w0[1] = w0[1]            | append0[0] << 16;
-      w0[2] = append0[0] >> 16 | append0[1] << 16;
-      w0[3] = append0[1] >> 16 | append0[2] << 16;
-      w1[0] = append0[2] >> 16 | append0[3] << 16;
-      w1[1] = append0[3] >> 16 | append1[0] << 16;
-      w1[2] = append1[0] >> 16 | append1[1] << 16;
-      w1[3] = append1[1] >> 16 | append1[2] << 16;
-      w2[0] = append1[2] >> 16 | append1[3] << 16;
-      w2[1] = append1[3] >> 16 | append2[0] << 16;
-      w2[2] = append2[0] >> 16;
+    case 20:
+      w1[1] |= 0x80000000;
       break;
 
-    case 7:
-      w0[1] = w0[1]            | append0[0] << 24;
-      w0[2] = append0[0] >>  8 | append0[1] << 24;
-      w0[3] = append0[1] >>  8 | append0[2] << 24;
-      w1[0] = append0[2] >>  8 | append0[3] << 24;
-      w1[1] = append0[3] >>  8 | append1[0] << 24;
-      w1[2] = append1[0] >>  8 | append1[1] << 24;
-      w1[3] = append1[1] >>  8 | append1[2] << 24;
-      w2[0] = append1[2] >>  8 | append1[3] << 24;
-      w2[1] = append1[3] >>  8 | append2[0] << 24;
-      w2[2] = append2[0] >>  8;
+    case 21:
+      w1[1] |= 0x800000;
       break;
 
-    case 8:
-      w0[2] = append0[0];
-      w0[3] = append0[1];
-      w1[0] = append0[2];
-      w1[1] = append0[3];
-      w1[2] = append1[0];
-      w1[3] = append1[1];
-      w2[0] = append1[2];
-      w2[1] = append1[3];
-      w2[2] = append2[0];
+    case 22:
+      w1[1] |= 0x8000;
       break;
 
-    case 9:
-      w0[2] = w0[2]            | append0[0] <<  8;
-      w0[3] = append0[0] >> 24 | append0[1] <<  8;
-      w1[0] = append0[1] >> 24 | append0[2] <<  8;
-      w1[1] = append0[2] >> 24 | append0[3] <<  8;
-      w1[2] = append0[3] >> 24 | append1[0] <<  8;
-      w1[3] = append1[0] >> 24 | append1[1] <<  8;
-      w2[0] = append1[1] >> 24 | append1[2] <<  8;
-      w2[1] = append1[2] >> 24 | append1[3] <<  8;
-      w2[2] = append1[3] >> 24 | append2[0] <<  8;
-      w2[3] = append2[0] >> 24;
+    case 23:
+      w1[1] |= 0x80;
       break;
 
-    case 10:
-      w0[2] = w0[2]            | append0[0] << 16;
-      w0[3] = append0[0] >> 16 | append0[1] << 16;
-      w1[0] = append0[1] >> 16 | append0[2] << 16;
-      w1[1] = append0[2] >> 16 | append0[3] << 16;
-      w1[2] = append0[3] >> 16 | append1[0] << 16;
-      w1[3] = append1[0] >> 16 | append1[1] << 16;
-      w2[0] = append1[1] >> 16 | append1[2] << 16;
-      w2[1] = append1[2] >> 16 | append1[3] << 16;
-      w2[2] = append1[3] >> 16 | append2[0] << 16;
-      w2[3] = append2[0] >> 16;
+    case 24:
+      w1[2] |= 0x80000000;
       break;
 
-    case 11:
-      w0[2] = w0[2]            | append0[0] << 24;
-      w0[3] = append0[0] >>  8 | append0[1] << 24;
-      w1[0] = append0[1] >>  8 | append0[2] << 24;
-      w1[1] = append0[2] >>  8 | append0[3] << 24;
-      w1[2] = append0[3] >>  8 | append1[0] << 24;
-      w1[3] = append1[0] >>  8 | append1[1] << 24;
-      w2[0] = append1[1] >>  8 | append1[2] << 24;
-      w2[1] = append1[2] >>  8 | append1[3] << 24;
-      w2[2] = append1[3] >>  8 | append2[0] << 24;
-      w2[3] = append2[0] >>  8;
+    case 25:
+      w1[2] |= 0x800000;
       break;
 
-    case 12:
-      w0[3] = append0[0];
-      w1[0] = append0[1];
-      w1[1] = append0[2];
-      w1[2] = append0[3];
-      w1[3] = append1[0];
-      w2[0] = append1[1];
-      w2[1] = append1[2];
-      w2[2] = append1[3];
-      w2[3] = append2[0];
+    case 26:
+      w1[2] |= 0x8000;
       break;
 
-    case 13:
-      w0[3] = w0[3]            | append0[0] <<  8;
-      w1[0] = append0[0] >> 24 | append0[1] <<  8;
-      w1[1] = append0[1] >> 24 | append0[2] <<  8;
-      w1[2] = append0[2] >> 24 | append0[3] <<  8;
-      w1[3] = append0[3] >> 24 | append1[0] <<  8;
-      w2[0] = append1[0] >> 24 | append1[1] <<  8;
-      w2[1] = append1[1] >> 24 | append1[2] <<  8;
-      w2[2] = append1[2] >> 24 | append1[3] <<  8;
-      w2[3] = append1[3] >> 24 | append2[0] <<  8;
-      w3[0] = append2[0] >> 24;
+    case 27:
+      w1[2] |= 0x80;
       break;
 
-    case 14:
-      w0[3] = w0[3]            | append0[0] << 16;
-      w1[0] = append0[0] >> 16 | append0[1] << 16;
-      w1[1] = append0[1] >> 16 | append0[2] << 16;
-      w1[2] = append0[2] >> 16 | append0[3] << 16;
-      w1[3] = append0[3] >> 16 | append1[0] << 16;
-      w2[0] = append1[0] >> 16 | append1[1] << 16;
-      w2[1] = append1[1] >> 16 | append1[2] << 16;
-      w2[2] = append1[2] >> 16 | append1[3] << 16;
-      w2[3] = append1[3] >> 16 | append2[0] << 16;
-      w3[0] = append2[0] >> 16;
+    case 28:
+      w1[3] |= 0x80000000;
       break;
 
-    case 15:
-      w0[3] = w0[3]            | append0[0] << 24;
-      w1[0] = append0[0] >>  8 | append0[1] << 24;
-      w1[1] = append0[1] >>  8 | append0[2] << 24;
-      w1[2] = append0[2] >>  8 | append0[3] << 24;
-      w1[3] = append0[3] >>  8 | append1[0] << 24;
-      w2[0] = append1[0] >>  8 | append1[1] << 24;
-      w2[1] = append1[1] >>  8 | append1[2] << 24;
-      w2[2] = append1[2] >>  8 | append1[3] << 24;
-      w2[3] = append1[3] >>  8 | append2[0] << 24;
-      w3[0] = append2[0] >>  8;
+    case 29:
+      w1[3] |= 0x800000;
+      break;
+
+    case 30:
+      w1[3] |= 0x8000;
+      break;
+
+    case 31:
+      w1[3] |= 0x80;
       break;
   }
 }
 
-// before: memcat32_8
-static void memcat_c32_w4x4_a2x4 (u32 w0[4], u32 w1[4], u32 w2[4], u32 w3[4], const u32 append0[4], const u32 append1[4], const u32 offset)
+// before: append_0x80_4
+static void append_0x80_1x16 (u32 w[16], const u32 offset)
 {
   switch (offset)
   {
     case 0:
-      w0[0] = append0[0];
-      w0[1] = append0[1];
-      w0[2] = append0[2];
-      w0[3] = append0[3];
-      w1[0] = append1[0];
-      w1[1] = append1[1];
-      w1[2] = append1[2];
-      w1[3] = append1[3];
+      w[ 0] = 0x80;
       break;
 
     case 1:
-      w0[0] = w0[0]            | append0[0] <<  8;
-      w0[1] = append0[0] >> 24 | append0[1] <<  8;
-      w0[2] = append0[1] >> 24 | append0[2] <<  8;
-      w0[3] = append0[2] >> 24 | append0[3] <<  8;
-      w1[0] = append0[3] >> 24 | append1[0] <<  8;
-      w1[1] = append1[0] >> 24 | append1[1] <<  8;
-      w1[2] = append1[1] >> 24 | append1[2] <<  8;
-      w1[3] = append1[2] >> 24 | append1[3] <<  8;
-      w2[0] = append1[3] >> 24;
+      w[ 0] = w[ 0] | 0x8000;
       break;
 
     case 2:
-      w0[0] = w0[0]            | append0[0] << 16;
-      w0[1] = append0[0] >> 16 | append0[1] << 16;
-      w0[2] = append0[1] >> 16 | append0[2] << 16;
-      w0[3] = append0[2] >> 16 | append0[3] << 16;
-      w1[0] = append0[3] >> 16 | append1[0] << 16;
-      w1[1] = append1[0] >> 16 | append1[1] << 16;
-      w1[2] = append1[1] >> 16 | append1[2] << 16;
-      w1[3] = append1[2] >> 16 | append1[3] << 16;
-      w2[0] = append1[3] >> 16;
+      w[ 0] = w[ 0] | 0x800000;
       break;
 
     case 3:
-      w0[0] = w0[0]            | append0[0] << 24;
-      w0[1] = append0[0] >>  8 | append0[1] << 24;
-      w0[2] = append0[1] >>  8 | append0[2] << 24;
-      w0[3] = append0[2] >>  8 | append0[3] << 24;
-      w1[0] = append0[3] >>  8 | append1[0] << 24;
-      w1[1] = append1[0] >>  8 | append1[1] << 24;
-      w1[2] = append1[1] >>  8 | append1[2] << 24;
-      w1[3] = append1[2] >>  8 | append1[3] << 24;
-      w2[0] = append1[3] >>  8;
+      w[ 0] = w[ 0] | 0x80000000;
       break;
 
     case 4:
-      w0[1] = append0[0];
-      w0[2] = append0[1];
-      w0[3] = append0[2];
-      w1[0] = append0[3];
-      w1[1] = append1[0];
-      w1[2] = append1[1];
-      w1[3] = append1[2];
-      w2[0] = append1[3];
+      w[ 1] = 0x80;
       break;
 
     case 5:
-      w0[1] = w0[1]            | append0[0] <<  8;
-      w0[2] = append0[0] >> 24 | append0[1] <<  8;
-      w0[3] = append0[1] >> 24 | append0[2] <<  8;
-      w1[0] = append0[2] >> 24 | append0[3] <<  8;
-      w1[1] = append0[3] >> 24 | append1[0] <<  8;
-      w1[2] = append1[0] >> 24 | append1[1] <<  8;
-      w1[3] = append1[1] >> 24 | append1[2] <<  8;
-      w2[0] = append1[2] >> 24 | append1[3] <<  8;
-      w2[1] = append1[3] >> 24;
+      w[ 1] = w[ 1] | 0x8000;
       break;
 
     case 6:
-      w0[1] = w0[1]            | append0[0] << 16;
-      w0[2] = append0[0] >> 16 | append0[1] << 16;
-      w0[3] = append0[1] >> 16 | append0[2] << 16;
-      w1[0] = append0[2] >> 16 | append0[3] << 16;
-      w1[1] = append0[3] >> 16 | append1[0] << 16;
-      w1[2] = append1[0] >> 16 | append1[1] << 16;
-      w1[3] = append1[1] >> 16 | append1[2] << 16;
-      w2[0] = append1[2] >> 16 | append1[3] << 16;
-      w2[1] = append1[3] >> 16;
+      w[ 1] = w[ 1] | 0x800000;
       break;
 
     case 7:
-      w0[1] = w0[1]            | append0[0] << 24;
-      w0[2] = append0[0] >>  8 | append0[1] << 24;
-      w0[3] = append0[1] >>  8 | append0[2] << 24;
-      w1[0] = append0[2] >>  8 | append0[3] << 24;
-      w1[1] = append0[3] >>  8 | append1[0] << 24;
-      w1[2] = append1[0] >>  8 | append1[1] << 24;
-      w1[3] = append1[1] >>  8 | append1[2] << 24;
-      w2[0] = append1[2] >>  8 | append1[3] << 24;
-      w2[1] = append1[3] >>  8;
-      break;
-
-    case 8:
-      w0[2] = append0[0];
-      w0[3] = append0[1];
-      w1[0] = append0[2];
-      w1[1] = append0[3];
-      w1[2] = append1[0];
-      w1[3] = append1[1];
-      w2[0] = append1[2];
-      w2[1] = append1[3];
+      w[ 1] = w[ 1] | 0x80000000;
+      break;
+
+    case 8:
+      w[ 2] = 0x80;
       break;
 
     case 9:
-      w0[2] = w0[2]            | append0[0] <<  8;
-      w0[3] = append0[0] >> 24 | append0[1] <<  8;
-      w1[0] = append0[1] >> 24 | append0[2] <<  8;
-      w1[1] = append0[2] >> 24 | append0[3] <<  8;
-      w1[2] = append0[3] >> 24 | append1[0] <<  8;
-      w1[3] = append1[0] >> 24 | append1[1] <<  8;
-      w2[0] = append1[1] >> 24 | append1[2] <<  8;
-      w2[1] = append1[2] >> 24 | append1[3] <<  8;
-      w2[2] = append1[3] >> 24;
+      w[ 2] = w[ 2] | 0x8000;
       break;
 
     case 10:
-      w0[2] = w0[2]            | append0[0] << 16;
-      w0[3] = append0[0] >> 16 | append0[1] << 16;
-      w1[0] = append0[1] >> 16 | append0[2] << 16;
-      w1[1] = append0[2] >> 16 | append0[3] << 16;
-      w1[2] = append0[3] >> 16 | append1[0] << 16;
-      w1[3] = append1[0] >> 16 | append1[1] << 16;
-      w2[0] = append1[1] >> 16 | append1[2] << 16;
-      w2[1] = append1[2] >> 16 | append1[3] << 16;
-      w2[2] = append1[3] >> 16;
+      w[ 2] = w[ 2] | 0x800000;
       break;
 
     case 11:
-      w0[2] = w0[2]            | append0[0] << 24;
-      w0[3] = append0[0] >>  8 | append0[1] << 24;
-      w1[0] = append0[1] >>  8 | append0[2] << 24;
-      w1[1] = append0[2] >>  8 | append0[3] << 24;
-      w1[2] = append0[3] >>  8 | append1[0] << 24;
-      w1[3] = append1[0] >>  8 | append1[1] << 24;
-      w2[0] = append1[1] >>  8 | append1[2] << 24;
-      w2[1] = append1[2] >>  8 | append1[3] << 24;
-      w2[2] = append1[3] >>  8;
+      w[ 2] = w[ 2] | 0x80000000;
       break;
 
     case 12:
-      w0[3] = append0[0];
-      w1[0] = append0[1];
-      w1[1] = append0[2];
-      w1[2] = append0[3];
-      w1[3] = append1[0];
-      w2[0] = append1[1];
-      w2[1] = append1[2];
-      w2[2] = append1[3];
+      w[ 3] = 0x80;
       break;
 
     case 13:
-      w0[3] = w0[3]            | append0[0] <<  8;
-      w1[0] = append0[0] >> 24 | append0[1] <<  8;
-      w1[1] = append0[1] >> 24 | append0[2] <<  8;
-      w1[2] = append0[2] >> 24 | append0[3] <<  8;
-      w1[3] = append0[3] >> 24 | append1[0] <<  8;
-      w2[0] = append1[0] >> 24 | append1[1] <<  8;
-      w2[1] = append1[1] >> 24 | append1[2] <<  8;
-      w2[2] = append1[2] >> 24 | append1[3] <<  8;
-      w2[3] = append1[3] >> 24;
+      w[ 3] = w[ 3] | 0x8000;
       break;
 
     case 14:
-      w0[3] = w0[3]            | append0[0] << 16;
-      w1[0] = append0[0] >> 16 | append0[1] << 16;
-      w1[1] = append0[1] >> 16 | append0[2] << 16;
-      w1[2] = append0[2] >> 16 | append0[3] << 16;
-      w1[3] = append0[3] >> 16 | append1[0] << 16;
-      w2[0] = append1[0] >> 16 | append1[1] << 16;
-      w2[1] = append1[1] >> 16 | append1[2] << 16;
-      w2[2] = append1[2] >> 16 | append1[3] << 16;
-      w2[3] = append1[3] >> 16;
+      w[ 3] = w[ 3] | 0x800000;
       break;
 
     case 15:
-      w0[3] = w0[3]            | append0[0] << 24;
-      w1[0] = append0[0] >>  8 | append0[1] << 24;
-      w1[1] = append0[1] >>  8 | append0[2] << 24;
-      w1[2] = append0[2] >>  8 | append0[3] << 24;
-      w1[3] = append0[3] >>  8 | append1[0] << 24;
-      w2[0] = append1[0] >>  8 | append1[1] << 24;
-      w2[1] = append1[1] >>  8 | append1[2] << 24;
-      w2[2] = append1[2] >>  8 | append1[3] << 24;
-      w2[3] = append1[3] >>  8;
+      w[ 3] = w[ 3] | 0x80000000;
       break;
 
     case 16:
-      w1[0] = append0[0];
-      w1[1] = append0[1];
-      w1[2] = append0[2];
-      w1[3] = append0[3];
-      w2[0] = append1[0];
-      w2[1] = append1[1];
-      w2[2] = append1[2];
-      w2[3] = append1[3];
+      w[ 4] = 0x80;
       break;
 
     case 17:
-      w1[0] = w1[0]            | append0[0] <<  8;
-      w1[1] = append0[0] >> 24 | append0[1] <<  8;
-      w1[2] = append0[1] >> 24 | append0[2] <<  8;
-      w1[3] = append0[2] >> 24 | append0[3] <<  8;
-      w2[0] = append0[3] >> 24 | append1[0] <<  8;
-      w2[1] = append1[0] >> 24 | append1[1] <<  8;
-      w2[2] = append1[1] >> 24 | append1[2] <<  8;
-      w2[3] = append1[2] >> 24 | append1[3] <<  8;
-      w3[0] = append1[3] >> 24;
+      w[ 4] = w[ 4] | 0x8000;
       break;
 
     case 18:
-      w1[0] = w1[0]            | append0[0] << 16;
-      w1[1] = append0[0] >> 16 | append0[1] << 16;
-      w1[2] = append0[1] >> 16 | append0[2] << 16;
-      w1[3] = append0[2] >> 16 | append0[3] << 16;
-      w2[0] = append0[3] >> 16 | append1[0] << 16;
-      w2[1] = append1[0] >> 16 | append1[1] << 16;
-      w2[2] = append1[1] >> 16 | append1[2] << 16;
-      w2[3] = append1[2] >> 16 | append1[3] << 16;
-      w3[0] = append1[3] >> 16;
+      w[ 4] = w[ 4] | 0x800000;
       break;
 
     case 19:
-      w1[0] = w1[0]            | append0[0] << 24;
-      w1[1] = append0[0] >>  8 | append0[1] << 24;
-      w1[2] = append0[1] >>  8 | append0[2] << 24;
-      w1[3] = append0[2] >>  8 | append0[3] << 24;
-      w2[0] = append0[3] >>  8 | append1[0] << 24;
-      w2[1] = append1[0] >>  8 | append1[1] << 24;
-      w2[2] = append1[1] >>  8 | append1[2] << 24;
-      w2[3] = append1[2] >>  8 | append1[3] << 24;
-      w3[0] = append1[3] >>  8;
+      w[ 4] = w[ 4] | 0x80000000;
       break;
 
     case 20:
-      w1[1] = append0[0];
-      w1[2] = append0[1];
-      w1[3] = append0[2];
-      w2[0] = append0[3];
-      w2[1] = append1[0];
-      w2[2] = append1[1];
-      w2[3] = append1[2];
-      w3[0] = append1[3];
+      w[ 5] = 0x80;
       break;
 
     case 21:
-      w1[1] = w1[1]            | append0[0] <<  8;
-      w1[2] = append0[0] >> 24 | append0[1] <<  8;
-      w1[3] = append0[1] >> 24 | append0[2] <<  8;
-      w2[0] = append0[2] >> 24 | append0[3] <<  8;
-      w2[1] = append0[3] >> 24 | append1[0] <<  8;
-      w2[2] = append1[0] >> 24 | append1[1] <<  8;
-      w2[3] = append1[1] >> 24 | append1[2] <<  8;
-      w3[0] = append1[2] >> 24 | append1[3] <<  8;
-      w3[1] = append1[3] >> 24;
+      w[ 5] = w[ 5] | 0x8000;
       break;
 
     case 22:
-      w1[1] = w1[1]            | append0[0] << 16;
-      w1[2] = append0[0] >> 16 | append0[1] << 16;
-      w1[3] = append0[1] >> 16 | append0[2] << 16;
-      w2[0] = append0[2] >> 16 | append0[3] << 16;
-      w2[1] = append0[3] >> 16 | append1[0] << 16;
-      w2[2] = append1[0] >> 16 | append1[1] << 16;
-      w2[3] = append1[1] >> 16 | append1[2] << 16;
-      w3[0] = append1[2] >> 16 | append1[3] << 16;
-      w3[1] = append1[3] >> 16;
+      w[ 5] = w[ 5] | 0x800000;
       break;
 
     case 23:
-      w1[1] = w1[1]            | append0[0] << 24;
-      w1[2] = append0[0] >>  8 | append0[1] << 24;
-      w1[3] = append0[1] >>  8 | append0[2] << 24;
-      w2[0] = append0[2] >>  8 | append0[3] << 24;
-      w2[1] = append0[3] >>  8 | append1[0] << 24;
-      w2[2] = append1[0] >>  8 | append1[1] << 24;
-      w2[3] = append1[1] >>  8 | append1[2] << 24;
-      w3[0] = append1[2] >>  8 | append1[3] << 24;
-      w3[1] = append1[3] >>  8;
+      w[ 5] = w[ 5] | 0x80000000;
       break;
 
     case 24:
-      w1[2] = append0[0];
-      w1[3] = append0[1];
-      w2[0] = append0[2];
-      w2[1] = append0[3];
-      w2[2] = append1[0];
-      w2[3] = append1[1];
-      w3[0] = append1[2];
-      w3[1] = append1[3];
+      w[ 6] = 0x80;
       break;
 
     case 25:
-      w1[2] = w1[2]            | append0[0] <<  8;
-      w1[3] = append0[0] >> 24 | append0[1] <<  8;
-      w2[0] = append0[1] >> 24 | append0[2] <<  8;
-      w2[1] = append0[2] >> 24 | append0[3] <<  8;
-      w2[2] = append0[3] >> 24 | append1[0] <<  8;
-      w2[3] = append1[0] >> 24 | append1[1] <<  8;
-      w3[0] = append1[1] >> 24 | append1[2] <<  8;
-      w3[1] = append1[2] >> 24 | append1[3] <<  8;
+      w[ 6] = w[ 6] | 0x8000;
       break;
 
     case 26:
-      w1[2] = w1[2]            | append0[0] << 16;
-      w1[3] = append0[0] >> 16 | append0[1] << 16;
-      w2[0] = append0[1] >> 16 | append0[2] << 16;
-      w2[1] = append0[2] >> 16 | append0[3] << 16;
-      w2[2] = append0[3] >> 16 | append1[0] << 16;
-      w2[3] = append1[0] >> 16 | append1[1] << 16;
-      w3[0] = append1[1] >> 16 | append1[2] << 16;
-      w3[1] = append1[2] >> 16 | append1[3] << 16;
+      w[ 6] = w[ 6] | 0x800000;
       break;
 
     case 27:
-      w1[2] = w1[2]            | append0[0] << 24;
-      w1[3] = append0[0] >>  8 | append0[1] << 24;
-      w2[0] = append0[1] >>  8 | append0[2] << 24;
-      w2[1] = append0[2] >>  8 | append0[3] << 24;
-      w2[2] = append0[3] >>  8 | append1[0] << 24;
-      w2[3] = append1[0] >>  8 | append1[1] << 24;
-      w3[0] = append1[1] >>  8 | append1[2] << 24;
-      w3[1] = append1[2] >>  8 | append1[3] << 24;
+      w[ 6] = w[ 6] | 0x80000000;
       break;
 
     case 28:
-      w1[3] = append0[0];
-      w2[0] = append0[1];
-      w2[1] = append0[2];
-      w2[2] = append0[3];
-      w2[3] = append1[0];
-      w3[0] = append1[1];
-      w3[1] = append1[2];
+      w[ 7] = 0x80;
       break;
 
     case 29:
-      w1[3] = w1[3]            | append0[0] <<  8;
-      w2[0] = append0[0] >> 24 | append0[1] <<  8;
-      w2[1] = append0[1] >> 24 | append0[2] <<  8;
-      w2[2] = append0[2] >> 24 | append0[3] <<  8;
-      w2[3] = append0[3] >> 24 | append1[0] <<  8;
-      w3[0] = append1[0] >> 24 | append1[1] <<  8;
-      w3[1] = append1[1] >> 24 | append1[2] <<  8;
+      w[ 7] = w[ 7] | 0x8000;
       break;
 
     case 30:
-      w1[3] = w1[3]            | append0[0] << 16;
-      w2[0] = append0[0] >> 16 | append0[1] << 16;
-      w2[1] = append0[1] >> 16 | append0[2] << 16;
-      w2[2] = append0[2] >> 16 | append0[3] << 16;
-      w2[3] = append0[3] >> 16 | append1[0] << 16;
-      w3[0] = append1[0] >> 16 | append1[1] << 16;
-      w3[1] = append1[1] >> 16 | append1[2] << 16;
+      w[ 7] = w[ 7] | 0x800000;
+      break;
+
+    case 31:
+      w[ 7] = w[ 7] | 0x80000000;
+      break;
+
+    case 32:
+      w[ 8] = 0x80;
+      break;
+
+    case 33:
+      w[ 8] = w[ 8] | 0x8000;
+      break;
+
+    case 34:
+      w[ 8] = w[ 8] | 0x800000;
+      break;
+
+    case 35:
+      w[ 8] = w[ 8] | 0x80000000;
+      break;
+
+    case 36:
+      w[ 9] = 0x80;
+      break;
+
+    case 37:
+      w[ 9] = w[ 9] | 0x8000;
+      break;
+
+    case 38:
+      w[ 9] = w[ 9] | 0x800000;
+      break;
+
+    case 39:
+      w[ 9] = w[ 9] | 0x80000000;
+      break;
+
+    case 40:
+      w[10] = 0x80;
+      break;
+
+    case 41:
+      w[10] = w[10] | 0x8000;
       break;
 
-    case 31:
-      w1[3] = w1[3]            | append0[0] << 24;
-      w2[0] = append0[0] >>  8 | append0[1] << 24;
-      w2[1] = append0[1] >>  8 | append0[2] << 24;
-      w2[2] = append0[2] >>  8 | append0[3] << 24;
-      w2[3] = append0[3] >>  8 | append1[0] << 24;
-      w3[0] = append1[0] >>  8 | append1[1] << 24;
-      w3[1] = append1[1] >>  8 | append1[2] << 24;
+    case 42:
+      w[10] = w[10] | 0x800000;
       break;
 
-    case 32:
-      w2[0] = append0[0];
-      w2[1] = append0[1];
-      w2[2] = append0[2];
-      w2[3] = append0[3];
-      w3[0] = append1[0];
-      w3[1] = append1[1];
+    case 43:
+      w[10] = w[10] | 0x80000000;
       break;
-  }
-}
 
-// before: memcat32_9
-static void memcat_c32_w4x4_a3x4 (u32 w0[4], u32 w1[4], u32 w2[4], u32 w3[4], const u32 append0[4], const u32 append1[4], const u32 append2[4], const u32 offset)
-{
-  switch (offset)
-  {
-    case 0:
-      w0[0] = append0[0];
-      w0[1] = append0[1];
-      w0[2] = append0[2];
-      w0[3] = append0[3];
-      w1[0] = append1[0];
-      w1[1] = append1[1];
-      w1[2] = append1[2];
-      w1[3] = append1[3];
-      w2[0] = append2[0];
+    case 44:
+      w[11] = 0x80;
       break;
 
-    case 1:
-      w0[0] = w0[0]            | append0[0] <<  8;
-      w0[1] = append0[0] >> 24 | append0[1] <<  8;
-      w0[2] = append0[1] >> 24 | append0[2] <<  8;
-      w0[3] = append0[2] >> 24 | append0[3] <<  8;
-      w1[0] = append0[3] >> 24 | append1[0] <<  8;
-      w1[1] = append1[0] >> 24 | append1[1] <<  8;
-      w1[2] = append1[1] >> 24 | append1[2] <<  8;
-      w1[3] = append1[2] >> 24 | append1[3] <<  8;
-      w2[0] = append1[3] >> 24 | append2[0] <<  8;
-      w2[1] = append2[0] >> 24;
+    case 45:
+      w[11] = w[11] | 0x8000;
       break;
 
-    case 2:
-      w0[0] = w0[0]            | append0[0] << 16;
-      w0[1] = append0[0] >> 16 | append0[1] << 16;
-      w0[2] = append0[1] >> 16 | append0[2] << 16;
-      w0[3] = append0[2] >> 16 | append0[3] << 16;
-      w1[0] = append0[3] >> 16 | append1[0] << 16;
-      w1[1] = append1[0] >> 16 | append1[1] << 16;
-      w1[2] = append1[1] >> 16 | append1[2] << 16;
-      w1[3] = append1[2] >> 16 | append1[3] << 16;
-      w2[0] = append1[3] >> 16 | append2[0] << 16;
-      w2[1] = append2[0] >> 16;
+    case 46:
+      w[11] = w[11] | 0x800000;
       break;
 
-    case 3:
-      w0[0] = w0[0]            | append0[0] << 24;
-      w0[1] = append0[0] >>  8 | append0[1] << 24;
-      w0[2] = append0[1] >>  8 | append0[2] << 24;
-      w0[3] = append0[2] >>  8 | append0[3] << 24;
-      w1[0] = append0[3] >>  8 | append1[0] << 24;
-      w1[1] = append1[0] >>  8 | append1[1] << 24;
-      w1[2] = append1[1] >>  8 | append1[2] << 24;
-      w1[3] = append1[2] >>  8 | append1[3] << 24;
-      w2[0] = append1[3] >>  8 | append2[0] << 24;
-      w2[1] = append2[0] >>  8;
+    case 47:
+      w[11] = w[11] | 0x80000000;
       break;
 
-    case 4:
-      w0[1] = append0[0];
-      w0[2] = append0[1];
-      w0[3] = append0[2];
-      w1[0] = append0[3];
-      w1[1] = append1[0];
-      w1[2] = append1[1];
-      w1[3] = append1[2];
-      w2[0] = append1[3];
-      w2[1] = append2[0];
+    case 48:
+      w[12] = 0x80;
       break;
 
-    case 5:
-      w0[1] = w0[1]            | append0[0] <<  8;
-      w0[2] = append0[0] >> 24 | append0[1] <<  8;
-      w0[3] = append0[1] >> 24 | append0[2] <<  8;
-      w1[0] = append0[2] >> 24 | append0[3] <<  8;
-      w1[1] = append0[3] >> 24 | append1[0] <<  8;
-      w1[2] = append1[0] >> 24 | append1[1] <<  8;
-      w1[3] = append1[1] >> 24 | append1[2] <<  8;
-      w2[0] = append1[2] >> 24 | append1[3] <<  8;
-      w2[1] = append1[3] >> 24 | append2[0] <<  8;
-      w2[2] = append2[0] >> 24;
+    case 49:
+      w[12] = w[12] | 0x8000;
       break;
 
-    case 6:
-      w0[1] = w0[1]            | append0[0] << 16;
-      w0[2] = append0[0] >> 16 | append0[1] << 16;
-      w0[3] = append0[1] >> 16 | append0[2] << 16;
-      w1[0] = append0[2] >> 16 | append0[3] << 16;
-      w1[1] = append0[3] >> 16 | append1[0] << 16;
-      w1[2] = append1[0] >> 16 | append1[1] << 16;
-      w1[3] = append1[1] >> 16 | append1[2] << 16;
-      w2[0] = append1[2] >> 16 | append1[3] << 16;
-      w2[1] = append1[3] >> 16 | append2[0] << 16;
-      w2[2] = append2[0] >> 16;
+    case 50:
+      w[12] = w[12] | 0x800000;
       break;
 
-    case 7:
-      w0[1] = w0[1]            | append0[0] << 24;
-      w0[2] = append0[0] >>  8 | append0[1] << 24;
-      w0[3] = append0[1] >>  8 | append0[2] << 24;
-      w1[0] = append0[2] >>  8 | append0[3] << 24;
-      w1[1] = append0[3] >>  8 | append1[0] << 24;
-      w1[2] = append1[0] >>  8 | append1[1] << 24;
-      w1[3] = append1[1] >>  8 | append1[2] << 24;
-      w2[0] = append1[2] >>  8 | append1[3] << 24;
-      w2[1] = append1[3] >>  8 | append2[0] << 24;
-      w2[2] = append2[0] >>  8;
+    case 51:
+      w[12] = w[12] | 0x80000000;
       break;
 
-    case 8:
-      w0[2] = append0[0];
-      w0[3] = append0[1];
-      w1[0] = append0[2];
-      w1[1] = append0[3];
-      w1[2] = append1[0];
-      w1[3] = append1[1];
-      w2[0] = append1[2];
-      w2[1] = append1[3];
-      w2[2] = append2[0];
+    case 52:
+      w[13] = 0x80;
       break;
 
-    case 9:
-      w0[2] = w0[2]            | append0[0] <<  8;
-      w0[3] = append0[0] >> 24 | append0[1] <<  8;
-      w1[0] = append0[1] >> 24 | append0[2] <<  8;
-      w1[1] = append0[2] >> 24 | append0[3] <<  8;
-      w1[2] = append0[3] >> 24 | append1[0] <<  8;
-      w1[3] = append1[0] >> 24 | append1[1] <<  8;
-      w2[0] = append1[1] >> 24 | append1[2] <<  8;
-      w2[1] = append1[2] >> 24 | append1[3] <<  8;
-      w2[2] = append1[3] >> 24 | append2[0] <<  8;
-      w2[3] = append2[0] >> 24;
+    case 53:
+      w[13] = w[13] | 0x8000;
       break;
 
-    case 10:
-      w0[2] = w0[2]            | append0[0] << 16;
-      w0[3] = append0[0] >> 16 | append0[1] << 16;
-      w1[0] = append0[1] >> 16 | append0[2] << 16;
-      w1[1] = append0[2] >> 16 | append0[3] << 16;
-      w1[2] = append0[3] >> 16 | append1[0] << 16;
-      w1[3] = append1[0] >> 16 | append1[1] << 16;
-      w2[0] = append1[1] >> 16 | append1[2] << 16;
-      w2[1] = append1[2] >> 16 | append1[3] << 16;
-      w2[2] = append1[3] >> 16 | append2[0] << 16;
-      w2[3] = append2[0] >> 16;
+    case 54:
+      w[13] = w[13] | 0x800000;
       break;
 
-    case 11:
-      w0[2] = w0[2]            | append0[0] << 24;
-      w0[3] = append0[0] >>  8 | append0[1] << 24;
-      w1[0] = append0[1] >>  8 | append0[2] << 24;
-      w1[1] = append0[2] >>  8 | append0[3] << 24;
-      w1[2] = append0[3] >>  8 | append1[0] << 24;
-      w1[3] = append1[0] >>  8 | append1[1] << 24;
-      w2[0] = append1[1] >>  8 | append1[2] << 24;
-      w2[1] = append1[2] >>  8 | append1[3] << 24;
-      w2[2] = append1[3] >>  8 | append2[0] << 24;
-      w2[3] = append2[0] >>  8;
+    case 55:
+      w[13] = w[13] | 0x80000000;
       break;
 
-    case 12:
-      w0[3] = append0[0];
-      w1[0] = append0[1];
-      w1[1] = append0[2];
-      w1[2] = append0[3];
-      w1[3] = append1[0];
-      w2[0] = append1[1];
-      w2[1] = append1[2];
-      w2[2] = append1[3];
-      w2[3] = append2[0];
+    case 56:
+      w[14] = 0x80;
       break;
 
-    case 13:
-      w0[3] = w0[3]            | append0[0] <<  8;
-      w1[0] = append0[0] >> 24 | append0[1] <<  8;
-      w1[1] = append0[1] >> 24 | append0[2] <<  8;
-      w1[2] = append0[2] >> 24 | append0[3] <<  8;
-      w1[3] = append0[3] >> 24 | append1[0] <<  8;
-      w2[0] = append1[0] >> 24 | append1[1] <<  8;
-      w2[1] = append1[1] >> 24 | append1[2] <<  8;
-      w2[2] = append1[2] >> 24 | append1[3] <<  8;
-      w2[3] = append1[3] >> 24 | append2[0] <<  8;
-      w3[0] = append2[0] >> 24;
+    case 57:
+      w[14] = w[14] | 0x8000;
       break;
 
-    case 14:
-      w0[3] = w0[3]            | append0[0] << 16;
-      w1[0] = append0[0] >> 16 | append0[1] << 16;
-      w1[1] = append0[1] >> 16 | append0[2] << 16;
-      w1[2] = append0[2] >> 16 | append0[3] << 16;
-      w1[3] = append0[3] >> 16 | append1[0] << 16;
-      w2[0] = append1[0] >> 16 | append1[1] << 16;
-      w2[1] = append1[1] >> 16 | append1[2] << 16;
-      w2[2] = append1[2] >> 16 | append1[3] << 16;
-      w2[3] = append1[3] >> 16 | append2[0] << 16;
-      w3[0] = append2[0] >> 16;
+    case 58:
+      w[14] = w[14] | 0x800000;
       break;
 
-    case 15:
-      w0[3] = w0[3]            | append0[0] << 24;
-      w1[0] = append0[0] >>  8 | append0[1] << 24;
-      w1[1] = append0[1] >>  8 | append0[2] << 24;
-      w1[2] = append0[2] >>  8 | append0[3] << 24;
-      w1[3] = append0[3] >>  8 | append1[0] << 24;
-      w2[0] = append1[0] >>  8 | append1[1] << 24;
-      w2[1] = append1[1] >>  8 | append1[2] << 24;
-      w2[2] = append1[2] >>  8 | append1[3] << 24;
-      w2[3] = append1[3] >>  8 | append2[0] << 24;
-      w3[0] = append2[0] >>  8;
+    case 59:
+      w[14] = w[14] | 0x80000000;
       break;
 
-    case 16:
-      w1[0] = append0[0];
-      w1[1] = append0[1];
-      w1[2] = append0[2];
-      w1[3] = append0[3];
-      w2[0] = append1[0];
-      w2[1] = append1[1];
-      w2[2] = append1[2];
-      w2[3] = append1[3];
-      w3[0] = append2[0];
+    case 60:
+      w[15] = 0x80;
       break;
 
-    case 17:
-      w1[0] = w1[0]            | append0[0] <<  8;
-      w1[1] = append0[0] >> 24 | append0[1] <<  8;
-      w1[2] = append0[1] >> 24 | append0[2] <<  8;
-      w1[3] = append0[2] >> 24 | append0[3] <<  8;
-      w2[0] = append0[3] >> 24 | append1[0] <<  8;
-      w2[1] = append1[0] >> 24 | append1[1] <<  8;
-      w2[2] = append1[1] >> 24 | append1[2] <<  8;
-      w2[3] = append1[2] >> 24 | append1[3] <<  8;
-      w3[0] = append1[3] >> 24 | append2[0] <<  8;
-      w3[1] = append2[0] >> 24;
+    case 61:
+      w[15] = w[15] | 0x8000;
+      break;
+
+    case 62:
+      w[15] = w[15] | 0x800000;
       break;
 
-    case 18:
-      w1[0] = w1[0]            | append0[0] << 16;
-      w1[1] = append0[0] >> 16 | append0[1] << 16;
-      w1[2] = append0[1] >> 16 | append0[2] << 16;
-      w1[3] = append0[2] >> 16 | append0[3] << 16;
-      w2[0] = append0[3] >> 16 | append1[0] << 16;
-      w2[1] = append1[0] >> 16 | append1[1] << 16;
-      w2[2] = append1[1] >> 16 | append1[2] << 16;
-      w2[3] = append1[2] >> 16 | append1[3] << 16;
-      w3[0] = append1[3] >> 16 | append2[0] << 16;
-      w3[1] = append2[0] >> 16;
+    case 63:
+      w[15] = w[15] | 0x80000000;
       break;
+  }
+}
 
-    case 19:
-      w1[0] = w1[0]            | append0[0] << 24;
-      w1[1] = append0[0] >>  8 | append0[1] << 24;
-      w1[2] = append0[1] >>  8 | append0[2] << 24;
-      w1[3] = append0[2] >>  8 | append0[3] << 24;
-      w2[0] = append0[3] >>  8 | append1[0] << 24;
-      w2[1] = append1[0] >>  8 | append1[1] << 24;
-      w2[2] = append1[1] >>  8 | append1[2] << 24;
-      w2[3] = append1[2] >>  8 | append1[3] << 24;
-      w3[0] = append1[3] >>  8 | append2[0] << 24;
-      w3[1] = append2[0] >>  8;
+// before: append_0x80_8
+static void append_0x80_1x32 (u32 w[32], const u32 offset)
+{
+  switch (offset)
+  {
+    case 0:
+      w[ 0] = 0x80;
       break;
 
-    case 20:
-      w1[1] = append0[0];
-      w1[2] = append0[1];
-      w1[3] = append0[2];
-      w2[0] = append0[3];
-      w2[1] = append1[0];
-      w2[2] = append1[1];
-      w2[3] = append1[2];
-      w3[0] = append1[3];
-      w3[1] = append2[0];
+    case 1:
+      w[ 0] = w[ 0] | 0x8000;
       break;
 
-    case 21:
-      w1[1] = w1[1]            | append0[0] <<  8;
-      w1[2] = append0[0] >> 24 | append0[1] <<  8;
-      w1[3] = append0[1] >> 24 | append0[2] <<  8;
-      w2[0] = append0[2] >> 24 | append0[3] <<  8;
-      w2[1] = append0[3] >> 24 | append1[0] <<  8;
-      w2[2] = append1[0] >> 24 | append1[1] <<  8;
-      w2[3] = append1[1] >> 24 | append1[2] <<  8;
-      w3[0] = append1[2] >> 24 | append1[3] <<  8;
-      w3[1] = append1[3] >> 24 | append2[0] <<  8;
+    case 2:
+      w[ 0] = w[ 0] | 0x800000;
       break;
 
-    case 22:
-      w1[1] = w1[1]            | append0[0] << 16;
-      w1[2] = append0[0] >> 16 | append0[1] << 16;
-      w1[3] = append0[1] >> 16 | append0[2] << 16;
-      w2[0] = append0[2] >> 16 | append0[3] << 16;
-      w2[1] = append0[3] >> 16 | append1[0] << 16;
-      w2[2] = append1[0] >> 16 | append1[1] << 16;
-      w2[3] = append1[1] >> 16 | append1[2] << 16;
-      w3[0] = append1[2] >> 16 | append1[3] << 16;
-      w3[1] = append1[3] >> 16 | append2[0] << 16;
+    case 3:
+      w[ 0] = w[ 0] | 0x80000000;
       break;
 
-    case 23:
-      w1[1] = w1[1]            | append0[0] << 24;
-      w1[2] = append0[0] >>  8 | append0[1] << 24;
-      w1[3] = append0[1] >>  8 | append0[2] << 24;
-      w2[0] = append0[2] >>  8 | append0[3] << 24;
-      w2[1] = append0[3] >>  8 | append1[0] << 24;
-      w2[2] = append1[0] >>  8 | append1[1] << 24;
-      w2[3] = append1[1] >>  8 | append1[2] << 24;
-      w3[0] = append1[2] >>  8 | append1[3] << 24;
-      w3[1] = append1[3] >>  8 | append2[0] << 24;
+    case 4:
+      w[ 1] = 0x80;
       break;
 
-    case 24:
-      w1[2] = append0[0];
-      w1[3] = append0[1];
-      w2[0] = append0[2];
-      w2[1] = append0[3];
-      w2[2] = append1[0];
-      w2[3] = append1[1];
-      w3[0] = append1[2];
-      w3[1] = append1[3];
+    case 5:
+      w[ 1] = w[ 1] | 0x8000;
       break;
 
-    case 25:
-      w1[2] = w1[2]            | append0[0] <<  8;
-      w1[3] = append0[0] >> 24 | append0[1] <<  8;
-      w2[0] = append0[1] >> 24 | append0[2] <<  8;
-      w2[1] = append0[2] >> 24 | append0[3] <<  8;
-      w2[2] = append0[3] >> 24 | append1[0] <<  8;
-      w2[3] = append1[0] >> 24 | append1[1] <<  8;
-      w3[0] = append1[1] >> 24 | append1[2] <<  8;
-      w3[1] = append1[2] >> 24 | append1[3] <<  8;
+    case 6:
+      w[ 1] = w[ 1] | 0x800000;
       break;
 
-    case 26:
-      w1[2] = w1[2]            | append0[0] << 16;
-      w1[3] = append0[0] >> 16 | append0[1] << 16;
-      w2[0] = append0[1] >> 16 | append0[2] << 16;
-      w2[1] = append0[2] >> 16 | append0[3] << 16;
-      w2[2] = append0[3] >> 16 | append1[0] << 16;
-      w2[3] = append1[0] >> 16 | append1[1] << 16;
-      w3[0] = append1[1] >> 16 | append1[2] << 16;
-      w3[1] = append1[2] >> 16 | append1[3] << 16;
+    case 7:
+      w[ 1] = w[ 1] | 0x80000000;
       break;
 
-    case 27:
-      w1[2] = w1[2]            | append0[0] << 24;
-      w1[3] = append0[0] >>  8 | append0[1] << 24;
-      w2[0] = append0[1] >>  8 | append0[2] << 24;
-      w2[1] = append0[2] >>  8 | append0[3] << 24;
-      w2[2] = append0[3] >>  8 | append1[0] << 24;
-      w2[3] = append1[0] >>  8 | append1[1] << 24;
-      w3[0] = append1[1] >>  8 | append1[2] << 24;
-      w3[1] = append1[2] >>  8 | append1[3] << 24;
+    case 8:
+      w[ 2] = 0x80;
       break;
 
-    case 28:
-      w1[3] = append0[0];
-      w2[0] = append0[1];
-      w2[1] = append0[2];
-      w2[2] = append0[3];
-      w2[3] = append1[0];
-      w3[0] = append1[1];
-      w3[1] = append1[2];
+    case 9:
+      w[ 2] = w[ 2] | 0x8000;
       break;
 
-    case 29:
-      w1[3] = w1[3]            | append0[0] <<  8;
-      w2[0] = append0[0] >> 24 | append0[1] <<  8;
-      w2[1] = append0[1] >> 24 | append0[2] <<  8;
-      w2[2] = append0[2] >> 24 | append0[3] <<  8;
-      w2[3] = append0[3] >> 24 | append1[0] <<  8;
-      w3[0] = append1[0] >> 24 | append1[1] <<  8;
-      w3[1] = append1[1] >> 24 | append1[2] <<  8;
+    case 10:
+      w[ 2] = w[ 2] | 0x800000;
       break;
 
-    case 30:
-      w1[3] = w1[3]            | append0[0] << 16;
-      w2[0] = append0[0] >> 16 | append0[1] << 16;
-      w2[1] = append0[1] >> 16 | append0[2] << 16;
-      w2[2] = append0[2] >> 16 | append0[3] << 16;
-      w2[3] = append0[3] >> 16 | append1[0] << 16;
-      w3[0] = append1[0] >> 16 | append1[1] << 16;
-      w3[1] = append1[1] >> 16 | append1[2] << 16;
+    case 11:
+      w[ 2] = w[ 2] | 0x80000000;
       break;
 
-    case 31:
-      w1[3] = w1[3]            | append0[0] << 24;
-      w2[0] = append0[0] >>  8 | append0[1] << 24;
-      w2[1] = append0[1] >>  8 | append0[2] << 24;
-      w2[2] = append0[2] >>  8 | append0[3] << 24;
-      w2[3] = append0[3] >>  8 | append1[0] << 24;
-      w3[0] = append1[0] >>  8 | append1[1] << 24;
-      w3[1] = append1[1] >>  8 | append1[2] << 24;
+    case 12:
+      w[ 3] = 0x80;
       break;
 
-    case 32:
-      w2[0] = append0[0];
-      w2[1] = append0[1];
-      w2[2] = append0[2];
-      w2[3] = append0[3];
-      w3[0] = append1[0];
-      w3[1] = append1[1];
+    case 13:
+      w[ 3] = w[ 3] | 0x8000;
       break;
-  }
-}
 
-static void switch_buffer_by_offset (u32 w0[4], u32 w1[4], u32 w2[4], u32 w3[4], const u32 offset)
-{
-  #ifdef IS_AMD
-  const int offset_mod_4 = offset & 3;
+    case 14:
+      w[ 3] = w[ 3] | 0x800000;
+      break;
 
-  const int offset_minus_4 = 4 - offset;
+    case 15:
+      w[ 3] = w[ 3] | 0x80000000;
+      break;
 
-  switch (offset / 4)
-  {
-    case 0:
-      w3[2] = amd_bytealign (    0, w3[1], offset_minus_4);
-      w3[1] = amd_bytealign (w3[1], w3[0], offset_minus_4);
-      w3[0] = amd_bytealign (w3[0], w2[3], offset_minus_4);
-      w2[3] = amd_bytealign (w2[3], w2[2], offset_minus_4);
-      w2[2] = amd_bytealign (w2[2], w2[1], offset_minus_4);
-      w2[1] = amd_bytealign (w2[1], w2[0], offset_minus_4);
-      w2[0] = amd_bytealign (w2[0], w1[3], offset_minus_4);
-      w1[3] = amd_bytealign (w1[3], w1[2], offset_minus_4);
-      w1[2] = amd_bytealign (w1[2], w1[1], offset_minus_4);
-      w1[1] = amd_bytealign (w1[1], w1[0], offset_minus_4);
-      w1[0] = amd_bytealign (w1[0], w0[3], offset_minus_4);
-      w0[3] = amd_bytealign (w0[3], w0[2], offset_minus_4);
-      w0[2] = amd_bytealign (w0[2], w0[1], offset_minus_4);
-      w0[1] = amd_bytealign (w0[1], w0[0], offset_minus_4);
-      w0[0] = amd_bytealign (w0[0],     0, offset_minus_4);
+    case 16:
+      w[ 4] = 0x80;
+      break;
 
-      if (offset_mod_4 == 0)
-      {
-        w0[0] = w0[1];
-        w0[1] = w0[2];
-        w0[2] = w0[3];
-        w0[3] = w1[0];
-        w1[0] = w1[1];
-        w1[1] = w1[2];
-        w1[2] = w1[3];
-        w1[3] = w2[0];
-        w2[0] = w2[1];
-        w2[1] = w2[2];
-        w2[2] = w2[3];
-        w2[3] = w3[0];
-        w3[0] = w3[1];
-        w3[1] = w3[2];
-        w3[2] = 0;
-      }
+    case 17:
+      w[ 4] = w[ 4] | 0x8000;
+      break;
 
+    case 18:
+      w[ 4] = w[ 4] | 0x800000;
       break;
 
-    case 1:
-      w3[2] = amd_bytealign (    0, w3[0], offset_minus_4);
-      w3[1] = amd_bytealign (w3[0], w2[3], offset_minus_4);
-      w3[0] = amd_bytealign (w2[3], w2[2], offset_minus_4);
-      w2[3] = amd_bytealign (w2[2], w2[1], offset_minus_4);
-      w2[2] = amd_bytealign (w2[1], w2[0], offset_minus_4);
-      w2[1] = amd_bytealign (w2[0], w1[3], offset_minus_4);
-      w2[0] = amd_bytealign (w1[3], w1[2], offset_minus_4);
-      w1[3] = amd_bytealign (w1[2], w1[1], offset_minus_4);
-      w1[2] = amd_bytealign (w1[1], w1[0], offset_minus_4);
-      w1[1] = amd_bytealign (w1[0], w0[3], offset_minus_4);
-      w1[0] = amd_bytealign (w0[3], w0[2], offset_minus_4);
-      w0[3] = amd_bytealign (w0[2], w0[1], offset_minus_4);
-      w0[2] = amd_bytealign (w0[1], w0[0], offset_minus_4);
-      w0[1] = amd_bytealign (w0[0],     0, offset_minus_4);
-      w0[0] = 0;
+    case 19:
+      w[ 4] = w[ 4] | 0x80000000;
+      break;
+
+    case 20:
+      w[ 5] = 0x80;
+      break;
 
-      if (offset_mod_4 == 0)
-      {
-        w0[1] = w0[2];
-        w0[2] = w0[3];
-        w0[3] = w1[0];
-        w1[0] = w1[1];
-        w1[1] = w1[2];
-        w1[2] = w1[3];
-        w1[3] = w2[0];
-        w2[0] = w2[1];
-        w2[1] = w2[2];
-        w2[2] = w2[3];
-        w2[3] = w3[0];
-        w3[0] = w3[1];
-        w3[1] = w3[2];
-        w3[2] = 0;
-      }
+    case 21:
+      w[ 5] = w[ 5] | 0x8000;
+      break;
 
+    case 22:
+      w[ 5] = w[ 5] | 0x800000;
       break;
 
-    case 2:
-      w3[2] = amd_bytealign (    0, w2[3], offset_minus_4);
-      w3[1] = amd_bytealign (w2[3], w2[2], offset_minus_4);
-      w3[0] = amd_bytealign (w2[2], w2[1], offset_minus_4);
-      w2[3] = amd_bytealign (w2[1], w2[0], offset_minus_4);
-      w2[2] = amd_bytealign (w2[0], w1[3], offset_minus_4);
-      w2[1] = amd_bytealign (w1[3], w1[2], offset_minus_4);
-      w2[0] = amd_bytealign (w1[2], w1[1], offset_minus_4);
-      w1[3] = amd_bytealign (w1[1], w1[0], offset_minus_4);
-      w1[2] = amd_bytealign (w1[0], w0[3], offset_minus_4);
-      w1[1] = amd_bytealign (w0[3], w0[2], offset_minus_4);
-      w1[0] = amd_bytealign (w0[2], w0[1], offset_minus_4);
-      w0[3] = amd_bytealign (w0[1], w0[0], offset_minus_4);
-      w0[2] = amd_bytealign (w0[0],     0, offset_minus_4);
-      w0[1] = 0;
-      w0[0] = 0;
+    case 23:
+      w[ 5] = w[ 5] | 0x80000000;
+      break;
 
-      if (offset_mod_4 == 0)
-      {
-        w0[2] = w0[3];
-        w0[3] = w1[0];
-        w1[0] = w1[1];
-        w1[1] = w1[2];
-        w1[2] = w1[3];
-        w1[3] = w2[0];
-        w2[0] = w2[1];
-        w2[1] = w2[2];
-        w2[2] = w2[3];
-        w2[3] = w3[0];
-        w3[0] = w3[1];
-        w3[1] = w3[2];
-        w3[2] = 0;
-      }
+    case 24:
+      w[ 6] = 0x80;
+      break;
 
+    case 25:
+      w[ 6] = w[ 6] | 0x8000;
       break;
 
-    case 3:
-      w3[2] = amd_bytealign (    0, w2[2], offset_minus_4);
-      w3[1] = amd_bytealign (w2[2], w2[1], offset_minus_4);
-      w3[0] = amd_bytealign (w2[1], w2[0], offset_minus_4);
-      w2[3] = amd_bytealign (w2[0], w1[3], offset_minus_4);
-      w2[2] = amd_bytealign (w1[3], w1[2], offset_minus_4);
-      w2[1] = amd_bytealign (w1[2], w1[1], offset_minus_4);
-      w2[0] = amd_bytealign (w1[1], w1[0], offset_minus_4);
-      w1[3] = amd_bytealign (w1[0], w0[3], offset_minus_4);
-      w1[2] = amd_bytealign (w0[3], w0[2], offset_minus_4);
-      w1[1] = amd_bytealign (w0[2], w0[1], offset_minus_4);
-      w1[0] = amd_bytealign (w0[1], w0[0], offset_minus_4);
-      w0[3] = amd_bytealign (w0[0],     0, offset_minus_4);
-      w0[2] = 0;
-      w0[1] = 0;
-      w0[0] = 0;
+    case 26:
+      w[ 6] = w[ 6] | 0x800000;
+      break;
 
-      if (offset_mod_4 == 0)
-      {
-        w0[3] = w1[0];
-        w1[0] = w1[1];
-        w1[1] = w1[2];
-        w1[2] = w1[3];
-        w1[3] = w2[0];
-        w2[0] = w2[1];
-        w2[1] = w2[2];
-        w2[2] = w2[3];
-        w2[3] = w3[0];
-        w3[0] = w3[1];
-        w3[1] = w3[2];
-        w3[2] = 0;
-      }
+    case 27:
+      w[ 6] = w[ 6] | 0x80000000;
+      break;
 
+    case 28:
+      w[ 7] = 0x80;
       break;
 
-    case 4:
-      w3[2] = amd_bytealign (    0, w2[1], offset_minus_4);
-      w3[1] = amd_bytealign (w2[1], w2[0], offset_minus_4);
-      w3[0] = amd_bytealign (w2[0], w1[3], offset_minus_4);
-      w2[3] = amd_bytealign (w1[3], w1[2], offset_minus_4);
-      w2[2] = amd_bytealign (w1[2], w1[1], offset_minus_4);
-      w2[1] = amd_bytealign (w1[1], w1[0], offset_minus_4);
-      w2[0] = amd_bytealign (w1[0], w0[3], offset_minus_4);
-      w1[3] = amd_bytealign (w0[3], w0[2], offset_minus_4);
-      w1[2] = amd_bytealign (w0[2], w0[1], offset_minus_4);
-      w1[1] = amd_bytealign (w0[1], w0[0], offset_minus_4);
-      w1[0] = amd_bytealign (w0[0],     0, offset_minus_4);
-      w0[3] = 0;
-      w0[2] = 0;
-      w0[1] = 0;
-      w0[0] = 0;
+    case 29:
+      w[ 7] = w[ 7] | 0x8000;
+      break;
 
-      if (offset_mod_4 == 0)
-      {
-        w1[0] = w1[1];
-        w1[1] = w1[2];
-        w1[2] = w1[3];
-        w1[3] = w2[0];
-        w2[0] = w2[1];
-        w2[1] = w2[2];
-        w2[2] = w2[3];
-        w2[3] = w3[0];
-        w3[0] = w3[1];
-        w3[1] = w3[2];
-        w3[2] = 0;
-      }
+    case 30:
+      w[ 7] = w[ 7] | 0x800000;
+      break;
 
+    case 31:
+      w[ 7] = w[ 7] | 0x80000000;
       break;
 
-    case 5:
-      w3[2] = amd_bytealign (    0, w2[0], offset_minus_4);
-      w3[1] = amd_bytealign (w2[0], w1[3], offset_minus_4);
-      w3[0] = amd_bytealign (w1[3], w1[2], offset_minus_4);
-      w2[3] = amd_bytealign (w1[2], w1[1], offset_minus_4);
-      w2[2] = amd_bytealign (w1[1], w1[0], offset_minus_4);
-      w2[1] = amd_bytealign (w1[0], w0[3], offset_minus_4);
-      w2[0] = amd_bytealign (w0[3], w0[2], offset_minus_4);
-      w1[3] = amd_bytealign (w0[2], w0[1], offset_minus_4);
-      w1[2] = amd_bytealign (w0[1], w0[0], offset_minus_4);
-      w1[1] = amd_bytealign (w0[0],     0, offset_minus_4);
-      w1[0] = 0;
-      w0[3] = 0;
-      w0[2] = 0;
-      w0[1] = 0;
-      w0[0] = 0;
+    case 32:
+      w[ 8] = 0x80;
+      break;
 
-      if (offset_mod_4 == 0)
-      {
-        w1[1] = w1[2];
-        w1[2] = w1[3];
-        w1[3] = w2[0];
-        w2[0] = w2[1];
-        w2[1] = w2[2];
-        w2[2] = w2[3];
-        w2[3] = w3[0];
-        w3[0] = w3[1];
-        w3[1] = w3[2];
-        w3[2] = 0;
-      }
+    case 33:
+      w[ 8] = w[ 8] | 0x8000;
+      break;
 
+    case 34:
+      w[ 8] = w[ 8] | 0x800000;
       break;
 
-    case 6:
-      w3[2] = amd_bytealign (    0, w1[3], offset_minus_4);
-      w3[1] = amd_bytealign (w1[3], w1[2], offset_minus_4);
-      w3[0] = amd_bytealign (w1[2], w1[1], offset_minus_4);
-      w2[3] = amd_bytealign (w1[1], w1[0], offset_minus_4);
-      w2[2] = amd_bytealign (w1[0], w0[3], offset_minus_4);
-      w2[1] = amd_bytealign (w0[3], w0[2], offset_minus_4);
-      w2[0] = amd_bytealign (w0[2], w0[1], offset_minus_4);
-      w1[3] = amd_bytealign (w0[1], w0[0], offset_minus_4);
-      w1[2] = amd_bytealign (w0[0],     0, offset_minus_4);
-      w1[1] = 0;
-      w1[0] = 0;
-      w0[3] = 0;
-      w0[2] = 0;
-      w0[1] = 0;
-      w0[0] = 0;
+    case 35:
+      w[ 8] = w[ 8] | 0x80000000;
+      break;
 
-      if (offset_mod_4 == 0)
-      {
-        w1[2] = w1[3];
-        w1[3] = w2[0];
-        w2[0] = w2[1];
-        w2[1] = w2[2];
-        w2[2] = w2[3];
-        w2[3] = w3[0];
-        w3[0] = w3[1];
-        w3[1] = w3[2];
-        w3[2] = 0;
-      }
+    case 36:
+      w[ 9] = 0x80;
+      break;
 
+    case 37:
+      w[ 9] = w[ 9] | 0x8000;
       break;
 
-    case 7:
-      w3[2] = amd_bytealign (    0, w1[2], offset_minus_4);
-      w3[1] = amd_bytealign (w1[2], w1[1], offset_minus_4);
-      w3[0] = amd_bytealign (w1[1], w1[0], offset_minus_4);
-      w2[3] = amd_bytealign (w1[0], w0[3], offset_minus_4);
-      w2[2] = amd_bytealign (w0[3], w0[2], offset_minus_4);
-      w2[1] = amd_bytealign (w0[2], w0[1], offset_minus_4);
-      w2[0] = amd_bytealign (w0[1], w0[0], offset_minus_4);
-      w1[3] = amd_bytealign (w0[0],     0, offset_minus_4);
-      w1[2] = 0;
-      w1[1] = 0;
-      w1[0] = 0;
-      w0[3] = 0;
-      w0[2] = 0;
-      w0[1] = 0;
-      w0[0] = 0;
+    case 38:
+      w[ 9] = w[ 9] | 0x800000;
+      break;
 
-      if (offset_mod_4 == 0)
-      {
-        w1[3] = w2[0];
-        w2[0] = w2[1];
-        w2[1] = w2[2];
-        w2[2] = w2[3];
-        w2[3] = w3[0];
-        w3[0] = w3[1];
-        w3[1] = w3[2];
-        w3[2] = 0;
-      }
+    case 39:
+      w[ 9] = w[ 9] | 0x80000000;
+      break;
+
+    case 40:
+      w[10] = 0x80;
+      break;
+
+    case 41:
+      w[10] = w[10] | 0x8000;
+      break;
 
+    case 42:
+      w[10] = w[10] | 0x800000;
       break;
 
-    case 8:
-      w3[2] = amd_bytealign (    0, w1[1], offset_minus_4);
-      w3[1] = amd_bytealign (w1[1], w1[0], offset_minus_4);
-      w3[0] = amd_bytealign (w1[0], w0[3], offset_minus_4);
-      w2[3] = amd_bytealign (w0[3], w0[2], offset_minus_4);
-      w2[2] = amd_bytealign (w0[2], w0[1], offset_minus_4);
-      w2[1] = amd_bytealign (w0[1], w0[0], offset_minus_4);
-      w2[0] = amd_bytealign (w0[0],     0, offset_minus_4);
-      w1[3] = 0;
-      w1[2] = 0;
-      w1[1] = 0;
-      w1[0] = 0;
-      w0[3] = 0;
-      w0[2] = 0;
-      w0[1] = 0;
-      w0[0] = 0;
-
-      if (offset_mod_4 == 0)
-      {
-        w2[0] = w2[1];
-        w2[1] = w2[2];
-        w2[2] = w2[3];
-        w2[3] = w3[0];
-        w3[0] = w3[1];
-        w3[1] = w3[2];
-        w3[2] = 0;
-      }
+    case 43:
+      w[10] = w[10] | 0x80000000;
+      break;
 
+    case 44:
+      w[11] = 0x80;
       break;
 
-    case 9:
-      w3[2] = amd_bytealign (    0, w1[0], offset_minus_4);
-      w3[1] = amd_bytealign (w1[0], w0[3], offset_minus_4);
-      w3[0] = amd_bytealign (w0[3], w0[2], offset_minus_4);
-      w2[3] = amd_bytealign (w0[2], w0[1], offset_minus_4);
-      w2[2] = amd_bytealign (w0[1], w0[0], offset_minus_4);
-      w2[1] = amd_bytealign (w0[0],     0, offset_minus_4);
-      w2[0] = 0;
-      w1[3] = 0;
-      w1[2] = 0;
-      w1[1] = 0;
-      w1[0] = 0;
-      w0[3] = 0;
-      w0[2] = 0;
-      w0[1] = 0;
-      w0[0] = 0;
+    case 45:
+      w[11] = w[11] | 0x8000;
+      break;
 
-      if (offset_mod_4 == 0)
-      {
-        w2[1] = w2[2];
-        w2[2] = w2[3];
-        w2[3] = w3[0];
-        w3[0] = w3[1];
-        w3[1] = w3[2];
-        w3[2] = 0;
-      }
+    case 46:
+      w[11] = w[11] | 0x800000;
+      break;
 
+    case 47:
+      w[11] = w[11] | 0x80000000;
       break;
 
-    case 10:
-      w3[2] = amd_bytealign (    0, w0[3], offset_minus_4);
-      w3[1] = amd_bytealign (w0[3], w0[2], offset_minus_4);
-      w3[0] = amd_bytealign (w0[2], w0[1], offset_minus_4);
-      w2[3] = amd_bytealign (w0[1], w0[0], offset_minus_4);
-      w2[2] = amd_bytealign (w0[0],     0, offset_minus_4);
-      w2[1] = 0;
-      w2[0] = 0;
-      w1[3] = 0;
-      w1[2] = 0;
-      w1[1] = 0;
-      w1[0] = 0;
-      w0[3] = 0;
-      w0[2] = 0;
-      w0[1] = 0;
-      w0[0] = 0;
+    case 48:
+      w[12] = 0x80;
+      break;
 
-      if (offset_mod_4 == 0)
-      {
-        w2[2] = w2[3];
-        w2[3] = w3[0];
-        w3[0] = w3[1];
-        w3[1] = w3[2];
-        w3[2] = 0;
-      }
+    case 49:
+      w[12] = w[12] | 0x8000;
+      break;
 
+    case 50:
+      w[12] = w[12] | 0x800000;
       break;
 
-    case 11:
-      w3[2] = amd_bytealign (    0, w0[2], offset_minus_4);
-      w3[1] = amd_bytealign (w0[2], w0[1], offset_minus_4);
-      w3[0] = amd_bytealign (w0[1], w0[0], offset_minus_4);
-      w2[3] = amd_bytealign (w0[0],     0, offset_minus_4);
-      w2[2] = 0;
-      w2[1] = 0;
-      w2[0] = 0;
-      w1[3] = 0;
-      w1[2] = 0;
-      w1[1] = 0;
-      w1[0] = 0;
-      w0[3] = 0;
-      w0[2] = 0;
-      w0[1] = 0;
-      w0[0] = 0;
+    case 51:
+      w[12] = w[12] | 0x80000000;
+      break;
 
-      if (offset_mod_4 == 0)
-      {
-        w2[3] = w3[0];
-        w3[0] = w3[1];
-        w3[1] = w3[2];
-        w3[2] = 0;
-      }
+    case 52:
+      w[13] = 0x80;
+      break;
 
+    case 53:
+      w[13] = w[13] | 0x8000;
       break;
 
-    case 12:
-      w3[2] = amd_bytealign (    0, w0[1], offset_minus_4);
-      w3[1] = amd_bytealign (w0[1], w0[0], offset_minus_4);
-      w3[0] = amd_bytealign (w0[0],     0, offset_minus_4);
-      w2[3] = 0;
-      w2[2] = 0;
-      w2[1] = 0;
-      w2[0] = 0;
-      w1[3] = 0;
-      w1[2] = 0;
-      w1[1] = 0;
-      w1[0] = 0;
-      w0[3] = 0;
-      w0[2] = 0;
-      w0[1] = 0;
-      w0[0] = 0;
+    case 54:
+      w[13] = w[13] | 0x800000;
+      break;
 
-      if (offset_mod_4 == 0)
-      {
-        w3[0] = w3[1];
-        w3[1] = w3[2];
-        w3[2] = 0;
-      }
+    case 55:
+      w[13] = w[13] | 0x80000000;
+      break;
 
+    case 56:
+      w[14] = 0x80;
       break;
 
-    case 13:
-      w3[2] = amd_bytealign (    0, w0[0], offset_minus_4);
-      w3[1] = amd_bytealign (w0[0],     0, offset_minus_4);
-      w3[0] = 0;
-      w2[3] = 0;
-      w2[2] = 0;
-      w2[1] = 0;
-      w2[0] = 0;
-      w1[3] = 0;
-      w1[2] = 0;
-      w1[1] = 0;
-      w1[0] = 0;
-      w0[3] = 0;
-      w0[2] = 0;
-      w0[1] = 0;
-      w0[0] = 0;
+    case 57:
+      w[14] = w[14] | 0x8000;
+      break;
 
-      if (offset_mod_4 == 0)
-      {
-        w3[1] = w3[2];
-        w3[2] = 0;
-      }
+    case 58:
+      w[14] = w[14] | 0x800000;
+      break;
 
+    case 59:
+      w[14] = w[14] | 0x80000000;
       break;
-  }
-  #endif
 
-  #ifdef IS_NV
-  const int offset_minus_4 = 4 - (offset % 4);
+    case 60:
+      w[15] = 0x80;
+      break;
 
-  const int selector = (0x76543210 >> (offset_minus_4 * 4)) & 0xffff;
+    case 61:
+      w[15] = w[15] | 0x8000;
+      break;
 
-  switch (offset / 4)
-  {
-    case 0:
-      w3[1] = __byte_perm (w3[0], w3[1], selector);
-      w3[0] = __byte_perm (w2[3], w3[0], selector);
-      w2[3] = __byte_perm (w2[2], w2[3], selector);
-      w2[2] = __byte_perm (w2[1], w2[2], selector);
-      w2[1] = __byte_perm (w2[0], w2[1], selector);
-      w2[0] = __byte_perm (w1[3], w2[0], selector);
-      w1[3] = __byte_perm (w1[2], w1[3], selector);
-      w1[2] = __byte_perm (w1[1], w1[2], selector);
-      w1[1] = __byte_perm (w1[0], w1[1], selector);
-      w1[0] = __byte_perm (w0[3], w1[0], selector);
-      w0[3] = __byte_perm (w0[2], w0[3], selector);
-      w0[2] = __byte_perm (w0[1], w0[2], selector);
-      w0[1] = __byte_perm (w0[0], w0[1], selector);
-      w0[0] = __byte_perm (    0, w0[0], selector);
+    case 62:
+      w[15] = w[15] | 0x800000;
+      break;
 
+    case 63:
+      w[15] = w[15] | 0x80000000;
       break;
 
-    case 1:
-      w3[1] = __byte_perm (w2[3], w3[0], selector);
-      w3[0] = __byte_perm (w2[2], w2[3], selector);
-      w2[3] = __byte_perm (w2[1], w2[2], selector);
-      w2[2] = __byte_perm (w2[0], w2[1], selector);
-      w2[1] = __byte_perm (w1[3], w2[0], selector);
-      w2[0] = __byte_perm (w1[2], w1[3], selector);
-      w1[3] = __byte_perm (w1[1], w1[2], selector);
-      w1[2] = __byte_perm (w1[0], w1[1], selector);
-      w1[1] = __byte_perm (w0[3], w1[0], selector);
-      w1[0] = __byte_perm (w0[2], w0[3], selector);
-      w0[3] = __byte_perm (w0[1], w0[2], selector);
-      w0[2] = __byte_perm (w0[0], w0[1], selector);
-      w0[1] = __byte_perm (    0, w0[0], selector);
-      w0[0] = 0;
+    case 64:
+      w[16] = 0x80;
+      break;
 
+    case 65:
+      w[16] = w[16] | 0x8000;
       break;
 
-    case 2:
-      w3[1] = __byte_perm (w2[2], w2[3], selector);
-      w3[0] = __byte_perm (w2[1], w2[2], selector);
-      w2[3] = __byte_perm (w2[0], w2[1], selector);
-      w2[2] = __byte_perm (w1[3], w2[0], selector);
-      w2[1] = __byte_perm (w1[2], w1[3], selector);
-      w2[0] = __byte_perm (w1[1], w1[2], selector);
-      w1[3] = __byte_perm (w1[0], w1[1], selector);
-      w1[2] = __byte_perm (w0[3], w1[0], selector);
-      w1[1] = __byte_perm (w0[2], w0[3], selector);
-      w1[0] = __byte_perm (w0[1], w0[2], selector);
-      w0[3] = __byte_perm (w0[0], w0[1], selector);
-      w0[2] = __byte_perm (    0, w0[0], selector);
-      w0[1] = 0;
-      w0[0] = 0;
+    case 66:
+      w[16] = w[16] | 0x800000;
+      break;
 
+    case 67:
+      w[16] = w[16] | 0x80000000;
       break;
 
-    case 3:
-      w3[1] = __byte_perm (w2[1], w2[2], selector);
-      w3[0] = __byte_perm (w2[0], w2[1], selector);
-      w2[3] = __byte_perm (w1[3], w2[0], selector);
-      w2[2] = __byte_perm (w1[2], w1[3], selector);
-      w2[1] = __byte_perm (w1[1], w1[2], selector);
-      w2[0] = __byte_perm (w1[0], w1[1], selector);
-      w1[3] = __byte_perm (w0[3], w1[0], selector);
-      w1[2] = __byte_perm (w0[2], w0[3], selector);
-      w1[1] = __byte_perm (w0[1], w0[2], selector);
-      w1[0] = __byte_perm (w0[0], w0[1], selector);
-      w0[3] = __byte_perm (    0, w0[0], selector);
-      w0[2] = 0;
-      w0[1] = 0;
-      w0[0] = 0;
+    case 68:
+      w[17] = 0x80;
+      break;
 
+    case 69:
+      w[17] = w[17] | 0x8000;
       break;
 
-    case 4:
-      w3[1] = __byte_perm (w2[0], w2[1], selector);
-      w3[0] = __byte_perm (w1[3], w2[0], selector);
-      w2[3] = __byte_perm (w1[2], w1[3], selector);
-      w2[2] = __byte_perm (w1[1], w1[2], selector);
-      w2[1] = __byte_perm (w1[0], w1[1], selector);
-      w2[0] = __byte_perm (w0[3], w1[0], selector);
-      w1[3] = __byte_perm (w0[2], w0[3], selector);
-      w1[2] = __byte_perm (w0[1], w0[2], selector);
-      w1[1] = __byte_perm (w0[0], w0[1], selector);
-      w1[0] = __byte_perm (    0, w0[0], selector);
-      w0[3] = 0;
-      w0[2] = 0;
-      w0[1] = 0;
-      w0[0] = 0;
+    case 70:
+      w[17] = w[17] | 0x800000;
+      break;
 
+    case 71:
+      w[17] = w[17] | 0x80000000;
       break;
 
-    case 5:
-      w3[1] = __byte_perm (w1[3], w2[0], selector);
-      w3[0] = __byte_perm (w1[2], w1[3], selector);
-      w2[3] = __byte_perm (w1[1], w1[2], selector);
-      w2[2] = __byte_perm (w1[0], w1[1], selector);
-      w2[1] = __byte_perm (w0[3], w1[0], selector);
-      w2[0] = __byte_perm (w0[2], w0[3], selector);
-      w1[3] = __byte_perm (w0[1], w0[2], selector);
-      w1[2] = __byte_perm (w0[0], w0[1], selector);
-      w1[1] = __byte_perm (    0, w0[0], selector);
-      w1[0] = 0;
-      w0[3] = 0;
-      w0[2] = 0;
-      w0[1] = 0;
-      w0[0] = 0;
+    case 72:
+      w[18] = 0x80;
+      break;
 
+    case 73:
+      w[18] = w[18] | 0x8000;
       break;
 
-    case 6:
-      w3[1] = __byte_perm (w1[2], w1[3], selector);
-      w3[0] = __byte_perm (w1[1], w1[2], selector);
-      w2[3] = __byte_perm (w1[0], w1[1], selector);
-      w2[2] = __byte_perm (w0[3], w1[0], selector);
-      w2[1] = __byte_perm (w0[2], w0[3], selector);
-      w2[0] = __byte_perm (w0[1], w0[2], selector);
-      w1[3] = __byte_perm (w0[0], w0[1], selector);
-      w1[2] = __byte_perm (    0, w0[0], selector);
-      w1[1] = 0;
-      w1[0] = 0;
-      w0[3] = 0;
-      w0[2] = 0;
-      w0[1] = 0;
-      w0[0] = 0;
+    case 74:
+      w[18] = w[18] | 0x800000;
+      break;
 
+    case 75:
+      w[18] = w[18] | 0x80000000;
       break;
 
-    case 7:
-      w3[1] = __byte_perm (w1[1], w1[2], selector);
-      w3[0] = __byte_perm (w1[0], w1[1], selector);
-      w2[3] = __byte_perm (w0[3], w1[0], selector);
-      w2[2] = __byte_perm (w0[2], w0[3], selector);
-      w2[1] = __byte_perm (w0[1], w0[2], selector);
-      w2[0] = __byte_perm (w0[0], w0[1], selector);
-      w1[3] = __byte_perm (    0, w0[0], selector);
-      w1[2] = 0;
-      w1[1] = 0;
-      w1[0] = 0;
-      w0[3] = 0;
-      w0[2] = 0;
-      w0[1] = 0;
-      w0[0] = 0;
+    case 76:
+      w[19] = 0x80;
+      break;
 
+    case 77:
+      w[19] = w[19] | 0x8000;
       break;
 
-    case 8:
-      w3[1] = __byte_perm (w1[0], w1[1], selector);
-      w3[0] = __byte_perm (w0[3], w1[0], selector);
-      w2[3] = __byte_perm (w0[2], w0[3], selector);
-      w2[2] = __byte_perm (w0[1], w0[2], selector);
-      w2[1] = __byte_perm (w0[0], w0[1], selector);
-      w2[0] = __byte_perm (    0, w0[0], selector);
-      w1[3] = 0;
-      w1[2] = 0;
-      w1[1] = 0;
-      w1[0] = 0;
-      w0[3] = 0;
-      w0[2] = 0;
-      w0[1] = 0;
-      w0[0] = 0;
+    case 78:
+      w[19] = w[19] | 0x800000;
+      break;
 
+    case 79:
+      w[19] = w[19] | 0x80000000;
       break;
 
-    case 9:
-      w3[1] = __byte_perm (w0[3], w1[0], selector);
-      w3[0] = __byte_perm (w0[2], w0[3], selector);
-      w2[3] = __byte_perm (w0[1], w0[2], selector);
-      w2[2] = __byte_perm (w0[0], w0[1], selector);
-      w2[1] = __byte_perm (    0, w0[0], selector);
-      w2[0] = 0;
-      w1[3] = 0;
-      w1[2] = 0;
-      w1[1] = 0;
-      w1[0] = 0;
-      w0[3] = 0;
-      w0[2] = 0;
-      w0[1] = 0;
-      w0[0] = 0;
+    case 80:
+      w[20] = 0x80;
+      break;
 
+    case 81:
+      w[20] = w[20] | 0x8000;
       break;
 
-    case 10:
-      w3[1] = __byte_perm (w0[2], w0[3], selector);
-      w3[0] = __byte_perm (w0[1], w0[2], selector);
-      w2[3] = __byte_perm (w0[0], w0[1], selector);
-      w2[2] = __byte_perm (    0, w0[0], selector);
-      w2[1] = 0;
-      w2[0] = 0;
-      w1[3] = 0;
-      w1[2] = 0;
-      w1[1] = 0;
-      w1[0] = 0;
-      w0[3] = 0;
-      w0[2] = 0;
-      w0[1] = 0;
-      w0[0] = 0;
+    case 82:
+      w[20] = w[20] | 0x800000;
+      break;
 
+    case 83:
+      w[20] = w[20] | 0x80000000;
       break;
 
-    case 11:
-      w3[1] = __byte_perm (w0[1], w0[2], selector);
-      w3[0] = __byte_perm (w0[0], w0[1], selector);
-      w2[3] = __byte_perm (    0, w0[0], selector);
-      w2[2] = 0;
-      w2[1] = 0;
-      w2[0] = 0;
-      w1[3] = 0;
-      w1[2] = 0;
-      w1[1] = 0;
-      w1[0] = 0;
-      w0[3] = 0;
-      w0[2] = 0;
-      w0[1] = 0;
-      w0[0] = 0;
+    case 84:
+      w[21] = 0x80;
+      break;
 
+    case 85:
+      w[21] = w[21] | 0x8000;
       break;
 
-    case 12:
-      w3[1] = __byte_perm (w0[0], w0[1], selector);
-      w3[0] = __byte_perm (    0, w0[0], selector);
-      w2[3] = 0;
-      w2[2] = 0;
-      w2[1] = 0;
-      w2[0] = 0;
-      w1[3] = 0;
-      w1[2] = 0;
-      w1[1] = 0;
-      w1[0] = 0;
-      w0[3] = 0;
-      w0[2] = 0;
-      w0[1] = 0;
-      w0[0] = 0;
+    case 86:
+      w[21] = w[21] | 0x800000;
+      break;
 
+    case 87:
+      w[21] = w[21] | 0x80000000;
       break;
 
-    case 13:
-      w3[1] = __byte_perm (    0, w0[0], selector);
-      w3[0] = 0;
-      w2[3] = 0;
-      w2[2] = 0;
-      w2[1] = 0;
-      w2[0] = 0;
-      w1[3] = 0;
-      w1[2] = 0;
-      w1[1] = 0;
-      w1[0] = 0;
-      w0[3] = 0;
-      w0[2] = 0;
-      w0[1] = 0;
-      w0[0] = 0;
+    case 88:
+      w[22] = 0x80;
+      break;
+
+    case 89:
+      w[22] = w[22] | 0x8000;
+      break;
 
+    case 90:
+      w[22] = w[22] | 0x800000;
       break;
-  }
-  #endif
-}
 
-static void switch_buffer_by_offset_be (u32 w0[4], u32 w1[4], u32 w2[4], u32 w3[4], const u32 offset)
-{
-  #ifdef IS_AMD
-  switch (offset / 4)
-  {
-    case 0:
-      w3[2] = amd_bytealign (w3[1],     0, offset);
-      w3[1] = amd_bytealign (w3[0], w3[1], offset);
-      w3[0] = amd_bytealign (w2[3], w3[0], offset);
-      w2[3] = amd_bytealign (w2[2], w2[3], offset);
-      w2[2] = amd_bytealign (w2[1], w2[2], offset);
-      w2[1] = amd_bytealign (w2[0], w2[1], offset);
-      w2[0] = amd_bytealign (w1[3], w2[0], offset);
-      w1[3] = amd_bytealign (w1[2], w1[3], offset);
-      w1[2] = amd_bytealign (w1[1], w1[2], offset);
-      w1[1] = amd_bytealign (w1[0], w1[1], offset);
-      w1[0] = amd_bytealign (w0[3], w1[0], offset);
-      w0[3] = amd_bytealign (w0[2], w0[3], offset);
-      w0[2] = amd_bytealign (w0[1], w0[2], offset);
-      w0[1] = amd_bytealign (w0[0], w0[1], offset);
-      w0[0] = amd_bytealign (    0, w0[0], offset);
+    case 91:
+      w[22] = w[22] | 0x80000000;
+      break;
+
+    case 92:
+      w[23] = 0x80;
       break;
 
-    case 1:
-      w3[2] = amd_bytealign (w3[0],     0, offset);
-      w3[1] = amd_bytealign (w2[3], w3[0], offset);
-      w3[0] = amd_bytealign (w2[2], w2[3], offset);
-      w2[3] = amd_bytealign (w2[1], w2[2], offset);
-      w2[2] = amd_bytealign (w2[0], w2[1], offset);
-      w2[1] = amd_bytealign (w1[3], w2[0], offset);
-      w2[0] = amd_bytealign (w1[2], w1[3], offset);
-      w1[3] = amd_bytealign (w1[1], w1[2], offset);
-      w1[2] = amd_bytealign (w1[0], w1[1], offset);
-      w1[1] = amd_bytealign (w0[3], w1[0], offset);
-      w1[0] = amd_bytealign (w0[2], w0[3], offset);
-      w0[3] = amd_bytealign (w0[1], w0[2], offset);
-      w0[2] = amd_bytealign (w0[0], w0[1], offset);
-      w0[1] = amd_bytealign (    0, w0[0], offset);
-      w0[0] = 0;
+    case 93:
+      w[23] = w[23] | 0x8000;
       break;
 
-    case 2:
-      w3[2] = amd_bytealign (w2[3],     0, offset);
-      w3[1] = amd_bytealign (w2[2], w2[3], offset);
-      w3[0] = amd_bytealign (w2[1], w2[2], offset);
-      w2[3] = amd_bytealign (w2[0], w2[1], offset);
-      w2[2] = amd_bytealign (w1[3], w2[0], offset);
-      w2[1] = amd_bytealign (w1[2], w1[3], offset);
-      w2[0] = amd_bytealign (w1[1], w1[2], offset);
-      w1[3] = amd_bytealign (w1[0], w1[1], offset);
-      w1[2] = amd_bytealign (w0[3], w1[0], offset);
-      w1[1] = amd_bytealign (w0[2], w0[3], offset);
-      w1[0] = amd_bytealign (w0[1], w0[2], offset);
-      w0[3] = amd_bytealign (w0[0], w0[1], offset);
-      w0[2] = amd_bytealign (    0, w0[0], offset);
-      w0[1] = 0;
-      w0[0] = 0;
+    case 94:
+      w[23] = w[23] | 0x800000;
       break;
 
-    case 3:
-      w3[2] = amd_bytealign (w2[2],     0, offset);
-      w3[1] = amd_bytealign (w2[1], w2[2], offset);
-      w3[0] = amd_bytealign (w2[0], w2[1], offset);
-      w2[3] = amd_bytealign (w1[3], w2[0], offset);
-      w2[2] = amd_bytealign (w1[2], w1[3], offset);
-      w2[1] = amd_bytealign (w1[1], w1[2], offset);
-      w2[0] = amd_bytealign (w1[0], w1[1], offset);
-      w1[3] = amd_bytealign (w0[3], w1[0], offset);
-      w1[2] = amd_bytealign (w0[2], w0[3], offset);
-      w1[1] = amd_bytealign (w0[1], w0[2], offset);
-      w1[0] = amd_bytealign (w0[0], w0[1], offset);
-      w0[3] = amd_bytealign (    0, w0[0], offset);
-      w0[2] = 0;
-      w0[1] = 0;
-      w0[0] = 0;
+    case 95:
+      w[23] = w[23] | 0x80000000;
       break;
 
-    case 4:
-      w3[2] = amd_bytealign (w2[1],     0, offset);
-      w3[1] = amd_bytealign (w2[0], w2[1], offset);
-      w3[0] = amd_bytealign (w1[3], w2[0], offset);
-      w2[3] = amd_bytealign (w1[2], w1[3], offset);
-      w2[2] = amd_bytealign (w1[1], w1[2], offset);
-      w2[1] = amd_bytealign (w1[0], w1[1], offset);
-      w2[0] = amd_bytealign (w0[3], w1[0], offset);
-      w1[3] = amd_bytealign (w0[2], w0[3], offset);
-      w1[2] = amd_bytealign (w0[1], w0[2], offset);
-      w1[1] = amd_bytealign (w0[0], w0[1], offset);
-      w1[0] = amd_bytealign (    0, w0[0], offset);
-      w0[3] = 0;
-      w0[2] = 0;
-      w0[1] = 0;
-      w0[0] = 0;
+    case 96:
+      w[24] = 0x80;
       break;
 
-    case 5:
-      w3[2] = amd_bytealign (w2[0],     0, offset);
-      w3[1] = amd_bytealign (w1[3], w2[0], offset);
-      w3[0] = amd_bytealign (w1[2], w1[3], offset);
-      w2[3] = amd_bytealign (w1[1], w1[2], offset);
-      w2[2] = amd_bytealign (w1[0], w1[1], offset);
-      w2[1] = amd_bytealign (w0[3], w1[0], offset);
-      w2[0] = amd_bytealign (w0[2], w0[3], offset);
-      w1[3] = amd_bytealign (w0[1], w0[2], offset);
-      w1[2] = amd_bytealign (w0[0], w0[1], offset);
-      w1[1] = amd_bytealign (    0, w0[0], offset);
-      w1[0] = 0;
-      w0[3] = 0;
-      w0[2] = 0;
-      w0[1] = 0;
-      w0[0] = 0;
+    case 97:
+      w[24] = w[24] | 0x8000;
       break;
 
-    case 6:
-      w3[2] = amd_bytealign (w1[3],     0, offset);
-      w3[1] = amd_bytealign (w1[2], w1[3], offset);
-      w3[0] = amd_bytealign (w1[1], w1[2], offset);
-      w2[3] = amd_bytealign (w1[0], w1[1], offset);
-      w2[2] = amd_bytealign (w0[3], w1[0], offset);
-      w2[1] = amd_bytealign (w0[2], w0[3], offset);
-      w2[0] = amd_bytealign (w0[1], w0[2], offset);
-      w1[3] = amd_bytealign (w0[0], w0[1], offset);
-      w1[2] = amd_bytealign (    0, w0[0], offset);
-      w1[1] = 0;
-      w1[0] = 0;
-      w0[3] = 0;
-      w0[2] = 0;
-      w0[1] = 0;
-      w0[0] = 0;
+    case 98:
+      w[24] = w[24] | 0x800000;
       break;
 
-    case 7:
-      w3[2] = amd_bytealign (w1[2],     0, offset);
-      w3[1] = amd_bytealign (w1[1], w1[2], offset);
-      w3[0] = amd_bytealign (w1[0], w1[1], offset);
-      w2[3] = amd_bytealign (w0[3], w1[0], offset);
-      w2[2] = amd_bytealign (w0[2], w0[3], offset);
-      w2[1] = amd_bytealign (w0[1], w0[2], offset);
-      w2[0] = amd_bytealign (w0[0], w0[1], offset);
-      w1[3] = amd_bytealign (    0, w0[0], offset);
-      w1[2] = 0;
-      w1[1] = 0;
-      w1[0] = 0;
-      w0[3] = 0;
-      w0[2] = 0;
-      w0[1] = 0;
-      w0[0] = 0;
+    case 99:
+      w[24] = w[24] | 0x80000000;
       break;
 
-    case 8:
-      w3[2] = amd_bytealign (w1[1],     0, offset);
-      w3[1] = amd_bytealign (w1[0], w1[1], offset);
-      w3[0] = amd_bytealign (w0[3], w1[0], offset);
-      w2[3] = amd_bytealign (w0[2], w0[3], offset);
-      w2[2] = amd_bytealign (w0[1], w0[2], offset);
-      w2[1] = amd_bytealign (w0[0], w0[1], offset);
-      w2[0] = amd_bytealign (    0, w0[0], offset);
-      w1[3] = 0;
-      w1[2] = 0;
-      w1[1] = 0;
-      w1[0] = 0;
-      w0[3] = 0;
-      w0[2] = 0;
-      w0[1] = 0;
-      w0[0] = 0;
+    case 100:
+      w[25] = 0x80;
       break;
 
-    case 9:
-      w3[2] = amd_bytealign (w1[0],     0, offset);
-      w3[1] = amd_bytealign (w0[3], w1[0], offset);
-      w3[0] = amd_bytealign (w0[2], w0[3], offset);
-      w2[3] = amd_bytealign (w0[1], w0[2], offset);
-      w2[2] = amd_bytealign (w0[0], w0[1], offset);
-      w2[1] = amd_bytealign (    0, w0[0], offset);
-      w2[0] = 0;
-      w1[3] = 0;
-      w1[2] = 0;
-      w1[1] = 0;
-      w1[0] = 0;
-      w0[3] = 0;
-      w0[2] = 0;
-      w0[1] = 0;
-      w0[0] = 0;
+    case 101:
+      w[25] = w[25] | 0x8000;
       break;
 
-    case 10:
-      w3[2] = amd_bytealign (w0[3],     0, offset);
-      w3[1] = amd_bytealign (w0[2], w0[3], offset);
-      w3[0] = amd_bytealign (w0[1], w0[2], offset);
-      w2[3] = amd_bytealign (w0[0], w0[1], offset);
-      w2[2] = amd_bytealign (    0, w0[0], offset);
-      w2[1] = 0;
-      w2[0] = 0;
-      w1[3] = 0;
-      w1[2] = 0;
-      w1[1] = 0;
-      w1[0] = 0;
-      w0[3] = 0;
-      w0[2] = 0;
-      w0[1] = 0;
-      w0[0] = 0;
+    case 102:
+      w[25] = w[25] | 0x800000;
       break;
 
-    case 11:
-      w3[2] = amd_bytealign (w0[2],     0, offset);
-      w3[1] = amd_bytealign (w0[1], w0[2], offset);
-      w3[0] = amd_bytealign (w0[0], w0[1], offset);
-      w2[3] = amd_bytealign (    0, w0[0], offset);
-      w2[2] = 0;
-      w2[1] = 0;
-      w2[0] = 0;
-      w1[3] = 0;
-      w1[2] = 0;
-      w1[1] = 0;
-      w1[0] = 0;
-      w0[3] = 0;
-      w0[2] = 0;
-      w0[1] = 0;
-      w0[0] = 0;
+    case 103:
+      w[25] = w[25] | 0x80000000;
       break;
 
-    case 12:
-      w3[2] = amd_bytealign (w0[1],     0, offset);
-      w3[1] = amd_bytealign (w0[0], w0[1], offset);
-      w3[0] = amd_bytealign (    0, w0[0], offset);
-      w2[3] = 0;
-      w2[2] = 0;
-      w2[1] = 0;
-      w2[0] = 0;
-      w1[3] = 0;
-      w1[2] = 0;
-      w1[1] = 0;
-      w1[0] = 0;
-      w0[3] = 0;
-      w0[2] = 0;
-      w0[1] = 0;
-      w0[0] = 0;
+    case 104:
+      w[26] = 0x80;
       break;
 
-    case 13:
-      w3[2] = amd_bytealign (w0[0],     0, offset);
-      w3[1] = amd_bytealign (    0, w0[0], offset);
-      w3[0] = 0;
-      w2[3] = 0;
-      w2[2] = 0;
-      w2[1] = 0;
-      w2[0] = 0;
-      w1[3] = 0;
-      w1[2] = 0;
-      w1[1] = 0;
-      w1[0] = 0;
-      w0[3] = 0;
-      w0[2] = 0;
-      w0[1] = 0;
-      w0[0] = 0;
+    case 105:
+      w[26] = w[26] | 0x8000;
+      break;
+
+    case 106:
+      w[26] = w[26] | 0x800000;
+      break;
+
+    case 107:
+      w[26] = w[26] | 0x80000000;
+      break;
+
+    case 108:
+      w[27] = 0x80;
+      break;
+
+    case 109:
+      w[27] = w[27] | 0x8000;
+      break;
+
+    case 110:
+      w[27] = w[27] | 0x800000;
       break;
-  }
-  #endif
 
-  #ifdef IS_NV
-  const int selector = (0x76543210 >> ((offset & 3) * 4)) & 0xffff;
+    case 111:
+      w[27] = w[27] | 0x80000000;
+      break;
 
-  switch (offset / 4)
-  {
-    case 0:
-      w3[1] = __byte_perm (w3[1], w3[0], selector);
-      w3[0] = __byte_perm (w3[0], w2[3], selector);
-      w2[3] = __byte_perm (w2[3], w2[2], selector);
-      w2[2] = __byte_perm (w2[2], w2[1], selector);
-      w2[1] = __byte_perm (w2[1], w2[0], selector);
-      w2[0] = __byte_perm (w2[0], w1[3], selector);
-      w1[3] = __byte_perm (w1[3], w1[2], selector);
-      w1[2] = __byte_perm (w1[2], w1[1], selector);
-      w1[1] = __byte_perm (w1[1], w1[0], selector);
-      w1[0] = __byte_perm (w1[0], w0[3], selector);
-      w0[3] = __byte_perm (w0[3], w0[2], selector);
-      w0[2] = __byte_perm (w0[2], w0[1], selector);
-      w0[1] = __byte_perm (w0[1], w0[0], selector);
-      w0[0] = __byte_perm (w0[0],     0, selector);
+    case 112:
+      w[28] = 0x80;
       break;
 
-    case 1:
-      w3[1] = __byte_perm (w3[0], w2[3], selector);
-      w3[0] = __byte_perm (w2[3], w2[2], selector);
-      w2[3] = __byte_perm (w2[2], w2[1], selector);
-      w2[2] = __byte_perm (w2[1], w2[0], selector);
-      w2[1] = __byte_perm (w2[0], w1[3], selector);
-      w2[0] = __byte_perm (w1[3], w1[2], selector);
-      w1[3] = __byte_perm (w1[2], w1[1], selector);
-      w1[2] = __byte_perm (w1[1], w1[0], selector);
-      w1[1] = __byte_perm (w1[0], w0[3], selector);
-      w1[0] = __byte_perm (w0[3], w0[2], selector);
-      w0[3] = __byte_perm (w0[2], w0[1], selector);
-      w0[2] = __byte_perm (w0[1], w0[0], selector);
-      w0[1] = __byte_perm (w0[0],     0, selector);
-      w0[0] = 0;
+    case 113:
+      w[28] = w[28] | 0x8000;
       break;
 
-    case 2:
-      w3[1] = __byte_perm (w2[3], w2[2], selector);
-      w3[0] = __byte_perm (w2[2], w2[1], selector);
-      w2[3] = __byte_perm (w2[1], w2[0], selector);
-      w2[2] = __byte_perm (w2[0], w1[3], selector);
-      w2[1] = __byte_perm (w1[3], w1[2], selector);
-      w2[0] = __byte_perm (w1[2], w1[1], selector);
-      w1[3] = __byte_perm (w1[1], w1[0], selector);
-      w1[2] = __byte_perm (w1[0], w0[3], selector);
-      w1[1] = __byte_perm (w0[3], w0[2], selector);
-      w1[0] = __byte_perm (w0[2], w0[1], selector);
-      w0[3] = __byte_perm (w0[1], w0[0], selector);
-      w0[2] = __byte_perm (w0[0],     0, selector);
-      w0[1] = 0;
-      w0[0] = 0;
+    case 114:
+      w[28] = w[28] | 0x800000;
       break;
 
-    case 3:
-      w3[1] = __byte_perm (w2[2], w2[1], selector);
-      w3[0] = __byte_perm (w2[1], w2[0], selector);
-      w2[3] = __byte_perm (w2[0], w1[3], selector);
-      w2[2] = __byte_perm (w1[3], w1[2], selector);
-      w2[1] = __byte_perm (w1[2], w1[1], selector);
-      w2[0] = __byte_perm (w1[1], w1[0], selector);
-      w1[3] = __byte_perm (w1[0], w0[3], selector);
-      w1[2] = __byte_perm (w0[3], w0[2], selector);
-      w1[1] = __byte_perm (w0[2], w0[1], selector);
-      w1[0] = __byte_perm (w0[1], w0[0], selector);
-      w0[3] = __byte_perm (w0[0],     0, selector);
-      w0[2] = 0;
-      w0[1] = 0;
-      w0[0] = 0;
+    case 115:
+      w[28] = w[28] | 0x80000000;
       break;
 
-    case 4:
-      w3[1] = __byte_perm (w2[1], w2[0], selector);
-      w3[0] = __byte_perm (w2[0], w1[3], selector);
-      w2[3] = __byte_perm (w1[3], w1[2], selector);
-      w2[2] = __byte_perm (w1[2], w1[1], selector);
-      w2[1] = __byte_perm (w1[1], w1[0], selector);
-      w2[0] = __byte_perm (w1[0], w0[3], selector);
-      w1[3] = __byte_perm (w0[3], w0[2], selector);
-      w1[2] = __byte_perm (w0[2], w0[1], selector);
-      w1[1] = __byte_perm (w0[1], w0[0], selector);
-      w1[0] = __byte_perm (w0[0],     0, selector);
-      w0[3] = 0;
-      w0[2] = 0;
-      w0[1] = 0;
-      w0[0] = 0;
+    case 116:
+      w[29] = 0x80;
       break;
 
-    case 5:
-      w3[1] = __byte_perm (w2[0], w1[3], selector);
-      w3[0] = __byte_perm (w1[3], w1[2], selector);
-      w2[3] = __byte_perm (w1[2], w1[1], selector);
-      w2[2] = __byte_perm (w1[1], w1[0], selector);
-      w2[1] = __byte_perm (w1[0], w0[3], selector);
-      w2[0] = __byte_perm (w0[3], w0[2], selector);
-      w1[3] = __byte_perm (w0[2], w0[1], selector);
-      w1[2] = __byte_perm (w0[1], w0[0], selector);
-      w1[1] = __byte_perm (w0[0],     0, selector);
-      w1[0] = 0;
-      w0[3] = 0;
-      w0[2] = 0;
-      w0[1] = 0;
-      w0[0] = 0;
+    case 117:
+      w[29] = w[29] | 0x8000;
       break;
 
-    case 6:
-      w3[1] = __byte_perm (w1[3], w1[2], selector);
-      w3[0] = __byte_perm (w1[2], w1[1], selector);
-      w2[3] = __byte_perm (w1[1], w1[0], selector);
-      w2[2] = __byte_perm (w1[0], w0[3], selector);
-      w2[1] = __byte_perm (w0[3], w0[2], selector);
-      w2[0] = __byte_perm (w0[2], w0[1], selector);
-      w1[3] = __byte_perm (w0[1], w0[0], selector);
-      w1[2] = __byte_perm (w0[0],     0, selector);
-      w1[1] = 0;
-      w1[0] = 0;
-      w0[3] = 0;
-      w0[2] = 0;
-      w0[1] = 0;
-      w0[0] = 0;
+    case 118:
+      w[29] = w[29] | 0x800000;
       break;
 
-    case 7:
-      w3[1] = __byte_perm (w1[2], w1[1], selector);
-      w3[0] = __byte_perm (w1[1], w1[0], selector);
-      w2[3] = __byte_perm (w1[0], w0[3], selector);
-      w2[2] = __byte_perm (w0[3], w0[2], selector);
-      w2[1] = __byte_perm (w0[2], w0[1], selector);
-      w2[0] = __byte_perm (w0[1], w0[0], selector);
-      w1[3] = __byte_perm (w0[0],     0, selector);
-      w1[2] = 0;
-      w1[1] = 0;
-      w1[0] = 0;
-      w0[3] = 0;
-      w0[2] = 0;
-      w0[1] = 0;
-      w0[0] = 0;
+    case 119:
+      w[29] = w[29] | 0x80000000;
       break;
 
-    case 8:
-      w3[1] = __byte_perm (w1[1], w1[0], selector);
-      w3[0] = __byte_perm (w1[0], w0[3], selector);
-      w2[3] = __byte_perm (w0[3], w0[2], selector);
-      w2[2] = __byte_perm (w0[2], w0[1], selector);
-      w2[1] = __byte_perm (w0[1], w0[0], selector);
-      w2[0] = __byte_perm (w0[0],     0, selector);
-      w1[3] = 0;
-      w1[2] = 0;
-      w1[1] = 0;
-      w1[0] = 0;
-      w0[3] = 0;
-      w0[2] = 0;
-      w0[1] = 0;
-      w0[0] = 0;
+    case 120:
+      w[30] = 0x80;
       break;
 
-    case 9:
-      w3[1] = __byte_perm (w1[0], w0[3], selector);
-      w3[0] = __byte_perm (w0[3], w0[2], selector);
-      w2[3] = __byte_perm (w0[2], w0[1], selector);
-      w2[2] = __byte_perm (w0[1], w0[0], selector);
-      w2[1] = __byte_perm (w0[0],     0, selector);
-      w2[0] = 0;
-      w1[3] = 0;
-      w1[2] = 0;
-      w1[1] = 0;
-      w1[0] = 0;
-      w0[3] = 0;
-      w0[2] = 0;
-      w0[1] = 0;
-      w0[0] = 0;
+    case 121:
+      w[30] = w[30] | 0x8000;
       break;
 
-    case 10:
-      w3[1] = __byte_perm (w0[3], w0[2], selector);
-      w3[0] = __byte_perm (w0[2], w0[1], selector);
-      w2[3] = __byte_perm (w0[1], w0[0], selector);
-      w2[2] = __byte_perm (w0[0],     0, selector);
-      w2[1] = 0;
-      w2[0] = 0;
-      w1[3] = 0;
-      w1[2] = 0;
-      w1[1] = 0;
-      w1[0] = 0;
-      w0[3] = 0;
-      w0[2] = 0;
-      w0[1] = 0;
-      w0[0] = 0;
+    case 122:
+      w[30] = w[30] | 0x800000;
       break;
 
-    case 11:
-      w3[1] = __byte_perm (w0[2], w0[1], selector);
-      w3[0] = __byte_perm (w0[1], w0[0], selector);
-      w2[3] = __byte_perm (w0[0],     0, selector);
-      w2[2] = 0;
-      w2[1] = 0;
-      w2[0] = 0;
-      w1[3] = 0;
-      w1[2] = 0;
-      w1[1] = 0;
-      w1[0] = 0;
-      w0[3] = 0;
-      w0[2] = 0;
-      w0[1] = 0;
-      w0[0] = 0;
+    case 123:
+      w[30] = w[30] | 0x80000000;
       break;
 
-    case 12:
-      w3[1] = __byte_perm (w0[1], w0[0], selector);
-      w3[0] = __byte_perm (w0[0],     0, selector);
-      w2[3] = 0;
-      w2[2] = 0;
-      w2[1] = 0;
-      w2[0] = 0;
-      w1[3] = 0;
-      w1[2] = 0;
-      w1[1] = 0;
-      w1[0] = 0;
-      w0[3] = 0;
-      w0[2] = 0;
-      w0[1] = 0;
-      w0[0] = 0;
+    case 124:
+      w[31] = 0x80;
       break;
 
-    case 13:
-      w3[1] = __byte_perm (w0[0],     0, selector);
-      w3[0] = 0;
-      w2[3] = 0;
-      w2[2] = 0;
-      w2[1] = 0;
-      w2[0] = 0;
-      w1[3] = 0;
-      w1[2] = 0;
-      w1[1] = 0;
-      w1[0] = 0;
-      w0[3] = 0;
-      w0[2] = 0;
-      w0[1] = 0;
-      w0[0] = 0;
+    case 125:
+      w[31] = w[31] | 0x8000;
+      break;
+
+    case 126:
+      w[31] = w[31] | 0x800000;
+      break;
+
+    case 127:
+      w[31] = w[31] | 0x80000000;
       break;
   }
-  #endif
 }
+*/
index 6d8262f..18c0786 100644 (file)
@@ -166,7 +166,7 @@ __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m00010_m04 (__glo
     w3[2]  = pw_salt_len * 8;
     w3[3]  = 0;
 
-    append_0x80_4 (w0, w1, w2, w3, pw_salt_len);
+    append_0x80_4x4 (w0, w1, w2, w3, pw_salt_len);
 
     /**
      * md5
@@ -421,7 +421,7 @@ __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m00010_s04 (__glo
     w3[2]  = pw_salt_len * 8;
     w3[3]  = 0;
 
-    append_0x80_4 (w0, w1, w2, w3, pw_salt_len);
+    append_0x80_4x4 (w0, w1, w2, w3, pw_salt_len);
 
     /**
      * md5
index 956dc54..b422a71 100644 (file)
@@ -198,7 +198,7 @@ __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m00010_m04 (__glo
     w3[2] = pw_salt_len * 8;
     w3[3] = 0;
 
-    append_0x80_4 (w0, w1, w2, w3, pw_salt_len);
+    append_0x80_4x4 (w0, w1, w2, w3, pw_salt_len);
 
     /**
      * md5
@@ -487,7 +487,7 @@ __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m00010_s04 (__glo
     w3[2] = pw_salt_len * 8;
     w3[3] = 0;
 
-    append_0x80_4 (w0, w1, w2, w3, pw_salt_len);
+    append_0x80_4x4 (w0, w1, w2, w3, pw_salt_len);
 
     /**
      * md5
index 6dfd6c9..8abacc4 100644 (file)
@@ -143,7 +143,7 @@ __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m00020_m04 (__glo
     w1_t[2] |= salt_buf1[2];
     w1_t[3] |= salt_buf1[3];
 
-    append_0x80_4 (w0_t, w1_t, w2_t, w3_t, out_salt_len);
+    append_0x80_4x4 (w0_t, w1_t, w2_t, w3_t, out_salt_len);
 
     w3_t[2] = out_salt_len * 8;
 
@@ -377,7 +377,7 @@ __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m00020_s04 (__glo
     w1_t[2] |= salt_buf1[2];
     w1_t[3] |= salt_buf1[3];
 
-    append_0x80_4 (w0_t, w1_t, w2_t, w3_t, out_salt_len);
+    append_0x80_4x4 (w0_t, w1_t, w2_t, w3_t, out_salt_len);
 
     w3_t[2] = out_salt_len * 8;
 
index 672737f..2ad50ce 100644 (file)
@@ -189,7 +189,7 @@ __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m00020_m04 (__glo
     w1_t[2] |= salt_buf1[2];
     w1_t[3] |= salt_buf1[3];
 
-    append_0x80_4 (w0_t, w1_t, w2_t, w3_t, pw_salt_len);
+    append_0x80_4x4 (w0_t, w1_t, w2_t, w3_t, pw_salt_len);
 
     w3_t[2] = pw_salt_len * 8;
 
@@ -473,7 +473,7 @@ __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m00020_s04 (__glo
     w1_t[2] |= salt_buf1[2];
     w1_t[3] |= salt_buf1[3];
 
-    append_0x80_4 (w0_t, w1_t, w2_t, w3_t, pw_salt_len);
+    append_0x80_4x4 (w0_t, w1_t, w2_t, w3_t, pw_salt_len);
 
     w3_t[2] = pw_salt_len * 8;
 
index ff2e7ac..1c24133 100644 (file)
@@ -173,7 +173,7 @@ __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m00030_m04 (__glo
     w3_t[2] |= s3[2];
     w3_t[3] |= s3[3];
 
-    append_0x80_4 (w0_t, w1_t, w2_t, w3_t, out_salt_len);
+    append_0x80_4x4 (w0_t, w1_t, w2_t, w3_t, out_salt_len);
 
     w3_t[2] = out_salt_len * 8;
 
@@ -433,7 +433,7 @@ __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m00030_s04 (__glo
     w3_t[2] |= s3[2];
     w3_t[3] |= s3[3];
 
-    append_0x80_4 (w0_t, w1_t, w2_t, w3_t, out_salt_len);
+    append_0x80_4x4 (w0_t, w1_t, w2_t, w3_t, out_salt_len);
 
     w3_t[2] = out_salt_len * 8;
 
index d156010..9b76aa4 100644 (file)
@@ -219,7 +219,7 @@ __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m00030_m04 (__glo
     w3_t[2] |= s3[2];
     w3_t[3] |= s3[3];
 
-    append_0x80_4 (w0_t, w1_t, w2_t, w3_t, pw_salt_len);
+    append_0x80_4x4 (w0_t, w1_t, w2_t, w3_t, pw_salt_len);
 
     w3_t[2] = pw_salt_len * 8;
 
@@ -527,7 +527,7 @@ __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m00030_s04 (__glo
     w3_t[2] |= s3[2];
     w3_t[3] |= s3[3];
 
-    append_0x80_4 (w0_t, w1_t, w2_t, w3_t, pw_salt_len);
+    append_0x80_4x4 (w0_t, w1_t, w2_t, w3_t, pw_salt_len);
 
     w3_t[2] = pw_salt_len * 8;
 
index 7eb35bb..fcfe3b9 100644 (file)
@@ -135,7 +135,7 @@ __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m00040_m04 (__glo
     w1_t[2] |= salt_buf1[2];
     w1_t[3] |= salt_buf1[3];
 
-    append_0x80_4 (w0_t, w1_t, w2_t, w3_t, out_salt_len);
+    append_0x80_4x4 (w0_t, w1_t, w2_t, w3_t, out_salt_len);
 
     w3_t[2] = out_salt_len * 8;
 
@@ -359,7 +359,7 @@ __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m00040_s04 (__glo
     w1_t[2] |= salt_buf1[2];
     w1_t[3] |= salt_buf1[3];
 
-    append_0x80_4 (w0_t, w1_t, w2_t, w3_t, out_salt_len);
+    append_0x80_4x4 (w0_t, w1_t, w2_t, w3_t, out_salt_len);
 
     w3_t[2] = out_salt_len * 8;
 
index 2b2e1fb..2da6eb4 100644 (file)
@@ -183,7 +183,7 @@ __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m00040_m04 (__glo
     w1_t[2] |= salt_buf1[2];
     w1_t[3] |= salt_buf1[3];
 
-    append_0x80_4 (w0_t, w1_t, w2_t, w3_t, pw_salt_len);
+    append_0x80_4x4 (w0_t, w1_t, w2_t, w3_t, pw_salt_len);
 
     w3_t[2] = pw_salt_len * 8;
 
@@ -455,7 +455,7 @@ __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m00040_s04 (__glo
     w1_t[2] |= salt_buf1[2];
     w1_t[3] |= salt_buf1[3];
 
-    append_0x80_4 (w0_t, w1_t, w2_t, w3_t, pw_salt_len);
+    append_0x80_4x4 (w0_t, w1_t, w2_t, w3_t, pw_salt_len);
 
     w3_t[2] = pw_salt_len * 8;
 
index 0bfd81d..56ead01 100644 (file)
@@ -330,7 +330,7 @@ __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m00060_m04 (__glo
 
     const u32 out_len = apply_rules (rules_buf[il_pos].cmds, w0, w1, pw_len);
 
-    append_0x80_2 (w0, w1, out_len);
+    append_0x80_2x4 (w0, w1, out_len);
 
     w0_t[0] = w0[0];
     w0_t[1] = w0[1];
@@ -505,7 +505,7 @@ __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m00060_s04 (__glo
 
     const u32 out_len = apply_rules (rules_buf[il_pos].cmds, w0, w1, pw_len);
 
-    append_0x80_2 (w0, w1, out_len);
+    append_0x80_2x4 (w0, w1, out_len);
 
     w0_t[0] = w0[0];
     w0_t[1] = w0[1];
index 4fb02e9..be66c87 100644 (file)
@@ -382,7 +382,7 @@ __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m00060_m04 (__glo
     w3[2] = 0;
     w3[3] = 0;
 
-    append_0x80_4 (w0, w1, w2, w3, pw_len);
+    append_0x80_4x4 (w0, w1, w2, w3, pw_len);
 
     w0_t[0] = w0[0];
     w0_t[1] = w0[1];
@@ -611,7 +611,7 @@ __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m00060_s04 (__glo
     w3[2] = 0;
     w3[3] = 0;
 
-    append_0x80_4 (w0, w1, w2, w3, pw_len);
+    append_0x80_4x4 (w0, w1, w2, w3, pw_len);
 
     w0_t[0] = w0[0];
     w0_t[1] = w0[1];
index 1f9b124..2030320 100644 (file)
@@ -281,7 +281,7 @@ static void m00060m (u32 w0[4], u32 w1[4], u32 w2[4], u32 w3[4], const u32 pw_le
 
     w0[0] = w0l | w0r;
 
-    append_0x80_4 (w0, w1, w2, w3, pw_len);
+    append_0x80_4x4 (w0, w1, w2, w3, pw_len);
 
     w0_t[0] = w0[0];
     w0_t[1] = w0[1];
@@ -401,7 +401,7 @@ static void m00060s (u32 w0[4], u32 w1[4], u32 w2[4], u32 w3[4], const u32 pw_le
 
     w0[0] = w0l | w0r;
 
-    append_0x80_4 (w0, w1, w2, w3, pw_len);
+    append_0x80_4x4 (w0, w1, w2, w3, pw_len);
 
     w0_t[0] = w0[0];
     w0_t[1] = w0[1];
index 568564f..d280fc7 100644 (file)
@@ -90,7 +90,7 @@ __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m00100_m04 (__glo
 
     const u32 out_len = apply_rules (rules_buf[il_pos].cmds, w0, w1, pw_len);
 
-    append_0x80_2 (w0, w1, out_len);
+    append_0x80_2x4 (w0, w1, out_len);
 
     /**
      * sha1
@@ -319,7 +319,7 @@ __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m00100_s04 (__glo
 
     const u32 out_len = apply_rules (rules_buf[il_pos].cmds, w0, w1, pw_len);
 
-    append_0x80_2 (w0, w1, out_len);
+    append_0x80_2x4 (w0, w1, out_len);
 
     /**
      * sha1
index 160e41b..383d7e9 100644 (file)
@@ -68,7 +68,7 @@ __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m00100_m04 (__glo
 
   if (combs_mode == COMBINATOR_MODE_BASE_RIGHT)
   {
-    append_0x80_2 (wordl0, wordl1, pw_l_len);
+    append_0x80_2x4 (wordl0, wordl1, pw_l_len);
 
     switch_buffer_by_offset (wordl0, wordl1, wordl2, wordl3, combs_buf[0].pw_len);
   }
@@ -113,7 +113,7 @@ __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m00100_m04 (__glo
 
     if (combs_mode == COMBINATOR_MODE_BASE_LEFT)
     {
-      append_0x80_2 (wordr0, wordr1, pw_r_len);
+      append_0x80_2x4 (wordr0, wordr1, pw_r_len);
 
       switch_buffer_by_offset (wordr0, wordr1, wordr2, wordr3, pw_l_len);
     }
@@ -335,7 +335,7 @@ __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m00100_s04 (__glo
 
   if (combs_mode == COMBINATOR_MODE_BASE_RIGHT)
   {
-    append_0x80_2 (wordl0, wordl1, pw_l_len);
+    append_0x80_2x4 (wordl0, wordl1, pw_l_len);
 
     switch_buffer_by_offset (wordl0, wordl1, wordl2, wordl3, combs_buf[0].pw_len);
   }
@@ -398,7 +398,7 @@ __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m00100_s04 (__glo
 
     if (combs_mode == COMBINATOR_MODE_BASE_LEFT)
     {
-      append_0x80_2 (wordr0, wordr1, pw_r_len);
+      append_0x80_2x4 (wordr0, wordr1, pw_r_len);
 
       switch_buffer_by_offset (wordr0, wordr1, wordr2, wordr3, pw_l_len);
     }
index 1263ab2..5e88b61 100644 (file)
@@ -166,7 +166,7 @@ __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m00110_m04 (__glo
     w3[2] |= s3[2];
     w3[3] |= s3[3];
 
-    append_0x80_4 (w0, w1, w2, w3, pw_salt_len);
+    append_0x80_4x4 (w0, w1, w2, w3, pw_salt_len);
 
     /**
      * sha1
@@ -471,7 +471,7 @@ __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m00110_s04 (__glo
     w3[2] |= s3[2];
     w3[3] |= s3[3];
 
-    append_0x80_4 (w0, w1, w2, w3, pw_salt_len);
+    append_0x80_4x4 (w0, w1, w2, w3, pw_salt_len);
 
     /**
      * sha1
index 5bc9a16..b28b13b 100644 (file)
@@ -198,7 +198,7 @@ __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m00110_m04 (__glo
     w3[2] = 0;
     w3[3] = 0;
 
-    append_0x80_4 (w0, w1, w2, w3, pw_salt_len);
+    append_0x80_4x4 (w0, w1, w2, w3, pw_salt_len);
 
     /**
      * sha1
@@ -537,7 +537,7 @@ __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m00110_s04 (__glo
     w3[2] = 0;
     w3[3] = 0;
 
-    append_0x80_4 (w0, w1, w2, w3, pw_salt_len);
+    append_0x80_4x4 (w0, w1, w2, w3, pw_salt_len);
 
     /**
      * sha1
index fe682eb..2372f6f 100644 (file)
@@ -143,7 +143,7 @@ __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m00120_m04 (__glo
     w1_t[2] |= salt_buf1[2];
     w1_t[3] |= salt_buf1[3];
 
-    append_0x80_4 (w0_t, w1_t, w2_t, w3_t, out_salt_len);
+    append_0x80_4x4 (w0_t, w1_t, w2_t, w3_t, out_salt_len);
 
     w3_t[3] = out_salt_len * 8;
 
@@ -427,7 +427,7 @@ __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m00120_s04 (__glo
     w1_t[2] |= salt_buf1[2];
     w1_t[3] |= salt_buf1[3];
 
-    append_0x80_4 (w0_t, w1_t, w2_t, w3_t, out_salt_len);
+    append_0x80_4x4 (w0_t, w1_t, w2_t, w3_t, out_salt_len);
 
     w3_t[3] = out_salt_len * 8;
 
index c73c2e0..b7172e0 100644 (file)
@@ -189,7 +189,7 @@ __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m00120_m04 (__glo
     w1_t[2] |= salt_buf1[2];
     w1_t[3] |= salt_buf1[3];
 
-    append_0x80_4 (w0_t, w1_t, w2_t, w3_t, pw_salt_len);
+    append_0x80_4x4 (w0_t, w1_t, w2_t, w3_t, pw_salt_len);
 
     w3_t[3] = pw_salt_len * 8;
 
@@ -521,7 +521,7 @@ __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m00120_s04 (__glo
     w1_t[2] |= salt_buf1[2];
     w1_t[3] |= salt_buf1[3];
 
-    append_0x80_4 (w0_t, w1_t, w2_t, w3_t, pw_salt_len);
+    append_0x80_4x4 (w0_t, w1_t, w2_t, w3_t, pw_salt_len);
 
     w3_t[3] = pw_salt_len * 8;
 
index 491f451..ade4da7 100644 (file)
@@ -173,7 +173,7 @@ __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m00130_m04 (__glo
     w3_t[2] |= s3[2];
     w3_t[3] |= s3[3];
 
-    append_0x80_4 (w0_t, w1_t, w2_t, w3_t, out_salt_len);
+    append_0x80_4x4 (w0_t, w1_t, w2_t, w3_t, out_salt_len);
 
     w3_t[3] = out_salt_len * 8;
 
@@ -485,7 +485,7 @@ __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m00130_s04 (__glo
     w3_t[2] |= s3[2];
     w3_t[3] |= s3[3];
 
-    append_0x80_4 (w0_t, w1_t, w2_t, w3_t, out_salt_len);
+    append_0x80_4x4 (w0_t, w1_t, w2_t, w3_t, out_salt_len);
 
     w3_t[3] = out_salt_len * 8;
 
index 6b556a8..12a642d 100644 (file)
@@ -219,7 +219,7 @@ __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m00130_m04 (__glo
     w3_t[2] |= s3[2];
     w3_t[3] |= s3[3];
 
-    append_0x80_4 (w0_t, w1_t, w2_t, w3_t, pw_salt_len);
+    append_0x80_4x4 (w0_t, w1_t, w2_t, w3_t, pw_salt_len);
 
     w3_t[3] = pw_salt_len * 8;
 
@@ -579,7 +579,7 @@ __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m00130_s04 (__glo
     w3_t[2] |= s3[2];
     w3_t[3] |= s3[3];
 
-    append_0x80_4 (w0_t, w1_t, w2_t, w3_t, pw_salt_len);
+    append_0x80_4x4 (w0_t, w1_t, w2_t, w3_t, pw_salt_len);
 
     w3_t[3] = pw_salt_len * 8;
 
index 466b7cd..90b368d 100644 (file)
@@ -137,7 +137,7 @@ __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m00140_m04 (__glo
     w1_t[2] |= salt_buf1[2];
     w1_t[3] |= salt_buf1[3];
 
-    append_0x80_4 (w0_t, w1_t, w2_t, w3_t, out_salt_len);
+    append_0x80_4x4 (w0_t, w1_t, w2_t, w3_t, out_salt_len);
 
     w3_t[3] = out_salt_len * 8;
 
@@ -413,7 +413,7 @@ __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m00140_s04 (__glo
     w1_t[2] |= salt_buf1[2];
     w1_t[3] |= salt_buf1[3];
 
-    append_0x80_4 (w0_t, w1_t, w2_t, w3_t, out_salt_len);
+    append_0x80_4x4 (w0_t, w1_t, w2_t, w3_t, out_salt_len);
 
     w3_t[3] = out_salt_len * 8;
 
index 6512ef8..3b297d5 100644 (file)
@@ -183,7 +183,7 @@ __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m00140_m04 (__glo
     w1_t[2] |= salt_buf1[2];
     w1_t[3] |= salt_buf1[3];
 
-    append_0x80_4 (w0_t, w1_t, w2_t, w3_t, pw_salt_len);
+    append_0x80_4x4 (w0_t, w1_t, w2_t, w3_t, pw_salt_len);
 
     w3_t[3] = pw_salt_len * 8;
 
@@ -507,7 +507,7 @@ __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m00140_s04 (__glo
     w1_t[2] |= salt_buf1[2];
     w1_t[3] |= salt_buf1[3];
 
-    append_0x80_4 (w0_t, w1_t, w2_t, w3_t, pw_salt_len);
+    append_0x80_4x4 (w0_t, w1_t, w2_t, w3_t, pw_salt_len);
 
     w3_t[3] = pw_salt_len * 8;
 
index 0707e96..53db683 100644 (file)
@@ -362,7 +362,7 @@ __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m00160_m04 (__glo
 
     const u32 out_len = apply_rules (rules_buf[il_pos].cmds, w0, w1, pw_len);
 
-    append_0x80_2 (w0, w1, out_len);
+    append_0x80_2x4 (w0, w1, out_len);
 
     w0_t[0] = swap_workaround (w0[0]);
     w0_t[1] = swap_workaround (w0[1]);
@@ -537,7 +537,7 @@ __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m00160_s04 (__glo
 
     const u32 out_len = apply_rules (rules_buf[il_pos].cmds, w0, w1, pw_len);
 
-    append_0x80_2 (w0, w1, out_len);
+    append_0x80_2x4 (w0, w1, out_len);
 
     w0_t[0] = swap_workaround (w0[0]);
     w0_t[1] = swap_workaround (w0[1]);
index f6cee14..8b3cdda 100644 (file)
@@ -414,7 +414,7 @@ __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m00160_m04 (__glo
     w3[2] = 0;
     w3[3] = 0;
 
-    append_0x80_4 (w0, w1, w2, w3, pw_len);
+    append_0x80_4x4 (w0, w1, w2, w3, pw_len);
 
     w0_t[0] = swap_workaround (w0[0]);
     w0_t[1] = swap_workaround (w0[1]);
@@ -643,7 +643,7 @@ __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m00160_s04 (__glo
     w3[2] = 0;
     w3[3] = 0;
 
-    append_0x80_4 (w0, w1, w2, w3, pw_len);
+    append_0x80_4x4 (w0, w1, w2, w3, pw_len);
 
     w0_t[0] = swap_workaround (w0[0]);
     w0_t[1] = swap_workaround (w0[1]);
index 895c9de..bdfe91d 100644 (file)
@@ -90,7 +90,7 @@ __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m00190_m04 (__glo
 
     const u32 out_len = apply_rules (rules_buf[il_pos].cmds, w0, w1, pw_len);
 
-    append_0x80_2 (w0, w1, out_len);
+    append_0x80_2x4 (w0, w1, out_len);
 
     /**
      * sha1
@@ -330,7 +330,7 @@ __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m00190_s04 (__glo
 
     const u32 out_len = apply_rules (rules_buf[il_pos].cmds, w0, w1, pw_len);
 
-    append_0x80_2 (w0, w1, out_len);
+    append_0x80_2x4 (w0, w1, out_len);
 
     /**
      * sha1
index e55709d..0918054 100644 (file)
@@ -68,7 +68,7 @@ __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m00190_m04 (__glo
 
   if (combs_mode == COMBINATOR_MODE_BASE_RIGHT)
   {
-    append_0x80_2 (wordl0, wordl1, pw_l_len);
+    append_0x80_2x4 (wordl0, wordl1, pw_l_len);
 
     switch_buffer_by_offset (wordl0, wordl1, wordl2, wordl3, combs_buf[0].pw_len);
   }
@@ -113,7 +113,7 @@ __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m00190_m04 (__glo
 
     if (combs_mode == COMBINATOR_MODE_BASE_LEFT)
     {
-      append_0x80_2 (wordr0, wordr1, pw_r_len);
+      append_0x80_2x4 (wordr0, wordr1, pw_r_len);
 
       switch_buffer_by_offset (wordr0, wordr1, wordr2, wordr3, pw_l_len);
     }
@@ -352,7 +352,7 @@ __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m00190_s04 (__glo
 
   if (combs_mode == COMBINATOR_MODE_BASE_RIGHT)
   {
-    append_0x80_2 (wordl0, wordl1, pw_l_len);
+    append_0x80_2x4 (wordl0, wordl1, pw_l_len);
 
     switch_buffer_by_offset (wordl0, wordl1, wordl2, wordl3, combs_buf[0].pw_len);
   }
@@ -409,7 +409,7 @@ __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m00190_s04 (__glo
 
     if (combs_mode == COMBINATOR_MODE_BASE_LEFT)
     {
-      append_0x80_2 (wordr0, wordr1, pw_r_len);
+      append_0x80_2x4 (wordr0, wordr1, pw_r_len);
 
       switch_buffer_by_offset (wordr0, wordr1, wordr2, wordr3, pw_l_len);
     }
index 8e2db4a..cdc7017 100644 (file)
@@ -90,7 +90,7 @@ __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m00300_m04 (__glo
 
     const u32 out_len = apply_rules (rules_buf[il_pos].cmds, w0, w1, pw_len);
 
-    append_0x80_2 (w0, w1, out_len);
+    append_0x80_2x4 (w0, w1, out_len);
 
     /**
      * sha1
@@ -444,7 +444,7 @@ __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m00300_s04 (__glo
 
     const u32 out_len = apply_rules (rules_buf[il_pos].cmds, w0, w1, pw_len);
 
-    append_0x80_2 (w0, w1, out_len);
+    append_0x80_2x4 (w0, w1, out_len);
 
     /**
      * sha1
index 57938be..21635be 100644 (file)
@@ -68,7 +68,7 @@ __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m00300_m04 (__glo
 
   if (combs_mode == COMBINATOR_MODE_BASE_RIGHT)
   {
-    append_0x80_2 (wordl0, wordl1, pw_l_len);
+    append_0x80_2x4 (wordl0, wordl1, pw_l_len);
 
     switch_buffer_by_offset (wordl0, wordl1, wordl2, wordl3, combs_buf[0].pw_len);
   }
@@ -113,7 +113,7 @@ __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m00300_m04 (__glo
 
     if (combs_mode == COMBINATOR_MODE_BASE_LEFT)
     {
-      append_0x80_2 (wordr0, wordr1, pw_r_len);
+      append_0x80_2x4 (wordr0, wordr1, pw_r_len);
 
       switch_buffer_by_offset (wordr0, wordr1, wordr2, wordr3, pw_l_len);
     }
@@ -460,7 +460,7 @@ __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m00300_s04 (__glo
 
   if (combs_mode == COMBINATOR_MODE_BASE_RIGHT)
   {
-    append_0x80_2 (wordl0, wordl1, pw_l_len);
+    append_0x80_2x4 (wordl0, wordl1, pw_l_len);
 
     switch_buffer_by_offset (wordl0, wordl1, wordl2, wordl3, combs_buf[0].pw_len);
   }
@@ -523,7 +523,7 @@ __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m00300_s04 (__glo
 
     if (combs_mode == COMBINATOR_MODE_BASE_LEFT)
     {
-      append_0x80_2 (wordr0, wordr1, pw_r_len);
+      append_0x80_2x4 (wordr0, wordr1, pw_r_len);
 
       switch_buffer_by_offset (wordr0, wordr1, wordr2, wordr3, pw_l_len);
     }
index e6b6ad0..19713d3 100644 (file)
@@ -90,7 +90,7 @@ __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m00900_m04 (__glo
 
     const u32 out_len = apply_rules (rules_buf[il_pos].cmds, w0, w1, pw_len);
 
-    append_0x80_2 (w0, w1, out_len);
+    append_0x80_2x4 (w0, w1, out_len);
 
     w3[2] = out_len * 8;
 
@@ -247,7 +247,7 @@ __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m00900_s04 (__glo
 
     const u32 out_len = apply_rules (rules_buf[il_pos].cmds, w0, w1, pw_len);
 
-    append_0x80_2 (w0, w1, out_len);
+    append_0x80_2x4 (w0, w1, out_len);
 
     w3[2] = out_len * 8;
 
index c4d3a3e..f30c03a 100644 (file)
@@ -68,7 +68,7 @@ __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m00900_m04 (__glo
 
   if (combs_mode == COMBINATOR_MODE_BASE_RIGHT)
   {
-    append_0x80_2 (wordl0, wordl1, pw_l_len);
+    append_0x80_2x4 (wordl0, wordl1, pw_l_len);
 
     switch_buffer_by_offset (wordl0, wordl1, wordl2, wordl3, combs_buf[0].pw_len);
   }
@@ -265,7 +265,7 @@ __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m00900_s04 (__glo
 
   if (combs_mode == COMBINATOR_MODE_BASE_RIGHT)
   {
-    append_0x80_2 (wordl0, wordl1, pw_l_len);
+    append_0x80_2x4 (wordl0, wordl1, pw_l_len);
 
     switch_buffer_by_offset (wordl0, wordl1, wordl2, wordl3, combs_buf[0].pw_len);
   }
index b5ca3b4..9309aa9 100644 (file)
@@ -90,7 +90,7 @@ __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m01000_m04 (__glo
 
     const u32 out_len = apply_rules (rules_buf[il_pos].cmds, w0, w1, pw_len);
 
-    append_0x80_2 (w0, w1, out_len);
+    append_0x80_2x4 (w0, w1, out_len);
 
     u32 w0_t[4];
     u32 w1_t[4];
@@ -257,7 +257,7 @@ __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m01000_s04 (__glo
 
     const u32 out_len = apply_rules (rules_buf[il_pos].cmds, w0, w1, pw_len);
 
-    append_0x80_2 (w0, w1, out_len);
+    append_0x80_2x4 (w0, w1, out_len);
 
     u32 w0_t[4];
     u32 w1_t[4];
index 2079407..e4f8e22 100644 (file)
@@ -68,7 +68,7 @@ __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m01000_m04 (__glo
 
   if (combs_mode == COMBINATOR_MODE_BASE_RIGHT)
   {
-    append_0x80_2 (wordl0, wordl1, pw_l_len);
+    append_0x80_2x4 (wordl0, wordl1, pw_l_len);
 
     switch_buffer_by_offset (wordl0, wordl1, wordl2, wordl3, combs_buf[0].pw_len);
   }
@@ -277,7 +277,7 @@ __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m01000_s04 (__glo
 
   if (combs_mode == COMBINATOR_MODE_BASE_RIGHT)
   {
-    append_0x80_2 (wordl0, wordl1, pw_l_len);
+    append_0x80_2x4 (wordl0, wordl1, pw_l_len);
 
     switch_buffer_by_offset (wordl0, wordl1, wordl2, wordl3, combs_buf[0].pw_len);
   }
index 4fb454f..178f777 100644 (file)
@@ -117,7 +117,7 @@ __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m01100_m04 (__glo
 
     const u32 out_len = apply_rules (rules_buf[il_pos].cmds, w0, w1, pw_len);
 
-    append_0x80_2 (w0, w1, out_len);
+    append_0x80_2x4 (w0, w1, out_len);
 
     u32 w0_t[4];
     u32 w1_t[4];
@@ -387,7 +387,7 @@ __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m01100_s04 (__glo
 
     const u32 out_len = apply_rules (rules_buf[il_pos].cmds, w0, w1, pw_len);
 
-    append_0x80_2 (w0, w1, out_len);
+    append_0x80_2x4 (w0, w1, out_len);
 
     u32 w0_t[4];
     u32 w1_t[4];
index 3cb6f66..7bad83e 100644 (file)
@@ -68,7 +68,7 @@ __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m01100_m04 (__glo
 
   if (combs_mode == COMBINATOR_MODE_BASE_RIGHT)
   {
-    append_0x80_2 (wordl0, wordl1, pw_l_len);
+    append_0x80_2x4 (wordl0, wordl1, pw_l_len);
 
     switch_buffer_by_offset (wordl0, wordl1, wordl2, wordl3, combs_buf[0].pw_len);
   }
@@ -380,7 +380,7 @@ __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m01100_s04 (__glo
 
   if (combs_mode == COMBINATOR_MODE_BASE_RIGHT)
   {
-    append_0x80_2 (wordl0, wordl1, pw_l_len);
+    append_0x80_2x4 (wordl0, wordl1, pw_l_len);
 
     switch_buffer_by_offset (wordl0, wordl1, wordl2, wordl3, combs_buf[0].pw_len);
   }
index 6f71e37..fd768e5 100644 (file)
@@ -90,7 +90,7 @@ __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m01400_m04 (__glo
 
     const u32 out_len = apply_rules (rules_buf[il_pos].cmds, w0, w1, pw_len);
 
-    append_0x80_2 (w0, w1, out_len);
+    append_0x80_2x4 (w0, w1, out_len);
 
     /**
      * SHA256
@@ -288,7 +288,7 @@ __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m01400_s04 (__glo
 
     const u32 out_len = apply_rules (rules_buf[il_pos].cmds, w0, w1, pw_len);
 
-    append_0x80_2 (w0, w1, out_len);
+    append_0x80_2x4 (w0, w1, out_len);
 
     /**
      * SHA256
index 54893a9..2facff5 100644 (file)
@@ -68,7 +68,7 @@ __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m01400_m04 (__glo
 
   if (combs_mode == COMBINATOR_MODE_BASE_RIGHT)
   {
-    append_0x80_2 (wordl0, wordl1, pw_l_len);
+    append_0x80_2x4 (wordl0, wordl1, pw_l_len);
 
     switch_buffer_by_offset (wordl0, wordl1, wordl2, wordl3, combs_buf[0].pw_len);
   }
@@ -113,7 +113,7 @@ __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m01400_m04 (__glo
 
     if (combs_mode == COMBINATOR_MODE_BASE_LEFT)
     {
-      append_0x80_2 (wordr0, wordr1, pw_r_len);
+      append_0x80_2x4 (wordr0, wordr1, pw_r_len);
 
       switch_buffer_by_offset (wordr0, wordr1, wordr2, wordr3, pw_l_len);
     }
@@ -304,7 +304,7 @@ __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m01400_s04 (__glo
 
   if (combs_mode == COMBINATOR_MODE_BASE_RIGHT)
   {
-    append_0x80_2 (wordl0, wordl1, pw_l_len);
+    append_0x80_2x4 (wordl0, wordl1, pw_l_len);
 
     switch_buffer_by_offset (wordl0, wordl1, wordl2, wordl3, combs_buf[0].pw_len);
   }
@@ -361,7 +361,7 @@ __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m01400_s04 (__glo
 
     if (combs_mode == COMBINATOR_MODE_BASE_LEFT)
     {
-      append_0x80_2 (wordr0, wordr1, pw_r_len);
+      append_0x80_2x4 (wordr0, wordr1, pw_r_len);
 
       switch_buffer_by_offset (wordr0, wordr1, wordr2, wordr3, pw_l_len);
     }
index 242071d..9bd5688 100644 (file)
@@ -166,7 +166,7 @@ __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m01410_m04 (__glo
     w3[2] |= s3[2];
     w3[3] |= s3[3];
 
-    append_0x80_4 (w0, w1, w2, w3, out_salt_len);
+    append_0x80_4x4 (w0, w1, w2, w3, out_salt_len);
 
     /**
      * sha256
@@ -440,7 +440,7 @@ __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m01410_s04 (__glo
     w3[2] |= s3[2];
     w3[3] |= s3[3];
 
-    append_0x80_4 (w0, w1, w2, w3, out_salt_len);
+    append_0x80_4x4 (w0, w1, w2, w3, out_salt_len);
 
     /**
      * sha256
index c421dd6..3a4861c 100644 (file)
@@ -192,7 +192,7 @@ __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m01410_m04 (__glo
     w3[2] = wordl3[2] | wordr3[2] | s3[2];
     w3[3] = wordl3[3] | wordr3[3] | s3[3];
 
-    append_0x80_4 (w0, w1, w2, w3, pw_salt_len);
+    append_0x80_4x4 (w0, w1, w2, w3, pw_salt_len);
 
     /**
      * sha256
@@ -494,7 +494,7 @@ __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m01410_s04 (__glo
     w3[2] = wordl3[2] | wordr3[2] | s3[2];
     w3[3] = wordl3[3] | wordr3[3] | s3[3];
 
-    append_0x80_4 (w0, w1, w2, w3, pw_salt_len);
+    append_0x80_4x4 (w0, w1, w2, w3, pw_salt_len);
 
     /**
      * sha256
index 71e7f4f..b513b1b 100644 (file)
@@ -127,7 +127,7 @@ __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m01420_m04 (__glo
     w1[2] |= salt_buf1[2];
     w1[3] |= salt_buf1[3];
 
-    append_0x80_4 (w0, w1, w2, w3, out_salt_len);
+    append_0x80_4x4 (w0, w1, w2, w3, out_salt_len);
 
     /**
      * sha256
@@ -362,7 +362,7 @@ __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m01420_s04 (__glo
     w1[2] |= salt_buf1[2];
     w1[3] |= salt_buf1[3];
 
-    append_0x80_4 (w0, w1, w2, w3, out_salt_len);
+    append_0x80_4x4 (w0, w1, w2, w3, out_salt_len);
 
     /**
      * sha256
index f2d3658..a05f22c 100644 (file)
@@ -167,7 +167,7 @@ __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m01420_m04 (__glo
     w1[2] |= salt_buf1[2];
     w1[3] |= salt_buf1[3];
 
-    append_0x80_4 (w0, w1, w2, w3, pw_salt_len);
+    append_0x80_4x4 (w0, w1, w2, w3, pw_salt_len);
 
     /**
      * sha256
@@ -444,7 +444,7 @@ __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m01420_s04 (__glo
     w1[2] |= salt_buf1[2];
     w1[3] |= salt_buf1[3];
 
-    append_0x80_4 (w0, w1, w2, w3, pw_salt_len);
+    append_0x80_4x4 (w0, w1, w2, w3, pw_salt_len);
 
     /**
      * sha256
index 483899d..32912d7 100644 (file)
@@ -171,7 +171,7 @@ __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m01430_m04 (__glo
     w3_t2[2] |= s3[2];
     w3_t2[3] |= s3[3];
 
-    append_0x80_4 (w0_t2, w1_t2, w2_t2, w3_t2, out_salt_len);
+    append_0x80_4x4 (w0_t2, w1_t2, w2_t2, w3_t2, out_salt_len);
 
     /**
      * sha256
@@ -450,7 +450,7 @@ __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m01430_s04 (__glo
     w3_t2[2] |= s3[2];
     w3_t2[3] |= s3[3];
 
-    append_0x80_4 (w0_t2, w1_t2, w2_t2, w3_t2, out_salt_len);
+    append_0x80_4x4 (w0_t2, w1_t2, w2_t2, w3_t2, out_salt_len);
 
     /**
      * sha256
index 2b32650..dee0372 100644 (file)
@@ -211,7 +211,7 @@ __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m01430_m04 (__glo
     w3_t2[2] |= s3[2];
     w3_t2[3] |= s3[3];
 
-    append_0x80_4 (w0_t2, w1_t2, w2_t2, w3_t2, pw_salt_len);
+    append_0x80_4x4 (w0_t2, w1_t2, w2_t2, w3_t2, pw_salt_len);
 
     /**
      * sha256
@@ -532,7 +532,7 @@ __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m01430_s04 (__glo
     w3_t2[2] |= s3[2];
     w3_t2[3] |= s3[3];
 
-    append_0x80_4 (w0_t2, w1_t2, w2_t2, w3_t2, pw_salt_len);
+    append_0x80_4x4 (w0_t2, w1_t2, w2_t2, w3_t2, pw_salt_len);
 
     /**
      * sha256
index d6d95c2..dd9dfa7 100644 (file)
@@ -129,7 +129,7 @@ __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m01440_m04 (__glo
     w1_t2[2] |= salt_buf1[2];
     w1_t2[3] |= salt_buf1[3];
 
-    append_0x80_4 (w0_t2, w1_t2, w2_t2, w3_t2, out_salt_len);
+    append_0x80_4x4 (w0_t2, w1_t2, w2_t2, w3_t2, out_salt_len);
 
     /**
      * sha256
@@ -366,7 +366,7 @@ __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m01440_s04 (__glo
     w1_t2[2] |= salt_buf1[2];
     w1_t2[3] |= salt_buf1[3];
 
-    append_0x80_4 (w0_t2, w1_t2, w2_t2, w3_t2, out_salt_len);
+    append_0x80_4x4 (w0_t2, w1_t2, w2_t2, w3_t2, out_salt_len);
 
     /**
      * sha256
index ef5088e..f4c93c8 100644 (file)
@@ -175,7 +175,7 @@ __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m01440_m04 (__glo
     w1_t2[2] |= salt_buf1[2];
     w1_t2[3] |= salt_buf1[3];
 
-    append_0x80_4 (w0_t2, w1_t2, w2_t2, w3_t2, pw_salt_len);
+    append_0x80_4x4 (w0_t2, w1_t2, w2_t2, w3_t2, pw_salt_len);
 
     /**
      * sha256
@@ -460,7 +460,7 @@ __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m01440_s04 (__glo
     w1_t2[2] |= salt_buf1[2];
     w1_t2[3] |= salt_buf1[3];
 
-    append_0x80_4 (w0_t2, w1_t2, w2_t2, w3_t2, pw_salt_len);
+    append_0x80_4x4 (w0_t2, w1_t2, w2_t2, w3_t2, pw_salt_len);
 
     /**
      * sha256
index 99e952e..9e0d4f5 100644 (file)
@@ -352,7 +352,7 @@ __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m01460_m04 (__glo
 
     const u32 out_len = apply_rules (rules_buf[il_pos].cmds, w0, w1, pw_len);
 
-    append_0x80_2 (w0, w1, out_len);
+    append_0x80_2x4 (w0, w1, out_len);
 
     w0_t[0] = swap_workaround (w0[0]);
     w0_t[1] = swap_workaround (w0[1]);
@@ -527,7 +527,7 @@ __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m01460_s04 (__glo
 
     const u32 out_len = apply_rules (rules_buf[il_pos].cmds, w0, w1, pw_len);
 
-    append_0x80_2 (w0, w1, out_len);
+    append_0x80_2x4 (w0, w1, out_len);
 
     w0_t[0] = swap_workaround (w0[0]);
     w0_t[1] = swap_workaround (w0[1]);
index 0d902e2..8941941 100644 (file)
@@ -404,7 +404,7 @@ __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m01460_m04 (__glo
     w3[2] = 0;
     w3[3] = 0;
 
-    append_0x80_4 (w0, w1, w2, w3, pw_len);
+    append_0x80_4x4 (w0, w1, w2, w3, pw_len);
 
     w0_t[0] = swap_workaround (w0[0]);
     w0_t[1] = swap_workaround (w0[1]);
@@ -633,7 +633,7 @@ __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m01460_s04 (__glo
     w3[2] = 0;
     w3[3] = 0;
 
-    append_0x80_4 (w0, w1, w2, w3, pw_len);
+    append_0x80_4x4 (w0, w1, w2, w3, pw_len);
 
     w0_t[0] = swap_workaround (w0[0]);
     w0_t[1] = swap_workaround (w0[1]);
index fef28b4..4b459fb 100644 (file)
@@ -1750,7 +1750,7 @@ __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m01600_init (__gl
 
   block_len += pw_len;
 
-  append_0x80_4 (block0, block1, block2, block3, block_len);
+  append_0x80_4x4 (block0, block1, block2, block3, block_len);
 
   block3[2] = block_len * 8;
 
@@ -1821,7 +1821,7 @@ __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m01600_init (__gl
     block_len++;
   }
 
-  append_0x80_4 (block0, block1, block2, block3, block_len);
+  append_0x80_4x4 (block0, block1, block2, block3, block_len);
 
   block3[2] = block_len * 8;
 
@@ -1864,7 +1864,7 @@ __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m01600_loop (__gl
   w0_x80[2] = w0[2];
   w0_x80[3] = w0[3];
 
-  append_0x80_1 (w0_x80, pw_len);
+  append_0x80_1x4 (w0_x80, pw_len);
 
   /**
    * salt
index 2dcd4f4..3b26ea9 100644 (file)
@@ -211,7 +211,7 @@ __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m01700_m04 (__glo
 
     const u32 out_len = apply_rules (rules_buf[il_pos].cmds, w0, w1, pw_len);
 
-    append_0x80_2 (w0, w1, out_len);
+    append_0x80_2x4 (w0, w1, out_len);
 
     /**
      * SHA512
@@ -350,7 +350,7 @@ __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m01700_s04 (__glo
 
     const u32 out_len = apply_rules (rules_buf[il_pos].cmds, w0, w1, pw_len);
 
-    append_0x80_2 (w0, w1, out_len);
+    append_0x80_2x4 (w0, w1, out_len);
 
     /**
      * SHA512
index f0c7611..46e7470 100644 (file)
@@ -189,7 +189,7 @@ __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m01700_m04 (__glo
 
   if (combs_mode == COMBINATOR_MODE_BASE_RIGHT)
   {
-    append_0x80_2 (wordl0, wordl1, pw_l_len);
+    append_0x80_2x4 (wordl0, wordl1, pw_l_len);
 
     switch_buffer_by_offset (wordl0, wordl1, wordl2, wordl3, combs_buf[0].pw_len);
   }
@@ -234,7 +234,7 @@ __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m01700_m04 (__glo
 
     if (combs_mode == COMBINATOR_MODE_BASE_LEFT)
     {
-      append_0x80_2 (wordr0, wordr1, pw_r_len);
+      append_0x80_2x4 (wordr0, wordr1, pw_r_len);
 
       switch_buffer_by_offset (wordr0, wordr1, wordr2, wordr3, pw_l_len);
     }
@@ -366,7 +366,7 @@ __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m01700_s04 (__glo
 
   if (combs_mode == COMBINATOR_MODE_BASE_RIGHT)
   {
-    append_0x80_2 (wordl0, wordl1, pw_l_len);
+    append_0x80_2x4 (wordl0, wordl1, pw_l_len);
 
     switch_buffer_by_offset (wordl0, wordl1, wordl2, wordl3, combs_buf[0].pw_len);
   }
@@ -423,7 +423,7 @@ __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m01700_s04 (__glo
 
     if (combs_mode == COMBINATOR_MODE_BASE_LEFT)
     {
-      append_0x80_2 (wordr0, wordr1, pw_r_len);
+      append_0x80_2x4 (wordr0, wordr1, pw_r_len);
 
       switch_buffer_by_offset (wordr0, wordr1, wordr2, wordr3, pw_l_len);
     }
index 8d85e4c..6e56b68 100644 (file)
@@ -287,7 +287,7 @@ __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m01710_m04 (__glo
     w3[2] |= s3[2];
     w3[3] |= s3[3];
 
-    append_0x80_4 (w0, w1, w2, w3, out_salt_len);
+    append_0x80_4x4 (w0, w1, w2, w3, out_salt_len);
 
     /**
      * sha512
@@ -502,7 +502,7 @@ __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m01710_s04 (__glo
     w3[2] |= s3[2];
     w3[3] |= s3[3];
 
-    append_0x80_4 (w0, w1, w2, w3, out_salt_len);
+    append_0x80_4x4 (w0, w1, w2, w3, out_salt_len);
 
     /**
      * sha512
index 56c2ba0..d3c96fb 100644 (file)
@@ -313,7 +313,7 @@ __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m01710_m04 (__glo
     w3[2] = wordl3[2] | wordr3[2] | s3[2];
     w3[3] = wordl3[3] | wordr3[3] | s3[3];
 
-    append_0x80_4 (w0, w1, w2, w3, pw_salt_len);
+    append_0x80_4x4 (w0, w1, w2, w3, pw_salt_len);
 
     /**
      * sha512
@@ -556,7 +556,7 @@ __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m01710_s04 (__glo
     w3[2] = wordl3[2] | wordr3[2] | s3[2];
     w3[3] = wordl3[3] | wordr3[3] | s3[3];
 
-    append_0x80_4 (w0, w1, w2, w3, pw_salt_len);
+    append_0x80_4x4 (w0, w1, w2, w3, pw_salt_len);
 
     /**
      * sha512
index ca77914..b97faea 100644 (file)
@@ -248,7 +248,7 @@ __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m01720_m04 (__glo
     w1[2] |= salt_buf1[2];
     w1[3] |= salt_buf1[3];
 
-    append_0x80_4 (w0, w1, w2, w3, out_salt_len);
+    append_0x80_4x4 (w0, w1, w2, w3, out_salt_len);
 
     /**
      * sha512
@@ -424,7 +424,7 @@ __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m01720_s04 (__glo
     w1[2] |= salt_buf1[2];
     w1[3] |= salt_buf1[3];
 
-    append_0x80_4 (w0, w1, w2, w3, out_salt_len);
+    append_0x80_4x4 (w0, w1, w2, w3, out_salt_len);
 
     /**
      * sha512
index f87bd74..c197b5f 100644 (file)
@@ -288,7 +288,7 @@ __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m01720_m04 (__glo
     w1[2] |= salt_buf1[2];
     w1[3] |= salt_buf1[3];
 
-    append_0x80_4 (w0, w1, w2, w3, pw_salt_len);
+    append_0x80_4x4 (w0, w1, w2, w3, pw_salt_len);
 
     /**
      * sha512
@@ -506,7 +506,7 @@ __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m01720_s04 (__glo
     w1[2] |= salt_buf1[2];
     w1[3] |= salt_buf1[3];
 
-    append_0x80_4 (w0, w1, w2, w3, pw_salt_len);
+    append_0x80_4x4 (w0, w1, w2, w3, pw_salt_len);
 
     /**
      * sha512
index ae3f0e9..7e95572 100644 (file)
@@ -292,7 +292,7 @@ __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m01730_m04 (__glo
     w3_t[2] |= s3[2];
     w3_t[3] |= s3[3];
 
-    append_0x80_4 (w0_t, w1_t, w2_t, w3_t, out_salt_len);
+    append_0x80_4x4 (w0_t, w1_t, w2_t, w3_t, out_salt_len);
 
     /**
      * sha512
@@ -507,7 +507,7 @@ __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m01730_s04 (__glo
     w3_t[2] |= s3[2];
     w3_t[3] |= s3[3];
 
-    append_0x80_4 (w0_t, w1_t, w2_t, w3_t, out_salt_len);
+    append_0x80_4x4 (w0_t, w1_t, w2_t, w3_t, out_salt_len);
 
     /**
      * sha512
index 0925b6b..deb875c 100644 (file)
@@ -332,7 +332,7 @@ __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m01730_m04 (__glo
     w3_t[2] |= s3[2];
     w3_t[3] |= s3[3];
 
-    append_0x80_4 (w0_t, w1_t, w2_t, w3_t, pw_salt_len);
+    append_0x80_4x4 (w0_t, w1_t, w2_t, w3_t, pw_salt_len);
 
     /**
      * sha512
@@ -589,7 +589,7 @@ __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m01730_s04 (__glo
     w3_t[2] |= s3[2];
     w3_t[3] |= s3[3];
 
-    append_0x80_4 (w0_t, w1_t, w2_t, w3_t, pw_salt_len);
+    append_0x80_4x4 (w0_t, w1_t, w2_t, w3_t, pw_salt_len);
 
     /**
      * sha512
index b8cf1d4..d272ab9 100644 (file)
@@ -250,7 +250,7 @@ __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m01740_m04 (__glo
     w1_t[2] |= salt_buf1[2];
     w1_t[3] |= salt_buf1[3];
 
-    append_0x80_4 (w0_t, w1_t, w2_t, w3_t, out_salt_len);
+    append_0x80_4x4 (w0_t, w1_t, w2_t, w3_t, out_salt_len);
 
     /**
      * sha512
@@ -423,7 +423,7 @@ __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m01740_s04 (__glo
     w1_t[2] |= salt_buf1[2];
     w1_t[3] |= salt_buf1[3];
 
-    append_0x80_4 (w0_t, w1_t, w2_t, w3_t, out_salt_len);
+    append_0x80_4x4 (w0_t, w1_t, w2_t, w3_t, out_salt_len);
 
     /**
      * sha512
index 2e38d54..e2d25fd 100644 (file)
@@ -296,7 +296,7 @@ __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m01740_m04 (__glo
     w1_t[2] |= salt_buf1[2];
     w1_t[3] |= salt_buf1[3];
 
-    append_0x80_4 (w0_t, w1_t, w2_t, w3_t, pw_salt_len);
+    append_0x80_4x4 (w0_t, w1_t, w2_t, w3_t, pw_salt_len);
 
     /**
      * sha512
@@ -517,7 +517,7 @@ __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m01740_s04 (__glo
     w1_t[2] |= salt_buf1[2];
     w1_t[3] |= salt_buf1[3];
 
-    append_0x80_4 (w0_t, w1_t, w2_t, w3_t, pw_salt_len);
+    append_0x80_4x4 (w0_t, w1_t, w2_t, w3_t, pw_salt_len);
 
     /**
      * sha512
index e37a0af..cd8c777 100644 (file)
@@ -383,7 +383,7 @@ __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m01760_m04 (__glo
 
     const u32 out_len = apply_rules (rules_buf[il_pos].cmds, w0, w1, pw_len);
 
-    append_0x80_2 (w0, w1, out_len);
+    append_0x80_2x4 (w0, w1, out_len);
 
     w0_t[0] = swap_workaround (w0[0]);
     w0_t[1] = swap_workaround (w0[1]);
@@ -559,7 +559,7 @@ __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m01760_s04 (__glo
 
     const u32 out_len = apply_rules (rules_buf[il_pos].cmds, w0, w1, pw_len);
 
-    append_0x80_2 (w0, w1, out_len);
+    append_0x80_2x4 (w0, w1, out_len);
 
     w0_t[0] = swap_workaround (w0[0]);
     w0_t[1] = swap_workaround (w0[1]);
index ab136a0..bd9ee24 100644 (file)
@@ -435,7 +435,7 @@ __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m01760_m04 (__glo
     w3[2] = 0;
     w3[3] = 0;
 
-    append_0x80_4 (w0, w1, w2, w3, pw_len);
+    append_0x80_4x4 (w0, w1, w2, w3, pw_len);
 
     w0_t[0] = swap_workaround (w0[0]);
     w0_t[1] = swap_workaround (w0[1]);
@@ -665,7 +665,7 @@ __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m01760_s04 (__glo
     w3[2] = 0;
     w3[3] = 0;
 
-    append_0x80_4 (w0, w1, w2, w3, pw_len);
+    append_0x80_4x4 (w0, w1, w2, w3, pw_len);
 
     w0_t[0] = swap_workaround (w0[0]);
     w0_t[1] = swap_workaround (w0[1]);
index 9e6df95..061c249 100644 (file)
@@ -373,7 +373,7 @@ __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m02100_init (__gl
    * generate dcc
    */
 
-  append_0x80_1 (w0, pw_len);
+  append_0x80_1x4 (w0, pw_len);
 
   make_unicode (w0, w0, w1);
 
@@ -405,7 +405,7 @@ __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m02100_init (__gl
   w3[2] = (16 + salt_len) * 8;
   w3[3] = 0;
 
-  append_0x80_4 (w0, w1, w2, w3, 16 + salt_len);
+  append_0x80_4x4 (w0, w1, w2, w3, 16 + salt_len);
 
   digest_md4[0] = MD4M_A;
   digest_md4[1] = MD4M_B;
@@ -473,8 +473,8 @@ __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m02100_init (__gl
   w3[2] = 0;
   w3[3] = (64 + salt_len + 4) * 8;
 
-  append_0x01_4 (w0, w1, w2, w3, salt_len + 3);
-  append_0x80_4 (w0, w1, w2, w3, salt_len + 4);
+  append_0x01_4x4 (w0, w1, w2, w3, salt_len + 3);
+  append_0x80_4x4 (w0, w1, w2, w3, salt_len + 4);
 
   w0[0] = swap_workaround (w0[0]);
   w0[1] = swap_workaround (w0[1]);
index d5c86df..ed996ab 100644 (file)
@@ -545,11 +545,11 @@ __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m02500_init (__gl
     w3[3] = 0;
 
     if (j == 1)
-      append_0x01_3 (w0, w1, w2, salt_len + 3);
+      append_0x01_3x4 (w0, w1, w2, salt_len + 3);
     else
-      append_0x02_3 (w0, w1, w2, salt_len + 3);
+      append_0x02_3x4 (w0, w1, w2, salt_len + 3);
 
-    append_0x80_3 (w0, w1, w2, salt_len + 4);
+    append_0x80_3x4 (w0, w1, w2, salt_len + 4);
 
     w0[0] = swap_workaround (w0[0]);
     w0[1] = swap_workaround (w0[1]);
index d1d6da4..3381260 100644 (file)
@@ -152,7 +152,7 @@ __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m02610_m04 (__glo
 
     const u32 out_len = apply_rules (rules_buf[il_pos].cmds, w0, w1, pw_len);
 
-    append_0x80_2 (w0, w1, out_len);
+    append_0x80_2x4 (w0, w1, out_len);
 
     w3[2] = out_len * 8;
 
@@ -480,7 +480,7 @@ __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m02610_s04 (__glo
 
     const u32 out_len = apply_rules (rules_buf[il_pos].cmds, w0, w1, pw_len);
 
-    append_0x80_2 (w0, w1, out_len);
+    append_0x80_2x4 (w0, w1, out_len);
 
     w3[2] = out_len * 8;
 
index 9f334a1..cad9768 100644 (file)
@@ -78,7 +78,7 @@ __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m02610_m04 (__glo
 
   if (combs_mode == COMBINATOR_MODE_BASE_RIGHT)
   {
-    append_0x80_2 (wordl0, wordl1, pw_l_len);
+    append_0x80_2x4 (wordl0, wordl1, pw_l_len);
 
     switch_buffer_by_offset (wordl0, wordl1, wordl2, wordl3, combs_buf[0].pw_len);
   }
@@ -446,7 +446,7 @@ __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m02610_s04 (__glo
 
   if (combs_mode == COMBINATOR_MODE_BASE_RIGHT)
   {
-    append_0x80_2 (wordl0, wordl1, pw_l_len);
+    append_0x80_2x4 (wordl0, wordl1, pw_l_len);
 
     switch_buffer_by_offset (wordl0, wordl1, wordl2, wordl3, combs_buf[0].pw_len);
   }
index c603a41..5d1a731 100644 (file)
@@ -154,7 +154,7 @@ __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m02710_m04 (__glo
 
     const u32 out_len = apply_rules (rules_buf[il_pos].cmds, w0, w1, pw_len);
 
-    append_0x80_2 (w0, w1, out_len);
+    append_0x80_2x4 (w0, w1, out_len);
 
     w3[2] = out_len * 8;
 
@@ -567,7 +567,7 @@ __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m02710_s04 (__glo
 
     const u32 out_len = apply_rules (rules_buf[il_pos].cmds, w0, w1, pw_len);
 
-    append_0x80_2 (w0, w1, out_len);
+    append_0x80_2x4 (w0, w1, out_len);
 
     w3[2] = out_len * 8;
 
index 02f7e60..8a5b0af 100644 (file)
@@ -82,7 +82,7 @@ __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m02710_m04 (__glo
 
   if (combs_mode == COMBINATOR_MODE_BASE_RIGHT)
   {
-    append_0x80_2 (wordl0, wordl1, pw_l_len);
+    append_0x80_2x4 (wordl0, wordl1, pw_l_len);
 
     switch_buffer_by_offset (wordl0, wordl1, wordl2, wordl3, combs_buf[0].pw_len);
   }
@@ -535,7 +535,7 @@ __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m02710_s04 (__glo
 
   if (combs_mode == COMBINATOR_MODE_BASE_RIGHT)
   {
-    append_0x80_2 (wordl0, wordl1, pw_l_len);
+    append_0x80_2x4 (wordl0, wordl1, pw_l_len);
 
     switch_buffer_by_offset (wordl0, wordl1, wordl2, wordl3, combs_buf[0].pw_len);
   }
index ab9f643..b13f1be 100644 (file)
@@ -157,7 +157,7 @@ __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m02810_m04 (__glo
 
     const u32 out_len = apply_rules (rules_buf[il_pos].cmds, w0, w1, pw_len);
 
-    append_0x80_2 (w0, w1, out_len);
+    append_0x80_2x4 (w0, w1, out_len);
 
     w3[2] = out_len * 8;
 
@@ -569,7 +569,7 @@ __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m02810_s04 (__glo
 
     const u32 out_len = apply_rules (rules_buf[il_pos].cmds, w0, w1, pw_len);
 
-    append_0x80_2 (w0, w1, out_len);
+    append_0x80_2x4 (w0, w1, out_len);
 
     w3[2] = out_len * 8;
 
index 6471732..c396fca 100644 (file)
@@ -78,7 +78,7 @@ __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m02810_m04 (__glo
 
   if (combs_mode == COMBINATOR_MODE_BASE_RIGHT)
   {
-    append_0x80_2 (wordl0, wordl1, pw_l_len);
+    append_0x80_2x4 (wordl0, wordl1, pw_l_len);
 
     switch_buffer_by_offset (wordl0, wordl1, wordl2, wordl3, combs_buf[0].pw_len);
   }
@@ -530,7 +530,7 @@ __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m02810_s04 (__glo
 
   if (combs_mode == COMBINATOR_MODE_BASE_RIGHT)
   {
-    append_0x80_2 (wordl0, wordl1, pw_l_len);
+    append_0x80_2x4 (wordl0, wordl1, pw_l_len);
 
     switch_buffer_by_offset (wordl0, wordl1, wordl2, wordl3, combs_buf[0].pw_len);
   }
index 9a99001..61615f4 100644 (file)
@@ -171,7 +171,7 @@ __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m03710_m04 (__glo
 
     const u32 out_len = apply_rules (rules_buf[il_pos].cmds, w0, w1, pw_len);
 
-    append_0x80_2 (w0, w1, out_len);
+    append_0x80_2x4 (w0, w1, out_len);
 
     w3[2] = out_len * 8;
 
@@ -553,7 +553,7 @@ __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m03710_s04 (__glo
 
     const u32 out_len = apply_rules (rules_buf[il_pos].cmds, w0, w1, pw_len);
 
-    append_0x80_2 (w0, w1, out_len);
+    append_0x80_2x4 (w0, w1, out_len);
 
     w3[2] = out_len * 8;
 
index c475b8c..e3b1508 100644 (file)
@@ -78,7 +78,7 @@ __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m03710_m04 (__glo
 
   if (combs_mode == COMBINATOR_MODE_BASE_RIGHT)
   {
-    append_0x80_2 (wordl0, wordl1, pw_l_len);
+    append_0x80_2x4 (wordl0, wordl1, pw_l_len);
 
     switch_buffer_by_offset (wordl0, wordl1, wordl2, wordl3, combs_buf[0].pw_len);
   }
@@ -500,7 +500,7 @@ __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m03710_s04 (__glo
 
   if (combs_mode == COMBINATOR_MODE_BASE_RIGHT)
   {
-    append_0x80_2 (wordl0, wordl1, pw_l_len);
+    append_0x80_2x4 (wordl0, wordl1, pw_l_len);
 
     switch_buffer_by_offset (wordl0, wordl1, wordl2, wordl3, combs_buf[0].pw_len);
   }
index 0eac70a..c58da65 100644 (file)
@@ -262,7 +262,7 @@ __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m03800_m04 (__glo
 
     const u32 pw_salt_len = salt_len + out_len + salt_len;
 
-    append_0x80_4 (w0_t, w1_t, w2_t, w3_t, pw_salt_len);
+    append_0x80_4x4 (w0_t, w1_t, w2_t, w3_t, pw_salt_len);
 
     w3_t[2] = pw_salt_len * 8;
 
@@ -613,7 +613,7 @@ __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m03800_s04 (__glo
 
     const u32 pw_salt_len = salt_len + out_len + salt_len;
 
-    append_0x80_4 (w0_t, w1_t, w2_t, w3_t, pw_salt_len);
+    append_0x80_4x4 (w0_t, w1_t, w2_t, w3_t, pw_salt_len);
 
     w3_t[2] = pw_salt_len * 8;
 
index 9731b7b..7b829ab 100644 (file)
@@ -313,7 +313,7 @@ __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m03800_m04 (__glo
 
     const u32 pw_salt_len = salt_len + pw_len + salt_len;
 
-    append_0x80_4 (w0_t, w1_t, w2_t, w3_t, pw_salt_len);
+    append_0x80_4x4 (w0_t, w1_t, w2_t, w3_t, pw_salt_len);
 
     w3_t[2] = pw_salt_len * 8;
 
@@ -717,7 +717,7 @@ __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m03800_s04 (__glo
 
     const u32 pw_salt_len = salt_len + pw_len + salt_len;
 
-    append_0x80_4 (w0_t, w1_t, w2_t, w3_t, pw_salt_len);
+    append_0x80_4x4 (w0_t, w1_t, w2_t, w3_t, pw_salt_len);
 
     w3_t[2] = pw_salt_len * 8;
 
index 9451f63..61490e0 100644 (file)
@@ -184,7 +184,7 @@ static void m03800m (u32 w0[4], u32 w1[4], u32 w2[4], u32 w3[4], const u32 pw_le
     w3_t[2] |= s3[2];
     w3_t[3] |= s3[3];
 
-    append_0x80_4 (w0_t, w1_t, w2_t, w3_t, pw_salt_len);
+    append_0x80_4x4 (w0_t, w1_t, w2_t, w3_t, pw_salt_len);
 
     w3_t[2] = pw_salt_len * 8;
 
@@ -447,7 +447,7 @@ static void m03800s (u32 w0[4], u32 w1[4], u32 w2[4], u32 w3[4], const u32 pw_le
     w3_t[2] |= s3[2];
     w3_t[3] |= s3[3];
 
-    append_0x80_4 (w0_t, w1_t, w2_t, w3_t, pw_salt_len);
+    append_0x80_4x4 (w0_t, w1_t, w2_t, w3_t, pw_salt_len);
 
     w3_t[2] = pw_salt_len * 8;
 
index 7ee75f1..84b7652 100644 (file)
@@ -152,7 +152,7 @@ __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m04310_m04 (__glo
 
     const u32 out_len = apply_rules (rules_buf[il_pos].cmds, w0, w1, pw_len);
 
-    append_0x80_2 (w0, w1, out_len);
+    append_0x80_2x4 (w0, w1, out_len);
 
     w3[2] = out_len * 8;
 
@@ -480,7 +480,7 @@ __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m04310_s04 (__glo
 
     const u32 out_len = apply_rules (rules_buf[il_pos].cmds, w0, w1, pw_len);
 
-    append_0x80_2 (w0, w1, out_len);
+    append_0x80_2x4 (w0, w1, out_len);
 
     w3[2] = out_len * 8;
 
index 4467889..c6b298d 100644 (file)
@@ -78,7 +78,7 @@ __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m04310_m04 (__glo
 
   if (combs_mode == COMBINATOR_MODE_BASE_RIGHT)
   {
-    append_0x80_2 (wordl0, wordl1, pw_l_len);
+    append_0x80_2x4 (wordl0, wordl1, pw_l_len);
 
     switch_buffer_by_offset (wordl0, wordl1, wordl2, wordl3, combs_buf[0].pw_len);
   }
@@ -446,7 +446,7 @@ __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m04310_s04 (__glo
 
   if (combs_mode == COMBINATOR_MODE_BASE_RIGHT)
   {
-    append_0x80_2 (wordl0, wordl1, pw_l_len);
+    append_0x80_2x4 (wordl0, wordl1, pw_l_len);
 
     switch_buffer_by_offset (wordl0, wordl1, wordl2, wordl3, combs_buf[0].pw_len);
   }
index 175ddc9..889389e 100644 (file)
@@ -135,7 +135,7 @@ __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m04400_m04 (__glo
 
     const u32 out_len = apply_rules (rules_buf[il_pos].cmds, w0, w1, pw_len);
 
-    append_0x80_2 (w0, w1, out_len);
+    append_0x80_2x4 (w0, w1, out_len);
 
     /**
      * sha1
@@ -501,7 +501,7 @@ __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m04400_s04 (__glo
 
     const u32 out_len = apply_rules (rules_buf[il_pos].cmds, w0, w1, pw_len);
 
-    append_0x80_2 (w0, w1, out_len);
+    append_0x80_2x4 (w0, w1, out_len);
 
     /**
      * sha1
index 4e2fd39..4d41d67 100644 (file)
@@ -78,7 +78,7 @@ __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m04400_m04 (__glo
 
   if (combs_mode == COMBINATOR_MODE_BASE_RIGHT)
   {
-    append_0x80_2 (wordl0, wordl1, pw_l_len);
+    append_0x80_2x4 (wordl0, wordl1, pw_l_len);
 
     switch_buffer_by_offset (wordl0, wordl1, wordl2, wordl3, combs_buf[0].pw_len);
   }
@@ -158,7 +158,7 @@ __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m04400_m04 (__glo
 
     if (combs_mode == COMBINATOR_MODE_BASE_LEFT)
     {
-      append_0x80_2 (wordr0, wordr1, pw_r_len);
+      append_0x80_2x4 (wordr0, wordr1, pw_r_len);
 
       switch_buffer_by_offset (wordr0, wordr1, wordr2, wordr3, pw_l_len);
     }
@@ -488,7 +488,7 @@ __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m04400_s04 (__glo
 
   if (combs_mode == COMBINATOR_MODE_BASE_RIGHT)
   {
-    append_0x80_2 (wordl0, wordl1, pw_l_len);
+    append_0x80_2x4 (wordl0, wordl1, pw_l_len);
 
     switch_buffer_by_offset (wordl0, wordl1, wordl2, wordl3, combs_buf[0].pw_len);
   }
@@ -580,7 +580,7 @@ __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m04400_s04 (__glo
 
     if (combs_mode == COMBINATOR_MODE_BASE_LEFT)
     {
-      append_0x80_2 (wordr0, wordr1, pw_r_len);
+      append_0x80_2x4 (wordr0, wordr1, pw_r_len);
 
       switch_buffer_by_offset (wordr0, wordr1, wordr2, wordr3, pw_l_len);
     }
index f85c9da..5d00c94 100644 (file)
@@ -135,7 +135,7 @@ __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m04500_m04 (__glo
 
     const u32 out_len = apply_rules (rules_buf[il_pos].cmds, w0, w1, pw_len);
 
-    append_0x80_2 (w0, w1, out_len);
+    append_0x80_2x4 (w0, w1, out_len);
 
     /**
      * sha1
@@ -537,7 +537,7 @@ __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m04500_s04 (__glo
 
     const u32 out_len = apply_rules (rules_buf[il_pos].cmds, w0, w1, pw_len);
 
-    append_0x80_2 (w0, w1, out_len);
+    append_0x80_2x4 (w0, w1, out_len);
 
     /**
      * sha1
index 55f202a..fd4660e 100644 (file)
@@ -78,7 +78,7 @@ __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m04500_m04 (__glo
 
   if (combs_mode == COMBINATOR_MODE_BASE_RIGHT)
   {
-    append_0x80_2 (wordl0, wordl1, pw_l_len);
+    append_0x80_2x4 (wordl0, wordl1, pw_l_len);
 
     switch_buffer_by_offset (wordl0, wordl1, wordl2, wordl3, combs_buf[0].pw_len);
   }
@@ -158,7 +158,7 @@ __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m04500_m04 (__glo
 
     if (combs_mode == COMBINATOR_MODE_BASE_LEFT)
     {
-      append_0x80_2 (wordr0, wordr1, pw_r_len);
+      append_0x80_2x4 (wordr0, wordr1, pw_r_len);
 
       switch_buffer_by_offset (wordr0, wordr1, wordr2, wordr3, pw_l_len);
     }
@@ -517,7 +517,7 @@ __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m04500_s04 (__glo
 
   if (combs_mode == COMBINATOR_MODE_BASE_RIGHT)
   {
-    append_0x80_2 (wordl0, wordl1, pw_l_len);
+    append_0x80_2x4 (wordl0, wordl1, pw_l_len);
 
     switch_buffer_by_offset (wordl0, wordl1, wordl2, wordl3, combs_buf[0].pw_len);
   }
@@ -615,7 +615,7 @@ __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m04500_s04 (__glo
 
     if (combs_mode == COMBINATOR_MODE_BASE_LEFT)
     {
-      append_0x80_2 (wordr0, wordr1, pw_r_len);
+      append_0x80_2x4 (wordr0, wordr1, pw_r_len);
 
       switch_buffer_by_offset (wordr0, wordr1, wordr2, wordr3, pw_l_len);
     }
index 57daee0..bb04ca7 100644 (file)
@@ -136,7 +136,7 @@ __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m04700_m04 (__glo
 
     const u32 out_len = apply_rules (rules_buf[il_pos].cmds, w0, w1, pw_len);
 
-    append_0x80_2 (w0, w1, out_len);
+    append_0x80_2x4 (w0, w1, out_len);
 
     /**
      * md5
@@ -490,7 +490,7 @@ __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m04700_s04 (__glo
 
     const u32 out_len = apply_rules (rules_buf[il_pos].cmds, w0, w1, pw_len);
 
-    append_0x80_2 (w0, w1, out_len);
+    append_0x80_2x4 (w0, w1, out_len);
 
     /**
      * md5
index b6996d5..407e7ef 100644 (file)
@@ -79,7 +79,7 @@ __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m04700_m04 (__glo
 
   if (combs_mode == COMBINATOR_MODE_BASE_RIGHT)
   {
-    append_0x80_2 (wordl0, wordl1, pw_l_len);
+    append_0x80_2x4 (wordl0, wordl1, pw_l_len);
 
     switch_buffer_by_offset (wordl0, wordl1, wordl2, wordl3, combs_buf[0].pw_len);
   }
@@ -159,7 +159,7 @@ __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m04700_m04 (__glo
 
     if (combs_mode == COMBINATOR_MODE_BASE_LEFT)
     {
-      append_0x80_2 (wordr0, wordr1, pw_r_len);
+      append_0x80_2x4 (wordr0, wordr1, pw_r_len);
 
       switch_buffer_by_offset (wordr0, wordr1, wordr2, wordr3, pw_l_len);
     }
@@ -471,7 +471,7 @@ __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m04700_s04 (__glo
 
   if (combs_mode == COMBINATOR_MODE_BASE_RIGHT)
   {
-    append_0x80_2 (wordl0, wordl1, pw_l_len);
+    append_0x80_2x4 (wordl0, wordl1, pw_l_len);
 
     switch_buffer_by_offset (wordl0, wordl1, wordl2, wordl3, combs_buf[0].pw_len);
   }
@@ -569,7 +569,7 @@ __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m04700_s04 (__glo
 
     if (combs_mode == COMBINATOR_MODE_BASE_LEFT)
     {
-      append_0x80_2 (wordr0, wordr1, pw_r_len);
+      append_0x80_2x4 (wordr0, wordr1, pw_r_len);
 
       switch_buffer_by_offset (wordr0, wordr1, wordr2, wordr3, pw_l_len);
     }
index e73a36b..39562cc 100644 (file)
@@ -200,7 +200,7 @@ __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m04900_m04 (__glo
 
     const u32 pw_salt_len = salt_len + out_len + salt_len;
 
-    append_0x80_4 (w0_t, w1_t, w2_t, w3_t, pw_salt_len);
+    append_0x80_4x4 (w0_t, w1_t, w2_t, w3_t, pw_salt_len);
 
     u32 w0 = swap_workaround (w0_t[0]);
     u32 w1 = swap_workaround (w0_t[1]);
@@ -538,7 +538,7 @@ __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m04900_s04 (__glo
 
     const u32 pw_salt_len = salt_len + out_len + salt_len;
 
-    append_0x80_4 (w0_t, w1_t, w2_t, w3_t, pw_salt_len);
+    append_0x80_4x4 (w0_t, w1_t, w2_t, w3_t, pw_salt_len);
 
     u32 w0 = swap_workaround (w0_t[0]);
     u32 w1 = swap_workaround (w0_t[1]);
index 32358da..5dd74b7 100644 (file)
@@ -252,7 +252,7 @@ __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m04900_m04 (__glo
 
     const u32 pw_salt_len = salt_len + pw_len + salt_len;
 
-    append_0x80_4 (w0_t, w1_t, w2_t, w3_t, pw_salt_len);
+    append_0x80_4x4 (w0_t, w1_t, w2_t, w3_t, pw_salt_len);
 
     u32 w0 = swap_workaround (w0_t[0]);
     u32 w1 = swap_workaround (w0_t[1]);
@@ -644,7 +644,7 @@ __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m04900_s04 (__glo
 
     const u32 pw_salt_len = salt_len + pw_len + salt_len;
 
-    append_0x80_4 (w0_t, w1_t, w2_t, w3_t, pw_salt_len);
+    append_0x80_4x4 (w0_t, w1_t, w2_t, w3_t, pw_salt_len);
 
     u32 w0 = swap_workaround (w0_t[0]);
     u32 w1 = swap_workaround (w0_t[1]);
index c5dce61..712cd2e 100644 (file)
@@ -119,7 +119,7 @@ static void m04900m (u32 w0[4], u32 w1[4], u32 w2[4], u32 w3[4], const u32 pw_le
   salt_buf3[2] |= salt_buf3_t[2];
   salt_buf3[3] |= salt_buf3_t[3];
 
-  append_0x80_4 (salt_buf0, salt_buf1, salt_buf2, salt_buf3, pw_salt_len);
+  append_0x80_4x4 (salt_buf0, salt_buf1, salt_buf2, salt_buf3, pw_salt_len);
 
   /**
    * loop
@@ -432,7 +432,7 @@ static void m04900s (u32 w0[4], u32 w1[4], u32 w2[4], u32 w3[4], const u32 pw_le
   salt_buf3[2] |= salt_buf3_t[2];
   salt_buf3[3] |= salt_buf3_t[3];
 
-  append_0x80_4 (salt_buf0, salt_buf1, salt_buf2, salt_buf3, pw_salt_len);
+  append_0x80_4x4 (salt_buf0, salt_buf1, salt_buf2, salt_buf3, pw_salt_len);
 
   /**
    * loop
index 08371b4..7351ecc 100644 (file)
@@ -162,7 +162,7 @@ __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m05000_m04 (__glo
 
     const u32 out_len = apply_rules (rules_buf[il_pos].cmds, w0, w1, pw_len);
 
-    append_0x01_2 (w0, w1, out_len);
+    append_0x01_2x4 (w0, w1, out_len);
 
     u64 st[25];
 
@@ -373,7 +373,7 @@ __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m05000_s04 (__glo
 
     const u32 out_len = apply_rules (rules_buf[il_pos].cmds, w0, w1, pw_len);
 
-    append_0x01_2 (w0, w1, out_len);
+    append_0x01_2x4 (w0, w1, out_len);
 
     u64 st[25];
 
index 1edd1b9..df47782 100644 (file)
@@ -130,7 +130,7 @@ __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m05000_m04 (__glo
 
   if (combs_mode == COMBINATOR_MODE_BASE_RIGHT)
   {
-    append_0x01_2 (wordl0, wordl1, pw_l_len);
+    append_0x01_2x4 (wordl0, wordl1, pw_l_len);
 
     switch_buffer_by_offset (wordl0, wordl1, wordl2, wordl3, combs_buf[0].pw_len);
   }
@@ -185,7 +185,7 @@ __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m05000_m04 (__glo
 
     if (combs_mode == COMBINATOR_MODE_BASE_LEFT)
     {
-      append_0x01_2 (wordr0, wordr1, pw_r_len);
+      append_0x01_2x4 (wordr0, wordr1, pw_r_len);
 
       switch_buffer_by_offset (wordr0, wordr1, wordr2, wordr3, pw_l_len);
     }
@@ -385,7 +385,7 @@ __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m05000_s04 (__glo
 
   if (combs_mode == COMBINATOR_MODE_BASE_RIGHT)
   {
-    append_0x01_2 (wordl0, wordl1, pw_l_len);
+    append_0x01_2x4 (wordl0, wordl1, pw_l_len);
 
     switch_buffer_by_offset (wordl0, wordl1, wordl2, wordl3, combs_buf[0].pw_len);
   }
@@ -452,7 +452,7 @@ __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m05000_s04 (__glo
 
     if (combs_mode == COMBINATOR_MODE_BASE_LEFT)
     {
-      append_0x01_2 (wordr0, wordr1, pw_r_len);
+      append_0x01_2x4 (wordr0, wordr1, pw_r_len);
 
       switch_buffer_by_offset (wordr0, wordr1, wordr2, wordr3, pw_l_len);
     }
index 9e34cd3..46838fc 100644 (file)
@@ -90,7 +90,7 @@ __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m05100_m04 (__glo
 
     const u32 out_len = apply_rules (rules_buf[il_pos].cmds, w0, w1, pw_len);
 
-    append_0x80_2 (w0, w1, out_len);
+    append_0x80_2x4 (w0, w1, out_len);
 
     w3[2] = out_len * 8;
 
@@ -289,7 +289,7 @@ __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m05100_s04 (__glo
 
     const u32 out_len = apply_rules (rules_buf[il_pos].cmds, w0, w1, pw_len);
 
-    append_0x80_2 (w0, w1, out_len);
+    append_0x80_2x4 (w0, w1, out_len);
 
     w3[2] = out_len * 8;
 
index 974138d..4155d60 100644 (file)
@@ -68,7 +68,7 @@ __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m05100_m04 (__glo
 
   if (combs_mode == COMBINATOR_MODE_BASE_RIGHT)
   {
-    append_0x80_2 (wordl0, wordl1, pw_l_len);
+    append_0x80_2x4 (wordl0, wordl1, pw_l_len);
 
     switch_buffer_by_offset (wordl0, wordl1, wordl2, wordl3, combs_buf[0].pw_len);
   }
@@ -319,7 +319,7 @@ __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m05100_s04 (__glo
 
   if (combs_mode == COMBINATOR_MODE_BASE_RIGHT)
   {
-    append_0x80_2 (wordl0, wordl1, pw_l_len);
+    append_0x80_2x4 (wordl0, wordl1, pw_l_len);
 
     switch_buffer_by_offset (wordl0, wordl1, wordl2, wordl3, combs_buf[0].pw_len);
   }
index b160a1c..ddc59f3 100644 (file)
@@ -233,7 +233,7 @@ __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m05200_init (__gl
 
   const u32 block_len = pw_len + salt_len;
 
-  append_0x80_4 (w0, w1, w2, w3, block_len);
+  append_0x80_4x4 (w0, w1, w2, w3, block_len);
 
   /**
    * init
index 34a346b..572cbe3 100644 (file)
@@ -645,7 +645,7 @@ __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m05500_m04 (__glo
 
     const u32 out_len = apply_rules (rules_buf[il_pos].cmds, w0, w1, pw_len);
 
-    append_0x80_2 (w0, w1, out_len);
+    append_0x80_2x4 (w0, w1, out_len);
 
     u32 w0_t[4];
     u32 w1_t[4];
@@ -891,7 +891,7 @@ __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m05500_s04 (__glo
 
     const u32 out_len = apply_rules (rules_buf[il_pos].cmds, w0, w1, pw_len);
 
-    append_0x80_2 (w0, w1, out_len);
+    append_0x80_2x4 (w0, w1, out_len);
 
     u32 w0_t[4];
     u32 w1_t[4];
index 9f0ff9d..729e778 100644 (file)
@@ -581,7 +581,7 @@ __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m05500_m04 (__glo
 
   if (combs_mode == COMBINATOR_MODE_BASE_RIGHT)
   {
-    append_0x80_2 (wordl0, wordl1, pw_l_len);
+    append_0x80_2x4 (wordl0, wordl1, pw_l_len);
 
     switch_buffer_by_offset (wordl0, wordl1, wordl2, wordl3, combs_buf[0].pw_len);
   }
@@ -869,7 +869,7 @@ __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m05500_s04 (__glo
 
   if (combs_mode == COMBINATOR_MODE_BASE_RIGHT)
   {
-    append_0x80_2 (wordl0, wordl1, pw_l_len);
+    append_0x80_2x4 (wordl0, wordl1, pw_l_len);
 
     switch_buffer_by_offset (wordl0, wordl1, wordl2, wordl3, combs_buf[0].pw_len);
   }
index d65e1a5..c6447de 100644 (file)
@@ -381,7 +381,7 @@ __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m05600_m04 (__glo
 
     const u32 out_len = apply_rules (rules_buf[il_pos].cmds, w0, w1, pw_len);
 
-    append_0x80_2 (w0, w1, out_len);
+    append_0x80_2x4 (w0, w1, out_len);
 
     u32 w0_t[4];
     u32 w1_t[4];
@@ -662,7 +662,7 @@ __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m05600_s04 (__glo
 
     const u32 out_len = apply_rules (rules_buf[il_pos].cmds, w0, w1, pw_len);
 
-    append_0x80_2 (w0, w1, out_len);
+    append_0x80_2x4 (w0, w1, out_len);
 
     u32 w0_t[4];
     u32 w1_t[4];
index 89fc1b3..92382ad 100644 (file)
@@ -330,7 +330,7 @@ __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m05600_m04 (__glo
 
   if (combs_mode == COMBINATOR_MODE_BASE_RIGHT)
   {
-    append_0x80_2 (wordl0, wordl1, pw_l_len);
+    append_0x80_2x4 (wordl0, wordl1, pw_l_len);
 
     switch_buffer_by_offset (wordl0, wordl1, wordl2, wordl3, combs_buf[0].pw_len);
   }
@@ -653,7 +653,7 @@ __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m05600_s04 (__glo
 
   if (combs_mode == COMBINATOR_MODE_BASE_RIGHT)
   {
-    append_0x80_2 (wordl0, wordl1, pw_l_len);
+    append_0x80_2x4 (wordl0, wordl1, pw_l_len);
 
     switch_buffer_by_offset (wordl0, wordl1, wordl2, wordl3, combs_buf[0].pw_len);
   }
index da1d4dc..7b6014b 100644 (file)
@@ -287,7 +287,7 @@ __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m06000_m04 (__glo
 
     const u32 out_len = apply_rules (rules_buf[il_pos].cmds, w0, w1, pw_len);
 
-    append_0x80_2 (w0, w1, out_len);
+    append_0x80_2x4 (w0, w1, out_len);
 
     u32 wl[16];
 
@@ -415,7 +415,7 @@ __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m06000_s04 (__glo
 
     const u32 out_len = apply_rules (rules_buf[il_pos].cmds, w0, w1, pw_len);
 
-    append_0x80_2 (w0, w1, out_len);
+    append_0x80_2x4 (w0, w1, out_len);
 
     u32 wl[16];
 
index 94af3b2..95553c2 100644 (file)
@@ -265,7 +265,7 @@ __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m06000_m04 (__glo
 
   if (combs_mode == COMBINATOR_MODE_BASE_RIGHT)
   {
-    append_0x80_2 (wordl0, wordl1, pw_l_len);
+    append_0x80_2x4 (wordl0, wordl1, pw_l_len);
 
     switch_buffer_by_offset (wordl0, wordl1, wordl2, wordl3, combs_buf[0].pw_len);
   }
@@ -435,7 +435,7 @@ __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m06000_s04 (__glo
 
   if (combs_mode == COMBINATOR_MODE_BASE_RIGHT)
   {
-    append_0x80_2 (wordl0, wordl1, pw_l_len);
+    append_0x80_2x4 (wordl0, wordl1, pw_l_len);
 
     switch_buffer_by_offset (wordl0, wordl1, wordl2, wordl3, combs_buf[0].pw_len);
   }
index 0ac351b..b264871 100644 (file)
@@ -1432,7 +1432,7 @@ __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m06100_m04 (__glo
 
     const u32 out_len = apply_rules (rules_buf[il_pos].cmds, w0, w1, pw_len);
 
-    append_0x80_2 (w0, w1, out_len);
+    append_0x80_2x4 (w0, w1, out_len);
 
     u32 wl[16];
 
@@ -1594,7 +1594,7 @@ __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m06100_s04 (__glo
 
     const u32 out_len = apply_rules (rules_buf[il_pos].cmds, w0, w1, pw_len);
 
-    append_0x80_2 (w0, w1, out_len);
+    append_0x80_2x4 (w0, w1, out_len);
 
     u32 wl[16];
 
index f644a5b..1aeab93 100644 (file)
@@ -1385,7 +1385,7 @@ __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m06100_m04 (__glo
 
   if (combs_mode == COMBINATOR_MODE_BASE_RIGHT)
   {
-    append_0x80_2 (wordl0, wordl1, pw_l_len);
+    append_0x80_2x4 (wordl0, wordl1, pw_l_len);
 
     switch_buffer_by_offset (wordl0, wordl1, wordl2, wordl3, combs_buf[0].pw_len);
   }
@@ -1589,7 +1589,7 @@ __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m06100_s04 (__glo
 
   if (combs_mode == COMBINATOR_MODE_BASE_RIGHT)
   {
-    append_0x80_2 (wordl0, wordl1, pw_l_len);
+    append_0x80_2x4 (wordl0, wordl1, pw_l_len);
 
     switch_buffer_by_offset (wordl0, wordl1, wordl2, wordl3, combs_buf[0].pw_len);
   }
index c4ddb50..593d311 100644 (file)
@@ -1649,7 +1649,7 @@ __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m06300_init (__gl
 
   block_len += pw_len;
 
-  append_0x80_4 (block0, block1, block2, block3, block_len);
+  append_0x80_4x4 (block0, block1, block2, block3, block_len);
 
   block3[2] = block_len * 8;
 
@@ -1715,7 +1715,7 @@ __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m06300_init (__gl
     block_len++;
   }
 
-  append_0x80_4 (block0, block1, block2, block3, block_len);
+  append_0x80_4x4 (block0, block1, block2, block3, block_len);
 
   block3[2] = block_len * 8;
 
@@ -1758,7 +1758,7 @@ __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m06300_loop (__gl
   w0_x80[2] = w0[2];
   w0_x80[3] = w0[3];
 
-  append_0x80_1 (w0_x80, pw_len);
+  append_0x80_1x4 (w0_x80, pw_len);
 
   /**
    * salt
index d6f9a91..2d04903 100644 (file)
@@ -308,9 +308,9 @@ __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m06400_init (__gl
   salt_buf3[2] = 0;
   salt_buf3[3] = 0;
 
-  append_0x01_4 (salt_buf0, salt_buf1, salt_buf2, salt_buf3, salt_len + 3);
+  append_0x01_4x4 (salt_buf0, salt_buf1, salt_buf2, salt_buf3, salt_len + 3);
 
-  append_0x80_4 (salt_buf0, salt_buf1, salt_buf2, salt_buf3, salt_len + 4);
+  append_0x80_4x4 (salt_buf0, salt_buf1, salt_buf2, salt_buf3, salt_len + 4);
 
   /**
    * pads
index 1917164..7704580 100644 (file)
@@ -312,9 +312,9 @@ __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m06500_init (__gl
   salt_buf3[2] = 0;
   salt_buf3[3] = 0;
 
-  append_0x01_4 (salt_buf0, salt_buf1, salt_buf2, salt_buf3, salt_len + 3);
+  append_0x01_4x4 (salt_buf0, salt_buf1, salt_buf2, salt_buf3, salt_len + 3);
 
-  append_0x80_4 (salt_buf0, salt_buf1, salt_buf2, salt_buf3, salt_len + 4);
+  append_0x80_4x4 (salt_buf0, salt_buf1, salt_buf2, salt_buf3, salt_len + 4);
 
   /**
    * pads
index 6518a20..f45b8a8 100644 (file)
@@ -1174,8 +1174,8 @@ __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m06600_init (__gl
   w3[2] = 0;
   w3[3] = 0;
 
-  append_0x01_1 (w0, salt_len + 3);
-  append_0x80_1 (w0, salt_len + 4);
+  append_0x01_1x4 (w0, salt_len + 3);
+  append_0x80_1x4 (w0, salt_len + 4);
 
   w0[0] = swap_workaround (w0[0]);
   w0[1] = swap_workaround (w0[1]);
index 1b1953a..d824593 100644 (file)
@@ -318,9 +318,9 @@ __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m06700_init (__gl
   salt_buf3[2] = 0;
   salt_buf3[3] = 0;
 
-  append_0x01_4 (salt_buf0, salt_buf1, salt_buf2, salt_buf3, salt_len + 3);
+  append_0x01_4x4 (salt_buf0, salt_buf1, salt_buf2, salt_buf3, salt_len + 3);
 
-  append_0x80_4 (salt_buf0, salt_buf1, salt_buf2, salt_buf3, salt_len + 4);
+  append_0x80_4x4 (salt_buf0, salt_buf1, salt_buf2, salt_buf3, salt_len + 4);
 
   /**
    * pads
index c425485..6eacfa1 100644 (file)
@@ -1312,8 +1312,8 @@ __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m06800_init (__gl
   w3[2] = 0;
   w3[3] = 0;
 
-  append_0x01_3 (w0, w1, w2, salt_len + 3);
-  append_0x80_3 (w0, w1, w2, salt_len + 4);
+  append_0x01_3x4 (w0, w1, w2, salt_len + 3);
+  append_0x80_3x4 (w0, w1, w2, salt_len + 4);
 
   w0[0] = swap_workaround (w0[0]);
   w0[1] = swap_workaround (w0[1]);
index ece0688..53fa1fa 100644 (file)
@@ -792,7 +792,7 @@ __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m07400_init (__gl
 
   block_len = memcat16 (block, block_len, w0, pw_len);
 
-  append_0x80_4 (block, block_len);
+  append_0x80_4x4 (block, block_len);
 
   block[15] = swap_workaround (block_len * 8);
 
@@ -867,7 +867,7 @@ __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m07400_init (__gl
     }
   }
 
-  append_0x80_4 (block, block_len);
+  append_0x80_4x4 (block, block_len);
 
   if (block_len >= 56)
   {
@@ -912,7 +912,7 @@ __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m07400_init (__gl
 
   /* Finish the digest.  */
 
-  append_0x80_4 (block, block_len);
+  append_0x80_4x4 (block, block_len);
 
   if (block_len >= 56)
   {
@@ -955,7 +955,7 @@ __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m07400_init (__gl
 
   /* Finish the digest.  */
 
-  append_0x80_4 (block, block_len);
+  append_0x80_4x4 (block, block_len);
 
   if (block_len >= 56)
   {
@@ -1008,7 +1008,7 @@ __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m07400_loop (__gl
   p_bytes_x80[2] = tmps[gid].p_bytes[2];
   p_bytes_x80[3] = tmps[gid].p_bytes[3];
 
-  append_0x80_1 (p_bytes_x80, pw_len);
+  append_0x80_1x4 (p_bytes_x80, pw_len);
 
   u32 s_bytes[4];
 
index 6525505..6e20bab 100644 (file)
@@ -451,7 +451,7 @@ static void kerb_prepare (const u32 w0[4], const u32 w1[4], const u32 pw_len, co
 
   // K=MD4(Little_indian(UNICODE(pwd))
 
-  append_0x80_2 (w0_t, w1_t, pw_len);
+  append_0x80_2x4 (w0_t, w1_t, pw_len);
 
   make_unicode (w1_t, w2_t, w3_t);
   make_unicode (w0_t, w0_t, w1_t);
index 55679f8..5bbd454 100644 (file)
@@ -449,7 +449,7 @@ static void kerb_prepare (const u32 w0[4], const u32 w1[4], const u32 pw_len, co
 
   // K=MD4(Little_indian(UNICODE(pwd))
 
-  append_0x80_2 (w0_t, w1_t, pw_len);
+  append_0x80_2x4 (w0_t, w1_t, pw_len);
 
   make_unicode (w1_t, w2_t, w3_t);
   make_unicode (w0_t, w0_t, w1_t);
index 7cd4cdb..9bdbfaf 100644 (file)
@@ -449,7 +449,7 @@ static void kerb_prepare (const u32 w0[4], const u32 w1[4], const u32 pw_len, co
 
   // K=MD4(Little_indian(UNICODE(pwd))
 
-  append_0x80_2 (w0_t, w1_t, pw_len);
+  append_0x80_2x4 (w0_t, w1_t, pw_len);
 
   make_unicode (w1_t, w2_t, w3_t);
   make_unicode (w0_t, w0_t, w1_t);
index 2940fdf..663ad15 100644 (file)
@@ -171,7 +171,7 @@ __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m07600_m04 (__glo
 
     const u32 out_len = apply_rules (rules_buf[il_pos].cmds, w0, w1, pw_len);
 
-    append_0x80_2 (w0, w1, out_len);
+    append_0x80_2x4 (w0, w1, out_len);
 
     /**
      * sha1
@@ -782,7 +782,7 @@ __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m07600_s04 (__glo
 
     const u32 out_len = apply_rules (rules_buf[il_pos].cmds, w0, w1, pw_len);
 
-    append_0x80_2 (w0, w1, out_len);
+    append_0x80_2x4 (w0, w1, out_len);
 
     /**
      * sha1
index b74fec3..2039e59 100644 (file)
@@ -78,7 +78,7 @@ __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m07600_m04 (__glo
 
   if (combs_mode == COMBINATOR_MODE_BASE_RIGHT)
   {
-    append_0x80_2 (wordl0, wordl1, pw_l_len);
+    append_0x80_2x4 (wordl0, wordl1, pw_l_len);
 
     switch_buffer_by_offset (wordl0, wordl1, wordl2, wordl3, combs_buf[0].pw_len);
   }
@@ -194,7 +194,7 @@ __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m07600_m04 (__glo
 
     if (combs_mode == COMBINATOR_MODE_BASE_LEFT)
     {
-      append_0x80_2 (wordr0, wordr1, pw_r_len);
+      append_0x80_2x4 (wordr0, wordr1, pw_r_len);
 
       switch_buffer_by_offset (wordr0, wordr1, wordr2, wordr3, pw_l_len);
     }
@@ -727,7 +727,7 @@ __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m07600_s04 (__glo
 
   if (combs_mode == COMBINATOR_MODE_BASE_RIGHT)
   {
-    append_0x80_2 (wordl0, wordl1, pw_l_len);
+    append_0x80_2x4 (wordl0, wordl1, pw_l_len);
 
     switch_buffer_by_offset (wordl0, wordl1, wordl2, wordl3, combs_buf[0].pw_len);
   }
@@ -861,7 +861,7 @@ __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m07600_s04 (__glo
 
     if (combs_mode == COMBINATOR_MODE_BASE_LEFT)
     {
-      append_0x80_2 (wordr0, wordr1, pw_r_len);
+      append_0x80_2x4 (wordr0, wordr1, pw_r_len);
 
       switch_buffer_by_offset (wordr0, wordr1, wordr2, wordr3, pw_l_len);
     }
index 23b176d..66061ea 100644 (file)
@@ -171,7 +171,7 @@ __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m07900_init (__gl
 
   const u32 pw_len = pws[gid].pw_len;
 
-  append_0x80_4 (w0, w1, w2, w3, pw_len);
+  append_0x80_4x4 (w0, w1, w2, w3, pw_len);
 
   /**
    * salt
@@ -274,7 +274,7 @@ __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m07900_loop (__gl
 
   const u32 pw_len = pws[gid].pw_len;
 
-  append_0x80_4 (w0, w1, w2, w3, pw_len);
+  append_0x80_4x4 (w0, w1, w2, w3, pw_len);
 
   /**
    * digest
index 4493d9d..c5dc31e 100644 (file)
@@ -123,7 +123,7 @@ __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m08100_m04 (__glo
     w3_t[2] = 0;
     w3_t[3] = (out_salt_len + 1) * 8;
 
-    append_0x80_4 (w0_t, w1_t, w2_t, w3_t, out_salt_len + 1);
+    append_0x80_4x4 (w0_t, w1_t, w2_t, w3_t, out_salt_len + 1);
 
     /**
      * sha1
@@ -384,7 +384,7 @@ __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m08100_s04 (__glo
     w3_t[2] = 0;
     w3_t[3] = (out_salt_len + 1) * 8;
 
-    append_0x80_4 (w0_t, w1_t, w2_t, w3_t, out_salt_len + 1);
+    append_0x80_4x4 (w0_t, w1_t, w2_t, w3_t, out_salt_len + 1);
 
     /**
      * sha1
index fa5f44b..5cc8e44 100644 (file)
@@ -169,7 +169,7 @@ __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m08100_m04 (__glo
     w3_t[2] = 0;
     w3_t[3] = (pw_salt_len + 1) * 8;
 
-    append_0x80_4 (w0_t, w1_t, w2_t, w3_t, pw_salt_len + 1);
+    append_0x80_4x4 (w0_t, w1_t, w2_t, w3_t, pw_salt_len + 1);
 
     /**
      * sha1
@@ -478,7 +478,7 @@ __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m08100_s04 (__glo
     w3_t[2] = 0;
     w3_t[3] = (pw_salt_len + 1) * 8;
 
-    append_0x80_4 (w0_t, w1_t, w2_t, w3_t, pw_salt_len + 1);
+    append_0x80_4x4 (w0_t, w1_t, w2_t, w3_t, pw_salt_len + 1);
 
     /**
      * sha1
index a26fda4..ca8d2cd 100644 (file)
@@ -440,7 +440,7 @@ __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m08100_m04 (__glo
   w0[2] = swap_workaround (w0[2]);
   w0[3] = swap_workaround (w0[3]);
 
-  append_0x80_2 (w0, w1, pw_len + 1);
+  append_0x80_2x4 (w0, w1, pw_len + 1);
 
   w0[0] = swap_workaround (w0[0]);
   w0[1] = swap_workaround (w0[1]);
@@ -508,7 +508,7 @@ __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m08100_m08 (__glo
   w1[2] = swap_workaround (w1[2]);
   w1[3] = swap_workaround (w1[3]);
 
-  append_0x80_3 (w0, w1, w2, pw_len + 1);
+  append_0x80_3x4 (w0, w1, w2, pw_len + 1);
 
   w0[0] = swap_workaround (w0[0]);
   w0[1] = swap_workaround (w0[1]);
@@ -588,7 +588,7 @@ __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m08100_m16 (__glo
   w3[2] = 0;
   w3[3] = 0;
 
-  append_0x80_4 (w0, w1, w2, w3, pw_len + 1);
+  append_0x80_4x4 (w0, w1, w2, w3, pw_len + 1);
 
   w0[0] = swap_workaround (w0[0]);
   w0[1] = swap_workaround (w0[1]);
@@ -663,7 +663,7 @@ __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m08100_s04 (__glo
   w0[2] = swap_workaround (w0[2]);
   w0[3] = swap_workaround (w0[3]);
 
-  append_0x80_2 (w0, w1, pw_len + 1);
+  append_0x80_2x4 (w0, w1, pw_len + 1);
 
   w0[0] = swap_workaround (w0[0]);
   w0[1] = swap_workaround (w0[1]);
@@ -731,7 +731,7 @@ __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m08100_s08 (__glo
   w1[2] = swap_workaround (w1[2]);
   w1[3] = swap_workaround (w1[3]);
 
-  append_0x80_3 (w0, w1, w2, pw_len + 1);
+  append_0x80_3x4 (w0, w1, w2, pw_len + 1);
 
   w0[0] = swap_workaround (w0[0]);
   w0[1] = swap_workaround (w0[1]);
@@ -811,7 +811,7 @@ __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m08100_s16 (__glo
   w3[2] = 0;
   w3[3] = 0;
 
-  append_0x80_4 (w0, w1, w2, w3, pw_len + 1);
+  append_0x80_4x4 (w0, w1, w2, w3, pw_len + 1);
 
   w0[0] = swap_workaround (w0[0]);
   w0[1] = swap_workaround (w0[1]);
index eb869f0..26beaff 100644 (file)
@@ -290,7 +290,7 @@ __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m08400_m04 (__glo
 
     const u32 out_len = apply_rules (rules_buf[il_pos].cmds, w0, w1, pw_len);
 
-    append_0x80_2 (w0, w1, out_len);
+    append_0x80_2x4 (w0, w1, out_len);
 
     u32 w0_t[4];
 
@@ -613,7 +613,7 @@ __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m08400_s04 (__glo
 
     const u32 out_len = apply_rules (rules_buf[il_pos].cmds, w0, w1, pw_len);
 
-    append_0x80_2 (w0, w1, out_len);
+    append_0x80_2x4 (w0, w1, out_len);
 
     u32 w0_t[4];
 
index b2264b4..135acce 100644 (file)
@@ -206,7 +206,7 @@ __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m08400_m04 (__glo
 
   if (combs_mode == COMBINATOR_MODE_BASE_RIGHT)
   {
-    append_0x80_2 (wordl0, wordl1, pw_l_len);
+    append_0x80_2x4 (wordl0, wordl1, pw_l_len);
 
     switch_buffer_by_offset (wordl0, wordl1, wordl2, wordl3, combs_buf[0].pw_len);
   }
@@ -313,7 +313,7 @@ __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m08400_m04 (__glo
 
     if (combs_mode == COMBINATOR_MODE_BASE_LEFT)
     {
-      append_0x80_2 (wordr0, wordr1, pw_r_len);
+      append_0x80_2x4 (wordr0, wordr1, pw_r_len);
 
       switch_buffer_by_offset (wordr0, wordr1, wordr2, wordr3, pw_l_len);
     }
@@ -573,7 +573,7 @@ __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m08400_s04 (__glo
 
   if (combs_mode == COMBINATOR_MODE_BASE_RIGHT)
   {
-    append_0x80_2 (wordl0, wordl1, pw_l_len);
+    append_0x80_2x4 (wordl0, wordl1, pw_l_len);
 
     switch_buffer_by_offset (wordl0, wordl1, wordl2, wordl3, combs_buf[0].pw_len);
   }
@@ -692,7 +692,7 @@ __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m08400_s04 (__glo
 
     if (combs_mode == COMBINATOR_MODE_BASE_LEFT)
     {
-      append_0x80_2 (wordr0, wordr1, pw_r_len);
+      append_0x80_2x4 (wordr0, wordr1, pw_r_len);
 
       switch_buffer_by_offset (wordr0, wordr1, wordr2, wordr3, pw_l_len);
     }
index a00588e..6ff2525 100644 (file)
@@ -1552,11 +1552,11 @@ __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m08800_init (__gl
     w3[3] = 0;
 
     if (j == 1)
-      append_0x01_3 (w0, w1, w2, salt_len + 3);
+      append_0x01_3x4 (w0, w1, w2, salt_len + 3);
     else
-      append_0x02_3 (w0, w1, w2, salt_len + 3);
+      append_0x02_3x4 (w0, w1, w2, salt_len + 3);
 
-    append_0x80_3 (w0, w1, w2, salt_len + 4);
+    append_0x80_3x4 (w0, w1, w2, salt_len + 4);
 
     w0[0] = swap_workaround (w0[0]);
     w0[1] = swap_workaround (w0[1]);
index d938f24..3543f8d 100644 (file)
@@ -517,7 +517,7 @@ __kernel void __attribute__((reqd_work_group_size (8, 1, 1))) m09000_init (__glo
 
   const u32 pw_len = pws[gid].pw_len;
 
-  append_0x80_4 (w0, w1, w2, w3, pw_len);
+  append_0x80_4x4 (w0, w1, w2, w3, pw_len);
 
   /**
    * salt
index 731da4c..df0c9b5 100644 (file)
@@ -1368,7 +1368,7 @@ __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m09400_init (__gl
 
   u32 pw_len = pws[gid].pw_len;
 
-  append_0x80_4 (w0, w1, w2, w3, pw_len);
+  append_0x80_4x4 (w0, w1, w2, w3, pw_len);
 
   make_unicode (w1, w2, w3);
   make_unicode (w0, w0, w1);
index dfb6fd8..4fc5b74 100644 (file)
@@ -1098,7 +1098,7 @@ __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m09500_init (__gl
 
   u32 pw_len = pws[gid].pw_len;
 
-  append_0x80_4 (w0, w1, w2, w3, pw_len);
+  append_0x80_4x4 (w0, w1, w2, w3, pw_len);
 
   make_unicode (w1, w2, w3);
   make_unicode (w0, w0, w1);
index 312f052..1541b30 100644 (file)
@@ -1136,7 +1136,7 @@ __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m09600_init (__gl
 
   u32 pw_len = pws[gid].pw_len;
 
-  append_0x80_4 (w0, w1, w2, w3, pw_len);
+  append_0x80_4x4 (w0, w1, w2, w3, pw_len);
 
   make_unicode (w1, w2, w3);
   make_unicode (w0, w0, w1);
index 79c9bc7..ce1ad14 100644 (file)
@@ -680,7 +680,7 @@ __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m09700_m04 (__glo
 
     const u32 out_len = apply_rules (rules_buf[il_pos].cmds, w0, w1, pw_len);
 
-    append_0x80_2 (w0, w1, out_len);
+    append_0x80_2x4 (w0, w1, out_len);
 
     u32 w0_t[4];
     u32 w1_t[4];
@@ -907,7 +907,7 @@ __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m09700_s04 (__glo
 
     const u32 out_len = apply_rules (rules_buf[il_pos].cmds, w0, w1, pw_len);
 
-    append_0x80_2 (w0, w1, out_len);
+    append_0x80_2x4 (w0, w1, out_len);
 
     u32 w0_t[4];
     u32 w1_t[4];
index 4ef61a2..e13710e 100644 (file)
@@ -744,7 +744,7 @@ __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m09700_m04 (__glo
     w3[2] = 0;
     w3[3] = 0;
 
-    append_0x80_2 (w0, w1, pw_len);
+    append_0x80_2x4 (w0, w1, pw_len);
 
     u32 w0_t[4];
     u32 w1_t[4];
@@ -1025,7 +1025,7 @@ __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m09700_s04 (__glo
     w3[2] = 0;
     w3[3] = 0;
 
-    append_0x80_2 (w0, w1, pw_len);
+    append_0x80_2x4 (w0, w1, pw_len);
 
     u32 w0_t[4];
     u32 w1_t[4];
index a27a9a1..d031552 100644 (file)
@@ -543,7 +543,7 @@ __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m09720_m04 (__glo
 
     const u32 out_len = apply_rules (rules_buf[il_pos].cmds, w0, w1, pw_len);
 
-    append_0x80_2 (w0, w1, out_len);
+    append_0x80_2x4 (w0, w1, out_len);
 
     u32 w0_t[4];
     u32 w1_t[4];
@@ -689,7 +689,7 @@ __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m09720_s04 (__glo
 
     const u32 out_len = apply_rules (rules_buf[il_pos].cmds, w0, w1, pw_len);
 
-    append_0x80_2 (w0, w1, out_len);
+    append_0x80_2x4 (w0, w1, out_len);
 
     u32 w0_t[4];
     u32 w1_t[4];
index 44d95a8..63e8997 100644 (file)
@@ -595,7 +595,7 @@ __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m09720_m04 (__glo
     w3[2] = 0;
     w3[3] = 0;
 
-    append_0x80_2 (w0, w1, pw_len);
+    append_0x80_2x4 (w0, w1, pw_len);
 
     u32 w0_t[4];
     u32 w1_t[4];
@@ -795,7 +795,7 @@ __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m09720_s04 (__glo
     w3[2] = 0;
     w3[3] = 0;
 
-    append_0x80_2 (w0, w1, pw_len);
+    append_0x80_2x4 (w0, w1, pw_len);
 
     u32 w0_t[4];
     u32 w1_t[4];
index f88f368..d20242a 100644 (file)
@@ -370,7 +370,7 @@ __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m09800_m04 (__glo
 
     const u32 pw_salt_len = (out_len * 2) + salt_len;
 
-    append_0x80_2 (w0, w1, out_len);
+    append_0x80_2x4 (w0, w1, out_len);
 
     u32 w0_t[4];
     u32 w1_t[4];
@@ -615,7 +615,7 @@ __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m09800_s04 (__glo
 
     const u32 pw_salt_len = (out_len * 2) + salt_len;
 
-    append_0x80_2 (w0, w1, out_len);
+    append_0x80_2x4 (w0, w1, out_len);
 
     u32 w0_t[4];
     u32 w1_t[4];
index 76b94f5..fd77036 100644 (file)
@@ -422,7 +422,7 @@ __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m09800_m04 (__glo
     w3[2] = 0;
     w3[3] = 0;
 
-    append_0x80_2 (w0, w1, pw_len);
+    append_0x80_2x4 (w0, w1, pw_len);
 
     u32 w0_t[4];
     u32 w1_t[4];
@@ -721,7 +721,7 @@ __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m09800_s04 (__glo
     w3[2] = 0;
     w3[3] = 0;
 
-    append_0x80_2 (w0, w1, pw_len);
+    append_0x80_2x4 (w0, w1, pw_len);
 
     u32 w0_t[4];
     u32 w1_t[4];
index d6e3f12..fd6d1ad 100644 (file)
@@ -235,7 +235,7 @@ __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m09820_m04 (__glo
 
     const u32 pw_salt_len = (out_len * 2) + salt_len;
 
-    append_0x80_2 (w0, w1, out_len);
+    append_0x80_2x4 (w0, w1, out_len);
 
     u32 w0_t[4];
     u32 w1_t[4];
@@ -416,7 +416,7 @@ __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m09820_s04 (__glo
 
     const u32 pw_salt_len = (out_len * 2) + salt_len;
 
-    append_0x80_2 (w0, w1, out_len);
+    append_0x80_2x4 (w0, w1, out_len);
 
     u32 w0_t[4];
     u32 w1_t[4];
index 217e6e4..a3fea7e 100644 (file)
@@ -285,7 +285,7 @@ __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m09820_m04 (__glo
     w3[2] = 0;
     w3[3] = 0;
 
-    append_0x80_2 (w0, w1, pw_len);
+    append_0x80_2x4 (w0, w1, pw_len);
 
     u32 w0_t[4];
     u32 w1_t[4];
@@ -518,7 +518,7 @@ __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m09820_s04 (__glo
     w3[2] = 0;
     w3[3] = 0;
 
-    append_0x80_2 (w0, w1, pw_len);
+    append_0x80_2x4 (w0, w1, pw_len);
 
     u32 w0_t[4];
     u32 w1_t[4];
index 355d807..a5266aa 100644 (file)
@@ -250,7 +250,7 @@ __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m10300_init (__gl
 
   const u32 pw_salt_len = pw_len + salt_len;
 
-  append_0x80_4 (w0, w1, w2, w3, pw_salt_len);
+  append_0x80_4x4 (w0, w1, w2, w3, pw_salt_len);
 
   // swaps needed
 
index d382b65..f83c5dc 100644 (file)
@@ -178,7 +178,7 @@ __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m10420_m04 (__glo
 
   if (combs_mode == COMBINATOR_MODE_BASE_RIGHT)
   {
-    append_0x80_2 (wordl0, wordl1, pw_l_len);
+    append_0x80_2x4 (wordl0, wordl1, pw_l_len);
 
     switch_buffer_by_offset (wordl0, wordl1, wordl2, wordl3, combs_buf[0].pw_len);
   }
@@ -421,7 +421,7 @@ __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m10420_s04 (__glo
 
   if (combs_mode == COMBINATOR_MODE_BASE_RIGHT)
   {
-    append_0x80_2 (wordl0, wordl1, pw_l_len);
+    append_0x80_2x4 (wordl0, wordl1, pw_l_len);
 
     switch_buffer_by_offset (wordl0, wordl1, wordl2, wordl3, combs_buf[0].pw_len);
   }
index 94ba2ca..cebdaa4 100644 (file)
@@ -1564,7 +1564,7 @@ __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m10700_init (__gl
 
   block_len += salt_len;
 
-  append_0x80_2 (block0, block1, block_len);
+  append_0x80_2x4 (block0, block1, block_len);
 
   block3[3] = swap_workaround (block_len * 8);
 
index 59d64d9..c3110d8 100644 (file)
@@ -210,7 +210,7 @@ __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m10800_m04 (__glo
 
     const u32 out_len = apply_rules (rules_buf[il_pos].cmds, w0, w1, pw_len);
 
-    append_0x80_2 (w0, w1, out_len);
+    append_0x80_2x4 (w0, w1, out_len);
 
     /**
      * SHA384
@@ -348,7 +348,7 @@ __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m10800_s04 (__glo
 
     const u32 out_len = apply_rules (rules_buf[il_pos].cmds, w0, w1, pw_len);
 
-    append_0x80_2 (w0, w1, out_len);
+    append_0x80_2x4 (w0, w1, out_len);
 
     /**
      * SHA384
index 501f378..e367cdf 100644 (file)
@@ -188,7 +188,7 @@ __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m10800_m04 (__glo
 
   if (combs_mode == COMBINATOR_MODE_BASE_RIGHT)
   {
-    append_0x80_2 (wordl0, wordl1, pw_l_len);
+    append_0x80_2x4 (wordl0, wordl1, pw_l_len);
 
     switch_buffer_by_offset (wordl0, wordl1, wordl2, wordl3, combs_buf[0].pw_len);
   }
@@ -233,7 +233,7 @@ __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m10800_m04 (__glo
 
     if (combs_mode == COMBINATOR_MODE_BASE_LEFT)
     {
-      append_0x80_2 (wordr0, wordr1, pw_r_len);
+      append_0x80_2x4 (wordr0, wordr1, pw_r_len);
 
       switch_buffer_by_offset (wordr0, wordr1, wordr2, wordr3, pw_l_len);
     }
@@ -364,7 +364,7 @@ __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m10800_s04 (__glo
 
   if (combs_mode == COMBINATOR_MODE_BASE_RIGHT)
   {
-    append_0x80_2 (wordl0, wordl1, pw_l_len);
+    append_0x80_2x4 (wordl0, wordl1, pw_l_len);
 
     switch_buffer_by_offset (wordl0, wordl1, wordl2, wordl3, combs_buf[0].pw_len);
   }
@@ -421,7 +421,7 @@ __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m10800_s04 (__glo
 
     if (combs_mode == COMBINATOR_MODE_BASE_LEFT)
     {
-      append_0x80_2 (wordr0, wordr1, pw_r_len);
+      append_0x80_2x4 (wordr0, wordr1, pw_r_len);
 
       switch_buffer_by_offset (wordr0, wordr1, wordr2, wordr3, pw_l_len);
     }
index 3e1cce5..13a0087 100644 (file)
@@ -119,7 +119,7 @@ __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m11000_m04 (__glo
 
     const u32 pw_salt_len = pw_len + salt_len;
 
-    append_0x80_4 (w0, w1, w2, w3, out_len);
+    append_0x80_4x4 (w0, w1, w2, w3, out_len);
 
     /**
      * prepend salt
@@ -459,7 +459,7 @@ __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m11000_s04 (__glo
 
     const u32 pw_salt_len = pw_len + salt_len;
 
-    append_0x80_4 (w0, w1, w2, w3, out_len);
+    append_0x80_4x4 (w0, w1, w2, w3, out_len);
 
     /**
      * prepend salt
index d391bd0..cf2b51e 100644 (file)
@@ -162,7 +162,7 @@ __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m11000_m04 (__glo
     w3[2] = wordl3[2] | wordr3[2];
     w3[3] = wordl3[3] | wordr3[3];
 
-    append_0x80_4 (w0, w1, w2, w3, pw_len);
+    append_0x80_4x4 (w0, w1, w2, w3, pw_len);
 
     const u32 pw_salt_len = pw_len + salt_len;
 
@@ -549,7 +549,7 @@ __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m11000_s04 (__glo
     w3[2] = wordl3[2] | wordr3[2];
     w3[3] = wordl3[3] | wordr3[3];
 
-    append_0x80_4 (w0, w1, w2, w3, pw_len);
+    append_0x80_4x4 (w0, w1, w2, w3, pw_len);
 
     const u32 pw_salt_len = pw_len + salt_len;
 
index fc5f2ef..de3eac6 100644 (file)
@@ -102,7 +102,7 @@ __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m11200_m04 (__glo
 
     const u32 out_len = apply_rules (rules_buf[il_pos].cmds, w0, w1, pw_len);
 
-    append_0x80_2 (w0, w1, out_len);
+    append_0x80_2x4 (w0, w1, out_len);
 
     /**
      * sha1 ($pass)
@@ -607,7 +607,7 @@ __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m11200_s04 (__glo
 
     const u32 out_len = apply_rules (rules_buf[il_pos].cmds, w0, w1, pw_len);
 
-    append_0x80_2 (w0, w1, out_len);
+    append_0x80_2x4 (w0, w1, out_len);
 
     /**
      * sha1 ($pass)
index 24dadd3..7279d14 100644 (file)
@@ -68,7 +68,7 @@ __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m11200_m04 (__glo
 
   if (combs_mode == COMBINATOR_MODE_BASE_RIGHT)
   {
-    append_0x80_2 (wordl0, wordl1, pw_l_len);
+    append_0x80_2x4 (wordl0, wordl1, pw_l_len);
 
     switch_buffer_by_offset (wordl0, wordl1, wordl2, wordl3, combs_buf[0].pw_len);
   }
@@ -125,7 +125,7 @@ __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m11200_m04 (__glo
 
     if (combs_mode == COMBINATOR_MODE_BASE_LEFT)
     {
-      append_0x80_2 (wordr0, wordr1, pw_r_len);
+      append_0x80_2x4 (wordr0, wordr1, pw_r_len);
 
       switch_buffer_by_offset (wordr0, wordr1, wordr2, wordr3, pw_l_len);
     }
@@ -617,7 +617,7 @@ __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m11200_s04 (__glo
 
   if (combs_mode == COMBINATOR_MODE_BASE_RIGHT)
   {
-    append_0x80_2 (wordl0, wordl1, pw_l_len);
+    append_0x80_2x4 (wordl0, wordl1, pw_l_len);
 
     switch_buffer_by_offset (wordl0, wordl1, wordl2, wordl3, combs_buf[0].pw_len);
   }
@@ -686,7 +686,7 @@ __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m11200_s04 (__glo
 
     if (combs_mode == COMBINATOR_MODE_BASE_LEFT)
     {
-      append_0x80_2 (wordr0, wordr1, pw_r_len);
+      append_0x80_2x4 (wordr0, wordr1, pw_r_len);
 
       switch_buffer_by_offset (wordr0, wordr1, wordr2, wordr3, pw_l_len);
     }
index 7f55294..03ca34c 100644 (file)
@@ -922,7 +922,7 @@ __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m11400_m04 (__glo
 
     const u32 out_len = apply_rules (rules_buf[il_pos].cmds, w0, w1, pw_len);
 
-    append_0x80_2 (w0, w1, out_len);
+    append_0x80_2x4 (w0, w1, out_len);
 
     const u32 pw_salt_len = salt_len + out_len;
 
@@ -1757,7 +1757,7 @@ __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m11400_s04 (__glo
 
     const u32 out_len = apply_rules (rules_buf[il_pos].cmds, w0, w1, pw_len);
 
-    append_0x80_2 (w0, w1, out_len);
+    append_0x80_2x4 (w0, w1, out_len);
 
     const u32 pw_salt_len = salt_len + out_len;
 
index 05a15ce..272d48d 100644 (file)
@@ -790,7 +790,7 @@ __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m11400_m04 (__glo
 
   if (combs_mode == COMBINATOR_MODE_BASE_RIGHT)
   {
-    append_0x80_2 (wordl0, wordl1, pw_l_len);
+    append_0x80_2x4 (wordl0, wordl1, pw_l_len);
 
     switch_buffer_by_offset (wordl0, wordl1, wordl2, wordl3, combs_buf[0].pw_len);
   }
@@ -1667,7 +1667,7 @@ __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m11400_s04 (__glo
 
   if (combs_mode == COMBINATOR_MODE_BASE_RIGHT)
   {
-    append_0x80_2 (wordl0, wordl1, pw_l_len);
+    append_0x80_2x4 (wordl0, wordl1, pw_l_len);
 
     switch_buffer_by_offset (wordl0, wordl1, wordl2, wordl3, combs_buf[0].pw_len);
   }
index 95d1022..7e64dbe 100644 (file)
@@ -1770,7 +1770,7 @@ __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m11600_comp (__gl
   u32 block_len = tmps[gid].block_len;
   u32 final_len = tmps[gid].final_len;
 
-  append_0x80_4 (block, block_len);
+  append_0x80_4x4 (block, block_len);
 
   if (block_len >= 56)
   {
index 572c7ac..00ffbc7 100644 (file)
@@ -2386,7 +2386,7 @@ __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m11700_m04 (__glo
 
     const u32 out_len = apply_rules (rules_buf[il_pos].cmds, &w[0], &w[1], pw_len);
 
-    append_0x01_2 (&w[0], &w[1], out_len);
+    append_0x01_2x4 (&w[0], &w[1], out_len);
 
     /**
      * reverse message block
@@ -2573,7 +2573,7 @@ __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m11700_s04 (__glo
 
     const u32 out_len = apply_rules (rules_buf[il_pos].cmds, &w[0], &w[1], pw_len);
 
-    append_0x01_2 (&w[0], &w[1], out_len);
+    append_0x01_2x4 (&w[0], &w[1], out_len);
 
     /**
      * reverse message block
index ce49d21..0d228e4 100644 (file)
@@ -2373,7 +2373,7 @@ __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m11700_m04 (__glo
 
   if (combs_mode == COMBINATOR_MODE_BASE_RIGHT)
   {
-    append_0x80_2 (wordl0, wordl1, pw_l_len);
+    append_0x80_2x4 (wordl0, wordl1, pw_l_len);
 
     switch_buffer_by_offset (wordl0, wordl1, wordl2, wordl3, combs_buf[0].pw_len);
   }
@@ -2440,7 +2440,7 @@ __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m11700_m04 (__glo
     w[14] = wordl3[1] | wordr3[1];
     w[15] = wordl3[1] | wordr3[1];
 
-    append_0x01_4 (&w[0], &w[1], &w[2], &w[3], pw_len);
+    append_0x01_4x4 (&w[0], &w[1], &w[2], &w[3], pw_len);
 
     /**
      * reverse message block
@@ -2616,7 +2616,7 @@ __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m11700_s04 (__glo
 
   if (combs_mode == COMBINATOR_MODE_BASE_RIGHT)
   {
-    append_0x80_2 (wordl0, wordl1, pw_l_len);
+    append_0x80_2x4 (wordl0, wordl1, pw_l_len);
 
     switch_buffer_by_offset (wordl0, wordl1, wordl2, wordl3, combs_buf[0].pw_len);
   }
@@ -2683,7 +2683,7 @@ __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m11700_s04 (__glo
     w[14] = wordl3[1] | wordr3[1];
     w[15] = wordl3[1] | wordr3[1];
 
-    append_0x01_4 (&w[0], &w[1], &w[2], &w[3], pw_len);
+    append_0x01_4x4 (&w[0], &w[1], &w[2], &w[3], pw_len);
 
     /**
      * reverse message block
index 676e651..6229099 100644 (file)
@@ -2386,7 +2386,7 @@ __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m11800_m04 (__glo
 
     const u32 out_len = apply_rules (rules_buf[il_pos].cmds, &w[0], &w[1], pw_len);
 
-    append_0x01_2 (&w[0], &w[1], out_len);
+    append_0x01_2x4 (&w[0], &w[1], out_len);
 
     /**
      * reverse message block
@@ -2573,7 +2573,7 @@ __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m11800_s04 (__glo
 
     const u32 out_len = apply_rules (rules_buf[il_pos].cmds, &w[0], &w[1], pw_len);
 
-    append_0x01_2 (&w[0], &w[1], out_len);
+    append_0x01_2x4 (&w[0], &w[1], out_len);
 
     /**
      * reverse message block
index 943eff5..74e22b3 100644 (file)
@@ -2374,7 +2374,7 @@ __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m11800_m04 (__glo
 
   if (combs_mode == COMBINATOR_MODE_BASE_RIGHT)
   {
-    append_0x80_2 (wordl0, wordl1, pw_l_len);
+    append_0x80_2x4 (wordl0, wordl1, pw_l_len);
 
     switch_buffer_by_offset (wordl0, wordl1, wordl2, wordl3, combs_buf[0].pw_len);
   }
@@ -2441,7 +2441,7 @@ __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m11800_m04 (__glo
     w[14] = wordl3[1] | wordr3[1];
     w[15] = wordl3[1] | wordr3[1];
 
-    append_0x01_4 (&w[0], &w[1], &w[2], &w[3], pw_len);
+    append_0x01_4x4 (&w[0], &w[1], &w[2], &w[3], pw_len);
 
     /**
      * reverse message block
@@ -2617,7 +2617,7 @@ __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m11800_s04 (__glo
 
   if (combs_mode == COMBINATOR_MODE_BASE_RIGHT)
   {
-    append_0x80_2 (wordl0, wordl1, pw_l_len);
+    append_0x80_2x4 (wordl0, wordl1, pw_l_len);
 
     switch_buffer_by_offset (wordl0, wordl1, wordl2, wordl3, combs_buf[0].pw_len);
   }
@@ -2684,7 +2684,7 @@ __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m11800_s04 (__glo
     w[14] = wordl3[1] | wordr3[1];
     w[15] = wordl3[1] | wordr3[1];
 
-    append_0x01_4 (&w[0], &w[1], &w[2], &w[3], pw_len);
+    append_0x01_4x4 (&w[0], &w[1], &w[2], &w[3], pw_len);
 
     /**
      * reverse message block
index 1c35b46..279ab63 100644 (file)
@@ -171,7 +171,7 @@ __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m12200_init (__gl
 
   u32 pw_len = pws[gid].pw_len;
 
-  append_0x80_4 (w0, w1, w2, w3, pw_len);
+  append_0x80_4x4 (w0, w1, w2, w3, pw_len);
 
   w0[0] = swap_workaround (w0[0]);
   w0[1] = swap_workaround (w0[1]);
index 231edec..3eab930 100644 (file)
@@ -150,7 +150,7 @@ __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m12600_m04 (__glo
 
     const u32 out_len = apply_rules (rules_buf[il_pos].cmds, w0, w1, pw_len);
 
-    append_0x80_2 (w0, w1, out_len);
+    append_0x80_2x4 (w0, w1, out_len);
 
     /**
      * sha1
@@ -548,7 +548,7 @@ __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m12600_s04 (__glo
 
     const u32 out_len = apply_rules (rules_buf[il_pos].cmds, w0, w1, pw_len);
 
-    append_0x80_2 (w0, w1, out_len);
+    append_0x80_2x4 (w0, w1, out_len);
 
     /**
      * sha1
index 1c4430b..5a1133a 100644 (file)
@@ -78,7 +78,7 @@ __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m12600_m04 (__glo
 
   if (combs_mode == COMBINATOR_MODE_BASE_RIGHT)
   {
-    append_0x80_2 (wordl0, wordl1, pw_l_len);
+    append_0x80_2x4 (wordl0, wordl1, pw_l_len);
 
     switch_buffer_by_offset (wordl0, wordl1, wordl2, wordl3, combs_buf[0].pw_len);
   }
@@ -173,7 +173,7 @@ __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m12600_m04 (__glo
 
     if (combs_mode == COMBINATOR_MODE_BASE_LEFT)
     {
-      append_0x80_2 (wordr0, wordr1, pw_r_len);
+      append_0x80_2x4 (wordr0, wordr1, pw_r_len);
 
       switch_buffer_by_offset (wordr0, wordr1, wordr2, wordr3, pw_l_len);
     }
@@ -521,7 +521,7 @@ __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m12600_s04 (__glo
 
   if (combs_mode == COMBINATOR_MODE_BASE_RIGHT)
   {
-    append_0x80_2 (wordl0, wordl1, pw_l_len);
+    append_0x80_2x4 (wordl0, wordl1, pw_l_len);
 
     switch_buffer_by_offset (wordl0, wordl1, wordl2, wordl3, combs_buf[0].pw_len);
   }
@@ -628,7 +628,7 @@ __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m12600_s04 (__glo
 
     if (combs_mode == COMBINATOR_MODE_BASE_LEFT)
     {
-      append_0x80_2 (wordr0, wordr1, pw_r_len);
+      append_0x80_2x4 (wordr0, wordr1, pw_r_len);
 
       switch_buffer_by_offset (wordr0, wordr1, wordr2, wordr3, pw_l_len);
     }
index a42d812..a4ec85b 100644 (file)
@@ -413,7 +413,7 @@ __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m12800_init (__gl
    * generate nthash
    */
 
-  append_0x80_2 (w0, w1, pw_len);
+  append_0x80_2x4 (w0, w1, pw_len);
 
   make_unicode (w1, w2, w3);
   make_unicode (w0, w0, w1);