Power 8 support, phase 5 

This commit adds the testcases for the following instructions:

  vpmsumb, vpmsumh, vpmsumw, vpmsumd, vpermxor, vcipher, vcipherlast,
  vncipher, vncipherlast, vsbox,
  vclzb, vclzw, vclzh, vclzd,
  vpopcntb, vpopcnth, vpopcntw, vpopcntd,
  vnand, vorc, veqv,
  vshasigmaw, vshasigmad,
  bcdadd, bcdsub

The VEX commit that added the support for the above instructions was 
commit 2789.

The patch is for Bugzilla 325628


git-svn-id: svn://svn.valgrind.org/valgrind/trunk@13646 a5019735-40e9-0310-863c-91ae7b9d1cf9
diff --git a/memcheck/mc_translate.c b/memcheck/mc_translate.c
index 1663343..a6b2959 100644
--- a/memcheck/mc_translate.c
+++ b/memcheck/mc_translate.c
@@ -2709,6 +2709,12 @@
       case Iop_SetElem32x2:
          complainIfUndefined(mce, atom2, NULL);
          return assignNew('V', mce, Ity_I64, triop(op, vatom1, atom2, vatom3));
+      /* BCDIops */
+      case Iop_BCDAdd:
+      case Iop_BCDSub:
+         complainIfUndefined(mce, atom3, NULL);
+         return assignNew('V', mce, Ity_V128, triop(op, vatom1, vatom2, atom3));
+
       default:
          ppIROp(op);
          VG_(tool_panic)("memcheck:expr2vbits_Triop");
@@ -3086,6 +3092,7 @@
       case Iop_Add8x16:
       case Iop_Mul8x16:
       case Iop_PolynomialMul8x16:
+      case Iop_PolynomialMulAdd8x16:
          return binary8Ix16(mce, vatom1, vatom2);
 
       case Iop_QSub16Ux8:
@@ -3110,6 +3117,7 @@
       case Iop_Add16x8:
       case Iop_QDMulHi16Sx8:
       case Iop_QRDMulHi16Sx8:
+      case Iop_PolynomialMulAdd16x8:
          return binary16Ix8(mce, vatom1, vatom2);
 
       case Iop_Sub32x4:
@@ -3132,6 +3140,7 @@
       case Iop_Mul32x4:
       case Iop_QDMulHi32Sx4:
       case Iop_QRDMulHi32Sx4:
+      case Iop_PolynomialMulAdd32x4:
          return binary32Ix4(mce, vatom1, vatom2);
 
       case Iop_Sub64x2:
@@ -3149,7 +3158,12 @@
       case Iop_QAdd64Sx2:
       case Iop_QSub64Ux2:
       case Iop_QSub64Sx2:
-         return binary64Ix2(mce, vatom1, vatom2);
+      case Iop_PolynomialMulAdd64x2:
+      case Iop_CipherV128:
+      case Iop_CipherLV128:
+      case Iop_NCipherV128:
+      case Iop_NCipherLV128:
+        return binary64Ix2(mce, vatom1, vatom2);
 
       case Iop_QNarrowBin64Sto32Sx4:
       case Iop_QNarrowBin64Uto32Ux4:
@@ -3391,6 +3405,12 @@
          complainIfUndefined(mce, atom2, NULL);
          return assignNew('V', mce, Ity_V128, binop(op, vatom1, atom2));
 
+      /* SHA Iops */
+      case Iop_SHA256:
+      case Iop_SHA512:
+         complainIfUndefined(mce, atom2, NULL);
+         return assignNew('V', mce, Ity_V128, binop(op, vatom1, atom2));
+
       /* I128-bit data-steering */
       case Iop_64HLto128:
          return assignNew('V', mce, Ity_I128, binop(op, vatom1, vatom2));
@@ -4128,6 +4148,8 @@
          return mkPCastTo(mce, Ity_I64, vatom);
 
       case Iop_CmpNEZ64x2:
+      case Iop_CipherSV128:
+      case Iop_Clz64x2:
          return mkPCast64x2(mce, vatom);
 
       case Iop_NarrowUn16to8x8:
diff --git a/memcheck/tests/vbit-test/irops.c b/memcheck/tests/vbit-test/irops.c
index 85e1d15..f237954 100644
--- a/memcheck/tests/vbit-test/irops.c
+++ b/memcheck/tests/vbit-test/irops.c
@@ -751,6 +751,7 @@
   { DEFOP(Iop_Clz8Sx16, UNDEF_UNKNOWN), },
   { DEFOP(Iop_Clz16Sx8, UNDEF_UNKNOWN), },
   { DEFOP(Iop_Clz32Sx4, UNDEF_UNKNOWN), },
+  { DEFOP(Iop_Clz64x2, UNDEF_UNKNOWN), },
   { DEFOP(Iop_Cls8Sx16, UNDEF_UNKNOWN), },
   { DEFOP(Iop_Cls16Sx8, UNDEF_UNKNOWN), },
   { DEFOP(Iop_Cls32Sx4, UNDEF_UNKNOWN), },
@@ -960,6 +961,19 @@
   { DEFOP(Iop_Min32Fx8, UNDEF_UNKNOWN), },
   { DEFOP(Iop_Max64Fx4, UNDEF_UNKNOWN), },
   { DEFOP(Iop_Min64Fx4, UNDEF_UNKNOWN), },
+  { DEFOP(Iop_BCDAdd, UNDEF_UNKNOWN), },
+  { DEFOP(Iop_BCDSub, UNDEF_UNKNOWN), },
+  { DEFOP(Iop_PolynomialMulAdd8x16, UNDEF_UNKNOWN), },
+  { DEFOP(Iop_PolynomialMulAdd16x8, UNDEF_UNKNOWN), },
+  { DEFOP(Iop_PolynomialMulAdd32x4, UNDEF_UNKNOWN), },
+  { DEFOP(Iop_PolynomialMulAdd64x2, UNDEF_UNKNOWN), },
+  { DEFOP(Iop_CipherV128,   UNDEF_UNKNOWN), },
+  { DEFOP(Iop_CipherLV128,  UNDEF_UNKNOWN), },
+  { DEFOP(Iop_CipherSV128,  UNDEF_UNKNOWN), },
+  { DEFOP(Iop_NCipherV128,  UNDEF_UNKNOWN), },
+  { DEFOP(Iop_NCipherLV128, UNDEF_UNKNOWN), },
+  { DEFOP(Iop_SHA512, UNDEF_UNKNOWN), },
+  { DEFOP(Iop_SHA256, UNDEF_UNKNOWN), },
 };
 
 
diff --git a/none/tests/ppc32/jm_vec_isa_2_07.stdout.exp b/none/tests/ppc32/jm_vec_isa_2_07.stdout.exp
index 78a811a..5dd38df 100644
--- a/none/tests/ppc32/jm_vec_isa_2_07.stdout.exp
+++ b/none/tests/ppc32/jm_vec_isa_2_07.stdout.exp
@@ -23,122 +23,122 @@
 mtfprwa: f5f6f7f8 => fffffffff5f6f7f8
 mtfprwa: fefdfeff => fffffffffefdfeff
 
-vaddudm: 0102030405060708 @@ 0102030405060708,  ==> 020406080a0c0e10
-	090a0b0c0e0d0e0f @@ 090a0b0c0e0d0e0f,  ==> 121416181c1a1c1e
-vaddudm: 0102030405060708 @@ f1f2f3f4f5f6f7f8,  ==> f2f4f6f8fafcff00
-	090a0b0c0e0d0e0f @@ f9fafbfcfefdfeff,  ==> 030507090d0b0d0e
-vaddudm: f1f2f3f4f5f6f7f8 @@ 0102030405060708,  ==> f2f4f6f8fafcff00
-	f9fafbfcfefdfeff @@ 090a0b0c0e0d0e0f,  ==> 030507090d0b0d0e
-vaddudm: f1f2f3f4f5f6f7f8 @@ f1f2f3f4f5f6f7f8,  ==> e3e5e7e9ebedeff0
-	f9fafbfcfefdfeff @@ f9fafbfcfefdfeff,  ==> f3f5f7f9fdfbfdfe
+vaddudm: 0102030405060708 @@ 0102030405060708  ==> 020406080a0c0e10
+	090a0b0c0e0d0e0f @@ 090a0b0c0e0d0e0f  ==> 121416181c1a1c1e
+vaddudm: 0102030405060708 @@ f1f2f3f4f5f6f7f8  ==> f2f4f6f8fafcff00
+	090a0b0c0e0d0e0f @@ f9fafbfcfefdfeff  ==> 030507090d0b0d0e
+vaddudm: f1f2f3f4f5f6f7f8 @@ 0102030405060708  ==> f2f4f6f8fafcff00
+	f9fafbfcfefdfeff @@ 090a0b0c0e0d0e0f  ==> 030507090d0b0d0e
+vaddudm: f1f2f3f4f5f6f7f8 @@ f1f2f3f4f5f6f7f8  ==> e3e5e7e9ebedeff0
+	f9fafbfcfefdfeff @@ f9fafbfcfefdfeff  ==> f3f5f7f9fdfbfdfe
 
-vsubudm: 0102030405060708 @@ 0102030405060708,  ==> 0000000000000000
-	090a0b0c0e0d0e0f @@ 090a0b0c0e0d0e0f,  ==> 0000000000000000
-vsubudm: 0102030405060708 @@ f1f2f3f4f5f6f7f8,  ==> 0f0f0f0f0f0f0f10
-	090a0b0c0e0d0e0f @@ f9fafbfcfefdfeff,  ==> 0f0f0f0f0f0f0f10
-vsubudm: f1f2f3f4f5f6f7f8 @@ 0102030405060708,  ==> f0f0f0f0f0f0f0f0
-	f9fafbfcfefdfeff @@ 090a0b0c0e0d0e0f,  ==> f0f0f0f0f0f0f0f0
-vsubudm: f1f2f3f4f5f6f7f8 @@ f1f2f3f4f5f6f7f8,  ==> 0000000000000000
-	f9fafbfcfefdfeff @@ f9fafbfcfefdfeff,  ==> 0000000000000000
+vsubudm: 0102030405060708 @@ 0102030405060708  ==> 0000000000000000
+	090a0b0c0e0d0e0f @@ 090a0b0c0e0d0e0f  ==> 0000000000000000
+vsubudm: 0102030405060708 @@ f1f2f3f4f5f6f7f8  ==> 0f0f0f0f0f0f0f10
+	090a0b0c0e0d0e0f @@ f9fafbfcfefdfeff  ==> 0f0f0f0f0f0f0f10
+vsubudm: f1f2f3f4f5f6f7f8 @@ 0102030405060708  ==> f0f0f0f0f0f0f0f0
+	f9fafbfcfefdfeff @@ 090a0b0c0e0d0e0f  ==> f0f0f0f0f0f0f0f0
+vsubudm: f1f2f3f4f5f6f7f8 @@ f1f2f3f4f5f6f7f8  ==> 0000000000000000
+	f9fafbfcfefdfeff @@ f9fafbfcfefdfeff  ==> 0000000000000000
 
-vmaxud: 0102030405060708 @@ 0102030405060708,  ==> 0102030405060708
-	090a0b0c0e0d0e0f @@ 090a0b0c0e0d0e0f,  ==> 090a0b0c0e0d0e0f
-vmaxud: 0102030405060708 @@ f1f2f3f4f5f6f7f8,  ==> f1f2f3f4f5f6f7f8
-	090a0b0c0e0d0e0f @@ f9fafbfcfefdfeff,  ==> f9fafbfcfefdfeff
-vmaxud: f1f2f3f4f5f6f7f8 @@ 0102030405060708,  ==> f1f2f3f4f5f6f7f8
-	f9fafbfcfefdfeff @@ 090a0b0c0e0d0e0f,  ==> f9fafbfcfefdfeff
-vmaxud: f1f2f3f4f5f6f7f8 @@ f1f2f3f4f5f6f7f8,  ==> f1f2f3f4f5f6f7f8
-	f9fafbfcfefdfeff @@ f9fafbfcfefdfeff,  ==> f9fafbfcfefdfeff
+vmaxud: 0102030405060708 @@ 0102030405060708  ==> 0102030405060708
+	090a0b0c0e0d0e0f @@ 090a0b0c0e0d0e0f  ==> 090a0b0c0e0d0e0f
+vmaxud: 0102030405060708 @@ f1f2f3f4f5f6f7f8  ==> f1f2f3f4f5f6f7f8
+	090a0b0c0e0d0e0f @@ f9fafbfcfefdfeff  ==> f9fafbfcfefdfeff
+vmaxud: f1f2f3f4f5f6f7f8 @@ 0102030405060708  ==> f1f2f3f4f5f6f7f8
+	f9fafbfcfefdfeff @@ 090a0b0c0e0d0e0f  ==> f9fafbfcfefdfeff
+vmaxud: f1f2f3f4f5f6f7f8 @@ f1f2f3f4f5f6f7f8  ==> f1f2f3f4f5f6f7f8
+	f9fafbfcfefdfeff @@ f9fafbfcfefdfeff  ==> f9fafbfcfefdfeff
 
-vmaxsd: 0102030405060708 @@ 0102030405060708,  ==> 0102030405060708
-	090a0b0c0e0d0e0f @@ 090a0b0c0e0d0e0f,  ==> 090a0b0c0e0d0e0f
-vmaxsd: 0102030405060708 @@ f1f2f3f4f5f6f7f8,  ==> 0102030405060708
-	090a0b0c0e0d0e0f @@ f9fafbfcfefdfeff,  ==> 090a0b0c0e0d0e0f
-vmaxsd: f1f2f3f4f5f6f7f8 @@ 0102030405060708,  ==> 0102030405060708
-	f9fafbfcfefdfeff @@ 090a0b0c0e0d0e0f,  ==> 090a0b0c0e0d0e0f
-vmaxsd: f1f2f3f4f5f6f7f8 @@ f1f2f3f4f5f6f7f8,  ==> f1f2f3f4f5f6f7f8
-	f9fafbfcfefdfeff @@ f9fafbfcfefdfeff,  ==> f9fafbfcfefdfeff
+vmaxsd: 0102030405060708 @@ 0102030405060708  ==> 0102030405060708
+	090a0b0c0e0d0e0f @@ 090a0b0c0e0d0e0f  ==> 090a0b0c0e0d0e0f
+vmaxsd: 0102030405060708 @@ f1f2f3f4f5f6f7f8  ==> 0102030405060708
+	090a0b0c0e0d0e0f @@ f9fafbfcfefdfeff  ==> 090a0b0c0e0d0e0f
+vmaxsd: f1f2f3f4f5f6f7f8 @@ 0102030405060708  ==> 0102030405060708
+	f9fafbfcfefdfeff @@ 090a0b0c0e0d0e0f  ==> 090a0b0c0e0d0e0f
+vmaxsd: f1f2f3f4f5f6f7f8 @@ f1f2f3f4f5f6f7f8  ==> f1f2f3f4f5f6f7f8
+	f9fafbfcfefdfeff @@ f9fafbfcfefdfeff  ==> f9fafbfcfefdfeff
 
-vminud: 0102030405060708 @@ 0102030405060708,  ==> 0102030405060708
-	090a0b0c0e0d0e0f @@ 090a0b0c0e0d0e0f,  ==> 090a0b0c0e0d0e0f
-vminud: 0102030405060708 @@ f1f2f3f4f5f6f7f8,  ==> 0102030405060708
-	090a0b0c0e0d0e0f @@ f9fafbfcfefdfeff,  ==> 090a0b0c0e0d0e0f
-vminud: f1f2f3f4f5f6f7f8 @@ 0102030405060708,  ==> 0102030405060708
-	f9fafbfcfefdfeff @@ 090a0b0c0e0d0e0f,  ==> 090a0b0c0e0d0e0f
-vminud: f1f2f3f4f5f6f7f8 @@ f1f2f3f4f5f6f7f8,  ==> f1f2f3f4f5f6f7f8
-	f9fafbfcfefdfeff @@ f9fafbfcfefdfeff,  ==> f9fafbfcfefdfeff
+vminud: 0102030405060708 @@ 0102030405060708  ==> 0102030405060708
+	090a0b0c0e0d0e0f @@ 090a0b0c0e0d0e0f  ==> 090a0b0c0e0d0e0f
+vminud: 0102030405060708 @@ f1f2f3f4f5f6f7f8  ==> 0102030405060708
+	090a0b0c0e0d0e0f @@ f9fafbfcfefdfeff  ==> 090a0b0c0e0d0e0f
+vminud: f1f2f3f4f5f6f7f8 @@ 0102030405060708  ==> 0102030405060708
+	f9fafbfcfefdfeff @@ 090a0b0c0e0d0e0f  ==> 090a0b0c0e0d0e0f
+vminud: f1f2f3f4f5f6f7f8 @@ f1f2f3f4f5f6f7f8  ==> f1f2f3f4f5f6f7f8
+	f9fafbfcfefdfeff @@ f9fafbfcfefdfeff  ==> f9fafbfcfefdfeff
 
