From: Carl Love Date: Tue, 15 Oct 2013 18:13:21 +0000 (+0000) Subject: Power 8 support, phase 5 X-Git-Tag: svn/VALGRIND_3_9_0~45 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=d143dd1f43a5a726a74c4f86d901557bd70e1228;p=thirdparty%2Fvalgrind.git 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 --- diff --git a/memcheck/mc_translate.c b/memcheck/mc_translate.c index 166334308a..a6b2959872 100644 --- a/memcheck/mc_translate.c +++ b/memcheck/mc_translate.c @@ -2709,6 +2709,12 @@ IRAtom* expr2vbits_Triop ( MCEnv* mce, 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 @@ IRAtom* expr2vbits_Binop ( MCEnv* mce, case Iop_Add8x16: case Iop_Mul8x16: case Iop_PolynomialMul8x16: + case Iop_PolynomialMulAdd8x16: return binary8Ix16(mce, vatom1, vatom2); case Iop_QSub16Ux8: @@ -3110,6 +3117,7 @@ IRAtom* expr2vbits_Binop ( MCEnv* mce, case Iop_Add16x8: case Iop_QDMulHi16Sx8: case Iop_QRDMulHi16Sx8: + case Iop_PolynomialMulAdd16x8: return binary16Ix8(mce, vatom1, vatom2); case Iop_Sub32x4: @@ -3132,6 +3140,7 @@ IRAtom* expr2vbits_Binop ( MCEnv* mce, case Iop_Mul32x4: case Iop_QDMulHi32Sx4: case Iop_QRDMulHi32Sx4: + case Iop_PolynomialMulAdd32x4: return binary32Ix4(mce, vatom1, vatom2); case Iop_Sub64x2: @@ -3149,7 +3158,12 @@ IRAtom* expr2vbits_Binop ( MCEnv* mce, 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 @@ IRAtom* expr2vbits_Binop ( MCEnv* mce, 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 @@ IRExpr* expr2vbits_Unop ( MCEnv* mce, IROp op, IRAtom* atom ) 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 85e1d15839..f2379549f8 100644 --- a/memcheck/tests/vbit-test/irops.c +++ b/memcheck/tests/vbit-test/irops.c @@ -751,6 +751,7 @@ static irop_t irops[] = { { 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 @@ static irop_t irops[] = { { 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 78a811a222..5dd38dfb6c 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: 0e0d0e0f => 000000000e0d0e0f 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 - -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 - -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 - -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 - -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 - -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 - -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 +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 + +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 + +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 + +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 + +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 + +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 + +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 05060708 0e0d0e0f 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: 01020304 05060708 090a0b0c 0e0d0e0f ==> 05060708f5f6f7f8 0e0d0e0ffefdfef 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 @@ vupkhsw: f1f2f3f4 f5f6f7f8 f9fafbfc fefdfeff ==> fffffffff1f2f3f4 fffffffff5f6f7 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 96f2318149..2623b3ec2f 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: 0e0d0e0f => 000000000e0d0e0f 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 - -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 - -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 - -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 - -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 - -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 - -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 +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 + +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 + +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 + +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 + +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 + +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 + +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 05060708 0e0d0e0f 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: 01020304 05060708 090a0b0c 0e0d0e0f ==> 05060708f5f6f7f8 0e0d0e0ffefdfef 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 @@ vupkhsw: f1f2f3f4 f5f6f7f8 f9fafbfc fefdfeff ==> fffffffff1f2f3f4 fffffffff5f6f7 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 f1f6b028f1..067800d0b9 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 @@ enum { #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 @@ enum test_flags { 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 @@ static void test_vmrgow (void) __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 @@ static test_t tests_aa_word_ops_two_args_dres[] = { { &test_vmulesw , "vmulesw" }, { &test_vmrgew , "vmrgew" }, { &test_vmrgow , "vmrgow" }, + { &test_vpmsumb , "vpmsumb" }, + { &test_vpmsumh , "vpmsumh" }, + { &test_vpmsumw , "vpmsumw" }, { NULL , NULL } }; @@ -541,9 +722,30 @@ static test_t tests_aa_dbl_ops_two_args[] = { { &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 @@ static void build_vwargs_table (void) 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 @@ static void test_av_dint_two_args (const char* name, test_func_t func, 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_int_ldq_three_regs (const char* name, } +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 @@ enum ALTIVEC_LOOPS { 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 @@ static test_loop_t altivec_loops[] = { &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 @@ static test_table_t all_tests[] = { "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 @@ static void do_tests ( insn_sel_flags_t seln_flags, 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 @@ static void do_tests ( insn_sel_flags_t seln_flags, 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 @@ static void do_tests ( insn_sel_flags_t seln_flags, 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); }