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
(9) |
2
(11) |
3
(3) |
4
(7) |
5
(15) |
|
6
(10) |
7
(9) |
8
(12) |
9
(10) |
10
(6) |
11
(12) |
12
(12) |
|
13
(11) |
14
(14) |
15
(18) |
16
(15) |
17
(19) |
18
(15) |
19
(9) |
|
20
|
21
(5) |
22
(10) |
23
(15) |
24
(18) |
25
(20) |
26
(15) |
|
27
(14) |
28
(11) |
29
(17) |
30
(17) |
31
(23) |
|
|
|
From: Anmol P. <An...@fr...> - 2014-07-11 21:58:50
|
-----Original Message----- From: Mark Wielaard [mailto:mj...@re...] Sent: Friday, July 11, 2014 5:00 AM To: Paralkar Anmol-B07584 Cc: val...@li... Subject: Re: [Valgrind-developers] vgdb-invoker-ptrace.c build failure. On Thu, 2014-07-10 at 16:27 +0000, Anmol Paralkar wrote: > I am trying to build (Valgrind Revision: 14147, VEX Revision: 2897) on > the ARM V8 Foundation Model (FM000-KT-00035-r0p8-52rel06.tgz from > https://silver.arm.com/browse/FM00A), other details of the build > environment being: > > ---------------------------------------------------------------------- > ---------- root@genericarmv8:/home/b07584/valgrind# uname -a Linux > genericarmv8 3.15.0-1-linaro-vexpress64 #1ubuntu1~ci+140621065049 SMP > PREEMPT Sat Jun 21 06:51:35 UTC 20 aarch64 GNU/Linux > ---------------------------------------------------------------------- > ---------- > > ---------------------------------------------------------------------- > ---------- root@genericarmv8:/home/b07584/valgrind# gcc --version gcc > (Linaro GCC 4.8-2014.04) 4.8.3 20140401 (prerelease) > ---------------------------------------------------------------------- > ---------- > > I have the following build error: > > ---------------------------------------------------------------------- > ---------- > make[3]: Warning: File > 'm_ume/.deps/libcoregrind_arm64_linux_a-script.Po' has modification > time 2423282 s in the future aarch64-oe-linux-gcc -DHAVE_CONFIG_H -I. > -I.. -I.. -I../include -I../VEX/pub -I../VEX/pub -DVGA_arm64=1 > -DVGO_linux=1 -DVGP_arm64_linux=1 -DVGPV_arm64_linux_vanilla=1 > -I../coregrind -DVG_LIBDIR="\"/home/b07584/valgrind/lib/valgrind"\" > -DVG_PLATFORM="\"arm64-linux\"" -O2 -g -Wall -Wmissing-prototypes > -Wshadow -Wpointer-arith -Wstrict-prototypes -Wmissing-declarations > -Wno-format-zero-length -Wno-tautological-compare -fno-strict-aliasing > -fno-builtin -Wno-long-long -Wwrite-strings -fno-stack-protector -MT > vgdb-vgdb-invoker-ptrace.o -MD -MP -MF > .deps/vgdb-vgdb-invoker-ptrace.Tpo -c -o vgdb-vgdb-invoker-ptrace.o > `test -f 'vgdb-invoker-ptrace.c' || echo './'`vgdb-invoker-ptrace.c > vgdb-invoker-ptrace.c: In function 'restore_and_detach': > vgdb-invoker-ptrace.c:748:7: error: invalid use of undefined type 'struct user_pt_regs' Which glibc is this using? I got a similar report for elfutils: https://lists.fedorahosted.org/pipermail/elfutils-devel/2014-June/004042.html It looks like on aarch64 depending on the glibc version used you have to use either user_pt_regs or user_regs_struct. The later is what new versions will define and might be good to adopt. But it does mean that the code won't compile anymore on older aarch64 glibc versions. Cheers, Mark [] Hello Mark, Using gnu_get_libc_version (), it's version: 2.19-2014.06 With the __GLIBC__ and __GLIBC_MINOR__ macros, we do not get the resolution to know whether we are past 2.19 to be able to choose between user_pt_regs or user_regs_struct, so I'm thinking that we might just have to wait till glibc 2.20 is out before we could make that change in the valgrind sources. Thanks very much for your mail. Regards, Anmol. |
|
From: <sv...@va...> - 2014-07-11 21:54:40
|
Author: florian
Date: Fri Jul 11 21:54:33 2014
New Revision: 14155
Log:
Track vex r2891 (add Iop_Reverse1sIn8_x16). Unbreak build.
Modified:
trunk/memcheck/tests/vbit-test/irops.c
Modified: trunk/memcheck/tests/vbit-test/irops.c
==============================================================================
--- trunk/memcheck/tests/vbit-test/irops.c (original)
+++ trunk/memcheck/tests/vbit-test/irops.c Fri Jul 11 21:54:33 2014
@@ -877,6 +877,7 @@
{ DEFOP(Iop_Reverse8sIn64_x2, UNDEF_UNKNOWN), },
{ DEFOP(Iop_Reverse16sIn64_x2, UNDEF_UNKNOWN), },
{ DEFOP(Iop_Reverse32sIn64_x2, UNDEF_UNKNOWN), },
+ { DEFOP(Iop_Reverse1sIn8_x16, UNDEF_UNKNOWN), },
{ DEFOP(Iop_Perm8x16, UNDEF_UNKNOWN), },
{ DEFOP(Iop_Perm32x4, UNDEF_UNKNOWN), },
{ DEFOP(Iop_GetMSBs8x16, UNDEF_UNKNOWN), },
|
|
From: <sv...@va...> - 2014-07-11 21:29:16
|
Author: florian
Date: Fri Jul 11 21:29:07 2014
New Revision: 485
Log:
Add a note about the Solaris/illumos ports as suggested by
Ivo Raisr. Fixes BZ #336957.
Also: remove a duplicate section about the FreeBSD port
and tweak some wording.
Modified:
trunk/info/platforms.html
Modified: trunk/info/platforms.html
==============================================================================
--- trunk/info/platforms.html (original)
+++ trunk/info/platforms.html Fri Jul 11 21:29:07 2014
@@ -4,7 +4,7 @@
<br/>
<a name="curr_mainline"></a><h2>Current</h2>
-<p>The Valgrind 3.7.X series supports the following platforms.</p>
+<p>Valgrind supports the following platforms:</p>
<ul>
<li><b>x86/Linux:</b> support is mature and almost complete.</li>
<li><b>AMD64/Linux:</b> support is mature and almost complete. Note that AMD64 is just another name for x86-64, and that Valgrind works fine on Intel machines.</li>
@@ -27,26 +27,18 @@
regression tests on, see the
<a href="/downloads/current.html#current">release notes</a>.</p>
-<ul>
-<li>
-<p><b>x86/FreeBSD:</b> The FreeBSD port has been developed since Valgrind 2.X.
-The FreeBSD porting team actively maintains the port, typically tracking
-Valgrind releases within a week or two. Snapshots are on this
- <a href="http://www.freebsd.org/cgi/ports.cgi?query=valgrind">FreeBSD page</a>.</p>
-</li>
-</ul>
-
+<a name="out_of_tree"></a><h2>Out Of Tree</h2>
-<a name="experimental"></a><h2>Experimental</h2>
-
-<p>The following experimental ports have been done. Note that they have
-varying levels of completeness and may not work reliably, and may target
+<p>The following ports have been done and are maintained outside the
+valgrind repository. Note that they may have
+varying levels of completeness, may not work reliably, and may target
older versions of Valgrind.</p>
<ul>
<li><p><b>x86/FreeBSD:</b> Doug Rabson and others haved done a fairly
- complete port of Valgrind 3.X. Snapshots of the work in progress are at
+ complete port of Valgrind 3.X. The FreeBSD porting team actively
+ maintains the port. Snapshots of the work in progress are at
<a href="http://www.freebsd.org/cgi/ports.cgi?query=valgrind">this
FreeBSD page</a>.</p></li>
@@ -54,6 +46,13 @@
are doing a port of Valgrind 3.X, available at
<a href="http://vg4nbsd.berlios.de/">this page</a>.
</p></li>
+
+<li><p><b>x86/Solaris and x86/illumos:</b> The port of Valgrind on Oracle Solaris
+ and illumos has been developed since 2012 and is actively maintained
+ by a collaborative effort of several people. The code is available at
+ <a href="https://bitbucket.org/setupji/valgrind-solaris">this page</a>.
+ A presentation about the port given at FOSDEM 2014 is available at
+ <a href="https://fosdem.org/2014/schedule/event/valgrind_solaris/attachments/slides/359/export/events/attachments/valgrind_solaris/slides/359/valgrind_solaris.pdf">this page</a>.
</ul>
|
|
From: <sv...@va...> - 2014-07-11 20:48:39
|
Author: florian
Date: Fri Jul 11 20:48:30 2014
New Revision: 14153
Log:
Update list of ignored files.
Modified:
trunk/none/tests/amd64/ (props changed)
|
|
From: <sv...@va...> - 2014-07-11 12:06:31
|
Author: sewardj
Date: Fri Jul 11 12:06:24 2014
New Revision: 14152
Log:
arm64: enable test cases for:
{sli,sri} (vector & scalar), sqabs (vector & scalar)
Modified:
trunk/none/tests/arm64/fp_and_simd.c
Modified: trunk/none/tests/arm64/fp_and_simd.c
==============================================================================
--- trunk/none/tests/arm64/fp_and_simd.c (original)
+++ trunk/none/tests/arm64/fp_and_simd.c Fri Jul 11 12:06:24 2014
@@ -4031,57 +4031,57 @@
// sli d_#imm
// sri d_#imm
- if (0) test_sli_d_d_0(TyD);
- if (0) test_sli_d_d_32(TyD);
- if (0) test_sli_d_d_63(TyD);
- if (0) test_sri_d_d_1(TyD);
- if (0) test_sri_d_d_33(TyD);
- if (0) test_sri_d_d_64(TyD);
+ if (1) test_sli_d_d_0(TyD);
+ if (1) test_sli_d_d_32(TyD);
+ if (1) test_sli_d_d_63(TyD);
+ if (1) test_sri_d_d_1(TyD);
+ if (1) test_sri_d_d_33(TyD);
+ if (1) test_sri_d_d_64(TyD);
// sli 2d,4s,2s,8h,4h,16b,8b _#imm
// sri 2d,4s,2s,8h,4h,16b,8b _#imm
- if (0) test_sli_2d_2d_0(TyD);
- if (0) test_sli_2d_2d_32(TyD);
- if (0) test_sli_2d_2d_63(TyD);
- if (0) test_sli_4s_4s_0(TyS);
- if (0) test_sli_4s_4s_16(TyS);
- if (0) test_sli_4s_4s_31(TyS);
- if (0) test_sli_2s_2s_0(TyS);
- if (0) test_sli_2s_2s_16(TyS);
- if (0) test_sli_2s_2s_31(TyS);
- if (0) test_sli_8h_8h_0(TyH);
- if (0) test_sli_8h_8h_8(TyH);
- if (0) test_sli_8h_8h_15(TyH);
- if (0) test_sli_4h_4h_0(TyH);
- if (0) test_sli_4h_4h_8(TyH);
- if (0) test_sli_4h_4h_15(TyH);
- if (0) test_sli_16b_16b_0(TyB);
- if (0) test_sli_16b_16b_3(TyB);
- if (0) test_sli_16b_16b_7(TyB);
- if (0) test_sli_8b_8b_0(TyB);
- if (0) test_sli_8b_8b_3(TyB);
- if (0) test_sli_8b_8b_7(TyB);
- if (0) test_sri_2d_2d_1(TyD);
- if (0) test_sri_2d_2d_33(TyD);
- if (0) test_sri_2d_2d_64(TyD);
- if (0) test_sri_4s_4s_1(TyS);
- if (0) test_sri_4s_4s_17(TyS);
- if (0) test_sri_4s_4s_32(TyS);
- if (0) test_sri_2s_2s_1(TyS);
- if (0) test_sri_2s_2s_17(TyS);
- if (0) test_sri_2s_2s_32(TyS);
- if (0) test_sri_8h_8h_1(TyH);
- if (0) test_sri_8h_8h_8(TyH);
- if (0) test_sri_8h_8h_16(TyH);
- if (0) test_sri_4h_4h_1(TyH);
- if (0) test_sri_4h_4h_8(TyH);
- if (0) test_sri_4h_4h_16(TyH);
- if (0) test_sri_16b_16b_1(TyB);
- if (0) test_sri_16b_16b_4(TyB);
- if (0) test_sri_16b_16b_8(TyB);
- if (0) test_sri_8b_8b_1(TyB);
- if (0) test_sri_8b_8b_4(TyB);
- if (0) test_sri_8b_8b_8(TyB);
+ if (1) test_sli_2d_2d_0(TyD);
+ if (1) test_sli_2d_2d_32(TyD);
+ if (1) test_sli_2d_2d_63(TyD);
+ if (1) test_sli_4s_4s_0(TyS);
+ if (1) test_sli_4s_4s_16(TyS);
+ if (1) test_sli_4s_4s_31(TyS);
+ if (1) test_sli_2s_2s_0(TyS);
+ if (1) test_sli_2s_2s_16(TyS);
+ if (1) test_sli_2s_2s_31(TyS);
+ if (1) test_sli_8h_8h_0(TyH);
+ if (1) test_sli_8h_8h_8(TyH);
+ if (1) test_sli_8h_8h_15(TyH);
+ if (1) test_sli_4h_4h_0(TyH);
+ if (1) test_sli_4h_4h_8(TyH);
+ if (1) test_sli_4h_4h_15(TyH);
+ if (1) test_sli_16b_16b_0(TyB);
+ if (1) test_sli_16b_16b_3(TyB);
+ if (1) test_sli_16b_16b_7(TyB);
+ if (1) test_sli_8b_8b_0(TyB);
+ if (1) test_sli_8b_8b_3(TyB);
+ if (1) test_sli_8b_8b_7(TyB);
+ if (1) test_sri_2d_2d_1(TyD);
+ if (1) test_sri_2d_2d_33(TyD);
+ if (1) test_sri_2d_2d_64(TyD);
+ if (1) test_sri_4s_4s_1(TyS);
+ if (1) test_sri_4s_4s_17(TyS);
+ if (1) test_sri_4s_4s_32(TyS);
+ if (1) test_sri_2s_2s_1(TyS);
+ if (1) test_sri_2s_2s_17(TyS);
+ if (1) test_sri_2s_2s_32(TyS);
+ if (1) test_sri_8h_8h_1(TyH);
+ if (1) test_sri_8h_8h_8(TyH);
+ if (1) test_sri_8h_8h_16(TyH);
+ if (1) test_sri_4h_4h_1(TyH);
+ if (1) test_sri_4h_4h_8(TyH);
+ if (1) test_sri_4h_4h_16(TyH);
+ if (1) test_sri_16b_16b_1(TyB);
+ if (1) test_sri_16b_16b_4(TyB);
+ if (1) test_sri_16b_16b_8(TyB);
+ if (1) test_sri_8b_8b_1(TyB);
+ if (1) test_sri_8b_8b_4(TyB);
+ if (1) test_sri_8b_8b_8(TyB);
// smax 4s,2s,8h,4h,16b,8b
// umax 4s,2s,8h,4h,16b,8b
@@ -4271,10 +4271,10 @@
// sqabs d,s,h,b
// sqneg d,s,h,b
- if (0) test_sqabs_d_d(TyD);
- if (0) test_sqabs_s_s(TyS);
- if (0) test_sqabs_h_h(TyH);
- if (0) test_sqabs_b_b(TyB);
+ if (1) test_sqabs_d_d(TyD);
+ if (1) test_sqabs_s_s(TyS);
+ if (1) test_sqabs_h_h(TyH);
+ if (1) test_sqabs_b_b(TyB);
if (0) test_sqneg_d_d(TyD);
if (0) test_sqneg_s_s(TyS);
if (0) test_sqneg_h_h(TyH);
@@ -4282,13 +4282,13 @@
// sqabs 2d,4s,2s,8h,4h,16b,8b
// sqneg 2d,4s,2s,8h,4h,16b,8b
- if (0) test_sqabs_2d_2d(TyD);
- if (0) test_sqabs_4s_4s(TyS);
- if (0) test_sqabs_2s_2s(TyS);
- if (0) test_sqabs_8h_8h(TyH);
- if (0) test_sqabs_4h_4h(TyH);
- if (0) test_sqabs_16b_16b(TyB);
- if (0) test_sqabs_8b_8b(TyB);
+ if (1) test_sqabs_2d_2d(TyD);
+ if (1) test_sqabs_4s_4s(TyS);
+ if (1) test_sqabs_2s_2s(TyS);
+ if (1) test_sqabs_8h_8h(TyH);
+ if (1) test_sqabs_4h_4h(TyH);
+ if (1) test_sqabs_16b_16b(TyB);
+ if (1) test_sqabs_8b_8b(TyB);
if (0) test_sqneg_2d_2d(TyD);
if (0) test_sqneg_4s_4s(TyS);
if (0) test_sqneg_2s_2s(TyS);
@@ -4894,63 +4894,63 @@
// shl (imm) 16b,8b,8h,4h,4s,2s,2d
// sshr (imm) 2d,4s,2s,8h,4h,16b,8b
// ushr (imm) 2d,4s,2s,8h,4h,16b,8b
- if (0) test_shl_2d_2d_0(TyD);
+ if (1) test_shl_2d_2d_0(TyD);
if (1) test_shl_2d_2d_13(TyD);
if (1) test_shl_2d_2d_63(TyD);
- if (0) test_shl_4s_4s_0(TyS);
+ if (1) test_shl_4s_4s_0(TyS);
if (1) test_shl_4s_4s_13(TyS);
if (1) test_shl_4s_4s_31(TyS);
- if (0) test_shl_2s_2s_0(TyS);
+ if (1) test_shl_2s_2s_0(TyS);
if (1) test_shl_2s_2s_13(TyS);
if (1) test_shl_2s_2s_31(TyS);
- if (0) test_shl_8h_8h_0(TyH);
+ if (1) test_shl_8h_8h_0(TyH);
if (1) test_shl_8h_8h_13(TyH);
if (1) test_shl_8h_8h_15(TyH);
- if (0) test_shl_4h_4h_0(TyH);
+ if (1) test_shl_4h_4h_0(TyH);
if (1) test_shl_4h_4h_13(TyH);
if (1) test_shl_4h_4h_15(TyH);
- if (0) test_shl_16b_16b_0(TyB);
+ if (1) test_shl_16b_16b_0(TyB);
if (1) test_shl_16b_16b_7(TyB);
- if (0) test_shl_8b_8b_0(TyB);
+ if (1) test_shl_8b_8b_0(TyB);
if (1) test_shl_8b_8b_7(TyB);
if (1) test_sshr_2d_2d_1(TyD);
if (1) test_sshr_2d_2d_13(TyD);
- if (0) test_sshr_2d_2d_64(TyD);
+ if (1) test_sshr_2d_2d_64(TyD);
if (1) test_sshr_4s_4s_1(TyS);
if (1) test_sshr_4s_4s_13(TyS);
- if (0) test_sshr_4s_4s_32(TyS);
+ if (1) test_sshr_4s_4s_32(TyS);
if (1) test_sshr_2s_2s_1(TyS);
if (1) test_sshr_2s_2s_13(TyS);
- if (0) test_sshr_2s_2s_32(TyS);
+ if (1) test_sshr_2s_2s_32(TyS);
if (1) test_sshr_8h_8h_1(TyH);
if (1) test_sshr_8h_8h_13(TyH);
- if (0) test_sshr_8h_8h_16(TyH);
+ if (1) test_sshr_8h_8h_16(TyH);
if (1) test_sshr_4h_4h_1(TyH);
if (1) test_sshr_4h_4h_13(TyH);
- if (0) test_sshr_4h_4h_16(TyH);
+ if (1) test_sshr_4h_4h_16(TyH);
if (1) test_sshr_16b_16b_1(TyB);
- if (0) test_sshr_16b_16b_8(TyB);
+ if (1) test_sshr_16b_16b_8(TyB);
if (1) test_sshr_8b_8b_1(TyB);
- if (0) test_sshr_8b_8b_8(TyB);
+ if (1) test_sshr_8b_8b_8(TyB);
if (1) test_ushr_2d_2d_1(TyD);
if (1) test_ushr_2d_2d_13(TyD);
- if (0) test_ushr_2d_2d_64(TyD);
+ if (1) test_ushr_2d_2d_64(TyD);
if (1) test_ushr_4s_4s_1(TyS);
if (1) test_ushr_4s_4s_13(TyS);
- if (0) test_ushr_4s_4s_32(TyS);
+ if (1) test_ushr_4s_4s_32(TyS);
if (1) test_ushr_2s_2s_1(TyS);
if (1) test_ushr_2s_2s_13(TyS);
- if (0) test_ushr_2s_2s_32(TyS);
+ if (1) test_ushr_2s_2s_32(TyS);
if (1) test_ushr_8h_8h_1(TyH);
if (1) test_ushr_8h_8h_13(TyH);
- if (0) test_ushr_8h_8h_16(TyH);
+ if (1) test_ushr_8h_8h_16(TyH);
if (1) test_ushr_4h_4h_1(TyH);
if (1) test_ushr_4h_4h_13(TyH);
- if (0) test_ushr_4h_4h_16(TyH);
+ if (1) test_ushr_4h_4h_16(TyH);
if (1) test_ushr_16b_16b_1(TyB);
- if (0) test_ushr_16b_16b_8(TyB);
+ if (1) test_ushr_16b_16b_8(TyB);
if (1) test_ushr_8b_8b_1(TyB);
- if (0) test_ushr_8b_8b_8(TyB);
+ if (1) test_ushr_8b_8b_8(TyB);
// ssra (imm) d
// usra (imm) d
|
|
From: <sv...@va...> - 2014-07-11 12:06:01
|
Author: sewardj
Date: Fri Jul 11 12:05:47 2014
New Revision: 2899
Log:
arm64: implement: {sli,sri} (vector & scalar), sqabs (vector & scalar)
Fix instruction decoding bug in dis_AdvSIMD_vector_x_indexed_elem
introduced in r2874 but not exposed until recently.
Modified:
trunk/priv/guest_arm64_toIR.c
trunk/priv/host_arm64_defs.c
trunk/priv/host_arm64_isel.c
Modified: trunk/priv/guest_arm64_toIR.c
==============================================================================
--- trunk/priv/guest_arm64_toIR.c (original)
+++ trunk/priv/guest_arm64_toIR.c Fri Jul 11 12:05:47 2014
@@ -376,6 +376,33 @@
return newIRTemp( irsb->tyenv, ty );
}
+/* This is used in many places, so the brevity is an advantage. */
+static IRTemp newTempV128(void)
+{
+ return newTemp(Ity_V128);
+}
+
+/* Initialise V128 temporaries en masse. */
+static
+void newTempsV128_7(IRTemp* t1, IRTemp* t2, IRTemp* t3,
+ IRTemp* t4, IRTemp* t5, IRTemp* t6, IRTemp* t7)
+{
+ vassert(t1 && *t1 == IRTemp_INVALID);
+ vassert(t2 && *t2 == IRTemp_INVALID);
+ vassert(t3 && *t3 == IRTemp_INVALID);
+ vassert(t4 && *t4 == IRTemp_INVALID);
+ vassert(t5 && *t5 == IRTemp_INVALID);
+ vassert(t6 && *t6 == IRTemp_INVALID);
+ vassert(t7 && *t7 == IRTemp_INVALID);
+ *t1 = newTempV128();
+ *t2 = newTempV128();
+ *t3 = newTempV128();
+ *t4 = newTempV128();
+ *t5 = newTempV128();
+ *t6 = newTempV128();
+ *t7 = newTempV128();
+}
+
//ZZ /* Produces a value in 0 .. 3, which is encoded as per the type
//ZZ IRRoundingMode. */
//ZZ static IRExpr* /* :: Ity_I32 */ get_FAKE_roundingmode ( void )
@@ -683,6 +710,42 @@
return ops[sizeNarrow];
}
+static IROp mkVecCMPEQ ( UInt size ) {
+ const IROp ops[4]
+ = { Iop_CmpEQ8x16, Iop_CmpEQ16x8, Iop_CmpEQ32x4, Iop_CmpEQ64x2 };
+ vassert(size < 4);
+ return ops[size];
+}
+
+static IROp mkVecCMPGTU ( UInt size ) {
+ const IROp ops[4]
+ = { Iop_CmpGT8Ux16, Iop_CmpGT16Ux8, Iop_CmpGT32Ux4, Iop_CmpGT64Ux2 };
+ vassert(size < 4);
+ return ops[size];
+}
+
+static IROp mkVecCMPGTS ( UInt size ) {
+ const IROp ops[4]
+ = { Iop_CmpGT8Sx16, Iop_CmpGT16Sx8, Iop_CmpGT32Sx4, Iop_CmpGT64Sx2 };
+ vassert(size < 4);
+ return ops[size];
+}
+
+static IROp mkVecABS ( UInt size ) {
+ const IROp ops[4]
+ = { Iop_Abs8x16, Iop_Abs16x8, Iop_Abs32x4, Iop_Abs64x2 };
+ vassert(size < 4);
+ return ops[size];
+}
+
+static IROp mkVecZEROHIxxOFV128 ( UInt size ) {
+ const IROp ops[4]
+ = { Iop_ZeroHI120ofV128, Iop_ZeroHI112ofV128,
+ Iop_ZeroHI96ofV128, Iop_ZeroHI64ofV128 };
+ vassert(size < 4);
+ return ops[size];
+}
+
static IRExpr* mkU ( IRType ty, ULong imm ) {
switch (ty) {
case Ity_I32: return mkU32((UInt)(imm & 0xFFFFFFFFULL));
@@ -1834,7 +1897,7 @@
/* Duplicates the src element exactly so as to fill a V128 value. */
static IRTemp math_DUP_TO_V128 ( IRTemp src, IRType srcTy )
{
- IRTemp res = newTemp(Ity_V128);
+ IRTemp res = newTempV128();
if (srcTy == Ity_F64) {
IRTemp i64 = newTemp(Ity_I64);
assign(i64, unop(Iop_ReinterpF64asI64, mkexpr(src)));
@@ -1877,7 +1940,7 @@
/* The same, but from an expression instead. */
static IRExpr* math_MAYBE_ZERO_HI64_fromE ( UInt bitQ, IRExpr* fullWidth )
{
- IRTemp fullWidthT = newTemp(Ity_V128);
+ IRTemp fullWidthT = newTempV128();
assign(fullWidthT, fullWidth);
return math_MAYBE_ZERO_HI64(bitQ, fullWidthT);
}
@@ -5045,7 +5108,7 @@
} else {
/* Generate a value which is all zeroes except for bit 27,
which must be zero if QCFLAG is all zeroes and one otherwise. */
- IRTemp qcV128 = newTemp(Ity_V128);
+ IRTemp qcV128 = newTempV128();
assign(qcV128, IRExpr_Get( OFFB_QCFLAG, Ity_V128 ));
IRTemp qc64 = newTemp(Ity_I64);
assign(qc64, binop(Iop_Or64, unop(Iop_V128HIto64, mkexpr(qcV128)),
@@ -5217,7 +5280,7 @@
/*------------------------------------------------------------*/
-/*--- SIMD and FP instructions ---*/
+/*--- SIMD and FP instructions: helper functions ---*/
/*------------------------------------------------------------*/
/* Some constructors for interleave/deinterleave expressions. */
@@ -5521,26 +5584,26 @@
lanes of 16 bit, whereas what is being operated on is 16
lanes of 8 bits. */
IRTemp x76543210 = src;
- IRTemp x76547654 = newTemp(Ity_V128);
- IRTemp x32103210 = newTemp(Ity_V128);
+ IRTemp x76547654 = newTempV128();
+ IRTemp x32103210 = newTempV128();
assign(x76547654, mk_CatOddLanes64x2 (x76543210, x76543210));
assign(x32103210, mk_CatEvenLanes64x2(x76543210, x76543210));
- IRTemp x76767676 = newTemp(Ity_V128);
- IRTemp x54545454 = newTemp(Ity_V128);
- IRTemp x32323232 = newTemp(Ity_V128);
- IRTemp x10101010 = newTemp(Ity_V128);
+ IRTemp x76767676 = newTempV128();
+ IRTemp x54545454 = newTempV128();
+ IRTemp x32323232 = newTempV128();
+ IRTemp x10101010 = newTempV128();
assign(x76767676, mk_CatOddLanes32x4 (x76547654, x76547654));
assign(x54545454, mk_CatEvenLanes32x4(x76547654, x76547654));
assign(x32323232, mk_CatOddLanes32x4 (x32103210, x32103210));
assign(x10101010, mk_CatEvenLanes32x4(x32103210, x32103210));
- IRTemp x77777777 = newTemp(Ity_V128);
- IRTemp x66666666 = newTemp(Ity_V128);
- IRTemp x55555555 = newTemp(Ity_V128);
- IRTemp x44444444 = newTemp(Ity_V128);
- IRTemp x33333333 = newTemp(Ity_V128);
- IRTemp x22222222 = newTemp(Ity_V128);
- IRTemp x11111111 = newTemp(Ity_V128);
- IRTemp x00000000 = newTemp(Ity_V128);
+ IRTemp x77777777 = newTempV128();
+ IRTemp x66666666 = newTempV128();
+ IRTemp x55555555 = newTempV128();
+ IRTemp x44444444 = newTempV128();
+ IRTemp x33333333 = newTempV128();
+ IRTemp x22222222 = newTempV128();
+ IRTemp x11111111 = newTempV128();
+ IRTemp x00000000 = newTempV128();
assign(x77777777, mk_CatOddLanes16x8 (x76767676, x76767676));
assign(x66666666, mk_CatEvenLanes16x8(x76767676, x76767676));
assign(x55555555, mk_CatOddLanes16x8 (x54545454, x54545454));
@@ -5550,22 +5613,22 @@
assign(x11111111, mk_CatOddLanes16x8 (x10101010, x10101010));
assign(x00000000, mk_CatEvenLanes16x8(x10101010, x10101010));
/* Naming not misleading after here. */
- IRTemp xAllF = newTemp(Ity_V128);
- IRTemp xAllE = newTemp(Ity_V128);
- IRTemp xAllD = newTemp(Ity_V128);
- IRTemp xAllC = newTemp(Ity_V128);
- IRTemp xAllB = newTemp(Ity_V128);
- IRTemp xAllA = newTemp(Ity_V128);
- IRTemp xAll9 = newTemp(Ity_V128);
- IRTemp xAll8 = newTemp(Ity_V128);
- IRTemp xAll7 = newTemp(Ity_V128);
- IRTemp xAll6 = newTemp(Ity_V128);
- IRTemp xAll5 = newTemp(Ity_V128);
- IRTemp xAll4 = newTemp(Ity_V128);
- IRTemp xAll3 = newTemp(Ity_V128);
- IRTemp xAll2 = newTemp(Ity_V128);
- IRTemp xAll1 = newTemp(Ity_V128);
- IRTemp xAll0 = newTemp(Ity_V128);
+ IRTemp xAllF = newTempV128();
+ IRTemp xAllE = newTempV128();
+ IRTemp xAllD = newTempV128();
+ IRTemp xAllC = newTempV128();
+ IRTemp xAllB = newTempV128();
+ IRTemp xAllA = newTempV128();
+ IRTemp xAll9 = newTempV128();
+ IRTemp xAll8 = newTempV128();
+ IRTemp xAll7 = newTempV128();
+ IRTemp xAll6 = newTempV128();
+ IRTemp xAll5 = newTempV128();
+ IRTemp xAll4 = newTempV128();
+ IRTemp xAll3 = newTempV128();
+ IRTemp xAll2 = newTempV128();
+ IRTemp xAll1 = newTempV128();
+ IRTemp xAll0 = newTempV128();
assign(xAllF, mk_CatOddLanes8x16 (x77777777, x77777777));
assign(xAllE, mk_CatEvenLanes8x16(x77777777, x77777777));
assign(xAllD, mk_CatOddLanes8x16 (x66666666, x66666666));
@@ -5582,14 +5645,14 @@
assign(xAll2, mk_CatEvenLanes8x16(x11111111, x11111111));
assign(xAll1, mk_CatOddLanes8x16 (x00000000, x00000000));
assign(xAll0, mk_CatEvenLanes8x16(x00000000, x00000000));
- IRTemp maxFE = newTemp(Ity_V128);
- IRTemp maxDC = newTemp(Ity_V128);
- IRTemp maxBA = newTemp(Ity_V128);
- IRTemp max98 = newTemp(Ity_V128);
- IRTemp max76 = newTemp(Ity_V128);
- IRTemp max54 = newTemp(Ity_V128);
- IRTemp max32 = newTemp(Ity_V128);
- IRTemp max10 = newTemp(Ity_V128);
+ IRTemp maxFE = newTempV128();
+ IRTemp maxDC = newTempV128();
+ IRTemp maxBA = newTempV128();
+ IRTemp max98 = newTempV128();
+ IRTemp max76 = newTempV128();
+ IRTemp max54 = newTempV128();
+ IRTemp max32 = newTempV128();
+ IRTemp max10 = newTempV128();
assign(maxFE, binop(op, mkexpr(xAllF), mkexpr(xAllE)));
assign(maxDC, binop(op, mkexpr(xAllD), mkexpr(xAllC)));
assign(maxBA, binop(op, mkexpr(xAllB), mkexpr(xAllA)));
@@ -5598,48 +5661,48 @@
assign(max54, binop(op, mkexpr(xAll5), mkexpr(xAll4)));
assign(max32, binop(op, mkexpr(xAll3), mkexpr(xAll2)));
assign(max10, binop(op, mkexpr(xAll1), mkexpr(xAll0)));
- IRTemp maxFEDC = newTemp(Ity_V128);
- IRTemp maxBA98 = newTemp(Ity_V128);
- IRTemp max7654 = newTemp(Ity_V128);
- IRTemp max3210 = newTemp(Ity_V128);
+ IRTemp maxFEDC = newTempV128();
+ IRTemp maxBA98 = newTempV128();
+ IRTemp max7654 = newTempV128();
+ IRTemp max3210 = newTempV128();
assign(maxFEDC, binop(op, mkexpr(maxFE), mkexpr(maxDC)));
assign(maxBA98, binop(op, mkexpr(maxBA), mkexpr(max98)));
assign(max7654, binop(op, mkexpr(max76), mkexpr(max54)));
assign(max3210, binop(op, mkexpr(max32), mkexpr(max10)));
- IRTemp maxFEDCBA98 = newTemp(Ity_V128);
- IRTemp max76543210 = newTemp(Ity_V128);
+ IRTemp maxFEDCBA98 = newTempV128();
+ IRTemp max76543210 = newTempV128();
assign(maxFEDCBA98, binop(op, mkexpr(maxFEDC), mkexpr(maxBA98)));
assign(max76543210, binop(op, mkexpr(max7654), mkexpr(max3210)));
- IRTemp maxAllLanes = newTemp(Ity_V128);
+ IRTemp maxAllLanes = newTempV128();
assign(maxAllLanes, binop(op, mkexpr(maxFEDCBA98),
mkexpr(max76543210)));
- IRTemp res = newTemp(Ity_V128);
+ IRTemp res = newTempV128();
assign(res, unop(Iop_ZeroHI120ofV128, mkexpr(maxAllLanes)));
return res;
}
case Iop_Min16Sx8: case Iop_Min16Ux8:
case Iop_Max16Sx8: case Iop_Max16Ux8: case Iop_Add16x8: {
IRTemp x76543210 = src;
- IRTemp x76547654 = newTemp(Ity_V128);
- IRTemp x32103210 = newTemp(Ity_V128);
+ IRTemp x76547654 = newTempV128();
+ IRTemp x32103210 = newTempV128();
assign(x76547654, mk_CatOddLanes64x2 (x76543210, x76543210));
assign(x32103210, mk_CatEvenLanes64x2(x76543210, x76543210));
- IRTemp x76767676 = newTemp(Ity_V128);
- IRTemp x54545454 = newTemp(Ity_V128);
- IRTemp x32323232 = newTemp(Ity_V128);
- IRTemp x10101010 = newTemp(Ity_V128);
+ IRTemp x76767676 = newTempV128();
+ IRTemp x54545454 = newTempV128();
+ IRTemp x32323232 = newTempV128();
+ IRTemp x10101010 = newTempV128();
assign(x76767676, mk_CatOddLanes32x4 (x76547654, x76547654));
assign(x54545454, mk_CatEvenLanes32x4(x76547654, x76547654));
assign(x32323232, mk_CatOddLanes32x4 (x32103210, x32103210));
assign(x10101010, mk_CatEvenLanes32x4(x32103210, x32103210));
- IRTemp x77777777 = newTemp(Ity_V128);
- IRTemp x66666666 = newTemp(Ity_V128);
- IRTemp x55555555 = newTemp(Ity_V128);
- IRTemp x44444444 = newTemp(Ity_V128);
- IRTemp x33333333 = newTemp(Ity_V128);
- IRTemp x22222222 = newTemp(Ity_V128);
- IRTemp x11111111 = newTemp(Ity_V128);
- IRTemp x00000000 = newTemp(Ity_V128);
+ IRTemp x77777777 = newTempV128();
+ IRTemp x66666666 = newTempV128();
+ IRTemp x55555555 = newTempV128();
+ IRTemp x44444444 = newTempV128();
+ IRTemp x33333333 = newTempV128();
+ IRTemp x22222222 = newTempV128();
+ IRTemp x11111111 = newTempV128();
+ IRTemp x00000000 = newTempV128();
assign(x77777777, mk_CatOddLanes16x8 (x76767676, x76767676));
assign(x66666666, mk_CatEvenLanes16x8(x76767676, x76767676));
assign(x55555555, mk_CatOddLanes16x8 (x54545454, x54545454));
@@ -5648,58 +5711,58 @@
assign(x22222222, mk_CatEvenLanes16x8(x32323232, x32323232));
assign(x11111111, mk_CatOddLanes16x8 (x10101010, x10101010));
assign(x00000000, mk_CatEvenLanes16x8(x10101010, x10101010));
- IRTemp max76 = newTemp(Ity_V128);
- IRTemp max54 = newTemp(Ity_V128);
- IRTemp max32 = newTemp(Ity_V128);
- IRTemp max10 = newTemp(Ity_V128);
+ IRTemp max76 = newTempV128();
+ IRTemp max54 = newTempV128();
+ IRTemp max32 = newTempV128();
+ IRTemp max10 = newTempV128();
assign(max76, binop(op, mkexpr(x77777777), mkexpr(x66666666)));
assign(max54, binop(op, mkexpr(x55555555), mkexpr(x44444444)));
assign(max32, binop(op, mkexpr(x33333333), mkexpr(x22222222)));
assign(max10, binop(op, mkexpr(x11111111), mkexpr(x00000000)));
- IRTemp max7654 = newTemp(Ity_V128);
- IRTemp max3210 = newTemp(Ity_V128);
+ IRTemp max7654 = newTempV128();
+ IRTemp max3210 = newTempV128();
assign(max7654, binop(op, mkexpr(max76), mkexpr(max54)));
assign(max3210, binop(op, mkexpr(max32), mkexpr(max10)));
- IRTemp max76543210 = newTemp(Ity_V128);
+ IRTemp max76543210 = newTempV128();
assign(max76543210, binop(op, mkexpr(max7654), mkexpr(max3210)));
- IRTemp res = newTemp(Ity_V128);
+ IRTemp res = newTempV128();
assign(res, unop(Iop_ZeroHI112ofV128, mkexpr(max76543210)));
return res;
}
case Iop_Min32Sx4: case Iop_Min32Ux4:
case Iop_Max32Sx4: case Iop_Max32Ux4: case Iop_Add32x4: {
IRTemp x3210 = src;
- IRTemp x3232 = newTemp(Ity_V128);
- IRTemp x1010 = newTemp(Ity_V128);
+ IRTemp x3232 = newTempV128();
+ IRTemp x1010 = newTempV128();
assign(x3232, mk_CatOddLanes64x2 (x3210, x3210));
assign(x1010, mk_CatEvenLanes64x2(x3210, x3210));
- IRTemp x3333 = newTemp(Ity_V128);
- IRTemp x2222 = newTemp(Ity_V128);
- IRTemp x1111 = newTemp(Ity_V128);
- IRTemp x0000 = newTemp(Ity_V128);
+ IRTemp x3333 = newTempV128();
+ IRTemp x2222 = newTempV128();
+ IRTemp x1111 = newTempV128();
+ IRTemp x0000 = newTempV128();
assign(x3333, mk_CatOddLanes32x4 (x3232, x3232));
assign(x2222, mk_CatEvenLanes32x4(x3232, x3232));
assign(x1111, mk_CatOddLanes32x4 (x1010, x1010));
assign(x0000, mk_CatEvenLanes32x4(x1010, x1010));
- IRTemp max32 = newTemp(Ity_V128);
- IRTemp max10 = newTemp(Ity_V128);
+ IRTemp max32 = newTempV128();
+ IRTemp max10 = newTempV128();
assign(max32, binop(op, mkexpr(x3333), mkexpr(x2222)));
assign(max10, binop(op, mkexpr(x1111), mkexpr(x0000)));
- IRTemp max3210 = newTemp(Ity_V128);
+ IRTemp max3210 = newTempV128();
assign(max3210, binop(op, mkexpr(max32), mkexpr(max10)));
- IRTemp res = newTemp(Ity_V128);
+ IRTemp res = newTempV128();
assign(res, unop(Iop_ZeroHI96ofV128, mkexpr(max3210)));
return res;
}
case Iop_Add64x2: {
IRTemp x10 = src;
- IRTemp x00 = newTemp(Ity_V128);
- IRTemp x11 = newTemp(Ity_V128);
+ IRTemp x00 = newTempV128();
+ IRTemp x11 = newTempV128();
assign(x11, binop(Iop_InterleaveHI64x2, mkexpr(x10), mkexpr(x10)));
assign(x00, binop(Iop_InterleaveLO64x2, mkexpr(x10), mkexpr(x10)));
- IRTemp max10 = newTemp(Ity_V128);
+ IRTemp max10 = newTempV128();
assign(max10, binop(op, mkexpr(x11), mkexpr(x00)));
- IRTemp res = newTemp(Ity_V128);
+ IRTemp res = newTempV128();
assign(res, unop(Iop_ZeroHI64ofV128, mkexpr(max10)));
return res;
}
@@ -5723,22 +5786,22 @@
assign(half16, mkU64(0x1010101010101010ULL));
/* A zero vector */
- IRTemp allZero = newTemp(Ity_V128);
+ IRTemp allZero = newTempV128();
assign(allZero, mkV128(0x0000));
/* A vector containing 15 in each 8-bit lane */
- IRTemp all15 = newTemp(Ity_V128);
+ IRTemp all15 = newTempV128();
assign(all15, binop(Iop_64HLtoV128, mkexpr(half15), mkexpr(half15)));
/* A vector containing 16 in each 8-bit lane */
- IRTemp all16 = newTemp(Ity_V128);
+ IRTemp all16 = newTempV128();
assign(all16, binop(Iop_64HLtoV128, mkexpr(half16), mkexpr(half16)));
/* A vector containing 32 in each 8-bit lane */
- IRTemp all32 = newTemp(Ity_V128);
+ IRTemp all32 = newTempV128();
assign(all32, binop(Iop_Add8x16, mkexpr(all16), mkexpr(all16)));
/* A vector containing 48 in each 8-bit lane */
- IRTemp all48 = newTemp(Ity_V128);
+ IRTemp all48 = newTempV128();
assign(all48, binop(Iop_Add8x16, mkexpr(all16), mkexpr(all32)));
/* A vector containing 64 in each 8-bit lane */
- IRTemp all64 = newTemp(Ity_V128);
+ IRTemp all64 = newTempV128();
assign(all64, binop(Iop_Add8x16, mkexpr(all32), mkexpr(all32)));
/* Group the 16/32/48/64 vectors so as to be indexable. */
@@ -5747,33 +5810,33 @@
/* Compute the result for each table vector, with zeroes in places
where the index values are out of range, and OR them into the
running vector. */
- IRTemp running_result = newTemp(Ity_V128);
+ IRTemp running_result = newTempV128();
assign(running_result, mkV128(0));
UInt tabent;
for (tabent = 0; tabent <= len; tabent++) {
vassert(tabent >= 0 && tabent < 4);
- IRTemp bias = newTemp(Ity_V128);
+ IRTemp bias = newTempV128();
assign(bias,
mkexpr(tabent == 0 ? allZero : allXX[tabent-1]));
- IRTemp biased_indices = newTemp(Ity_V128);
+ IRTemp biased_indices = newTempV128();
assign(biased_indices,
binop(Iop_Sub8x16, mkexpr(src), mkexpr(bias)));
- IRTemp valid_mask = newTemp(Ity_V128);
+ IRTemp valid_mask = newTempV128();
assign(valid_mask,
binop(Iop_CmpGT8Ux16, mkexpr(all16), mkexpr(biased_indices)));
- IRTemp safe_biased_indices = newTemp(Ity_V128);
+ IRTemp safe_biased_indices = newTempV128();
assign(safe_biased_indices,
binop(Iop_AndV128, mkexpr(biased_indices), mkexpr(all15)));
- IRTemp results_or_junk = newTemp(Ity_V128);
+ IRTemp results_or_junk = newTempV128();
assign(results_or_junk,
binop(Iop_Perm8x16, mkexpr(tab[tabent]),
mkexpr(safe_biased_indices)));
- IRTemp results_or_zero = newTemp(Ity_V128);
+ IRTemp results_or_zero = newTempV128();
assign(results_or_zero,
binop(Iop_AndV128, mkexpr(results_or_junk), mkexpr(valid_mask)));
/* And OR that into the running result. */
- IRTemp tmp = newTemp(Ity_V128);
+ IRTemp tmp = newTempV128();
assign(tmp, binop(Iop_OrV128, mkexpr(results_or_zero),
mkexpr(running_result)));
running_result = tmp;
@@ -5785,10 +5848,10 @@
lanes in the oor_values for out of range indices. This is
unnecessary for TBL but will get folded out by iropt, so we lean
on that and generate the same code for TBL and TBX here. */
- IRTemp overall_valid_mask = newTemp(Ity_V128);
+ IRTemp overall_valid_mask = newTempV128();
assign(overall_valid_mask,
binop(Iop_CmpGT8Ux16, mkexpr(allXX[len]), mkexpr(src)));
- IRTemp result = newTemp(Ity_V128);
+ IRTemp result = newTempV128();
assign(result,
binop(Iop_OrV128,
mkexpr(running_result),
@@ -5809,7 +5872,7 @@
IRTemp math_BINARY_WIDENING_V128 ( Bool is2, IROp opI64x2toV128,
IRExpr* argL, IRExpr* argR )
{
- IRTemp res = newTemp(Ity_V128);
+ IRTemp res = newTempV128();
IROp slice = is2 ? Iop_V128HIto64 : Iop_V128to64;
assign(res, binop(opI64x2toV128, unop(slice, argL),
unop(slice, argR)));
@@ -5821,28 +5884,22 @@
static
IRTemp math_ABD ( Bool isU, UInt size, IRExpr* argLE, IRExpr* argRE )
{
- const IROp opSUB[4]
- = { Iop_Sub8x16, Iop_Sub16x8, Iop_Sub32x4, Iop_Sub64x2 };
- const IROp opGTU[4]
- = { Iop_CmpGT8Ux16, Iop_CmpGT16Ux8, Iop_CmpGT32Ux4, Iop_CmpGT64Ux2 };
- const IROp opGTS[4]
- = { Iop_CmpGT8Sx16, Iop_CmpGT16Sx8, Iop_CmpGT32Sx4, Iop_CmpGT64Sx2 };
vassert(size <= 3);
- IRTemp argL = newTemp(Ity_V128);
- IRTemp argR = newTemp(Ity_V128);
- IRTemp msk = newTemp(Ity_V128);
- IRTemp res = newTemp(Ity_V128);
+ IRTemp argL = newTempV128();
+ IRTemp argR = newTempV128();
+ IRTemp msk = newTempV128();
+ IRTemp res = newTempV128();
assign(argL, argLE);
assign(argR, argRE);
- assign(msk, binop(isU ? opGTU[size] : opGTS[size],
+ assign(msk, binop(isU ? mkVecCMPGTU(size) : mkVecCMPGTS(size),
mkexpr(argL), mkexpr(argR)));
assign(res,
binop(Iop_OrV128,
binop(Iop_AndV128,
- binop(opSUB[size], mkexpr(argL), mkexpr(argR)),
+ binop(mkVecSUB(size), mkexpr(argL), mkexpr(argR)),
mkexpr(msk)),
binop(Iop_AndV128,
- binop(opSUB[size], mkexpr(argR), mkexpr(argL)),
+ binop(mkVecSUB(size), mkexpr(argR), mkexpr(argL)),
unop(Iop_NotV128, mkexpr(msk)))));
return res;
}
@@ -5855,8 +5912,8 @@
IRTemp math_WIDEN_LO_OR_HI_LANES ( Bool zWiden, Bool fromUpperHalf,
UInt sizeNarrow, IRExpr* srcE )
{
- IRTemp src = newTemp(Ity_V128);
- IRTemp res = newTemp(Ity_V128);
+ IRTemp src = newTempV128();
+ IRTemp res = newTempV128();
assign(src, srcE);
switch (sizeNarrow) {
case X10:
@@ -5900,8 +5957,8 @@
IRTemp math_WIDEN_EVEN_OR_ODD_LANES ( Bool zWiden, Bool fromOdd,
UInt sizeNarrow, IRExpr* srcE )
{
- IRTemp src = newTemp(Ity_V128);
- IRTemp res = newTemp(Ity_V128);
+ IRTemp src = newTempV128();
+ IRTemp res = newTempV128();
IROp opSAR = mkVecSARN(sizeNarrow+1);
IROp opSHR = mkVecSHRN(sizeNarrow+1);
IROp opSHL = mkVecSHLN(sizeNarrow+1);
@@ -5929,7 +5986,7 @@
static
IRTemp math_NARROW_LANES ( IRTemp argHi, IRTemp argLo, UInt sizeNarrow )
{
- IRTemp res = newTemp(Ity_V128);
+ IRTemp res = newTempV128();
assign(res, binop(mkVecCATEVENLANES(sizeNarrow),
mkexpr(argHi), mkexpr(argLo)));
return res;
@@ -5966,13 +6023,13 @@
default:
vassert(0);
}
- IRTemp res = newTemp(Ity_V128);
+ IRTemp res = newTempV128();
assign(res, src);
Int i;
for (i = 3; i >= 0; i--) {
if (ops[i] == Iop_INVALID)
break;
- IRTemp tmp = newTemp(Ity_V128);
+ IRTemp tmp = newTempV128();
assign(tmp, binop(ops[i], mkexpr(res), mkexpr(res)));
res = tmp;
}
@@ -6074,12 +6131,12 @@
if (is2) {
/* Get the old contents of Vdd, zero the upper half, and replace
it with 'x'. */
- IRTemp t_zero_oldLO = newTemp(Ity_V128);
+ IRTemp t_zero_oldLO = newTempV128();
assign(t_zero_oldLO, unop(Iop_ZeroHI64ofV128, getQReg128(dd)));
- IRTemp t_newHI_zero = newTemp(Ity_V128);
+ IRTemp t_newHI_zero = newTempV128();
assign(t_newHI_zero, binop(Iop_InterleaveLO64x2, mkexpr(new64),
mkV128(0x0000)));
- IRTemp res = newTemp(Ity_V128);
+ IRTemp res = newTempV128();
assign(res, binop(Iop_OrV128, mkexpr(t_zero_oldLO),
mkexpr(t_newHI_zero)));
putQReg128(dd, mkexpr(res));
@@ -6090,22 +6147,58 @@
}
+/* Compute vector SQABS at lane size |size| for |srcE|, returning
+ the q result in |*qabs| and the normal result in |*nabs|. */
+static
+void math_SQABS ( /*OUT*/IRTemp* qabs, /*OUT*/IRTemp* nabs,
+ IRExpr* srcE, UInt size )
+{
+ IRTemp src, mask, maskn, nsub, qsub;
+ src = mask = maskn = nsub = qsub = IRTemp_INVALID;
+ newTempsV128_7(&src, &mask, &maskn, &nsub, &qsub, nabs, qabs);
+ assign(src, srcE);
+ assign(mask, binop(mkVecCMPGTS(size), mkV128(0x0000), mkexpr(src)));
+ assign(maskn, unop(Iop_NotV128, mkexpr(mask)));
+ assign(nsub, binop(mkVecSUB(size), mkV128(0x0000), mkexpr(src)));
+ assign(qsub, binop(mkVecQSUBS(size), mkV128(0x0000), mkexpr(src)));
+ assign(*nabs, binop(Iop_OrV128,
+ binop(Iop_AndV128, mkexpr(nsub), mkexpr(mask)),
+ binop(Iop_AndV128, mkexpr(src), mkexpr(maskn))));
+ assign(*qabs, binop(Iop_OrV128,
+ binop(Iop_AndV128, mkexpr(qsub), mkexpr(mask)),
+ binop(Iop_AndV128, mkexpr(src), mkexpr(maskn))));
+}
+
+
+static IRTemp math_ZERO_ALL_EXCEPT_LOWEST_LANE ( IRTemp src, UInt size )
+{
+ vassert(size < 4);
+ IRTemp t = newTempV128();
+ assign(t, unop(mkVecZEROHIxxOFV128(size), mkexpr(src)));
+ return t;
+}
+
+
/* QCFLAG tracks the SIMD sticky saturation status. Update the status
- thusly: if |nres| and |qres| hold the same value, leave QCFLAG
+ thusly: if |qres| and |nres| hold the same value, leave QCFLAG
unchanged. Otherwise, set it (implicitly) to 1. */
static
-void updateQCFLAGwithDifference ( IRTemp nres, IRTemp qres )
+void updateQCFLAGwithDifference ( IRTemp qres, IRTemp nres )
{
- IRTemp diff = newTemp(Ity_V128);
- IRTemp oldQCFLAG = newTemp(Ity_V128);
- IRTemp newQCFLAG = newTemp(Ity_V128);
- assign(diff, binop(Iop_XorV128, mkexpr(nres), mkexpr(qres)));
+ IRTemp diff = newTempV128();
+ IRTemp oldQCFLAG = newTempV128();
+ IRTemp newQCFLAG = newTempV128();
+ assign(diff, binop(Iop_XorV128, mkexpr(qres), mkexpr(nres)));
assign(oldQCFLAG, IRExpr_Get(OFFB_QCFLAG, Ity_V128));
assign(newQCFLAG, binop(Iop_OrV128, mkexpr(oldQCFLAG), mkexpr(diff)));
stmt(IRStmt_Put(OFFB_QCFLAG, mkexpr(newQCFLAG)));
}
+/*------------------------------------------------------------*/
+/*--- SIMD and FP instructions ---*/
+/*------------------------------------------------------------*/
+
static
Bool dis_AdvSIMD_EXT(/*MB_OUT*/DisResult* dres, UInt insn)
{
@@ -6128,9 +6221,9 @@
if (op2 == BITS2(0,0)) {
/* -------- 00: EXT 16b_16b_16b, 8b_8b_8b -------- */
- IRTemp sHi = newTemp(Ity_V128);
- IRTemp sLo = newTemp(Ity_V128);
- IRTemp res = newTemp(Ity_V128);
+ IRTemp sHi = newTempV128();
+ IRTemp sLo = newTempV128();
+ IRTemp res = newTempV128();
assign(sHi, getQReg128(mm));
assign(sLo, getQReg128(nn));
if (bitQ == 1) {
@@ -6199,17 +6292,17 @@
*/
Bool isTBX = bitOP == 1;
/* The out-of-range values to use. */
- IRTemp oor_values = newTemp(Ity_V128);
+ IRTemp oor_values = newTempV128();
assign(oor_values, isTBX ? getQReg128(dd) : mkV128(0));
/* src value */
- IRTemp src = newTemp(Ity_V128);
+ IRTemp src = newTempV128();
assign(src, getQReg128(mm));
/* The table values */
IRTemp tab[4];
UInt i;
for (i = 0; i <= len; i++) {
vassert(i < 4);
- tab[i] = newTemp(Ity_V128);
+ tab[i] = newTempV128();
assign(tab[i], getQReg128((nn + i) % 32));
}
IRTemp res = math_TBL_TBX(tab, len, src, oor_values);
@@ -6262,7 +6355,7 @@
/* size is the narrow size */
if (size == X11 || (size == X10 && bitQ == 0)) return False;
Bool isU = bitU == 1;
- IRTemp src = newTemp(Ity_V128);
+ IRTemp src = newTempV128();
assign(src, getQReg128(nn));
/* The basic plan is to widen the lower half, and if Q = 1,
the upper half too. Add them together (if Q = 1), and in
@@ -6280,7 +6373,7 @@
);
}
/* Now fold. */
- IRTemp tWi = newTemp(Ity_V128);
+ IRTemp tWi = newTempV128();
assign(tWi, widened);
IRTemp res = math_FOLDV(tWi, mkVecADD(size+1));
putQReg128(dd, mkexpr(res));
@@ -6327,14 +6420,14 @@
default: vassert(0);
}
vassert(op != Iop_INVALID && nm != NULL);
- IRTemp tN1 = newTemp(Ity_V128);
+ IRTemp tN1 = newTempV128();
assign(tN1, getQReg128(nn));
/* If Q == 0, we're just folding lanes in the lower half of
the value. In which case, copy the lower half of the
source into the upper half, so we can then treat it the
same as the full width case. Except for the addition case,
in which we have to zero out the upper half. */
- IRTemp tN2 = newTemp(Ity_V128);
+ IRTemp tN2 = newTempV128();
assign(tN2, bitQ == 0
? (ix == 5 ? unop(Iop_ZeroHI64ofV128, mkexpr(tN1))
: mk_CatEvenLanes64x2(tN1,tN1))
@@ -6781,7 +6874,8 @@
else if (isMOV || isMVN || isFMOV) {
if (isMVN) imm64lo = ~imm64lo;
ULong imm64hi = bitQ == 0 ? 0 : imm64lo;
- IRExpr* immV128 = binop(Iop_64HLtoV128, mkU64(imm64hi), mkU64(imm64lo));
+ IRExpr* immV128 = binop(Iop_64HLtoV128, mkU64(imm64hi),
+ mkU64(imm64lo));
putQReg128(dd, immV128);
DIP("mov %s, #0x%016llx'%016llx\n", nameQReg128(dd), imm64hi, imm64lo);
}
@@ -6884,8 +6978,8 @@
if (bitU == 0 && sz == X11 && opcode == BITS5(1,1,0,1,1)) {
/* -------- 0,11,11011 ADDP d_2d -------- */
- IRTemp xy = newTemp(Ity_V128);
- IRTemp xx = newTemp(Ity_V128);
+ IRTemp xy = newTempV128();
+ IRTemp xx = newTempV128();
assign(xy, getQReg128(nn));
assign(xx, binop(Iop_InterleaveHI64x2, mkexpr(xy), mkexpr(xy)));
putQReg128(dd, unop(Iop_ZeroHI64ofV128,
@@ -6936,12 +7030,54 @@
/* -------- 0,1xxx,01010 SHL d_d_#imm -------- */
UInt sh = immhb - 64;
vassert(sh >= 0 && sh < 64);
- putQReg128(dd, unop(Iop_ZeroHI64ofV128,
- binop(Iop_ShlN64x2, getQReg128(nn), mkU8(sh))));
+ putQReg128(dd,
+ unop(Iop_ZeroHI64ofV128,
+ sh == 0 ? getQReg128(nn)
+ : binop(Iop_ShlN64x2, getQReg128(nn), mkU8(sh))));
DIP("shl d%u, d%u, #%u\n", dd, nn, sh);
return True;
}
+ if (bitU == 1 && (immh & 8) == 8 && opcode == BITS5(0,1,0,0,0)) {
+ /* -------- 1,1xxx,01000 SRI d_d_#imm -------- */
+ UInt sh = 128 - immhb;
+ vassert(sh >= 1 && sh <= 64);
+ if (sh == 64) {
+ putQReg128(dd, unop(Iop_ZeroHI64ofV128, getQReg128(dd)));
+ } else {
+ /* sh is in range 1 .. 63 */
+ ULong nmask = (ULong)(((Long)0x8000000000000000ULL) >> (sh-1));
+ IRExpr* nmaskV = binop(Iop_64HLtoV128, mkU64(nmask), mkU64(nmask));
+ IRTemp res = newTempV128();
+ assign(res, binop(Iop_OrV128,
+ binop(Iop_AndV128, getQReg128(dd), nmaskV),
+ binop(Iop_ShrN64x2, getQReg128(nn), mkU8(sh))));
+ putQReg128(dd, unop(Iop_ZeroHI64ofV128, mkexpr(res)));
+ }
+ DIP("sri d%u, d%u, #%u\n", dd, nn, sh);
+ return True;
+ }
+
+ if (bitU == 1 && (immh & 8) == 8 && opcode == BITS5(0,1,0,1,0)) {
+ /* -------- 1,1xxx,01010 SLI d_d_#imm -------- */
+ UInt sh = immhb - 64;
+ vassert(sh >= 0 && sh < 64);
+ if (sh == 0) {
+ putQReg128(dd, unop(Iop_ZeroHI64ofV128, getQReg128(nn)));
+ } else {
+ /* sh is in range 1 .. 63 */
+ ULong nmask = (1ULL << sh) - 1;
+ IRExpr* nmaskV = binop(Iop_64HLtoV128, mkU64(nmask), mkU64(nmask));
+ IRTemp res = newTempV128();
+ assign(res, binop(Iop_OrV128,
+ binop(Iop_AndV128, getQReg128(dd), nmaskV),
+ binop(Iop_ShlN64x2, getQReg128(nn), mkU8(sh))));
+ putQReg128(dd, unop(Iop_ZeroHI64ofV128, mkexpr(res)));
+ }
+ DIP("sli d%u, d%u, #%u\n", dd, nn, sh);
+ return True;
+ }
+
# define INSN(_bMax,_bMin) SLICE_UInt(insn, (_bMax), (_bMin))
return False;
# undef INSN
@@ -6984,7 +7120,7 @@
Bool isGT = bitU == 0;
IRExpr* argL = getQReg128(nn);
IRExpr* argR = getQReg128(mm);
- IRTemp res = newTemp(Ity_V128);
+ IRTemp res = newTempV128();
assign(res,
isGT ? binop(Iop_CmpGT64Sx2, argL, argR)
: binop(Iop_CmpGT64Ux2, argL, argR));
@@ -7001,7 +7137,7 @@
Bool isGE = bitU == 0;
IRExpr* argL = getQReg128(nn);
IRExpr* argR = getQReg128(mm);
- IRTemp res = newTemp(Ity_V128);
+ IRTemp res = newTempV128();
assign(res,
isGE ? unop(Iop_NotV128, binop(Iop_CmpGT64Sx2, argR, argL))
: unop(Iop_NotV128, binop(Iop_CmpGT64Ux2, argR, argL)));
@@ -7034,7 +7170,7 @@
Bool isEQ = bitU == 1;
IRExpr* argL = getQReg128(nn);
IRExpr* argR = getQReg128(mm);
- IRTemp res = newTemp(Ity_V128);
+ IRTemp res = newTempV128();
assign(res,
isEQ ? binop(Iop_CmpEQ64x2, argL, argR)
: unop(Iop_NotV128, binop(Iop_CmpEQ64x2,
@@ -7072,6 +7208,7 @@
{
/* 31 29 28 23 21 16 11 9 4
01 U 11110 size 10000 opcode 10 n d
+ Decode fields: u,size,opcode
*/
# define INSN(_bMax,_bMin) SLICE_UInt(insn, (_bMax), (_bMin))
if (INSN(31,30) != BITS2(0,1)
@@ -7087,13 +7224,26 @@
UInt dd = INSN(4,0);
vassert(size < 4);
+ if (bitU == 0 && opcode == BITS5(0,0,1,1,1)) {
+ /* -------- 0,xx,00111 SQABS std4_std4 -------- */
+ IRTemp qabs = IRTemp_INVALID, nabs = IRTemp_INVALID;
+ math_SQABS(&qabs, &nabs, getQReg128(nn), size);
+ IRTemp qres = math_ZERO_ALL_EXCEPT_LOWEST_LANE(qabs, size);
+ IRTemp nres = math_ZERO_ALL_EXCEPT_LOWEST_LANE(nabs, size);
+ putQReg128(dd, mkexpr(qres));
+ updateQCFLAGwithDifference(qres, nres);
+ const HChar arr = "bhsd"[size];
+ DIP("%s %c%u, %c%u\n", "sqabs", arr, dd, arr, nn);
+ return True;
+ }
+
if (size == X11 && opcode == BITS5(0,1,0,0,0)) {
/* -------- 0,11,01000: CMGT d_d_#0 -------- */ // >s 0
/* -------- 1,11,01000: CMGE d_d_#0 -------- */ // >=s 0
Bool isGT = bitU == 0;
IRExpr* argL = getQReg128(nn);
IRExpr* argR = mkV128(0x0000);
- IRTemp res = newTemp(Ity_V128);
+ IRTemp res = newTempV128();
assign(res, isGT ? binop(Iop_CmpGT64Sx2, argL, argR)
: unop(Iop_NotV128, binop(Iop_CmpGT64Sx2, argR, argL)));
putQReg128(dd, unop(Iop_ZeroHI64ofV128, mkexpr(res)));
@@ -7107,7 +7257,7 @@
Bool isEQ = bitU == 0;
IRExpr* argL = getQReg128(nn);
IRExpr* argR = mkV128(0x0000);
- IRTemp res = newTemp(Ity_V128);
+ IRTemp res = newTempV128();
assign(res, isEQ ? binop(Iop_CmpEQ64x2, argL, argR)
: unop(Iop_NotV128,
binop(Iop_CmpGT64Sx2, argL, argR)));
@@ -7191,27 +7341,76 @@
Bool isQ = bitQ == 1;
Bool isU = bitU == 1;
Bool ok = getLaneInfo_IMMH_IMMB(&shift, &size, immh, immb);
+ if (!ok || (bitQ == 0 && size == X11)) return False;
vassert(size >= 0 && size <= 3);
- if (ok && size < 4 && shift > 0 && shift < (8 << size)
- && !(size == 3/*64bit*/ && !isQ)) {
- IROp op = isU ? mkVecSHRN(size) : mkVecSARN(size);
- IRExpr* src = getQReg128(nn);
- IRTemp res = newTemp(Ity_V128);
- assign(res, binop(op, src, mkU8(shift)));
- putQReg128(dd, math_MAYBE_ZERO_HI64(bitQ, res));
- HChar laneCh = "bhsd"[size];
- UInt nLanes = (isQ ? 128 : 64) / (8 << size);
- const HChar* nm = isU ? "ushr" : "sshr";
- DIP("%s %s.%u%c, %s.%u%c, #%u\n", nm,
- nameQReg128(dd), nLanes, laneCh,
- nameQReg128(nn), nLanes, laneCh, shift);
- return True;
+ UInt lanebits = 8 << size;
+ vassert(shift >= 1 && shift <= lanebits);
+ IROp op = isU ? mkVecSHRN(size) : mkVecSARN(size);
+ IRExpr* src = getQReg128(nn);
+ IRTemp res = newTempV128();
+ if (shift == lanebits && isU) {
+ assign(res, mkV128(0x0000));
+ } else {
+ UInt nudge = 0;
+ if (shift == lanebits) {
+ vassert(!isU);
+ nudge = 1;
+ }
+ assign(res, binop(op, src, mkU8(shift - nudge)));
}
- return False;
+ putQReg128(dd, math_MAYBE_ZERO_HI64(bitQ, res));
+ HChar laneCh = "bhsd"[size];
+ UInt nLanes = (isQ ? 128 : 64) / lanebits;
+ const HChar* nm = isU ? "ushr" : "sshr";
+ DIP("%s %s.%u%c, %s.%u%c, #%u\n", nm,
+ nameQReg128(dd), nLanes, laneCh,
+ nameQReg128(nn), nLanes, laneCh, shift);
+ return True;
}
- if (bitU == 0 && opcode == BITS5(0,1,0,1,0)) {
+ if (bitU == 1 && opcode == BITS5(0,1,0,0,0)) {
+ /* -------- 1,01000 SRI std7_std7_#imm -------- */
+ /* laneTy, shift = case immh:immb of
+ 0001:xxx -> B, SHR:8-xxx
+ 001x:xxx -> H, SHR:16-xxxx
+ 01xx:xxx -> S, SHR:32-xxxxx
+ 1xxx:xxx -> D, SHR:64-xxxxxx
+ other -> invalid
+ */
+ UInt size = 0;
+ UInt shift = 0;
+ Bool isQ = bitQ == 1;
+ Bool ok = getLaneInfo_IMMH_IMMB(&shift, &size, immh, immb);
+ if (!ok || (bitQ == 0 && size == X11)) return False;
+ vassert(size >= 0 && size <= 3);
+ UInt lanebits = 8 << size;
+ vassert(shift >= 1 && shift <= lanebits);
+ IRExpr* src = getQReg128(nn);
+ IRTemp res = newTempV128();
+ if (shift == lanebits) {
+ assign(res, getQReg128(dd));
+ } else {
+ assign(res, binop(mkVecSHRN(size), src, mkU8(shift)));
+ IRExpr* nmask = binop(mkVecSHLN(size),
+ mkV128(0xFFFF), mkU8(lanebits - shift));
+ IRTemp tmp = newTempV128();
+ assign(tmp, binop(Iop_OrV128,
+ mkexpr(res),
+ binop(Iop_AndV128, getQReg128(dd), nmask)));
+ res = tmp;
+ }
+ putQReg128(dd, math_MAYBE_ZERO_HI64(bitQ, res));
+ HChar laneCh = "bhsd"[size];
+ UInt nLanes = (isQ ? 128 : 64) / lanebits;
+ DIP("%s %s.%u%c, %s.%u%c, #%u\n", "sri",
+ nameQReg128(dd), nLanes, laneCh,
+ nameQReg128(nn), nLanes, laneCh, shift);
+ return True;
+ }
+
+ if (opcode == BITS5(0,1,0,1,0)) {
/* -------- 0,01010 SHL std7_std7_#imm -------- */
+ /* -------- 1,01010 SLI std7_std7_#imm -------- */
/* laneTy, shift = case immh:immb of
0001:xxx -> B, xxx
001x:xxx -> H, xxxx
@@ -7219,32 +7418,43 @@
1xxx:xxx -> D, xxxxxx
other -> invalid
*/
- const IROp opsSHLN[4]
- = { Iop_ShlN8x16, Iop_ShlN16x8, Iop_ShlN32x4, Iop_ShlN64x2 };
UInt size = 0;
UInt shift = 0;
+ Bool isSLI = bitU == 1;
Bool isQ = bitQ == 1;
Bool ok = getLaneInfo_IMMH_IMMB(&shift, &size, immh, immb);
+ if (!ok || (bitQ == 0 && size == X11)) return False;
vassert(size >= 0 && size <= 3);
/* The shift encoding has opposite sign for the leftwards case.
Adjust shift to compensate. */
- shift = (8 << size) - shift;
- if (ok && size < 4 && shift > 0 && shift < (8 << size)
- && !(size == 3/*64bit*/ && !isQ)) {
- IROp op = opsSHLN[size];
- IRExpr* src = getQReg128(nn);
- IRTemp res = newTemp(Ity_V128);
+ UInt lanebits = 8 << size;
+ shift = lanebits - shift;
+ vassert(shift >= 0 && shift < lanebits);
+ IROp op = mkVecSHLN(size);
+ IRExpr* src = getQReg128(nn);
+ IRTemp res = newTempV128();
+ if (shift == 0) {
+ assign(res, src);
+ } else {
assign(res, binop(op, src, mkU8(shift)));
- putQReg128(dd, math_MAYBE_ZERO_HI64(bitQ, res));
- HChar laneCh = "bhsd"[size];
- UInt nLanes = (isQ ? 128 : 64) / (8 << size);
- const HChar* nm = "shl";
- DIP("%s %s.%u%c, %s.%u%c, #%u\n", nm,
- nameQReg128(dd), nLanes, laneCh,
- nameQReg128(nn), nLanes, laneCh, shift);
- return True;
+ if (isSLI) {
+ IRExpr* nmask = binop(mkVecSHRN(size),
+ mkV128(0xFFFF), mkU8(lanebits - shift));
+ IRTemp tmp = newTempV128();
+ assign(tmp, binop(Iop_OrV128,
+ mkexpr(res),
+ binop(Iop_AndV128, getQReg128(dd), nmask)));
+ res = tmp;
+ }
}
- return False;
+ putQReg128(dd, math_MAYBE_ZERO_HI64(bitQ, res));
+ HChar laneCh = "bhsd"[size];
+ UInt nLanes = (isQ ? 128 : 64) / lanebits;
+ const HChar* nm = isSLI ? "sli" : "shl";
+ DIP("%s %s.%u%c, %s.%u%c, #%u\n", nm,
+ nameQReg128(dd), nLanes, laneCh,
+ nameQReg128(nn), nLanes, laneCh, shift);
+ return True;
}
if (bitU == 0
@@ -7259,9 +7469,9 @@
Bool ok = getLaneInfo_IMMH_IMMB(&shift, &size, immh, immb);
if (!ok || size == X11) return False;
vassert(shift >= 1);
- IRTemp t1 = newTemp(Ity_V128);
- IRTemp t2 = newTemp(Ity_V128);
- IRTemp t3 = newTemp(Ity_V128);
+ IRTemp t1 = newTempV128();
+ IRTemp t2 = newTempV128();
+ IRTemp t3 = newTempV128();
assign(t1, getQReg128(nn));
assign(t2, isR ? binop(mkVecADD(size+1),
mkexpr(t1),
@@ -7293,8 +7503,8 @@
Bool isQ = bitQ == 1;
Bool isU = bitU == 1;
UInt immhb = (immh << 3) | immb;
- IRTemp src = newTemp(Ity_V128);
- IRTemp zero = newTemp(Ity_V128);
+ IRTemp src = newTempV128();
+ IRTemp zero = newTempV128();
IRExpr* res = NULL;
UInt sh = 0;
const HChar* ta = "??";
@@ -7389,7 +7599,7 @@
Bool isADD = opcode == BITS4(0,0,0,0);
IRTemp argL = math_WIDEN_LO_OR_HI_LANES(isU, is2, size, getQReg128(nn));
IRTemp argR = math_WIDEN_LO_OR_HI_LANES(isU, is2, size, getQReg128(mm));
- IRTemp res = newTemp(Ity_V128);
+ IRTemp res = newTempV128();
assign(res, binop(isADD ? opADD[size] : opSUB[size],
mkexpr(argL), mkexpr(argR)));
putQReg128(dd, mkexpr(res));
@@ -7414,7 +7624,7 @@
Bool isU = bitU == 1;
Bool isADD = opcode == BITS4(0,0,0,1);
IRTemp argR = math_WIDEN_LO_OR_HI_LANES(isU, is2, size, getQReg128(mm));
- IRTemp res = newTemp(Ity_V128);
+ IRTemp res = newTempV128();
assign(res, binop(isADD ? mkVecADD(size+1) : mkVecSUB(size+1),
getQReg128(nn), mkexpr(argR)));
putQReg128(dd, mkexpr(res));
@@ -7440,7 +7650,7 @@
Bool isADD = opcode == BITS4(0,1,0,0);
Bool isR = bitU == 1;
/* Combined elements in wide lanes */
- IRTemp wide = newTemp(Ity_V128);
+ IRTemp wide = newTempV128();
IRExpr* wideE = binop(isADD ? mkVecADD(size+1) : mkVecSUB(size+1),
getQReg128(nn), getQReg128(mm));
if (isR) {
@@ -7451,10 +7661,10 @@
}
assign(wide, wideE);
/* Top halves of elements, still in wide lanes */
- IRTemp shrd = newTemp(Ity_V128);
+ IRTemp shrd = newTempV128();
assign(shrd, binop(mkVecSHRN(size+1), mkexpr(wide), mkU8(shift[size])));
/* Elements now compacted into lower 64 bits */
- IRTemp new64 = newTemp(Ity_V128);
+ IRTemp new64 = newTempV128();
assign(new64, binop(mkVecCATEVENLANES(size), mkexpr(shrd), mkexpr(shrd)));
putLO64andZUorPutHI64(is2, dd, new64);
const HChar* arrNarrow = nameArr_Q_SZ(bitQ, size);
@@ -7473,7 +7683,6 @@
/* -------- 0,0111 SABDL{2} -------- */
/* -------- 1,0111 UABDL{2} -------- */
/* Widens, and size refers to the narrowed lanes. */
- const IROp opADD[3] = { Iop_Add16x8, Iop_Add32x4, Iop_Add64x2 };
if (size == X11) return False;
vassert(size <= 2);
Bool isU = bitU == 1;
@@ -7481,8 +7690,8 @@
IRTemp argL = math_WIDEN_LO_OR_HI_LANES(isU, is2, size, getQReg128(nn));
IRTemp argR = math_WIDEN_LO_OR_HI_LANES(isU, is2, size, getQReg128(mm));
IRTemp abd = math_ABD(isU, size+1, mkexpr(argL), mkexpr(argR));
- IRTemp res = newTemp(Ity_V128);
- assign(res, isACC ? binop(opADD[size], mkexpr(abd), getQReg128(dd))
+ IRTemp res = newTempV128();
+ assign(res, isACC ? binop(mkVecADD(size+1), mkexpr(abd), getQReg128(dd))
: mkexpr(abd));
putQReg128(dd, mkexpr(res));
const HChar* arrNarrow = nameArr_Q_SZ(bitQ, size);
@@ -7520,7 +7729,7 @@
: (ks == 2 ? mkVecSUB(size+1) : Iop_INVALID);
IRTemp mul = math_BINARY_WIDENING_V128(is2, mulOp,
getQReg128(nn), getQReg128(mm));
- IRTemp res = newTemp(Ity_V128);
+ IRTemp res = newTempV128();
assign(res, ks == 0 ? mkexpr(mul)
: binop(accOp, getQReg128(dd), mkexpr(mul)));
putQReg128(dd, mkexpr(res));
@@ -7586,14 +7795,14 @@
Bool isADD = opcode == BITS5(0,0,0,0,0);
Bool isU = bitU == 1;
/* Widen both args out, do the math, narrow to final result. */
- IRTemp argL = newTemp(Ity_V128);
+ IRTemp argL = newTempV128();
IRTemp argLhi = IRTemp_INVALID;
IRTemp argLlo = IRTemp_INVALID;
- IRTemp argR = newTemp(Ity_V128);
+ IRTemp argR = newTempV128();
IRTemp argRhi = IRTemp_INVALID;
IRTemp argRlo = IRTemp_INVALID;
- IRTemp resHi = newTemp(Ity_V128);
- IRTemp resLo = newTemp(Ity_V128);
+ IRTemp resHi = newTempV128();
+ IRTemp resLo = newTempV128();
IRTemp res = IRTemp_INVALID;
assign(argL, getQReg128(nn));
argLlo = math_WIDEN_LO_OR_HI_LANES(isU, False, size, mkexpr(argL));
@@ -7636,10 +7845,10 @@
qop = isU ? mkVecQSUBU(size) : mkVecQSUBS(size);
nop = mkVecSUB(size);
}
- IRTemp argL = newTemp(Ity_V128);
- IRTemp argR = newTemp(Ity_V128);
- IRTemp qres = newTemp(Ity_V128);
- IRTemp nres = newTemp(Ity_V128);
+ IRTemp argL = newTempV128();
+ IRTemp argR = newTempV128();
+ IRTemp qres = newTempV128();
+ IRTemp nres = newTempV128();
assign(argL, getQReg128(nn));
assign(argR, getQReg128(mm));
assign(qres, math_MAYBE_ZERO_HI64_fromE(
@@ -7647,7 +7856,7 @@
assign(nres, math_MAYBE_ZERO_HI64_fromE(
bitQ, binop(nop, mkexpr(argL), mkexpr(argR))));
putQReg128(dd, mkexpr(qres));
- updateQCFLAGwithDifference(nres, qres);
+ updateQCFLAGwithDifference(qres, nres);
const HChar* nm = isADD ? (isU ? "uqadd" : "sqadd")
: (isU ? "uqsub" : "sqsub");
const HChar* arr = nameArr_Q_SZ(bitQ, size);
@@ -7663,7 +7872,7 @@
/* -------- 0,10,00011 ORN 16b_16b_16b, 8b_8b_8b -------- */
Bool isORx = (size & 2) == 2;
Bool invert = (size & 1) == 1;
- IRTemp res = newTemp(Ity_V128);
+ IRTemp res = newTempV128();
assign(res, binop(isORx ? Iop_OrV128 : Iop_AndV128,
getQReg128(nn),
invert ? unop(Iop_NotV128, getQReg128(mm))
@@ -7681,16 +7890,16 @@
/* -------- 1,01,00011 BSL 16b_16b_16b, 8b_8b_8b -------- */
/* -------- 1,10,00011 BIT 16b_16b_16b, 8b_8b_8b -------- */
/* -------- 1,10,00011 BIF 16b_16b_16b, 8b_8b_8b -------- */
- IRTemp argD = newTemp(Ity_V128);
- IRTemp argN = newTemp(Ity_V128);
- IRTemp argM = newTemp(Ity_V128);
+ IRTemp argD = newTempV128();
+ IRTemp argN = newTempV128();
+ IRTemp argM = newTempV128();
assign(argD, getQReg128(dd));
assign(argN, getQReg128(nn));
assign(argM, getQReg128(mm));
const IROp opXOR = Iop_XorV128;
const IROp opAND = Iop_AndV128;
const IROp opNOT = Iop_NotV128;
- IRTemp res = newTemp(Ity_V128);
+ IRTemp res = newTempV128();
switch (size) {
case BITS2(0,0): /* EOR */
assign(res, binop(opXOR, mkexpr(argM), mkexpr(argN)));
@@ -7728,17 +7937,13 @@
/* -------- 0,xx,00110 CMGT std7_std7_std7 -------- */ // >s
/* -------- 1,xx,00110 CMHI std7_std7_std7 -------- */ // >u
if (bitQ == 0 && size == X11) return False; // implied 1d case
- Bool isGT = bitU == 0;
- const IROp opsGTS[4]
- = { Iop_CmpGT8Sx16, Iop_CmpGT16Sx8, Iop_CmpGT32Sx4, Iop_CmpGT64Sx2 };
- const IROp opsGTU[4]
- = { Iop_CmpGT8Ux16, Iop_CmpGT16Ux8, Iop_CmpGT32Ux4, Iop_CmpGT64Ux2 };
+ Bool isGT = bitU == 0;
IRExpr* argL = getQReg128(nn);
IRExpr* argR = getQReg128(mm);
- IRTemp res = newTemp(Ity_V128);
+ IRTemp res = newTempV128();
assign(res,
- isGT ? binop(opsGTS[size], argL, argR)
- : binop(opsGTU[size], argL, argR));
+ isGT ? binop(mkVecCMPGTS(size), argL, argR)
+ : binop(mkVecCMPGTU(size), argL, argR));
putQReg128(dd, math_MAYBE_ZERO_HI64(bitQ, res));
const HChar* nm = isGT ? "cmgt" : "cmhi";
const HChar* arr = nameArr_Q_SZ(bitQ, size);
@@ -7751,17 +7956,13 @@
/* -------- 0,xx,00111 CMGE std7_std7_std7 -------- */ // >=s
/* -------- 1,xx,00111 CMHS std7_std7_std7 -------- */ // >=u
if (bitQ == 0 && size == X11) return False; // implied 1d case
- Bool isGE = bitU == 0;
- const IROp opsGTS[4]
- = { Iop_CmpGT8Sx16, Iop_CmpGT16Sx8, Iop_CmpGT32Sx4, Iop_CmpGT64Sx2 };
- const IROp opsGTU[4]
- = { Iop_CmpGT8Ux16, Iop_CmpGT16Ux8, Iop_CmpGT32Ux4, Iop_CmpGT64Ux2 };
+ Bool isGE = bitU == 0;
IRExpr* argL = getQReg128(nn);
IRExpr* argR = getQReg128(mm);
- IRTemp res = newTemp(Ity_V128);
+ IRTemp res = newTempV128();
assign(res,
- isGE ? unop(Iop_NotV128, binop(opsGTS[size], argR, argL))
- : unop(Iop_NotV128, binop(opsGTU[size], argR, argL)));
+ isGE ? unop(Iop_NotV128, binop(mkVecCMPGTS(size), argR, argL))
+ : unop(Iop_NotV128, binop(mkVecCMPGTU(size), argR, argL)));
putQReg128(dd, math_MAYBE_ZERO_HI64(bitQ, res));
const HChar* nm = isGE ? "cmge" : "cmhs";
const HChar* arr = nameArr_Q_SZ(bitQ, size);
@@ -7778,17 +7979,9 @@
if (bitQ == 0 && size == X11) return False; // implied 1d case
Bool isU = bitU == 1;
Bool isMAX = (opcode & 1) == 0;
- const IROp opMINS[4]
- = { Iop_Min8Sx16, Iop_Min16Sx8, Iop_Min32Sx4, Iop_Min64Sx2 };
- const IROp opMINU[4]
- = { Iop_Min8Ux16, Iop_Min16Ux8, Iop_Min32Ux4, Iop_Min64Ux2 };
- const IROp opMAXS[4]
- = { Iop_Max8Sx16, Iop_Max16Sx8, Iop_Max32Sx4, Iop_Max64Sx2 };
- const IROp opMAXU[4]
- = { Iop_Max8Ux16, Iop_Max16Ux8, Iop_Max32Ux4, Iop_Max64Ux2 };
- IROp op = isMAX ? (isU ? opMAXU[size] : opMAXS[size])
- : (isU ? opMINU[size] : opMINS[size]);
- IRTemp t = newTemp(Ity_V128);
+ IROp op = isMAX ? (isU ? mkVecMAXU(size) : mkVecMAXS(size))
+ : (isU ? mkVecMINU(size) : mkVecMINS(size));
+ IRTemp t = newTempV128();
assign(t, binop(op, getQReg128(nn), getQReg128(mm)));
putQReg128(dd, math_MAYBE_ZERO_HI64(bitQ, t));
const HChar* nm = isMAX ? (isU ? "umax" : "smax")
@@ -7807,11 +8000,10 @@
if (size == X11) return False; // 1d/2d cases not allowed
Bool isU = bitU == 1;
Bool isACC = opcode == BITS5(0,1,1,1,1);
- const IROp opsADD[3] = { Iop_Add8x16, Iop_Add16x8, Iop_Add32x4 };
vassert(size <= 2);
IRTemp t1 = math_ABD(isU, size, getQReg128(nn), getQReg128(mm));
- IRTemp t2 = newTemp(Ity_V128);
- assign(t2, isACC ? binop(opsADD[size], mkexpr(t1), getQReg128(dd))
+ IRTemp t2 = newTempV128();
+ assign(t2, isACC ? binop(mkVecADD(size), mkexpr(t1), getQReg128(dd))
: mkexpr(t1));
putQReg128(dd, math_MAYBE_ZERO_HI64(bitQ, t2));
const HChar* nm = isACC ? (isU ? "uaba" : "saba")
@@ -7826,13 +8018,9 @@
/* -------- 0,xx,10000 ADD std7_std7_std7 -------- */
/* -------- 1,xx,10000 SUB std7_std7_std7 -------- */
if (bitQ == 0 && size == X11) return False; // implied 1d case
- Bool isSUB = bitU == 1;
- const IROp opsADD[4]
- = { Iop_Add8x16, Iop_Add16x8, Iop_Add32x4, Iop_Add64x2 };
- const IROp opsSUB[4]
- = { Iop_Sub8x16, Iop_Sub16x8, Iop_Sub32x4, Iop_Sub64x2 };
- IROp op = isSUB ? opsSUB[size] : opsADD[size];
- IRTemp t = newTemp(Ity_V128);
+ Bool isSUB = bitU == 1;
+ IROp op = isSUB ? mkVecSUB(size) : mkVecADD(size);
+ IRTemp t = newTempV128();
assign(t, binop(op, getQReg128(nn), getQReg128(mm)));
putQReg128(dd, math_MAYBE_ZERO_HI64(bitQ, t));
const HChar* nm = isSUB ? "sub" : "add";
@@ -7846,15 +8034,13 @@
/* -------- 0,xx,10001 CMTST std7_std7_std7 -------- */ // &, != 0
/* -------- 1,xx,10001 CMEQ std7_std7_std7 -------- */ // ==
if (bitQ == 0 && size == X11) return False; // implied 1d case
- Bool isEQ = bitU == 1;
- const IROp opsEQ[4]
- = { Iop_CmpEQ8x16, Iop_CmpEQ16x8, Iop_CmpEQ32x4, Iop_CmpEQ64x2 };
+ Bool isEQ = bitU == 1;
IRExpr* argL = getQReg128(nn);
IRExpr* argR = getQReg128(mm);
- IRTemp res = newTemp(Ity_V128);
+ IRTemp res = newTempV128();
assign(res,
- isEQ ? binop(opsEQ[size], argL, argR)
- : unop(Iop_NotV128, binop(opsEQ[size],
+ isEQ ? binop(mkVecCMPEQ(size), argL, argR)
+ : unop(Iop_NotV128, binop(mkVecCMPEQ(size),
binop(Iop_AndV128, argL, argR),
mkV128(0x0000))));
putQReg128(dd, math_MAYBE_ZERO_HI64(bitQ, res));
@@ -7870,15 +8056,9 @@
/* -------- 1,xx,10010 MLS std7_std7_std7 -------- */
if (bitQ == 0 && size == X11) return False; // implied 1d case
Bool isMLS = bitU == 1;
- const IROp opsADD[4]
- = { Iop_Add8x16, Iop_Add16x8, Iop_Add32x4, Iop_INVALID };
- const IROp opsSUB[4]
- = { Iop_Sub8x16, Iop_Sub16x8, Iop_Sub32x4, Iop_INVALID };
- const IROp opsMUL[4]
- = { Iop_Mul8x16, Iop_Mul16x8, Iop_Mul32x4, Iop_INVALID };
- IROp opMUL = opsMUL[size];
- IROp opADDSUB = isMLS ? opsSUB[size] : opsADD[size];
- IRTemp res = newTemp(Ity_V128);
+ IROp opMUL = mkVecMUL(size);
+ IROp opADDSUB = isMLS ? mkVecSUB(size) : mkVecADD(size);
+ IRTemp res = newTempV128();
if (opMUL != Iop_INVALID && opADDSUB != Iop_INVALID) {
assign(res, binop(opADDSUB,
getQReg128(dd),
@@ -7897,12 +8077,10 @@
/* -------- 1,xx,10011 PMUL 16b_16b_16b, 8b_8b_8b -------- */
if (bitQ == 0 && size == X11) return False; // implied 1d case
Bool isPMUL = bitU == 1;
- const IROp opsMUL[4]
- = { Iop_Mul8x16, Iop_Mul16x8, Iop_Mul32x4, Iop_INVALID };
const IROp opsPMUL[4]
= { Iop_PolynomialMul8x16, Iop_INVALID, Iop_INVALID, Iop_INVALID };
- IROp opMUL = isPMUL ? opsPMUL[size] : opsMUL[size];
- IRTemp res = newTemp(Ity_V128);
+ IROp opMUL = isPMUL ? opsPMUL[size] : mkVecMUL(size);
+ IRTemp res = newTempV128();
if (opMUL != Iop_INVALID) {
assign(res, binop(opMUL, getQReg128(nn), getQReg128(mm)));
putQReg128(dd, math_MAYBE_ZERO_HI64(bitQ, res));
@@ -7922,13 +8100,13 @@
if (size == X11) return False;
Bool isU = bitU == 1;
Bool isMAX = opcode == BITS5(1,0,1,0,0);
- IRTemp vN = newTemp(Ity_V128);
- IRTemp vM = newTemp(Ity_V128);
+ IRTemp vN = newTempV128();
+ IRTemp vM = newTempV128();
IROp op = isMAX ? (isU ? mkVecMAXU(size) : mkVecMAXS(size))
: (isU ? mkVecMINU(size) : mkVecMINS(size));
assign(vN, getQReg128(nn));
assign(vM, getQReg128(mm));
- IRTemp res128 = newTemp(Ity_V128);
+ IRTemp res128 = newTempV128();
assign(res128,
binop(op,
binop(mkVecCATEVENLANES(size), mkexpr(vM), mkexpr(vN)),
@@ -7952,11 +8130,11 @@
if (bitU == 0 && opcode == BITS5(1,0,1,1,1)) {
/* -------- 0,xx,10111 ADDP std7_std7_std7 -------- */
if (bitQ == 0 && size == X11) return False; // implied 1d case
- IRTemp vN = newTemp(Ity_V128);
- IRTemp vM = newTemp(Ity_V128);
+ IRTemp vN = newTempV128();
+ IRTemp vM = newTempV128();
assign(vN, getQReg128(nn));
assign(vM, getQReg128(mm));
- IRTemp res128 = newTemp(Ity_V128);
+ IRTemp res128 = newTempV128();
assign(res128,
binop(mkVecADD(size),
binop(mkVecCATEVENLANES(size), mkexpr(vM), mkexpr(vN)),
@@ -7985,8 +8163,8 @@
IROp opSUB = isD ? Iop_Sub64Fx2 : Iop_Sub32Fx4;
IROp opMUL = isD ? Iop_Mul64Fx2 : Iop_Mul32Fx4;
IRTemp rm = mk_get_IR_rounding_mode();
- IRTemp t1 = newTemp(Ity_V128);
- IRTemp t2 = newTemp(Ity_V128);
+ IRTemp t1 = newTempV128();
+ IRTemp t2 = newTempV128();
// FIXME: double rounding; use FMA primops instead
assign(t1, triop(opMUL,
mkexpr(rm), getQReg128(nn), getQReg128(mm)));
@@ -8009,8 +8187,8 @@
= { Iop_Add32Fx4, Iop_Add64Fx2, Iop_Sub32Fx4, Iop_Sub64Fx2 };
IROp op = ops[size];
IRTemp rm = mk_get_IR_rounding_mode();
- IRTemp t1 = newTemp(Ity_V128);
- IRTemp t2 = newTemp(Ity_V128);
+ IRTemp t1 = newTempV128();
+ IRTemp t2 = newTempV128();
assign(t1, triop(op, mkexpr(rm), getQReg128(nn), getQReg128(mm)));
assign(t2, math_MAYBE_ZERO_HI64(bitQ, t1));
putQReg128(dd, mkexpr(t2));
@@ -8027,8 +8205,8 @@
IROp opSUB = isD ? Iop_Sub64Fx2 : Iop_Sub32Fx4;
IROp opABS = isD ? Iop_Abs64Fx2 : Iop_Abs32Fx4;
IRTemp rm = mk_get_IR_rounding_mode();
- IRTemp t1 = newTemp(Ity_V128);
- IRTemp t2 = newTemp(Ity_V128);
+ IRTemp t1 = newTempV128();
+ IRTemp t2 = newTempV128();
// FIXME: use Abd primop instead?
assign(t1, triop(opSUB, mkexpr(rm), getQReg128(nn), getQReg128(mm)));
assign(t2, unop(opABS, mkexpr(t1)));
@@ -8044,7 +8222,7 @@
Bool isD = (size & 1) == 1;
if (bitQ == 0 && isD) return False; // implied 1d case
IRTemp rm = mk_get_IR_rounding_mode();
- IRTemp t1 = newTemp(Ity_V128);
+ IRTemp t1 = newTempV128();
assign(t1, triop(isD ? Iop_Mul64Fx2 : Iop_Mul32Fx4,
mkexpr(rm), getQReg128(nn), getQReg128(mm)));
putQReg128(dd, math_MAYBE_ZERO_HI64(bitQ, t1));
@@ -8062,7 +8240,7 @@
Bool isGE = bitU == 1;
IROp opCMP = isGE ? (isD ? Iop_CmpLE64Fx2 : Iop_CmpLE32Fx4)
: (isD ? Iop_CmpEQ64Fx2 : Iop_CmpEQ32Fx4);
- IRTemp t1 = newTemp(Ity_V128);
+ IRTemp t1 = newTempV128();
assign(t1, isGE ? binop(opCMP, getQReg128(mm), getQReg128(nn)) // swapd
: binop(opCMP, getQReg128(nn), getQReg128(mm)));
putQReg128(dd, math_MAYBE_Z...
[truncated message content] |
|
From: Mark W. <mj...@re...> - 2014-07-11 10:00:12
|
On Thu, 2014-07-10 at 16:27 +0000, Anmol Paralkar wrote: > I am trying to build (Valgrind Revision: 14147, VEX Revision: 2897) > on the ARM V8 Foundation Model (FM000-KT-00035-r0p8-52rel06.tgz > from https://silver.arm.com/browse/FM00A), other details of the > build environment being: > > -------------------------------------------------------------------------------- > root@genericarmv8:/home/b07584/valgrind# uname -a > Linux genericarmv8 3.15.0-1-linaro-vexpress64 #1ubuntu1~ci+140621065049 SMP PREEMPT Sat Jun 21 06:51:35 UTC 20 aarch64 GNU/Linux > -------------------------------------------------------------------------------- > > -------------------------------------------------------------------------------- > root@genericarmv8:/home/b07584/valgrind# gcc --version > gcc (Linaro GCC 4.8-2014.04) 4.8.3 20140401 (prerelease) > -------------------------------------------------------------------------------- > > I have the following build error: > > -------------------------------------------------------------------------------- > make[3]: Warning: File 'm_ume/.deps/libcoregrind_arm64_linux_a-script.Po' has modification time 2423282 s in the future > aarch64-oe-linux-gcc -DHAVE_CONFIG_H -I. -I.. -I.. -I../include -I../VEX/pub -I../VEX/pub -DVGA_arm64=1 -DVGO_linux=1 -DVGP_arm64_linux=1 -DVGPV_arm64_linux_vanilla=1 -I../coregrind -DVG_LIBDIR="\"/home/b07584/valgrind/lib/valgrind"\" -DVG_PLATFORM="\"arm64-linux\"" -O2 -g -Wall -Wmissing-prototypes -Wshadow -Wpointer-arith -Wstrict-prototypes -Wmissing-declarations -Wno-format-zero-length -Wno-tautological-compare -fno-strict-aliasing -fno-builtin -Wno-long-long -Wwrite-strings -fno-stack-protector -MT vgdb-vgdb-invoker-ptrace.o -MD -MP -MF .deps/vgdb-vgdb-invoker-ptrace.Tpo -c -o vgdb-vgdb-invoker-ptrace.o `test -f 'vgdb-invoker-ptrace.c' || echo './'`vgdb-invoker-ptrace.c > vgdb-invoker-ptrace.c: In function 'restore_and_detach': > vgdb-invoker-ptrace.c:748:7: error: invalid use of undefined type 'struct user_pt_regs' Which glibc is this using? I got a similar report for elfutils: https://lists.fedorahosted.org/pipermail/elfutils-devel/2014-June/004042.html It looks like on aarch64 depending on the glibc version used you have to use either user_pt_regs or user_regs_struct. The later is what new versions will define and might be good to adopt. But it does mean that the code won't compile anymore on older aarch64 glibc versions. Cheers, Mark |
|
From: Christian B. <bor...@de...> - 2014-07-11 04:12:17
|
valgrind revision: 14151 VEX revision: 2898 C compiler: gcc (SUSE Linux) 4.3.4 [gcc-4_3-branch revision 152973] GDB: GNU gdb (GDB) SUSE (7.5.1-0.7.29) Assembler: GNU assembler (GNU Binutils; SUSE Linux Enterprise 11) 2.23.1 C library: GNU C Library stable release version 2.11.3 (20110527) uname -mrs: Linux 3.0.101-0.31-default s390x Vendor version: Welcome to SUSE Linux Enterprise Server 11 SP3 (s390x) - Kernel %r (%t). Nightly build on sless390 ( SUSE Linux Enterprise Server 11 SP3 gcc 4.3.4 on z196 (s390x) ) Started at 2014-07-11 03:45:01 CEST Ended at 2014-07-11 06:12:04 CEST 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 == 655 tests, 3 stderr failures, 0 stdout failures, 0 stderrB failures, 0 stdoutB failures, 0 post failures == memcheck/tests/vbit-test/vbit-test (stderr) helgrind/tests/pth_cond_destroy_busy (stderr) helgrind/tests/tc20_verifywrap (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.23s no: 4.7s (20.4x, -----) me: 5.8s (25.1x, -----) ca:26.4s (114.6x, -----) he: 5.8s (25.3x, -----) ca: 9.1s (39.6x, -----) dr: 4.8s (20.9x, -----) ma: 4.9s (21.3x, -----) bigcode1 valgrind-old:0.23s no: 4.7s (20.4x, 0.0%) me: 5.8s (25.1x, 0.0%) ca:26.3s (114.5x, 0.1%) he: 5.8s (25.1x, 0.5%) ca: 9.1s (39.6x, 0.0%) dr: 4.8s (20.8x, 0.4%) ma: 4.9s (21.2x, 0.4%) -- bigcode2 -- bigcode2 valgrind-new:0.24s no: 7.6s (31.8x, -----) me:12.6s (52.5x, -----) ca:39.5s (164.7x, -----) he:10.8s (45.0x, -----) ca:14.2s (59.3x, -----) dr: 8.9s (37.2x, -----) ma: 8.4s (34.8x, -----) bigcode2 valgrind-old:0.24s no: 7.7s (32.1x, -0.9%) me:12.6s (52.4x, 0.1%) ca:39.5s (164.4x, 0.2%) he:10.8s (44.8x, 0.6%) ca:14.2s (59.3x, 0.0%) dr: 8.9s (37.0x, 0.6%) ma: 8.3s (34.6x, 0.7%) -- bz2 -- bz2 valgrind-new:0.70s no: 6.0s ( 8.5x, -----) me:13.1s (18.6x, -----) ca:30.6s (43.8x, -----) he:19.6s (27.9x, -----) ca:34.4s (49.1x, -----) dr:29.5s (42.1x, -----) ma: 5.2s ( 7.4x, -----) bz2 valgrind-old:0.70s no: 5.9s ( 8.4x, 1.2%) me:13.1s (18.7x, -0.5%) ca:30.6s (43.8x, 0.0%) he:19.6s (27.9x, -0.1%) ca:34.5s (49.3x, -0.2%) dr:29.4s (42.1x, 0.1%) ma: 5.2s ( 7.4x, 0.0%) -- fbench -- fbench valgrind-new:0.41s no: 1.6s ( 4.0x, -----) me: 4.2s (10.2x, -----) ca: 9.3s (22.6x, -----) he: 6.2s (15.2x, -----) ca: 7.2s (17.4x, -----) dr: 5.5s (13.5x, -----) ma: 1.7s ( 4.1x, -----) fbench valgrind-old:0.41s no: 1.6s ( 3.9x, 3.0%) me: 4.2s (10.2x, 0.0%) ca: 9.2s (22.5x, 0.5%) he: 6.3s (15.3x, -0.6%) ca: 7.2s (17.5x, -0.4%) dr: 5.5s (13.5x, -0.2%) ma: 1.7s ( 4.1x, 0.6%) -- ffbench -- ffbench valgrind-new:0.21s no: 1.1s ( 5.2x, -----) me: 3.0s (14.1x, -----) ca: 3.0s (14.3x, -----) he:43.3s (206.4x, -----) ca: 9.6s (45.7x, -----) dr: 6.9s (32.9x, -----) ma: 1.0s ( 4.6x, -----) ffbench valgrind-old:0.21s no: 1.1s ( 5.2x, -0.9%) me: 3.0s (14.3x, -1.3%) ca: 3.0s (14.3x, 0.0%) he:43.3s (206.2x, 0.1%) ca: 9.6s (45.7x, 0.0%) dr: 6.9s (32.8x, 0.1%) ma: 1.0s ( 4.6x, 0.0%) -- heap -- heap valgrind-new:0.23s no: 2.1s ( 9.3x, -----) me: 8.6s (37.2x, -----) ca:13.1s (57.0x, -----) he:12.5s (54.5x, -----) ca:11.4s (49.4x, -----) dr: 7.7s (33.4x, -----) ma: 7.9s (34.5x, -----) heap valgrind-old:0.23s no: 2.1s ( 9.3x, -0.5%) me: 8.6s (37.3x, -0.4%) ca:13.1s (57.0x, 0.0%) he:12.5s (54.3x, 0.3%) ca:11.4s (49.5x, -0.2%) dr: 7.8s (33.7x, -0.9%) ma: 7.9s (34.2x, 0.9%) -- heap_pdb4 -- heap_pdb4 valgrind-new:0.22s no: 2.4s (10.8x, -----) me:12.7s (57.9x, -----) ca:14.1s (64.2x, -----) he:14.0s (63.7x, -----) ca:12.5s (56.7x, -----) dr: 8.6s (39.2x, -----) ma: 8.1s (36.6x, -----) heap_pdb4 valgrind-old:0.22s no: 2.4s (10.8x, 0.0%) me:12.7s (57.5x, 0.7%) ca:14.2s (64.4x, -0.4%) he:14.0s (63.7x, 0.1%) ca:12.5s (56.6x, 0.1%) dr: 8.6s (39.0x, 0.5%) ma: 8.1s (36.7x, -0.4%) -- many-loss-records -- many-loss-records valgrind-new:0.02s no: 0.5s (25.5x, -----) me: 2.0s (102.5x, -----) ca: 1.9s (96.5x, -----) he: 2.1s (107.5x, -----) ca: 1.9s (95.5x, -----) dr: 1.7s (87.0x, -----) ma: 1.6s (82.0x, -----) many-loss-records valgrind-old:0.02s no: 0.5s (25.5x, 0.0%) me: 2.1s (103.0x, -0.5%) ca: 1.9s (96.5x, 0.0%) he: 2.1s (107.5x, 0.0%) ca: 1.9s (95.5x, 0.0%) dr: 1.7s (87.0x, 0.0%) ma: 1.6s (82.0x, 0.0%) -- many-xpts -- many-xpts valgrind-new:0.07s no: 0.7s ( 9.4x, -----) me: 3.1s (44.4x, -----) ca:367.1s (5244.1x, -----) he: 6.6s (94.1x, -----) ca: 2.8s (39.9x, -----) dr: 2.5s (36.0x, -----) ma: 2.6s (37.0x, -----) many-xpts valgrind-old:0.07s no: 0.7s ( 9.6x, -1.5%) me: 3.1s (44.6x, -0.3%) ca:370.4s (5291.4x, -0.9%) he: 6.6s (94.0x, 0.2%) ca: 2.8s (39.9x, 0.0%) dr: 2.5s (36.1x, -0.4%) ma: 2.6s (36.9x, 0.4%) -- sarp -- sarp valgrind-new:0.03s no: 0.6s (20.0x, -----) me: 3.7s (123.7x, -----) ca: 3.2s (106.3x, -----) he:17.2s (575.0x, -----) ca: 2.0s (68.0x, -----) dr: 1.3s (44.3x, -----) ma: 0.5s (15.7x, -----) sarp valgrind-old:0.03s no: 0.6s (20.0x, 0.0%) me: 3.7s (123.3x, 0.3%) ca: 3.1s (104.3x, 1.9%) he:17.7s (591.3x, -2.8%) ca: 2.0s (68.0x, 0.0%) dr: 1.3s (44.3x, 0.0%) ma: 0.5s (15.7x, 0.0%) -- tinycc -- tinycc valgrind-new:0.22s no: 3.1s (14.1x, -----) me:14.5s (65.7x, -----) ca:29.9s (136.0x, -----) he:28.0s (127.2x, -----) ca:21.3s (96.7x, -----) dr:20.6s (93.5x, -----) ma: 4.1s (18.6x, -----) tinycc valgrind-old:0.22s no: 3.1s (14.1x, 0.0%) me:14.4s (65.5x, 0.3%) ca:29.9s (135.9x, 0.1%) he:27.9s (127.0x, 0.1%) ca:21.3s (96.6x, 0.0%) dr:20.6s (93.6x, -0.2%) ma: 4.1s (18.6x, 0.0%) -- Finished tests in perf ---------------------------------------------- == 11 programs, 154 timings ================= real 110m24.325s user 109m46.771s sys 0m29.586s |
|
From: Rich C. <rc...@wi...> - 2014-07-11 03:00:57
|
valgrind revision: 14151
VEX revision: 2898
C compiler: gcc (SUSE Linux) 4.7.2 20130108 [gcc-4_7-branch revision 195012]
GDB: GNU gdb (GDB) SUSE (7.5.1-2.1.1)
Assembler: GNU assembler (GNU Binutils; openSUSE 12.3) 2.23.1
C library: GNU C Library (GNU libc) stable release version 2.17 (git c758a6861537)
uname -mrs: Linux 3.7.9-1.1-desktop x86_64
Vendor version: Welcome to openSUSE 12.3 "Dartmouth" Beta 1 - Kernel %r (%t).
Nightly build on ultra ( gcc (SUSE Linux) 4.7.2 20130108 [gcc-4_7-branch revision 195012] Linux 3.7.9-1.1-desktop x86_64 )
Started at 2014-07-10 21:30:01 CDT
Ended at 2014-07-10 22:00:47 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
== 683 tests, 1 stderr failure, 0 stdout failures, 2 stderrB failures, 0 stdoutB failures, 0 post failures ==
gdbserver_tests/hginfo (stderrB)
gdbserver_tests/mssnapshot (stderrB)
memcheck/tests/vbit-test/vbit-test (stderr)
=================================================
./valgrind-new/gdbserver_tests/hginfo.stderrB.diff
=================================================
--- hginfo.stderrB.exp 2014-07-10 21:45:21.506368254 -0500
+++ hginfo.stderrB.out 2014-07-10 21:49:31.255571276 -0500
@@ -1,5 +1,11 @@
relaying data between gdb and process ....
+Missing separate debuginfo for /lib64/ld-linux-x86-64.so.2
+Try: zypper install -C "debuginfo(build-id)=ecb8ef1a6904a2a3ec60a527f415f520c8636158"
vgdb-error value changed from 0 to 999999
+Missing separate debuginfo for /lib64/libpthread.so.0
+Try: zypper install -C "debuginfo(build-id)=ef5f5dbcb2398c608fef7884e1bfb65be3b5f0ef"
+Missing separate debuginfo for /lib64/libc.so.6
+Try: zypper install -C "debuginfo(build-id)=bd1473e8e6a4c10a14731b5be4b35b4e87db2af7"
Lock ga 0x........ {
Address 0x........ is 0 bytes inside data symbol "mx"
kind mbRec
=================================================
./valgrind-new/gdbserver_tests/mssnapshot.stderrB.diff
=================================================
--- mssnapshot.stderrB.exp 2014-07-10 21:45:21.491368662 -0500
+++ mssnapshot.stderrB.out 2014-07-10 21:50:03.614690443 -0500
@@ -1,5 +1,11 @@
relaying data between gdb and process ....
+Missing separate debuginfo for /lib64/ld-linux-x86-64.so.2
+Try: zypper install -C "debuginfo(build-id)=ecb8ef1a6904a2a3ec60a527f415f520c8636158"
vgdb-error value changed from 0 to 999999
+Missing separate debuginfo for /lib64/libpthread.so.0
+Try: zypper install -C "debuginfo(build-id)=ef5f5dbcb2398c608fef7884e1bfb65be3b5f0ef"
+Missing separate debuginfo for /lib64/libc.so.6
+Try: zypper install -C "debuginfo(build-id)=bd1473e8e6a4c10a14731b5be4b35b4e87db2af7"
general valgrind monitor commands:
help [debug] : monitor command help. With debug: + debugging commands
v.wait [<ms>] : sleep <ms> (default 0) then continue
=================================================
./valgrind-new/memcheck/tests/vbit-test/vbit-test.stderr.diff
=================================================
--- vbit-test.stderr.exp 2014-07-10 21:45:24.489287087 -0500
+++ vbit-test.stderr.out 2014-07-10 21:53:01.499847632 -0500
@@ -0,0 +1 @@
+unknown opcode 5981
=================================================
./valgrind-old/gdbserver_tests/hginfo.stderrB.diff
=================================================
--- hginfo.stderrB.exp 2014-07-10 21:30:24.616755866 -0500
+++ hginfo.stderrB.out 2014-07-10 21:33:54.310057266 -0500
@@ -1,5 +1,11 @@
relaying data between gdb and process ....
+Missing separate debuginfo for /lib64/ld-linux-x86-64.so.2
+Try: zypper install -C "debuginfo(build-id)=ecb8ef1a6904a2a3ec60a527f415f520c8636158"
vgdb-error value changed from 0 to 999999
+Missing separate debuginfo for /lib64/libpthread.so.0
+Try: zypper install -C "debuginfo(build-id)=ef5f5dbcb2398c608fef7884e1bfb65be3b5f0ef"
+Missing separate debuginfo for /lib64/libc.so.6
+Try: zypper install -C "debuginfo(build-id)=bd1473e8e6a4c10a14731b5be4b35b4e87db2af7"
Lock ga 0x........ {
Address 0x........ is 0 bytes inside data symbol "mx"
kind mbRec
=================================================
./valgrind-old/gdbserver_tests/mssnapshot.stderrB.diff
=================================================
--- mssnapshot.stderrB.exp 2014-07-10 21:30:24.600756301 -0500
+++ mssnapshot.stderrB.out 2014-07-10 21:34:26.516181852 -0500
@@ -1,5 +1,11 @@
relaying data between gdb and process ....
+Missing separate debuginfo for /lib64/ld-linux-x86-64.so.2
+Try: zypper install -C "debuginfo(build-id)=ecb8ef1a6904a2a3ec60a527f415f520c8636158"
vgdb-error value changed from 0 to 999999
+Missing separate debuginfo for /lib64/libpthread.so.0
+Try: zypper install -C "debuginfo(build-id)=ef5f5dbcb2398c608fef7884e1bfb65be3b5f0ef"
+Missing separate debuginfo for /lib64/libc.so.6
+Try: zypper install -C "debuginfo(build-id)=bd1473e8e6a4c10a14731b5be4b35b4e87db2af7"
general valgrind monitor commands:
help [debug] : monitor command help. With debug: + debugging commands
v.wait [<ms>] : sleep <ms> (default 0) then continue
=================================================
./valgrind-old/memcheck/tests/vbit-test/vbit-test.stderr.diff
=================================================
--- vbit-test.stderr.exp 2014-07-10 21:30:25.048744128 -0500
+++ vbit-test.stderr.out 2014-07-10 21:37:25.413318276 -0500
@@ -0,0 +1 @@
+unknown opcode 5981
|
|
From: Rich C. <rc...@wi...> - 2014-07-11 02:26:13
|
valgrind revision: 14151
VEX revision: 2898
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.4-3-desktop x86_64
Vendor version: Welcome to openSUSE 13.1 "Bottle" Beta 1 - Kernel %r (%t).
Nightly build on rodan ( Linux 3.11.4-3-desktop x86_64 )
Started at 2014-07-10 19:22:01 CDT
Ended at 2014-07-10 21:25:59 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
== 605 tests, 6 stderr failures, 0 stdout failures, 0 stderrB failures, 0 stdoutB failures, 0 post failures ==
memcheck/tests/err_disable3 (stderr)
memcheck/tests/err_disable4 (stderr)
memcheck/tests/threadname (stderr)
memcheck/tests/threadname_xml (stderr)
memcheck/tests/vbit-test/vbit-test (stderr)
exp-sgcheck/tests/hackedbz2 (stderr)
=================================================
./valgrind-new/exp-sgcheck/tests/hackedbz2.stderr.diff-glibc28-amd64
=================================================
--- hackedbz2.stderr.exp-glibc28-amd64 2014-07-10 20:23:26.942587032 -0500
+++ hackedbz2.stderr.out 2014-07-10 21:24:48.740703157 -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/err_disable3.stderr.diff
=================================================
--- err_disable3.stderr.exp 2014-07-10 20:26:35.589565157 -0500
+++ err_disable3.stderr.out 2014-07-10 20:46:06.479486436 -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 2014-07-10 20:26:28.959495595 -0500
+++ err_disable4.stderr.out 2014-07-10 20:46:10.516527238 -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/threadname.stderr.diff
=================================================
--- threadname.stderr.exp 2014-07-10 20:26:29.042496466 -0500
+++ threadname.stderr.out 2014-07-10 20:52:18.564294021 -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 2014-07-10 20:26:35.586565126 -0500
+++ threadname_xml.stderr.out 2014-07-10 20:52:20.622315373 -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/memcheck/tests/vbit-test/vbit-test.stderr.diff
=================================================
--- vbit-test.stderr.exp 2014-07-10 20:26:39.676608039 -0500
+++ vbit-test.stderr.out 2014-07-10 20:54:16.243515177 -0500
@@ -0,0 +1 @@
+unknown opcode 5981
=================================================
./valgrind-old/exp-sgcheck/tests/hackedbz2.stderr.diff-glibc28-amd64
=================================================
--- hackedbz2.stderr.exp-glibc28-amd64 2014-07-10 19:23:28.383010822 -0500
+++ hackedbz2.stderr.out 2014-07-10 20:21:33.109394550 -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/err_disable3.stderr.diff
=================================================
--- err_disable3.stderr.exp 2014-07-10 19:23:12.139838273 -0500
+++ err_disable3.stderr.out 2014-07-10 19:42:46.375261294 -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 2014-07-10 19:23:18.783908849 -0500
+++ err_disable4.stderr.out 2014-07-10 19:42:52.467323741 -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/threadname.stderr.diff
=================================================
--- threadname.stderr.exp 2014-07-10 19:23:05.077763262 -0500
+++ threadname.stderr.out 2014-07-10 19:48:59.514094489 -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 2014-07-10 19:23:12.136838241 -0500
+++ threadname_xml.stderr.out 2014-07-10 19:49:01.565115604 -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/memcheck/tests/vbit-test/vbit-test.stderr.diff
=================================================
--- vbit-test.stderr.exp 2014-07-10 19:23:15.452873465 -0500
+++ vbit-test.stderr.out 2014-07-10 19:50:57.379308677 -0500
@@ -0,0 +1 @@
+unknown opcode 5981
|