-vminsd: 0102030405060708 @@ 0102030405060708,  ==> 0102030405060708
-	090a0b0c0e0d0e0f @@ 090a0b0c0e0d0e0f,  ==> 090a0b0c0e0d0e0f
-vminsd: 0102030405060708 @@ f1f2f3f4f5f6f7f8,  ==> f1f2f3f4f5f6f7f8
-	090a0b0c0e0d0e0f @@ f9fafbfcfefdfeff,  ==> f9fafbfcfefdfeff
-vminsd: f1f2f3f4f5f6f7f8 @@ 0102030405060708,  ==> f1f2f3f4f5f6f7f8
-	f9fafbfcfefdfeff @@ 090a0b0c0e0d0e0f,  ==> f9fafbfcfefdfeff
-vminsd: f1f2f3f4f5f6f7f8 @@ f1f2f3f4f5f6f7f8,  ==> f1f2f3f4f5f6f7f8
-	f9fafbfcfefdfeff @@ f9fafbfcfefdfeff,  ==> f9fafbfcfefdfeff
+vminsd: 0102030405060708 @@ 0102030405060708  ==> 0102030405060708
+	090a0b0c0e0d0e0f @@ 090a0b0c0e0d0e0f  ==> 090a0b0c0e0d0e0f
+vminsd: 0102030405060708 @@ f1f2f3f4f5f6f7f8  ==> f1f2f3f4f5f6f7f8
+	090a0b0c0e0d0e0f @@ f9fafbfcfefdfeff  ==> f9fafbfcfefdfeff
+vminsd: f1f2f3f4f5f6f7f8 @@ 0102030405060708  ==> f1f2f3f4f5f6f7f8
+	f9fafbfcfefdfeff @@ 090a0b0c0e0d0e0f  ==> f9fafbfcfefdfeff
+vminsd: f1f2f3f4f5f6f7f8 @@ f1f2f3f4f5f6f7f8  ==> f1f2f3f4f5f6f7f8
+	f9fafbfcfefdfeff @@ f9fafbfcfefdfeff  ==> f9fafbfcfefdfeff
 
-vcmpequd: 0102030405060708 @@ 0102030405060708,  ==> ffffffffffffffff
-	090a0b0c0e0d0e0f @@ 090a0b0c0e0d0e0f,  ==> ffffffffffffffff
-vcmpequd: 0102030405060708 @@ f1f2f3f4f5f6f7f8,  ==> 0000000000000000
-	090a0b0c0e0d0e0f @@ f9fafbfcfefdfeff,  ==> 0000000000000000
-vcmpequd: f1f2f3f4f5f6f7f8 @@ 0102030405060708,  ==> 0000000000000000
-	f9fafbfcfefdfeff @@ 090a0b0c0e0d0e0f,  ==> 0000000000000000
-vcmpequd: f1f2f3f4f5f6f7f8 @@ f1f2f3f4f5f6f7f8,  ==> ffffffffffffffff
-	f9fafbfcfefdfeff @@ f9fafbfcfefdfeff,  ==> ffffffffffffffff
+vcmpequd: 0102030405060708 @@ 0102030405060708  ==> ffffffffffffffff
+	090a0b0c0e0d0e0f @@ 090a0b0c0e0d0e0f  ==> ffffffffffffffff
+vcmpequd: 0102030405060708 @@ f1f2f3f4f5f6f7f8  ==> 0000000000000000
+	090a0b0c0e0d0e0f @@ f9fafbfcfefdfeff  ==> 0000000000000000
+vcmpequd: f1f2f3f4f5f6f7f8 @@ 0102030405060708  ==> 0000000000000000
+	f9fafbfcfefdfeff @@ 090a0b0c0e0d0e0f  ==> 0000000000000000
+vcmpequd: f1f2f3f4f5f6f7f8 @@ f1f2f3f4f5f6f7f8  ==> ffffffffffffffff
+	f9fafbfcfefdfeff @@ f9fafbfcfefdfeff  ==> ffffffffffffffff
 
-vcmpgtud: 0102030405060708 @@ 0102030405060708,  ==> 0000000000000000
-	090a0b0c0e0d0e0f @@ 090a0b0c0e0d0e0f,  ==> 0000000000000000
-vcmpgtud: 0102030405060708 @@ f1f2f3f4f5f6f7f8,  ==> 0000000000000000
-	090a0b0c0e0d0e0f @@ f9fafbfcfefdfeff,  ==> 0000000000000000
-vcmpgtud: f1f2f3f4f5f6f7f8 @@ 0102030405060708,  ==> ffffffffffffffff
-	f9fafbfcfefdfeff @@ 090a0b0c0e0d0e0f,  ==> ffffffffffffffff
-vcmpgtud: f1f2f3f4f5f6f7f8 @@ f1f2f3f4f5f6f7f8,  ==> 0000000000000000
-	f9fafbfcfefdfeff @@ f9fafbfcfefdfeff,  ==> 0000000000000000
+vcmpgtud: 0102030405060708 @@ 0102030405060708  ==> 0000000000000000
+	090a0b0c0e0d0e0f @@ 090a0b0c0e0d0e0f  ==> 0000000000000000
+vcmpgtud: 0102030405060708 @@ f1f2f3f4f5f6f7f8  ==> 0000000000000000
+	090a0b0c0e0d0e0f @@ f9fafbfcfefdfeff  ==> 0000000000000000
+vcmpgtud: f1f2f3f4f5f6f7f8 @@ 0102030405060708  ==> ffffffffffffffff
+	f9fafbfcfefdfeff @@ 090a0b0c0e0d0e0f  ==> ffffffffffffffff
+vcmpgtud: f1f2f3f4f5f6f7f8 @@ f1f2f3f4f5f6f7f8  ==> 0000000000000000
+	f9fafbfcfefdfeff @@ f9fafbfcfefdfeff  ==> 0000000000000000
 
-vcmpgtsd: 0102030405060708 @@ 0102030405060708,  ==> 0000000000000000
-	090a0b0c0e0d0e0f @@ 090a0b0c0e0d0e0f,  ==> 0000000000000000
-vcmpgtsd: 0102030405060708 @@ f1f2f3f4f5f6f7f8,  ==> ffffffffffffffff
-	090a0b0c0e0d0e0f @@ f9fafbfcfefdfeff,  ==> ffffffffffffffff
-vcmpgtsd: f1f2f3f4f5f6f7f8 @@ 0102030405060708,  ==> 0000000000000000
-	f9fafbfcfefdfeff @@ 090a0b0c0e0d0e0f,  ==> 0000000000000000
-vcmpgtsd: f1f2f3f4f5f6f7f8 @@ f1f2f3f4f5f6f7f8,  ==> 0000000000000000
-	f9fafbfcfefdfeff @@ f9fafbfcfefdfeff,  ==> 0000000000000000
+vcmpgtsd: 0102030405060708 @@ 0102030405060708  ==> 0000000000000000
+	090a0b0c0e0d0e0f @@ 090a0b0c0e0d0e0f  ==> 0000000000000000
+vcmpgtsd: 0102030405060708 @@ f1f2f3f4f5f6f7f8  ==> ffffffffffffffff
+	090a0b0c0e0d0e0f @@ f9fafbfcfefdfeff  ==> ffffffffffffffff
+vcmpgtsd: f1f2f3f4f5f6f7f8 @@ 0102030405060708  ==> 0000000000000000
+	f9fafbfcfefdfeff @@ 090a0b0c0e0d0e0f  ==> 0000000000000000
+vcmpgtsd: f1f2f3f4f5f6f7f8 @@ f1f2f3f4f5f6f7f8  ==> 0000000000000000
+	f9fafbfcfefdfeff @@ f9fafbfcfefdfeff  ==> 0000000000000000
 
-vrld: 0102030405060708 @@ 0102030405060708,  ==> 0203040506070801
-	090a0b0c0e0d0e0f @@ 090a0b0c0e0d0e0f,  ==> 0586070687078485
-vrld: 0102030405060708 @@ f1f2f3f4f5f6f7f8,  ==> 0801020304050607
-	090a0b0c0e0d0e0f @@ f9fafbfcfefdfeff,  ==> 8485058607068707
-vrld: f1f2f3f4f5f6f7f8 @@ 0102030405060708,  ==> f2f3f4f5f6f7f8f1
-	f9fafbfcfefdfeff @@ 090a0b0c0e0d0e0f,  ==> 7dfe7f7eff7ffcfd
-vrld: f1f2f3f4f5f6f7f8 @@ f1f2f3f4f5f6f7f8,  ==> f8f1f2f3f4f5f6f7
-	f9fafbfcfefdfeff @@ f9fafbfcfefdfeff,  ==> fcfd7dfe7f7eff7f
+vrld: 0102030405060708 @@ 0102030405060708  ==> 0203040506070801
+	090a0b0c0e0d0e0f @@ 090a0b0c0e0d0e0f  ==> 0586070687078485
+vrld: 0102030405060708 @@ f1f2f3f4f5f6f7f8  ==> 0801020304050607
+	090a0b0c0e0d0e0f @@ f9fafbfcfefdfeff  ==> 8485058607068707
+vrld: f1f2f3f4f5f6f7f8 @@ 0102030405060708  ==> f2f3f4f5f6f7f8f1
+	f9fafbfcfefdfeff @@ 090a0b0c0e0d0e0f  ==> 7dfe7f7eff7ffcfd
+vrld: f1f2f3f4f5f6f7f8 @@ f1f2f3f4f5f6f7f8  ==> f8f1f2f3f4f5f6f7
+	f9fafbfcfefdfeff @@ f9fafbfcfefdfeff  ==> fcfd7dfe7f7eff7f
 
-vsld: 0102030405060708 @@ 0102030405060708,  ==> 0203040506070800
-	090a0b0c0e0d0e0f @@ 090a0b0c0e0d0e0f,  ==> 0586070687078000
-vsld: 0102030405060708 @@ f1f2f3f4f5f6f7f8,  ==> 0800000000000000
-	090a0b0c0e0d0e0f @@ f9fafbfcfefdfeff,  ==> 8000000000000000
-vsld: f1f2f3f4f5f6f7f8 @@ 0102030405060708,  ==> f2f3f4f5f6f7f800
-	f9fafbfcfefdfeff @@ 090a0b0c0e0d0e0f,  ==> 7dfe7f7eff7f8000
-vsld: f1f2f3f4f5f6f7f8 @@ f1f2f3f4f5f6f7f8,  ==> f800000000000000
-	f9fafbfcfefdfeff @@ f9fafbfcfefdfeff,  ==> 8000000000000000
+vsld: 0102030405060708 @@ 0102030405060708  ==> 0203040506070800
+	090a0b0c0e0d0e0f @@ 090a0b0c0e0d0e0f  ==> 0586070687078000
+vsld: 0102030405060708 @@ f1f2f3f4f5f6f7f8  ==> 0800000000000000
+	090a0b0c0e0d0e0f @@ f9fafbfcfefdfeff  ==> 8000000000000000
+vsld: f1f2f3f4f5f6f7f8 @@ 0102030405060708  ==> f2f3f4f5f6f7f800
+	f9fafbfcfefdfeff @@ 090a0b0c0e0d0e0f  ==> 7dfe7f7eff7f8000
+vsld: f1f2f3f4f5f6f7f8 @@ f1f2f3f4f5f6f7f8  ==> f800000000000000
+	f9fafbfcfefdfeff @@ f9fafbfcfefdfeff  ==> 8000000000000000
 
-vsrad: 0102030405060708 @@ 0102030405060708,  ==> 0001020304050607
-	090a0b0c0e0d0e0f @@ 090a0b0c0e0d0e0f,  ==> 0000121416181c1a
-vsrad: 0102030405060708 @@ f1f2f3f4f5f6f7f8,  ==> 0000000000000001
-	090a0b0c0e0d0e0f @@ f9fafbfcfefdfeff,  ==> 0000000000000000
-vsrad: f1f2f3f4f5f6f7f8 @@ 0102030405060708,  ==> fff1f2f3f4f5f6f7
-	f9fafbfcfefdfeff @@ 090a0b0c0e0d0e0f,  ==> fffff3f5f7f9fdfb
-vsrad: f1f2f3f4f5f6f7f8 @@ f1f2f3f4f5f6f7f8,  ==> fffffffffffffff1
-	f9fafbfcfefdfeff @@ f9fafbfcfefdfeff,  ==> ffffffffffffffff
+vsrad: 0102030405060708 @@ 0102030405060708  ==> 0001020304050607
+	090a0b0c0e0d0e0f @@ 090a0b0c0e0d0e0f  ==> 0000121416181c1a
+vsrad: 0102030405060708 @@ f1f2f3f4f5f6f7f8  ==> 0000000000000001
+	090a0b0c0e0d0e0f @@ f9fafbfcfefdfeff  ==> 0000000000000000
+vsrad: f1f2f3f4f5f6f7f8 @@ 0102030405060708  ==> fff1f2f3f4f5f6f7
+	f9fafbfcfefdfeff @@ 090a0b0c0e0d0e0f  ==> fffff3f5f7f9fdfb
+vsrad: f1f2f3f4f5f6f7f8 @@ f1f2f3f4f5f6f7f8  ==> fffffffffffffff1
+	f9fafbfcfefdfeff @@ f9fafbfcfefdfeff  ==> ffffffffffffffff
 
-vsrd: 0102030405060708 @@ 0102030405060708,  ==> 0001020304050607
-	090a0b0c0e0d0e0f @@ 090a0b0c0e0d0e0f,  ==> 0000121416181c1a
-vsrd: 0102030405060708 @@ f1f2f3f4f5f6f7f8,  ==> 0000000000000001
-	090a0b0c0e0d0e0f @@ f9fafbfcfefdfeff,  ==> 0000000000000000
-vsrd: f1f2f3f4f5f6f7f8 @@ 0102030405060708,  ==> 00f1f2f3f4f5f6f7
-	f9fafbfcfefdfeff @@ 090a0b0c0e0d0e0f,  ==> 0001f3f5f7f9fdfb
-vsrd: f1f2f3f4f5f6f7f8 @@ f1f2f3f4f5f6f7f8,  ==> 00000000000000f1
-	f9fafbfcfefdfeff @@ f9fafbfcfefdfeff,  ==> 0000000000000001
+vsrd: 0102030405060708 @@ 0102030405060708  ==> 0001020304050607
+	090a0b0c0e0d0e0f @@ 090a0b0c0e0d0e0f  ==> 0000121416181c1a
+vsrd: 0102030405060708 @@ f1f2f3f4f5f6f7f8  ==> 0000000000000001
+	090a0b0c0e0d0e0f @@ f9fafbfcfefdfeff  ==> 0000000000000000
+vsrd: f1f2f3f4f5f6f7f8 @@ 0102030405060708  ==> 00f1f2f3f4f5f6f7
+	f9fafbfcfefdfeff @@ 090a0b0c0e0d0e0f  ==> 0001f3f5f7f9fdfb
+vsrd: f1f2f3f4f5f6f7f8 @@ f1f2f3f4f5f6f7f8  ==> 00000000000000f1
+	f9fafbfcfefdfeff @@ f9fafbfcfefdfeff  ==> 0000000000000001
 
 vpkudum: Inputs: 05060708 0e0d0e0f 05060708 0e0d0e0f
          Output: 05060708 0e0d0e0f 05060708 0e0d0e0f
@@ -149,6 +149,78 @@
 vpkudum: Inputs: f5f6f7f8 fefdfeff f5f6f7f8 fefdfeff
          Output: f5f6f7f8 fefdfeff f5f6f7f8 fefdfeff
 
