You can subscribe to this list here.
| 2002 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
(1) |
Oct
(122) |
Nov
(152) |
Dec
(69) |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 2003 |
Jan
(6) |
Feb
(25) |
Mar
(73) |
Apr
(82) |
May
(24) |
Jun
(25) |
Jul
(10) |
Aug
(11) |
Sep
(10) |
Oct
(54) |
Nov
(203) |
Dec
(182) |
| 2004 |
Jan
(307) |
Feb
(305) |
Mar
(430) |
Apr
(312) |
May
(187) |
Jun
(342) |
Jul
(487) |
Aug
(637) |
Sep
(336) |
Oct
(373) |
Nov
(441) |
Dec
(210) |
| 2005 |
Jan
(385) |
Feb
(480) |
Mar
(636) |
Apr
(544) |
May
(679) |
Jun
(625) |
Jul
(810) |
Aug
(838) |
Sep
(634) |
Oct
(521) |
Nov
(965) |
Dec
(543) |
| 2006 |
Jan
(494) |
Feb
(431) |
Mar
(546) |
Apr
(411) |
May
(406) |
Jun
(322) |
Jul
(256) |
Aug
(401) |
Sep
(345) |
Oct
(542) |
Nov
(308) |
Dec
(481) |
| 2007 |
Jan
(427) |
Feb
(326) |
Mar
(367) |
Apr
(255) |
May
(244) |
Jun
(204) |
Jul
(223) |
Aug
(231) |
Sep
(354) |
Oct
(374) |
Nov
(497) |
Dec
(362) |
| 2008 |
Jan
(322) |
Feb
(482) |
Mar
(658) |
Apr
(422) |
May
(476) |
Jun
(396) |
Jul
(455) |
Aug
(267) |
Sep
(280) |
Oct
(253) |
Nov
(232) |
Dec
(304) |
| 2009 |
Jan
(486) |
Feb
(470) |
Mar
(458) |
Apr
(423) |
May
(696) |
Jun
(461) |
Jul
(551) |
Aug
(575) |
Sep
(134) |
Oct
(110) |
Nov
(157) |
Dec
(102) |
| 2010 |
Jan
(226) |
Feb
(86) |
Mar
(147) |
Apr
(117) |
May
(107) |
Jun
(203) |
Jul
(193) |
Aug
(238) |
Sep
(300) |
Oct
(246) |
Nov
(23) |
Dec
(75) |
| 2011 |
Jan
(133) |
Feb
(195) |
Mar
(315) |
Apr
(200) |
May
(267) |
Jun
(293) |
Jul
(353) |
Aug
(237) |
Sep
(278) |
Oct
(611) |
Nov
(274) |
Dec
(260) |
| 2012 |
Jan
(303) |
Feb
(391) |
Mar
(417) |
Apr
(441) |
May
(488) |
Jun
(655) |
Jul
(590) |
Aug
(610) |
Sep
(526) |
Oct
(478) |
Nov
(359) |
Dec
(372) |
| 2013 |
Jan
(467) |
Feb
(226) |
Mar
(391) |
Apr
(281) |
May
(299) |
Jun
(252) |
Jul
(311) |
Aug
(352) |
Sep
(481) |
Oct
(571) |
Nov
(222) |
Dec
(231) |
| 2014 |
Jan
(185) |
Feb
(329) |
Mar
(245) |
Apr
(238) |
May
(281) |
Jun
(399) |
Jul
(382) |
Aug
(500) |
Sep
(579) |
Oct
(435) |
Nov
(487) |
Dec
(256) |
| 2015 |
Jan
(338) |
Feb
(357) |
Mar
(330) |
Apr
(294) |
May
(191) |
Jun
(108) |
Jul
(142) |
Aug
(261) |
Sep
(190) |
Oct
(54) |
Nov
(83) |
Dec
(22) |
| 2016 |
Jan
(49) |
Feb
(89) |
Mar
(33) |
Apr
(50) |
May
(27) |
Jun
(34) |
Jul
(53) |
Aug
(53) |
Sep
(98) |
Oct
(206) |
Nov
(93) |
Dec
(53) |
| 2017 |
Jan
(65) |
Feb
(82) |
Mar
(102) |
Apr
(86) |
May
(187) |
Jun
(67) |
Jul
(23) |
Aug
(93) |
Sep
(65) |
Oct
(45) |
Nov
(35) |
Dec
(17) |
| 2018 |
Jan
(26) |
Feb
(35) |
Mar
(38) |
Apr
(32) |
May
(8) |
Jun
(43) |
Jul
(27) |
Aug
(30) |
Sep
(43) |
Oct
(42) |
Nov
(38) |
Dec
(67) |
| 2019 |
Jan
(32) |
Feb
(37) |
Mar
(53) |
Apr
(64) |
May
(49) |
Jun
(18) |
Jul
(14) |
Aug
(53) |
Sep
(25) |
Oct
(30) |
Nov
(49) |
Dec
(31) |
| 2020 |
Jan
(87) |
Feb
(45) |
Mar
(37) |
Apr
(51) |
May
(99) |
Jun
(36) |
Jul
(11) |
Aug
(14) |
Sep
(20) |
Oct
(24) |
Nov
(40) |
Dec
(23) |
| 2021 |
Jan
(14) |
Feb
(53) |
Mar
(85) |
Apr
(15) |
May
(19) |
Jun
(3) |
Jul
(14) |
Aug
(1) |
Sep
(57) |
Oct
(73) |
Nov
(56) |
Dec
(22) |
| 2022 |
Jan
(3) |
Feb
(22) |
Mar
(6) |
Apr
(55) |
May
(46) |
Jun
(39) |
Jul
(15) |
Aug
(9) |
Sep
(11) |
Oct
(34) |
Nov
(20) |
Dec
(36) |
| 2023 |
Jan
(79) |
Feb
(41) |
Mar
(99) |
Apr
(169) |
May
(48) |
Jun
(16) |
Jul
(16) |
Aug
(57) |
Sep
(19) |
Oct
|
Nov
|
Dec
|
| S | M | T | W | T | F | S |
|---|---|---|---|---|---|---|
|
|
|
1
(25) |
2
(33) |
3
(25) |
4
(27) |
5
(17) |
|
6
(3) |
7
(18) |
8
(16) |
9
(21) |
10
(14) |
11
(17) |
12
(11) |
|
13
(3) |
14
(24) |
15
(19) |
16
(13) |
17
(16) |
18
(29) |
19
(19) |
|
20
(17) |
21
(27) |
22
(21) |
23
(32) |
24
(19) |
25
(24) |
26
(16) |
|
27
(2) |
28
(21) |
29
(20) |
30
(20) |
31
(2) |
|
|
|
From: <sv...@va...> - 2013-10-15 21:05:08
|
Author: philippe
Date: Tue Oct 15 21:04:56 2013
New Revision: 13648
Log:
SIGSEGV/SIGBUS specific handling on s390, to cope with kernel peculiarity
On s390, the linux kernel does not deliver the exact address that
caused a SEGV but rather this address rounded down to a page boundary.
Also, old kernels do not deliver the address that caused a SIGBUS,
but deliver 0.
So, on s390, handle SIGSEGV and SIGBUG by always skipping one page
starting from the current value of the ptr scanning position.
As we need a correct value of ptr on this platform in the longjmp-ed
code, ptr is marked as volatile.
Modified:
trunk/memcheck/mc_leakcheck.c
Modified: trunk/memcheck/mc_leakcheck.c
==============================================================================
--- trunk/memcheck/mc_leakcheck.c (original)
+++ trunk/memcheck/mc_leakcheck.c Tue Oct 15 21:04:56 2013
@@ -945,6 +945,11 @@
end portions of the block if they are not aligned on sizeof(Addr):
These cannot be a valid pointer, and calls to MC_(is_valid_aligned_word)
will assert for a non aligned address. */
+#if defined(VGA_s390x)
+ // Define ptr as volatile, as on this platform, the value of ptr
+ // is read in code executed via a longjmp.
+ volatile
+#endif
Addr ptr = VG_ROUNDUP(start, sizeof(Addr));
const Addr end = VG_ROUNDDN(start+len, sizeof(Addr));
vki_sigset_t sigmask;
@@ -993,10 +998,22 @@
// We need to restore the signal mask, because we were
// longjmped out of a signal handler.
VG_(sigprocmask)(VKI_SIG_SETMASK, &sigmask, NULL);
+# if defined(VGA_s390x)
+ // For a SIGSEGV, s390 delivers the page address of the bad address.
+ // For a SIGBUS, old s390 kernels deliver a NULL address.
+ // bad_scanned_addr can thus not be used.
+ // So, on this platform, we always skip a full page from ptr.
+ // The below implies to mark ptr as volatile, as we read the value
+ // after a longjmp to here.
+ lc_sig_skipped_szB += VKI_PAGE_SIZE;
+ ptr = ptr + VKI_PAGE_SIZE; // Unaddressable, - skip it.
+# else
+ // On other platforms, just skip one Addr.
lc_sig_skipped_szB += sizeof(Addr);
tl_assert(bad_scanned_addr >= VG_ROUNDUP(start, sizeof(Addr)));
tl_assert(bad_scanned_addr < VG_ROUNDDN(start+len, sizeof(Addr)));
ptr = bad_scanned_addr + sizeof(Addr); // Unaddressable, - skip it.
+#endif
}
while (ptr < end) {
Addr addr;
|
|
From: <sv...@va...> - 2013-10-15 19:10:22
|
Author: cborntra
Date: Tue Oct 15 19:10:11 2013
New Revision: 13647
Log:
remove old broken testcase for s390
Modified:
trunk/none/tests/s390x/Makefile.am
trunk/none/tests/s390x/test_clone.c
trunk/none/tests/s390x/test_clone.stderr.exp
trunk/none/tests/s390x/test_clone.stdout.exp
trunk/none/tests/s390x/test_clone.vgtest
Modified: trunk/none/tests/s390x/Makefile.am
==============================================================================
--- trunk/none/tests/s390x/Makefile.am (original)
+++ trunk/none/tests/s390x/Makefile.am Tue Oct 15 19:10:11 2013
@@ -11,7 +11,7 @@
ex_sig ex_clone cu14 cu14_1 cu41 fpconv ecag fpext fpext_warn \
rounding-1 rounding-2 rounding-3 rounding-4 rounding-5 bfp-1 \
bfp-2 bfp-3 bfp-4 srnm srnmb comp-1 comp-2 exrl tmll tm stmg \
- ex clst mvc test_clone test_fork test_sig rounding-6 \
+ ex clst mvc test_fork test_sig rounding-6 \
spechelper-alr spechelper-algr \
spechelper-slr spechelper-slgr \
spechelper-cr spechelper-clr \
|
Author: carll
Date: Tue Oct 15 18:13:21 2013
New Revision: 13646
Log:
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
Modified:
trunk/memcheck/mc_translate.c
trunk/memcheck/tests/vbit-test/irops.c
trunk/none/tests/ppc32/jm_vec_isa_2_07.stdout.exp
trunk/none/tests/ppc64/jm_vec_isa_2_07.stdout.exp
trunk/none/tests/ppc64/test_isa_2_07_part1.c
Modified: trunk/memcheck/mc_translate.c
==============================================================================
--- trunk/memcheck/mc_translate.c (original)
+++ trunk/memcheck/mc_translate.c Tue Oct 15 18:13:21 2013
@@ -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:
Modified: trunk/memcheck/tests/vbit-test/irops.c
==============================================================================
--- trunk/memcheck/tests/vbit-test/irops.c (original)
+++ trunk/memcheck/tests/vbit-test/irops.c Tue Oct 15 18:13:21 2013
@@ -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), },
};
Modified: trunk/none/tests/ppc32/jm_vec_isa_2_07.stdout.exp
==============================================================================
--- trunk/none/tests/ppc32/jm_vec_isa_2_07.stdout.exp (original)
+++ trunk/none/tests/ppc32/jm_vec_isa_2_07.stdout.exp Tue Oct 15 18:13:21 2013
@@ -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
-
-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 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
Modified: trunk/none/tests/ppc64/jm_vec_isa_2_07.stdout.exp
==============================================================================
--- trunk/none/tests/ppc64/jm_vec_isa_2_07.stdout.exp (original)
+++ trunk/none/tests/ppc64/jm_vec_isa_2_07.stdout.exp Tue Oct 15 18:13:21 2013
@@ -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
-
-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 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 ==> 000000150...
[truncated message content] |
|
From: <sv...@va...> - 2013-10-15 18:11:32
|
Author: carll
Date: Tue Oct 15 18:11:20 2013
New Revision: 2789
Log:
Power 8 support, phase 5
This commit adds support for the following instructions for doing
various arithmetic, bit transformation, cipher, count, logical,
and SHA operations.
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 following Iops were added to support the above instructions:
Iop_BCDAdd, Iop_BCDSub,
Iop_PolynomialMulAdd8x16, Iop_PolynomialMulAdd16x8,
Iop_PolynomialMulAdd32x4, Iop_PolynomialMulAdd64x2,
Iop_CipherV128, Iop_CipherLV128, Iop_CipherSV128,
Iop_NCipherV128, Iop_NCipherLV128,
Iop_SHA512, Iop_SHA256, Iop_Clz64x2
The patch is for Bugzilla 325628
Modified:
trunk/priv/guest_ppc_toIR.c
trunk/priv/host_ppc_defs.c
trunk/priv/host_ppc_defs.h
trunk/priv/host_ppc_isel.c
trunk/priv/ir_defs.c
trunk/pub/libvex_ir.h
Modified: trunk/priv/guest_ppc_toIR.c
==============================================================================
--- trunk/priv/guest_ppc_toIR.c (original)
+++ trunk/priv/guest_ppc_toIR.c Tue Oct 15 18:11:20 2013
@@ -791,6 +791,16 @@
assign( *t0, unop(Iop_64to32, mkexpr(lo64)) );
}
+static IRExpr* mkV128from32( IRTemp t3, IRTemp t2,
+ IRTemp t1, IRTemp t0 )
+{
+ return
+ binop( Iop_64HLtoV128,
+ binop(Iop_32HLto64, mkexpr(t3), mkexpr(t2)),
+ binop(Iop_32HLto64, mkexpr(t1), mkexpr(t0))
+ );
+}
+
/* Signed saturating narrow 64S to 32 */
static IRExpr* mkQNarrow64Sto32 ( IRExpr* t64 )
@@ -1364,12 +1374,29 @@
}
}
+typedef enum {
+ _placeholder0,
+ _placeholder1,
+ _placeholder2,
+ BYTE,
+ HWORD,
+ WORD,
+ DWORD
+} _popcount_data_type;
+
/* Generate an IR sequence to do a popcount operation on the supplied
IRTemp, and return a new IRTemp holding the result. 'ty' may be
Ity_I32 or Ity_I64 only. */
-static IRTemp gen_POPCOUNT ( IRType ty, IRTemp src, Bool byte_count )
+static IRTemp gen_POPCOUNT ( IRType ty, IRTemp src, _popcount_data_type data_type )
{
- Int i, shift[6], max;
+ /* Do count across 2^data_type bits,
+ byte: data_type = 3
+ half word: data_type = 4
+ word: data_type = 5
+ double word: data_type = 6 (not supported for 32-bit type)
+ */
+ Int shift[6];
+ _popcount_data_type idx, i;
IRTemp mask[6];
IRTemp old = IRTemp_INVALID;
IRTemp nyu = IRTemp_INVALID;
@@ -1377,17 +1404,10 @@
vassert(ty == Ity_I64 || ty == Ity_I32);
if (ty == Ity_I32) {
- if (byte_count)
- /* Return the population count across each byte not across the entire
- * 32-bit value. Stop after third iteration.
- */
- max = 3;
- else
- max = 5;
- for (i = 0; i < 5; i++) {
- mask[i] = newTemp(ty);
- shift[i] = 1 << i;
+ for (idx = 0; idx < WORD; idx++) {
+ mask[idx] = newTemp(ty);
+ shift[idx] = 1 << idx;
}
assign(mask[0], mkU32(0x55555555));
assign(mask[1], mkU32(0x33333333));
@@ -1395,7 +1415,7 @@
assign(mask[3], mkU32(0x00FF00FF));
assign(mask[4], mkU32(0x0000FFFF));
old = src;
- for (i = 0; i < max; i++) {
+ for (i = 0; i < data_type; i++) {
nyu = newTemp(ty);
assign(nyu,
binop(Iop_Add32,
@@ -1409,16 +1429,11 @@
}
return nyu;
}
+
// else, ty == Ity_I64
- if (byte_count)
- /* Return the population count across each byte not across the entire
- * 64-bit value. Stop after third iteration.
- */
- max = 3;
- else
- max = 6;
+ vassert(mode64);
- for (i = 0; i < 6; i++) {
+ for (i = 0; i < DWORD; i++) {
mask[i] = newTemp( Ity_I64 );
shift[i] = 1 << i;
}
@@ -1429,7 +1444,7 @@
assign( mask[4], mkU64( 0x0000FFFF0000FFFFULL ) );
assign( mask[5], mkU64( 0x00000000FFFFFFFFULL ) );
old = src;
- for (i = 0; i < max; i++) {
+ for (i = 0; i < data_type; i++) {
nyu = newTemp( Ity_I64 );
assign( nyu,
binop( Iop_Add64,
@@ -1442,6 +1457,60 @@
return nyu;
}
+/* Special purpose population count function for
+ * vpopcntd in 32-bit mode.
+ */
+static IRTemp gen_vpopcntd_mode32 ( IRTemp src1, IRTemp src2 )
+{
+ Int i, shift[6];
+ IRTemp mask[6];
+ IRTemp old = IRTemp_INVALID;
+ IRTemp nyu1 = IRTemp_INVALID;
+ IRTemp nyu2 = IRTemp_INVALID;
+ IRTemp retval = newTemp(Ity_I64);
+
+ vassert(!mode64);
+
+ for (i = 0; i < WORD; i++) {
+ mask[i] = newTemp(Ity_I32);
+ shift[i] = 1 << i;
+ }
+ assign(mask[0], mkU32(0x55555555));
+ assign(mask[1], mkU32(0x33333333));
+ assign(mask[2], mkU32(0x0F0F0F0F));
+ assign(mask[3], mkU32(0x00FF00FF));
+ assign(mask[4], mkU32(0x0000FFFF));
+ old = src1;
+ for (i = 0; i < WORD; i++) {
+ nyu1 = newTemp(Ity_I32);
+ assign(nyu1,
+ binop(Iop_Add32,
+ binop(Iop_And32,
+ mkexpr(old),
+ mkexpr(mask[i])),
+ binop(Iop_And32,
+ binop(Iop_Shr32, mkexpr(old), mkU8(shift[i])),
+ mkexpr(mask[i]))));
+ old = nyu1;
+ }
+
+ old = src2;
+ for (i = 0; i < WORD; i++) {
+ nyu2 = newTemp(Ity_I32);
+ assign(nyu2,
+ binop(Iop_Add32,
+ binop(Iop_And32,
+ mkexpr(old),
+ mkexpr(mask[i])),
+ binop(Iop_And32,
+ binop(Iop_Shr32, mkexpr(old), mkU8(shift[i])),
+ mkexpr(mask[i]))));
+ old = nyu2;
+ }
+ assign(retval, unop(Iop_32Uto64, binop(Iop_Add32, mkexpr(nyu1), mkexpr(nyu2))));
+ return retval;
+}
+
// ROTL(src32/64, rot_amt5/6)
static IRExpr* /* :: Ity_I32/64 */ ROTL ( IRExpr* src,
@@ -4143,7 +4212,7 @@
case 0x1FA: // popcntd (population count doubleword
{
DIP("popcntd r%u,r%u\n", rA_addr, rS_addr);
- IRTemp result = gen_POPCOUNT(ty, rS, False);
+ IRTemp result = gen_POPCOUNT(ty, rS, DWORD);
putIReg( rA_addr, mkexpr(result) );
return True;
}
@@ -4156,11 +4225,11 @@
IRTemp argHi = newTemp(Ity_I32);
assign(argLo, unop(Iop_64to32, mkexpr(rS)));
assign(argHi, unop(Iop_64HIto32, mkexpr(rS)));
- resultLo = gen_POPCOUNT(Ity_I32, argLo, False);
- resultHi = gen_POPCOUNT(Ity_I32, argHi, False);
+ resultLo = gen_POPCOUNT(Ity_I32, argLo, WORD);
+ resultHi = gen_POPCOUNT(Ity_I32, argHi, WORD);
putIReg( rA_addr, binop(Iop_32HLto64, mkexpr(resultHi), mkexpr(resultLo)));
} else {
- IRTemp result = gen_POPCOUNT(ty, rS, False);
+ IRTemp result = gen_POPCOUNT(ty, rS, WORD);
putIReg( rA_addr, mkexpr(result) );
}
return True;
@@ -4175,12 +4244,12 @@
IRTemp argHi = newTemp(Ity_I32);
assign(argLo, unop(Iop_64to32, mkexpr(rS)));
assign(argHi, unop(Iop_64HIto32, mkexpr(rS)));
- resultLo = gen_POPCOUNT(Ity_I32, argLo, True);
- resultHi = gen_POPCOUNT(Ity_I32, argHi, True);
+ resultLo = gen_POPCOUNT(Ity_I32, argLo, BYTE);
+ resultHi = gen_POPCOUNT(Ity_I32, argHi, BYTE);
putIReg( rA_addr, binop(Iop_32HLto64, mkexpr(resultHi),
mkexpr(resultLo)));
} else {
- IRTemp result = gen_POPCOUNT(ty, rS, True);
+ IRTemp result = gen_POPCOUNT(ty, rS, BYTE);
putIReg( rA_addr, mkexpr(result) );
}
return True;
@@ -13201,6 +13270,167 @@
return True;
}
+/*
+ * VSX vector Population Count
+ */
+static Bool
+dis_vxv_population_count ( UInt theInstr, UInt opc2 )
+{
+ UChar vRB_addr = ifieldRegB(theInstr);
+ UChar vRT_addr = ifieldRegDS(theInstr);
+ UChar opc1 = ifieldOPC( theInstr );
+ IRTemp vB = newTemp(Ity_V128);
+ assign( vB, getVReg(vRB_addr));
+
+ if (opc1 != 0x4) {
+ vex_printf( "dis_vxv_population_count(ppc)(instr)\n" );
+ return False;
+ }
+
+ switch (opc2) {
+ case 0x702: // vclzb
+ DIP("vclzb v%d,v%d\n", vRT_addr, vRB_addr);
+ putVReg( vRT_addr, unop(Iop_Clz8Sx16, mkexpr( vB ) ) );
+ break;
+
+ case 0x742: // vclzh
+ DIP("vclzh v%d,v%d\n", vRT_addr, vRB_addr);
+ putVReg( vRT_addr, unop(Iop_Clz16Sx8, mkexpr( vB ) ) );
+ break;
+
+ case 0x782: // vclzw
+ DIP("vclzw v%d,v%d\n", vRT_addr, vRB_addr);
+ putVReg( vRT_addr, unop(Iop_Clz32Sx4, mkexpr( vB ) ) );
+ break;
+
+ case 0x7C2: // vclzd
+ DIP("vclzd v%d,v%d\n", vRT_addr, vRB_addr);
+ putVReg( vRT_addr, unop(Iop_Clz64x2, mkexpr( vB ) ) );
+ break;
+
+ case 0x703: // vpopcntb
+ {
+ /* Break vector into 32-bit words and do the population count
+ * on byte in the words
+ */
+ IRType ty = Ity_I32;
+ IRTemp bits0_31, bits32_63, bits64_95, bits96_127;
+ bits0_31 = bits32_63 = bits64_95 = bits96_127 = IRTemp_INVALID;
+ IRTemp cnt_bits0_31, cnt_bits32_63, cnt_bits64_95, cnt_bits96_127;
+ cnt_bits0_31 = cnt_bits32_63 = cnt_bits64_95 = cnt_bits96_127 = IRTemp_INVALID;
+
+ DIP("vpopcntb v%d,v%d\n", vRT_addr, vRB_addr);
+ breakV128to4x32(mkexpr( vB), &bits96_127, &bits64_95, &bits32_63, &bits0_31 );
+ cnt_bits0_31 = gen_POPCOUNT(ty, bits0_31, BYTE);
+ cnt_bits32_63 = gen_POPCOUNT(ty, bits32_63, BYTE);
+ cnt_bits64_95 = gen_POPCOUNT(ty, bits64_95, BYTE);
+ cnt_bits96_127 = gen_POPCOUNT(ty, bits96_127, BYTE);
+
+ putVReg( vRT_addr, mkV128from32(cnt_bits96_127, cnt_bits64_95,
+ cnt_bits32_63, cnt_bits0_31) );
+ break;
+ }
+
+ case 0x743: // vpopcnth
+ {
+ /* Break vector into 32-bit words and do the population count
+ * for each half word
+ */
+ IRType ty = Ity_I32;
+ IRTemp bits0_31, bits32_63, bits64_95, bits96_127;
+ bits0_31 = bits32_63 = bits64_95 = bits96_127 = IRTemp_INVALID;
+ IRTemp cnt_bits0_31, cnt_bits32_63, cnt_bits64_95, cnt_bits96_127;
+ cnt_bits0_31 = cnt_bits32_63 = cnt_bits64_95 = cnt_bits96_127 = IRTemp_INVALID;
+
+ DIP("vpopcnth v%d,v%d\n", vRT_addr, vRB_addr);
+ breakV128to4x32(mkexpr( vB), &bits96_127, &bits64_95, &bits32_63, &bits0_31 );
+
+ cnt_bits0_31 = gen_POPCOUNT(ty, bits0_31, HWORD);
+ cnt_bits32_63 = gen_POPCOUNT(ty, bits32_63, HWORD);
+ cnt_bits64_95 = gen_POPCOUNT(ty, bits64_95, HWORD);
+ cnt_bits96_127 = gen_POPCOUNT(ty, bits96_127, HWORD);
+
+ putVReg( vRT_addr, mkV128from32(cnt_bits96_127, cnt_bits64_95,
+ cnt_bits32_63, cnt_bits0_31) );
+ break;
+ }
+
+ case 0x783: // vpopcntw
+ {
+ /* Break vector into 32-bit words and do the population count
+ * on each word.
+ */
+ IRType ty = Ity_I32;
+ IRTemp bits0_31, bits32_63, bits64_95, bits96_127;
+ bits0_31 = bits32_63 = bits64_95 = bits96_127 = IRTemp_INVALID;
+ IRTemp cnt_bits0_31, cnt_bits32_63, cnt_bits64_95, cnt_bits96_127;
+ cnt_bits0_31 = cnt_bits32_63 = cnt_bits64_95 = cnt_bits96_127 = IRTemp_INVALID;
+
+ DIP("vpopcntw v%d,v%d\n", vRT_addr, vRB_addr);
+ breakV128to4x32(mkexpr( vB), &bits96_127, &bits64_95, &bits32_63, &bits0_31 );
+
+ cnt_bits0_31 = gen_POPCOUNT(ty, bits0_31, WORD);
+ cnt_bits32_63 = gen_POPCOUNT(ty, bits32_63, WORD);
+ cnt_bits64_95 = gen_POPCOUNT(ty, bits64_95, WORD);
+ cnt_bits96_127 = gen_POPCOUNT(ty, bits96_127, WORD);
+
+ putVReg( vRT_addr, mkV128from32(cnt_bits96_127, cnt_bits64_95,
+ cnt_bits32_63, cnt_bits0_31) );
+ break;
+ }
+
+ case 0x7C3: // vpopcntd
+ {
+ if (mode64) {
+ /* Break vector into 64-bit double words and do the population count
+ * on each double word.
+ */
+ IRType ty = Ity_I64;
+ IRTemp bits0_63 = newTemp(Ity_I64);
+ IRTemp bits64_127 = newTemp(Ity_I64);
+ IRTemp cnt_bits0_63 = newTemp(Ity_I64);
+ IRTemp cnt_bits64_127 = newTemp(Ity_I64);
+
+ DIP("vpopcntd v%d,v%d\n", vRT_addr, vRB_addr);
+
+ assign(bits0_63, unop( Iop_V128to64, mkexpr( vB ) ) );
+ assign(bits64_127, unop( Iop_V128HIto64, mkexpr( vB ) ) );
+ cnt_bits0_63 = gen_POPCOUNT(ty, bits0_63, DWORD);
+ cnt_bits64_127 = gen_POPCOUNT(ty, bits64_127, DWORD);
+
+ putVReg( vRT_addr, binop( Iop_64HLtoV128,
+ mkexpr( cnt_bits64_127 ),
+ mkexpr( cnt_bits0_63 ) ) );
+ } else {
+ /* Break vector into 32-bit words and do the population count
+ * on each doubleword.
+ */
+ IRTemp bits0_31, bits32_63, bits64_95, bits96_127;
+ bits0_31 = bits32_63 = bits64_95 = bits96_127 = IRTemp_INVALID;
+ IRTemp cnt_bits0_63 = newTemp(Ity_I64);
+ IRTemp cnt_bits64_127 = newTemp(Ity_I64);
+
+ DIP("vpopcntd v%d,v%d\n", vRT_addr, vRB_addr);
+ breakV128to4x32(mkexpr( vB), &bits96_127, &bits64_95, &bits32_63, &bits0_31 );
+
+ cnt_bits0_63 = gen_vpopcntd_mode32(bits0_31, bits32_63);
+ cnt_bits64_127 = gen_vpopcntd_mode32(bits64_95, bits96_127);
+
+ putVReg( vRT_addr, binop( Iop_64HLtoV128,
+ mkexpr( cnt_bits64_127 ),
+ mkexpr( cnt_bits0_63 ) ) );
+ }
+ break;
+ }
+
+ default:
+ vex_printf("dis_vxv_population_count(ppc)(opc2)\n");
+ return False;
+ break;
+ }
+ return True;
+}
+
typedef enum {
PPC_CMP_EQ = 2,
PPC_CMP_GT = 4,
@@ -15925,6 +16155,27 @@
unop(Iop_NotV128, binop(Iop_OrV128, mkexpr(vA), mkexpr(vB))) );
break;
+ case 0x544: // vorc (vA Or'd with complement of vb)
+ DIP("vorc v%d,v%d,v%d\n", vD_addr, vA_addr, vB_addr);
+ putVReg( vD_addr, binop( Iop_OrV128,
+ mkexpr( vA ),
+ unop( Iop_NotV128, mkexpr( vB ) ) ) );
+ break;
+
+ case 0x584: // vnand (Nand)
+ DIP("vnand v%d,v%d,v%d\n", vD_addr, vA_addr, vB_addr);
+ putVReg( vD_addr, unop( Iop_NotV128,
+ binop(Iop_AndV128, mkexpr( vA ),
+ mkexpr( vB ) ) ) );
+ break;
+
+ case 0x684: // veqv (complemented XOr)
+ DIP("veqv v%d,v%d,v%d\n", vD_addr, vA_addr, vB_addr);
+ putVReg( vD_addr, unop( Iop_NotV128,
+ binop( Iop_XorV128, mkexpr( vA ),
+ mkexpr( vB ) ) ) );
+ break;
+
default:
vex_printf("dis_av_logic(ppc)(opc2=0x%x)\n", opc2);
return False;
@@ -16309,6 +16560,60 @@
}
/*
+ AltiVec Polynomial Multiply-Sum Instructions
+*/
+static Bool dis_av_polymultarith ( UInt theInstr )
+{
+ /* VA-Form */
+ UChar opc1 = ifieldOPC(theInstr);
+ UChar vD_addr = ifieldRegDS(theInstr);
+ UChar vA_addr = ifieldRegA(theInstr);
+ UChar vB_addr = ifieldRegB(theInstr);
+ UChar vC_addr = ifieldRegC(theInstr);
+ UInt opc2 = IFIELD(theInstr, 0, 11);
+ IRTemp vA = newTemp(Ity_V128);
+ IRTemp vB = newTemp(Ity_V128);
+ IRTemp vC = newTemp(Ity_V128);
+
+ assign( vA, getVReg(vA_addr));
+ assign( vB, getVReg(vB_addr));
+ assign( vC, getVReg(vC_addr));
+
+ if (opc1 != 0x4) {
+ vex_printf("dis_av_polymultarith(ppc)(instr)\n");
+ return False;
+ }
+
+ switch (opc2) {
+ /* Polynomial Multiply-Add */
+ case 0x408: // vpmsumb Vector Polynomial Multipy-sum Byte
+ DIP("vpmsumb v%d,v%d,v%d\n", vD_addr, vA_addr, vB_addr);
+ putVReg( vD_addr, binop(Iop_PolynomialMulAdd8x16,
+ mkexpr(vA), mkexpr(vB)) );
+ break;
+ case 0x448: // vpmsumd Vector Polynomial Multipy-sum Double Word
+ DIP("vpmsumd v%d,v%d,v%d\n", vD_addr, vA_addr, vB_addr);
+ putVReg( vD_addr, binop(Iop_PolynomialMulAdd64x2,
+ mkexpr(vA), mkexpr(vB)) );
+ break;
+ case 0x488: // vpmsumw Vector Polynomial Multipy-sum Word
+ DIP("vpmsumw v%d,v%d,v%d\n", vD_addr, vA_addr, vB_addr);
+ putVReg( vD_addr, binop(Iop_PolynomialMulAdd32x4,
+ mkexpr(vA), mkexpr(vB)) );
+ break;
+ case 0x4C8: // vpmsumh Vector Polynomial Multipy-sum Half Word
+ DIP("vpmsumh v%d,v%d,v%d\n", vD_addr, vA_addr, vB_addr);
+ putVReg( vD_addr, binop(Iop_PolynomialMulAdd16x8,
+ mkexpr(vA), mkexpr(vB)) );
+ break;
+ default:
+ vex_printf("dis_av_polymultarith(ppc)(opc2=0x%x)\n", opc2);
+ return False;
+ }
+ return True;
+}
+
+/*
AltiVec Shift/Rotate Instructions
*/
static Bool dis_av_shift ( UInt theInstr )
@@ -16550,7 +16855,25 @@
binop(Iop_ShlV128, mkexpr(vA), mkU8(SHB_uimm4*8)),
binop(Iop_ShrV128, mkexpr(vB), mkU8((16-SHB_uimm4)*8))) );
return True;
+ case 0x2D: { // vpermxor (Vector Permute and Exclusive-OR)
+ IRTemp a_perm = newTemp(Ity_V128);
+ IRTemp b_perm = newTemp(Ity_V128);
+ IRTemp vrc_a = newTemp(Ity_V128);
+ IRTemp vrc_b = newTemp(Ity_V128);
+ /* IBM index is 0:7, Change index value to index 7:0 */
+ assign( vrc_b, binop( Iop_AndV128, mkexpr( vC ),
+ unop( Iop_Dup8x16, mkU8( 0xF ) ) ) );
+ assign( vrc_a, binop( Iop_ShrV128,
+ binop( Iop_AndV128, mkexpr( vC ),
+ unop( Iop_Dup8x16, mkU8( 0xF0 ) ) ),
+ mkU8 ( 4 ) ) );
+ assign( a_perm, binop( Iop_Perm8x16, mkexpr( vA ), mkexpr( vrc_a ) ) );
+ assign( b_perm, binop( Iop_Perm8x16, mkexpr( vB ), mkexpr( vrc_b ) ) );
+ putVReg( vD_addr, binop( Iop_XorV128,
+ mkexpr( a_perm ), mkexpr( b_perm) ) );
+ return True;
+ }
default:
break; // Fall through...
}
@@ -16989,6 +17312,158 @@
return True;
}
+/*
+ AltiVec Cipher Instructions
+*/
+static Bool dis_av_cipher ( UInt theInstr )
+{
+ /* VX-Form */
+ UChar opc1 = ifieldOPC(theInstr);
+ UChar vD_addr = ifieldRegDS(theInstr);
+ UChar vA_addr = ifieldRegA(theInstr);
+ UChar vB_addr = ifieldRegB(theInstr);
+ UInt opc2 = IFIELD( theInstr, 0, 11 );
+
+ IRTemp vA = newTemp(Ity_V128);
+ IRTemp vB = newTemp(Ity_V128);
+ assign( vA, getVReg(vA_addr));
+ assign( vB, getVReg(vB_addr));
+
+ if (opc1 != 0x4) {
+ vex_printf("dis_av_cipher(ppc)(instr)\n");
+ return False;
+ }
+ switch (opc2) {
+ case 0x508: // vcipher (Vector Inverser Cipher)
+ DIP("vcipher v%d,v%d,v%d\n", vD_addr, vA_addr, vB_addr);
+ putVReg( vD_addr,
+ binop(Iop_CipherV128, mkexpr(vA), mkexpr(vB)) );
+ return True;
+
+ case 0x509: // vcipherlast (Vector Inverser Cipher Last)
+ DIP("vcipherlast v%d,v%d,v%d\n", vD_addr, vA_addr, vB_addr);
+ putVReg( vD_addr,
+ binop(Iop_CipherLV128, mkexpr(vA), mkexpr(vB)) );
+ return True;
+
+ case 0x548: // vncipher (Vector Inverser Cipher)
+ DIP("vncipher v%d,v%d,v%d\n", vD_addr, vA_addr, vB_addr);
+ putVReg( vD_addr,
+ binop(Iop_NCipherV128, mkexpr(vA), mkexpr(vB)) );
+ return True;
+
+ case 0x549: // vncipherlast (Vector Inverser Cipher Last)
+ DIP("vncipherlast v%d,v%d,v%d\n", vD_addr, vA_addr, vB_addr);
+ putVReg( vD_addr,
+ binop(Iop_NCipherLV128, mkexpr(vA), mkexpr(vB)) );
+ return True;
+
+ case 0x5C8: /* vsbox (Vector SubBytes, this does the cipher
+ * subBytes transform)
+ */
+ DIP("vsbox v%d,v%d\n", vD_addr, vA_addr);
+ putVReg( vD_addr,
+ unop(Iop_CipherSV128, mkexpr(vA) ) );
+ return True;
+
+ default:
+ vex_printf("dis_av_cipher(ppc)(opc2)\n");
+ return False;
+ }
+ return True;
+}
+
+/*
+ AltiVec Secure Hash Instructions
+*/
+static Bool dis_av_hash ( UInt theInstr )
+{
+ /* VX-Form */
+ UChar opc1 = ifieldOPC(theInstr);
+ UChar vRT_addr = ifieldRegDS(theInstr);
+ UChar vRA_addr = ifieldRegA(theInstr);
+ UChar s_field = IFIELD( theInstr, 11, 5 ); // st and six field
+ UChar st = IFIELD( theInstr, 15, 1 ); // st
+ UChar six = IFIELD( theInstr, 11, 4 ); // six field
+ UInt opc2 = IFIELD( theInstr, 0, 11 );
+
+ IRTemp vA = newTemp(Ity_V128);
+ IRTemp dst = newTemp(Ity_V128);
+ assign( vA, getVReg(vRA_addr));
+
+ if (opc1 != 0x4) {
+ vex_printf("dis_av_hash(ppc)(instr)\n");
+ return False;
+ }
+
+ switch (opc2) {
+ case 0x682: // vshasigmaw
+ DIP("vshasigmaw v%d,v%d,%u,%u\n", vRT_addr, vRA_addr, st, six);
+ assign( dst, binop( Iop_SHA256, mkexpr( vA ), mkU8( s_field) ) );
+ putVReg( vRT_addr, mkexpr(dst));
+ return True;
+
+ case 0x6C2: // vshasigmad,
+ DIP("vshasigmad v%d,v%d,%u,%u\n", vRT_addr, vRA_addr, st, six);
+ putVReg( vRT_addr, binop( Iop_SHA512, mkexpr( vA ), mkU8( s_field) ) );
+ return True;
+
+ default:
+ vex_printf("dis_av_hash(ppc)(opc2)\n");
+ return False;
+ }
+ return True;
+}
+
+/*
+ AltiVec BCD Arithmetic instructions.
+ These instructions modify CR6 for various conditions in the result,
+ including when an overflow occurs. We could easily detect all conditions
+ except when an overflow occurs. But since we can't be 100% accurate
+ in our emulation of CR6, it seems best to just not support it all.
+*/
+static Bool dis_av_bcd ( UInt theInstr )
+{
+ /* VX-Form */
+ UChar opc1 = ifieldOPC(theInstr);
+ UChar vRT_addr = ifieldRegDS(theInstr);
+ UChar vRA_addr = ifieldRegA(theInstr);
+ UChar vRB_addr = ifieldRegB(theInstr);
+ UChar ps = IFIELD( theInstr, 9, 1 );
+ UInt opc2 = IFIELD( theInstr, 0, 9 );
+
+ IRTemp vA = newTemp(Ity_V128);
+ IRTemp vB = newTemp(Ity_V128);
+ IRTemp dst = newTemp(Ity_V128);
+ assign( vA, getVReg(vRA_addr));
+ assign( vB, getVReg(vRB_addr));
+
+ if (opc1 != 0x4) {
+ vex_printf("dis_av_bcd(ppc)(instr)\n");
+ return False;
+ }
+
+ switch (opc2) {
+ case 0x1: // bcdadd
+ DIP("bcdadd. v%d,v%d,v%d,%u\n", vRT_addr, vRA_addr, vRB_addr, ps);
+ assign( dst, triop( Iop_BCDAdd, mkexpr( vA ),
+ mkexpr( vB ), mkU8( ps ) ) );
+ putVReg( vRT_addr, mkexpr(dst));
+ return True;
+
+ case 0x41: // bcdsub
+ DIP("bcdsub. v%d,v%d,v%d,%u\n", vRT_addr, vRA_addr, vRB_addr, ps);
+ assign( dst, triop( Iop_BCDSub, mkexpr( vA ),
+ mkexpr( vB ), mkU8( ps ) ) );
+ putVReg( vRT_addr, mkexpr(dst));
+ return True;
+
+ default:
+ vex_printf("dis_av_bcd(ppc)(opc2)\n");
+ return False;
+ }
+ return True;
+}
/*
AltiVec Floating Point Arithmetic Instructions
@@ -18822,6 +19297,11 @@
if (dis_av_permute( theInstr )) goto decode_success;
goto decode_failure;
+ case 0x2D: // vpermxor
+ if (!allow_isa_2_07) goto decode_noP8;
+ if (dis_av_permute( theInstr )) goto decode_success;
+ goto decode_failure;
+
/* AV Floating Point Mult-Add/Sub */
case 0x2E: case 0x2F: // vmaddfp, vnmsubfp
if (!allow_V) goto decode_noV;
@@ -18832,6 +19312,18 @@
break; // Fall through...
}
+ opc2 = IFIELD(theInstr, 0, 9);
+ switch (opc2) {
+ /* BCD arithmetic */
+ case 0x1: case 0x41: // bcdadd, bcdsub
+ if (!allow_isa_2_07) goto decode_noP8;
+ if (dis_av_bcd( theInstr )) goto decode_success;
+ goto decode_failure;
+
+ default:
+ break; // Fall through...
+ }
+
opc2 = IFIELD(theInstr, 0, 11);
switch (opc2) {
/* AV Arithmetic */
@@ -18868,6 +19360,13 @@
if (dis_av_arith( theInstr )) goto decode_success;
goto decode_failure;
+ /* AV Polynomial Vector Multiply Add */
+ case 0x408: case 0x448: // vpmsumb, vpmsumd
+ case 0x488: case 0x4C8: // vpmsumw, vpmsumh
+ if (!allow_isa_2_07) goto decode_noP8;
+ if (dis_av_polymultarith( theInstr )) goto decode_success;
+ goto decode_failure;
+
/* AV Rotate, Shift */
case 0x004: case 0x044: case 0x084: // vrlb, vrlh, vrlw
case 0x104: case 0x144: case 0x184: // vslb, vslh, vslw
@@ -18892,6 +19391,12 @@
if (dis_av_logic( theInstr )) goto decode_success;
goto decode_failure;
+ case 0x544: // vorc
+ case 0x584: case 0x684: // vnand, veqv
+ if (!allow_isa_2_07) goto decode_noP8;
+ if (dis_av_logic( theInstr )) goto decode_success;
+ goto decode_failure;
+
/* AV Processor Control */
case 0x604: case 0x644: // mfvscr, mtvscr
if (!allow_V) goto decode_noV;
@@ -18948,6 +19453,30 @@
if (dis_av_pack( theInstr )) goto decode_success;
goto decode_failure;
+ case 0x508: case 0x509: // vcipher, vcipherlast
+ case 0x548: case 0x549: // vncipher, vncipherlast
+ case 0x5C8: // vsbox
+ if (!allow_isa_2_07) goto decode_noP8;
+ if (dis_av_cipher( theInstr )) goto decode_success;
+ goto decode_failure;
+
+ case 0x6C2: case 0x682: // vshasigmaw, vshasigmad
+ if (!allow_isa_2_07) goto decode_noP8;
+ if (dis_av_hash( theInstr )) goto decode_success;
+ goto decode_failure;
+
+ case 0x702: case 0x742: // vclzb, vclzh
+ case 0x782: case 0x7c2: // vclzw, vclzd
+ if (!allow_isa_2_07) goto decode_noP8;
+ if (dis_vxv_population_count( theInstr, opc2 )) goto decode_success;
+ goto decode_failure;
+
+ case 0x703: case 0x743: // vpopcntb, vpopcnth
+ case 0x783: case 0x7c3: // vpopcntw, vpopcntd
+ if (!allow_isa_2_07) goto decode_noP8;
+ if (dis_vxv_population_count( theInstr, opc2 )) goto decode_success;
+ goto decode_failure;
+
default:
break; // Fall through...
}
Modified: trunk/priv/host_ppc_defs.c
==============================================================================
--- trunk/priv/host_ppc_defs.c (original)
+++ trunk/priv/host_ppc_defs.c Tue Oct 15 18:11:20 2013
@@ -723,6 +723,27 @@
case Pav_CATODD: return "vmrgow"; // w
case Pav_CATEVEN: return "vmrgew"; // w
+ /* SHA */
+ case Pav_SHA256: return "vshasigmaw"; // w
+ case Pav_SHA512: return "vshasigmaw"; // dw
+
+ /* BCD */
+ case Pav_BCDAdd: return "bcdadd."; // qw
+ case Pav_BCDSub: return "bcdsub."; // qw
+
+ /* Polynomial arith */
+ case Pav_POLYMULADD: return "vpmsum"; // b, h, w, d
+
+ /* Cipher */
+ case Pav_CIPHERV128: case Pav_CIPHERLV128:
+ case Pav_NCIPHERV128: case Pav_NCIPHERLV128:
+ case Pav_CIPHERSUBV128: return "v_cipher_"; // qw
+
+ /* zero count */
+ case Pav_ZEROCNTBYTE: case Pav_ZEROCNTWORD:
+ case Pav_ZEROCNTHALF: case Pav_ZEROCNTDBL:
+ return "vclz_"; // b, h, w, d
+
default: vpanic("showPPCAvOp");
}
}
@@ -1434,6 +1455,45 @@
i->Pin.AvLdVSCR.src = src;
return i;
}
+PPCInstr* PPCInstr_AvCipherV128Unary ( PPCAvOp op, HReg dst, HReg src ) {
+ PPCInstr* i = LibVEX_Alloc(sizeof(PPCInstr));
+ i->tag = Pin_AvCipherV128Unary;
+ i->Pin.AvCipherV128Unary.op = op;
+ i->Pin.AvCipherV128Unary.dst = dst;
+ i->Pin.AvCipherV128Unary.src = src;
+ return i;
+}
+PPCInstr* PPCInstr_AvCipherV128Binary ( PPCAvOp op, HReg dst,
+ HReg srcL, HReg srcR ) {
+ PPCInstr* i = LibVEX_Alloc(sizeof(PPCInstr));
+ i->tag = Pin_AvCipherV128Binary;
+ i->Pin.AvCipherV128Binary.op = op;
+ i->Pin.AvCipherV128Binary.dst = dst;
+ i->Pin.AvCipherV128Binary.srcL = srcL;
+ i->Pin.AvCipherV128Binary.srcR = srcR;
+ return i;
+}
+PPCInstr* PPCInstr_AvHashV128Binary ( PPCAvOp op, HReg dst,
+ HReg src, PPCRI* s_field ) {
+ PPCInstr* i = LibVEX_Alloc(sizeof(PPCInstr));
+ i->tag = Pin_AvHashV128Binary;
+ i->Pin.AvHashV128Binary.op = op;
+ i->Pin.AvHashV128Binary.dst = dst;
+ i->Pin.AvHashV128Binary.src = src;
+ i->Pin.AvHashV128Binary.s_field = s_field;
+ return i;
+}
+PPCInstr* PPCInstr_AvBCDV128Trinary ( PPCAvOp op, HReg dst,
+ HReg src1, HReg src2, PPCRI* ps ) {
+ PPCInstr* i = LibVEX_Alloc(sizeof(PPCInstr));
+ i->tag = Pin_AvBCDV128Trinary;
+ i->Pin.AvBCDV128Trinary.op = op;
+ i->Pin.AvBCDV128Trinary.dst = dst;
+ i->Pin.AvBCDV128Trinary.src1 = src1;
+ i->Pin.AvBCDV128Trinary.src2 = src2;
+ i->Pin.AvBCDV128Trinary.ps = ps;
+ return i;
+}
/* Pretty Print instructions */
@@ -1991,6 +2051,42 @@
ppHRegPPC(i->Pin.AvLdVSCR.src);
return;
+ case Pin_AvCipherV128Unary:
+ vex_printf("%s(w) ", showPPCAvOp(i->Pin.AvCipherV128Unary.op));
+ ppHRegPPC(i->Pin.AvCipherV128Unary.dst);
+ vex_printf(",");
+ ppHRegPPC(i->Pin.AvCipherV128Unary.src);
+ return;
+
+ case Pin_AvCipherV128Binary:
+ vex_printf("%s(w) ", showPPCAvOp(i->Pin.AvCipherV128Binary.op));
+ ppHRegPPC(i->Pin.AvCipherV128Binary.dst);
+ vex_printf(",");
+ ppHRegPPC(i->Pin.AvCipherV128Binary.srcL);
+ vex_printf(",");
+ ppHRegPPC(i->Pin.AvCipherV128Binary.srcR);
+ return;
+
+ case Pin_AvHashV128Binary:
+ vex_printf("%s(w) ", showPPCAvOp(i->Pin.AvHashV128Binary.op));
+ ppHRegPPC(i->Pin.AvHashV128Binary.dst);
+ vex_printf(",");
+ ppHRegPPC(i->Pin.AvHashV128Binary.src);
+ vex_printf(",");
+ ppPPCRI(i->Pin.AvHashV128Binary.s_field);
+ return;
+
+ case Pin_AvBCDV128Trinary:
+ vex_printf("%s(w) ", showPPCAvOp(i->Pin.AvBCDV128Trinary.op));
+ ppHRegPPC(i->Pin.AvBCDV128Trinary.dst);
+ vex_printf(",");
+ ppHRegPPC(i->Pin.AvBCDV128Trinary.src1);
+ vex_printf(",");
+ ppHRegPPC(i->Pin.AvBCDV128Trinary.src2);
+ vex_printf(",");
+ ppPPCRI(i->Pin.AvBCDV128Trinary.ps);
+ return;
+
case Pin_Dfp64Unary:
vex_printf("%s ", showPPCFpOp(i->Pin.Dfp64Unary.op));
ppHRegPPC(i->Pin.Dfp64Unary.dst);
@@ -2433,6 +2529,26 @@
case Pin_AvLdVSCR:
addHRegUse(u, HRmRead, i->Pin.AvLdVSCR.src);
return;
+ case Pin_AvCipherV128Unary:
+ addHRegUse(u, HRmWrite, i->Pin.AvCipherV128Unary.dst);
+ addHRegUse(u, HRmRead, i->Pin.AvCipherV128Unary.src);
+ return;
+ case Pin_AvCipherV128Binary:
+ addHRegUse(u, HRmWrite, i->Pin.AvCipherV128Binary.dst);
+ addHRegUse(u, HRmRead, i->Pin.AvCipherV128Binary.srcL);
+ addHRegUse(u, HRmRead, i->Pin.AvCipherV128Binary.srcR);
+ return;
+ case Pin_AvHashV128Binary:
+ addHRegUse(u, HRmWrite, i->Pin.AvHashV128Binary.dst);
+ addHRegUse(u, HRmRead, i->Pin.AvHashV128Binary.src);
+ addRegUsage_PPCRI(u, i->Pin.AvHashV128Binary.s_field);
+ return;
+ case Pin_AvBCDV128Trinary:
+ addHRegUse(u, HRmWrite, i->Pin.AvBCDV128Trinary.dst);
+ addHRegUse(u, HRmRead, i->Pin.AvBCDV128Trinary.src1);
+ addHRegUse(u, HRmRead, i->Pin.AvBCDV128Trinary.src2);
+ addRegUsage_PPCRI(u, i->Pin.AvBCDV128Trinary.ps);
+ return;
case Pin_Dfp64Unary:
addHRegUse(u, HRmWrite, i->Pin.Dfp64Unary.dst);
addHRegUse(u, HRmRead, i->Pin.Dfp64Unary.src);
@@ -2742,6 +2858,26 @@
case Pin_AvLdVSCR:
mapReg(m, &i->Pin.AvLdVSCR.src);
return;
+ case Pin_AvCipherV128Unary:
+ mapReg(m, &i->Pin.AvCipherV128Unary.dst);
+ mapReg(m, &i->Pin.AvCipherV128Unary.src);
+ return;
+ case Pin_AvCipherV128Binary:
+ mapReg(m, &i->Pin.AvCipherV128Binary.dst);
+ mapReg(m, &i->Pin.AvCipherV128Binary.srcL);
+ mapReg(m, &i->Pin.AvCipherV128Binary.srcR);
+ return;
+ case Pin_AvHashV128Binary:
+ mapRegs_PPCRI(m, i->Pin.AvHashV128Binary.s_field);
+ mapReg(m, &i->Pin.AvHashV128Binary.dst);
+ mapReg(m, &i->Pin.AvHashV128Binary.src);
+ return;
+ case Pin_AvBCDV128Trinary:
+ mapReg(m, &i->Pin.AvBCDV128Trinary.dst);
+ mapReg(m, &i->Pin.AvBCDV128Trinary.src1);
+ mapReg(m, &i->Pin.AvBCDV128Trinary.src2);
+ mapRegs_PPCRI(m, i->Pin.AvBCDV128Trinary.ps);
+ return;
case Pin_Dfp64Unary:
mapReg(m, &i->Pin.Dfp64Unary.dst);
mapReg(m, &i->Pin.Dfp64Unary.src);
@@ -4632,6 +4768,11 @@
case Pav_UNPCKL16S: opc2 = 718; break; // vupklsh
case Pav_UNPCKHPIX: opc2 = 846; break; // vupkhpx
case Pav_UNPCKLPIX: opc2 = 974; break; // vupklpx
+
+ case Pav_ZEROCNTBYTE: opc2 = 1794; break; // vclzb
+ case Pav_ZEROCNTHALF: opc2 = 1858; break; // vclzh
+ case Pav_ZEROCNTWORD: opc2 = 1922; break; // vclzw
+ case Pav_ZEROCNTDBL: opc2 = 1986; break; // vclzd
default:
goto bad;
}
@@ -4713,6 +4854,8 @@
case Pav_MRGHI: opc2 = 12; break; // vmrghb
case Pav_MRGLO: opc2 = 268; break; // vmrglb
+ case Pav_POLYMULADD: opc2 = 1032; break; // vpmsumb
+
default:
goto bad;
}
@@ -4765,6 +4908,8 @@
case Pav_MRGHI: opc2 = 76; break; // vmrghh
case Pav_MRGLO: opc2 = 332; break; // vmrglh
+ case Pav_POLYMULADD: opc2 = 1224; break; // vpmsumh
+
default:
goto bad;
}
@@ -4822,6 +4967,8 @@
case Pav_CATODD: opc2 = 1676; break; // vmrgow
case Pav_CATEVEN: opc2 = 1932; break; // vmrgew
+ case Pav_POLYMULADD: opc2 = 1160; break; // vpmsumw
+
default:
goto bad;
}
@@ -4853,13 +5000,71 @@
case Pav_QPACKSS: opc2 = 1486; break; // vpksdsm
case Pav_MRGHI: opc2 = 1614; break; // vmrghw
case Pav_MRGLO: opc2 = 1742; break; // vmrglw
+ case Pav_POLYMULADD: opc2 = 1096; break; // vpmsumd
default:
goto bad;
}
p = mkFormVX( p, 4, v_dst, v_srcL, v_srcR, opc2 );
goto done;
}
-
+ case Pin_AvCipherV128Unary: {
+ UInt v_dst = vregNo(i->Pin.AvCipherV128Unary.dst);
+ UInt v_src = vregNo(i->Pin.AvCipherV128Unary.src);
+ UInt opc2;
+ switch (i->Pin.AvCipherV128Unary.op) {
+ case Pav_CIPHERSUBV128: opc2 = 1480; break; // vsbox
+ default:
+ goto bad;
+ }
+ p = mkFormVX( p, 4, v_dst, v_src, 0, opc2 );
+ goto done;
+ }
+ case Pin_AvCipherV128Binary: {
+ UInt v_dst = vregNo(i->Pin.AvCipherV128Binary.dst);
+ UInt v_srcL = vregNo(i->Pin.AvCipherV128Binary.srcL);
+ UInt v_srcR = vregNo(i->Pin.AvCipherV128Binary.srcR);
+ UInt opc2;
+ switch (i->Pin.AvCipherV128Binary.op) {
+ case Pav_CIPHERV128: opc2 = 1288; break; // vcipher
+ case Pav_CIPHERLV128: opc2 = 1289; break; // vcipherlast
+ case Pav_NCIPHERV128: opc2 = 1352; break; // vncipher
+ case Pav_NCIPHERLV128: opc2 = 1353; break; // vncipherlast
+ default:
+ goto bad;
+ }
+ p = mkFormVX( p, 4, v_dst, v_srcL, v_srcR, opc2 );
+ goto done;
+ }
+ case Pin_AvHashV128Binary: {
+ UInt v_dst = vregNo(i->Pin.AvHashV128Binary.dst);
+ UInt v_src = vregNo(i->Pin.AvHashV128Binary.src);
+ PPCRI* s_field = i->Pin.AvHashV128Binary.s_field;
+ UInt opc2;
+ switch (i->Pin.AvHashV128Binary.op) {
+ case Pav_SHA256: opc2 = 1666; break; // vshasigmaw
+ case Pav_SHA512: opc2 = 1730; break; // vshasigmad
+ default:
+ goto bad;
+ }
+ p = mkFormVX( p, 4, v_dst, v_src, s_field->Pri.Imm, opc2 );
+ goto done;
+ }
+ case Pin_AvBCDV128Trinary: {
+ UInt v_dst = vregNo(i->Pin.AvBCDV128Trinary.dst);
+ UInt v_src1 = vregNo(i->Pin.AvBCDV128Trinary.src1);
+ UInt v_src2 = vregNo(i->Pin.AvBCDV128Trinary.src2);
+ PPCRI* ps = i->Pin.AvBCDV128Trinary.ps;
+ UInt opc2;
+ switch (i->Pin.AvBCDV128Trinary.op) {
+ case Pav_BCDAdd: opc2 = 1; break; // bcdadd
+ case Pav_BCDSub: opc2 = 65; break; // bcdsub
+ default:
+ goto bad;
+ }
+ p = mkFormVXR( p, 4, v_dst, v_src1, v_src2,
+ 0x1, (ps->Pri.Imm << 9) | opc2 );
+ goto done;
+ }
case Pin_AvBin32Fx4: {
UInt v_dst = vregNo(i->Pin.AvBin32Fx4.dst);
UInt v_srcL = vregNo(i->Pin.AvBin32Fx4.srcL);
Modified: trunk/priv/host_ppc_defs.h
==============================================================================
--- trunk/priv/host_ppc_defs.h (original)
+++ trunk/priv/host_ppc_defs.h Tue Oct 15 18:11:20 2013
@@ -426,6 +426,22 @@
/* Concatenation */
Pav_CATODD, Pav_CATEVEN,
+
+ /* Polynomial Multipy-Add */
+ Pav_POLYMULADD,
+
+ /* Cipher */
+ Pav_CIPHERV128, Pav_CIPHERLV128, Pav_NCIPHERV128, Pav_NCIPHERLV128,
+ Pav_CIPHERSUBV128,
+
+ /* Hash */
+ Pav_SHA256, Pav_SHA512,
+
+ /* BCD Arithmetic */
+ Pav_BCDAdd, Pav_BCDSub,
+
+ /* zero count */
+ Pav_ZEROCNTBYTE, Pav_ZEROCNTWORD, Pav_ZEROCNTHALF, Pav_ZEROCNTDBL,
}
PPCAvOp;
@@ -507,6 +523,10 @@
Pin_AvSplat, /* One elem repeated throughout dst */
Pin_AvLdVSCR, /* mtvscr */
Pin_AvCMov, /* AV conditional move */
+ Pin_AvCipherV128Unary, /* AV Vector unary Cipher */
+ Pin_AvCipherV128Binary, /* AV Vector binary Cipher */
+ Pin_AvHashV128Binary, /* AV Vector binary Hash */
+ Pin_AvBCDV128Trinary, /* BCD Arithmetic */
Pin_Dfp64Unary, /* DFP64 unary op */
Pin_Dfp128Unary, /* DFP128 unary op */
Pin_DfpShift, /* Decimal floating point shift by immediate value */
@@ -854,6 +874,30 @@
HReg src;
} AvLdVSCR;
struct {
+ PPCAvOp op;
+ HReg dst;
+ HReg src;
+ } AvCipherV128Unary;
+ struct {
+ PPCAvOp op;
+ HReg dst;
+ HReg src;
+ PPCRI* s_field;
+ } AvHashV128Binary;
+ struct {
+ PPCAvOp op;
+ HReg dst;
+ HReg src1;
+ HReg src2;
+ PPCRI* ps;
+ } AvBCDV128Trinary;
+ struct {
+ PPCAvOp op;
+ HReg dst;
+ HReg srcL;
+ HReg srcR;
+ } AvCipherV128Binary;
+ struct {
PPCFpOp op;
HReg dst;
HReg src;
@@ -1034,7 +1078,15 @@
extern PPCInstr* PPCInstr_AvSplat ( UChar sz, HReg dst, PPCVI5s* src );
extern PPCInstr* PPCInstr_AvCMov ( PPCCondCode, HReg dst, HReg src );
extern PPCInstr* PPCInstr_AvLdVSCR ( HReg src );
-
+extern PPCInstr* PPCInstr_AvCipherV128Unary ( PPCAvOp op, HReg dst,
+ HReg srcR );
+extern PPCInstr* PPCInstr_AvCipherV128Binary ( PPCAvOp op, HReg dst,
+ HReg srcL, HReg srcR );
+extern PPCInstr* PPCInstr_AvHashV128Binary ( PPCAvOp op, HReg dst,
+ HReg src, PPCRI* s_field );
+extern PPCInstr* PPCInstr_AvBCDV128Trinary ( PPCAvOp op, HReg dst,
+ HReg src1, HReg src2,
+ PPCRI* ps );
extern PPCInstr* PPCInstr_Dfp64Unary ( PPCFpOp op, HReg dst, HReg src );
extern PPCInstr* PPCInstr_Dfp64Binary ( PPCFpOp op, HReg dst, HReg srcL,
HReg srcR );
Modified: trunk/priv/host_ppc_isel.c
==============================================================================
--- trunk/priv/host_ppc_isel.c (original)
+++ trunk/priv/host_ppc_isel.c Tue Oct 15 18:11:20 2013
@@ -4845,6 +4845,26 @@
case Iop_Dup32x4:
return mk_AvDuplicateRI(env, e->Iex.Unop.arg);
+ case Iop_CipherSV128: op = Pav_CIPHERSUBV128; goto do_AvCipherV128Un;
+ do_AvCipherV128Un: {
+ HReg arg = iselVecExpr(env, e->Iex.Unop.arg);
+ HReg dst = newVRegV(env);
+ addInstr(env, PPCInstr_AvCipherV128Unary(op, dst, arg));
+ return dst;
+ }
+
+ case Iop_Clz8Sx16: fpop = Pav_ZEROCNTBYTE; goto do_zerocnt;
+ case Iop_Clz16Sx8: fpop = Pav_ZEROCNTHALF; goto do_zerocnt;
+ case Iop_Clz32Sx4: fpop = Pav_ZEROCNTWORD; goto do_zerocnt;
+ case Iop_Clz64x2: fpop = Pav_ZEROCNTDBL; goto do_zerocnt;
+ do_zerocnt:
+ {
+ HReg arg = iselVecExpr(env, e->Iex.Unop.arg);
+ HReg dst = newVRegV(env);
+ addInstr(env, PPCInstr_AvUnary(fpop, dst, arg));
+ return dst;
+ }
+
default:
break;
} /* switch (e->Iex.Unop.op) */
@@ -4981,6 +5001,7 @@
case Iop_CmpEQ8x16: op = Pav_CMPEQU; goto do_AvBin8x16;
case Iop_CmpGT8Ux16: op = Pav_CMPGTU; goto do_AvBin8x16;
case Iop_CmpGT8Sx16: op = Pav_CMPGTS; goto do_AvBin8x16;
+ case Iop_PolynomialMulAdd8x16: op = Pav_POLYMULADD; goto do_AvBin8x16;
do_AvBin8x16: {
HReg arg1 = iselVecExpr(env, e->Iex.Binop.arg1);
HReg arg2 = iselVecExpr(env, e->Iex.Binop.arg2);
@@ -5015,6 +5036,7 @@
case Iop_CmpEQ16x8: op = Pav_CMPEQU; goto do_AvBin16x8;
case Iop_CmpGT16Ux8: op = Pav_CMPGTU; goto do_AvBin16x8;
case Iop_CmpGT16Sx8: op = Pav_CMPGTS; goto do_AvBin16x8;
+ case Iop_PolynomialMulAdd16x8: op = Pav_POLYMULADD; goto do_AvBin16x8;
do_AvBin16x8: {
HReg arg1 = iselVecExpr(env, e->Iex.Binop.arg1);
HReg arg2 = iselVecExpr(env, e->Iex.Binop.arg2);
@@ -5052,6 +5074,7 @@
case Iop_CmpGT32Sx4: op = Pav_CMPGTS; goto do_AvBin32x4;
case Iop_CatOddLanes32x4: op = Pav_CATODD; goto do_AvBin32x4;
case Iop_CatEvenLanes32x4: op = Pav_CATEVEN; goto do_AvBin32x4;
+ case Iop_PolynomialMulAdd32x4: op = Pav_POLYMULADD; goto do_AvBin32x4;
do_AvBin32x4: {
HReg arg1 = iselVecExpr(env, e->Iex.Binop.arg1);
HReg arg2 = iselVecExpr(env, e->Iex.Binop.arg2);
@@ -5078,6 +5101,7 @@
case Iop_CmpEQ64x2: op = Pav_CMPEQU; goto do_AvBin64x2;
case Iop_CmpGT64Ux2: op = Pav_CMPGTU; goto do_AvBin64x2;
case Iop_CmpGT64Sx2: op = Pav_CMPGTS; goto do_AvBin64x2;
+ case Iop_PolynomialMulAdd64x2: op = Pav_POLYMULADD; goto do_AvBin64x2;
do_AvBin64x2: {
HReg arg1 = iselVecExpr(env, e->Iex.Binop.arg1);
HReg arg2 = iselVecExpr(env, e->Iex.Binop.arg2);
@@ -5148,11 +5172,52 @@
return dst;
}
+ case Iop_CipherV128: op = Pav_CIPHERV128; goto do_AvCipherV128;
+ case Iop_CipherLV128: op = Pav_CIPHERLV128; goto do_AvCipherV128;
+ case Iop_NCipherV128: op = Pav_NCIPHERV128; goto do_AvCipherV128;
+ case Iop_NCipherLV128:op = Pav_NCIPHERLV128; goto do_AvCipherV128;
+ do_AvCipherV128: {
+ HReg arg1 = iselVecExpr(env, e->Iex.Binop.arg1);
+ HReg arg2 = iselVecExpr(env, e->Iex.Binop.arg2);
+ HReg dst = newVRegV(env);
+ addInstr(env, PPCInstr_AvCipherV128Binary(op, dst, arg1, arg2));
+ return dst;
+ }
+
+ case Iop_SHA256:op = Pav_SHA256; goto do_AvHashV128;
+ case Iop_SHA512:op = Pav_SHA512; goto do_AvHashV128;
+ do_AvHashV128: {
+ HReg arg1 = iselVecExpr(env, e->Iex.Binop.arg1);
+ HReg dst = newVRegV(env);
+ PPCRI* s_field = iselWordExpr_RI(env, e->Iex.Binop.arg2);
+ addInstr(env, PPCInstr_AvHashV128Binary(op, dst, arg1, s_field));
+ return dst;
+ }
default:
break;
} /* switch (e->Iex.Binop.op) */
} /* if (e->tag == Iex_Binop) */
+ if (e->tag == Iex_Triop) {
+ IRTriop *triop = e->Iex.Triop.details;
+ switch (triop->op) {
+ case Iop_BCDAdd:op = Pav_BCDAdd; goto do_AvBCDV128;
+ case Iop_BCDSub:op = Pav_BCDSub; goto do_AvBCDV128;
+ do_AvBCDV128: {
+ HReg arg1 = iselVecExpr(env, triop->arg1);
+ HReg arg2 = iselVecExpr(env, triop->arg2);
+ HReg dst = newVRegV(env);
+ PPCRI* ps = iselWordExpr_RI(env, triop->arg3);
+ addInstr(env, PPCInstr_AvBCDV128Trinary(op, dst, arg1, arg2, ps));
+ return dst;
+ }
+
+ default:
+ break;
+ } /* switch (e->Iex.Triop.op) */
+ } /* if (e->tag == Iex_Trinop) */
+
+
if (e->tag == Iex_Const ) {
vassert(e->Iex.Const.con->tag == Ico_V128);
if (e->Iex.Const.con->Ico.V128 == 0x0000) {
Modified: trunk/priv/ir_defs.c
==============================================================================
--- trunk/priv/ir_defs.c (original)
+++ trunk/priv/ir_defs.c Tue Oct 15 18:11:20 2013
@@ -782,6 +782,15 @@
case Iop_MullEven16Sx8: vex_printf("MullEven16Sx8"); return;
case Iop_MullEven32Sx4: vex_printf("MullEven32Sx4"); return;
+ case Iop_PolynomialMulAdd8x16:
+ vex_printf("PolynomialMulAdd8x16"); return;
+ case Iop_PolynomialMulAdd16x8:
+ vex_printf("PolynomialMulAdd16x8"); return;
+ case Iop_PolynomialMulAdd32x4:
+ vex_printf("PolynomialMulAdd32x4"); return;
+ case Iop_PolynomialMulAdd64x2:
+ vex_printf("PolynomialMulAdd64x2"); return;
+
case Iop_Avg8Ux16: vex_printf("Avg8Ux16"); return;
case Iop_Avg16Ux8: vex_printf("Avg16Ux8"); return;
case Iop_Avg32Ux4: vex_printf("Avg32Ux4"); return;
@@ -824,6 +833,7 @@
case Iop_Clz8Sx16: vex_printf("Clz8Sx16"); return;
case Iop_Clz16Sx8: vex_printf("Clz16Sx8"); return;
case Iop_Clz32Sx4: vex_printf("Clz32Sx4"); return;
+ case Iop_Clz64x2: vex_printf("Clz64x2"); return;
case Iop_Cls8Sx16: vex_printf("Cls8Sx16"); return;
case Iop_Cls16Sx8: vex_printf("Cls16Sx8"); return;
case Iop_Cls32Sx4: vex_printf("Cls32Sx4"); return;
@@ -1127,6 +1137,17 @@
case Iop_Perm32x8: vex_printf("Perm32x8"); return;
+ case Iop_CipherV128: vex_printf("CipherV128"); return;
+ case Iop_CipherLV128: vex_printf("CipherLV128"); return;
+ case Iop_NCipherV128: vex_printf("NCipherV128"); return;
+ case Iop_NCipherLV128: vex_printf("NCipherLV128"); return;
+ case Iop_CipherSV128: vex_printf("CipherSV128"); return;
+
+ case Iop_SHA256: vex_printf("SHA256"); return;
+ case Iop_SHA512: vex_printf("SHA512"); return;
+ case Iop_BCDAdd: vex_printf("BCDAdd"); return;
+ case Iop_BCDSub: vex_printf("BCDSub"); return;
+
default: vpanic("ppIROp(1)");
}
@@ -2795,6 +2816,8 @@
case Iop_QSub32Sx4: case Iop_QSub64Sx2:
case Iop_Mul8x16: case Iop_Mul16x8: case Iop_Mul32x4:
case Iop_PolynomialMul8x16:
+ case Iop_PolynomialMulAdd8x16: case Iop_PolynomialMulAdd16x8:
+ case Iop_PolynomialMulAdd32x4: case Iop_PolynomialMulAdd64x2:
case Iop_MulHi16Ux8: case Iop_MulHi32Ux4:
case Iop_MulHi16Sx8: case Iop_MulHi32Sx4:
case Iop_QDMulHi16Sx8: case Iop_QDMulHi32Sx4:
@@ -2845,6 +2868,10 @@
case Iop_Perm8x16: case Iop_Perm32x4:
case Iop_Recps32Fx4:
case Iop_Rsqrts32Fx4:
+ case Iop_CipherV128:
+ case Iop_CipherLV128:
+ case Iop_NCipherV128:
+ case Iop_NCipherLV128:
BINARY(Ity_V128,Ity_V128, Ity_V128);
case Iop_PolynomialMull8x8:
@@ -2864,7 +2891,7 @@
case Iop_CmpNEZ8x16: case Iop_CmpNEZ16x8:
case Iop_CmpNEZ32x4: case Iop_CmpNEZ64x2:
case Iop_Cnt8x16:
- case Iop_Clz8Sx16: case Iop_Clz16Sx8: case Iop_Clz32Sx4:
+ case Iop_Clz8Sx16: case Iop_Clz16Sx8: case Iop_Clz32Sx4: case Iop_Clz64x2:
case Iop_Cls8Sx16: case Iop_Cls16Sx8: case Iop_Cls32Sx4:
case Iop_PwAddL8Ux16: case Iop_PwAddL16Ux8: case Iop_PwAddL32Ux4:
case Iop_PwAddL8Sx16: case Iop_PwAddL16Sx8: case Iop_PwAddL32Sx4:
@@ -2873,6 +2900,7 @@
case Iop_Reverse16_8x16:
case Iop_Neg32Fx4:
case Iop_Abs8x16: case Iop_Abs16x8: case Iop_Abs32x4:
+ case Iop_CipherSV128:
UNARY(Ity_V128, Ity_V128);
case Iop_ShlV128: case Iop_ShrV128:
@@ -2888,6 +2916,7 @@
case Iop_QShlN32Sx4: case Iop_QShlN64Sx2:
case Iop_QSalN8x16: case Iop_QSalN16x8:
case Iop_QSalN32x4: case Iop_QSalN64x2:
+ case Iop_SHA256: case Iop_SHA512:
BINARY(Ity_V128,Ity_I8, Ity_V128);
case Iop_F32ToFixed32Ux4_RZ:
@@ -2928,6 +2957,9 @@
case Iop_ExtractV128:
TERNARY(Ity_V128, Ity_V128, Ity_I8, Ity_V128);
+ case Iop_BCDAdd:
+ case Iop_BCDSub:
+ TERNARY(Ity_V128,Ity_V128, Ity_I8, Ity_V128);
case Iop_QDMulLong16Sx4: case Iop_QDMulLong32Sx2:
BINARY(Ity_I64, Ity_I64, Ity_V128);
Modified: trunk/pub/libvex_ir.h
==============================================================================
--- trunk/pub/libvex_ir.h (original)
+++ trunk/pub/libvex_ir.h Tue Oct 15 18:11:20 2013
@@ -896,6 +896,7 @@
Iop_Cnt8x8,
Iop_Clz8Sx8, Iop_Clz16Sx4, Iop_Clz32Sx2,
Iop_Cls8Sx8, Iop_Cls16Sx4, Iop_Cls32Sx2,
+ Iop_Clz64x2,
/* VECTOR x VECTOR SHIFT / ROTATE */
Iop_Shl8x8, Iop_Shl16x4, Iop_Shl32x2,
@@ -1237,6 +1238,12 @@
*/
Iop_BCDtoDPB,
+ /* BCD arithmetic instructions, (V128, V128) -> V128
+ * The BCD format is the same as that used in the BCD<->DPB conversion
+ * routines, except using 124 digits (vs 60) plus the trailing 4-bit signed code.
+ * */
+ Iop_BCDAdd, Iop_BCDSub,
+
/* Conversion I64 -> D64 */
Iop_ReinterpI64asD64,
@@ -1403,6 +1410,39 @@
Iop_PolynomialMul8x16, /* (V128, V128) -> V128 */
Iop_PolynomialMull8x8, /* (I64, I64) -> V128 */
+ /* Vector Polynomial multiplication add. (V128, V128) -> V128
+
+ *** Below is the algorithm for the instructions. These Iops could
+ be emulated to get this functionality, but the emulation would
+ be long and messy.
+
+ Example for polynomial multiply add for vector of bytes
+ do i = 0 to 15
+ prod[i].bit[0:14] <- 0
+ srcA <- VR[argL].byte[i]
+ srcB <- VR[argR].byte[i]
+ do j = 0 to 7
+ do k = 0 to j
+ gbit <- srcA.bit[k] & srcB.bit[j-k]
+ prod[i].bit[j] <- prod[i].bit[j] ^ gbit
+ end
+ end
+
+ do j = 8 to 14
+ do k = j-7 to 7
+ gbit <- (srcA.bit[k] & srcB.bit[j-k])
+ prod[i].bit[j] <- prod[i].bit[j] ^ gbit
+ end
+ end
+ end
+
+ do i = 0 to 7
+ VR[dst].hword[i] <- 0b0 || (prod[2Ãi] ^ prod[2Ãi+1])
+ end
+ */
+ Iop_PolynomialMulAdd8x16, Iop_PolynomialMulAdd16x8,
+ Iop_PolynomialMulAdd32x4, Iop_PolynomialMulAdd64x2,
+
/* PAIRWISE operations */
/* Iop_PwFoo16x4( [a,b,c,d], [e,f,g,h] ) =
[Foo16(a,b), Foo16(c,d), Foo16(e,f), Foo16(g,h)] */
@@ -1598,6 +1638,17 @@
Iop_Perm32x8,
+ /* (V128, V128) -> V128 */
+ Iop_CipherV128, Iop_CipherLV128, Iop_CipherSV128,
+ Iop_NCipherV128, Iop_NCipherLV128,
+
+ /* Hash instructions, Federal Information Processing Standards
+ * Publication 180-3 Secure Hash Standard. */
+ /* (V128, I8) -> V128; The I8 input arg is (ST | SIX), where ST and
+ * SIX are fields from the insn. See ISA 2.07 description of
+ * vshasigmad and vshasigmaw insns.*/
+ Iop_SHA512, Iop_SHA256,
+
/* ------------------ 256-bit SIMD FP. ------------------ */
Iop_Add64Fx4,
Iop_Sub64Fx4,
|
|
From: <sv...@va...> - 2013-10-15 17:29:28
|
Author: sewardj
Date: Tue Oct 15 17:29:19 2013
New Revision: 2788
Log:
Tidyup -- no functional change. Replace all "pfx & PFX_LOCK"
with haveLOCK(pfx).
Modified:
trunk/priv/guest_amd64_toIR.c
Modified: trunk/priv/guest_amd64_toIR.c
==============================================================================
--- trunk/priv/guest_amd64_toIR.c (original)
+++ trunk/priv/guest_amd64_toIR.c Tue Oct 15 17:29:19 2013
@@ -3095,7 +3095,7 @@
assign(src, getIRegG(size,pfx,rm));
if (addSubCarry && op8 == Iop_Add8) {
- if (pfx & PFX_LOCK) {
+ if (haveLOCK(pfx)) {
/* cas-style store */
helper_ADC( size, dst1, dst0, src,
/*store*/addr, dst0/*expVal*/, guest_RIP_curr_instr );
@@ -3106,7 +3106,7 @@
}
} else
if (addSubCarry && op8 == Iop_Sub8) {
- if (pfx & PFX_LOCK) {
+ if (haveLOCK(pfx)) {
/* cas-style store */
helper_SBB( size, dst1, dst0, src,
/*store*/addr, dst0/*expVal*/, guest_RIP_curr_instr );
@@ -3118,7 +3118,7 @@
} else {
assign(dst1, binop(mkSizedOp(ty,op8), mkexpr(dst0), mkexpr(src)));
if (keep) {
- if (pfx & PFX_LOCK) {
+ if (haveLOCK(pfx)) {
if (0) vex_printf("locked case\n" );
casLE( mkexpr(addr),
mkexpr(dst0)/*expval*/,
@@ -3456,7 +3456,7 @@
assign(src, mkU(ty,d64 & mask));
if (gregLO3ofRM(modrm) == 2 /* ADC */) {
- if (pfx & PFX_LOCK) {
+ if (haveLOCK(pfx)) {
/* cas-style store */
helper_ADC( sz, dst1, dst0, src,
/*store*/addr, dst0/*expVal*/, guest_RIP_curr_instr );
@@ -3467,7 +3467,7 @@
}
} else
if (gregLO3ofRM(modrm) == 3 /* SBB */) {
- if (pfx & PFX_LOCK) {
+ if (haveLOCK(pfx)) {
/* cas-style store */
helper_SBB( sz, dst1, dst0, src,
/*store*/addr, dst0/*expVal*/, guest_RIP_curr_instr );
@@ -3479,7 +3479,7 @@
} else {
assign(dst1, binop(mkSizedOp(ty,op8), mkexpr(dst0), mkexpr(src)));
if (gregLO3ofRM(modrm) < 7) {
- if (pfx & PFX_LOCK) {
+ if (haveLOCK(pfx)) {
casLE( mkexpr(addr), mkexpr(dst0)/*expVal*/,
mkexpr(dst1)/*newVal*/,
guest_RIP_curr_instr );
@@ -3882,7 +3882,7 @@
if (epartIsReg(modrm)) {
putIRegE(sz, pfx, modrm, narrowTo(ty, mkexpr(t2m)));
} else {
- if (pfx & PFX_LOCK) {
+ if (haveLOCK(pfx)) {
casLE( mkexpr(t_addr),
narrowTo(ty, mkexpr(t2))/*expd*/,
narrowTo(ty, mkexpr(t2m))/*new*/,
@@ -4114,7 +4114,7 @@
case 2: /* NOT */
dst1 = newTemp(ty);
assign(dst1, unop(mkSizedOp(ty,Iop_Not8), mkexpr(t1)));
- if (pfx & PFX_LOCK) {
+ if (haveLOCK(pfx)) {
casLE( mkexpr(addr), mkexpr(t1)/*expd*/, mkexpr(dst1)/*new*/,
guest_RIP_curr_instr );
} else {
@@ -4130,7 +4130,7 @@
assign(src, mkexpr(t1));
assign(dst1, binop(mkSizedOp(ty,Iop_Sub8), mkexpr(dst0),
mkexpr(src)));
- if (pfx & PFX_LOCK) {
+ if (haveLOCK(pfx)) {
casLE( mkexpr(addr), mkexpr(t1)/*expd*/, mkexpr(dst1)/*new*/,
guest_RIP_curr_instr );
} else {
@@ -4217,7 +4217,7 @@
switch (gregLO3ofRM(modrm)) {
case 0: /* INC */
assign(t2, binop(Iop_Add8, mkexpr(t1), mkU8(1)));
- if (pfx & PFX_LOCK) {
+ if (haveLOCK(pfx)) {
casLE( mkexpr(addr), mkexpr(t1)/*expd*/, mkexpr(t2)/*new*/,
guest_RIP_curr_instr );
} else {
@@ -4227,7 +4227,7 @@
break;
case 1: /* DEC */
assign(t2, binop(Iop_Sub8, mkexpr(t1), mkU8(1)));
- if (pfx & PFX_LOCK) {
+ if (haveLOCK(pfx)) {
casLE( mkexpr(addr), mkexpr(t1)/*expd*/, mkexpr(t2)/*new*/,
guest_RIP_curr_instr );
} else {
@@ -4356,7 +4356,7 @@
t2 = newTemp(ty);
assign(t2, binop(mkSizedOp(ty,Iop_Add8),
mkexpr(t1), mkU(ty,1)));
- if (pfx & PFX_LOCK) {
+ if (haveLOCK(pfx)) {
casLE( mkexpr(addr),
mkexpr(t1), mkexpr(t2), guest_RIP_curr_instr );
} else {
@@ -4368,7 +4368,7 @@
t2 = newTemp(ty);
assign(t2, binop(mkSizedOp(ty,Iop_Sub8),
mkexpr(t1), mkU(ty,1)));
- if (pfx & PFX_LOCK) {
+ if (haveLOCK(pfx)) {
casLE( mkexpr(addr),
mkexpr(t1), mkexpr(t2), guest_RIP_curr_instr );
} else {
@@ -7949,7 +7949,7 @@
default:
vpanic("dis_bt_G_E(amd64)");
}
- if ((pfx & PFX_LOCK) && !epartIsReg(modrm)) {
+ if ((haveLOCK(pfx)) && !epartIsReg(modrm)) {
casLE( mkexpr(t_addr1), mkexpr(t_fetched)/*expd*/,
mkexpr(t_new)/*new*/,
guest_RIP_curr_instr );
@@ -8259,7 +8259,7 @@
nameIRegG(size,pfx,rm),
nameIRegE(size,pfx,rm) );
}
- else if (!epartIsReg(rm) && !(pfx & PFX_LOCK)) {
+ else if (!epartIsReg(rm) && !haveLOCK(pfx)) {
/* case 2 */
addr = disAMode ( &len, vbi, pfx, delta0, dis_buf, 0 );
assign( dest, loadLE(ty, mkexpr(addr)) );
@@ -8275,7 +8275,7 @@
DIP("cmpxchg%c %s,%s\n", nameISize(size),
nameIRegG(size,pfx,rm), dis_buf);
}
- else if (!epartIsReg(rm) && (pfx & PFX_LOCK)) {
+ else if (!epartIsReg(rm) && haveLOCK(pfx)) {
/* case 3 */
/* src is new value. acc is expected value. dest is old value.
Compute success from the output of the IRCAS, and steer the
@@ -8409,7 +8409,7 @@
*decode_ok = True;
return 1+delta0;
}
- else if (!epartIsReg(rm) && !(pfx & PFX_LOCK)) {
+ else if (!epartIsReg(rm) && !haveLOCK(pfx)) {
/* case 2 */
IRTemp addr = disAMode ( &len, vbi, pfx, delta0, dis_buf, 0 );
assign( tmpd, loadLE(ty, mkexpr(addr)) );
@@ -8424,7 +8424,7 @@
*decode_ok = True;
return len+delta0;
}
- else if (!epartIsReg(rm) && (pfx & PFX_LOCK)) {
+ else if (!epartIsReg(rm) && haveLOCK(pfx)) {
/* case 3 */
IRTemp addr = disAMode ( &len, vbi, pfx, delta0, dis_buf, 0 );
assign( tmpd, loadLE(ty, mkexpr(addr)) );
@@ -31086,7 +31086,7 @@
/* Now we should be looking at the primary opcode byte or the
leading escapes. Check that any LOCK prefix is actually
allowed. */
- if (pfx & PFX_LOCK) {
+ if (haveLOCK(pfx)) {
if (can_be_used_with_LOCK_prefix( (UChar*)&guest_code[delta] )) {
DIP("lock ");
} else {
|
|
From: <sv...@va...> - 2013-10-15 17:22:04
|
Author: sewardj
Date: Tue Oct 15 17:21:42 2013
New Revision: 2787
Log:
amd64 front end: accept XACQUIRE and XRELEASE on exactly the insns that
the Intel docs say can validly have them.
Modified:
trunk/priv/guest_amd64_toIR.c
Modified: trunk/priv/guest_amd64_toIR.c
==============================================================================
--- trunk/priv/guest_amd64_toIR.c (original)
+++ trunk/priv/guest_amd64_toIR.c Tue Oct 15 17:21:42 2013
@@ -703,6 +703,9 @@
static Bool haveF2orF3 ( Prefix pfx ) {
return toBool((pfx & (PFX_F2|PFX_F3)) > 0);
}
+static Bool haveF2andF3 ( Prefix pfx ) {
+ return toBool((pfx & (PFX_F2|PFX_F3)) == (PFX_F2|PFX_F3));
+}
static Bool haveF2 ( Prefix pfx ) {
return toBool((pfx & PFX_F2) > 0);
}
@@ -716,6 +719,9 @@
static Bool haveASO ( Prefix pfx ) {
return toBool((pfx & PFX_ASO) > 0);
}
+static Bool haveLOCK ( Prefix pfx ) {
+ return toBool((pfx & PFX_LOCK) > 0);
+}
/* Return True iff pfx has 66 set and F2 and F3 clear */
static Bool have66noF2noF3 ( Prefix pfx )
@@ -3186,6 +3192,7 @@
mov reg, reg-or-mem
Is passed the a ptr to the modRM byte, and the data size. Returns
the address advanced completely over this instruction.
+ We have to decide here whether F2 or F3 are acceptable. F2 never is.
G(src) is reg.
E(dst) is reg-or-mem
@@ -3198,16 +3205,20 @@
ST tmpv, (tmpa)
*/
static
-ULong dis_mov_G_E ( VexAbiInfo* vbi,
- Prefix pfx,
- Int size,
- Long delta0 )
+ULong dis_mov_G_E ( VexAbiInfo* vbi,
+ Prefix pfx,
+ Int size,
+ Long delta0,
+ /*OUT*/Bool* ok )
{
- Int len;
+ Int len;
UChar rm = getUChar(delta0);
HChar dis_buf[50];
+ *ok = True;
+
if (epartIsReg(rm)) {
+ if (haveF2orF3(pfx)) { *ok = False; return delta0; }
putIRegE(size, pfx, rm, getIRegG(size, pfx, rm));
DIP("mov%c %s,%s\n", nameISize(size),
nameIRegG(size,pfx,rm),
@@ -3217,6 +3228,8 @@
/* E refers to memory */
{
+ if (haveF2(pfx)) { *ok = False; return delta0; }
+ /* F3(XRELEASE) is acceptable, though. */
IRTemp addr = disAMode ( &len, vbi, pfx, delta0, dis_buf, 0 );
storeLE( mkexpr(addr), getIRegG(size, pfx, rm) );
DIP("mov%c %s,%s\n", nameISize(size),
@@ -3786,6 +3799,24 @@
/* we're optimists :-) */
*decode_OK = True;
+ /* Check whether F2 or F3 are acceptable. */
+ if (epartIsReg(modrm)) {
+ /* F2 or F3 are not allowed in the register case. */
+ if (haveF2orF3(pfx)) {
+ *decode_OK = False;
+ return delta;
+ }
+ } else {
+ /* F2 or F3 (but not both) are allowable provided LOCK is also
+ present. */
+ if (haveF2orF3(pfx)) {
+ if (haveF2andF3(pfx) || !haveLOCK(pfx)) {
+ *decode_OK = False;
+ return delta;
+ }
+ }
+ }
+
/* Limit src_val -- the bit offset -- to something within a word.
The Intel docs say that literal offsets larger than a word are
masked in this way. */
@@ -3956,7 +3987,8 @@
}
-/* Group 3 extended opcodes. */
+/* Group 3 extended opcodes. We have to decide here whether F2 and F3
+ might be valid.*/
static
ULong dis_Grp3 ( VexAbiInfo* vbi,
Prefix pfx, Int sz, Long delta, Bool* decode_OK )
@@ -3972,6 +4004,8 @@
*decode_OK = True;
modrm = getUChar(delta);
if (epartIsReg(modrm)) {
+ /* F2/XACQ and F3/XREL are always invalid in the non-mem case. */
+ if (haveF2orF3(pfx)) goto unhandled;
switch (gregLO3ofRM(modrm)) {
case 0: { /* TEST */
delta++;
@@ -4044,6 +4078,14 @@
vpanic("Grp3(amd64,R)");
}
} else {
+ /* Decide if F2/XACQ or F3/XREL might be valid. */
+ Bool validF2orF3 = haveF2orF3(pfx) ? False : True;
+ if ((gregLO3ofRM(modrm) == 3/*NEG*/ || gregLO3ofRM(modrm) == 2/*NOT*/)
+ && haveF2orF3(pfx) && !haveF2andF3(pfx) && haveLOCK(pfx)) {
+ validF2orF3 = True;
+ }
+ if (!validF2orF3) goto unhandled;
+ /* */
addr = disAMode ( &len, vbi, pfx, delta, dis_buf,
/* we have to inform disAMode of any immediate
bytes used */
@@ -4117,10 +4159,14 @@
}
}
return delta;
+ unhandled:
+ *decode_OK = False;
+ return delta;
}
-/* Group 4 extended opcodes. */
+/* Group 4 extended opcodes. We have to decide here whether F2 and F3
+ might be valid. */
static
ULong dis_Grp4 ( VexAbiInfo* vbi,
Prefix pfx, Long delta, Bool* decode_OK )
@@ -4136,6 +4182,8 @@
modrm = getUChar(delta);
if (epartIsReg(modrm)) {
+ /* F2/XACQ and F3/XREL are always invalid in the non-mem case. */
+ if (haveF2orF3(pfx)) goto unhandled;
assign(t1, getIRegE(1, pfx, modrm));
switch (gregLO3ofRM(modrm)) {
case 0: /* INC */
@@ -4156,6 +4204,14 @@
DIP("%sb %s\n", nameGrp4(gregLO3ofRM(modrm)),
nameIRegE(1, pfx, modrm));
} else {
+ /* Decide if F2/XACQ or F3/XREL might be valid. */
+ Bool validF2orF3 = haveF2orF3(pfx) ? False : True;
+ if ((gregLO3ofRM(modrm) == 0/*INC*/ || gregLO3ofRM(modrm) == 1/*DEC*/)
+ && haveF2orF3(pfx) && !haveF2andF3(pfx) && haveLOCK(pfx)) {
+ validF2orF3 = True;
+ }
+ if (!validF2orF3) goto unhandled;
+ /* */
IRTemp addr = disAMode ( &alen, vbi, pfx, delta, dis_buf, 0 );
assign( t1, loadLE(ty, mkexpr(addr)) );
switch (gregLO3ofRM(modrm)) {
@@ -4187,10 +4243,14 @@
DIP("%sb %s\n", nameGrp4(gregLO3ofRM(modrm)), dis_buf);
}
return delta;
+ unhandled:
+ *decode_OK = False;
+ return delta;
}
-/* Group 5 extended opcodes. */
+/* Group 5 extended opcodes. We have to decide here whether F2 and F3
+ might be valid. */
static
ULong dis_Grp5 ( VexAbiInfo* vbi,
Prefix pfx, Int sz, Long delta,
@@ -4210,6 +4270,8 @@
modrm = getUChar(delta);
if (epartIsReg(modrm)) {
+ /* F2/XACQ and F3/XREL are always invalid in the non-mem case. */
+ if (haveF2orF3(pfx)) goto unhandledR;
assign(t1, getIRegE(sz,pfx,modrm));
switch (gregLO3ofRM(modrm)) {
case 0: /* INC */
@@ -4276,6 +4338,14 @@
showSz ? nameISize(sz) : ' ',
nameIRegE(sz, pfx, modrm));
} else {
+ /* Decide if F2/XACQ or F3/XREL might be valid. */
+ Bool validF2orF3 = haveF2orF3(pfx) ? False : True;
+ if ((gregLO3ofRM(modrm) == 0/*INC*/ || gregLO3ofRM(modrm) == 1/*DEC*/)
+ && haveF2orF3(pfx) && !haveF2andF3(pfx) && haveLOCK(pfx)) {
+ validF2orF3 = True;
+ }
+ if (!validF2orF3) goto unhandledM;
+ /* */
addr = disAMode ( &len, vbi, pfx, delta, dis_buf, 0 );
if (gregLO3ofRM(modrm) != 2 && gregLO3ofRM(modrm) != 4
&& gregLO3ofRM(modrm) != 6) {
@@ -7750,13 +7820,14 @@
static
ULong dis_bt_G_E ( VexAbiInfo* vbi,
- Prefix pfx, Int sz, Long delta, BtOp op )
+ Prefix pfx, Int sz, Long delta, BtOp op,
+ /*OUT*/Bool* decode_OK )
{
HChar dis_buf[50];
UChar modrm;
Int len;
IRTemp t_fetched, t_bitno0, t_bitno1, t_bitno2, t_addr0,
- t_addr1, t_rsp, t_mask, t_new;
+ t_addr1, t_rsp, t_mask, t_new;
vassert(sz == 2 || sz == 4 || sz == 8);
@@ -7772,6 +7843,24 @@
t_addr1 = newTemp(Ity_I64);
modrm = getUChar(delta);
+ *decode_OK = True;
+ if (epartIsReg(modrm)) {
+ /* F2 and F3 are never acceptable. */
+ if (haveF2orF3(pfx)) {
+ *decode_OK = False;
+ return delta;
+ }
+ } else {
+ /* F2 or F3 (but not both) are allowed, provided LOCK is also
+ present, and only for the BTC/BTS/BTR cases (not BT). */
+ if (haveF2orF3(pfx)) {
+ if (haveF2andF3(pfx) || !haveLOCK(pfx) || op == BtOpNone) {
+ *decode_OK = False;
+ return delta;
+ }
+ }
+ }
+
assign( t_bitno0, widenSto64(getIRegG(sz, pfx, modrm)) );
if (epartIsReg(modrm)) {
@@ -8137,6 +8226,23 @@
reg-mem, locked: use IRCAS
*/
+ /* Decide whether F2 or F3 are acceptable. Never for register
+ case, but for the memory case, one or the other is OK provided
+ LOCK is also present. */
+ if (epartIsReg(rm)) {
+ if (haveF2orF3(pfx)) {
+ *ok = False;
+ return delta0;
+ }
+ } else {
+ if (haveF2orF3(pfx)) {
+ if (haveF2andF3(pfx) || !haveLOCK(pfx)) {
+ *ok = False;
+ return delta0;
+ }
+ }
+ }
+
if (epartIsReg(rm)) {
/* case 1 */
assign( dest, getIRegE(size, pfx, rm) );
@@ -19062,16 +19168,48 @@
HChar dis_buf[50];
Long delta = deltaIN;
- UChar opc = getUChar(delta);
- delta++;
+ UChar opc = getUChar(delta); delta++;
+
+ /* delta now points at the modrm byte. In most of the cases that
+ follow, neither the F2 nor F3 prefixes are allowed. However,
+ for some basic arithmetic operations we have to allow F2/XACQ or
+ F3/XREL in the case where the destination is memory and the LOCK
+ prefix is also present. Do this check by looking at the modrm
+ byte but not advancing delta over it. */
+ /* By default, F2 and F3 are not allowed, so let's start off with
+ that setting. */
+ Bool validF2orF3 = haveF2orF3(pfx) ? False : True;
+ { UChar tmp_modrm = getUChar(delta);
+ switch (opc) {
+ case 0x00: /* ADD Gb,Eb */ case 0x01: /* ADD Gv,Ev */
+ case 0x08: /* OR Gb,Eb */ case 0x09: /* OR Gv,Ev */
+ case 0x10: /* ADC Gb,Eb */ case 0x11: /* ADC Gv,Ev */
+ case 0x18: /* SBB Gb,Eb */ case 0x19: /* SBB Gv,Ev */
+ case 0x20: /* AND Gb,Eb */ case 0x21: /* AND Gv,Ev */
+ case 0x28: /* SUB Gb,Eb */ case 0x29: /* SUB Gv,Ev */
+ case 0x30: /* XOR Gb,Eb */ case 0x31: /* XOR Gv,Ev */
+ if (!epartIsReg(tmp_modrm)
+ && haveF2orF3(pfx) && !haveF2andF3(pfx) && haveLOCK(pfx)) {
+ /* dst is mem, and we have F2 or F3 but not both */
+ validF2orF3 = True;
+ }
+ break;
+ default:
+ break;
+ }
+ }
+
+ /* Now, in the switch below, for the opc values examined by the
+ switch above, use validF2orF3 rather than looking at pfx
+ directly. */
switch (opc) {
case 0x00: /* ADD Gb,Eb */
- if (haveF2orF3(pfx)) goto decode_failure;
+ if (!validF2orF3) goto decode_failure;
delta = dis_op2_G_E ( vbi, pfx, False, Iop_Add8, True, 1, delta, "add" );
return delta;
case 0x01: /* ADD Gv,Ev */
- if (haveF2orF3(pfx)) goto decode_failure;
+ if (!validF2orF3) goto decode_failure;
delta = dis_op2_G_E ( vbi, pfx, False, Iop_Add8, True, sz, delta, "add" );
return delta;
@@ -19094,11 +19232,11 @@
return delta;
case 0x08: /* OR Gb,Eb */
- if (haveF2orF3(pfx)) goto decode_failure;
+ if (!validF2orF3) goto decode_failure;
delta = dis_op2_G_E ( vbi, pfx, False, Iop_Or8, True, 1, delta, "or" );
return delta;
case 0x09: /* OR Gv,Ev */
- if (haveF2orF3(pfx)) goto decode_failure;
+ if (!validF2orF3) goto decode_failure;
delta = dis_op2_G_E ( vbi, pfx, False, Iop_Or8, True, sz, delta, "or" );
return delta;
@@ -19121,11 +19259,11 @@
return delta;
case 0x10: /* ADC Gb,Eb */
- if (haveF2orF3(pfx)) goto decode_failure;
+ if (!validF2orF3) goto decode_failure;
delta = dis_op2_G_E ( vbi, pfx, True, Iop_Add8, True, 1, delta, "adc" );
return delta;
case 0x11: /* ADC Gv,Ev */
- if (haveF2orF3(pfx)) goto decode_failure;
+ if (!validF2orF3) goto decode_failure;
delta = dis_op2_G_E ( vbi, pfx, True, Iop_Add8, True, sz, delta, "adc" );
return delta;
@@ -19148,11 +19286,11 @@
return delta;
case 0x18: /* SBB Gb,Eb */
- if (haveF2orF3(pfx)) goto decode_failure;
+ if (!validF2orF3) goto decode_failure;
delta = dis_op2_G_E ( vbi, pfx, True, Iop_Sub8, True, 1, delta, "sbb" );
return delta;
case 0x19: /* SBB Gv,Ev */
- if (haveF2orF3(pfx)) goto decode_failure;
+ if (!validF2orF3) goto decode_failure;
delta = dis_op2_G_E ( vbi, pfx, True, Iop_Sub8, True, sz, delta, "sbb" );
return delta;
@@ -19175,11 +19313,11 @@
return delta;
case 0x20: /* AND Gb,Eb */
- if (haveF2orF3(pfx)) goto decode_failure;
+ if (!validF2orF3) goto decode_failure;
delta = dis_op2_G_E ( vbi, pfx, False, Iop_And8, True, 1, delta, "and" );
return delta;
case 0x21: /* AND Gv,Ev */
- if (haveF2orF3(pfx)) goto decode_failure;
+ if (!validF2orF3) goto decode_failure;
delta = dis_op2_G_E ( vbi, pfx, False, Iop_And8, True, sz, delta, "and" );
return delta;
@@ -19202,11 +19340,11 @@
return delta;
case 0x28: /* SUB Gb,Eb */
- if (haveF2orF3(pfx)) goto decode_failure;
+ if (!validF2orF3) goto decode_failure;
delta = dis_op2_G_E ( vbi, pfx, False, Iop_Sub8, True, 1, delta, "sub" );
return delta;
case 0x29: /* SUB Gv,Ev */
- if (haveF2orF3(pfx)) goto decode_failure;
+ if (!validF2orF3) goto decode_failure;
delta = dis_op2_G_E ( vbi, pfx, False, Iop_Sub8, True, sz, delta, "sub" );
return delta;
@@ -19223,18 +19361,17 @@
if (haveF2orF3(pfx)) goto decode_failure;
delta = dis_op_imm_A(1, False, Iop_Sub8, True, delta, "sub" );
return delta;
-
case 0x2D: /* SUB Iv, eAX */
if (haveF2orF3(pfx)) goto decode_failure;
delta = dis_op_imm_A( sz, False, Iop_Sub8, True, delta, "sub" );
return delta;
case 0x30: /* XOR Gb,Eb */
- if (haveF2orF3(pfx)) goto decode_failure;
+ if (!validF2orF3) goto decode_failure;
delta = dis_op2_G_E ( vbi, pfx, False, Iop_Xor8, True, 1, delta, "xor" );
return delta;
case 0x31: /* XOR Gv,Ev */
- if (haveF2orF3(pfx)) goto decode_failure;
+ if (!validF2orF3) goto decode_failure;
delta = dis_op2_G_E ( vbi, pfx, False, Iop_Xor8, True, sz, delta, "xor" );
return delta;
@@ -19470,8 +19607,17 @@
}
case 0x80: /* Grp1 Ib,Eb */
- if (haveF2orF3(pfx)) goto decode_failure;
modrm = getUChar(delta);
+ /* Disallow F2/XACQ and F3/XREL for the non-mem case. Allow
+ just one for the mem case and also require LOCK in this case.
+ Note that this erroneously allows XACQ/XREL on CMP since we
+ don't check the subopcode here. No big deal. */
+ if (epartIsReg(modrm) && haveF2orF3(pfx))
+ goto decode_failure;
+ if (!epartIsReg(modrm) && haveF2andF3(pfx))
+ goto decode_failure;
+ if (!epartIsReg(modrm) && haveF2orF3(pfx) && !haveLOCK(pfx))
+ goto decode_failure;
am_sz = lengthAMode(pfx,delta);
sz = 1;
d_sz = 1;
@@ -19480,8 +19626,14 @@
return delta;
case 0x81: /* Grp1 Iv,Ev */
- if (haveF2orF3(pfx)) goto decode_failure;
modrm = getUChar(delta);
+ /* Same comment as for case 0x80 just above. */
+ if (epartIsReg(modrm) && haveF2orF3(pfx))
+ goto decode_failure;
+ if (!epartIsReg(modrm) && haveF2andF3(pfx))
+ goto decode_failure;
+ if (!epartIsReg(modrm) && haveF2orF3(pfx) && !haveLOCK(pfx))
+ goto decode_failure;
am_sz = lengthAMode(pfx,delta);
d_sz = imin(sz,4);
d64 = getSDisp(d_sz, delta + am_sz);
@@ -19508,17 +19660,25 @@
return delta;
/* XCHG reg,mem automatically asserts LOCK# even without a LOCK
- prefix. Therefore, surround it with a IRStmt_MBE(Imbe_BusLock)
- and IRStmt_MBE(Imbe_BusUnlock) pair. But be careful; if it is
- used with an explicit LOCK prefix, we don't want to end up with
- two IRStmt_MBE(Imbe_BusLock)s -- one made here and one made by
- the generic LOCK logic at the top of disInstr. */
+ prefix. Therefore, generate CAS regardless of the presence or
+ otherwise of a LOCK prefix. */
case 0x86: /* XCHG Gb,Eb */
sz = 1;
/* Fall through ... */
case 0x87: /* XCHG Gv,Ev */
- if (haveF2orF3(pfx)) goto decode_failure;
modrm = getUChar(delta);
+ /* Check whether F2 or F3 are allowable. For the mem case, one
+ or the othter but not both are. We don't care about the
+ presence of LOCK in this case -- XCHG is unusual in this
+ respect. */
+ if (haveF2orF3(pfx)) {
+ if (epartIsReg(modrm)) {
+ goto decode_failure;
+ } else {
+ if (haveF2andF3(pfx))
+ goto decode_failure;
+ }
+ }
ty = szToITy(sz);
t1 = newTemp(ty); t2 = newTemp(ty);
if (epartIsReg(modrm)) {
@@ -19544,15 +19704,21 @@
}
return delta;
- case 0x88: /* MOV Gb,Eb */
- if (haveF2orF3(pfx)) goto decode_failure;
- delta = dis_mov_G_E(vbi, pfx, 1, delta);
+ case 0x88: { /* MOV Gb,Eb */
+ /* We let dis_mov_G_E decide whether F3(XRELEASE) is allowable. */
+ Bool ok = True;
+ delta = dis_mov_G_E(vbi, pfx, 1, delta, &ok);
+ if (!ok) goto decode_failure;
return delta;
+ }
- case 0x89: /* MOV Gv,Ev */
- if (haveF2orF3(pfx)) goto decode_failure;
- delta = dis_mov_G_E(vbi, pfx, sz, delta);
+ case 0x89: { /* MOV Gv,Ev */
+ /* We let dis_mov_G_E decide whether F3(XRELEASE) is allowable. */
+ Bool ok = True;
+ delta = dis_mov_G_E(vbi, pfx, sz, delta, &ok);
+ if (!ok) goto decode_failure;
return delta;
+ }
case 0x8A: /* MOV Eb,Gb */
if (haveF2orF3(pfx)) goto decode_failure;
@@ -20059,8 +20225,9 @@
maybe_do_Mov_I_E:
modrm = getUChar(delta);
if (gregLO3ofRM(modrm) == 0) {
- if (haveF2orF3(pfx)) goto decode_failure;
if (epartIsReg(modrm)) {
+ /* Neither F2 nor F3 are allowable. */
+ if (haveF2orF3(pfx)) goto decode_failure;
delta++; /* mod/rm byte */
d64 = getSDisp(imin(4,sz),delta);
delta += imin(4,sz);
@@ -20070,6 +20237,8 @@
(Long)d64,
nameIRegE(sz,pfx,modrm));
} else {
+ if (haveF2(pfx)) goto decode_failure;
+ /* F3(XRELEASE) is allowable here */
addr = disAMode ( &alen, vbi, pfx, delta, dis_buf,
/*xtra*/imin(4,sz) );
delta += alen;
@@ -20526,7 +20695,8 @@
case 0xF6: { /* Grp3 Eb */
Bool decode_OK = True;
- if (haveF2orF3(pfx)) goto decode_failure;
+ /* RM'd: if (haveF2orF3(pfx)) goto decode_failure; */
+ /* We now let dis_Grp3 itself decide if F2 and/or F3 are valid */
delta = dis_Grp3 ( vbi, pfx, 1, delta, &decode_OK );
if (!decode_OK) goto decode_failure;
return delta;
@@ -20534,7 +20704,8 @@
case 0xF7: { /* Grp3 Ev */
Bool decode_OK = True;
- if (haveF2orF3(pfx)) goto decode_failure;
+ /* RM'd: if (haveF2orF3(pfx)) goto decode_failure; */
+ /* We now let dis_Grp3 itself decide if F2 and/or F3 are valid */
delta = dis_Grp3 ( vbi, pfx, sz, delta, &decode_OK );
if (!decode_OK) goto decode_failure;
return delta;
@@ -20554,7 +20725,8 @@
case 0xFE: { /* Grp4 Eb */
Bool decode_OK = True;
- if (haveF2orF3(pfx)) goto decode_failure;
+ /* RM'd: if (haveF2orF3(pfx)) goto decode_failure; */
+ /* We now let dis_Grp4 itself decide if F2 and/or F3 are valid */
delta = dis_Grp4 ( vbi, pfx, delta, &decode_OK );
if (!decode_OK) goto decode_failure;
return delta;
@@ -20562,7 +20734,8 @@
case 0xFF: { /* Grp5 Ev */
Bool decode_OK = True;
- if (haveF2orF3(pfx)) goto decode_failure;
+ /* RM'd: if (haveF2orF3(pfx)) goto decode_failure; */
+ /* We now let dis_Grp5 itself decide if F2 and/or F3 are valid */
delta = dis_Grp5 ( vbi, pfx, sz, delta, dres, &decode_OK );
if (!decode_OK) goto decode_failure;
return delta;
@@ -21041,11 +21214,14 @@
return delta;
}
- case 0xA3: /* BT Gv,Ev */
- if (haveF2orF3(pfx)) goto decode_failure;
+ case 0xA3: { /* BT Gv,Ev */
+ /* We let dis_bt_G_E decide whether F2 or F3 are allowable. */
+ Bool ok = True;
if (sz != 8 && sz != 4 && sz != 2) goto decode_failure;
- delta = dis_bt_G_E ( vbi, pfx, sz, delta, BtOpNone );
+ delta = dis_bt_G_E ( vbi, pfx, sz, delta, BtOpNone, &ok );
+ if (!ok) goto decode_failure;
return delta;
+ }
case 0xA4: /* SHLDv imm8,Gv,Ev */
modrm = getUChar(delta);
@@ -21065,11 +21241,14 @@
"%cl", True /* left */ );
return delta;
- case 0xAB: /* BTS Gv,Ev */
- if (haveF2orF3(pfx)) goto decode_failure;
+ case 0xAB: { /* BTS Gv,Ev */
+ /* We let dis_bt_G_E decide whether F2 or F3 are allowable. */
+ Bool ok = True;
if (sz != 8 && sz != 4 && sz != 2) goto decode_failure;
- delta = dis_bt_G_E ( vbi, pfx, sz, delta, BtOpSet );
+ delta = dis_bt_G_E ( vbi, pfx, sz, delta, BtOpSet, &ok );
+ if (!ok) goto decode_failure;
return delta;
+ }
case 0xAC: /* SHRDv imm8,Gv,Ev */
modrm = getUChar(delta);
@@ -21094,28 +21273,31 @@
delta = dis_mul_E_G ( vbi, pfx, sz, delta );
return delta;
- case 0xB1: { /* CMPXCHG Gv,Ev (allowed in 16,32,64 bit) */
+ case 0xB0: { /* CMPXCHG Gb,Eb */
Bool ok = True;
- if (haveF2orF3(pfx)) goto decode_failure;
- if (sz != 2 && sz != 4 && sz != 8) goto decode_failure;
- delta = dis_cmpxchg_G_E ( &ok, vbi, pfx, sz, delta );
+ /* We let dis_cmpxchg_G_E decide whether F2 or F3 are allowable. */
+ delta = dis_cmpxchg_G_E ( &ok, vbi, pfx, 1, delta );
if (!ok) goto decode_failure;
return delta;
}
- case 0xB0: { /* CMPXCHG Gb,Eb */
+ case 0xB1: { /* CMPXCHG Gv,Ev (allowed in 16,32,64 bit) */
Bool ok = True;
- if (haveF2orF3(pfx)) goto decode_failure;
- delta = dis_cmpxchg_G_E ( &ok, vbi, pfx, 1, delta );
+ /* We let dis_cmpxchg_G_E decide whether F2 or F3 are allowable. */
+ if (sz != 2 && sz != 4 && sz != 8) goto decode_failure;
+ delta = dis_cmpxchg_G_E ( &ok, vbi, pfx, sz, delta );
if (!ok) goto decode_failure;
return delta;
}
- case 0xB3: /* BTR Gv,Ev */
- if (haveF2orF3(pfx)) goto decode_failure;
+ case 0xB3: { /* BTR Gv,Ev */
+ /* We let dis_bt_G_E decide whether F2 or F3 are allowable. */
+ Bool ok = True;
if (sz != 8 && sz != 4 && sz != 2) goto decode_failure;
- delta = dis_bt_G_E ( vbi, pfx, sz, delta, BtOpReset );
+ delta = dis_bt_G_E ( vbi, pfx, sz, delta, BtOpReset, &ok );
+ if (!ok) goto decode_failure;
return delta;
+ }
case 0xB6: /* MOVZXb Eb,Gv */
if (haveF2orF3(pfx)) goto decode_failure;
@@ -21132,8 +21314,8 @@
return delta;
case 0xBA: { /* Grp8 Ib,Ev */
+ /* We let dis_Grp8_Imm decide whether F2 or F3 are allowable. */
Bool decode_OK = False;
- if (haveF2orF3(pfx)) goto decode_failure;
modrm = getUChar(delta);
am_sz = lengthAMode(pfx,delta);
d64 = getSDisp8(delta + am_sz);
@@ -21144,11 +21326,14 @@
return delta;
}
- case 0xBB: /* BTC Gv,Ev */
- if (haveF2orF3(pfx)) goto decode_failure;
+ case 0xBB: { /* BTC Gv,Ev */
+ /* We let dis_bt_G_E decide whether F2 or F3 are allowable. */
+ Bool ok = False;
if (sz != 8 && sz != 4 && sz != 2) goto decode_failure;
- delta = dis_bt_G_E ( vbi, pfx, sz, delta, BtOpComp );
+ delta = dis_bt_G_E ( vbi, pfx, sz, delta, BtOpComp, &ok );
+ if (!ok) goto decode_failure;
return delta;
+ }
case 0xBC: /* BSF Gv,Ev */
if (!haveF2orF3(pfx)
@@ -21231,13 +21416,21 @@
*expect_CAS = True;
/* Decode, and generate address. */
- if (have66orF2orF3(pfx)) goto decode_failure;
+ if (have66(pfx)) goto decode_failure;
if (sz != 4 && sz != 8) goto decode_failure;
if (sz == 8 && !(archinfo->hwcaps & VEX_HWCAPS_AMD64_CX16))
goto decode_failure;
modrm = getUChar(delta);
if (epartIsReg(modrm)) goto decode_failure;
if (gregLO3ofRM(modrm) != 1) goto decode_failure;
+ if (haveF2orF3(pfx)) {
+ /* Since the e-part is memory only, F2 or F3 (one or the
+ other) is acceptable if LOCK is also present. But only
+ for cmpxchg8b. */
+ if (sz == 8) goto decode_failure;
+ if (haveF2andF3(pfx) || !haveLOCK(pfx)) goto decode_failure;
+ }
+
addr = disAMode ( &alen, vbi, pfx, delta, dis_buf, 0 );
delta += alen;
|
|
From: <sv...@va...> - 2013-10-15 11:37:48
|
Author: sewardj
Date: Tue Oct 15 11:37:16 2013
New Revision: 13645
Log:
A minimal test case for the parsing of XACQUIRE and XRELEASE prefixes.
Added:
trunk/none/tests/amd64/xacq_xrel.c
Added: trunk/none/tests/amd64/xacq_xrel.c
==============================================================================
--- trunk/none/tests/amd64/xacq_xrel.c (added)
+++ trunk/none/tests/amd64/xacq_xrel.c Tue Oct 15 11:37:16 2013
@@ -0,0 +1,298 @@
+
+/* This is a test program that checks the parsing of instructions with
+ xacquire and xrelease prefixes. The tested insns are, afaics,
+ exactly those listed in the Intel description for the two prefixes
+ ("XACQUIRE/XRELEASE -- Hardware Lock Elision Prefix Hints"). */
+
+#include <stdio.h>
+
+typedef unsigned long long int ULong;
+
+#define CAT2(_x,_y) _x##_y
+#define CAT(_x,_y) CAT2(_x,_y)
+
+#define GEN_BINARY(_insn) \
+ void CAT(do_,_insn) ( void ) \
+ { \
+ volatile ULong n = 0x5555555555555555ULL; \
+ ULong some = 0x271831415927D459ULL; \
+ __asm__ __volatile__( \
+ "\t" \
+ "stc" "\n\t" \
+ "xacquire lock " #_insn "q $123456789, (%0)" "\n\t" \
+ "xrelease lock " #_insn "q $123456789, (%0)" "\n\t" \
+ "xacquire lock " #_insn "l $0x12345FE, (%0)" "\n\t" \
+ "xrelease lock " #_insn "l $0x12345FE, (%0)" "\n\t" \
+ "xacquire lock " #_insn "w $0x9876, (%0)" "\n\t" \
+ "xrelease lock " #_insn "w $0x9876, (%0)" "\n\t" \
+ "xacquire lock " #_insn "b $0x45, (%0)" "\n\t" \
+ "xrelease lock " #_insn "b $0x45, (%0)" "\n\t" \
+ "xacquire lock " #_insn "q %1, (%0)" "\n\t" \
+ "xrelease lock " #_insn "q %1, (%0)" "\n\t" \
+ "xacquire lock " #_insn "l %k1, (%0)" "\n\t" \
+ "xrelease lock " #_insn "l %k1, (%0)" "\n\t" \
+ "xacquire lock " #_insn "w %w1, (%0)" "\n\t" \
+ "xrelease lock " #_insn "w %w1, (%0)" "\n\t" \
+ "xacquire lock " #_insn "b %b1, (%0)" "\n\t" \
+ "xrelease lock " #_insn "b %b1, (%0)" "\n\t" \
+ : : "r"(&n), "r"(some) : "cc", "memory" \
+ ); \
+ printf("result for '%-3s' is %016llx\n", #_insn, n); \
+ }
+
+GEN_BINARY(add)
+GEN_BINARY(adc)
+GEN_BINARY(and)
+GEN_BINARY(or)
+GEN_BINARY(sbb)
+GEN_BINARY(sub)
+GEN_BINARY(xor)
+
+#define GEN_UNARY(_insn) \
+ void CAT(do_,_insn) ( void ) \
+ { \
+ volatile ULong n = 0x5555555555555555ULL; \
+ __asm__ __volatile__( \
+ "\t" \
+ "stc" "\n\t" \
+ "xacquire lock " #_insn "q (%0)" "\n\t" \
+ "xrelease lock " #_insn "q (%0)" "\n\t" \
+ "xacquire lock " #_insn "l (%0)" "\n\t" \
+ "xrelease lock " #_insn "l (%0)" "\n\t" \
+ "xacquire lock " #_insn "w (%0)" "\n\t" \
+ "xrelease lock " #_insn "w (%0)" "\n\t" \
+ "xacquire lock " #_insn "b (%0)" "\n\t" \
+ "xrelease lock " #_insn "b (%0)" "\n\t" \
+ : : "r"(&n) : "cc", "memory" \
+ ); \
+ printf("result for '%-3s' is %016llx\n", #_insn, n); \
+ }
+
+GEN_UNARY(dec)
+GEN_UNARY(inc)
+GEN_UNARY(neg)
+GEN_UNARY(not)
+
+void do_btc ( void )
+{
+ volatile ULong n = 0x5555555555555555ULL;
+ __asm__ __volatile__(
+ "xacquire lock btcq %1, (%0)" "\n\t"
+ "xacquire lock btcq $57, (%0)" "\n\t"
+ "xrelease lock btcq %1, (%0)" "\n\t"
+ "xrelease lock btcq $55, (%0)" "\n\t"
+ "xacquire lock btcl %k1, (%0)" "\n\t"
+ "xacquire lock btcl $27, (%0)" "\n\t"
+ "xrelease lock btcl %k1, (%0)" "\n\t"
+ "xrelease lock btcl $25, (%0)" "\n\t"
+ "xacquire lock btcw %w1, (%0)" "\n\t"
+ "xacquire lock btcw $12, (%0)" "\n\t"
+ "xrelease lock btcw %w1, (%0)" "\n\t"
+ "xrelease lock btcw $11, (%0)" "\n\t"
+ : : "r"(&n), "r"(6ULL) : "cc", "memory"
+ );
+ printf("result for '%-3s' is %016llx\n", "btc", n); \
+}
+
+void do_btr ( void )
+{
+ volatile ULong n = 0x5555555555555555ULL;
+ __asm__ __volatile__(
+ "xacquire lock btrq %1, (%0)" "\n\t"
+ "xacquire lock btrq $57, (%0)" "\n\t"
+ "xrelease lock btrq %1, (%0)" "\n\t"
+ "xrelease lock btrq $55, (%0)" "\n\t"
+ "xacquire lock btrl %k1, (%0)" "\n\t"
+ "xacquire lock btrl $27, (%0)" "\n\t"
+ "xrelease lock btrl %k1, (%0)" "\n\t"
+ "xrelease lock btrl $25, (%0)" "\n\t"
+ "xacquire lock btrw %w1, (%0)" "\n\t"
+ "xacquire lock btrw $12, (%0)" "\n\t"
+ "xrelease lock btrw %w1, (%0)" "\n\t"
+ "xrelease lock btrw $11, (%0)" "\n\t"
+ : : "r"(&n), "r"(6ULL) : "cc", "memory"
+ );
+ printf("result for '%-3s' is %016llx\n", "btr", n); \
+}
+
+void do_bts ( void )
+{
+ volatile ULong n = 0x5555555555555555ULL;
+ __asm__ __volatile__(
+ "xacquire lock btsq %1, (%0)" "\n\t"
+ "xacquire lock btsq $57, (%0)" "\n\t"
+ "xrelease lock btsq %1, (%0)" "\n\t"
+ "xrelease lock btsq $55, (%0)" "\n\t"
+ "xacquire lock btsl %k1, (%0)" "\n\t"
+ "xacquire lock btsl $27, (%0)" "\n\t"
+ "xrelease lock btsl %k1, (%0)" "\n\t"
+ "xrelease lock btsl $25, (%0)" "\n\t"
+ "xacquire lock btsw %w1, (%0)" "\n\t"
+ "xacquire lock btsw $12, (%0)" "\n\t"
+ "xrelease lock btsw %w1, (%0)" "\n\t"
+ "xrelease lock btsw $11, (%0)" "\n\t"
+ : : "r"(&n), "r"(6ULL) : "cc", "memory"
+ );
+ printf("result for '%-3s' is %016llx\n", "bts", n); \
+}
+
+void do_cmpxchg ( void )
+{
+ volatile ULong n = 0x5555555555555555ULL;
+ ULong some = 0x271831415927D459ULL;
+ __asm__ __volatile__(
+ "\t"
+ "stc" "\n\t"
+ // zero out rax and get the flags in a known state
+ "xorq %%rax, %%rax" "\n\t"
+ "xacquire lock cmpxchgq %1, (%0)" "\n\t"
+ "xrelease lock cmpxchgq %1, (%0)" "\n\t"
+ "xacquire lock cmpxchgl %k1, (%0)" "\n\t"
+ "xrelease lock cmpxchgl %k1, (%0)" "\n\t"
+ "xacquire lock cmpxchgw %w1, (%0)" "\n\t"
+ "xrelease lock cmpxchgw %w1, (%0)" "\n\t"
+ "xacquire lock cmpxchgb %b1, (%0)" "\n\t"
+ "xrelease lock cmpxchgb %b1, (%0)" "\n\t"
+ : : "r"(&n), "r"(some) : "cc", "memory", "rax"
+ );
+ printf("result for '%-3s' is %016llx\n", "cmpxchg", n);
+}
+
+void do_cmpxchg8b ( void )
+{
+ volatile ULong n = 0x5555555555555555ULL;
+ __asm__ __volatile__(
+ "xorq %%rax, %%rax" "\n\t"
+ "xorq %%rdx, %%rdx" "\n\t"
+ "xacquire lock cmpxchg8b (%0)" "\n\t"
+ "xrelease lock cmpxchg8b (%0)" "\n\t"
+ : : "r"(&n) : "cc", "memory", "rax", "rdx"
+ );
+ printf("result for '%-3s' is %016llx\n", "cmpxchg8b", n);
+}
+
+void do_xadd ( void )
+{
+ volatile ULong n = 0x5555555555555555ULL;
+ ULong some = 0x271831415927D459ULL;
+ __asm__ __volatile__(
+ "\t"
+ "stc" "\n\t"
+ // zero out rax and get the flags in a known state
+ "xorq %%rax, %%rax" "\n\t"
+ "xacquire lock xaddq %1, (%0)" "\n\t"
+ "xrelease lock xaddq %1, (%0)" "\n\t"
+ "xacquire lock xaddl %k1, (%0)" "\n\t"
+ "xrelease lock xaddl %k1, (%0)" "\n\t"
+ "xacquire lock xaddw %w1, (%0)" "\n\t"
+ "xrelease lock xaddw %w1, (%0)" "\n\t"
+ "xacquire lock xaddb %b1, (%0)" "\n\t"
+ "xrelease lock xaddb %b1, (%0)" "\n\t"
+ : : "r"(&n), "r"(some) : "cc", "memory", "rax"
+ // not sure this constraint string is really correct, since %1
+ // is written as well as read, in this case. But I can't figure
+ // out how to tell gcc that.
+ );
+ printf("result for '%-3s' is %016llx\n", "xadd", n);
+}
+
+void do_xchg ( void )
+{
+ volatile ULong n = 0x5555555555555555ULL;
+ ULong some = 0x271831415927D459ULL;
+ __asm__ __volatile__(
+ "\t"
+ "stc" "\n\t"
+ // zero out rax and get the flags in a known state
+ "xorq %%rax, %%rax" "\n\t"
+ "xacquire lock xchgq %1, (%0)" "\n\t"
+ "xrelease lock xchgq %1, (%0)" "\n\t"
+ "xacquire lock xchgl %k1, (%0)" "\n\t"
+ "xrelease lock xchgl %k1, (%0)" "\n\t"
+ "xacquire lock xchgw %w1, (%0)" "\n\t"
+ "xrelease lock xchgw %w1, (%0)" "\n\t"
+ "xacquire lock xchgb %b1, (%0)" "\n\t"
+ "xrelease lock xchgb %b1, (%0)" "\n\t"
+ : : "r"(&n), "r"(some) : "cc", "memory", "rax"
+ // not sure this constraint string is really correct, since %1
+ // is written as well as read, in this case. But I can't figure
+ // out how to tell gcc that.
+ );
+ printf("result for '%-3s' is %016llx\n", "xchg", n);
+}
+
+void do_xchg_no_lock ( void )
+{
+ volatile ULong n = 0x5555555555555555ULL;
+ ULong some = 0x271831415927D459ULL;
+ __asm__ __volatile__(
+ "\t"
+ "stc" "\n\t"
+ // zero out rax and get the flags in a known state
+ "xorq %%rax, %%rax" "\n\t"
+ "xacquire xchgq %1, (%0)" "\n\t"
+ "xrelease xchgq %1, (%0)" "\n\t"
+ "xacquire xchgl %k1, (%0)" "\n\t"
+ "xrelease xchgl %k1, (%0)" "\n\t"
+ "xacquire xchgw %w1, (%0)" "\n\t"
+ "xrelease xchgw %w1, (%0)" "\n\t"
+ "xacquire xchgb %b1, (%0)" "\n\t"
+ "xrelease xchgb %b1, (%0)" "\n\t"
+ : : "r"(&n), "r"(some) : "cc", "memory", "rax"
+ // not sure this constraint string is really correct, since %1
+ // is written as well as read, in this case. But I can't figure
+ // out how to tell gcc that.
+ );
+ printf("result for '%-3s' is %016llx\n", "xchg-no-lock", n);
+}
+
+void do_mov ( void )
+{
+ // According to the Intel docs, we only need to allow xrelease here.
+ volatile ULong n = 0x5555555555555555ULL;
+ ULong some = 0x271831415927D459ULL;
+ __asm__ __volatile__(
+ "\t"
+ "xrelease movq %1, 0(%0)" "\n\t"
+ "xrelease movl %k1, 1(%0)" "\n\t"
+ "xrelease movw %w1, 3(%0)" "\n\t"
+ "xrelease movb %b1, 7(%0)" "\n\t"
+ : : "r"(&n), "r"(some) : "cc", "memory"
+ );
+ printf("result for '%-3s' is %016llx\n", "mov-reg", n);
+ n = 0xAAAAAAAAAAAAAAAAULL;
+ __asm__ __volatile__(
+ "\t"
+ "xrelease movq $-0x79876543, 0(%0)" "\n\t"
+ "xrelease movl $0xEFCDAB89, 1(%0)" "\n\t"
+ "xrelease movw $0xF00D, 3(%0)" "\n\t"
+ "xrelease movb $0x42, 7(%0)" "\n\t"
+ : : "r"(&n) : "cc", "memory"
+ );
+ printf("result for '%-3s' is %016llx\n", "mov-imm", n);
+}
+
+int main ( void )
+{
+ do_add();
+ do_adc();
+ do_and();
+ do_or();
+ do_sbb();
+ do_sub();
+ do_xor();
+ do_dec();
+ do_inc();
+ do_neg();
+ do_not();
+ do_btc();
+ do_btr();
+ do_bts();
+ do_cmpxchg();
+ do_cmpxchg8b();
+ do_xadd();
+ do_xchg();
+ do_xchg_no_lock();
+ do_mov();
+ return 0;
+}
|
|
From: Philippe W. <phi...@sk...> - 2013-10-15 04:44:55
|
valgrind revision: 13644 VEX revision: 2786 C compiler: gcc (GCC) 4.7.2 20121109 (Red Hat 4.7.2-8) GDB: GNU gdb (GDB) Fedora (7.5.1-37.fc18) Assembler: GNU assembler version 2.23.51.0.1-7.fc18 20120806 C library: GNU C Library stable release version 2.16 uname -mrs: Linux 3.7.2-204.fc18.ppc64 ppc64 Vendor version: Fedora release 18 (Spherical Cow) Nightly build on gcc110 ( Fedora release 18 (Spherical Cow), ppc64 ) Started at 2013-10-14 20:00:19 PDT Ended at 2013-10-14 21:44:13 PDT Results differ from 24 hours ago Checking out valgrind source tree ... done Configuring valgrind ... done Building valgrind ... done Running regression tests ... failed Regression test results follow == 566 tests, 32 stderr failures, 3 stdout failures, 0 stderrB failures, 0 stdoutB failures, 2 post failures == memcheck/tests/linux/getregset (stdout) memcheck/tests/linux/getregset (stderr) memcheck/tests/ppc64/power_ISA2_05 (stdout) memcheck/tests/supp_unknown (stderr) memcheck/tests/varinfo6 (stderr) memcheck/tests/wrap8 (stdout) memcheck/tests/wrap8 (stderr) massif/tests/big-alloc (post) massif/tests/deep-D (post) helgrind/tests/annotate_rwlock (stderr) helgrind/tests/free_is_write (stderr) helgrind/tests/hg02_deadlock (stderr) helgrind/tests/hg03_inherit (stderr) helgrind/tests/hg04_race (stderr) helgrind/tests/hg05_race2 (stderr) helgrind/tests/locked_vs_unlocked1_fwd (stderr) helgrind/tests/locked_vs_unlocked1_rev (stderr) helgrind/tests/locked_vs_unlocked2 (stderr) helgrind/tests/locked_vs_unlocked3 (stderr) helgrind/tests/pth_barrier1 (stderr) helgrind/tests/pth_barrier2 (stderr) helgrind/tests/pth_barrier3 (stderr) helgrind/tests/pth_cond_destroy_busy (stderr) helgrind/tests/pth_destroy_cond (stderr) helgrind/tests/rwlock_race (stderr) helgrind/tests/tc01_simple_race (stderr) helgrind/tests/tc05_simple_race (stderr) helgrind/tests/tc06_two_races (stderr) helgrind/tests/tc06_two_races_xml (stderr) helgrind/tests/tc09_bad_unlock (stderr) helgrind/tests/tc14_laog_dinphils (stderr) helgrind/tests/tc16_byterace (stderr) helgrind/tests/tc18_semabuse (stderr) helgrind/tests/tc19_shadowmem (stderr) helgrind/tests/tc20_verifywrap (stderr) helgrind/tests/tc21_pthonce (stderr) helgrind/tests/tc22_exit_w_lock (stderr) ================================================= == Results from 24 hours ago == ================================================= Checking out valgrind source tree ... done Configuring valgrind ... done Building valgrind ... done Running regression tests ... failed Regression test results follow == 566 tests, 31 stderr failures, 3 stdout failures, 0 stderrB failures, 0 stdoutB failures, 2 post failures == memcheck/tests/linux/getregset (stdout) memcheck/tests/linux/getregset (stderr) memcheck/tests/ppc64/power_ISA2_05 (stdout) memcheck/tests/supp_unknown (stderr) memcheck/tests/varinfo6 (stderr) memcheck/tests/wrap8 (stdout) memcheck/tests/wrap8 (stderr) massif/tests/big-alloc (post) massif/tests/deep-D (post) helgrind/tests/annotate_rwlock (stderr) helgrind/tests/free_is_write (stderr) helgrind/tests/hg02_deadlock (stderr) helgrind/tests/hg03_inherit (stderr) helgrind/tests/hg04_race (stderr) helgrind/tests/hg05_race2 (stderr) helgrind/tests/locked_vs_unlocked1_fwd (stderr) helgrind/tests/locked_vs_unlocked1_rev (stderr) helgrind/tests/locked_vs_unlocked2 (stderr) helgrind/tests/locked_vs_unlocked3 (stderr) helgrind/tests/pth_barrier1 (stderr) helgrind/tests/pth_barrier2 (stderr) helgrind/tests/pth_barrier3 (stderr) helgrind/tests/pth_destroy_cond (stderr) helgrind/tests/rwlock_race (stderr) helgrind/tests/tc01_simple_race (stderr) helgrind/tests/tc05_simple_race (stderr) helgrind/tests/tc06_two_races (stderr) helgrind/tests/tc06_two_races_xml (stderr) helgrind/tests/tc09_bad_unlock (stderr) helgrind/tests/tc14_laog_dinphils (stderr) helgrind/tests/tc16_byterace (stderr) helgrind/tests/tc18_semabuse (stderr) helgrind/tests/tc19_shadowmem (stderr) helgrind/tests/tc20_verifywrap (stderr) helgrind/tests/tc21_pthonce (stderr) helgrind/tests/tc22_exit_w_lock (stderr) ================================================= == Difference between 24 hours ago and now == ================================================= *** old.short Mon Oct 14 20:30:01 2013 --- new.short Mon Oct 14 20:50:12 2013 *************** *** 8,10 **** ! == 566 tests, 31 stderr failures, 3 stdout failures, 0 stderrB failures, 0 stdoutB failures, 2 post failures == memcheck/tests/linux/getregset (stdout) --- 8,10 ---- ! == 566 tests, 32 stderr failures, 3 stdout failures, 0 stderrB failures, 0 stdoutB failures, 2 post failures == memcheck/tests/linux/getregset (stdout) *************** *** 31,32 **** --- 31,33 ---- helgrind/tests/pth_barrier3 (stderr) + helgrind/tests/pth_cond_destroy_busy (stderr) helgrind/tests/pth_destroy_cond (stderr) --tools=none,memcheck,callgrind,helgrind,cachegrind,drd,massif --reps=3 --vg=../valgrind-new --vg=../valgrind-old -- Running tests in perf ---------------------------------------------- -- bigcode1 -- bigcode1 valgrind-new:0.21s no: 1.5s ( 7.3x, -----) me: 2.8s (13.5x, -----) ca:17.7s (84.1x, -----) he: 1.7s ( 8.2x, -----) ca: 5.3s (25.3x, -----) dr: 1.6s ( 7.7x, -----) ma: 2.1s (10.0x, -----) bigcode1 valgrind-old:0.21s no: 1.5s ( 7.2x, 1.9%) me: 2.9s (14.0x, -3.9%) ca:17.6s (83.7x, 0.5%) he: 1.7s ( 8.2x, -0.6%) ca: 5.3s (25.5x, -0.6%) dr: 1.6s ( 7.8x, -0.6%) ma: 2.1s (10.0x, 0.5%) -- bigcode2 -- bigcode2 valgrind-new:0.21s no: 1.7s ( 8.1x, -----) me: 2.9s (14.0x, -----) ca:17.7s (84.2x, -----) he: 2.1s (10.0x, -----) ca: 5.4s (25.8x, -----) dr: 1.7s ( 8.0x, -----) ma: 2.1s (10.1x, -----) bigcode2 valgrind-old:0.21s no: 1.6s ( 7.4x, 9.4%) me: 2.9s (14.0x, 0.0%) ca:17.7s (84.1x, 0.2%) he: 2.1s ( 9.8x, 1.4%) ca: 5.4s (25.8x, -0.2%) dr: 1.7s ( 8.0x, 1.2%) ma: 2.1s (10.2x, -1.4%) -- bz2 -- bz2 valgrind-new:0.73s no: 4.6s ( 6.2x, -----) me:11.8s (16.2x, -----) ca:25.7s (35.2x, -----) he:14.5s (19.9x, -----) ca:24.6s (33.8x, -----) dr:18.8s (25.8x, -----) ma: 4.7s ( 6.4x, -----) bz2 valgrind-old:0.73s no: 4.7s ( 6.4x, -2.6%) me:11.8s (16.2x, 0.1%) ca:25.3s (34.7x, 1.2%) he:14.6s (20.0x, -0.4%) ca:24.5s (33.6x, 0.4%) dr:19.7s (27.0x, -4.9%) ma: 4.7s ( 6.4x, -0.6%) -- fbench -- fbench valgrind-new:0.33s no: 2.1s ( 6.4x, -----) me: 5.3s (16.1x, -----) ca: 8.4s (25.5x, -----) he: 5.1s (15.4x, -----) ca: 7.5s (22.7x, -----) dr: 4.9s (15.0x, -----) ma: 2.1s ( 6.5x, -----) fbench valgrind-old:0.33s no: 2.1s ( 6.4x, -0.5%) me: 5.3s (16.0x, 0.4%) ca: 8.4s (25.3x, 0.5%) he: 5.1s (15.5x, -0.6%) ca: 7.6s (23.1x, -1.7%) dr: 4.9s (14.9x, 0.4%) ma: 2.1s ( 6.5x, 0.5%) -- ffbench -- ffbench valgrind-new:0.45s no: 1.0s ( 2.3x, -----) me: 2.5s ( 5.6x, -----) ca: 2.5s ( 5.5x, -----) he: 7.0s (15.6x, -----) ca: 7.1s (15.8x, -----) dr: 5.3s (11.7x, -----) ma: 1.0s ( 2.2x, -----) ffbench valgrind-old:0.45s no: 1.0s ( 2.3x, 1.0%) me: 2.5s ( 5.6x, 0.4%) ca: 2.4s ( 5.4x, 1.2%) he: 6.9s (15.4x, 1.3%) ca: 7.2s (16.0x, -1.3%) dr: 5.4s (12.0x, -2.8%) ma: 1.0s ( 2.2x, 0.0%) -- heap -- heap valgrind-new:0.40s no: 2.5s ( 6.2x, -----) me: 9.8s (24.4x, -----) ca:13.1s (32.7x, -----) he:12.9s (32.2x, -----) ca:12.1s (30.1x, -----) dr: 7.9s (19.7x, -----) ma: 8.5s (21.3x, -----) heap valgrind-old:0.40s no: 2.5s ( 6.1x, 0.4%) me: 9.9s (24.8x, -1.3%) ca:13.0s (32.4x, 0.8%) he:13.0s (32.6x, -1.2%) ca:12.1s (30.4x, -0.7%) dr: 8.2s (20.6x, -4.4%) ma: 8.6s (21.4x, -0.5%) -- heap_pdb4 -- heap_pdb4 valgrind-new:0.42s no: 2.5s ( 6.0x, -----) me:14.0s (33.3x, -----) ca:14.1s (33.5x, -----) he:14.5s (34.5x, -----) ca:13.0s (31.0x, -----) dr: 9.1s (21.7x, -----) ma: 8.8s (20.9x, -----) heap_pdb4 valgrind-old:0.42s no: 2.6s ( 6.2x, -4.0%) me:14.0s (33.4x, -0.3%) ca:13.9s (33.0x, 1.4%) he:14.6s (34.9x, -1.1%) ca:13.2s (31.3x, -0.8%) dr: 9.1s (21.7x, 0.0%) ma: 8.8s (20.9x, 0.0%) -- many-loss-records -- many-loss-records valgrind-new:0.03s no: 0.5s (17.7x, -----) me: 2.1s (71.7x, -----) ca: 1.9s (61.7x, -----) he: 2.0s (66.3x, -----) ca: 1.9s (61.7x, -----) dr: 1.5s (50.0x, -----) ma: 1.6s (53.0x, -----) many-loss-records valgrind-old:0.03s no: 0.5s (17.7x, 0.0%) me: 2.2s (72.7x, -1.4%) ca: 1.8s (61.3x, 0.5%) he: 2.0s (66.7x, -0.5%) ca: 1.9s (61.7x, 0.0%) dr: 1.5s (49.7x, 0.7%) ma: 1.6s (52.0x, 1.9%) -- many-xpts -- many-xpts valgrind-new:0.16s no: 0.7s ( 4.6x, -----) me: 3.4s (21.1x, -----) ca: 4.7s (29.1x, -----) he: 5.0s (31.2x, -----) ca: 2.9s (18.1x, -----) dr: 2.2s (14.0x, -----) ma: 2.3s (14.1x, -----) many-xpts valgrind-old:0.16s no: 0.7s ( 4.6x, -1.4%) me: 3.4s (21.3x, -1.2%) ca: 4.6s (28.9x, 0.6%) he: 5.0s (31.3x, -0.2%) ca: 2.9s (18.0x, 0.3%) dr: 2.2s (14.0x, 0.0%) ma: 2.3s (14.4x, -2.2%) -- sarp -- sarp valgrind-new:0.02s no: 0.4s (20.5x, -----) me: 3.6s (178.5x, -----) ca: 3.0s (147.5x, -----) he:11.0s (552.0x, -----) ca: 1.8s (92.0x, -----) dr: 1.0s (50.0x, -----) ma: 0.4s (21.0x, -----) sarp valgrind-old:0.02s no: 0.4s (20.0x, 2.4%) me: 3.5s (175.0x, 2.0%) ca: 2.9s (147.0x, 0.3%) he:11.1s (554.0x, -0.4%) ca: 1.7s (86.0x, 6.5%) dr: 1.0s (50.0x, 0.0%) ma: 0.4s (20.5x, 2.4%) -- tinycc -- tinycc valgrind-new:0.27s no: 3.0s (11.1x, -----) me:14.1s (52.1x, -----) ca:17.1s (63.5x, -----) he:18.9s (70.0x, -----) ca:15.8s (58.3x, -----) dr:12.0s (44.6x, -----) ma: 3.9s (14.3x, -----) tinycc valgrind-old:0.27s no: 3.0s (11.0x, 0.3%) me:14.1s (52.1x, 0.0%) ca:17.1s (63.4x, 0.1%) he:18.9s (70.1x, -0.1%) ca:15.7s (58.1x, 0.4%) dr:12.2s (45.1x, -1.1%) ma: 3.8s (14.1x, 1.3%) -- Finished tests in perf ---------------------------------------------- == 11 programs, 154 timings ================= real 54m0.703s user 52m18.687s sys 0m20.432s |
|
From: Tom H. <to...@co...> - 2013-10-15 03:31:00
|
valgrind revision: 13644 VEX revision: 2786 C compiler: gcc (GCC) 4.3.0 20080428 (Red Hat 4.3.0-8) GDB: Assembler: GNU assembler version 2.18.50.0.6-2 20080403 C library: GNU C Library stable release version 2.8 uname -mrs: Linux 3.9.5-301.fc19.x86_64 x86_64 Vendor version: Fedora release 9 (Sulphur) Nightly build on bristol ( x86_64, Fedora 9 ) Started at 2013-10-15 03:53:06 BST Ended at 2013-10-15 04:30:43 BST Results unchanged from 24 hours ago Checking out valgrind source tree ... done Configuring valgrind ... done Building valgrind ... done Running regression tests ... failed Regression test results follow == 643 tests, 1 stderr failure, 1 stdout failure, 0 stderrB failures, 0 stdoutB failures, 0 post failures == memcheck/tests/amd64/insn-pcmpistri (stderr) none/tests/amd64/sse4-64 (stdout) |
|
From: Tom H. <to...@co...> - 2013-10-15 03:27:08
|
valgrind revision: 13644 VEX revision: 2786 C compiler: gcc (GCC) 4.4.1 20090725 (Red Hat 4.4.1-2) GDB: Assembler: GNU assembler version 2.19.51.0.14-3.fc11 20090722 C library: GNU C Library stable release version 2.10.2 uname -mrs: Linux 3.9.5-301.fc19.x86_64 x86_64 Vendor version: Fedora release 11 (Leonidas) Nightly build on bristol ( x86_64, Fedora 11 ) Started at 2013-10-15 03:41:33 BST Ended at 2013-10-15 04:26:52 BST Results unchanged from 24 hours ago Checking out valgrind source tree ... done Configuring valgrind ... done Building valgrind ... done Running regression tests ... failed Regression test results follow == 645 tests, 1 stderr failure, 1 stdout failure, 0 stderrB failures, 0 stdoutB failures, 0 post failures == memcheck/tests/long_namespace_xml (stderr) none/tests/amd64/sse4-64 (stdout) |
|
From: Tom H. <to...@co...> - 2013-10-15 03:08:17
|
valgrind revision: 13644 VEX revision: 2786 C compiler: gcc (GCC) 4.4.5 20101112 (Red Hat 4.4.5-2) GDB: Assembler: GNU assembler version 2.20.51.0.2-20.fc13 20091009 C library: GNU C Library stable release version 2.12.2 uname -mrs: Linux 3.9.5-301.fc19.x86_64 x86_64 Vendor version: Fedora release 13 (Goddard) Nightly build on bristol ( x86_64, Fedora 13 ) Started at 2013-10-15 03:31:54 BST Ended at 2013-10-15 04:08:04 BST Results differ from 24 hours ago Checking out valgrind source tree ... done Configuring valgrind ... done Building valgrind ... done Running regression tests ... failed Regression test results follow == 647 tests, 2 stderr failures, 0 stdout failures, 0 stderrB failures, 0 stdoutB failures, 0 post failures == helgrind/tests/pth_barrier3 (stderr) helgrind/tests/pth_destroy_cond (stderr) ================================================= == Results from 24 hours ago == ================================================= Checking out valgrind source tree ... done Configuring valgrind ... done Building valgrind ... done Running regression tests ... failed Regression test results follow == 647 tests, 1 stderr failure, 0 stdout failures, 0 stderrB failures, 0 stdoutB failures, 0 post failures == helgrind/tests/pth_barrier3 (stderr) ================================================= == Difference between 24 hours ago and now == ================================================= *** old.short 2013-10-15 03:48:05.203941560 +0100 --- new.short 2013-10-15 04:08:04.377401318 +0100 *************** *** 8,11 **** ! == 647 tests, 1 stderr failure, 0 stdout failures, 0 stderrB failures, 0 stdoutB failures, 0 post failures == helgrind/tests/pth_barrier3 (stderr) --- 8,12 ---- ! == 647 tests, 2 stderr failures, 0 stdout failures, 0 stderrB failures, 0 stdoutB failures, 0 post failures == helgrind/tests/pth_barrier3 (stderr) + helgrind/tests/pth_destroy_cond (stderr) |
|
From: Tom H. <to...@co...> - 2013-10-15 03:04:37
|
valgrind revision: 13644 VEX revision: 2786 C compiler: gcc (GCC) 4.5.1 20100924 (Red Hat 4.5.1-4) GDB: GNU gdb (GDB) Fedora (7.2-52.fc14) Assembler: GNU assembler version 2.20.51.0.7-8.fc14 20100318 C library: GNU C Library stable release version 2.13 uname -mrs: Linux 3.9.5-301.fc19.x86_64 x86_64 Vendor version: Fedora release 14 (Laughlin) Nightly build on bristol ( x86_64, Fedora 14 ) Started at 2013-10-15 03:23:09 BST Ended at 2013-10-15 04:04:16 BST Results unchanged from 24 hours ago Checking out valgrind source tree ... done Configuring valgrind ... done Building valgrind ... done Running regression tests ... failed Regression test results follow == 666 tests, 1 stderr failure, 0 stdout failures, 0 stderrB failures, 0 stdoutB failures, 0 post failures == memcheck/tests/origin5-bz2 (stderr) |
|
From: Tom H. <to...@co...> - 2013-10-15 02:53:02
|
valgrind revision: 13644 VEX revision: 2786 C compiler: gcc (GCC) 4.6.3 20120306 (Red Hat 4.6.3-2) GDB: GNU gdb (GDB) Fedora (7.3.1-48.fc15) Assembler: GNU assembler version 2.21.51.0.6-6.fc15 20110118 C library: GNU C Library stable release version 2.14.1 uname -mrs: Linux 3.9.5-301.fc19.x86_64 x86_64 Vendor version: Fedora release 15 (Lovelock) Nightly build on bristol ( x86_64, Fedora 15 ) Started at 2013-10-15 03:13:48 BST Ended at 2013-10-15 03:52:34 BST Results unchanged from 24 hours ago Checking out valgrind source tree ... done Configuring valgrind ... done Building valgrind ... done Running regression tests ... failed Regression test results follow == 668 tests, 1 stderr failure, 0 stdout failures, 0 stderrB failures, 0 stdoutB failures, 0 post failures == memcheck/tests/origin5-bz2 (stderr) |
|
From: Tom H. <to...@co...> - 2013-10-15 02:44:33
|
valgrind revision: 13644 VEX revision: 2786 C compiler: gcc (GCC) 4.6.3 20120306 (Red Hat 4.6.3-2) GDB: GNU gdb (GDB) Fedora (7.3.50.20110722-16.fc16) Assembler: GNU assembler version 2.21.53.0.1-6.fc16 20110716 C library: GNU C Library development release version 2.14.90 uname -mrs: Linux 3.9.5-301.fc19.x86_64 x86_64 Vendor version: Fedora release 16 (Verne) Nightly build on bristol ( x86_64, Fedora 16 ) Started at 2013-10-15 03:02:40 BST Ended at 2013-10-15 03:44:17 BST Results unchanged from 24 hours ago Checking out valgrind source tree ... done Configuring valgrind ... done Building valgrind ... done Running regression tests ... failed Regression test results follow == 668 tests, 1 stderr failure, 0 stdout failures, 0 stderrB failures, 0 stdoutB failures, 0 post failures == memcheck/tests/origin5-bz2 (stderr) |
|
From: Tom H. <to...@co...> - 2013-10-15 02:28:51
|
valgrind revision: 13644 VEX revision: 2786 C compiler: gcc (GCC) 4.7.2 20120921 (Red Hat 4.7.2-2) GDB: GNU gdb (GDB) Fedora (7.4.50.20120120-54.fc17) Assembler: GNU assembler version 2.22.52.0.1-10.fc17 20120131 C library: GNU C Library stable release version 2.15 uname -mrs: Linux 3.9.5-301.fc19.x86_64 x86_64 Vendor version: Fedora release 17 (Beefy Miracle) Nightly build on bristol ( x86_64, Fedora 17 (Beefy Miracle) ) Started at 2013-10-15 02:51:25 BST Ended at 2013-10-15 03:28:31 BST Results unchanged from 24 hours ago Checking out valgrind source tree ... done Configuring valgrind ... done Building valgrind ... done Running regression tests ... failed Regression test results follow == 668 tests, 5 stderr failures, 1 stdout failure, 0 stderrB failures, 0 stdoutB failures, 0 post failures == gdbserver_tests/mcinfcallRU (stderr) gdbserver_tests/mcinfcallWSRU (stderr) gdbserver_tests/mcmain_pic (stderr) memcheck/tests/origin5-bz2 (stderr) exp-sgcheck/tests/preen_invars (stdout) exp-sgcheck/tests/preen_invars (stderr) |
|
From: Tom H. <to...@co...> - 2013-10-15 02:17:32
|
valgrind revision: 13644 VEX revision: 2786 C compiler: gcc (GCC) 4.7.2 20121109 (Red Hat 4.7.2-8) GDB: GNU gdb (GDB) Fedora 7.5.1-42.fc18 Assembler: GNU assembler version 2.23.51.0.1-10.fc18 20120806 C library: GNU C Library stable release version 2.16 uname -mrs: Linux 3.9.5-301.fc19.x86_64 x86_64 Vendor version: Fedora release 18 (Spherical Cow) Nightly build on bristol ( x86_64, Fedora 18 (Spherical Cow) ) Started at 2013-10-15 02:41:38 BST Ended at 2013-10-15 03:17:11 BST Results unchanged from 24 hours ago Checking out valgrind source tree ... done Configuring valgrind ... done Building valgrind ... done Running regression tests ... failed Regression test results follow == 668 tests, 2 stderr failures, 1 stdout failure, 0 stderrB failures, 0 stdoutB failures, 0 post failures == memcheck/tests/origin5-bz2 (stderr) exp-sgcheck/tests/preen_invars (stdout) exp-sgcheck/tests/preen_invars (stderr) |
|
From: Tom H. <to...@co...> - 2013-10-15 02:11:57
|
valgrind revision: 13644 VEX revision: 2786 C compiler: gcc (GCC) 4.8.1 20130603 (Red Hat 4.8.1-1) GDB: GNU gdb (GDB) Fedora 7.6.1-41.fc19 Assembler: GNU assembler version 2.23.52.0.1-9.fc19 20130226 C library: GNU C Library (GNU libc) stable release version 2.17 uname -mrs: Linux 3.9.5-301.fc19.x86_64 x86_64 Vendor version: Fedora release 19 (Schrödingerâs Cat) Nightly build on bristol ( x86_64, Fedora 19 (Schrödingerâs Cat) ) Started at 2013-10-15 02:32:19 BST Ended at 2013-10-15 03:11:39 BST Results unchanged from 24 hours ago Checking out valgrind source tree ... done Configuring valgrind ... done Building valgrind ... done Running regression tests ... failed Regression test results follow == 668 tests, 3 stderr failures, 0 stdout failures, 0 stderrB failures, 0 stdoutB failures, 0 post failures == memcheck/tests/dw4 (stderr) memcheck/tests/origin5-bz2 (stderr) exp-sgcheck/tests/hackedbz2 (stderr) |
|
From: Tom H. <to...@co...> - 2013-10-15 01:49:48
|
valgrind revision: 13644 VEX revision: 2786 C compiler: gcc (GCC) 4.8.1 20130920 (Red Hat 4.8.1-10) GDB: GNU gdb (GDB) Fedora 7.6.50.20130731-12.fc21 Assembler: GNU assembler version 2.23.90-2.fc21 20131010 C library: GNU C Library (GNU libc) development release version 2.18.90 uname -mrs: Linux 3.9.5-301.fc19.x86_64 x86_64 Vendor version: Fedora release 21 (Rawhide) Nightly build on bristol ( x86_64, Fedora 21 ) Started at 2013-10-15 02:21:43 BST Ended at 2013-10-15 02:49:32 BST Results unchanged from 24 hours ago Checking out valgrind source tree ... done Configuring valgrind ... done Building valgrind ... done Running regression tests ... failed Regression test results follow == 668 tests, 7 stderr failures, 1 stdout failure, 0 stderrB failures, 0 stdoutB failures, 0 post failures == memcheck/tests/amd64/insn_basic (stderr) memcheck/tests/dw4 (stderr) memcheck/tests/origin5-bz2 (stderr) none/tests/amd64/insn_basic (stdout) none/tests/amd64/insn_basic (stderr) drd/tests/pth_mutex_reinit (stderr) exp-sgcheck/tests/globalerr (stderr) exp-sgcheck/tests/hackedbz2 (stderr) |
|
From: Rich C. <rc...@wi...> - 2013-10-15 01:37:04
|
valgrind revision: 13644
VEX revision: 2786
C compiler: gcc (SUSE Linux) 4.8.1 20130909 [gcc-4_8-branch revision 202388]
GDB: GNU gdb (GDB; openSUSE Factory) 7.6.50.20130731-cvs
Assembler: GNU assembler (GNU Binutils; openSUSE Factory) 2.23.2
C library: GNU C Library (GNU libc) stable release version 2.18 (git )
uname -mrs: Linux 3.11.3-2-desktop x86_64
Vendor version: Welcome to openSUSE 13.1 "Bottle" Beta 1 - Kernel %r (%t).
Nightly build on rodan ( Linux 3.11.3-2-desktop x86_64 )
Started at 2013-10-14 19:22:01 CDT
Ended at 2013-10-14 20:35:45 CDT
Results unchanged from 24 hours ago
Checking out valgrind source tree ... done
Configuring valgrind ... done
Building valgrind ... done
Running regression tests ... failed
Regression test results follow
== 583 tests, 10 stderr failures, 1 stdout failure, 0 stderrB failures, 0 stdoutB failures, 0 post failures ==
memcheck/tests/amd64/insn_basic (stderr)
memcheck/tests/dw4 (stderr)
memcheck/tests/err_disable3 (stderr)
memcheck/tests/err_disable4 (stderr)
memcheck/tests/origin5-bz2 (stderr)
memcheck/tests/threadname (stderr)
memcheck/tests/threadname_xml (stderr)
none/tests/amd64/insn_basic (stdout)
none/tests/amd64/insn_basic (stderr)
drd/tests/pth_mutex_reinit (stderr)
exp-sgcheck/tests/hackedbz2 (stderr)
=================================================
./valgrind-new/drd/tests/pth_mutex_reinit.stderr.diff
=================================================
--- pth_mutex_reinit.stderr.exp 2013-10-14 19:57:07.000521911 -0500
+++ pth_mutex_reinit.stderr.out 2013-10-14 20:29:28.880041929 -0500
@@ -1,11 +1,15 @@
+The object at address 0x........ is not a mutex.
+ at 0x........: pthread_mutex_init (drd_pthread_intercepts.c:?)
+ by 0x........: main (pth_mutex_reinit.c:?)
+
Mutex reinitialization: mutex 0x........, recursion count 0, owner 1.
at 0x........: pthread_mutex_init (drd_pthread_intercepts.c:?)
by 0x........: main (pth_mutex_reinit.c:?)
mutex 0x........ was first observed at:
- at 0x........: pthread_mutex_init (drd_pthread_intercepts.c:?)
+ at 0x........: pthread_mutex_lock (drd_pthread_intercepts.c:?)
by 0x........: main (pth_mutex_reinit.c:?)
Done.
-ERROR SUMMARY: 1 errors from 1 contexts (suppressed: 0 from 0)
+ERROR SUMMARY: 2 errors from 2 contexts (suppressed: 0 from 0)
=================================================
./valgrind-new/exp-sgcheck/tests/hackedbz2.stderr.diff-glibc28-amd64
=================================================
--- hackedbz2.stderr.exp-glibc28-amd64 2013-10-14 19:57:06.414517134 -0500
+++ hackedbz2.stderr.out 2013-10-14 20:35:00.132644999 -0500
@@ -1,7 +1,6 @@
Invalid read of size 1
- at 0x........: vex_strlen (hackedbz2.c:1006)
- by 0x........: add_to_myprintf_buf (hackedbz2.c:1284)
+ at 0x........: add_to_myprintf_buf (hackedbz2.c:1006)
by 0x........: vex_printf (hackedbz2.c:1155)
by 0x........: BZ2_compressBlock (hackedbz2.c:4039)
by 0x........: handle_compress (hackedbz2.c:4761)
=================================================
./valgrind-new/memcheck/tests/amd64/insn_basic.stderr.diff
=================================================
--- insn_basic.stderr.exp 2013-10-14 19:57:03.404492596 -0500
+++ insn_basic.stderr.out 2013-10-14 20:07:21.559560914 -0500
@@ -0,0 +1,10 @@
+Jump to the invalid address stated on the next line
+ ...
+ by 0x........: main (insn_basic.c:56777)
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+
+Process terminating with default action of signal 11 (SIGSEGV)
+ Bad permissions for mapped region at address 0x........
+ ...
+ by 0x........: main (insn_basic.c:56777)
=================================================
./valgrind-new/memcheck/tests/dw4.stderr.diff
=================================================
--- dw4.stderr.exp 2013-10-14 19:57:09.801544746 -0500
+++ dw4.stderr.out 2013-10-14 20:08:37.102184080 -0500
@@ -1,3 +1,11 @@
+
+parse_type_DIE: confused by:
+ <1><492>: DW_TAG_structure_type
+ DW_AT_signature : 8 byte signature: 9b d0 55 13 bb 1e e9 37
+
+WARNING: Serious error when reading debug info
+When reading debug info from /usr/local/src/valgrind/nightly/valgrind-new/memcheck/tests/dw4:
+parse_type_DIE: confused by the above DIE
Uninitialised byte(s) found during client check request
at 0x........: croak (dw4.c:27)
by 0x........: main (dw4.c:49)
@@ -8,12 +16,10 @@
Uninitialised byte(s) found during client check request
at 0x........: croak (dw4.c:27)
by 0x........: main (dw4.c:51)
- Location 0x........ is 0 bytes inside S2[0].i,
- a global variable declared at dw4.c:42
+ Address 0x........ is 4 bytes inside data symbol "S2"
Uninitialised byte(s) found during client check request
at 0x........: croak (dw4.c:27)
by 0x........: main (dw4.c:52)
- Location 0x........ is 0 bytes inside local.i,
- declared at dw4.c:46, in frame #1 of thread 1
+ Address 0x........ is on thread 1's stack
=================================================
./valgrind-new/memcheck/tests/err_disable3.stderr.diff
=================================================
--- err_disable3.stderr.exp 2013-10-14 19:57:09.742544265 -0500
+++ err_disable3.stderr.out 2013-10-14 20:08:41.546220764 -0500
@@ -10,8 +10,6 @@
Thread 2:
Invalid read of size 1
at 0x........: err (err_disable3.c:25)
- by 0x........: child_fn (err_disable3.c:31)
- ...
Address 0x........ is 5 bytes inside a block of size 10 free'd
at 0x........: free (vg_replace_malloc.c:...)
by 0x........: main (err_disable3.c:42)
=================================================
./valgrind-new/memcheck/tests/err_disable4.stderr.diff
=================================================
--- err_disable4.stderr.exp 2013-10-14 19:57:09.995546328 -0500
+++ err_disable4.stderr.out 2013-10-14 20:08:44.049241427 -0500
@@ -1501,8 +1501,6 @@
Thread x:
Invalid read of size 1
at 0x........: err (err_disable4.c:41)
- by 0x........: child_fn_2 (err_disable4.c:55)
- ...
Address 0x........ is 5 bytes inside a block of size 10 free'd
at 0x........: free (vg_replace_malloc.c:...)
by 0x........: main (err_disable4.c:68)
=================================================
./valgrind-new/memcheck/tests/origin5-bz2.stderr.diff-glibc212-s390x
=================================================
--- origin5-bz2.stderr.exp-glibc212-s390x 2013-10-14 19:57:09.069538778 -0500
+++ origin5-bz2.stderr.out 2013-10-14 20:10:32.445137056 -0500
@@ -75,17 +75,6 @@
at 0x........: main (origin5-bz2.c:6479)
Use of uninitialised value of size 8
- at 0x........: mainSort (origin5-bz2.c:2859)
- by 0x........: BZ2_blockSort (origin5-bz2.c:3105)
- by 0x........: BZ2_compressBlock (origin5-bz2.c:4034)
- by 0x........: handle_compress (origin5-bz2.c:4753)
- by 0x........: BZ2_bzCompress (origin5-bz2.c:4822)
- by 0x........: BZ2_bzBuffToBuffCompress (origin5-bz2.c:5630)
- by 0x........: main (origin5-bz2.c:6484)
- Uninitialised value was created by a client request
- at 0x........: main (origin5-bz2.c:6479)
-
-Use of uninitialised value of size 8
at 0x........: mainSort (origin5-bz2.c:2963)
by 0x........: BZ2_blockSort (origin5-bz2.c:3105)
by 0x........: BZ2_compressBlock (origin5-bz2.c:4034)
@@ -131,6 +120,12 @@
Conditional jump or move depends on uninitialised value(s)
at 0x........: main (origin5-bz2.c:6512)
- Uninitialised value was created by a client request
- at 0x........: main (origin5-bz2.c:6479)
+ Uninitialised value was created by a heap allocation
+ at 0x........: malloc (vg_replace_malloc.c:...)
+ by 0x........: g_serviceFn (origin5-bz2.c:6429)
+ by 0x........: default_bzalloc (origin5-bz2.c:4470)
+ by 0x........: BZ2_decompress (origin5-bz2.c:1578)
+ by 0x........: BZ2_bzDecompress (origin5-bz2.c:5192)
+ by 0x........: BZ2_bzBuffToBuffDecompress (origin5-bz2.c:5678)
+ by 0x........: main (origin5-bz2.c:6498)
=================================================
./valgrind-new/memcheck/tests/origin5-bz2.stderr.diff-glibc234-s390x
=================================================
--- origin5-bz2.stderr.exp-glibc234-s390x 2013-10-14 19:57:10.180547836 -0500
+++ origin5-bz2.stderr.out 2013-10-14 20:10:32.445137056 -0500
@@ -120,6 +120,12 @@
Conditional jump or move depends on uninitialised value(s)
at 0x........: main (origin5-bz2.c:6512)
- Uninitialised value was created by a client request
- at 0x........: main (origin5-bz2.c:6479)
+ Uninitialised value was created by a heap allocation
+ at 0x........: malloc (vg_replace_malloc.c:...)
+ by 0x........: g_serviceFn (origin5-bz2.c:6429)
+ by 0x........: default_bzalloc (origin5-bz2.c:4470)
+ by 0x........: BZ2_decompress (origin5-bz2.c:1578)
+ by 0x........: BZ2_bzDecompress (origin5-bz2.c:5192)
+ by 0x........: BZ2_bzBuffToBuffDecompress (origin5-bz2.c:5678)
+ by 0x........: main (origin5-bz2.c:6498)
=================================================
./valgrind-new/memcheck/tests/origin5-bz2.stderr.diff-glibc25-amd64
=================================================
--- origin5-bz2.stderr.exp-glibc25-amd64 2013-10-14 19:57:09.072538803 -0500
+++ origin5-bz2.stderr.out 2013-10-14 20:10:32.445137056 -0500
@@ -120,6 +120,12 @@
Conditional jump or move depends on uninitialised value(s)
at 0x........: main (origin5-bz2.c:6512)
- Uninitialised value was created by a client request
- at 0x........: main (origin5-bz2.c:6479)
+ Uninitialised value was created by a heap allocation
+ at 0x........: malloc (vg_replace_malloc.c:...)
+ by 0x........: g_serviceFn (origin5-bz2.c:6429)
+ by 0x........: default_bzalloc (origin5-bz2.c:4470)
+ by 0x........: BZ2_decompress (origin5-bz2.c:1578)
+ by 0x........: BZ2_bzDecompress (origin5-bz2.c:5192)
+ by 0x........: BZ2_bzBuffToBuffDecompress (origin5-bz2.c:5678)
+ by 0x........: main (origin5-bz2.c:6498)
=================================================
./valgrind-new/memcheck/tests/origin5-bz2.stderr.diff-glibc25-x86
=================================================
--- origin5-bz2.stderr.exp-glibc25-x86 2013-10-14 19:57:10.353549247 -0500
+++ origin5-bz2.stderr.out 2013-10-14 20:10:32.445137056 -0500
@@ -12,7 +12,7 @@
Uninitialised value was created by a client request
at 0x........: main (origin5-bz2.c:6479)
-Use of uninitialised value of size 4
+Use of uninitialised value of size 8
at 0x........: copy_input_until_stop (origin5-bz2.c:4686)
by 0x........: handle_compress (origin5-bz2.c:4750)
by 0x........: BZ2_bzCompress (origin5-bz2.c:4822)
@@ -21,7 +21,7 @@
Uninitialised value was created by a client request
at 0x........: main (origin5-bz2.c:6479)
-Use of uninitialised value of size 4
+Use of uninitialised value of size 8
at 0x........: copy_input_until_stop (origin5-bz2.c:4686)
by 0x........: handle_compress (origin5-bz2.c:4750)
by 0x........: BZ2_bzCompress (origin5-bz2.c:4822)
@@ -30,7 +30,7 @@
Uninitialised value was created by a client request
at 0x........: main (origin5-bz2.c:6479)
-Use of uninitialised value of size 4
+Use of uninitialised value of size 8
at 0x........: mainSort (origin5-bz2.c:2820)
by 0x........: BZ2_blockSort (origin5-bz2.c:3105)
by 0x........: BZ2_compressBlock (origin5-bz2.c:4034)
@@ -41,7 +41,7 @@
Uninitialised value was created by a client request
at 0x........: main (origin5-bz2.c:6479)
-Use of uninitialised value of size 4
+Use of uninitialised value of size 8
at 0x........: mainSort (origin5-bz2.c:2823)
by 0x........: BZ2_blockSort (origin5-bz2.c:3105)
by 0x........: BZ2_compressBlock (origin5-bz2.c:4034)
@@ -52,7 +52,7 @@
Uninitialised value was created by a client request
at 0x........: main (origin5-bz2.c:6479)
-Use of uninitialised value of size 4
+Use of uninitialised value of size 8
at 0x........: mainSort (origin5-bz2.c:2854)
by 0x........: BZ2_blockSort (origin5-bz2.c:3105)
by 0x........: BZ2_compressBlock (origin5-bz2.c:4034)
@@ -63,7 +63,7 @@
Uninitialised value was created by a client request
at 0x........: main (origin5-bz2.c:6479)
-Use of uninitialised value of size 4
+Use of uninitialised value of size 8
at 0x........: mainSort (origin5-bz2.c:2858)
by 0x........: BZ2_blockSort (origin5-bz2.c:3105)
by 0x........: BZ2_compressBlock (origin5-bz2.c:4034)
@@ -74,7 +74,7 @@
Uninitialised value was created by a client request
at 0x........: main (origin5-bz2.c:6479)
-Use of uninitialised value of size 4
+Use of uninitialised value of size 8
at 0x........: mainSort (origin5-bz2.c:2963)
by 0x........: BZ2_blockSort (origin5-bz2.c:3105)
by 0x........: BZ2_compressBlock (origin5-bz2.c:4034)
@@ -85,7 +85,7 @@
Uninitialised value was created by a client request
at 0x........: main (origin5-bz2.c:6479)
-Use of uninitialised value of size 4
+Use of uninitialised value of size 8
at 0x........: mainSort (origin5-bz2.c:2964)
by 0x........: BZ2_blockSort (origin5-bz2.c:3105)
by 0x........: BZ2_compressBlock (origin5-bz2.c:4034)
@@ -96,7 +96,7 @@
Uninitialised value was created by a client request
at 0x........: main (origin5-bz2.c:6479)
-Use of uninitialised value of size 4
+Use of uninitialised value of size 8
at 0x........: fallbackSort (origin5-bz2.c:2269)
by 0x........: BZ2_blockSort (origin5-bz2.c:3116)
by 0x........: BZ2_compressBlock (origin5-bz2.c:4034)
@@ -107,7 +107,7 @@
Uninitialised value was created by a client request
at 0x........: main (origin5-bz2.c:6479)
-Use of uninitialised value of size 4
+Use of uninitialised value of size 8
at 0x........: fallbackSort (origin5-bz2.c:2275)
by 0x........: BZ2_blockSort (origin5-bz2.c:3116)
by 0x........: BZ2_compressBlock (origin5-bz2.c:4034)
@@ -120,6 +120,12 @@
Conditional jump or move depends on uninitialised value(s)
at 0x........: main (origin5-bz2.c:6512)
- Uninitialised value was created by a client request
- at 0x........: main (origin5-bz2.c:6479)
+ Uninitialised value was created by a heap allocation
+ at 0x........: malloc (vg_replace_malloc.c:...)
<truncated beyond 100 lines>
=================================================
./valgrind-new/memcheck/tests/origin5-bz2.stderr.diff-glibc27-ppc64
=================================================
--- origin5-bz2.stderr.exp-glibc27-ppc64 2013-10-14 19:57:09.790544657 -0500
+++ origin5-bz2.stderr.out 2013-10-14 20:10:32.445137056 -0500
@@ -1,7 +1,7 @@
Conditional jump or move depends on uninitialised value(s)
at 0x........: main (origin5-bz2.c:6481)
Uninitialised value was created by a client request
- at 0x........: main (origin5-bz2.c:6481)
+ at 0x........: main (origin5-bz2.c:6479)
Conditional jump or move depends on uninitialised value(s)
at 0x........: copy_input_until_stop (origin5-bz2.c:4686)
@@ -10,7 +10,7 @@
by 0x........: BZ2_bzBuffToBuffCompress (origin5-bz2.c:5630)
by 0x........: main (origin5-bz2.c:6484)
Uninitialised value was created by a client request
- at 0x........: main (origin5-bz2.c:6481)
+ at 0x........: main (origin5-bz2.c:6479)
Use of uninitialised value of size 8
at 0x........: copy_input_until_stop (origin5-bz2.c:4686)
@@ -19,7 +19,7 @@
by 0x........: BZ2_bzBuffToBuffCompress (origin5-bz2.c:5630)
by 0x........: main (origin5-bz2.c:6484)
Uninitialised value was created by a client request
- at 0x........: main (origin5-bz2.c:6481)
+ at 0x........: main (origin5-bz2.c:6479)
Use of uninitialised value of size 8
at 0x........: copy_input_until_stop (origin5-bz2.c:4686)
@@ -28,7 +28,7 @@
by 0x........: BZ2_bzBuffToBuffCompress (origin5-bz2.c:5630)
by 0x........: main (origin5-bz2.c:6484)
Uninitialised value was created by a client request
- at 0x........: main (origin5-bz2.c:6481)
+ at 0x........: main (origin5-bz2.c:6479)
Use of uninitialised value of size 8
at 0x........: mainSort (origin5-bz2.c:2820)
@@ -39,7 +39,7 @@
by 0x........: BZ2_bzBuffToBuffCompress (origin5-bz2.c:5630)
by 0x........: main (origin5-bz2.c:6484)
Uninitialised value was created by a client request
- at 0x........: main (origin5-bz2.c:6481)
+ at 0x........: main (origin5-bz2.c:6479)
Use of uninitialised value of size 8
at 0x........: mainSort (origin5-bz2.c:2823)
@@ -50,7 +50,7 @@
by 0x........: BZ2_bzBuffToBuffCompress (origin5-bz2.c:5630)
by 0x........: main (origin5-bz2.c:6484)
Uninitialised value was created by a client request
- at 0x........: main (origin5-bz2.c:6481)
+ at 0x........: main (origin5-bz2.c:6479)
Use of uninitialised value of size 8
at 0x........: mainSort (origin5-bz2.c:2854)
@@ -61,7 +61,7 @@
by 0x........: BZ2_bzBuffToBuffCompress (origin5-bz2.c:5630)
by 0x........: main (origin5-bz2.c:6484)
Uninitialised value was created by a client request
- at 0x........: main (origin5-bz2.c:6481)
+ at 0x........: main (origin5-bz2.c:6479)
Use of uninitialised value of size 8
at 0x........: mainSort (origin5-bz2.c:2858)
@@ -72,7 +72,7 @@
by 0x........: BZ2_bzBuffToBuffCompress (origin5-bz2.c:5630)
by 0x........: main (origin5-bz2.c:6484)
Uninitialised value was created by a client request
- at 0x........: main (origin5-bz2.c:6481)
+ at 0x........: main (origin5-bz2.c:6479)
Use of uninitialised value of size 8
at 0x........: mainSort (origin5-bz2.c:2963)
@@ -83,7 +83,7 @@
by 0x........: BZ2_bzBuffToBuffCompress (origin5-bz2.c:5630)
by 0x........: main (origin5-bz2.c:6484)
Uninitialised value was created by a client request
- at 0x........: main (origin5-bz2.c:6481)
+ at 0x........: main (origin5-bz2.c:6479)
Use of uninitialised value of size 8
at 0x........: mainSort (origin5-bz2.c:2964)
@@ -94,7 +94,7 @@
by 0x........: BZ2_bzBuffToBuffCompress (origin5-bz2.c:5630)
by 0x........: main (origin5-bz2.c:6484)
Uninitialised value was created by a client request
- at 0x........: main (origin5-bz2.c:6481)
+ at 0x........: main (origin5-bz2.c:6479)
Use of uninitialised value of size 8
at 0x........: fallbackSort (origin5-bz2.c:2269)
@@ -105,7 +105,7 @@
by 0x........: BZ2_bzBuffToBuffCompress (origin5-bz2.c:5630)
by 0x........: main (origin5-bz2.c:6484)
Uninitialised value was created by a client request
- at 0x........: main (origin5-bz2.c:6481)
+ at 0x........: main (origin5-bz2.c:6479)
Use of uninitialised value of size 8
<truncated beyond 100 lines>
=================================================
./valgrind-new/memcheck/tests/threadname.stderr.diff
=================================================
--- threadname.stderr.exp 2013-10-14 19:57:09.708543988 -0500
+++ threadname.stderr.out 2013-10-14 20:12:18.932018423 -0500
@@ -9,36 +9,12 @@
Thread 2:
Invalid write of size 1
at 0x........: bad_things (threadname.c:16)
- by 0x........: child_fn_0 (threadname.c:53)
- ...
Address 0x........ is 0 bytes after a block of size 2 alloc'd
at 0x........: malloc (vg_replace_malloc.c:...)
by 0x........: bad_things (threadname.c:15)
by 0x........: child_fn_0 (threadname.c:53)
...
-Thread 3 try1:
-Invalid write of size 1
- at 0x........: bad_things (threadname.c:16)
- by 0x........: child_fn_1 (threadname.c:38)
- ...
- Address 0x........ is 0 bytes after a block of size 3 alloc'd
- at 0x........: malloc (vg_replace_malloc.c:...)
- by 0x........: bad_things (threadname.c:15)
- by 0x........: child_fn_1 (threadname.c:38)
- ...
-
-Thread 4 012345678901234:
-Invalid write of size 1
- at 0x........: bad_things (threadname.c:16)
- by 0x........: child_fn_2 (threadname.c:26)
- ...
- Address 0x........ is 0 bytes after a block of size 4 alloc'd
- at 0x........: malloc (vg_replace_malloc.c:...)
- by 0x........: bad_things (threadname.c:15)
- by 0x........: child_fn_2 (threadname.c:26)
- ...
-
Thread 1:
Invalid write of size 1
at 0x........: bad_things (threadname.c:16)
=================================================
./valgrind-new/memcheck/tests/threadname_xml.stderr.diff
=================================================
--- threadname_xml.stderr.exp 2013-10-14 19:57:09.059538697 -0500
+++ threadname_xml.stderr.out 2013-10-14 20:12:20.172028695 -0500
@@ -94,14 +94,6 @@
<file>threadname.c</file>
<line>...</line>
</frame>
- <frame>
- <ip>0x........</ip>
- <obj>...</obj>
- <fn>child_fn_0</fn>
- <dir>...</dir>
- <file>threadname.c</file>
- <line>...</line>
- </frame>
</stack>
<auxwhat>Address 0x........ is 0 bytes after a block of size 2 alloc'd</auxwhat>
<stack>
@@ -135,112 +127,6 @@
<error>
<unique>0x........</unique>
<tid>...</tid>
- <threadname>try1</threadname>
- <kind>InvalidWrite</kind>
- <what>Invalid write of size 1</what>
- <stack>
- <frame>
- <ip>0x........</ip>
- <obj>...</obj>
- <fn>bad_things</fn>
- <dir>...</dir>
- <file>threadname.c</file>
- <line>...</line>
- </frame>
- <frame>
- <ip>0x........</ip>
- <obj>...</obj>
- <fn>child_fn_1</fn>
- <dir>...</dir>
- <file>threadname.c</file>
- <line>...</line>
- </frame>
- </stack>
- <auxwhat>Address 0x........ is 0 bytes after a block of size 3 alloc'd</auxwhat>
- <stack>
- <frame>
- <ip>0x........</ip>
- <obj>...</obj>
- <fn>malloc</fn>
- <dir>...</dir>
- <file>vg_replace_malloc.c</file>
- <line>...</line>
- </frame>
- <frame>
- <ip>0x........</ip>
- <obj>...</obj>
- <fn>bad_things</fn>
- <dir>...</dir>
- <file>threadname.c</file>
- <line>...</line>
- </frame>
- <frame>
- <ip>0x........</ip>
- <obj>...</obj>
- <fn>child_fn_1</fn>
- <dir>...</dir>
- <file>threadname.c</file>
- <line>...</line>
- </frame>
- </stack>
-</error>
-
-<error>
- <unique>0x........</unique>
- <tid>...</tid>
- <threadname>012345678901234</threadname>
- <kind>InvalidWrite</kind>
- <what>Invalid write of size 1</what>
- <stack>
- <frame>
- <ip>0x........</ip>
- <obj>...</obj>
- <fn>bad_things</fn>
- <dir>...</dir>
- <file>threadname.c</file>
- <line>...</line>
- </frame>
- <frame>
- <ip>0x........</ip>
- <obj>...</obj>
- <fn>child_fn_2</fn>
- <dir>...</dir>
- <file>threadname.c</file>
- <line>...</line>
- </frame>
- </stack>
- <auxwhat>Address 0x........ is 0 bytes after a block of size 4 alloc'd</auxwhat>
- <stack>
- <frame>
- <ip>0x........</ip>
- <obj>...</obj>
<truncated beyond 100 lines>
=================================================
./valgrind-new/none/tests/amd64/insn_basic.stderr.diff
=================================================
--- insn_basic.stderr.exp 2013-10-14 19:57:03.404492596 -0500
+++ insn_basic.stderr.out 2013-10-14 20:15:47.225746603 -0500
@@ -0,0 +1,8 @@
+
+Process terminating with default action of signal 11 (SIGSEGV)
+ Bad permissions for mapped region at address 0x........
+ at 0x........: ???
+ by 0x........: _dl_fini (dl-fini.c:210)
+ by 0x........: __run_exit_handlers (exit.c:82)
+ by 0x........: exit (exit.c:104)
+ by 0x........: main (insn_basic.c:56777)
=================================================
./valgrind-new/none/tests/amd64/insn_basic.stdout.diff
=================================================
--- insn_basic.stdout.exp 2013-10-14 19:57:03.339492066 -0500
+++ insn_basic.stdout.out 2013-10-14 20:15:47.047745123 -0500
@@ -1128,159 +1128,4 @@
subq_1 ... ok
subq_2 ... ok
subq_3 ... ok
-subq_4 ... ok
-subq_5 ... ok
-subq_6 ... ok
-subq_7 ... ok
-testb_1 ... ok
-testb_2 ... ok
-testb_3 ... ok
-testb_4 ... ok
-testb_5 ... ok
-testb_6 ... ok
-testb_7 ... ok
-testb_8 ... ok
-testb_9 ... ok
-testb_10 ... ok
-testb_11 ... ok
-testb_12 ... ok
-testb_13 ... ok
-testb_14 ... ok
-testb_15 ... ok
-testb_16 ... ok
-testb_17 ... ok
-testb_18 ... ok
-testb_19 ... ok
-testb_20 ... ok
-testb_21 ... ok
-testb_22 ... ok
-testb_23 ... ok
-testb_24 ... ok
-testb_25 ... ok
-testw_1 ... ok
-testw_2 ... ok
-testw_3 ... ok
-testw_4 ... ok
-testw_5 ... ok
-testw_6 ... ok
-testw_7 ... ok
-testw_8 ... ok
-testw_9 ... ok
-testw_10 ... ok
-testw_11 ... ok
-testw_12 ... ok
-testw_13 ... ok
-testw_14 ... ok
-testw_15 ... ok
-testw_16 ... ok
-testw_17 ... ok
-testw_18 ... ok
-testw_19 ... ok
-testw_20 ... ok
-testw_21 ... ok
-testw_22 ... ok
-testw_23 ... ok
-testw_24 ... ok
-testw_25 ... ok
-testl_1 ... ok
-testl_2 ... ok
-testl_3 ... ok
-testl_4 ... ok
-testl_5 ... ok
-testl_6 ... ok
-testl_7 ... ok
-testl_8 ... ok
-testl_9 ... ok
-testl_10 ... ok
-testl_11 ... ok
-testl_12 ... ok
-testl_13 ... ok
-testl_14 ... ok
-testl_15 ... ok
-testl_16 ... ok
-testl_17 ... ok
-testl_18 ... ok
-testl_19 ... ok
-testl_20 ... ok
-testl_21 ... ok
-testl_22 ... ok
-testl_23 ... ok
-testl_24 ... ok
-testl_25 ... ok
-testq_1 ... ok
-testq_2 ... ok
-testq_3 ... ok
-testq_4 ... ok
-testq_5 ... ok
-testq_6 ... ok
-testq_7 ... ok
-testq_8 ... ok
-testq_9 ... ok
-testq_10 ... ok
-testq_11 ... ok
-testq_12 ... ok
-testq_13 ... ok
-testq_14 ... ok
-testq_15 ... ok
<truncated beyond 100 lines>
=================================================
./valgrind-old/drd/tests/pth_mutex_reinit.stderr.diff
=================================================
--- pth_mutex_reinit.stderr.exp 2013-10-14 19:22:15.489891104 -0500
+++ pth_mutex_reinit.stderr.out 2013-10-14 19:50:45.737425838 -0500
@@ -1,11 +1,15 @@
+The object at address 0x........ is not a mutex.
+ at 0x........: pthread_mutex_init (drd_pthread_intercepts.c:?)
+ by 0x........: main (pth_mutex_reinit.c:?)
+
Mutex reinitialization: mutex 0x........, recursion count 0, owner 1.
at 0x........: pthread_mutex_init (drd_pthread_intercepts.c:?)
by 0x........: main (pth_mutex_reinit.c:?)
mutex 0x........ was first observed at:
- at 0x........: pthread_mutex_init (drd_pthread_intercepts.c:?)
+ at 0x........: pthread_mutex_lock (drd_pthread_intercepts.c:?)
by 0x........: main (pth_mutex_reinit.c:?)
Done.
-ERROR SUMMARY: 1 errors from 1 contexts (suppressed: 0 from 0)
+ERROR SUMMARY: 2 errors from 2 contexts (suppressed: 0 from 0)
=================================================
./valgrind-old/exp-sgcheck/tests/hackedbz2.stderr.diff-glibc28-amd64
=================================================
--- hackedbz2.stderr.exp-glibc28-amd64 2013-10-14 19:22:14.983887201 -0500
+++ hackedbz2.stderr.out 2013-10-14 19:56:14.029090298 -0500
@@ -1,7 +1,6 @@
Invalid read of size 1
- at 0x........: vex_strlen (hackedbz2.c:1006)
- by 0x........: add_to_myprintf_buf (hackedbz2.c:1284)
+ at 0x........: add_to_myprintf_buf (hackedbz2.c:1006)
by 0x........: vex_printf (hackedbz2.c:1155)
by 0x........: BZ2_compressBlock (hackedbz2.c:4039)
by 0x........: handle_compress (hackedbz2.c:4761)
=================================================
./valgrind-old/memcheck/tests/amd64/insn_basic.stderr.diff
=================================================
--- insn_basic.stderr.exp 2013-10-14 19:22:19.258920180 -0500
+++ insn_basic.stderr.out 2013-10-14 19:30:18.418646319 -0500
@@ -0,0 +1,10 @@
+Jump to the invalid address stated on the next line
+ ...
+ by 0x........: main (insn_basic.c:56777)
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+
+Process terminating with default action of signal 11 (SIGSEGV)
+ Bad permissions for mapped region at address 0x........
+ ...
+ by 0x........: main (insn_basic.c:56777)
=================================================
./valgrind-old/memcheck/tests/dw4.stderr.diff
=================================================
--- dw4.stderr.exp 2013-10-14 19:22:16.467898649 -0500
+++ dw4.stderr.out 2013-10-14 19:31:20.005129342 -0500
@@ -1,3 +1,11 @@
+
+parse_type_DIE: confused by:
+ <1><492>: DW_TAG_structure_type
+ DW_AT_signature : 8 byte signature: 9b d0 55 13 bb 1e e9 37
+
+WARNING: Serious error when reading debug info
+When reading debug info from /usr/local/src/valgrind/nightly/valgrind-old/memcheck/tests/dw4:
+parse_type_DIE: confused by the above DIE
Uninitialised byte(s) found during client check request
at 0x........: croak (dw4.c:27)
by 0x........: main (dw4.c:49)
@@ -8,12 +16,10 @@
Uninitialised byte(s) found during client check request
at 0x........: croak (dw4.c:27)
by 0x........: main (dw4.c:51)
- Location 0x........ is 0 bytes inside S2[0].i,
- a global variable declared at dw4.c:42
+ Address 0x........ is 4 bytes inside data symbol "S2"
Uninitialised byte(s) found during client check request
at 0x........: croak (dw4.c:27)
by 0x........: main (dw4.c:52)
- Location 0x........ is 0 bytes inside local.i,
- declared at dw4.c:46, in frame #1 of thread 1
+ Address 0x........ is on thread 1's stack
=================================================
./valgrind-old/memcheck/tests/err_disable3.stderr.diff
=================================================
--- err_disable3.stderr.exp 2013-10-14 19:22:17.284904951 -0500
+++ err_disable3.stderr.out 2013-10-14 19:31:23.655157998 -0500
@@ -10,8 +10,6 @@
Thread 2:
Invalid read of size 1
at 0x........: err (err_disable3.c:25)
- by 0x........: child_fn (err_disable3.c:31)
- ...
Address 0x........ is 5 bytes inside a block of size 10 free'd
at 0x........: free (vg_replace_malloc.c:...)
by 0x........: main (err_disable3.c:42)
=================================================
./valgrind-old/memcheck/tests/err_disable4.stderr.diff
=================================================
--- err_disable4.stderr.exp 2013-10-14 19:22:16.409898201 -0500
+++ err_disable4.stderr.out 2013-10-14 19:31:25.553172900 -0500
@@ -1501,8 +1501,6 @@
Thread x:
Invalid read of size 1
at 0x........: err (err_disable4.c:41)
- by 0x........: child_fn_2 (err_disable4.c:55)
- ...
Address 0x........ is 5 bytes inside a block of size 10 free'd
at 0x........: free (vg_replace_malloc.c:...)
by 0x........: main (err_disable4.c:68)
=================================================
./valgrind-old/memcheck/tests/origin5-bz2.stderr.diff-glibc212-s390x
=================================================
--- origin5-bz2.stderr.exp-glibc212-s390x 2013-10-14 19:22:17.291905005 -0500
+++ origin5-bz2.stderr.out 2013-10-14 19:32:55.081876771 -0500
@@ -75,17 +75,6 @@
at 0x........: main (origin5-bz2.c:6479)
Use of uninitialised value of size 8
- at 0x........: mainSort (origin5-bz2.c:2859)
- by 0x........: BZ2_blockSort (origin5-bz2.c:3105)
- by 0x........: BZ2_compressBlock (origin5-bz2.c:4034)
- by 0x........: handle_compress (origin5-bz2.c:4753)
- by 0x........: BZ2_bzCompress (origin5-bz2.c:4822)
- by 0x........: BZ2_bzBuffToBuffCompress (origin5-bz2.c:5630)
- by 0x........: main (origin5-bz2.c:6484)
- Uninitialised value was created by a client request
- at 0x........: main (origin5-bz2.c:6479)
-
-Use of uninitialised value of size 8
at 0x........: mainSort (origin5-bz2.c:2963)
by 0x........: BZ2_blockSort (origin5-bz2.c:3105)
by 0x........: BZ2_compressBlock (origin5-bz2.c:4034)
@@ -131,6 +120,12 @@
Conditional jump or move depends on uninitialised value(s)
at 0x........: main (origin5-bz2.c:6512)
- Uninitialised value was created by a client request
- at 0x........: main (origin5-bz2.c:6479)
+ Uninitialised value was created by a heap allocation
+ at 0x........: malloc (vg_replace_malloc.c:...)
+ by 0x........: g_serviceFn (origin5-bz2.c:6429)
+ by 0x........: default_bzalloc (origin5-bz2.c:4470)
+ by 0x........: BZ2_decompress (origin5-bz2.c:1578)
+ by 0x........: BZ2_bzDecompress (origin5-bz2.c:5192)
+ by 0x........: BZ2_bzBuffToBuffDecompress (origin5-bz2.c:5678)
+ by 0x........: main (origin5-bz2.c:6498)
=================================================
./valgrind-old/memcheck/tests/origin5-bz2.stderr.diff-glibc234-s390x
=================================================
--- origin5-bz2.stderr.exp-glibc234-s390x 2013-10-14 19:22:17.085903416 -0500
+++ origin5-bz2.stderr.out 2013-10-14 19:32:55.081876771 -0500
@@ -120,6 +120,12 @@
Conditional jump or move depends on uninitialised value(s)
at 0x........: main (origin5-bz2.c:6512)
- Uninitialised value was created by a client request
- at 0x........: main (origin5-bz2.c:6479)
+ Uninitialised value was created by a heap allocation
+ at 0x........: malloc (vg_replace_malloc.c:...)
+ by 0x........: g_serviceFn (origin5-bz2.c:6429)
+ by 0x........: default_bzalloc (origin5-bz2.c:4470)
+ by 0x........: BZ2_decompress (origin5-bz2.c:1578)
+ by 0x........: BZ2_bzDecompress (origin5-bz2.c:5192)
+ by 0x........: BZ2_bzBuffToBuffDecompress (origin5-bz2.c:5678)
+ by 0x........: main (origin5-bz2.c:6498)
=================================================
./valgrind-old/memcheck/tests/origin5-bz2.stderr.diff-glibc25-amd64
=================================================
--- origin5-bz2.stderr.exp-glibc25-amd64 2013-10-14 19:22:16.940902297 -0500
+++ origin5-bz2.stderr.out 2013-10-14 19:32:55.081876771 -0500
@@ -120,6 +120,12 @@
Conditional jump or move depends on uninitialised value(s)
at 0x........: main (origin5-bz2.c:6512)
- Uninitialised value was created by a client request
- at 0x........: main (origin5-bz2.c:6479)
+ Uninitialised value was created by a heap allocation
+ at 0x........: malloc (vg_replace_malloc.c:...)
+ by 0x........: g_serviceFn (origin5-bz2.c:6429)
+ by 0x........: default_bzalloc (origin5-bz2.c:4470)
+ by 0x........: BZ2_decompress (origin5-bz2.c:1578)
+ by 0x........: BZ2_bzDecompress (origin5-bz2.c:5192)
+ by 0x........: BZ2_bzBuffToBuffDecompress (origin5-bz2.c:5678)
+ by 0x........: main (origin5-bz2.c:6498)
=================================================
./valgrind-old/memcheck/tests/origin5-bz2.stderr.diff-glibc25-x86
=================================================
--- origin5-bz2.stderr.exp-glibc25-x86 2013-10-14 19:22:17.288904982 -0500
+++ origin5-bz2.stderr.out 2013-10-14 19:32:55.081876771 -0500
@@ -12,7 +12,7 @@
Uninitialised value was created by a client request
at 0x........: main (origin5-bz2.c:6479)
-Use of uninitialised value of size 4
+Use of uninitialised value of size 8
at 0x........: copy_input_until_stop (origin5-bz2.c:4686)
by 0x........: handle_compress (origin5-bz2.c:4750)
by 0x........: BZ2_bzCompress (origin5-bz2.c:4822)
@@ -21,7 +21,7 @@
Uninitialised value was created by a client request
at 0x........: main (origin5-bz2.c:6479)
-Use of uninitialised value of size 4
+Use of uninitialised value of size 8
at 0x........: copy_input_until_stop (origin5-bz2.c:4686)
by 0x........: handle_compress (origin5-bz2.c:4750)
by 0x........: BZ2_bzCompress (origin5-bz2.c:4822)
@@ -30,7 +30,7 @@
Uninitialised value was created by a client request
at 0x........: main (origin5-bz2.c:6479)
-Use of uninitialised value of size 4
+Use of uninitialised value of size 8
at 0x........: mainSort (origin5-bz2.c:2820)
by 0x........: BZ2_blockSort (origin5-bz2.c:3105)
by 0x........: BZ2_compressBlock (origin5-bz2.c:4034)
@@ -41,7 +41,7 @@
Uninitialised value was created by a client request
at 0x........: main (origin5-bz2.c:6479)
-Use of uninitialised value of size 4
+Use of uninitialised value of size 8
at 0x........: mainSort (origin5-bz2.c:2823)
by 0x........: BZ2_blockSort (origin5-bz2.c:3105)
by 0x........: BZ2_compressBlock (origin5-bz2.c:4034)
@@ -52,7 +52,7 @@
Uninitialised value was created by a client request
at 0x........: main (origin5-bz2.c:6479)
-Use of uninitialised value of size 4
+Use of uninitialised value of size 8
at 0x........: mainSort (origin5-bz2.c:2854)
by 0x........: BZ2_blockSort (origin5-bz2.c:3105)
by 0x........: BZ2_compressBlock (origin5-bz2.c:4034)
@@ -63,7 +63,7 @@
Uninitialised value was created by a client request
at 0x........: main (origin5-bz2.c:6479)
-Use of uninitialised value of size 4
+Use of uninitialised value of size 8
at 0x........: mainSort (origin5-bz2.c:2858)
by 0x........: BZ2_blockSort (origin5-bz2.c:3105)
by 0x........: BZ2_compressBlock (origin5-bz2.c:4034)
@@ -74,7 +74,7 @@
Uninitialised value was created by a client request
at 0x........: main (origin5-bz2.c:6479)
-Use of uninitialised value of size 4
+Use of uninitialised value of size 8
at 0x........: mainSort (origin5-bz2.c:2963)
by 0x........: BZ2_blockSort (origin5-bz2.c:3105)
by 0x........: BZ2_compressBlock (origin5-bz2.c:4034)
@@ -85,7 +85,7 @@
Uninitialised value was created by a client request
at 0x........: main (origin5-bz2.c:6479)
-Use of uninitialised value of size 4
+Use of uninitialised value of size 8
at 0x........: mainSort (origin5-bz2.c:2964)
by 0x........: BZ2_blockSort (origin5-bz2.c:3105)
by 0x........: BZ2_compressBlock (origin5-bz2.c:4034)
@@ -96,7 +96,7 @@
Uninitialised value was created by a client request
at 0x........: main (origin5-bz2.c:6479)
-Use of uninitialised value of size 4
+Use of uninitialised value of size 8
at 0x........: fallbackSort (origin5-bz2.c:2269)
by 0x........: BZ2_blockSort (origin5-bz2.c:3116)
by 0x........: BZ2_compressBlock (origin5-bz2.c:4034)
@@ -107,7 +107,7 @@
Uninitialised value was created by a client request
at 0x........: main (origin5-bz2.c:6479)
-Use of uninitialised value of size 4
+Use of uninitialised value of size 8
at 0x........: fallbackSort (origin5-bz2.c:2275)
by 0x........: BZ2_blockSort (origin5-bz2.c:3116)
by 0x........: BZ2_compressBlock (origin5-bz2.c:4034)
@@ -120,6 +120,12 @@
Conditional jump or move depends on uninitialised value(s)
at 0x........: main (origin5-bz2.c:6512)
- Uninitialised value was created by a client request
- at 0x........: main (origin5-bz2.c:6479)
+ Uninitialised value was created by a heap allocation
+ at 0x........: malloc (vg_replace_malloc.c:...)
<truncated beyond 100 lines>
=================================================
./valgrind-old/memcheck/tests/origin5-bz2.stderr.diff-glibc27-ppc64
=================================================
--- origin5-bz2.stderr.exp-glibc27-ppc64 2013-10-14 19:22:16.386898024 -0500
+++ origin5-bz2.stderr.out 2013-10-14 19:32:55.081876771 -0500
@@ -1,7 +1,7 @@
Conditional jump or move depends on uninitialised value(s)
at 0x........: main (origin5-bz2.c:6481)
Uninitialised value was created by a client request
- at 0x........: main (origin5-bz2.c:6481)
+ at 0x........: main (origin5-bz2.c:6479)
Conditional jump or move depends on uninitialised value(s)
at 0x........: copy_input_until_stop (origin5-bz2.c:4686)
@@ -10,7 +10,7 @@
by 0x........: BZ2_bzBuffToBuffCompress (origin5-bz2.c:5630)
by 0x........: main (origin5-bz2.c:6484)
Uninitialised value was created by a client request
- at 0x........: main (origin5-bz2.c:6481)
+ at 0x........: main (origin5-bz2.c:6479)
Use of uninitialised value of size 8
at 0x........: copy_input_until_stop (origin5-bz2.c:4686)
@@ -19,7 +19,7 @@
by 0x........: BZ2_bzBuffToBuffCompress (origin5-bz2.c:5630)
by 0x........: main (origin5-bz2.c:6484)
Uninitialised value was created by a client request
- at 0x........: main (origin5-bz2.c:6481)
+ at 0x........: main (origin5-bz2.c:6479)
Use of uninitialised value of size 8
at 0x........: copy_input_until_stop (origin5-bz2.c:4686)
@@ -28,7 +28,7 @@
by 0x........: BZ2_bzBuffToBuffCompress (origin5-bz2.c:5630)
by 0x........: main (origin5-bz2.c:6484)
Uninitialised value was created by a client request
- at 0x........: main (origin5-bz2.c:6481)
+ at 0x........: main (origin5-bz2.c:6479)
Use of uninitialised value of size 8
at 0x........: mainSort (origin5-bz2.c:2820)
@@ -39,7 +39,7 @@
by 0x........: BZ2_bzBuffToBuffCompress (origin5-bz2.c:5630)
by 0x........: main (origin5-bz2.c:6484)
Uninitialised value was created by a client request
- at 0x........: main (origin5-bz2.c:6481)
+ at 0x........: main (origin5-bz2.c:6479)
Use of uninitialised value of size 8
at 0x........: mainSort (origin5-bz2.c:2823)
@@ -50,7 +50,7 @@
by 0x........: BZ2_bzBuffToBuffCompress (origin5-bz2.c:5630)
by 0x........: main (origin5-bz2.c:6484)
Uninitialised value was created by a client request
- at 0x........: main (origin5-bz2.c:6481)
+ at 0x........: main (origin5-bz2.c:6479)
Use of uninitialised value of size 8
at 0x........: mainSort (origin5-bz2.c:2854)
@@ -61,7 +61,7 @@
by 0x........: BZ2_bzBuffToBuffCompress (origin5-bz2.c:5630)
by 0x........: main (origin5-bz2.c:6484)
Uninitialised value was created by a client request
- at 0x........: main (origin5-bz2.c:6481)
+ at 0x........: main (origin5-bz2.c:6479)
Use of uninitialised value of size 8
at 0x........: mainSort (origin5-bz2.c:2858)
@@ -72,7 +72,7 @@
by 0x........: BZ2_bzBuffToBuffCompress (origin5-bz2.c:5630)
by 0x........: main (origin5-bz2.c:6484)
Uninitialised value was created by a client request
- at 0x........: main (origin5-bz2.c:6481)
+ at 0x........: main (origin5-bz2.c:6479)
Use of uninitialised value of size 8
at 0x........: mainSort (origin5-bz2.c:2963)
@@ -83,7 +83,7 @@
by 0x........: BZ2_bzBuffToBuffCompress (origin5-bz2.c:5630)
by 0x........: main (origin5-bz2.c:6484)
Uninitialised value was created by a client request
- at 0x........: main (origin5-bz2.c:6481)
+ at 0x........: main (origin5-bz2.c:6479)
Use of uninitialised value of size 8
at 0x........: mainSort (origin5-bz2.c:2964)
@@ -94,7 +94,7 @@
by 0x........: BZ2_bzBuffToBuffCompress (origin5-bz2.c:5630)
by 0x........: main (origin5-bz2.c:6484)
Uninitialised value was created by a client request
- at 0x........: main (origin5-bz2.c:6481)
+ at 0x........: main (origin5-bz2.c:6479)
Use of uninitialised value of size 8
at 0x........: fallbackSort (origin5-bz2.c:2269)
@@ -105,7 +105,7 @@
by 0x........: BZ2_bzBuffToBuffCompress (origin5-bz2.c:5630)
by 0x........: main (origin5-bz2.c:6484)
Uninitialised value was created by a client request
- at 0x........: main (origin5-bz2.c:6481)
+ at 0x........: main (origin5-bz2.c:6479)
Use of uninitialised value of size 8
<truncated beyond 100 lines>
=================================================
./valgrind-old/memcheck/tests/threadname.stderr.diff
=================================================
--- threadname.stderr.exp 2013-10-14 19:22:16.390898055 -0500
+++ threadname.stderr.out 2013-10-14 19:34:25.837592163 -0500
@@ -9,36 +9,12 @@
Thread 2:
Invalid write of size 1
at 0x........: bad_things (threadname.c:16)
- by 0x........: child_fn_0 (threadname.c:53)
- ...
Address 0x........ is 0 bytes after a block of size 2 alloc'd
at 0x........: malloc (vg_replace_malloc.c:...)
by 0x........: bad_things (threadname.c:15)
by 0x........: child_fn_0 (threadname.c:53)
...
-Thread 3 try1:
-Invalid write of size 1
- at 0x........: bad_things (threadname.c:16)
- by 0x........: child_fn_1 (threadname.c:38)
- ...
- Address 0x........ is 0 bytes after a block of size 3 alloc'd
- at 0x........: malloc (vg_replace_malloc.c:...)
- by 0x........: bad_things (threadname.c:15)
- by 0x........: child_fn_1 (threadname.c:38)
- ...
-
-Thread 4 012345678901234:
-Invalid write of size 1
- at 0x........: bad_things (threadname.c:16)
- by 0x........: child_fn_2 (threadname.c:26)
- ...
- Address 0x........ is 0 bytes after a block of size 4 alloc'd
- at 0x........: malloc (vg_replace_malloc.c:...)
- by 0x........: bad_things (threadname.c:15)
- by 0x........: child_fn_2 (threadname.c:26)
- ...
-
Thread 1:
Invalid write of size 1
at 0x........: bad_things (threadname.c:16)
=================================================
./valgrind-old/memcheck/tests/threadname_xml.stderr.diff
=================================================
--- threadname_xml.stderr.exp 2013-10-14 19:22:16.389898047 -0500
+++ threadname_xml.stderr.out 2013-10-14 19:34:26.784599638 -0500
@@ -94,14 +94,6 @@
<file>threadname.c</file>
<line>...</line>
</frame>
- <frame>
- <ip>0x........</ip>
- <obj>...</obj>
- <fn>child_fn_0</fn>
- <dir>...</dir>
- <file>threadname.c</file>
- <line>...</line>
- </frame>
</stack>
<auxwhat>Address 0x........ is 0 bytes after a block of size 2 alloc'd</auxwhat>
<stack>
@@ -135,112 +127,6 @@
<error>
<unique>0x........</unique>
<tid>...</tid>
- <threadname>try1</threadname>
- <kind>InvalidWrite</kind>
- <what>Invalid write of size 1</what>
- <stack>
- <frame>
- <ip>0x........</ip>
- <obj>...</obj>
- <fn>bad_things</fn>
- <dir>...</dir>
- <file>threadname.c</file>
- <line>...</line>
- </frame>
- <frame>
- <ip>0x........</ip>
- <obj>...</obj>
- <fn>child_fn_1</fn>
- <dir>...</dir>
- <file>threadname.c</file>
- <line>...</line>
- </frame>
- </stack>
- <auxwhat>Address 0x........ is 0 bytes after a block of size 3 alloc'd</auxwhat>
- <stack>
- <frame>
- <ip>0x........</ip>
- <obj>...</obj>
- <fn>malloc</fn>
- <dir>...</dir>
- <file>vg_replace_malloc.c</file>
- <line>...</line>
- </frame>
- <frame>
- <ip>0x........</ip>
- <obj>...</obj>
- <fn>bad_things</fn>
- <dir>...</dir>
- <file>threadname.c</file>
- <line>...</line>
- </frame>
- <frame>
- <ip>0x........</ip>
- <obj>...</obj>
- <fn>child_fn_1</fn>
- <dir>...</dir>
- <file>threadname.c</file>
- <line>...</line>
- </frame>
- </stack>
-</error>
-
-<error>
- <unique>0x........</unique>
- <tid>...</tid>
- <threadname>012345678901234</threadname>
- <kind>InvalidWrite</kind>
- <what>Invalid write of size 1</what>
- <stack>
- <frame>
- <ip>0x........</ip>
- <obj>...</obj>
- <fn>bad_things</fn>
- <dir>...</dir>
- <file>threadname.c</file>
- <line>...</line>
- </frame>
- <frame>
- <ip>0x........</ip>
- <obj>...</obj>
- <fn>child_fn_2</fn>
- <dir>...</dir>
- <file>threadname.c</file>
- <line>...</line>
- </frame>
- </stack>
- <auxwhat>Address 0x........ is 0 bytes after a block of size 4 alloc'd</auxwhat>
- <stack>
- <frame>
- <ip>0x........</ip>
- <obj>...</obj>
<truncated beyond 100 lines>
=================================================
./valgrind-old/none/tests/amd64/insn_basic.stderr.diff
=================================================
--- insn_basic.stderr.exp 2013-10-14 19:22:19.258920180 -0500
+++ insn_basic.stderr.out 2013-10-14 19:37:25.138010904 -0500
@@ -0,0 +1,8 @@
+
+Process terminating with default action of signal 11 (SIGSEGV)
+ Bad permissions for mapped region at address 0x........
+ at 0x........: ???
+ by 0x........: _dl_fini (dl-fini.c:210)
+ by 0x........: __run_exit_handlers (exit.c:82)
+ by 0x........: exit (exit.c:104)
+ by 0x........: main (insn_basic.c:56777)
=================================================
./valgrind-old/none/tests/amd64/insn_basic.stdout.diff
=================================================
--- insn_basic.stdout.exp 2013-10-14 19:22:19.220919886 -0500
+++ insn_basic.stdout.out 2013-10-14 19:37:25.004009841 -0500
@@ -1128,159 +1128,4 @@
subq_1 ... ok
subq_2 ... ok
subq_3 ... ok
-subq_4 ... ok
-subq_5 ... ok
-subq_6 ... ok
-subq_7 ... ok
-testb_1 ... ok
-testb_2 ... ok
-testb_3 ... ok
-testb_4 ... ok
-testb_5 ... ok
-testb_6 ... ok
-testb_7 ... ok
-testb_8 ... ok
-testb_9 ... ok
-testb_10 ... ok
-testb_11 ... ok
-testb_12 ... ok
-testb_13 ... ok
-testb_14 ... ok
-testb_15 ... ok
-testb_16 ... ok
-testb_17 ... ok
-testb_18 ... ok
-testb_19 ... ok
-testb_20 ... ok
-testb_21 ... ok
-testb_22 ... ok
-testb_23 ... ok
-testb_24 ... ok
-testb_25 ... ok
-testw_1 ... ok
-testw_2 ... ok
-testw_3 ... ok
-testw_4 ... ok
-testw_5 ... ok
-testw_6 ... ok
-testw_7 ... ok
-testw_8 ... ok
-testw_9 ... ok
-testw_10 ... ok
-testw_11 ... ok
-testw_12 ... ok
-testw_13 ... ok
-testw_14 ... ok
-testw_15 ... ok
-testw_16 ... ok
-testw_17 ... ok
-testw_18 ... ok
-testw_19 ... ok
-testw_20 ... ok
-testw_21 ... ok
-testw_22 ... ok
-testw_23 ... ok
-testw_24 ... ok
-testw_25 ... ok
-testl_1 ... ok
-testl_2 ... ok
-testl_3 ... ok
-testl_4 ... ok
-testl_5 ... ok
-testl_6 ... ok
-testl_7 ... ok
-testl_8 ... ok
-testl_9 ... ok
-testl_10 ... ok
-testl_11 ... ok
-testl_12 ... ok
-testl_13 ... ok
-testl_14 ... ok
-testl_15 ... ok
-testl_16 ... ok
-testl_17 ... ok
-testl_18 ... ok
-testl_19 ... ok
-testl_20 ... ok
-testl_21 ... ok
-testl_22 ... ok
-testl_23 ... ok
-testl_24 ... ok
-testl_25 ... ok
-testq_1 ... ok
-testq_2 ... ok
-testq_3 ... ok
-testq_4 ... ok
-testq_5 ... ok
-testq_6 ... ok
-testq_7 ... ok
-testq_8 ... ok
-testq_9 ... ok
-testq_10 ... ok
-testq_11 ... ok
-testq_12 ... ok
-testq_13 ... ok
-testq_14 ... ok
-testq_15 ... ok
<truncated beyond 100 lines>
--
Rich Coe rc...@wi...
|