+vpmsumd: 0102030405060708 @@ 0102030405060708  ==> 0040004000400040
+	090a0b0c0e0d0e0f @@ 090a0b0c0e0d0e0f  ==> 0045004500410015
+vpmsumd: 0102030405060708 @@ f1f2f3f4f5f6f7f8  ==> 07c007c006d00735
+	090a0b0c0e0d0e0f @@ f9fafbfcfefdfeff  ==> a260a260a374a2c5
+vpmsumd: f1f2f3f4f5f6f7f8 @@ 0102030405060708  ==> 07c007c006d00735
+	f9fafbfcfefdfeff @@ 090a0b0c0e0d0e0f  ==> a260a260a374a2c5
+vpmsumd: f1f2f3f4f5f6f7f8 @@ f1f2f3f4f5f6f7f8  ==> 0040004000400040
+	f9fafbfcfefdfeff @@ f9fafbfcfefdfeff  ==> 0045004500410015
+
+vnand: 0102030405060708 @@ 0102030405060708  ==> fefdfcfbfaf9f8f7
+	090a0b0c0e0d0e0f @@ 090a0b0c0e0d0e0f  ==> f6f5f4f3f1f2f1f0
+vnand: 0102030405060708 @@ f1f2f3f4f5f6f7f8  ==> fefdfcfbfaf9f8f7
+	090a0b0c0e0d0e0f @@ f9fafbfcfefdfeff  ==> f6f5f4f3f1f2f1f0
+vnand: f1f2f3f4f5f6f7f8 @@ 0102030405060708  ==> fefdfcfbfaf9f8f7
+	f9fafbfcfefdfeff @@ 090a0b0c0e0d0e0f  ==> f6f5f4f3f1f2f1f0
+vnand: f1f2f3f4f5f6f7f8 @@ f1f2f3f4f5f6f7f8  ==> 0e0d0c0b0a090807
+	f9fafbfcfefdfeff @@ f9fafbfcfefdfeff  ==> 0605040301020100
+
+vorc: 0102030405060708 @@ 0102030405060708  ==> ffffffffffffffff
+	090a0b0c0e0d0e0f @@ 090a0b0c0e0d0e0f  ==> ffffffffffffffff
+vorc: 0102030405060708 @@ f1f2f3f4f5f6f7f8  ==> 0f0f0f0f0f0f0f0f
+	090a0b0c0e0d0e0f @@ f9fafbfcfefdfeff  ==> 0f0f0f0f0f0f0f0f
+vorc: f1f2f3f4f5f6f7f8 @@ 0102030405060708  ==> ffffffffffffffff
+	f9fafbfcfefdfeff @@ 090a0b0c0e0d0e0f  ==> ffffffffffffffff
+vorc: f1f2f3f4f5f6f7f8 @@ f1f2f3f4f5f6f7f8  ==> ffffffffffffffff
+	f9fafbfcfefdfeff @@ f9fafbfcfefdfeff  ==> ffffffffffffffff
+
+veqv: 0102030405060708 @@ 0102030405060708  ==> ffffffffffffffff
+	090a0b0c0e0d0e0f @@ 090a0b0c0e0d0e0f  ==> ffffffffffffffff
+veqv: 0102030405060708 @@ f1f2f3f4f5f6f7f8  ==> 0f0f0f0f0f0f0f0f
+	090a0b0c0e0d0e0f @@ f9fafbfcfefdfeff  ==> 0f0f0f0f0f0f0f0f
+veqv: f1f2f3f4f5f6f7f8 @@ 0102030405060708  ==> 0f0f0f0f0f0f0f0f
+	f9fafbfcfefdfeff @@ 090a0b0c0e0d0e0f  ==> 0f0f0f0f0f0f0f0f
+veqv: f1f2f3f4f5f6f7f8 @@ f1f2f3f4f5f6f7f8  ==> ffffffffffffffff
+	f9fafbfcfefdfeff @@ f9fafbfcfefdfeff  ==> ffffffffffffffff
+
+vcipher: 0102030405060708 @@ 0102030405060708  ==> 15abdc2823b74b86
+	090a0b0c0e0d0e0f @@ 090a0b0c0e0d0e0f  ==> 22037bc3e1e25abc
+vcipher: 0102030405060708 @@ f1f2f3f4f5f6f7f8  ==> e55b2cd8d347bb76
+	090a0b0c0e0d0e0f @@ f9fafbfcfefdfeff  ==> d2f38b331112aa4c
+vcipher: f1f2f3f4f5f6f7f8 @@ 0102030405060708  ==> 8720c49da1d37bca
+	f9fafbfcfefdfeff @@ 090a0b0c0e0d0e0f  ==> 906d1f673bb72743
+vcipher: f1f2f3f4f5f6f7f8 @@ f1f2f3f4f5f6f7f8  ==> 77d0346d51238b3a
+	f9fafbfcfefdfeff @@ f9fafbfcfefdfeff  ==> 609def97cb47d7b3
+
+vcipherlast: 0102030405060708 @@ 0102030405060708  ==> 7d6d28726e61acfa
+	090a0b0c0e0d0e0f @@ 090a0b0c0e0d0e0f  ==> 08dd703ca57acbf1
+vcipherlast: 0102030405060708 @@ f1f2f3f4f5f6f7f8  ==> 8d9dd8829e915c0a
+	090a0b0c0e0d0e0f @@ f9fafbfcfefdfeff  ==> f82d80cc558a3b01
+vcipherlast: f1f2f3f4f5f6f7f8 @@ 0102030405060708  ==> a0400c12e32bbcb7
+	f9fafbfcfefdfeff @@ 090a0b0c0e0d0e0f  ==> 905e064db58466bf
+vcipherlast: f1f2f3f4f5f6f7f8 @@ f1f2f3f4f5f6f7f8  ==> 50b0fce213db4c47
+	f9fafbfcfefdfeff @@ f9fafbfcfefdfeff  ==> 60aef6bd4574964f
+
+vncipher: 0102030405060708 @@ 0102030405060708  ==> fe67ce881a80f569
+	090a0b0c0e0d0e0f @@ 090a0b0c0e0d0e0f  ==> 19db0b0605541639
+vncipher: 0102030405060708 @@ f1f2f3f4f5f6f7f8  ==> 0e973e78ea700599
+	090a0b0c0e0d0e0f @@ f9fafbfcfefdfeff  ==> e92bfbf6f5a4e6c9
+vncipher: f1f2f3f4f5f6f7f8 @@ 0102030405060708  ==> 8b10c2d5607a5569
+	f9fafbfcfefdfeff @@ 090a0b0c0e0d0e0f  ==> 581826de46277b9c
+vncipher: f1f2f3f4f5f6f7f8 @@ f1f2f3f4f5f6f7f8  ==> 7be03225908aa599
+	f9fafbfcfefdfeff @@ f9fafbfcfefdfeff  ==> a8e8d62eb6d78b6c
+
+vncipherlast: 0102030405060708 @@ 0102030405060708  ==> 08f19dbb336cd089
+	090a0b0c0e0d0e0f @@ 090a0b0c0e0d0e0f  ==> 49afdef7d9ae363f
+vncipherlast: 0102030405060708 @@ f1f2f3f4f5f6f7f8  ==> f8016d4bc39c2079
+	090a0b0c0e0d0e0f @@ f9fafbfcfefdfeff  ==> b95f2e07295ec6cf
+vncipherlast: f1f2f3f4f5f6f7f8 @@ 0102030405060708  ==> 2a2360e572020b5d
+	f9fafbfcfefdfeff @@ 090a0b0c0e0d0e0f  ==> 60dc7571021928b5
+vncipherlast: f1f2f3f4f5f6f7f8 @@ f1f2f3f4f5f6f7f8  ==> dad3901582f2fbad
+	f9fafbfcfefdfeff @@ f9fafbfcfefdfeff  ==> 902c8581f2e9d845
+
 vmulouw: 01020304 05060708 090a0b0c 0e0d0e0f ==> 00193c6aa4917040 00c56e34124ba4e1
 vmulouw: 01020304 05060708 090a0b0c 0e0d0e0f ==> 04d39d63184f87c0 0dfee4d8b9c6e2f1
 vmulouw: f1f2f3f4 f5f6f7f8 f9fafbfc fefdfeff ==> 04d39d63184f87c0 0dfee4d8b9c6e2f1
@@ -184,6 +256,21 @@
 vmrgow: f1f2f3f4 f5f6f7f8 f9fafbfc fefdfeff ==> f5f6f7f805060708 fefdfeff0e0d0e0f
 vmrgow: f1f2f3f4 f5f6f7f8 f9fafbfc fefdfeff ==> f5f6f7f8f5f6f7f8 fefdfefffefdfeff
 
+vpmsumb: 01020304 05060708 090a0b0c 0e0d0e0f ==> 0005001500050055 0005001500050001
+vpmsumb: 01020304 05060708 090a0b0c 0e0d0e0f ==> 011502c501150505 011502c5011500f1
+vpmsumb: f1f2f3f4 f5f6f7f8 f9fafbfc fefdfeff ==> 011502c501150505 011502c5011500f1
+vpmsumb: f1f2f3f4 f5f6f7f8 f9fafbfc fefdfeff ==> 0005001500050055 0005001500050001
+
+vpmsumh: 01020304 05060708 090a0b0c 0e0d0e0f ==> 0004001400040054 0004001400000004
+vpmsumh: 01020304 05060708 090a0b0c 0e0d0e0f ==> 01e7c23401e045f4 01e7c2340001e1e4
+vpmsumh: f1f2f3f4 f5f6f7f8 f9fafbfc fefdfeff ==> 01e7c23401e045f4 01e7c2340001e1e4
+vpmsumh: f1f2f3f4 f5f6f7f8 f9fafbfc fefdfeff ==> 0004001400040054 0004001400000004
+
+vpmsumw: 01020304 05060708 090a0b0c 0e0d0e0f ==> 0010001000100050 0015001500110005
+vpmsumw: 01020304 05060708 090a0b0c 0e0d0e0f ==> 03d003d784578410 02c5032720e32115
+vpmsumw: f1f2f3f4 f5f6f7f8 f9fafbfc fefdfeff ==> 03d003d784578410 02c5032720e32115
+vpmsumw: f1f2f3f4 f5f6f7f8 f9fafbfc fefdfeff ==> 0010001000100050 0015001500110005
+
 vpkudus: 000000007c118a2b, 00000000f1112345 @@ 000000007c118a2b, 00000000f1112345  ==> 7c118a2b f1112345 7c118a2b f1112345
 vpkudus: 000000007c118a2b, 00000000f1112345 @@ 01f2f3f4f5f6f7f8, f9fafbfcfefdfeff  ==> 7c118a2b f1112345 ffffffff ffffffff
 vpkudus: 01f2f3f4f5f6f7f8, f9fafbfcfefdfeff @@ 000000007c118a2b, 00000000f1112345  ==> ffffffff ffffffff 7c118a2b f1112345
@@ -205,4 +292,132 @@
 vupklsw: 01020304 05060708 090a0b0c 0e0d0e0f ==> 00000000090a0b0c 000000000e0d0e0f
 vupklsw: f1f2f3f4 f5f6f7f8 f9fafbfc fefdfeff ==> fffffffff9fafbfc fffffffffefdfeff
 
-All done. Tested 31 different instructions
+vpermxor: 0102030405060708 @@ 0102030405060708 @@ 0102030405060708  ==> 0302050407060908
+	090a0b0c0e0d0e0f @@ 090a0b0c0e0d0e0f @@ 090a0b0c0e0d0e0f  ==> 0b0a0d0f0f0c0f0e
+vpermxor: 0102030405060708 @@ 0102030405060708 @@ f1f2f3f4f5f6f7f8  ==> 0d0c0b0a09080706
+	090a0b0c0e0d0e0f @@ 090a0b0c0e0d0e0f @@ f9fafbfcfefdfeff  ==> 0504030101020100
+vpermxor: 0102030405060708 @@ f1f2f3f4f5f6f7f8 @@ 0102030405060708  ==> f3f2f5f4f7f6f9f8
+	090a0b0c0e0d0e0f @@ f9fafbfcfefdfeff @@ 090a0b0c0e0d0e0f  ==> fbfafdfffffcfffe
+vpermxor: 0102030405060708 @@ f1f2f3f4f5f6f7f8 @@ f1f2f3f4f5f6f7f8  ==> fdfcfbfaf9f8f7f6
+	090a0b0c0e0d0e0f @@ f9fafbfcfefdfeff @@ f9fafbfcfefdfeff  ==> f5f4f3f1f1f2f1f0
+vpermxor: f1f2f3f4f5f6f7f8 @@ 0102030405060708 @@ 0102030405060708  ==> f3f2f5f4f7f6f9f8
+	f9fafbfcfefdfeff @@ 090a0b0c0e0d0e0f @@ 090a0b0c0e0d0e0f  ==> fbfafdfffffcfffe
+vpermxor: f1f2f3f4f5f6f7f8 @@ 0102030405060708 @@ f1f2f3f4f5f6f7f8  ==> fdfcfbfaf9f8f7f6
+	f9fafbfcfefdfeff @@ 090a0b0c0e0d0e0f @@ f9fafbfcfefdfeff  ==> f5f4f3f1f1f2f1f0
+vpermxor: f1f2f3f4f5f6f7f8 @@ f1f2f3f4f5f6f7f8 @@ 0102030405060708  ==> 0302050407060908
+	f9fafbfcfefdfeff @@ f9fafbfcfefdfeff @@ 090a0b0c0e0d0e0f  ==> 0b0a0d0f0f0c0f0e
+vpermxor: f1f2f3f4f5f6f7f8 @@ f1f2f3f4f5f6f7f8 @@ f1f2f3f4f5f6f7f8  ==> 0d0c0b0a09080706
+	f9fafbfcfefdfeff @@ f9fafbfcfefdfeff @@ f9fafbfcfefdfeff  ==> 0504030101020100
+
+vclzb: 0102030405060708 @@ 090a0b0c0e0d0e0f  ==> 07060605050505040404040404040404
+vclzb: f1f2f3f4f5f6f7f8 @@ f9fafbfcfefdfeff  ==> 00000000000000000000000000000000
+
+vclzw: 0102030405060708 @@ 090a0b0c0e0d0e0f  ==> 00000007000000050000000400000004
+vclzw: f1f2f3f4f5f6f7f8 @@ f9fafbfcfefdfeff  ==> 00000000000000000000000000000000
+
+vclzh: 0102030405060708 @@ 090a0b0c0e0d0e0f  ==> 00070006000500050004000400040004
+vclzh: f1f2f3f4f5f6f7f8 @@ f9fafbfcfefdfeff  ==> 00000000000000000000000000000000
+
+vclzd: 0102030405060708 @@ 090a0b0c0e0d0e0f  ==> 00000000000000070000000000000004
+vclzd: f1f2f3f4f5f6f7f8 @@ f9fafbfcfefdfeff  ==> 00000000000000000000000000000000
+
+vpopcntb: 0102030405060708 @@ 090a0b0c0e0d0e0f  ==> 01010201020203010202030203030304
+vpopcntb: f1f2f3f4f5f6f7f8 @@ f9fafbfcfefdfeff  ==> 05050605060607050606070607070708
+
+vpopcnth: 0102030405060708 @@ 090a0b0c0e0d0e0f  ==> 00020003000400040004000500060007
+vpopcnth: f1f2f3f4f5f6f7f8 @@ f9fafbfcfefdfeff  ==> 000a000b000c000c000c000d000e000f
+
+vpopcntw: 0102030405060708 @@ 090a0b0c0e0d0e0f  ==> 0000000500000008000000090000000d
+vpopcntw: f1f2f3f4f5f6f7f8 @@ f9fafbfcfefdfeff  ==> 0000001500000018000000190000001d
+
+vpopcntd: 0102030405060708 @@ 090a0b0c0e0d0e0f  ==> 000000000000000d0000000000000016
+vpopcntd: f1f2f3f4f5f6f7f8 @@ f9fafbfcfefdfeff  ==> 000000000000002d0000000000000036
+
+vsbox: 0102030405060708 @@ 090a0b0c0e0d0e0f  ==> 7c777bf26b6fc53001672bfeabd7ab76
+vsbox: f1f2f3f4f5f6f7f8 @@ f9fafbfcfefdfeff  ==> a1890dbfe6426841992d0fb0bb54bb16
+
+vshasigmad: 0102030405060708 @@ 090a0b0c0e0d0e0f  ==> 088207870e8c098d || 8b9e1b9b13149015
+vshasigmad: 0102030405060708 @@ 090a0b0c0e0d0e0f  ==> c8f5100c7844a0fc || e9b5916d0131c581
+vshasigmad: 0102030405060708 @@ 090a0b0c0e0d0e0f  ==> 592bfd4c0062b487 || fb4fb96f4cf02615
+vshasigmad: 0102030405060708 @@ 090a0b0c0e0d0e0f  ==> 1fe0874b08d19458 || fdb8e0eda977beb2
+vshasigmad: f1f2f3f4f5f6f7f8 @@ f9fafbfcfefdfeff  ==> 81eb6eee67e560e4 || 02f772f27a7df97c
+vshasigmad: f1f2f3f4f5f6f7f8 @@ f9fafbfcfefdfeff  ==> 52af4a56221efaa6 || 73efcb375b6b9fdb
+vshasigmad: f1f2f3f4f5f6f7f8 @@ f9fafbfcfefdfeff  ==> 8bf92f9ed2b06655 || 299d6bbd9e22f4c7
+vshasigmad: f1f2f3f4f5f6f7f8 @@ f9fafbfcfefdfeff  ==> 986700cc8f5613df || 7a3f676a2ef03935
+
+vshasigmaw: 0102030405060708 @@ 090a0b0c0e0d0e0f  ==> 88e344269168cdae || 9bf057355c5e785e
+vshasigmaw: 0102030405060708 @@ 090a0b0c0e0d0e0f  ==> 41e2c021c36443a2 || 44e5c72626c5e584
+vshasigmaw: 0102030405060708 @@ 090a0b0c0e0d0e0f  ==> 106c98d5211d89e6 || 720efab787c30fd3
+vshasigmaw: 0102030405060708 @@ 090a0b0c0e0d0e0f  ==> f185aa4c42173cde || d4a08f69fb5ef21e
+vshasigmaw: f1f2f3f4f5f6f7f8 @@ f9fafbfcfefdfeff  ==> 4b2087e552ab0e6d || 583394f69f9dbb9d
+vshasigmaw: f1f2f3f4f5f6f7f8 @@ f9fafbfcfefdfeff  ==> 27b89a7ba53e19f8 || 22bf9d7c409fbfde
+vshasigmaw: f1f2f3f4f5f6f7f8 @@ f9fafbfcfefdfeff  ==> 6814e0ad5965f19e || 0a7682cfffbb77ab
+vshasigmaw: f1f2f3f4f5f6f7f8 @@ f9fafbfcfefdfeff  ==> 54200fe9e7b2997b || 71052acc5efb57bb
+
+bcdadd.: 8045090189321003 || 001122334556677d @@ 8045090189321003 || 001122334556677d ==> 6090180378642006 || 002244669113354d
+bcdadd.: 8045090189321003 || 001122334556677d @@ 8045090189321003 || 001122334556677d ==> 6090180378642006 || 002244669113354d
+bcdadd.: 8045090189321003 || 001122334556677d @@ 0000107600000001 || 319293945142031a ==> 8044982589321001 || 681828389414646d
+bcdadd.: 8045090189321003 || 001122334556677d @@ 0000107600000001 || 319293945142031a ==> 8044982589321001 || 681828389414646d
+bcdadd.: 8045090189321003 || 001122334556677d @@ 0000000000000000 || 000000000000000a ==> 8045090189321003 || 001122334556677d
+bcdadd.: 8045090189321003 || 001122334556677d @@ 0000000000000000 || 000000000000000a ==> 8045090189321003 || 001122334556677d
+bcdadd.: 8045090189321003 || 001122334556677d @@ 0000000000000000 || 0000000000000000 ==> 8045090189321003 || 001122334556677d
+bcdadd.: 8045090189321003 || 001122334556677d @@ 0000000000000000 || 0000000000000000 ==> 8045090189321003 || 001122334556677d
+bcdadd.: 0000107600000001 || 319293945142031a @@ 8045090189321003 || 001122334556677d ==> 8044982589321001 || 681828389414646d
+bcdadd.: 0000107600000001 || 319293945142031a @@ 8045090189321003 || 001122334556677d ==> 8044982589321001 || 681828389414646d
+bcdadd.: 0000107600000001 || 319293945142031a @@ 0000107600000001 || 319293945142031a ==> 0000215200000002 || 638587890284062c
+bcdadd.: 0000107600000001 || 319293945142031a @@ 0000107600000001 || 319293945142031a ==> 0000215200000002 || 638587890284062f
+bcdadd.: 0000107600000001 || 319293945142031a @@ 0000000000000000 || 000000000000000a ==> 0000107600000001 || 319293945142031c
+bcdadd.: 0000107600000001 || 319293945142031a @@ 0000000000000000 || 000000000000000a ==> 0000107600000001 || 319293945142031f
+bcdadd.: 0000107600000001 || 319293945142031a @@ 0000000000000000 || 0000000000000000 ==> 0000107600000001 || 319293945142031c
+bcdadd.: 0000107600000001 || 319293945142031a @@ 0000000000000000 || 0000000000000000 ==> 0000107600000001 || 319293945142031f
+bcdadd.: 0000000000000000 || 000000000000000a @@ 8045090189321003 || 001122334556677d ==> 8045090189321003 || 001122334556677d
+bcdadd.: 0000000000000000 || 000000000000000a @@ 8045090189321003 || 001122334556677d ==> 8045090189321003 || 001122334556677d
+bcdadd.: 0000000000000000 || 000000000000000a @@ 0000107600000001 || 319293945142031a ==> 0000107600000001 || 319293945142031c
+bcdadd.: 0000000000000000 || 000000000000000a @@ 0000107600000001 || 319293945142031a ==> 0000107600000001 || 319293945142031f
+bcdadd.: 0000000000000000 || 000000000000000a @@ 0000000000000000 || 000000000000000a ==> 0000000000000000 || 000000000000000c
+bcdadd.: 0000000000000000 || 000000000000000a @@ 0000000000000000 || 000000000000000a ==> 0000000000000000 || 000000000000000f
+bcdadd.: 0000000000000000 || 000000000000000a @@ 0000000000000000 || 0000000000000000 ==> 0000000000000000 || 000000000000000c
+bcdadd.: 0000000000000000 || 000000000000000a @@ 0000000000000000 || 0000000000000000 ==> 0000000000000000 || 000000000000000f
+bcdadd.: 0000000000000000 || 0000000000000000 @@ 8045090189321003 || 001122334556677d ==> 8045090189321003 || 001122334556677d
+bcdadd.: 0000000000000000 || 0000000000000000 @@ 8045090189321003 || 001122334556677d ==> 8045090189321003 || 001122334556677d
+bcdadd.: 0000000000000000 || 0000000000000000 @@ 0000107600000001 || 319293945142031a ==> 0000107600000001 || 319293945142031c
+bcdadd.: 0000000000000000 || 0000000000000000 @@ 0000107600000001 || 319293945142031a ==> 0000107600000001 || 319293945142031f
+bcdadd.: 0000000000000000 || 0000000000000000 @@ 0000000000000000 || 000000000000000a ==> 0000000000000000 || 000000000000000c
+bcdadd.: 0000000000000000 || 0000000000000000 @@ 0000000000000000 || 000000000000000a ==> 0000000000000000 || 000000000000000f
+bcdadd.: 0000000000000000 || 0000000000000000 @@ 0000000000000000 || 0000000000000000 ==> 0000000000000000 || 000000000000000c
+bcdadd.: 0000000000000000 || 0000000000000000 @@ 0000000000000000 || 0000000000000000 ==> 0000000000000000 || 000000000000000f
+
+bcdsub.: 8045090189321003 || 001122334556677d @@ 8045090189321003 || 001122334556677d ==> 0000000000000000 || 000000000000000c
+bcdsub.: 8045090189321003 || 001122334556677d @@ 8045090189321003 || 001122334556677d ==> 0000000000000000 || 000000000000000f
+bcdsub.: 8045090189321003 || 001122334556677d @@ 0000107600000001 || 319293945142031a ==> 8045197789321004 || 320416279698708d
+bcdsub.: 8045090189321003 || 001122334556677d @@ 0000107600000001 || 319293945142031a ==> 8045197789321004 || 320416279698708d
+bcdsub.: 8045090189321003 || 001122334556677d @@ 0000000000000000 || 000000000000000a ==> 8045090189321003 || 001122334556677d
+bcdsub.: 8045090189321003 || 001122334556677d @@ 0000000000000000 || 000000000000000a ==> 8045090189321003 || 001122334556677d
+bcdsub.: 8045090189321003 || 001122334556677d @@ 0000000000000000 || 0000000000000000 ==> 8045090189321003 || 001122334556677d
+bcdsub.: 8045090189321003 || 001122334556677d @@ 0000000000000000 || 0000000000000000 ==> 8045090189321003 || 001122334556677d
+bcdsub.: 0000107600000001 || 319293945142031a @@ 8045090189321003 || 001122334556677d ==> 8045197789321004 || 320416279698708c
+bcdsub.: 0000107600000001 || 319293945142031a @@ 8045090189321003 || 001122334556677d ==> 8045197789321004 || 320416279698708f
+bcdsub.: 0000107600000001 || 319293945142031a @@ 0000107600000001 || 319293945142031a ==> 0000000000000000 || 000000000000000c
+bcdsub.: 0000107600000001 || 319293945142031a @@ 0000107600000001 || 319293945142031a ==> 0000000000000000 || 000000000000000f
+bcdsub.: 0000107600000001 || 319293945142031a @@ 0000000000000000 || 000000000000000a ==> 0000107600000001 || 319293945142031c
+bcdsub.: 0000107600000001 || 319293945142031a @@ 0000000000000000 || 000000000000000a ==> 0000107600000001 || 319293945142031f
+bcdsub.: 0000107600000001 || 319293945142031a @@ 0000000000000000 || 0000000000000000 ==> 0000107600000001 || 319293945142031c
+bcdsub.: 0000107600000001 || 319293945142031a @@ 0000000000000000 || 0000000000000000 ==> 0000107600000001 || 319293945142031f
+bcdsub.: 0000000000000000 || 000000000000000a @@ 8045090189321003 || 001122334556677d ==> 8045090189321003 || 001122334556677c
+bcdsub.: 0000000000000000 || 000000000000000a @@ 8045090189321003 || 001122334556677d ==> 8045090189321003 || 001122334556677f
+bcdsub.: 0000000000000000 || 000000000000000a @@ 0000107600000001 || 319293945142031a ==> 0000107600000001 || 319293945142031d
+bcdsub.: 0000000000000000 || 000000000000000a @@ 0000107600000001 || 319293945142031a ==> 0000107600000001 || 319293945142031d
+bcdsub.: 0000000000000000 || 000000000000000a @@ 0000000000000000 || 000000000000000a ==> 0000000000000000 || 000000000000000c
+bcdsub.: 0000000000000000 || 000000000000000a @@ 0000000000000000 || 000000000000000a ==> 0000000000000000 || 000000000000000f
+bcdsub.: 0000000000000000 || 000000000000000a @@ 0000000000000000 || 0000000000000000 ==> 0000000000000000 || 000000000000000c
+bcdsub.: 0000000000000000 || 000000000000000a @@ 0000000000000000 || 0000000000000000 ==> 0000000000000000 || 000000000000000f
+bcdsub.: 0000000000000000 || 0000000000000000 @@ 8045090189321003 || 001122334556677d ==> 8045090189321003 || 001122334556677c
+bcdsub.: 0000000000000000 || 0000000000000000 @@ 8045090189321003 || 001122334556677d ==> 8045090189321003 || 001122334556677f
+bcdsub.: 0000000000000000 || 0000000000000000 @@ 0000107600000001 || 319293945142031a ==> 0000107600000001 || 319293945142031d
+bcdsub.: 0000000000000000 || 0000000000000000 @@ 0000107600000001 || 319293945142031a ==> 0000107600000001 || 319293945142031d
+bcdsub.: 0000000000000000 || 0000000000000000 @@ 0000000000000000 || 000000000000000a ==> 0000000000000000 || 000000000000000c
+bcdsub.: 0000000000000000 || 0000000000000000 @@ 0000000000000000 || 000000000000000a ==> 0000000000000000 || 000000000000000f
+bcdsub.: 0000000000000000 || 0000000000000000 @@ 0000000000000000 || 0000000000000000 ==> 0000000000000000 || 000000000000000c
+bcdsub.: 0000000000000000 || 0000000000000000 @@ 0000000000000000 || 0000000000000000 ==> 0000000000000000 || 000000000000000f
+
+All done. Tested 56 different instructions
diff --git a/none/tests/ppc64/jm_vec_isa_2_07.stdout.exp b/none/tests/ppc64/jm_vec_isa_2_07.stdout.exp
index 96f2318..2623b3e 100644
--- a/none/tests/ppc64/jm_vec_isa_2_07.stdout.exp
+++ b/none/tests/ppc64/jm_vec_isa_2_07.stdout.exp
@@ -23,122 +23,122 @@
 mtfprwa: f5f6f7f8 => fffffffff5f6f7f8
 mtfprwa: fefdfeff => fffffffffefdfeff
 
-vaddudm: 0102030405060708 @@ 0102030405060708,  ==> 020406080a0c0e10
-	090a0b0c0e0d0e0f @@ 090a0b0c0e0d0e0f,  ==> 121416181c1a1c1e
-vaddudm: 0102030405060708 @@ f1f2f3f4f5f6f7f8,  ==> f2f4f6f8fafcff00
-	090a0b0c0e0d0e0f @@ f9fafbfcfefdfeff,  ==> 030507090d0b0d0e
-vaddudm: f1f2f3f4f5f6f7f8 @@ 0102030405060708,  ==> f2f4f6f8fafcff00
-	f9fafbfcfefdfeff @@ 090a0b0c0e0d0e0f,  ==> 030507090d0b0d0e
-vaddudm: f1f2f3f4f5f6f7f8 @@ f1f2f3f4f5f6f7f8,  ==> e3e5e7e9ebedeff0
-	f9fafbfcfefdfeff @@ f9fafbfcfefdfeff,  ==> f3f5f7f9fdfbfdfe
+vaddudm: 0102030405060708 @@ 0102030405060708  ==> 020406080a0c0e10
+	090a0b0c0e0d0e0f @@ 090a0b0c0e0d0e0f  ==> 121416181c1a1c1e
+vaddudm: 0102030405060708 @@ f1f2f3f4f5f6f7f8  ==> f2f4f6f8fafcff00
+	090a0b0c0e0d0e0f @@ f9fafbfcfefdfeff  ==> 030507090d0b0d0e
+vaddudm: f1f2f3f4f5f6f7f8 @@ 0102030405060708  ==> f2f4f6f8fafcff00
+	f9fafbfcfefdfeff @@ 090a0b0c0e0d0e0f  ==> 030507090d0b0d0e
+vaddudm: f1f2f3f4f5f6f7f8 @@ f1f2f3f4f5f6f7f8  ==> e3e5e7e9ebedeff0
+	f9fafbfcfefdfeff @@ f9fafbfcfefdfeff  ==> f3f5f7f9fdfbfdfe
 
-vsubudm: 0102030405060708 @@ 0102030405060708,  ==> 0000000000000000
-	090a0b0c0e0d0e0f @@ 090a0b0c0e0d0e0f,  ==> 0000000000000000
-vsubudm: 0102030405060708 @@ f1f2f3f4f5f6f7f8,  ==> 0f0f0f0f0f0f0f10
-	090a0b0c0e0d0e0f @@ f9fafbfcfefdfeff,  ==> 0f0f0f0f0f0f0f10
-vsubudm: f1f2f3f4f5f6f7f8 @@ 0102030405060708,  ==> f0f0f0f0f0f0f0f0
-	f9fafbfcfefdfeff @@ 090a0b0c0e0d0e0f,  ==> f0f0f0f0f0f0f0f0
-vsubudm: f1f2f3f4f5f6f7f8 @@ f1f2f3f4f5f6f7f8,  ==> 0000000000000000
-	f9fafbfcfefdfeff @@ f9fafbfcfefdfeff,  ==> 0000000000000000
+vsubudm: 0102030405060708 @@ 0102030405060708  ==> 0000000000000000
+	090a0b0c0e0d0e0f @@ 090a0b0c0e0d0e0f  ==> 0000000000000000
+vsubudm: 0102030405060708 @@ f1f2f3f4f5f6f7f8  ==> 0f0f0f0f0f0f0f10
+	090a0b0c0e0d0e0f @@ f9fafbfcfefdfeff  ==> 0f0f0f0f0f0f0f10
+vsubudm: f1f2f3f4f5f6f7f8 @@ 0102030405060708  ==> f0f0f0f0f0f0f0f0
+	f9fafbfcfefdfeff @@ 090a0b0c0e0d0e0f  ==> f0f0f0f0f0f0f0f0
+vsubudm: f1f2f3f4f5f6f7f8 @@ f1f2f3f4f5f6f7f8  ==> 0000000000000000
+	f9fafbfcfefdfeff @@ f9fafbfcfefdfeff  ==> 0000000000000000
 
-vmaxud: 0102030405060708 @@ 0102030405060708,  ==> 0102030405060708
-	090a0b0c0e0d0e0f @@ 090a0b0c0e0d0e0f,  ==> 090a0b0c0e0d0e0f
-vmaxud: 0102030405060708 @@ f1f2f3f4f5f6f7f8,  ==> f1f2f3f4f5f6f7f8
-	090a0b0c0e0d0e0f @@ f9fafbfcfefdfeff,  ==> f9fafbfcfefdfeff
-vmaxud: f1f2f3f4f5f6f7f8 @@ 0102030405060708,  ==> f1f2f3f4f5f6f7f8
-	f9fafbfcfefdfeff @@ 090a0b0c0e0d0e0f,  ==> f9fafbfcfefdfeff
-vmaxud: f1f2f3f4f5f6f7f8 @@ f1f2f3f4f5f6f7f8,  ==> f1f2f3f4f5f6f7f8
-	f9fafbfcfefdfeff @@ f9fafbfcfefdfeff,  ==> f9fafbfcfefdfeff
+vmaxud: 0102030405060708 @@ 0102030405060708  ==> 0102030405060708
+	090a0b0c0e0d0e0f @@ 090a0b0c0e0d0e0f  ==> 090a0b0c0e0d0e0f
+vmaxud: 0102030405060708 @@ f1f2f3f4f5f6f7f8  ==> f1f2f3f4f5f6f7f8
+	090a0b0c0e0d0e0f @@ f9fafbfcfefdfeff  ==> f9fafbfcfefdfeff
+vmaxud: f1f2f3f4f5f6f7f8 @@ 0102030405060708  ==> f1f2f3f4f5f6f7f8
+	f9fafbfcfefdfeff @@ 090a0b0c0e0d0e0f  ==> f9fafbfcfefdfeff
+vmaxud: f1f2f3f4f5f6f7f8 @@ f1f2f3f4f5f6f7f8  ==> f1f2f3f4f5f6f7f8
+	f9fafbfcfefdfeff @@ f9fafbfcfefdfeff  ==> f9fafbfcfefdfeff
 
-vmaxsd: 0102030405060708 @@ 0102030405060708,  ==> 0102030405060708
-	090a0b0c0e0d0e0f @@ 090a0b0c0e0d0e0f,  ==> 090a0b0c0e0d0e0f
-vmaxsd: 0102030405060708 @@ f1f2f3f4f5f6f7f8,  ==> 0102030405060708
-	090a0b0c0e0d0e0f @@ f9fafbfcfefdfeff,  ==> 090a0b0c0e0d0e0f
-vmaxsd: f1f2f3f4f5f6f7f8 @@ 0102030405060708,  ==> 0102030405060708
-	f9fafbfcfefdfeff @@ 090a0b0c0e0d0e0f,  ==> 090a0b0c0e0d0e0f
-vmaxsd: f1f2f3f4f5f6f7f8 @@ f1f2f3f4f5f6f7f8,  ==> f1f2f3f4f5f6f7f8
-	f9fafbfcfefdfeff @@ f9fafbfcfefdfeff,  ==> f9fafbfcfefdfeff
+vmaxsd: 0102030405060708 @@ 0102030405060708  ==> 0102030405060708
+	090a0b0c0e0d0e0f @@ 090a0b0c0e0d0e0f  ==> 090a0b0c0e0d0e0f
+vmaxsd: 0102030405060708 @@ f1f2f3f4f5f6f7f8  ==> 0102030405060708
+	090a0b0c0e0d0e0f @@ f9fafbfcfefdfeff  ==> 090a0b0c0e0d0e0f
+vmaxsd: f1f2f3f4f5f6f7f8 @@ 0102030405060708  ==> 0102030405060708
+	f9fafbfcfefdfeff @@ 090a0b0c0e0d0e0f  ==> 090a0b0c0e0d0e0f
+vmaxsd: f1f2f3f4f5f6f7f8 @@ f1f2f3f4f5f6f7f8  ==> f1f2f3f4f5f6f7f8
+	f9fafbfcfefdfeff @@ f9fafbfcfefdfeff  ==> f9fafbfcfefdfeff
 
-vminud: 0102030405060708 @@ 0102030405060708,  ==> 0102030405060708
-	090a0b0c0e0d0e0f @@ 090a0b0c0e0d0e0f,  ==> 090a0b0c0e0d0e0f
-vminud: 0102030405060708 @@ f1f2f3f4f5f6f7f8,  ==> 0102030405060708
-	090a0b0c0e0d0e0f @@ f9fafbfcfefdfeff,  ==> 090a0b0c0e0d0e0f
-vminud: f1f2f3f4f5f6f7f8 @@ 0102030405060708,  ==> 0102030405060708
-	f9fafbfcfefdfeff @@ 090a0b0c0e0d0e0f,  ==> 090a0b0c0e0d0e0f
-vminud: f1f2f3f4f5f6f7f8 @@ f1f2f3f4f5f6f7f8,  ==> f1f2f3f4f5f6f7f8
-	f9fafbfcfefdfeff @@ f9fafbfcfefdfeff,  ==> f9fafbfcfefdfeff
+vminud: 0102030405060708 @@ 0102030405060708  ==> 0102030405060708
+	090a0b0c0e0d0e0f @@ 090a0b0c0e0d0e0f  ==> 090a0b0c0e0d0e0f
+vminud: 0102030405060708 @@ f1f2f3f4f5f6f7f8  ==> 0102030405060708
+	090a0b0c0e0d0e0f @@ f9fafbfcfefdfeff  ==> 090a0b0c0e0d0e0f
+vminud: f1f2f3f4f5f6f7f8 @@ 0102030405060708  ==> 0102030405060708
+	f9fafbfcfefdfeff @@ 090a0b0c0e0d0e0f  ==> 090a0b0c0e0d0e0f
+vminud: f1f2f3f4f5f6f7f8 @@ f1f2f3f4f5f6f7f8  ==> f1f2f3f4f5f6f7f8
+	f9fafbfcfefdfeff @@ f9fafbfcfefdfeff  ==> f9fafbfcfefdfeff
 
-vminsd: 0102030405060708 @@ 0102030405060708,  ==> 0102030405060708
-	090a0b0c0e0d0e0f @@ 090a0b0c0e0d0e0f,  ==> 090a0b0c0e0d0e0f
-vminsd: 0102030405060708 @@ f1f2f3f4f5f6f7f8,  ==> f1f2f3f4f5f6f7f8
-	090a0b0c0e0d0e0f @@ f9fafbfcfefdfeff,  ==> f9fafbfcfefdfeff
-vminsd: f1f2f3f4f5f6f7f8 @@ 0102030405060708,  ==> f1f2f3f4f5f6f7f8
-	f9fafbfcfefdfeff @@ 090a0b0c0e0d0e0f,  ==> f9fafbfcfefdfeff
-vminsd: f1f2f3f4f5f6f7f8 @@ f1f2f3f4f5f6f7f8,  ==> f1f2f3f4f5f6f7f8
-	f9fafbfcfefdfeff @@ f9fafbfcfefdfeff,  ==> f9fafbfcfefdfeff
+vminsd: 0102030405060708 @@ 0102030405060708  ==> 0102030405060708
+	090a0b0c0e0d0e0f @@ 090a0b0c0e0d0e0f  ==> 090a0b0c0e0d0e0f
+vminsd: 0102030405060708 @@ f1f2f3f4f5f6f7f8  ==> f1f2f3f4f5f6f7f8
+	090a0b0c0e0d0e0f @@ f9fafbfcfefdfeff  ==> f9fafbfcfefdfeff
+vminsd: f1f2f3f4f5f6f7f8 @@ 0102030405060708  ==> f1f2f3f4f5f6f7f8
+	f9fafbfcfefdfeff @@ 090a0b0c0e0d0e0f  ==> f9fafbfcfefdfeff
+vminsd: f1f2f3f4f5f6f7f8 @@ f1f2f3f4f5f6f7f8  ==> f1f2f3f4f5f6f7f8
+	f9fafbfcfefdfeff @@ f9fafbfcfefdfeff  ==> f9fafbfcfefdfeff
 
-vcmpequd: 0102030405060708 @@ 0102030405060708,  ==> ffffffffffffffff
-	090a0b0c0e0d0e0f @@ 090a0b0c0e0d0e0f,  ==> ffffffffffffffff
-vcmpequd: 0102030405060708 @@ f1f2f3f4f5f6f7f8,  ==> 0000000000000000
-	090a0b0c0e0d0e0f @@ f9fafbfcfefdfeff,  ==> 0000000000000000
-vcmpequd: f1f2f3f4f5f6f7f8 @@ 0102030405060708,  ==> 0000000000000000
-	f9fafbfcfefdfeff @@ 090a0b0c0e0d0e0f,  ==> 0000000000000000
-vcmpequd: f1f2f3f4f5f6f7f8 @@ f1f2f3f4f5f6f7f8,  ==> ffffffffffffffff
-	f9fafbfcfefdfeff @@ f9fafbfcfefdfeff,  ==> ffffffffffffffff
+vcmpequd: 0102030405060708 @@ 0102030405060708  ==> ffffffffffffffff
+	090a0b0c0e0d0e0f @@ 090a0b0c0e0d0e0f  ==> ffffffffffffffff
+vcmpequd: 0102030405060708 @@ f1f2f3f4f5f6f7f8  ==> 0000000000000000
+	090a0b0c0e0d0e0f @@ f9fafbfcfefdfeff  ==> 0000000000000000
+vcmpequd: f1f2f3f4f5f6f7f8 @@ 0102030405060708  ==> 0000000000000000
+	f9fafbfcfefdfeff @@ 090a0b0c0e0d0e0f  ==> 0000000000000000
+vcmpequd: f1f2f3f4f5f6f7f8 @@ f1f2f3f4f5f6f7f8  ==> ffffffffffffffff
+	f9fafbfcfefdfeff @@ f9fafbfcfefdfeff  ==> ffffffffffffffff
 
-vcmpgtud: 0102030405060708 @@ 0102030405060708,  ==> 0000000000000000
-	090a0b0c0e0d0e0f @@ 090a0b0c0e0d0e0f,  ==> 0000000000000000
-vcmpgtud: 0102030405060708 @@ f1f2f3f4f5f6f7f8,  ==> 0000000000000000
-	090a0b0c0e0d0e0f @@ f9fafbfcfefdfeff,  ==> 0000000000000000
-vcmpgtud: f1f2f3f4f5f6f7f8 @@ 0102030405060708,  ==> ffffffffffffffff
-	f9fafbfcfefdfeff @@ 090a0b0c0e0d0e0f,  ==> ffffffffffffffff
-vcmpgtud: f1f2f3f4f5f6f7f8 @@ f1f2f3f4f5f6f7f8,  ==> 0000000000000000
-	f9fafbfcfefdfeff @@ f9fafbfcfefdfeff,  ==> 0000000000000000
+vcmpgtud: 0102030405060708 @@ 0102030405060708  ==> 0000000000000000
+	090a0b0c0e0d0e0f @@ 090a0b0c0e0d0e0f  ==> 0000000000000000
+vcmpgtud: 0102030405060708 @@ f1f2f3f4f5f6f7f8  ==> 0000000000000000
+	090a0b0c0e0d0e0f @@ f9fafbfcfefdfeff  ==> 0000000000000000
+vcmpgtud: f1f2f3f4f5f6f7f8 @@ 0102030405060708  ==> ffffffffffffffff
+	f9fafbfcfefdfeff @@ 090a0b0c0e0d0e0f  ==> ffffffffffffffff
+vcmpgtud: f1f2f3f4f5f6f7f8 @@ f1f2f3f4f5f6f7f8  ==> 0000000000000000
+	f9fafbfcfefdfeff @@ f9fafbfcfefdfeff  ==> 0000000000000000
 
-vcmpgtsd: 0102030405060708 @@ 0102030405060708,  ==> 0000000000000000
-	090a0b0c0e0d0e0f @@ 090a0b0c0e0d0e0f,  ==> 0000000000000000
-vcmpgtsd: 0102030405060708 @@ f1f2f3f4f5f6f7f8,  ==> ffffffffffffffff
-	090a0b0c0e0d0e0f @@ f9fafbfcfefdfeff,  ==> ffffffffffffffff
-vcmpgtsd: f1f2f3f4f5f6f7f8 @@ 0102030405060708,  ==> 0000000000000000
-	f9fafbfcfefdfeff @@ 090a0b0c0e0d0e0f,  ==> 0000000000000000
-vcmpgtsd: f1f2f3f4f5f6f7f8 @@ f1f2f3f4f5f6f7f8,  ==> 0000000000000000
-	f9fafbfcfefdfeff @@ f9fafbfcfefdfeff,  ==> 0000000000000000
+vcmpgtsd: 0102030405060708 @@ 0102030405060708  ==> 0000000000000000
+	090a0b0c0e0d0e0f @@ 090a0b0c0e0d0e0f  ==> 0000000000000000
+vcmpgtsd: 0102030405060708 @@ f1f2f3f4f5f6f7f8  ==> ffffffffffffffff
+	090a0b0c0e0d0e0f @@ f9fafbfcfefdfeff  ==> ffffffffffffffff
+vcmpgtsd: f1f2f3f4f5f6f7f8 @@ 0102030405060708  ==> 0000000000000000
+	f9fafbfcfefdfeff @@ 090a0b0c0e0d0e0f  ==> 0000000000000000
+vcmpgtsd: f1f2f3f4f5f6f7f8 @@ f1f2f3f4f5f6f7f8  ==> 0000000000000000
+	f9fafbfcfefdfeff @@ f9fafbfcfefdfeff  ==> 0000000000000000
 
-vrld: 0102030405060708 @@ 0102030405060708,  ==> 0203040506070801
-	090a0b0c0e0d0e0f @@ 090a0b0c0e0d0e0f,  ==> 0586070687078485
-vrld: 0102030405060708 @@ f1f2f3f4f5f6f7f8,  ==> 0801020304050607
-	090a0b0c0e0d0e0f @@ f9fafbfcfefdfeff,  ==> 8485058607068707
-vrld: f1f2f3f4f5f6f7f8 @@ 0102030405060708,  ==> f2f3f4f5f6f7f8f1
-	f9fafbfcfefdfeff @@ 090a0b0c0e0d0e0f,  ==> 7dfe7f7eff7ffcfd
-vrld: f1f2f3f4f5f6f7f8 @@ f1f2f3f4f5f6f7f8,  ==> f8f1f2f3f4f5f6f7
-	f9fafbfcfefdfeff @@ f9fafbfcfefdfeff,  ==> fcfd7dfe7f7eff7f
+vrld: 0102030405060708 @@ 0102030405060708  ==> 0203040506070801
+	090a0b0c0e0d0e0f @@ 090a0b0c0e0d0e0f  ==> 0586070687078485
+vrld: 0102030405060708 @@ f1f2f3f4f5f6f7f8  ==> 0801020304050607
+	090a0b0c0e0d0e0f @@ f9fafbfcfefdfeff  ==> 8485058607068707
+vrld: f1f2f3f4f5f6f7f8 @@ 0102030405060708  ==> f2f3f4f5f6f7f8f1
+	f9fafbfcfefdfeff @@ 090a0b0c0e0d0e0f  ==> 7dfe7f7eff7ffcfd
+vrld: f1f2f3f4f5f6f7f8 @@ f1f2f3f4f5f6f7f8  ==> f8f1f2f3f4f5f6f7
+	f9fafbfcfefdfeff @@ f9fafbfcfefdfeff  ==> fcfd7dfe7f7eff7f
 
-vsld: 0102030405060708 @@ 0102030405060708,  ==> 0203040506070800
-	090a0b0c0e0d0e0f @@ 090a0b0c0e0d0e0f,  ==> 0586070687078000
-vsld: 0102030405060708 @@ f1f2f3f4f5f6f7f8,  ==> 0800000000000000
-	090a0b0c0e0d0e0f @@ f9fafbfcfefdfeff,  ==> 8000000000000000
-vsld: f1f2f3f4f5f6f7f8 @@ 0102030405060708,  ==> f2f3f4f5f6f7f800
-	f9fafbfcfefdfeff @@ 090a0b0c0e0d0e0f,  ==> 7dfe7f7eff7f8000
-vsld: f1f2f3f4f5f6f7f8 @@ f1f2f3f4f5f6f7f8,  ==> f800000000000000
-	f9fafbfcfefdfeff @@ f9fafbfcfefdfeff,  ==> 8000000000000000
+vsld: 0102030405060708 @@ 0102030405060708  ==> 0203040506070800
+	090a0b0c0e0d0e0f @@ 090a0b0c0e0d0e0f  ==> 0586070687078000
+vsld: 0102030405060708 @@ f1f2f3f4f5f6f7f8  ==> 0800000000000000
+	090a0b0c0e0d0e0f @@ f9fafbfcfefdfeff  ==> 8000000000000000
+vsld: f1f2f3f4f5f6f7f8 @@ 0102030405060708  ==> f2f3f4f5f6f7f800
+	f9fafbfcfefdfeff @@ 090a0b0c0e0d0e0f  ==> 7dfe7f7eff7f8000
+vsld: f1f2f3f4f5f6f7f8 @@ f1f2f3f4f5f6f7f8  ==> f800000000000000
+	f9fafbfcfefdfeff @@ f9fafbfcfefdfeff  ==> 8000000000000000
 
-vsrad: 0102030405060708 @@ 0102030405060708,  ==> 0001020304050607
-	090a0b0c0e0d0e0f @@ 090a0b0c0e0d0e0f,  ==> 0000121416181c1a
-vsrad: 0102030405060708 @@ f1f2f3f4f5f6f7f8,  ==> 0000000000000001
-	090a0b0c0e0d0e0f @@ f9fafbfcfefdfeff,  ==> 0000000000000000
-vsrad: f1f2f3f4f5f6f7f8 @@ 0102030405060708,  ==> fff1f2f3f4f5f6f7
-	f9fafbfcfefdfeff @@ 090a0b0c0e0d0e0f,  ==> fffff3f5f7f9fdfb
-vsrad: f1f2f3f4f5f6f7f8 @@ f1f2f3f4f5f6f7f8,  ==> fffffffffffffff1
-	f9fafbfcfefdfeff @@ f9fafbfcfefdfeff,  ==> ffffffffffffffff
+vsrad: 0102030405060708 @@ 0102030405060708  ==> 0001020304050607
+	090a0b0c0e0d0e0f @@ 090a0b0c0e0d0e0f  ==> 0000121416181c1a
+vsrad: 0102030405060708 @@ f1f2f3f4f5f6f7f8  ==> 0000000000000001
+	090a0b0c0e0d0e0f @@ f9fafbfcfefdfeff  ==> 0000000000000000
+vsrad: f1f2f3f4f5f6f7f8 @@ 0102030405060708  ==> fff1f2f3f4f5f6f7
+	f9fafbfcfefdfeff @@ 090a0b0c0e0d0e0f  ==> fffff3f5f7f9fdfb
+vsrad: f1f2f3f4f5f6f7f8 @@ f1f2f3f4f5f6f7f8  ==> fffffffffffffff1
+	f9fafbfcfefdfeff @@ f9fafbfcfefdfeff  ==> ffffffffffffffff
 
-vsrd: 0102030405060708 @@ 0102030405060708,  ==> 0001020304050607
-	090a0b0c0e0d0e0f @@ 090a0b0c0e0d0e0f,  ==> 0000121416181c1a
-vsrd: 0102030405060708 @@ f1f2f3f4f5f6f7f8,  ==> 0000000000000001
-	090a0b0c0e0d0e0f @@ f9fafbfcfefdfeff,  ==> 0000000000000000
-vsrd: f1f2f3f4f5f6f7f8 @@ 0102030405060708,  ==> 00f1f2f3f4f5f6f7
-	f9fafbfcfefdfeff @@ 090a0b0c0e0d0e0f,  ==> 0001f3f5f7f9fdfb
-vsrd: f1f2f3f4f5f6f7f8 @@ f1f2f3f4f5f6f7f8,  ==> 00000000000000f1
-	f9fafbfcfefdfeff @@ f9fafbfcfefdfeff,  ==> 0000000000000001
+vsrd: 0102030405060708 @@ 0102030405060708  ==> 0001020304050607
+	090a0b0c0e0d0e0f @@ 090a0b0c0e0d0e0f  ==> 0000121416181c1a
+vsrd: 0102030405060708 @@ f1f2f3f4f5f6f7f8  ==> 0000000000000001
+	090a0b0c0e0d0e0f @@ f9fafbfcfefdfeff  ==> 0000000000000000
+vsrd: f1f2f3f4f5f6f7f8 @@ 0102030405060708  ==> 00f1f2f3f4f5f6f7
+	f9fafbfcfefdfeff @@ 090a0b0c0e0d0e0f  ==> 0001f3f5f7f9fdfb
+vsrd: f1f2f3f4f5f6f7f8 @@ f1f2f3f4f5f6f7f8  ==> 00000000000000f1
+	f9fafbfcfefdfeff @@ f9fafbfcfefdfeff  ==> 0000000000000001
 
 vpkudum: Inputs: 05060708 0e0d0e0f 05060708 0e0d0e0f
          Output: 05060708 0e0d0e0f 05060708 0e0d0e0f
@@ -149,6 +149,78 @@
 vpkudum: Inputs: f5f6f7f8 fefdfeff f5f6f7f8 fefdfeff
          Output: f5f6f7f8 fefdfeff f5f6f7f8 fefdfeff
 
+vpmsumd: 0102030405060708 @@ 0102030405060708  ==> 0040004000400040
+	090a0b0c0e0d0e0f @@ 090a0b0c0e0d0e0f  ==> 0045004500410015
+vpmsumd: 0102030405060708 @@ f1f2f3f4f5f6f7f8  ==> 07c007c006d00735
+	090a0b0c0e0d0e0f @@ f9fafbfcfefdfeff  ==> a260a260a374a2c5
+vpmsumd: f1f2f3f4f5f6f7f8 @@ 0102030405060708  ==> 07c007c006d00735
+	f9fafbfcfefdfeff @@ 090a0b0c0e0d0e0f  ==> a260a260a374a2c5
+vpmsumd: f1f2f3f4f5f6f7f8 @@ f1f2f3f4f5f6f7f8  ==> 0040004000400040
+	f9fafbfcfefdfeff @@ f9fafbfcfefdfeff  ==> 0045004500410015
+
+vnand: 0102030405060708 @@ 0102030405060708  ==> fefdfcfbfaf9f8f7
+	090a0b0c0e0d0e0f @@ 090a0b0c0e0d0e0f  ==> f6f5f4f3f1f2f1f0
+vnand: 0102030405060708 @@ f1f2f3f4f5f6f7f8  ==> fefdfcfbfaf9f8f7
+	090a0b0c0e0d0e0f @@ f9fafbfcfefdfeff  ==> f6f5f4f3f1f2f1f0
+vnand: f1f2f3f4f5f6f7f8 @@ 0102030405060708  ==> fefdfcfbfaf9f8f7
+	f9fafbfcfefdfeff @@ 090a0b0c0e0d0e0f  ==> f6f5f4f3f1f2f1f0
+vnand: f1f2f3f4f5f6f7f8 @@ f1f2f3f4f5f6f7f8  ==> 0e0d0c0b0a090807
+	f9fafbfcfefdfeff @@ f9fafbfcfefdfeff  ==> 0605040301020100
+
+vorc: 0102030405060708 @@ 0102030405060708  ==> ffffffffffffffff
+	090a0b0c0e0d0e0f @@ 090a0b0c0e0d0e0f  ==> ffffffffffffffff
+vorc: 0102030405060708 @@ f1f2f3f4f5f6f7f8  ==> 0f0f0f0f0f0f0f0f
+	090a0b0c0e0d0e0f @@ f9fafbfcfefdfeff  ==> 0f0f0f0f0f0f0f0f
+vorc: f1f2f3f4f5f6f7f8 @@ 0102030405060708  ==> ffffffffffffffff
+	f9fafbfcfefdfeff @@ 090a0b0c0e0d0e0f  ==> ffffffffffffffff
+vorc: f1f2f3f4f5f6f7f8 @@ f1f2f3f4f5f6f7f8  ==> ffffffffffffffff
+	f9fafbfcfefdfeff @@ f9fafbfcfefdfeff  ==> ffffffffffffffff
+
+veqv: 0102030405060708 @@ 0102030405060708  ==> ffffffffffffffff
+	090a0b0c0e0d0e0f @@ 090a0b0c0e0d0e0f  ==> ffffffffffffffff
+veqv: 0102030405060708 @@ f1f2f3f4f5f6f7f8  ==> 0f0f0f0f0f0f0f0f
+	090a0b0c0e0d0e0f @@ f9fafbfcfefdfeff  ==> 0f0f0f0f0f0f0f0f
+veqv: f1f2f3f4f5f6f7f8 @@ 0102030405060708  ==> 0f0f0f0f0f0f0f0f
+	f9fafbfcfefdfeff @@ 090a0b0c0e0d0e0f  ==> 0f0f0f0f0f0f0f0f
+veqv: f1f2f3f4f5f6f7f8 @@ f1f2f3f4f5f6f7f8  ==> ffffffffffffffff
+	f9fafbfcfefdfeff @@ f9fafbfcfefdfeff  ==> ffffffffffffffff
+
+vcipher: 0102030405060708 @@ 0102030405060708  ==> 15abdc2823b74b86
+	090a0b0c0e0d0e0f @@ 090a0b0c0e0d0e0f  ==> 22037bc3e1e25abc
+vcipher: 0102030405060708 @@ f1f2f3f4f5f6f7f8  ==> e55b2cd8d347bb76
+	090a0b0c0e0d0e0f @@ f9fafbfcfefdfeff  ==> d2f38b331112aa4c
+vcipher: f1f2f3f4f5f6f7f8 @@ 0102030405060708  ==> 8720c49da1d37bca
+	f9fafbfcfefdfeff @@ 090a0b0c0e0d0e0f  ==> 906d1f673bb72743
+vcipher: f1f2f3f4f5f6f7f8 @@ f1f2f3f4f5f6f7f8  ==> 77d0346d51238b3a
+	f9fafbfcfefdfeff @@ f9fafbfcfefdfeff  ==> 609def97cb47d7b3
+
+vcipherlast: 0102030405060708 @@ 0102030405060708  ==> 7d6d28726e61acfa
+	090a0b0c0e0d0e0f @@ 090a0b0c0e0d0e0f  ==> 08dd703ca57acbf1
+vcipherlast: 0102030405060708 @@ f1f2f3f4f5f6f7f8  ==> 8d9dd8829e915c0a
+	090a0b0c0e0d0e0f @@ f9fafbfcfefdfeff  ==> f82d80cc558a3b01
+vcipherlast: f1f2f3f4f5f6f7f8 @@ 0102030405060708  ==> a0400c12e32bbcb7
+	f9fafbfcfefdfeff @@ 090a0b0c0e0d0e0f  ==> 905e064db58466bf
+vcipherlast: f1f2f3f4f5f6f7f8 @@ f1f2f3f4f5f6f7f8  ==> 50b0fce213db4c47
+	f9fafbfcfefdfeff @@ f9fafbfcfefdfeff  ==> 60aef6bd4574964f
+
+vncipher: 0102030405060708 @@ 0102030405060708  ==> fe67ce881a80f569
+	090a0b0c0e0d0e0f @@ 090a0b0c0e0d0e0f  ==> 19db0b0605541639
+vncipher: 0102030405060708 @@ f1f2f3f4f5f6f7f8  ==> 0e973e78ea700599
+	090a0b0c0e0d0e0f @@ f9fafbfcfefdfeff  ==> e92bfbf6f5a4e6c9
+vncipher: f1f2f3f4f5f6f7f8 @@ 0102030405060708  ==> 8b10c2d5607a5569
+	f9fafbfcfefdfeff @@ 090a0b0c0e0d0e0f  ==> 581826de46277b9c
+vncipher: f1f2f3f4f5f6f7f8 @@ f1f2f3f4f5f6f7f8  ==> 7be03225908aa599
+	f9fafbfcfefdfeff @@ f9fafbfcfefdfeff  ==> a8e8d62eb6d78b6c
+
+vncipherlast: 0102030405060708 @@ 0102030405060708  ==> 08f19dbb336cd089
+	090a0b0c0e0d0e0f @@ 090a0b0c0e0d0e0f  ==> 49afdef7d9ae363f
+vncipherlast: 0102030405060708 @@ f1f2f3f4f5f6f7f8  ==> f8016d4bc39c2079
+	090a0b0c0e0d0e0f @@ f9fafbfcfefdfeff  ==> b95f2e07295ec6cf
+vncipherlast: f1f2f3f4f5f6f7f8 @@ 0102030405060708  ==> 2a2360e572020b5d
+	f9fafbfcfefdfeff @@ 090a0b0c0e0d0e0f  ==> 60dc7571021928b5
+vncipherlast: f1f2f3f4f5f6f7f8 @@ f1f2f3f4f5f6f7f8  ==> dad3901582f2fbad
+	f9fafbfcfefdfeff @@ f9fafbfcfefdfeff  ==> 902c8581f2e9d845
+
 vmulouw: 01020304 05060708 090a0b0c 0e0d0e0f ==> 00193c6aa4917040 00c56e34124ba4e1
 vmulouw: 01020304 05060708 090a0b0c 0e0d0e0f ==> 04d39d63184f87c0 0dfee4d8b9c6e2f1
 vmulouw: f1f2f3f4 f5f6f7f8 f9fafbfc fefdfeff ==> 04d39d63184f87c0 0dfee4d8b9c6e2f1
@@ -184,6 +256,21 @@
 vmrgow: f1f2f3f4 f5f6f7f8 f9fafbfc fefdfeff ==> f5f6f7f805060708 fefdfeff0e0d0e0f
 vmrgow: f1f2f3f4 f5f6f7f8 f9fafbfc fefdfeff ==> f5f6f7f8f5f6f7f8 fefdfefffefdfeff
 
+vpmsumb: 01020304 05060708 090a0b0c 0e0d0e0f ==> 0005001500050055 0005001500050001
+vpmsumb: 01020304 05060708 090a0b0c 0e0d0e0f ==> 011502c501150505 011502c5011500f1
+vpmsumb: f1f2f3f4 f5f6f7f8 f9fafbfc fefdfeff ==> 011502c501150505 011502c5011500f1
+vpmsumb: f1f2f3f4 f5f6f7f8 f9fafbfc fefdfeff ==> 0005001500050055 0005001500050001
+
+vpmsumh: 01020304 05060708 090a0b0c 0e0d0e0f ==> 0004001400040054 0004001400000004
+vpmsumh: 01020304 05060708 090a0b0c 0e0d0e0f ==> 01e7c23401e045f4 01e7c2340001e1e4
+vpmsumh: f1f2f3f4 f5f6f7f8 f9fafbfc fefdfeff ==> 01e7c23401e045f4 01e7c2340001e1e4
+vpmsumh: f1f2f3f4 f5f6f7f8 f9fafbfc fefdfeff ==> 0004001400040054 0004001400000004
+
+vpmsumw: 01020304 05060708 090a0b0c 0e0d0e0f ==> 0010001000100050 0015001500110005
+vpmsumw: 01020304 05060708 090a0b0c 0e0d0e0f ==> 03d003d784578410 02c5032720e32115
+vpmsumw: f1f2f3f4 f5f6f7f8 f9fafbfc fefdfeff ==> 03d003d784578410 02c5032720e32115
+vpmsumw: f1f2f3f4 f5f6f7f8 f9fafbfc fefdfeff ==> 0010001000100050 0015001500110005
+
 vpkudus: 000000007c118a2b, 00000000f1112345 @@ 000000007c118a2b, 00000000f1112345  ==> 7c118a2b f1112345 7c118a2b f1112345
 vpkudus: 000000007c118a2b, 00000000f1112345 @@ 01f2f3f4f5f6f7f8, f9fafbfcfefdfeff  ==> 7c118a2b f1112345 ffffffff ffffffff
 vpkudus: 01f2f3f4f5f6f7f8, f9fafbfcfefdfeff @@ 000000007c118a2b, 00000000f1112345  ==> ffffffff ffffffff 7c118a2b f1112345
@@ -205,4 +292,132 @@
 vupklsw: 01020304 05060708 090a0b0c 0e0d0e0f ==> 00000000090a0b0c 000000000e0d0e0f
 vupklsw: f1f2f3f4 f5f6f7f8 f9fafbfc fefdfeff ==> fffffffff9fafbfc fffffffffefdfeff
 
-All done. Tested 31 different instructions
+vpermxor: 0102030405060708 @@ 0102030405060708 @@ 0102030405060708  ==> 0302050407060908
+	090a0b0c0e0d0e0f @@ 090a0b0c0e0d0e0f @@ 090a0b0c0e0d0e0f  ==> 0b0a0d0f0f0c0f0e
+vpermxor: 0102030405060708 @@ 0102030405060708 @@ f1f2f3f4f5f6f7f8  ==> 0d0c0b0a09080706
+	090a0b0c0e0d0e0f @@ 090a0b0c0e0d0e0f @@ f9fafbfcfefdfeff  ==> 0504030101020100
+vpermxor: 0102030405060708 @@ f1f2f3f4f5f6f7f8 @@ 0102030405060708  ==> f3f2f5f4f7f6f9f8
+	090a0b0c0e0d0e0f @@ f9fafbfcfefdfeff @@ 090a0b0c0e0d0e0f  ==> fbfafdfffffcfffe
+vpermxor: 0102030405060708 @@ f1f2f3f4f5f6f7f8 @@ f1f2f3f4f5f6f7f8  ==> fdfcfbfaf9f8f7f6
+	090a0b0c0e0d0e0f @@ f9fafbfcfefdfeff @@ f9fafbfcfefdfeff  ==> f5f4f3f1f1f2f1f0
+vpermxor: f1f2f3f4f5f6f7f8 @@ 0102030405060708 @@ 0102030405060708  ==> f3f2f5f4f7f6f9f8
+	f9fafbfcfefdfeff @@ 090a0b0c0e0d0e0f @@ 090a0b0c0e0d0e0f  ==> fbfafdfffffcfffe
+vpermxor: f1f2f3f4f5f6f7f8 @@ 0102030405060708 @@ f1f2f3f4f5f6f7f8  ==> fdfcfbfaf9f8f7f6
+	f9fafbfcfefdfeff @@ 090a0b0c0e0d0e0f @@ f9fafbfcfefdfeff  ==> f5f4f3f1f1f2f1f0
+vpermxor: f1f2f3f4f5f6f7f8 @@ f1f2f3f4f5f6f7f8 @@ 0102030405060708  ==> 0302050407060908
+	f9fafbfcfefdfeff @@ f9fafbfcfefdfeff @@ 090a0b0c0e0d0e0f  ==> 0b0a0d0f0f0c0f0e
+vpermxor: f1f2f3f4f5f6f7f8 @@ f1f2f3f4f5f6f7f8 @@ f1f2f3f4f5f6f7f8  ==> 0d0c0b0a09080706
+	f9fafbfcfefdfeff @@ f9fafbfcfefdfeff @@ f9fafbfcfefdfeff  ==> 0504030101020100
+
+vclzb: 0102030405060708 @@ 090a0b0c0e0d0e0f  ==> 07060605050505040404040404040404
+vclzb: f1f2f3f4f5f6f7f8 @@ f9fafbfcfefdfeff  ==> 00000000000000000000000000000000
+
+vclzw: 0102030405060708 @@ 090a0b0c0e0d0e0f  ==> 00000007000000050000000400000004
+vclzw: f1f2f3f4f5f6f7f8 @@ f9fafbfcfefdfeff  ==> 00000000000000000000000000000000
+
+vclzh: 0102030405060708 @@ 090a0b0c0e0d0e0f  ==> 00070006000500050004000400040004
+vclzh: f1f2f3f4f5f6f7f8 @@ f9fafbfcfefdfeff  ==> 00000000000000000000000000000000
+
+vclzd: 0102030405060708 @@ 090a0b0c0e0d0e0f  ==> 00000000000000070000000000000004
+vclzd: f1f2f3f4f5f6f7f8 @@ f9fafbfcfefdfeff  ==> 00000000000000000000000000000000
+
+vpopcntb: 0102030405060708 @@ 090a0b0c0e0d0e0f  ==> 01010201020203010202030203030304
+vpopcntb: f1f2f3f4f5f6f7f8 @@ f9fafbfcfefdfeff  ==> 05050605060607050606070607070708
+
+vpopcnth: 0102030405060708 @@ 090a0b0c0e0d0e0f  ==> 00020003000400040004000500060007
+vpopcnth: f1f2f3f4f5f6f7f8 @@ f9fafbfcfefdfeff  ==> 000a000b000c000c000c000d000e000f
+
+vpopcntw: 0102030405060708 @@ 090a0b0c0e0d0e0f  ==> 0000000500000008000000090000000d
+vpopcntw: f1f2f3f4f5f6f7f8 @@ f9fafbfcfefdfeff  ==> 0000001500000018000000190000001d
+
+vpopcntd: 0102030405060708 @@ 090a0b0c0e0d0e0f  ==> 000000000000000d0000000000000016
+vpopcntd: f1f2f3f4f5f6f7f8 @@ f9fafbfcfefdfeff  ==> 000000000000002d0000000000000036
+
+vsbox: 0102030405060708 @@ 090a0b0c0e0d0e0f  ==> 7c777bf26b6fc53001672bfeabd7ab76
+vsbox: f1f2f3f4f5f6f7f8 @@ f9fafbfcfefdfeff  ==> a1890dbfe6426841992d0fb0bb54bb16
+
+vshasigmad: 0102030405060708 @@ 090a0b0c0e0d0e0f  ==> 088207870e8c098d || 8b9e1b9b13149015
+vshasigmad: 0102030405060708 @@ 090a0b0c0e0d0e0f  ==> c8f5100c7844a0fc || e9b5916d0131c581
+vshasigmad: 0102030405060708 @@ 090a0b0c0e0d0e0f  ==> 592bfd4c0062b487 || fb4fb96f4cf02615
+vshasigmad: 0102030405060708 @@ 090a0b0c0e0d0e0f  ==> 1fe0874b08d19458 || fdb8e0eda977beb2
+vshasigmad: f1f2f3f4f5f6f7f8 @@ f9fafbfcfefdfeff  ==> 81eb6eee67e560e4 || 02f772f27a7df97c
+vshasigmad: f1f2f3f4f5f6f7f8 @@ f9fafbfcfefdfeff  ==> 52af4a56221efaa6 || 73efcb375b6b9fdb
+vshasigmad: f1f2f3f4f5f6f7f8 @@ f9fafbfcfefdfeff  ==> 8bf92f9ed2b06655 || 299d6bbd9e22f4c7
+vshasigmad: f1f2f3f4f5f6f7f8 @@ f9fafbfcfefdfeff  ==> 986700cc8f5613df || 7a3f676a2ef03935
+
+vshasigmaw: 0102030405060708 @@ 090a0b0c0e0d0e0f  ==> 88e344269168cdae || 9bf057355c5e785e
+vshasigmaw: 0102030405060708 @@ 090a0b0c0e0d0e0f  ==> 41e2c021c36443a2 || 44e5c72626c5e584
+vshasigmaw: 0102030405060708 @@ 090a0b0c0e0d0e0f  ==> 106c98d5211d89e6 || 720efab787c30fd3
+vshasigmaw: 0102030405060708 @@ 090a0b0c0e0d0e0f  ==> f185aa4c42173cde || d4a08f69fb5ef21e
+vshasigmaw: f1f2f3f4f5f6f7f8 @@ f9fafbfcfefdfeff  ==> 4b2087e552ab0e6d || 583394f69f9dbb9d
+vshasigmaw: f1f2f3f4f5f6f7f8 @@ f9fafbfcfefdfeff  ==> 27b89a7ba53e19f8 || 22bf9d7c409fbfde
+vshasigmaw: f1f2f3f4f5f6f7f8 @@ f9fafbfcfefdfeff  ==> 6814e0ad5965f19e || 0a7682cfffbb77ab
+vshasigmaw: f1f2f3f4f5f6f7f8 @@ f9fafbfcfefdfeff  ==> 54200fe9e7b2997b || 71052acc5efb57bb
+
+bcdadd.: 8045090189321003 || 001122334556677d @@ 8045090189321003 || 001122334556677d ==> 6090180378642006 || 002244669113354d
+bcdadd.: 8045090189321003 || 001122334556677d @@ 8045090189321003 || 001122334556677d ==> 6090180378642006 || 002244669113354d
+bcdadd.: 8045090189321003 || 001122334556677d @@ 0000107600000001 || 319293945142031a ==> 8044982589321001 || 681828389414646d
+bcdadd.: 8045090189321003 || 001122334556677d @@ 0000107600000001 || 319293945142031a ==> 8044982589321001 || 681828389414646d
+bcdadd.: 8045090189321003 || 001122334556677d @@ 0000000000000000 || 000000000000000a ==> 8045090189321003 || 001122334556677d
+bcdadd.: 8045090189321003 || 001122334556677d @@ 0000000000000000 || 000000000000000a ==> 8045090189321003 || 001122334556677d
+bcdadd.: 8045090189321003 || 001122334556677d @@ 0000000000000000 || 0000000000000000 ==> 8045090189321003 || 001122334556677d
+bcdadd.: 8045090189321003 || 001122334556677d @@ 0000000000000000 || 0000000000000000 ==> 8045090189321003 || 001122334556677d
+bcdadd.: 0000107600000001 || 319293945142031a @@ 8045090189321003 || 001122334556677d ==> 8044982589321001 || 681828389414646d
+bcdadd.: 0000107600000001 || 319293945142031a @@ 8045090189321003 || 001122334556677d ==> 8044982589321001 || 681828389414646d
+bcdadd.: 0000107600000001 || 319293945142031a @@ 0000107600000001 || 319293945142031a ==> 0000215200000002 || 638587890284062c
+bcdadd.: 0000107600000001 || 319293945142031a @@ 0000107600000001 || 319293945142031a ==> 0000215200000002 || 638587890284062f
+bcdadd.: 0000107600000001 || 319293945142031a @@ 0000000000000000 || 000000000000000a ==> 0000107600000001 || 319293945142031c
+bcdadd.: 0000107600000001 || 319293945142031a @@ 0000000000000000 || 000000000000000a ==> 0000107600000001 || 319293945142031f
+bcdadd.: 0000107600000001 || 319293945142031a @@ 0000000000000000 || 0000000000000000 ==> 0000107600000001 || 319293945142031c
+bcdadd.: 0000107600000001 || 319293945142031a @@ 0000000000000000 || 0000000000000000 ==> 0000107600000001 || 319293945142031f
+bcdadd.: 0000000000000000 || 000000000000000a @@ 8045090189321003 || 001122334556677d ==> 8045090189321003 || 001122334556677d
+bcdadd.: 0000000000000000 || 000000000000000a @@ 8045090189321003 || 001122334556677d ==> 8045090189321003 || 001122334556677d
+bcdadd.: 0000000000000000 || 000000000000000a @@ 0000107600000001 || 319293945142031a ==> 0000107600000001 || 319293945142031c
+bcdadd.: 0000000000000000 || 000000000000000a @@ 0000107600000001 || 319293945142031a ==> 0000107600000001 || 319293945142031f
+bcdadd.: 0000000000000000 || 000000000000000a @@ 0000000000000000 || 000000000000000a ==> 0000000000000000 || 000000000000000c
+bcdadd.: 0000000000000000 || 000000000000000a @@ 0000000000000000 || 000000000000000a ==> 0000000000000000 || 000000000000000f
+bcdadd.: 0000000000000000 || 000000000000000a @@ 0000000000000000 || 0000000000000000 ==> 0000000000000000 || 000000000000000c
+bcdadd.: 0000000000000000 || 000000000000000a @@ 0000000000000000 || 0000000000000000 ==> 0000000000000000 || 000000000000000f
+bcdadd.: 0000000000000000 || 0000000000000000 @@ 8045090189321003 || 001122334556677d ==> 8045090189321003 || 001122334556677d
+bcdadd.: 0000000000000000 || 0000000000000000 @@ 8045090189321003 || 001122334556677d ==> 8045090189321003 || 001122334556677d
+bcdadd.: 0000000000000000 || 0000000000000000 @@ 0000107600000001 || 319293945142031a ==> 0000107600000001 || 319293945142031c
+bcdadd.: 0000000000000000 || 0000000000000000 @@ 0000107600000001 || 319293945142031a ==> 0000107600000001 || 319293945142031f
+bcdadd.: 0000000000000000 || 0000000000000000 @@ 0000000000000000 || 000000000000000a ==> 0000000000000000 || 000000000000000c
+bcdadd.: 0000000000000000 || 0000000000000000 @@ 0000000000000000 || 000000000000000a ==> 0000000000000000 || 000000000000000f
+bcdadd.: 0000000000000000 || 0000000000000000 @@ 0000000000000000 || 0000000000000000 ==> 0000000000000000 || 000000000000000c
+bcdadd.: 0000000000000000 || 0000000000000000 @@ 0000000000000000 || 0000000000000000 ==> 0000000000000000 || 000000000000000f
+
+bcdsub.: 8045090189321003 || 001122334556677d @@ 8045090189321003 || 001122334556677d ==> 0000000000000000 || 000000000000000c
+bcdsub.: 8045090189321003 || 001122334556677d @@ 8045090189321003 || 001122334556677d ==> 0000000000000000 || 000000000000000f
+bcdsub.: 8045090189321003 || 001122334556677d @@ 0000107600000001 || 319293945142031a ==> 8045197789321004 || 320416279698708d
+bcdsub.: 8045090189321003 || 001122334556677d @@ 0000107600000001 || 319293945142031a ==> 8045197789321004 || 320416279698708d
+bcdsub.: 8045090189321003 || 001122334556677d @@ 0000000000000000 || 000000000000000a ==> 8045090189321003 || 001122334556677d
+bcdsub.: 8045090189321003 || 001122334556677d @@ 0000000000000000 || 000000000000000a ==> 8045090189321003 || 001122334556677d
+bcdsub.: 8045090189321003 || 001122334556677d @@ 0000000000000000 || 0000000000000000 ==> 8045090189321003 || 001122334556677d
+bcdsub.: 8045090189321003 || 001122334556677d @@ 0000000000000000 || 0000000000000000 ==> 8045090189321003 || 001122334556677d
+bcdsub.: 0000107600000001 || 319293945142031a @@ 8045090189321003 || 001122334556677d ==> 8045197789321004 || 320416279698708c
+bcdsub.: 0000107600000001 || 319293945142031a @@ 8045090189321003 || 001122334556677d ==> 8045197789321004 || 320416279698708f
+bcdsub.: 0000107600000001 || 319293945142031a @@ 0000107600000001 || 319293945142031a ==> 0000000000000000 || 000000000000000c
+bcdsub.: 0000107600000001 || 319293945142031a @@ 0000107600000001 || 319293945142031a ==> 0000000000000000 || 000000000000000f
+bcdsub.: 0000107600000001 || 319293945142031a @@ 0000000000000000 || 000000000000000a ==> 0000107600000001 || 319293945142031c
+bcdsub.: 0000107600000001 || 319293945142031a @@ 0000000000000000 || 000000000000000a ==> 0000107600000001 || 319293945142031f
+bcdsub.: 0000107600000001 || 319293945142031a @@ 0000000000000000 || 0000000000000000 ==> 0000107600000001 || 319293945142031c
+bcdsub.: 0000107600000001 || 319293945142031a @@ 0000000000000000 || 0000000000000000 ==> 0000107600000001 || 319293945142031f
+bcdsub.: 0000000000000000 || 000000000000000a @@ 8045090189321003 || 001122334556677d ==> 8045090189321003 || 001122334556677c
+bcdsub.: 0000000000000000 || 000000000000000a @@ 8045090189321003 || 001122334556677d ==> 8045090189321003 || 001122334556677f
+bcdsub.: 0000000000000000 || 000000000000000a @@ 0000107600000001 || 319293945142031a ==> 0000107600000001 || 319293945142031d
+bcdsub.: 0000000000000000 || 000000000000000a @@ 0000107600000001 || 319293945142031a ==> 0000107600000001 || 319293945142031d
+bcdsub.: 0000000000000000 || 000000000000000a @@ 0000000000000000 || 000000000000000a ==> 0000000000000000 || 000000000000000c
+bcdsub.: 0000000000000000 || 000000000000000a @@ 0000000000000000 || 000000000000000a ==> 0000000000000000 || 000000000000000f
+bcdsub.: 0000000000000000 || 000000000000000a @@ 0000000000000000 || 0000000000000000 ==> 0000000000000000 || 000000000000000c
+bcdsub.: 0000000000000000 || 000000000000000a @@ 0000000000000000 || 0000000000000000 ==> 0000000000000000 || 000000000000000f
+bcdsub.: 0000000000000000 || 0000000000000000 @@ 8045090189321003 || 001122334556677d ==> 8045090189321003 || 001122334556677c
+bcdsub.: 0000000000000000 || 0000000000000000 @@ 8045090189321003 || 001122334556677d ==> 8045090189321003 || 001122334556677f
+bcdsub.: 0000000000000000 || 0000000000000000 @@ 0000107600000001 || 319293945142031a ==> 0000107600000001 || 319293945142031d
+bcdsub.: 0000000000000000 || 0000000000000000 @@ 0000107600000001 || 319293945142031a ==> 0000107600000001 || 319293945142031d
+bcdsub.: 0000000000000000 || 0000000000000000 @@ 0000000000000000 || 000000000000000a ==> 0000000000000000 || 000000000000000c
+bcdsub.: 0000000000000000 || 0000000000000000 @@ 0000000000000000 || 000000000000000a ==> 0000000000000000 || 000000000000000f
+bcdsub.: 0000000000000000 || 0000000000000000 @@ 0000000000000000 || 0000000000000000 ==> 0000000000000000 || 000000000000000c
+bcdsub.: 0000000000000000 || 0000000000000000 @@ 0000000000000000 || 0000000000000000 ==> 0000000000000000 || 000000000000000f
+
+All done. Tested 56 different instructions
diff --git a/none/tests/ppc64/test_isa_2_07_part1.c b/none/tests/ppc64/test_isa_2_07_part1.c
index f1f6b02..067800d 100644
--- a/none/tests/ppc64/test_isa_2_07_part1.c
+++ b/none/tests/ppc64/test_isa_2_07_part1.c
@@ -7,7 +7,7 @@
    gcc -Winline -Wall -g -O -mregnames -maltivec -m64
 
 
- * jm_insns_isa_2_07.c:
+ * test_isa_2_07_part1.c:
  * PPC tests for the ISA 2.07.  This file is based on the
  * jm-insns.c file for the new instructions in the ISA 2.07.  The
  * test structure has been kept the same as the original file to
@@ -175,7 +175,7 @@
 
 #define DEFAULT_VSCR 0x0
 
-static vector unsigned long long vec_out, vec_inA, vec_inB;
+static vector unsigned long long vec_out, vec_inA, vec_inB, vec_inC;
 static vector unsigned int vec_inA_wd, vec_inB_wd;
 
 /* XXXX these must all be callee-save regs! */
@@ -233,6 +233,7 @@
     PPC_ARITH_DRES = 0x00000700,
     PPC_DOUBLE_IN_IRES = 0x00000800,
     PPC_MOV        = 0x00000A00,
+    PPC_SHA_OR_BCD = 0x00000B00,
     PPC_TYPE       = 0x00000F00,
     /* Family */
     PPC_INTEGER    = 0x00010000,
@@ -510,11 +511,188 @@
     __asm__ __volatile__ ("vmrgow %0, %1, %2" : "=v" (vec_out): "v" (vec_inA_wd),"v" (vec_inB_wd));
 }
 
+static void test_vpmsumb (void)
+{
+    __asm__ __volatile__ ("vpmsumb %0, %1, %2" : "=v" (vec_out): "v" (vec_inA_wd),"v" (vec_inB_wd));
+}
+
+static void test_vpmsumh (void)
+{
+    __asm__ __volatile__ ("vpmsumh %0, %1, %2" : "=v" (vec_out): "v" (vec_inA_wd),"v" (vec_inB_wd));
+}
+
+static void test_vpmsumw (void)
+{
+    __asm__ __volatile__ ("vpmsumw %0, %1, %2" : "=v" (vec_out): "v" (vec_inA_wd),"v" (vec_inB_wd));
+}
+
+static void test_vpermxor (void)
+{
+  __asm__ __volatile__ ("vpermxor %0, %1, %2, %3" : "=v" (vec_out): "v" (vec_inA),"v" (vec_inB),"v" (vec_inC));
+}
+
+static void test_vpmsumd (void)
+{
+    __asm__ __volatile__ ("vpmsumd %0, %1, %2" : "=v" (vec_out): "v" (vec_inA),"v" (vec_inB));
+}
+
+static void test_vnand (void)
+{
+    __asm__ __volatile__ ("vnand %0, %1, %2" : "=v" (vec_out): "v" (vec_inA),"v" (vec_inB));
+}
+
+static void test_vorc (void)
+{
+    __asm__ __volatile__ ("vorc %0, %1, %2" : "=v" (vec_out): "v" (vec_inA),"v" (vec_inB));
+}
+
+static void test_veqv (void)
+{
+    __asm__ __volatile__ ("veqv %0, %1, %2" : "=v" (vec_out): "v" (vec_inA),"v" (vec_inB));
+}
+
+static void test_vcipher (void)
+{
+    __asm__ __volatile__ ("vcipher %0, %1, %2" : "=v" (vec_out): "v" (vec_inA),"v" (vec_inB));
+}
+
+static void test_vcipherlast (void)
+{
+    __asm__ __volatile__ ("vcipherlast %0, %1, %2" : "=v" (vec_out): "v" (vec_inA),"v" (vec_inB));
+}
+
+static void test_vncipher (void)
+{
+    __asm__ __volatile__ ("vncipher %0, %1, %2" : "=v" (vec_out): "v" (vec_inA),"v" (vec_inB));
+}
+
+static void test_vncipherlast (void)
+{
+    __asm__ __volatile__ ("vncipherlast %0, %1, %2" : "=v" (vec_out): "v" (vec_inA),"v" (vec_inB));
+}
+
+static void test_vclzb (void)
+{
+    __asm__ __volatile__ ("vclzb %0, %1" : "=v" (vec_out): "v" (vec_inB));
+}
+
+static void test_vclzw (void)
+{
+    __asm__ __volatile__ ("vclzw %0, %1" : "=v" (vec_out): "v" (vec_inB));
+}
+
+static void test_vclzh (void)
+{
+    __asm__ __volatile__ ("vclzh %0, %1" : "=v" (vec_out): "v" (vec_inB));
+}
+
+static void test_vclzd (void)
+{
+    __asm__ __volatile__ ("vclzd %0, %1" : "=v" (vec_out): "v" (vec_inB));
+}
+
+static void test_vpopcntb (void)
+{
+    __asm__ __volatile__ ("vpopcntb %0, %1" : "=v" (vec_out): "v" (vec_inB));
+}
+
+static void test_vpopcnth (void)
+{
+    __asm__ __volatile__ ("vpopcnth %0, %1" : "=v" (vec_out): "v" (vec_inB));
+}
+
+static void test_vpopcntw (void)
+{
+    __asm__ __volatile__ ("vpopcntw %0, %1" : "=v" (vec_out): "v" (vec_inB));
+}
+
+static void test_vpopcntd (void)
+{
+    __asm__ __volatile__ ("vpopcntd %0, %1" : "=v" (vec_out): "v" (vec_inB));
+}
+
+static void test_vsbox (void)
+{
+    __asm__ __volatile__ ("vsbox %0, %1" : "=v" (vec_out): "v" (vec_inB));
+}
+
+static int st_six;
+static void test_vshasigmad (void)
+{
+   switch (st_six) {
+   case 0x00:
+      __asm__ __volatile__ ("vshasigmad %0, %1, 0, 0" : "=v" (vec_out): "v" (vec_inA));
+      break;
+   case 0x0f:
+      __asm__ __volatile__ ("vshasigmad %0, %1, 0, 15" : "=v" (vec_out): "v" (vec_inA));
+      break;
+   case 0x10:
+      __asm__ __volatile__ ("vshasigmad %0, %1, 1, 0" : "=v" (vec_out): "v" (vec_inA));
+      break;
+   case 0x1f:
+      __asm__ __volatile__ ("vshasigmad %0, %1, 1, 15" : "=v" (vec_out): "v" (vec_inA));
+      break;
+   }
+}
+
+static void test_vshasigmaw (void)
+{
+   switch (st_six) {
+   case 0x00:
+      __asm__ __volatile__ ("vshasigmaw %0, %1, 0, 0" : "=v" (vec_out): "v" (vec_inA));
+      break;
+   case 0x0f:
+      __asm__ __volatile__ ("vshasigmaw %0, %1, 0, 15" : "=v" (vec_out): "v" (vec_inA));
+      break;
+   case 0x10:
+      __asm__ __volatile__ ("vshasigmaw %0, %1, 1, 0" : "=v" (vec_out): "v" (vec_inA));
+      break;
+   case 0x1f:
+      __asm__ __volatile__ ("vshasigmaw %0, %1, 1, 15" : "=v" (vec_out): "v" (vec_inA));
+      break;
+   }
+}
+
+static int PS_bit;
+static void test_bcdadd (void)
+{
+   if (PS_bit)
+      __asm__ __volatile__ ("bcdadd. %0, %1, %2, 1" : "=v" (vec_out): "v" (vec_inA),"v" (vec_inB));
+   else
+      __asm__ __volatile__ ("bcdadd. %0, %1, %2, 0" : "=v" (vec_out): "v" (vec_inA),"v" (vec_inB));
+}
+
+static void test_bcdsub (void)
+{
+   if (PS_bit)
+      __asm__ __volatile__ ("bcdsub. %0, %1, %2, 1" : "=v" (vec_out): "v" (vec_inA),"v" (vec_inB));
+   else
+      __asm__ __volatile__ ("bcdsub. %0, %1, %2, 0" : "=v" (vec_out): "v" (vec_inA),"v" (vec_inB));
+}
+
+static test_t tests_aa_bcd_ops[] = {
+  { &test_bcdadd        , "bcdadd." },
+  { &test_bcdsub        , "bcdsub." },
+  { NULL                , NULL      },
+};
+
+static test_t tests_aa_SHA_ops[] = {
+  { &test_vshasigmad    , "vshasigmad" },
+  { &test_vshasigmaw    , "vshasigmaw" },
+  { NULL                , NULL         },
+};
+
+static test_t tests_aa_ops_three[] = {
+  { &test_vpermxor        , "vpermxor" },
+  { NULL                  , NULL       },
+};
+
 static test_t tests_aa_word_ops_one_arg_dres[] = {
   { &test_vupkhsw         , "vupkhsw" },
   { &test_vupklsw         , "vupklsw" },
   { NULL                  , NULL      }
 };
+
 static test_t tests_aa_word_ops_two_args_dres[] = {
   { &test_vmulouw         , "vmulouw" },
   { &test_vmuluwm         , "vmuluwm" },
@@ -523,6 +701,9 @@
   { &test_vmulesw         , "vmulesw" },
   { &test_vmrgew          , "vmrgew" },
   { &test_vmrgow          , "vmrgow" },
+  { &test_vpmsumb         , "vpmsumb" },
+  { &test_vpmsumh         , "vpmsumh" },
+  { &test_vpmsumw         , "vpmsumw" },
   { NULL                  , NULL      }
 };
 
@@ -541,9 +722,30 @@
   { &test_vsrad           , "vsrad", },
   { &test_vsrd            , "vsrd", },
   { &test_vpkudum         , "vpkudum", },
+  { &test_vpmsumd         , "vpmsumd", },
+  { &test_vnand           , "vnand", },
+  { &test_vorc            , "vorc", },
+  { &test_veqv            , "veqv", },
+  { &test_vcipher         , "vcipher" },
+  { &test_vcipherlast     , "vcipherlast" },
+  { &test_vncipher        , "vncipher" },
+  { &test_vncipherlast    , "vncipherlast" },
   { NULL                  , NULL,      },
 };
 
+static test_t tests_aa_dbl_ops_one_arg[] = {
+  { &test_vclzb           , "vclzb" },
+  { &test_vclzw           , "vclzw" },
+  { &test_vclzh           , "vclzh" },
+  { &test_vclzd           , "vclzd" },
+  { &test_vpopcntb        , "vpopcntb" },
+  { &test_vpopcnth        , "vpopcnth" },
+  { &test_vpopcntw        , "vpopcntw" },
+  { &test_vpopcntd        , "vpopcntd" },
+  { &test_vsbox           , "vsbox" },
+  { NULL                  , NULL,      }
+};
+
 static test_t tests_aa_dbl_to_int_two_args[] = {
   { &test_vpkudus         , "vpkudus", },
   { &test_vpksdus         , "vpksdus", },
@@ -593,6 +795,18 @@
    vwargs[i++] = 0xFEFDFEFF;
 }
 
+static unsigned long long vbcd_args[] __attribute__ ((aligned (16))) = {
+   0x8045090189321003ULL, // Negative BCD value
+   0x001122334556677dULL,
+   0x0000107600000001ULL, // Positive BCD value
+   0x319293945142031aULL,
+   0x0ULL,                // Valid BCD zero
+   0xaULL,
+   0x0ULL,                // Invalid BCD zero (no sign code)
+   0x0ULL
+};
+#define NUM_VBCD_VALS (sizeof vbcd_args/sizeof vbcd_args[0])
+
 static void build_vargs_table (void)
 {
    build_vdargs_table();
@@ -962,15 +1176,84 @@
             printf("         Output: %08x %08x %08x %08x\n", dst_int[0], dst_int[1],
                    dst_int[2], dst_int[3]);
          } else {
-            printf("%016llx @@ %016llx, ", vdargs[i], vdargs[j]);
+            printf("%016llx @@ %016llx ", vdargs[i], vdargs[j]);
             printf(" ==> %016llx\n", dst[0]);
-            printf("\t%016llx @@ %016llx, ", vdargs[i+1], vdargs[j+1]);
+            printf("\t%016llx @@ %016llx ", vdargs[i+1], vdargs[j+1]);
             printf(" ==> %016llx\n", dst[1]);
          }
       }
    }
 }
 
+static void test_av_dint_one_arg (const char* name, test_func_t func,
+                                  unused uint32_t test_flags)
+{
+
+   unsigned long long * dst;
+   int i;
+
+   for (i = 0; i < NB_VDARGS; i+=2) {
+      vec_inB = (vector unsigned long long){ vdargs[i], vdargs[i+1] };
+      vec_out = (vector unsigned long long){ 0,0 };
+
+      (*func)();
+      dst  = (unsigned long long*)&vec_out;
+
+      printf("%s: ", name);
+      printf("%016llx @@ %016llx ", vdargs[i], vdargs[i + 1]);
+      printf(" ==> %016llx%016llx\n", dst[0], dst[1]);
+   }
+}
+
+static void test_av_dint_one_arg_SHA (const char* name, test_func_t func,
+                                      unused uint32_t test_flags)
+{
+   unsigned long long * dst;
+   int i, st, six;
+
+   for (i = 0; i < NB_VDARGS; i+=2) {
+      vec_inA = (vector unsigned long long){ vdargs[i], vdargs[i+1] };
+      vec_out = (vector unsigned long long){ 0,0 };
+
+      for (st = 0; st < 2; st++) {
+         for (six = 0; six < 16; six+=15) {
+            st_six = (st << 4) | six;
+            (*func)();
+            dst  = (unsigned long long*)&vec_out;
+
+            printf("%s: ", name);
+            printf("%016llx @@ %016llx ", vdargs[i], vdargs[i + 1]);
+            printf(" ==> %016llx || %016llx\n", dst[0], dst[1]);
+         }
+      }
+   }
+}
+
+static void test_av_bcd (const char* name, test_func_t func,
+                         unused uint32_t test_flags)
+{
+   unsigned long long * dst;
+   int i, j;
+
+   for (i = 0; i < NUM_VBCD_VALS; i+=2) {
+      vec_inA = (vector unsigned long long){ vbcd_args[i], vbcd_args[i +1 ] };
+      for (j = 0; j < NUM_VBCD_VALS; j+=2) {
+         vec_inB = (vector unsigned long long){ vbcd_args[j], vbcd_args[j +1 ] };
+         vec_out = (vector unsigned long long){ 0, 0 };
+
+         for (PS_bit = 0; PS_bit < 2; PS_bit++) {
+            (*func)();
+            dst  = (unsigned long long*)&vec_out;
+            printf("%s: ", name);
+            printf("%016llx || %016llx @@ %016llx || %016llx",
+                   vbcd_args[i], vbcd_args[i + 1],
+                   vbcd_args[j], vbcd_args[j + 1]);
+            printf(" ==> %016llx || %016llx\n", dst[0], dst[1]);
+         }
+      }
+   }
+}
+
 /* Vector doubleword-to-int tests, two input args, integer result */
 static void test_av_dint_to_int_two_args (const char* name, test_func_t func,
                                           unused uint32_t test_flags)
@@ -1184,6 +1467,32 @@
 
 }
 
+static void test_av_int_three_args (const char* name, test_func_t func,
+                                    unused uint32_t test_flags)
+{
+
+   unsigned long long * dst;
+   int i,j, k;
+   for (i = 0; i < NB_VDARGS; i+=2) {
+      vec_inA = (vector unsigned long long){ vdargs[i], vdargs[i+1] };
+      for (j = 0; j < NB_VDARGS; j+=2) {
+         vec_inB = (vector unsigned long long){ vdargs[j], vdargs[j+1] };
+         for (k = 0; k < NB_VDARGS; k+=2) {
+            vec_inC = (vector unsigned long long){ vdargs[k], vdargs[k+1] };
+            vec_out = (vector unsigned long long){ 0,0 };
+
+            (*func)();
+            dst  = (unsigned long long*)&vec_out;
+
+            printf("%s: ", name);
+            printf("%016llx @@ %016llx @@ %016llx ", vdargs[i], vdargs[j], vdargs[k]);
+            printf(" ==> %016llx\n", dst[0]);
+            printf("\t%016llx @@ %016llx @@ %016llx ", vdargs[i+1], vdargs[j+1], vdargs[k+1]);
+            printf(" ==> %016llx\n", dst[1]);
+         }
+      }
+   }
+}
 
 
 /* The ALTIVEC_LOOPS and altive_loops defined below are used in do_tests.
@@ -1195,7 +1504,11 @@
    ALTV_DINT,
    ALTV_INT_DRES,
    ALTV_DINT_IRES,
-   ALTV_ONE_INT_DRES
+   ALTV_ONE_INT_DRES,
+   ALTV_DINT_THREE_ARGS,
+   ALTV_DINT_ONE_ARG,
+   ALTV_SHA,
+   ATLV_BCD
 };
 
 static test_loop_t altivec_loops[] = {
@@ -1204,6 +1517,10 @@
    &test_av_wint_two_args_dres,
    &test_av_dint_to_int_two_args,
    &test_av_wint_one_arg_dres,
+   &test_av_int_three_args,
+   &test_av_dint_one_arg,
+   &test_av_dint_one_arg_SHA,
+   &test_av_bcd,
    NULL
 };
 
@@ -1299,6 +1616,26 @@
        "PPC floating point arith insns with two args",
        0x00020102,
    },
+   {
+       tests_aa_ops_three    ,
+       "PPC altivec integer logical insns with three args",
+       0x00060203,
+   },
+   {
+       tests_aa_dbl_ops_one_arg,
+       "PPC altivec one vector input arg, hex result",
+       0x00060201,
+   },
+   {
+       tests_aa_SHA_ops,
+       "PPC altivec SSH insns",
+       0x00040B01,
+   },
+   {
+       tests_aa_bcd_ops,
+       "PPC altivec BCD insns",
+       0x00040B02,
+   },
    { NULL,                   NULL,               0x00000000, },
 };
 
@@ -1374,6 +1711,12 @@
          case PPC_DOUBLE_IN_IRES:
             loop = &altivec_loops[ALTV_DINT_IRES];
             break;
+         case PPC_LOGICAL:
+            if (nb_args == 3)
+               loop = &altivec_loops[ALTV_DINT_THREE_ARGS];
+            else if (nb_args ==1)
+               loop = &altivec_loops[ALTV_DINT_ONE_ARG];
+            break;
          default:
             printf("No altivec test defined for type %x\n", type);
          }
@@ -1386,6 +1729,7 @@
       case PPC_ALTIVEC:
          switch (type) {
          case PPC_ARITH_DRES:
+         {
             switch (nb_args) {
             case 1:
                loop = &altivec_loops[ALTV_ONE_INT_DRES];
@@ -1397,6 +1741,13 @@
                printf("No altivec test defined for number args %d\n", nb_args);
             }
             break;
+         }
+         case PPC_SHA_OR_BCD:
+            if (nb_args == 1)
+               loop = &altivec_loops[ALTV_SHA];
+            else
+               loop = &altivec_loops[ATLV_BCD];
+            break;
          default:
             printf("No altivec test defined for type %x\n", type);
          }