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
(4) |
2
(1) |
3
|
|
4
|
5
(6) |
6
|
7
(7) |
8
(2) |
9
(1) |
10
(2) |
|
11
(4) |
12
(1) |
13
(4) |
14
(5) |
15
(2) |
16
(5) |
17
(2) |
|
18
(3) |
19
(12) |
20
(10) |
21
(3) |
22
(7) |
23
(4) |
24
(5) |
|
25
(3) |
26
(2) |
27
(1) |
28
|
29
(1) |
30
(1) |
|
|
From: Carl E. L. <ce...@us...> - 2016-09-21 17:38:47
|
Mark:
> Could people check whether with this new testcase the test no-longer
> hangs and whether or not is passes? If it fails could you double check
> whether or not it fails always or just sometimes? And if you know why
> that would be very helpful to know!
Per your request, I ran the complete regression test 10 times each on
three Power processor platforms. Below is the results of the testing
for the tests you are interested in. Note, I used the source tree from
Sept 20, 2016.
P7 -blade # passes # fails # hangs
helgrind/tests/bar_bad 8 2 0
drd/tests/bar_bad 10 0 0
drd/tests/bar_bad_xml 10 0 0
P7 system
helgrind/tests/bar_bad 3 7 0
drd/tests/bar_bad 5 5 0
drd/tests/bar_bad_xml 2 8 0
P8 system
helgrind/tests/bar_bad 10 0 0
drd/tests/bar_bad 8 2 0
drd/tests/bar_bad_xml 8 2 0
Carl Love
|
|
From: <sv...@va...> - 2016-09-21 13:48:28
|
Author: sewardj
Date: Wed Sep 21 14:48:20 2016
New Revision: 15974
Log:
Update.
Modified:
trunk/NEWS
trunk/docs/internals/3_11_BUGSTATUS.txt
Modified: trunk/NEWS
==============================================================================
--- trunk/NEWS (original)
+++ trunk/NEWS Wed Sep 21 14:48:20 2016
@@ -103,7 +103,9 @@
356676 arm64-linux: unhandled syscalls 125, 126 (sched_get_priority_max/min)
356678 arm64-linux: unhandled syscall 232 (mincore)
356817 valgrind.h triggers compiler errors on MSVC when defining NVALGRIND
+356823 Unsupported ARM instruction: stlex
357338 Unhandled instruction for SHA instructions libcrypto Boring SSL
+357673 crash if I try to run valgrind with a binary link with libcurl
357833 Setting RLIMIT_DATA to zero breaks with linux 4.5+
357871 pthread_spin_destroy not properly wrapped
357887 Calls to VG_(fclose) do not close the file descriptor
@@ -118,7 +120,7 @@
359703 s390: wire up separate socketcalls system calls
359724 getsockname might crash - deref_UInt should call safe_to_deref
359733 amd64 implement ld.so strchr/index override like x86
-359767 Valgrind does not support the IBM POWER ISA 3.0 instructions
+359767 Valgrind does not support the IBM POWER ISA 3.0 instructions, part 1/5
359829 Power PC test suite none/tests/ppc64/test_isa_2_07.c uses
uninitialized data
359838 arm64: Unhandled instruction 0xD5033F5F (clrex)
@@ -135,31 +137,28 @@
360574 Wrong parameter type for an ashmem ioctl() call on Android and ARM64
360749 kludge for multiple .rodata sections on Solaris no longer needed
360752 raise the number of reserved fds in m_main.c from 10 to 12
-361207 Valgrind does not support the IBM POWER ISA 3.0 instructions, part 2
+361207 Valgrind does not support the IBM POWER ISA 3.0 instructions, part 2/5
361226 s390x: risbgn (EC59) not implemented
+361253 [s390x] ex_clone.c:42: undefined reference to `pthread_create'
361354 ppc64[le]: wire up separate socketcalls system calls
361926 Unhandled Solaris syscall: sysfs(84)
362009 Valgrind dumps core on unimplemented functionality before threads are created
-362329 Valgrind does not support the IBM POWER ISA 3.0 instructions, part 3
+362329 Valgrind does not support the IBM POWER ISA 3.0 instructions, part 3/5
362894 missing (broken) support for wbit field on mtfsfi instruction (ppc64)
362935 [AsusWRT] Assertion 'sizeof(TTEntryC) <= 88' failed
+362953 Request for an update to the Valgrind Developers page
363680 add renameat2() support
363705 arm64 missing syscall name_to_handle_at and open_by_handle_at
363714 ppc64 missing syscalls sync, waitid and name_to/open_by_handle_at
-363858 Add IBM ISA 3.0 support, patch set 4
+363858 Valgrind does not support the IBM POWER ISA 3.0 instructions, part 4/5
364058 clarify in manual limitations of array overruns detections
364413 pselect sycallwrapper mishandles NULL sigmask
364728 Power PC, missing support for several HW registers in
get_otrack_shadow_offset_wrk()
+364948 Valgrind does not support the IBM POWER ISA 3.0 instructions, part 5/5
365273 Invalid write to stack location reported after signal handler runs
365912 ppc64BE segfault during jm-insns test (RELRO)
366344 Multiple unhandled instruction for Aarch64
-359767 Valgrind does not support the IBM POWER ISA 3.0 instructions, part 1/5
-361207 Valgrind does not support the IBM POWER ISA 3.0 instructions, part 2/5
-362329 Valgrind does not support the IBM POWER ISA 3.0 instructions, part 3/5
-363858 Valgrind does not support the IBM POWER ISA 3.0 instructions, part 4/5
-364948 Valgrind does not support the IBM POWER ISA 3.0 instructions, part 5/5
-365912 ppc64BE segfault during jm-insns test (RELRO)
366138 Fix configure errors out when using Xcode 8 (clang 8.0.0)
366344 Multiple unhandled instruction for Aarch64
(0x0EE0E020, 0x1AC15800, 0x4E284801, 0x5E040023, 0x5E056060)
Modified: trunk/docs/internals/3_11_BUGSTATUS.txt
==============================================================================
--- trunk/docs/internals/3_11_BUGSTATUS.txt (original)
+++ trunk/docs/internals/3_11_BUGSTATUS.txt Wed Sep 21 14:48:20 2016
@@ -31,27 +31,31 @@
=== VEX/arm ============================================================
352630 valgrind: Unrecognised instruction at address 0x4fc4d33.
+ [what insn is this?]
+
354274 arm: unhandled instruction: 0xEBAD 0x0AC1 (sub.w sl, sp, r1, lsl #3)
+ [harmless, has patch]
+
355526 disInstr(arm): unhandled instruction: 0x1823E91
+ [what insn is this?]
+
n-i-bz Remove limit on strd's negative immediates
[dev@, Michael Daniels, 19 Nov 2015, easy fix, should land]
-356823 Unsupported ARM instruction: stlex
-357673 crash if I try to run valgrind with a binary link with libcurl
- [IR sanity check failure]
+
362934 [AsusWRT] Arm v7 illegal instruction
+ [unclear what this is; a SIGILL on generated code]
=== VEX/arm64 ==========================================================
=== VEX/x86 ============================================================
-355231 Unhandled Instruction Bytes (SSE4, vmovdqu, "0xC5 0xFA 0x6F 0x2")
357059 x86: SSE cvtpi2ps with memory source does transition to MMX state
[Also relevant for amd64. Not sure this is really a bug.]
-358856 unhandled instruction bytes: 0xC4 0xE2 0x7B 0xF7
=== VEX/mips ===========================================================
356112 mips: replace addi with addiu
+
366079 FPXX Support for MIPS32 Valgrind
=== VEX/ppc ============================================================
@@ -61,6 +65,7 @@
=== VEX/s390x ==========================================================
366413 s390x: New z13 instructions not implemented
+ [Per cborntraeger, is not important for 3.12.0]
=== VEX general ========================================================
@@ -105,8 +110,11 @@
=== Debuginfo reader ===================================================
353192 Debug info/data section not detected on AMD64
+ [To do with rwx, combined code+data sections]
+
355197 Too strong assert in variable debug info code
-359181 Buffer Overflow during Demangling
+ [Still relevant?]
+
365750 Valgrind fails on binary with .text section not in default place
[Horrible hack to do with relocating .text section]
@@ -158,6 +166,10 @@
351282 valgrind 3.10.1 MIPS softfloat build broken with GCC 4.9.3 /
binutils 2.25.1
+
+351692 Dumps created by valgrind are not readable by gdb
+ [mips32 specific?]
+
352197 mips: mmap2() not wrapped correctly for page size > 4096
=== other/ppc ==========================================================
@@ -177,8 +189,6 @@
=== other/s390 =========================================================
-361253 [s390x] ex_clone.c:42: undefined reference to `pthread_create'
-
=== other/tilegx =======================================================
=== other/Android ======================================================
@@ -223,11 +233,8 @@
=== Documentation ======================================================
-362953 Request for an update to the Valgrind Developers page
-
=== Uncategorised/run ==================================================
-351692 Dumps created by valgrind are not readable by gdb
356457 valgrind: m_mallocfree.c:2042 (vgPlain_arena_free):
Assertion 'blockSane(a, b)' failed.
[Possible V memory corruption?]
@@ -258,9 +265,30 @@
if compiled with intel compiler
========================================================================
+
+* mention that x86-linux is deprecated
+
========================================================================
========================================================================
========================================================================
========================================================================
Thu 15 Sep 12:55:21 CEST 2016
+
+========================================================================
+========================================================================
+
+3_12_BRANCH: vex 3250 is a copy of trunk 3249
+ val 15963 is a copy of trunk 15962
+
+
+TO MERGE (trunk -> 3_12_BRANCH)
+15966 (t) -> 15967 (b) a missing helgrind test file
+15968 (t) -> 15969 (b) Add none/tests/ppc64/ppc64_helpers.h to noinst_HEADERS.
+15970 (t) -> 15972 (b) fix for bugzilla 361253 [s390x]
+15971 (t) -> 15973 (b) Add feature check for tests that use -march=armv8-a+crc.
+
+3.12.0.BETA1 is 3_12_BRANCHes at 15973/3250.
+
+========================================================================
+========================================================================
|
|
From: Knapp, R. L <ras...@in...> - 2016-09-20 23:22:58
|
Hello Julian, Thank you for your input on this. I am looking into options to provide remote access to systems which supports AVX-512. The greatest challenge I see to this is that there must be an NDA relationship in place and all of the external users must be approved for remote access. Do you think it might be a reasonable avenue to pursue an NDA relationship with Valgrind? I do not know anything about Valgrind's business structure or who would be the point of contact for an NDA relationship. If this is something you think is reasonable, I will pursue this option. I cannot promise "administrative-hassle-free" because the system(s) are owned and administered by Intel and will have downtimes for maintenance. With this option, once the remote access agreements have been established, Knights Landing access is a possibility, and then Skylake later. Best regards, Rashawn Knapp Software Development Engineer, Intel Corporation -----Original Message----- From: Julian Seward [mailto:js...@ac...] Sent: Wednesday, September 07, 2016 1:24 AM To: Knapp, Rashawn L <ras...@in...>; Petar Jovanovic <mip...@gm...> Cc: val...@li...; val...@li... Subject: Re: [Valgrind-users] [Valgrind-developers] AVX-512 support inquiry Yes, I have seen AVX-512 looming on the horizon for a while. Yes, we should support it. Dealing with AVX/AVX2 was a lot of work, and there is not much AVX-512 available hardware out there, which may explain the relative lack of activity so far. I would be willing to make the infrastructural changes in VEX and Valgrind necessary to provide a framework in which we can incrementally add support for individual instructions. That would be: addition of support for 512 bit registers, changes in the front end instruction decoding framework, and changes in the back end (if any required, possibly none). One problem is the lack of hardware. As I understand it, some but not all Skylake CPUs support AVX-512. Having said that, if you are really looking for a working implementation on Knights Landing then it would be necessary to test any implementation both on Skylake+AVX512 and Knights Landing. A good description of the instruction set is also necessary. Is that publically available? Can you make available, reliable, administrative-hassle-free remote access to a box that supports AVX-512? J > -----Original Message----- > From: Petar Jovanovic [mailto:mip...@gm...] > Sent: Monday, September 05, 2016 11:48 AM > To: Jeff Hammond <jef...@gm...> > Cc: val...@li...; > val...@li...; Mark Wielaard <mj...@re...> > Subject: Re: [Valgrind-developers] [Valgrind-users] AVX-512 support > inquiry > > On Mon, Sep 5, 2016 at 6:31 PM, Jeff Hammond <jef...@gm...> wrote: >> >> It would be really valuable to a number of HPC programmers. Many DOE >> labs use it heavily. I wish I could help implement but I don't have >> the relevant skills. >> > > It may be worth to open a bug at kde and track future discussion there. |
|
From: <sv...@va...> - 2016-09-20 18:59:48
|
Author: sewardj
Date: Tue Sep 20 19:59:41 2016
New Revision: 15973
Log:
Merge from trunk, r15971 (Add a feature check for tests that use -march=armv8-a+crc.)
Modified:
branches/VALGRIND_3_12_BRANCH/ (props changed)
branches/VALGRIND_3_12_BRANCH/configure.ac
branches/VALGRIND_3_12_BRANCH/none/tests/arm64/Makefile.am
branches/VALGRIND_3_12_BRANCH/none/tests/arm64/crc32.vgtest
Modified: branches/VALGRIND_3_12_BRANCH/configure.ac
==============================================================================
--- branches/VALGRIND_3_12_BRANCH/configure.ac (original)
+++ branches/VALGRIND_3_12_BRANCH/configure.ac Tue Sep 20 19:59:41 2016
@@ -2685,6 +2685,29 @@
AM_CONDITIONAL(BUILD_IFUNC_TESTS, test x$ac_have_ifunc_attr = xyes)
+# Does the C compiler support the armv8 crc feature flag
+# Note, this doesn't generate a C-level symbol. It generates a
+# automake-level symbol (BUILD_ARMV8_CRC_TESTS), used in test Makefile.am's
+AC_MSG_CHECKING([if gcc supports the armv8 crc feature flag])
+
+save_CFLAGS="$CFLAGS"
+CFLAGS="$CFLAGS -march=armv8-a+crc -Werror"
+AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
+int main()
+{
+ return 0;
+}
+]])], [
+ac_have_armv8_crc_feature=yes
+AC_MSG_RESULT([yes])
+], [
+ac_have_armv8_crc_feature=no
+AC_MSG_RESULT([no])
+])
+CFLAGS="$save_CFLAGS"
+
+AM_CONDITIONAL(BUILD_ARMV8_CRC_TESTS, test x$ac_have_armv8_crc_feature = xyes)
+
# XXX JRS 2010 Oct 13: what is this for? For sure, we don't need this
# when building the tool executables. I think we should get rid of it.
Modified: branches/VALGRIND_3_12_BRANCH/none/tests/arm64/Makefile.am
==============================================================================
--- branches/VALGRIND_3_12_BRANCH/none/tests/arm64/Makefile.am (original)
+++ branches/VALGRIND_3_12_BRANCH/none/tests/arm64/Makefile.am Tue Sep 20 19:59:41 2016
@@ -12,12 +12,15 @@
check_PROGRAMS = \
allexec \
- crc32 \
cvtf_imm \
fp_and_simd \
integer \
memory
+if BUILD_ARMV8_CRC_TESTS
+ check_PROGRAMS += crc32
+endif
+
AM_CFLAGS += @FLAG_M64@
AM_CXXFLAGS += @FLAG_M64@
AM_CCASFLAGS += @FLAG_M64@
Modified: branches/VALGRIND_3_12_BRANCH/none/tests/arm64/crc32.vgtest
==============================================================================
--- branches/VALGRIND_3_12_BRANCH/none/tests/arm64/crc32.vgtest (original)
+++ branches/VALGRIND_3_12_BRANCH/none/tests/arm64/crc32.vgtest Tue Sep 20 19:59:41 2016
@@ -1,2 +1,3 @@
prog: crc32
+prereq: test -x crc32
vgopts: -q
|
|
From: <sv...@va...> - 2016-09-20 18:57:08
|
Author: sewardj
Date: Tue Sep 20 19:57:01 2016
New Revision: 15972
Log:
Merge from trunk, r15970 (fix for bugzilla 361253 [s390x])
Modified:
branches/VALGRIND_3_12_BRANCH/ (props changed)
branches/VALGRIND_3_12_BRANCH/NEWS (contents, props changed)
branches/VALGRIND_3_12_BRANCH/none/tests/s390x/Makefile.am
Modified: branches/VALGRIND_3_12_BRANCH/NEWS
==============================================================================
--- branches/VALGRIND_3_12_BRANCH/NEWS (original)
+++ branches/VALGRIND_3_12_BRANCH/NEWS Tue Sep 20 19:57:01 2016
@@ -169,6 +169,7 @@
368412 False positive result for altivec capability check
368461 mmapunmap test fails on ppc64
369000 AMD64 fma4 instructions unsupported.
+361253 [s390x] ex_clone.c:42: undefined reference to `pthread_create'
n-i-bz Fix incorrect (or infinite loop) unwind on RHEL7 x86 and amd64
n-i-bz massif --pages-as-heap=yes does not report peak caused by mmap+munmap
Modified: branches/VALGRIND_3_12_BRANCH/none/tests/s390x/Makefile.am
==============================================================================
--- branches/VALGRIND_3_12_BRANCH/none/tests/s390x/Makefile.am (original)
+++ branches/VALGRIND_3_12_BRANCH/none/tests/s390x/Makefile.am Tue Sep 20 19:57:01 2016
@@ -63,4 +63,4 @@
cu24_1_CFLAGS = $(AM_CFLAGS) -DM3=1
fixbr_CFLAGS = $(AM_CFLAGS) @FLAG_MLONG_DOUBLE_128@
fpext_CFLAGS = $(AM_CFLAGS) @FLAG_MLONG_DOUBLE_128@
-ex_clone_LDFLAGS = -lpthread
+ex_clone_LDADD = -lpthread
|
|
From: Rich C. <rc...@wi...> - 2016-09-20 18:15:10
|
On Tue, 20 Sep 2016 11:34:08 +0200 Mark Wielaard <mj...@re...> wrote: > On Sun, 2016-09-18 at 22:18 +0200, Mark Wielaard wrote: > Could people check whether with this new testcase the test no-longer > hangs and whether or not is passes? If it fails could you double check > whether or not it fails always or just sometimes? And if you know why > that would be very helpful to know! > Thanks Mark. The bar_bad testcase is no longer hanging and they are passing. Rich -- Rich Coe rc...@wi... |
|
From: <sv...@va...> - 2016-09-20 17:57:07
|
Author: mjw
Date: Tue Sep 20 18:57:00 2016
New Revision: 15971
Log:
Add a feature check for tests that use -march=armv8-a+crc.
Older gcc versions for arm64 don't support the crc arch feature.
Modified:
trunk/configure.ac
trunk/none/tests/arm64/Makefile.am
trunk/none/tests/arm64/crc32.vgtest
Modified: trunk/configure.ac
==============================================================================
--- trunk/configure.ac (original)
+++ trunk/configure.ac Tue Sep 20 18:57:00 2016
@@ -2685,6 +2685,29 @@
AM_CONDITIONAL(BUILD_IFUNC_TESTS, test x$ac_have_ifunc_attr = xyes)
+# Does the C compiler support the armv8 crc feature flag
+# Note, this doesn't generate a C-level symbol. It generates a
+# automake-level symbol (BUILD_ARMV8_CRC_TESTS), used in test Makefile.am's
+AC_MSG_CHECKING([if gcc supports the armv8 crc feature flag])
+
+save_CFLAGS="$CFLAGS"
+CFLAGS="$CFLAGS -march=armv8-a+crc -Werror"
+AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
+int main()
+{
+ return 0;
+}
+]])], [
+ac_have_armv8_crc_feature=yes
+AC_MSG_RESULT([yes])
+], [
+ac_have_armv8_crc_feature=no
+AC_MSG_RESULT([no])
+])
+CFLAGS="$save_CFLAGS"
+
+AM_CONDITIONAL(BUILD_ARMV8_CRC_TESTS, test x$ac_have_armv8_crc_feature = xyes)
+
# XXX JRS 2010 Oct 13: what is this for? For sure, we don't need this
# when building the tool executables. I think we should get rid of it.
Modified: trunk/none/tests/arm64/Makefile.am
==============================================================================
--- trunk/none/tests/arm64/Makefile.am (original)
+++ trunk/none/tests/arm64/Makefile.am Tue Sep 20 18:57:00 2016
@@ -12,12 +12,15 @@
check_PROGRAMS = \
allexec \
- crc32 \
cvtf_imm \
fp_and_simd \
integer \
memory
+if BUILD_ARMV8_CRC_TESTS
+ check_PROGRAMS += crc32
+endif
+
AM_CFLAGS += @FLAG_M64@
AM_CXXFLAGS += @FLAG_M64@
AM_CCASFLAGS += @FLAG_M64@
Modified: trunk/none/tests/arm64/crc32.vgtest
==============================================================================
--- trunk/none/tests/arm64/crc32.vgtest (original)
+++ trunk/none/tests/arm64/crc32.vgtest Tue Sep 20 18:57:00 2016
@@ -1,2 +1,3 @@
prog: crc32
+prereq: test -x crc32
vgopts: -q
|
|
From: <sv...@va...> - 2016-09-20 12:31:57
|
Author: cborntra
Date: Tue Sep 20 13:31:49 2016
New Revision: 15970
Log:
fix for bugzilla 361253 [s390x] ex_clone.c:42: undefined reference to `pthread_create'
Fix provides by Dann Frazier
Modified:
trunk/NEWS
trunk/none/tests/s390x/Makefile.am
Modified: trunk/NEWS
==============================================================================
--- trunk/NEWS (original)
+++ trunk/NEWS Tue Sep 20 13:31:49 2016
@@ -169,6 +169,7 @@
368412 False positive result for altivec capability check
368461 mmapunmap test fails on ppc64
369000 AMD64 fma4 instructions unsupported.
+361253 [s390x] ex_clone.c:42: undefined reference to `pthread_create'
n-i-bz Fix incorrect (or infinite loop) unwind on RHEL7 x86 and amd64
n-i-bz massif --pages-as-heap=yes does not report peak caused by mmap+munmap
Modified: trunk/none/tests/s390x/Makefile.am
==============================================================================
--- trunk/none/tests/s390x/Makefile.am (original)
+++ trunk/none/tests/s390x/Makefile.am Tue Sep 20 13:31:49 2016
@@ -63,4 +63,4 @@
cu24_1_CFLAGS = $(AM_CFLAGS) -DM3=1
fixbr_CFLAGS = $(AM_CFLAGS) @FLAG_MLONG_DOUBLE_128@
fpext_CFLAGS = $(AM_CFLAGS) @FLAG_MLONG_DOUBLE_128@
-ex_clone_LDFLAGS = -lpthread
+ex_clone_LDADD = -lpthread
|
|
From: Julian S. <js...@ac...> - 2016-09-20 11:24:53
|
On 16/09/16 20:42, Rhys Kidd wrote: >> I am currently unsure about the status of the following ports: >> >> * MacOS X 10.12 > > A patch set that provides the initial bring up on macOS 10.12 is on > Bugzilla: > https://bugs.kde.org/show_bug.cgi?id=365327 Could you land that, sooner rather than later, so as to get any build system changes onto the branch sooner rather than later? It looks like those patches won't have any effect on the existing 10.11 support, correct? > I hope to address the memory mapping problem over the weekend. Thanks. J |
|
From: <sv...@va...> - 2016-09-20 10:51:45
|
Author: sewardj
Date: Tue Sep 20 11:51:37 2016
New Revision: 512
Log:
Update re Solaris port developers. Fixes #362953.
Modified:
trunk/info/developers.html
Modified: trunk/info/developers.html
==============================================================================
--- trunk/info/developers.html (original)
+++ trunk/info/developers.html Tue Sep 20 11:51:37 2016
@@ -94,14 +94,14 @@
<tr valign="top">
<td><b>Petr Pavlu</b><br />
</td>
- <td>Petr is the initial author of Solaris and illumos port on x86 and amd64, wrote core functionality, door handling, added many tests, and maintains the illumos port.</td>
+ <td>Petr is the initial author of the Solaris/illumos port on x86 and amd64, that he and Ivo contributed.</td>
</tr>
<tr valign="top">
<td><b>Ivo Raisr</b><br />
</td>
- <td>Ivo contributed coredump support, wrappers, more tests and maintains the Solaris port.</td>
+ <td>Ivo worked on and maintains the Solaris port.</td>
</tr>
|
|
From: Julian S. <js...@ac...> - 2016-09-20 10:48:25
|
Ivo, Hi. > Patch for the following bug is ready to land, IMO. > I'd like to have another set of eyeballs review the changes before I > integrate it, though: > > 367995 Integration of memcheck with custom memory allocator Done -- comments in bugzilla. J |
|
From: Mark W. <mj...@re...> - 2016-09-20 09:34:17
|
On Sun, 2016-09-18 at 22:18 +0200, Mark Wielaard wrote: > > On my Linux/Ubuntu box these tests hang even when run natively during the > > fourth testcase described as > > "destroy a barrier that has waiting threads". According to POSIX [1]: > > "...The results are undefined if *pthread_barrier_destroy*() is called when > > any thread is blocked on the barrier... " > > which bar_bad precisely does. > > > > Perhaps a timer which would time out this hang would be handy here. > > My apologies for not recognizing this earlier. We carry a patch in Fedora > to work around this test hang. The workaround is attached to this bug > report: https://bugsfiles.kde.org/attachment.cgi?id=96765 > > As you can read in that bug report the workaround isn't ideal because > it might still FAIL the test. If someone could take a look at the bug > and proposed patch to see if it can somehow be changed so that it > makes the test reliably pass with older and newer glibc that would be > very appreciated. I checked in my workaround as valgrind svn r15962 (adding a missing exp file in svn r15966, sorry about that). It adds a sleeping thread that tries to unblock the barrier in case the test hangs (plus new exp files that describe that situation). It does seem to unblock the test, but it adds (more) non-determinism that seems to make the test fail more than before. So I kept the bug report open: https://bugs.kde.org/show_bug.cgi?id=358213 Could people check whether with this new testcase the test no-longer hangs and whether or not is passes? If it fails could you double check whether or not it fails always or just sometimes? And if you know why that would be very helpful to know! Thanks, Mark |
|
From: <sv...@va...> - 2016-09-19 22:12:11
|
Author: sewardj
Date: Mon Sep 19 23:12:05 2016
New Revision: 15969
Log:
Merge from trunk, r15968 (Add none/tests/ppc64/ppc64_helpers.h to noinst_HEADERS.)
Modified:
branches/VALGRIND_3_12_BRANCH/ (props changed)
branches/VALGRIND_3_12_BRANCH/none/tests/ppc64/Makefile.am
Modified: branches/VALGRIND_3_12_BRANCH/none/tests/ppc64/Makefile.am
==============================================================================
--- branches/VALGRIND_3_12_BRANCH/none/tests/ppc64/Makefile.am (original)
+++ branches/VALGRIND_3_12_BRANCH/none/tests/ppc64/Makefile.am Mon Sep 19 23:12:05 2016
@@ -3,6 +3,8 @@
dist_noinst_SCRIPTS = filter_stderr
+noinst_HEADERS = ppc64_helpers.h
+
EXTRA_DIST = \
jm-int.stderr.exp jm-int.stdout.exp jm-int.vgtest jm-int.stdout.exp-LE \
jm-fp.stderr.exp jm-fp.stdout.exp jm-fp.vgtest jm-fp.stdout.exp-LE jm-fp.stdout.exp-LE2 jm-fp.stdout.exp-BE2 \
|
|
From: <sv...@va...> - 2016-09-19 22:03:42
|
Author: mjw
Date: Mon Sep 19 23:03:34 2016
New Revision: 15968
Log:
Add none/tests/ppc64/ppc64_helpers.h to noinst_HEADERS.
Makes sure that the header file will be included in the dist tar.
Modified:
trunk/none/tests/ppc64/Makefile.am
Modified: trunk/none/tests/ppc64/Makefile.am
==============================================================================
--- trunk/none/tests/ppc64/Makefile.am (original)
+++ trunk/none/tests/ppc64/Makefile.am Mon Sep 19 23:03:34 2016
@@ -3,6 +3,8 @@
dist_noinst_SCRIPTS = filter_stderr
+noinst_HEADERS = ppc64_helpers.h
+
EXTRA_DIST = \
jm-int.stderr.exp jm-int.stdout.exp jm-int.vgtest jm-int.stdout.exp-LE \
jm-fp.stderr.exp jm-fp.stdout.exp jm-fp.vgtest jm-fp.stdout.exp-LE jm-fp.stdout.exp-LE2 jm-fp.stdout.exp-BE2 \
|
|
From: <sv...@va...> - 2016-09-19 19:34:13
|
Author: sewardj
Date: Mon Sep 19 20:34:07 2016
New Revision: 15967
Log:
Merge from trunk, r15966 (Add missing file for bug #358213 workaround)
Added:
branches/VALGRIND_3_12_BRANCH/helgrind/tests/bar_bad.stderr.exp-destroy-hang
- copied unchanged from r15966, trunk/helgrind/tests/bar_bad.stderr.exp-destroy-hang
Modified:
branches/VALGRIND_3_12_BRANCH/ (props changed)
|
|
From: <sv...@va...> - 2016-09-19 19:25:41
|
Author: mjw
Date: Mon Sep 19 20:25:33 2016
New Revision: 15966
Log:
Add missing file for bug #358213 workaround.
svn commit r15962 missed adding bar_bad.stderr.exp-destroy-hang.
Added:
trunk/helgrind/tests/bar_bad.stderr.exp-destroy-hang
Added: trunk/helgrind/tests/bar_bad.stderr.exp-destroy-hang
==============================================================================
--- trunk/helgrind/tests/bar_bad.stderr.exp-destroy-hang (added)
+++ trunk/helgrind/tests/bar_bad.stderr.exp-destroy-hang Mon Sep 19 20:25:33 2016
@@ -0,0 +1,72 @@
+
+initialise a barrier with zero count
+---Thread-Announcement------------------------------------------
+
+Thread #x is the program's root thread
+
+----------------------------------------------------------------
+
+Thread #x: pthread_barrier_init: 'count' argument is zero
+ at 0x........: pthread_barrier_init (hg_intercepts.c:...)
+ by 0x........: main (bar_bad.c:43)
+
+----------------------------------------------------------------
+
+Thread #x's call to pthread_barrier_init failed
+ with error code 22 (EINVAL: Invalid argument)
+ at 0x........: pthread_barrier_init (hg_intercepts.c:...)
+ by 0x........: main (bar_bad.c:43)
+
+
+initialise a barrier twice
+----------------------------------------------------------------
+
+Thread #x: pthread_barrier_init: barrier is already initialised
+ at 0x........: pthread_barrier_init (hg_intercepts.c:...)
+ by 0x........: main (bar_bad.c:49)
+
+
+initialise a barrier which has threads waiting on it
+----------------------------------------------------------------
+
+Thread #x: pthread_barrier_init: barrier is already initialised
+ at 0x........: pthread_barrier_init (hg_intercepts.c:...)
+ by 0x........: main (bar_bad.c:64)
+
+----------------------------------------------------------------
+
+Thread #x: pthread_barrier_init: threads are waiting at barrier
+ at 0x........: pthread_barrier_init (hg_intercepts.c:...)
+ by 0x........: main (bar_bad.c:64)
+
+
+destroy a barrier that has waiting threads
+----------------------------------------------------------------
+
+Thread #x: pthread_barrier_destroy: threads are waiting at barrier
+ at 0x........: pthread_barrier_destroy (hg_intercepts.c:...)
+ by 0x........: main (bar_bad.c:82)
+
+---Thread-Announcement------------------------------------------
+
+Thread #x was created
+ ...
+ by 0x........: pthread_create@* (hg_intercepts.c:...)
+ by 0x........: main (bar_bad.c:76)
+
+----------------------------------------------------------------
+
+Thread #x: pthread_barrier_wait: barrier is uninitialised
+ at 0x........: pthread_barrier_wait (hg_intercepts.c:...)
+ by 0x........: sleep1 (bar_bad.c:22)
+ by 0x........: mythread_wrapper (hg_intercepts.c:...)
+ ...
+
+
+destroy a barrier that was never initialised
+----------------------------------------------------------------
+
+Thread #x: pthread_barrier_destroy: barrier was never initialised
+ at 0x........: pthread_barrier_destroy (hg_intercepts.c:...)
+ by 0x........: main (bar_bad.c:96)
+
|
|
From: <sv...@va...> - 2016-09-19 14:55:26
|
Author: sewardj
Date: Mon Sep 19 15:55:16 2016
New Revision: 15965
Log:
Bump the version.
Modified:
branches/VALGRIND_3_12_BRANCH/configure.ac
Modified: branches/VALGRIND_3_12_BRANCH/configure.ac
==============================================================================
--- branches/VALGRIND_3_12_BRANCH/configure.ac (original)
+++ branches/VALGRIND_3_12_BRANCH/configure.ac Mon Sep 19 15:55:16 2016
@@ -8,7 +8,7 @@
##------------------------------------------------------------##
# Process this file with autoconf to produce a configure script.
-AC_INIT([Valgrind],[3.12.0.SVN],[val...@li...])
+AC_INIT([Valgrind],[3.12.BRANCH],[val...@li...])
AC_CONFIG_SRCDIR(coregrind/m_main.c)
AC_CONFIG_HEADERS([config.h])
AM_INIT_AUTOMAKE([foreign subdir-objects])
|
|
From: <sv...@va...> - 2016-09-19 14:49:03
|
Author: sewardj
Date: Mon Sep 19 15:48:56 2016
New Revision: 15964
Log:
Swizzle external.
Modified:
branches/VALGRIND_3_12_BRANCH/ (props changed)
|
|
From: <sv...@va...> - 2016-09-19 14:47:26
|
Author: sewardj
Date: Mon Sep 19 15:47:20 2016
New Revision: 15963
Log:
Create branches/VALGRIND_3_12_BRANCH as a copy of trunk r15962.
Added:
branches/VALGRIND_3_12_BRANCH/
- copied from r15962, trunk/
|
|
From: <sv...@va...> - 2016-09-19 14:35:45
|
Author: sewardj
Date: Mon Sep 19 15:35:39 2016
New Revision: 3250
Log:
Create branches/VEX_3_12_BRANCH as a copy of trunk r3249.
Added:
branches/VEX_3_12_BRANCH/
- copied from r3249, trunk/
|
|
From: <sv...@va...> - 2016-09-19 14:16:44
|
Author: mjw
Date: Mon Sep 19 15:16:35 2016
New Revision: 15962
Log:
Workaround bar_bad testcase hanging with newer glibc in helgrind/drd tests.
This is a workaround for bug #358213 helgrind/drd pthread_barrier tests
hangs with new glibc pthread barrier implementation. This makes sure that
the tests don't hang anymore. It does this by creating new threads that
sleep and kill the other threads after some time. But this introduces
some non-determinism that might cause the tests to occassionally fail
(both against old and new glibc implementations).
Added:
trunk/drd/tests/bar_bad.stderr.exp-nohang
- copied, changed from r15961, trunk/drd/tests/bar_bad.stderr.exp
trunk/drd/tests/bar_bad_xml.stderr.exp-nohang
- copied, changed from r15961, trunk/drd/tests/bar_bad_xml.stderr.exp
Modified:
trunk/drd/tests/Makefile.am
trunk/drd/tests/bar_bad.stderr.exp
trunk/drd/tests/bar_bad_xml.stderr.exp
trunk/helgrind/tests/Makefile.am
trunk/helgrind/tests/bar_bad.c
trunk/helgrind/tests/bar_bad.stderr.exp
Modified: trunk/drd/tests/Makefile.am
==============================================================================
--- trunk/drd/tests/Makefile.am (original)
+++ trunk/drd/tests/Makefile.am Mon Sep 19 15:16:35 2016
@@ -81,8 +81,10 @@
atomic_var.stderr.exp \
atomic_var.vgtest \
bar_bad.stderr.exp \
+ bar_bad.stderr.exp-nohang \
bar_bad.vgtest \
bar_bad_xml.stderr.exp \
+ bar_bad_xml.stderr.exp-nohang \
bar_bad_xml.vgtest \
bar_trivial.stderr.exp \
bar_trivial.stdout.exp \
Modified: trunk/drd/tests/bar_bad.stderr.exp
==============================================================================
--- trunk/drd/tests/bar_bad.stderr.exp (original)
+++ trunk/drd/tests/bar_bad.stderr.exp Mon Sep 19 15:16:35 2016
@@ -34,16 +34,5 @@
destroy a barrier that was never initialised
-Not a barrier
- at 0x........: pthread_barrier_destroy (drd_pthread_intercepts.c:?)
- by 0x........: main (bar_bad.c:?)
-Destruction of barrier that is being waited upon: barrier 0x........
- at 0x........: free (vg_replace_malloc.c:...)
- by 0x........: main (bar_bad.c:?)
-barrier 0x........ was first observed at:
- at 0x........: pthread_barrier_init (drd_pthread_intercepts.c:?)
- by 0x........: main (bar_bad.c:?)
-
-
-ERROR SUMMARY: 7 errors from 6 contexts (suppressed: 0 from 0)
+ERROR SUMMARY: 5 errors from 4 contexts (suppressed: 0 from 0)
Copied: trunk/drd/tests/bar_bad.stderr.exp-nohang (from r15961, trunk/drd/tests/bar_bad.stderr.exp)
==============================================================================
--- trunk/drd/tests/bar_bad.stderr.exp (original)
+++ trunk/drd/tests/bar_bad.stderr.exp-nohang Mon Sep 19 15:16:35 2016
@@ -38,12 +38,5 @@
at 0x........: pthread_barrier_destroy (drd_pthread_intercepts.c:?)
by 0x........: main (bar_bad.c:?)
-Destruction of barrier that is being waited upon: barrier 0x........
- at 0x........: free (vg_replace_malloc.c:...)
- by 0x........: main (bar_bad.c:?)
-barrier 0x........ was first observed at:
- at 0x........: pthread_barrier_init (drd_pthread_intercepts.c:?)
- by 0x........: main (bar_bad.c:?)
-
-ERROR SUMMARY: 7 errors from 6 contexts (suppressed: 0 from 0)
+ERROR SUMMARY: 6 errors from 5 contexts (suppressed: 0 from 0)
Modified: trunk/drd/tests/bar_bad_xml.stderr.exp
==============================================================================
--- trunk/drd/tests/bar_bad_xml.stderr.exp (original)
+++ trunk/drd/tests/bar_bad_xml.stderr.exp Mon Sep 19 15:16:35 2016
@@ -204,78 +204,6 @@
destroy a barrier that was never initialised
-<error>
- <unique>0x........</unique>
- <tid>...</tid>
- <kind>GenericErr</kind>
- <what>Not a barrier</what>
- <stack>
- <frame>
- <ip>0x........</ip>
- <obj>...</obj>
- <fn>pthread_barrier_destroy</fn>
- <dir>...</dir>
- <file>drd_pthread_intercepts.c</file>
- <line>...</line>
- </frame>
- <frame>
- <ip>0x........</ip>
- <obj>...</obj>
- <fn>main</fn>
- <dir>...</dir>
- <file>bar_bad.c</file>
- <line>...</line>
- </frame>
- </stack>
-</error>
-
-<error>
- <unique>0x........</unique>
- <tid>...</tid>
- <kind>BarrierErr</kind>
- <what>Destruction of barrier that is being waited upon: barrier 0x........</what>
- <stack>
- <frame>
- <ip>0x........</ip>
- <obj>...</obj>
- <fn>free</fn>
- <dir>...</dir>
- <file>vg_replace_malloc.c</file>
- <line>...</line>
- </frame>
- <frame>
- <ip>0x........</ip>
- <obj>...</obj>
- <fn>main</fn>
- <dir>...</dir>
- <file>bar_bad.c</file>
- <line>...</line>
- </frame>
- </stack>
- <first_observed_at>
- <what>barrier</what>
- <address>0x........</address>
- <stack>
- <frame>
- <ip>0x........</ip>
- <obj>...</obj>
- <fn>pthread_barrier_init</fn>
- <dir>...</dir>
- <file>drd_pthread_intercepts.c</file>
- <line>...</line>
- </frame>
- <frame>
- <ip>0x........</ip>
- <obj>...</obj>
- <fn>main</fn>
- <dir>...</dir>
- <file>bar_bad.c</file>
- <line>...</line>
- </frame>
- </stack>
- </first_observed_at>
-</error>
-
<status>
<state>FINISHED</state>
@@ -299,14 +227,6 @@
<count>...</count>
<unique>0x........</unique>
</pair>
- <pair>
- <count>...</count>
- <unique>0x........</unique>
- </pair>
- <pair>
- <count>...</count>
- <unique>0x........</unique>
- </pair>
</errorcounts>
<suppcounts>...</suppcounts>
Copied: trunk/drd/tests/bar_bad_xml.stderr.exp-nohang (from r15961, trunk/drd/tests/bar_bad_xml.stderr.exp)
==============================================================================
--- trunk/drd/tests/bar_bad_xml.stderr.exp (original)
+++ trunk/drd/tests/bar_bad_xml.stderr.exp-nohang Mon Sep 19 15:16:35 2016
@@ -229,53 +229,6 @@
</stack>
</error>
-<error>
- <unique>0x........</unique>
- <tid>...</tid>
- <kind>BarrierErr</kind>
- <what>Destruction of barrier that is being waited upon: barrier 0x........</what>
- <stack>
- <frame>
- <ip>0x........</ip>
- <obj>...</obj>
- <fn>free</fn>
- <dir>...</dir>
- <file>vg_replace_malloc.c</file>
- <line>...</line>
- </frame>
- <frame>
- <ip>0x........</ip>
- <obj>...</obj>
- <fn>main</fn>
- <dir>...</dir>
- <file>bar_bad.c</file>
- <line>...</line>
- </frame>
- </stack>
- <first_observed_at>
- <what>barrier</what>
- <address>0x........</address>
- <stack>
- <frame>
- <ip>0x........</ip>
- <obj>...</obj>
- <fn>pthread_barrier_init</fn>
- <dir>...</dir>
- <file>drd_pthread_intercepts.c</file>
- <line>...</line>
- </frame>
- <frame>
- <ip>0x........</ip>
- <obj>...</obj>
- <fn>main</fn>
- <dir>...</dir>
- <file>bar_bad.c</file>
- <line>...</line>
- </frame>
- </stack>
- </first_observed_at>
-</error>
-
<status>
<state>FINISHED</state>
@@ -303,10 +256,6 @@
<count>...</count>
<unique>0x........</unique>
</pair>
- <pair>
- <count>...</count>
- <unique>0x........</unique>
- </pair>
</errorcounts>
<suppcounts>...</suppcounts>
Modified: trunk/helgrind/tests/Makefile.am
==============================================================================
--- trunk/helgrind/tests/Makefile.am (original)
+++ trunk/helgrind/tests/Makefile.am Mon Sep 19 15:16:35 2016
@@ -19,6 +19,7 @@
cond_timedwait_test.vgtest cond_timedwait_test.stdout.exp \
cond_timedwait_test.stderr.exp \
bar_bad.vgtest bar_bad.stdout.exp bar_bad.stderr.exp \
+ bar_bad.stderr.exp-destroy-hang \
bar_trivial.vgtest bar_trivial.stdout.exp bar_trivial.stderr.exp \
free_is_write.vgtest free_is_write.stdout.exp \
free_is_write.stderr.exp \
Modified: trunk/helgrind/tests/bar_bad.c
==============================================================================
--- trunk/helgrind/tests/bar_bad.c (original)
+++ trunk/helgrind/tests/bar_bad.c Mon Sep 19 15:16:35 2016
@@ -15,23 +15,27 @@
return NULL;
}
+void *sleep1 ( void* arg )
+{
+ /* Long sleep, we hope to never trigger. */
+ sleep (10);
+ pthread_barrier_wait ( (pthread_barrier_t*)arg );
+ return NULL;
+}
+
+void *exit1 ( void* arg )
+{
+ /* Sleep a bit, then exit, we are done. */
+ sleep (1);
+ exit (0);
+ return NULL;
+}
+
int main ( void )
{
pthread_barrier_t *bar1, *bar2, *bar3, *bar4, *bar5;
- pthread_t thr1, thr2;
int r;
-
- /* possibly set up a watchdog timer thread here. */
-
-
-
-
-
-
-
-
-
-
+ pthread_t thr1, thr2, slp1, slp2, ext1;
/* initialise a barrier with a zero count */
fprintf(stderr, "\ninitialise a barrier with zero count\n");
@@ -49,6 +53,9 @@
fprintf(stderr, "\ninitialise a barrier which has threads waiting on it\n");
bar3 = malloc(sizeof(pthread_barrier_t));
pthread_barrier_init(bar3, NULL, 2);
+ /* create a thread, whose purpose is to "unblock" the barrier after
+ some sleeping in case it keeps being blocked. */
+ pthread_create(&slp1, NULL, sleep1, (void*)bar3);
/* create a thread, whose only purpose is to block on the barrier */
pthread_create(&thr1, NULL, child1, (void*)bar3);
/* guarantee that it gets there first */
@@ -61,6 +68,12 @@
/* once again, create a thread, whose only purpose is to block. */
bar4 = malloc(sizeof(pthread_barrier_t));
pthread_barrier_init(bar4, NULL, 2);
+ /* create a thread, whose purpose is to "unblock" the barrier after
+ some sleeping in case it keeps being blocked. We hope it isn't
+ needed, but if it is, because pthread_barier_destroy hangs
+ and we will get an extra warning about the barrier being already
+ destroyed. */
+ pthread_create(&slp2, NULL, sleep1, (void*)bar4);
/* create a thread, whose only purpose is to block on the barrier */
pthread_create(&thr2, NULL, child1, (void*)bar4);
/* guarantee that it gets there first */
@@ -70,20 +83,24 @@
/* destroy a barrier that was never initialised. This is a bit
tricky, in that we have to fill the barrier with bytes which
- ensure that the pthread_barrier_destroy call doesn't hang for
- some reason. Zero-fill seems to work ok on amd64-linux (glibc
+ ensure that the pthread_barrier_destroy call doesn't crash for
+ some reason. One-fill seems to work ok on amd64-linux (glibc
2.8). */
fprintf(stderr, "\ndestroy a barrier that was never initialised\n");
+ /* Create a thread that just exits the process after some sleep.
+ We are really done at this point, even if we hang. */
+ pthread_create(&ext1, NULL, exit1, NULL);
bar5 = malloc(sizeof(pthread_barrier_t));
assert(bar5);
- memset(bar5, 0, sizeof(*bar5));
+ memset(bar5, 1, sizeof(*bar5));
pthread_barrier_destroy(bar5);
- /* now we need to clean up the mess .. */
- r= pthread_cancel(thr1); assert(!r);
- r= pthread_cancel(thr2); assert(!r);
+ /* now we need to clean up the mess .. But skip canceling threads. */
+ /* r= pthread_cancel(thr1); assert(!r); // drd doesn't like it. Just exit.
+ r= pthread_cancel(thr2); assert(!r); */
free(bar1); free(bar2); free(bar3); free(bar4); free(bar5);
- return 0;
+ /* Use exit, we want to kill any "sleeper threads". */
+ exit (0);
}
Modified: trunk/helgrind/tests/bar_bad.stderr.exp
==============================================================================
--- trunk/helgrind/tests/bar_bad.stderr.exp (original)
+++ trunk/helgrind/tests/bar_bad.stderr.exp Mon Sep 19 15:16:35 2016
@@ -8,14 +8,14 @@
Thread #x: pthread_barrier_init: 'count' argument is zero
at 0x........: pthread_barrier_init (hg_intercepts.c:...)
- by 0x........: main (bar_bad.c:39)
+ by 0x........: main (bar_bad.c:43)
----------------------------------------------------------------
Thread #x's call to pthread_barrier_init failed
with error code 22 (EINVAL: Invalid argument)
at 0x........: pthread_barrier_init (hg_intercepts.c:...)
- by 0x........: main (bar_bad.c:39)
+ by 0x........: main (bar_bad.c:43)
initialise a barrier twice
@@ -23,7 +23,7 @@
Thread #x: pthread_barrier_init: barrier is already initialised
at 0x........: pthread_barrier_init (hg_intercepts.c:...)
- by 0x........: main (bar_bad.c:45)
+ by 0x........: main (bar_bad.c:49)
initialise a barrier which has threads waiting on it
@@ -31,13 +31,13 @@
Thread #x: pthread_barrier_init: barrier is already initialised
at 0x........: pthread_barrier_init (hg_intercepts.c:...)
- by 0x........: main (bar_bad.c:57)
+ by 0x........: main (bar_bad.c:64)
----------------------------------------------------------------
Thread #x: pthread_barrier_init: threads are waiting at barrier
at 0x........: pthread_barrier_init (hg_intercepts.c:...)
- by 0x........: main (bar_bad.c:57)
+ by 0x........: main (bar_bad.c:64)
destroy a barrier that has waiting threads
@@ -45,14 +45,14 @@
Thread #x: pthread_barrier_destroy: threads are waiting at barrier
at 0x........: pthread_barrier_destroy (hg_intercepts.c:...)
- by 0x........: main (bar_bad.c:69)
+ by 0x........: main (bar_bad.c:82)
----------------------------------------------------------------
Thread #x's call to pthread_barrier_destroy failed
with error code 16 (EBUSY: Device or resource busy)
at 0x........: pthread_barrier_destroy (hg_intercepts.c:...)
- by 0x........: main (bar_bad.c:69)
+ by 0x........: main (bar_bad.c:82)
destroy a barrier that was never initialised
@@ -60,5 +60,5 @@
Thread #x: pthread_barrier_destroy: barrier was never initialised
at 0x........: pthread_barrier_destroy (hg_intercepts.c:...)
- by 0x........: main (bar_bad.c:80)
+ by 0x........: main (bar_bad.c:96)
|
Author: mjw
Date: Mon Sep 19 13:41:38 2016
New Revision: 15961
Log:
Testcases for fma4 instructions. Bug #369000.
Added:
trunk/none/tests/amd64/fma4.c
trunk/none/tests/amd64/fma4.stderr.exp
trunk/none/tests/amd64/fma4.stdout.exp
trunk/none/tests/amd64/fma4.vgtest
Modified:
trunk/NEWS
trunk/configure.ac
trunk/none/tests/amd64/Makefile.am
trunk/tests/x86_amd64_features.c
Modified: trunk/NEWS
==============================================================================
--- trunk/NEWS (original)
+++ trunk/NEWS Mon Sep 19 13:41:38 2016
@@ -168,6 +168,7 @@
368416 Add tc06_two_races_xml.exp output for ppc64
368412 False positive result for altivec capability check
368461 mmapunmap test fails on ppc64
+369000 AMD64 fma4 instructions unsupported.
n-i-bz Fix incorrect (or infinite loop) unwind on RHEL7 x86 and amd64
n-i-bz massif --pages-as-heap=yes does not report peak caused by mmap+munmap
Modified: trunk/configure.ac
==============================================================================
--- trunk/configure.ac (original)
+++ trunk/configure.ac Mon Sep 19 13:41:38 2016
@@ -2380,6 +2380,26 @@
AM_CONDITIONAL(BUILD_VPCLMULQDQ_TESTS, test x$ac_have_as_vpclmulqdq = xyes)
+# does the x86/amd64 assembler understand FMA4 instructions?
+# Note, this doesn't generate a C-level symbol. It generates a
+# automake-level symbol (BUILD_AFM4_TESTS), used in test Makefile.am's
+AC_MSG_CHECKING([if x86/amd64 assembler supports FMA4 'vfmaddpd'])
+AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[
+ do {
+ __asm__ __volatile__(
+ "vfmaddpd %%xmm7,%%xmm8,%%xmm6,%%xmm9" : : : );
+ } while (0)
+]])], [
+ac_have_as_vfmaddpd=yes
+AC_MSG_RESULT([yes])
+], [
+ac_have_as_vfmaddpd=no
+AC_MSG_RESULT([no])
+])
+
+AM_CONDITIONAL(BUILD_FMA4_TESTS, test x$ac_have_as_vfmaddpd = xyes)
+
+
# does the x86/amd64 assembler understand the LZCNT instruction?
# Note, this doesn't generate a C-level symbol. It generates a
# automake-level symbol (BUILD_LZCNT_TESTS), used in test Makefile.am's
Modified: trunk/none/tests/amd64/Makefile.am
==============================================================================
--- trunk/none/tests/amd64/Makefile.am (original)
+++ trunk/none/tests/amd64/Makefile.am Mon Sep 19 13:41:38 2016
@@ -42,6 +42,7 @@
cmpxchg.vgtest cmpxchg.stdout.exp cmpxchg.stderr.exp \
faultstatus.disabled faultstatus.stderr.exp \
fcmovnu.vgtest fcmovnu.stderr.exp fcmovnu.stdout.exp \
+ fma4.vgtest fma4.stdout.exp fma4.stderr.exp \
fxtract.vgtest fxtract.stderr.exp fxtract.stdout.exp \
fxtract.stdout.exp-older-glibc \
getseg.stdout.exp getseg.stderr.exp getseg.vgtest \
@@ -109,6 +110,9 @@
if BUILD_VPCLMULQDQ_TESTS
check_PROGRAMS += avx-1
endif
+if BUILD_FMA4_TESTS
+ check_PROGRAMS += fma4
+endif
endif
if BUILD_AVX2_TESTS
if !COMPILER_IS_ICC
@@ -185,6 +189,8 @@
insn_fpu_LDADD = -lm
insn_pclmulqdq_SOURCES = insn_pclmulqdq.def
fxtract_LDADD = -lm
+fma4_CFLAGS = $(AM_CFKAGS) -std=c99
+fma4_LDADD = -lm
.def.c: $(srcdir)/gen_insn_test.pl
$(PERL) $(srcdir)/gen_insn_test.pl < $< > $@
Added: trunk/none/tests/amd64/fma4.c
==============================================================================
--- trunk/none/tests/amd64/fma4.c (added)
+++ trunk/none/tests/amd64/fma4.c Mon Sep 19 13:41:38 2016
@@ -0,0 +1,659 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <assert.h>
+#include <math.h>
+#include "tests/malloc.h"
+
+typedef unsigned char UChar;
+typedef unsigned int UInt;
+typedef unsigned long int UWord;
+typedef unsigned long long int ULong;
+typedef double Double;
+typedef float Float;
+
+#define IS_32_ALIGNED(_ptr) (0 == (0x1F & (UWord)(_ptr)))
+
+typedef union { UChar u8[16]; UInt u32[4]; Float f32[4]; Double f64[2]; } XMM;
+typedef union { UChar u8[32]; UInt u32[8]; XMM xmm[2]; } YMM;
+typedef struct { YMM r1; YMM r2; YMM r3; YMM r4; YMM m; } Block;
+
+void showFloat ( XMM* vec, int idx )
+{
+ Float f = vec->f32[idx];
+ int neg = signbit (f);
+ char sign = neg != 0 ? '-' : ' ';
+ switch (fpclassify (f)) {
+ case FP_NORMAL: {
+ for (int i = idx * 4 + 3; i >= idx * 4; i--)
+ printf("%02x", (UInt)vec->u8[i]);
+ break;
+ }
+ case FP_INFINITE: {
+ printf ("[ %cINF ]", sign);
+ break;
+ }
+ case FP_ZERO: {
+ printf ("[%cZERO ]", sign);
+ break;
+ }
+ case FP_NAN: {
+ printf ("[ NAN ]");
+ break;
+ }
+ default: {
+ printf ("[%cSUBNR]", sign);
+ break;
+ }
+ }
+}
+
+void showDouble ( XMM* vec, int idx )
+{
+ Double d = vec->f64[idx];
+ int neg = signbit (d);
+ char sign = neg != 0 ? '-' : ' ';
+ switch (fpclassify (d)) {
+ case FP_NORMAL: {
+ for (int i = idx * 8 + 7; i >= idx * 8; i--)
+ printf("%02x", (UInt)vec->u8[i]);
+ break;
+ }
+ case FP_INFINITE: {
+ printf ("[ %cINF ]", sign);
+ break;
+ }
+ case FP_ZERO: {
+ printf ("[ %cZERO ]", sign);
+ break;
+ }
+ case FP_NAN: {
+ printf ("[ NAN ]");
+ break;
+ }
+ default: {
+ printf ("[ %cSUBNORMAL ]", sign);
+ break;
+ }
+ }
+}
+
+void showXMM ( XMM* vec, int isDouble )
+{
+ if (isDouble) {
+ showDouble ( vec, 1 );
+ printf (".");
+ showDouble ( vec, 0 );
+ } else {
+ showFloat ( vec, 3 );
+ printf (".");
+ showFloat ( vec, 2 );
+ printf (".");
+ showFloat ( vec, 1 );
+ printf (".");
+ showFloat ( vec, 0 );
+ }
+}
+
+void showYMM ( YMM* vec, int isDouble )
+{
+ assert(IS_32_ALIGNED(vec));
+ showXMM ( &vec->xmm[1], isDouble );
+ printf(".");
+ showXMM ( &vec->xmm[0], isDouble );
+}
+
+void showBlock ( char* msg, Block* block, int isDouble )
+{
+ printf(" %s\n", msg);
+ printf("r1: "); showYMM(&block->r1, isDouble); printf("\n");
+ printf("r2: "); showYMM(&block->r2, isDouble); printf("\n");
+ printf("r3: "); showYMM(&block->r3, isDouble); printf("\n");
+ printf("r4: "); showYMM(&block->r4, isDouble); printf("\n");
+ printf(" m: "); showYMM(&block->m, isDouble); printf("\n");
+}
+
+static Double special_values[10];
+
+static __attribute__((noinline))
+Double negate ( Double d ) { return -d; }
+static __attribute__((noinline))
+Double divf64 ( Double x, Double y ) { return x/y; }
+
+static __attribute__((noinline))
+Double plusZero ( void ) { return 0.0; }
+static __attribute__((noinline))
+Double minusZero ( void ) { return negate(plusZero()); }
+
+static __attribute__((noinline))
+Double plusOne ( void ) { return 1.0; }
+static __attribute__((noinline))
+Double minusOne ( void ) { return negate(plusOne()); }
+
+static __attribute__((noinline))
+Double plusInf ( void ) { return 1.0 / 0.0; }
+static __attribute__((noinline))
+Double minusInf ( void ) { return negate(plusInf()); }
+
+static __attribute__((noinline))
+Double plusNaN ( void ) { return divf64(plusInf(),plusInf()); }
+static __attribute__((noinline))
+Double minusNaN ( void ) { return negate(plusNaN()); }
+
+static __attribute__((noinline))
+Double plusDenorm ( void ) { return 1.23e-315 / 1e3; }
+static __attribute__((noinline))
+Double minusDenorm ( void ) { return negate(plusDenorm()); }
+
+static void init_special_values ( void )
+{
+ special_values[0] = plusZero();
+ special_values[1] = minusZero();
+ special_values[2] = plusOne();
+ special_values[3] = minusOne();
+ special_values[4] = plusInf();
+ special_values[5] = minusInf();
+ special_values[6] = plusNaN();
+ special_values[7] = minusNaN();
+ special_values[8] = plusDenorm();
+ special_values[9] = minusDenorm();
+}
+
+void specialFBlock ( Block* b )
+{
+ int i;
+ Float* p = (Float*)b;
+ for (i = 0; i < sizeof(Block) / sizeof(Float); i++)
+ p[i] = (Float) special_values[i % 10];
+}
+
+void specialDBlock ( Block* b )
+{
+ int i;
+ Double* p = (Double*)b;
+ for (i = 0; i < sizeof(Block) / sizeof(Double); i++)
+ p[i] = special_values[i % 10];
+}
+
+UChar randUChar ( void )
+{
+ static UInt seed = 80021;
+ seed = 1103515245 * seed + 12345;
+ return (seed >> 17) & 0xFF;
+}
+
+void randBlock ( Block* b )
+{
+ int i;
+ UChar* p = (UChar*)b;
+ for (i = 0; i < sizeof(Block); i++)
+ p[i] = randUChar();
+}
+
+void oneBlock ( Block* b )
+{
+ int i;
+ UChar* p = (UChar*)b;
+ for (i = 0; i < sizeof(Block); i++)
+ p[i] = 1;
+}
+
+#define GEN_test(_name, _instr, _isD) \
+ __attribute__ ((noinline)) void \
+ test_##_name ( const char *n, Block* b) \
+ { \
+ printf("%s %s\n", #_name, n); \
+ showBlock("before", b, _isD); \
+ __asm__ __volatile__( \
+ "vmovdqa 0(%0),%%ymm7" "\n\t" \
+ "vmovdqa 32(%0),%%ymm8" "\n\t" \
+ "vmovdqa 64(%0),%%ymm6" "\n\t" \
+ "vmovdqa 96(%0),%%ymm9" "\n\t" \
+ "leaq 128(%0),%%r14" "\n\t" \
+ _instr "\n\t" \
+ "vmovdqa %%ymm7, 0(%0)" "\n\t" \
+ "vmovdqa %%ymm8, 32(%0)" "\n\t" \
+ "vmovdqa %%ymm6, 64(%0)" "\n\t" \
+ "vmovdqa %%ymm9, 96(%0)" "\n\t" \
+ : /*OUT*/ \
+ : /*IN*/"r"(b) \
+ : /*TRASH*/"xmm7","xmm8","xmm6","xmm9","r14","memory","cc" \
+ ); \
+ showBlock("after", b, _isD); \
+ printf("\n"); \
+ }
+
+/* All these defines do the same thing (and someone with stronger
+ preprocessor foo could probably express things much smaller).
+ They generate 4 different functions to test 4 variants of an
+ fma4 instruction. One with as input 4 registers, one where
+ the output register is also one of the input registers and
+ two versions where different inputs are a memory location.
+ The xmm variants create 128 versions, the ymm variants 256. */
+
+#define GEN_test_VFMADDPD_xmm(_name) \
+ GEN_test(_name##_xmm, \
+ "vfmaddpd %%xmm7,%%xmm8,%%xmm6,%%xmm9", 1); \
+ GEN_test(_name##_xmm_src_dst, \
+ "vfmaddpd %%xmm7,%%xmm8,%%xmm9,%%xmm9", 1); \
+ GEN_test(_name##_xmm_mem1, \
+ "vfmaddpd (%%r14),%%xmm8,%%xmm6,%%xmm9", 1); \
+ GEN_test(_name##_xmm_mem2, \
+ "vfmaddpd %%xmm8,(%%r14),%%xmm6,%%xmm9", 1);
+GEN_test_VFMADDPD_xmm(VFMADDPD)
+
+#define GEN_test_VFMADDPD_ymm(_name) \
+ GEN_test(_name##_ymm, \
+ "vfmaddpd %%ymm7,%%ymm8,%%ymm6,%%ymm9", 1); \
+ GEN_test(_name##_ymm_src_dst, \
+ "vfmaddpd %%ymm7,%%ymm8,%%ymm9,%%ymm9", 1); \
+ GEN_test(_name##_ymm_mem1, \
+ "vfmaddpd (%%r14),%%ymm8,%%ymm6,%%ymm9", 1); \
+ GEN_test(_name##_ymm_mem2, \
+ "vfmaddpd %%ymm8,(%%r14),%%ymm6,%%ymm9", 1);
+GEN_test_VFMADDPD_ymm(VFMADDPD)
+
+#define GEN_test_VFMADDPS_xmm(_name) \
+ GEN_test(_name##_xmm, \
+ "vfmaddps %%xmm7,%%xmm8,%%xmm6,%%xmm9", 0); \
+ GEN_test(_name##_xmm_src_dst, \
+ "vfmaddps %%xmm7,%%xmm8,%%xmm9,%%xmm9", 0); \
+ GEN_test(_name##_xmm_mem1, \
+ "vfmaddps (%%r14),%%xmm8,%%xmm6,%%xmm9", 0); \
+ GEN_test(_name##_xmm_mem2, \
+ "vfmaddps %%xmm8,(%%r14),%%xmm6,%%xmm9", 0);
+GEN_test_VFMADDPS_xmm(VFMADDPS)
+
+#define GEN_test_VFMADDPS_ymm(_name) \
+ GEN_test(_name##_ymm, \
+ "vfmaddps %%ymm7,%%ymm8,%%ymm6,%%ymm9", 0); \
+ GEN_test(_name##_ymm_src_dst, \
+ "vfmaddps %%ymm7,%%ymm8,%%ymm9,%%ymm9", 0); \
+ GEN_test(_name##_ymm_mem1, \
+ "vfmaddps (%%r14),%%ymm8,%%ymm6,%%ymm9", 0); \
+ GEN_test(_name##_ymm_mem2, \
+ "vfmaddps %%ymm8,(%%r14),%%ymm6,%%ymm9", 0);
+GEN_test_VFMADDPS_ymm(VFMADDPS)
+
+#define GEN_test_VFMADDSD_xmm(_name) \
+ GEN_test(_name##_xmm, \
+ "vfmaddsd %%xmm7,%%xmm8,%%xmm6,%%xmm9", 1); \
+ GEN_test(_name##_xmm_src_dst, \
+ "vfmaddsd %%xmm7,%%xmm8,%%xmm9,%%xmm9", 1); \
+ GEN_test(_name##_xmm_mem1, \
+ "vfmaddsd (%%r14),%%xmm8,%%xmm6,%%xmm9", 1); \
+ GEN_test(_name##_xmm_mem2, \
+ "vfmaddsd %%xmm8,(%%r14),%%xmm6,%%xmm9", 1);
+GEN_test_VFMADDSD_xmm(VFMADDSD)
+
+#define GEN_test_VFMADDSS_xmm(_name) \
+ GEN_test(_name##_xmm, \
+ "vfmaddss %%xmm7,%%xmm8,%%xmm6,%%xmm9", 0); \
+ GEN_test(_name##_xmm_src_dst, \
+ "vfmaddss %%xmm7,%%xmm8,%%xmm9,%%xmm9", 0); \
+ GEN_test(_name##_xmm_mem1, \
+ "vfmaddss (%%r14),%%xmm8,%%xmm6,%%xmm9", 0); \
+ GEN_test(_name##_xmm_mem2, \
+ "vfmaddss %%xmm8,(%%r14),%%xmm6,%%xmm9", 0);
+GEN_test_VFMADDSS_xmm(VFMADDSS)
+
+#define GEN_test_VFMADDSUBPD_xmm(_name) \
+ GEN_test(_name##_xmm, \
+ "vfmaddsubpd %%xmm7,%%xmm8,%%xmm6,%%xmm9", 1); \
+ GEN_test(_name##_xmm_src_dst, \
+ "vfmaddsubpd %%xmm7,%%xmm8,%%xmm9,%%xmm9", 1); \
+ GEN_test(_name##_xmm_mem1, \
+ "vfmaddsubpd (%%r14),%%xmm8,%%xmm6,%%xmm9", 1); \
+ GEN_test(_name##_xmm_mem2, \
+ "vfmaddsubpd %%xmm8,(%%r14),%%xmm6,%%xmm9", 1);
+GEN_test_VFMADDSUBPD_xmm(VFMADDSUBPD)
+
+#define GEN_test_VFMADDSUBPD_ymm(_name) \
+ GEN_test(_name##_ymm, \
+ "vfmaddsubpd %%ymm7,%%ymm8,%%ymm6,%%ymm9", 1); \
+ GEN_test(_name##_ymm_src_dst, \
+ "vfmaddsubpd %%ymm7,%%ymm8,%%ymm9,%%ymm9", 1); \
+ GEN_test(_name##_ymm_mem1, \
+ "vfmaddsubpd (%%r14),%%ymm8,%%ymm6,%%ymm9", 1); \
+ GEN_test(_name##_ymm_mem2, \
+ "vfmaddsubpd %%ymm8,(%%r14),%%ymm6,%%ymm9", 1);
+GEN_test_VFMADDSUBPD_ymm(VFMADDSUBPD)
+
+#define GEN_test_VFMADDSUBPS_xmm(_name) \
+ GEN_test(_name##_xmm, \
+ "vfmaddsubps %%xmm7,%%xmm8,%%xmm6,%%xmm9", 0); \
+ GEN_test(_name##_xmm_src_dst, \
+ "vfmaddsubps %%xmm7,%%xmm8,%%xmm9,%%xmm9", 0); \
+ GEN_test(_name##_xmm_mem1, \
+ "vfmaddsubps (%%r14),%%xmm8,%%xmm6,%%xmm9", 0); \
+ GEN_test(_name##_xmm_mem2, \
+ "vfmaddsubps %%xmm8,(%%r14),%%xmm6,%%xmm9", 0);
+GEN_test_VFMADDSUBPS_xmm(VFMADDSUBPS)
+
+#define GEN_test_VFMADDSUBPS_ymm(_name) \
+ GEN_test(_name##_ymm, \
+ "vfmaddsubps %%ymm7,%%ymm8,%%ymm6,%%ymm9", 0); \
+ GEN_test(_name##_ymm_src_dst, \
+ "vfmaddsubps %%ymm7,%%ymm8,%%ymm9,%%ymm9", 0); \
+ GEN_test(_name##_ymm_mem1, \
+ "vfmaddsubps (%%r14),%%ymm8,%%ymm6,%%ymm9", 0); \
+ GEN_test(_name##_ymm_mem2, \
+ "vfmaddsubps %%ymm8,(%%r14),%%ymm6,%%ymm9", 0);
+GEN_test_VFMADDSUBPS_ymm(VFMADDSUBPS)
+
+#define GEN_test_VFMSUBADDPD_xmm(_name) \
+ GEN_test(_name##_xmm, \
+ "vfmsubaddpd %%xmm7,%%xmm8,%%xmm6,%%xmm9", 1); \
+ GEN_test(_name##_xmm_src_dst, \
+ "vfmsubaddpd %%xmm7,%%xmm8,%%xmm9,%%xmm9", 1); \
+ GEN_test(_name##_xmm_mem1, \
+ "vfmsubaddpd (%%r14),%%xmm8,%%xmm6,%%xmm9", 1); \
+ GEN_test(_name##_xmm_mem2, \
+ "vfmsubaddpd %%xmm8,(%%r14),%%xmm6,%%xmm9", 1);
+GEN_test_VFMSUBADDPD_xmm(VFMSUBADDPD)
+
+#define GEN_test_VFMSUBADDPD_ymm(_name) \
+ GEN_test(_name##_ymm, \
+ "vfmsubaddpd %%ymm7,%%ymm8,%%ymm6,%%ymm9", 1); \
+ GEN_test(_name##_ymm_src_dst, \
+ "vfmsubaddpd %%ymm7,%%ymm8,%%ymm9,%%ymm9", 1); \
+ GEN_test(_name##_ymm_mem1, \
+ "vfmsubaddpd (%%r14),%%ymm8,%%ymm6,%%ymm9", 1); \
+ GEN_test(_name##_ymm_mem2, \
+ "vfmsubaddpd %%ymm8,(%%r14),%%ymm6,%%ymm9", 1);
+GEN_test_VFMSUBADDPD_ymm(VFMSUBADDPD)
+
+#define GEN_test_VFMSUBADDPS_xmm(_name) \
+ GEN_test(_name##_xmm, \
+ "vfmsubaddps %%xmm7,%%xmm8,%%xmm6,%%xmm9", 0); \
+ GEN_test(_name##_xmm_src_dst, \
+ "vfmsubaddps %%xmm7,%%xmm8,%%xmm9,%%xmm9", 0); \
+ GEN_test(_name##_xmm_mem1, \
+ "vfmsubaddps (%%r14),%%xmm8,%%xmm6,%%xmm9", 0); \
+ GEN_test(_name##_xmm_mem2, \
+ "vfmsubaddps %%xmm8,(%%r14),%%xmm6,%%xmm9", 0);
+GEN_test_VFMSUBADDPS_xmm(VFMSUBADDPS)
+
+#define GEN_test_VFMSUBADDPS_ymm(_name) \
+ GEN_test(_name##_ymm, \
+ "vfmsubaddps %%ymm7,%%ymm8,%%ymm6,%%ymm9", 0); \
+ GEN_test(_name##_ymm_src_dst, \
+ "vfmsubaddps %%ymm7,%%ymm8,%%ymm9,%%ymm9", 0); \
+ GEN_test(_name##_ymm_mem1, \
+ "vfmsubaddps (%%r14),%%ymm8,%%ymm6,%%ymm9", 0); \
+ GEN_test(_name##_ymm_mem2, \
+ "vfmsubaddps %%ymm8,(%%r14),%%ymm6,%%ymm9", 0);
+GEN_test_VFMSUBADDPS_ymm(VFMSUBADDPS)
+
+#define GEN_test_VFMSUBPD_xmm(_name) \
+ GEN_test(_name##_xmm, \
+ "vfmsubpd %%xmm7,%%xmm8,%%xmm6,%%xmm9", 1); \
+ GEN_test(_name##_xmm_src_dst, \
+ "vfmsubpd %%xmm7,%%xmm8,%%xmm9,%%xmm9", 1); \
+ GEN_test(_name##_xmm_mem1, \
+ "vfmsubpd (%%r14),%%xmm8,%%xmm6,%%xmm9", 1); \
+ GEN_test(_name##_xmm_mem2, \
+ "vfmsubpd %%xmm8,(%%r14),%%xmm6,%%xmm9", 1);
+GEN_test_VFMSUBPD_xmm(VFMSUBPD)
+
+#define GEN_test_VFMSUBPD_ymm(_name) \
+ GEN_test(_name##_ymm, \
+ "vfmsubpd %%ymm7,%%ymm8,%%ymm6,%%ymm9", 1); \
+ GEN_test(_name##_ymm_src_dst, \
+ "vfmsubpd %%ymm7,%%ymm8,%%ymm9,%%ymm9", 1); \
+ GEN_test(_name##_ymm_mem1, \
+ "vfmsubpd (%%r14),%%ymm8,%%ymm6,%%ymm9", 1); \
+ GEN_test(_name##_ymm_mem2, \
+ "vfmsubpd %%ymm8,(%%r14),%%ymm6,%%ymm9", 1);
+GEN_test_VFMSUBPD_ymm(VFMSUBPD)
+
+#define GEN_test_VFMSUBPS_xmm(_name) \
+ GEN_test(_name##_xmm, \
+ "vfmsubps %%xmm7,%%xmm8,%%xmm6,%%xmm9", 0); \
+ GEN_test(_name##_xmm_src_dst, \
+ "vfmsubps %%xmm7,%%xmm8,%%xmm9,%%xmm9", 0); \
+ GEN_test(_name##_xmm_mem1, \
+ "vfmsubps (%%r14),%%xmm8,%%xmm6,%%xmm9", 0); \
+ GEN_test(_name##_xmm_mem2, \
+ "vfmsubps %%xmm8,(%%r14),%%xmm6,%%xmm9", 0);
+GEN_test_VFMSUBPS_xmm(VFMSUBPS)
+
+#define GEN_test_VFMSUBPS_ymm(_name) \
+ GEN_test(_name##_ymm, \
+ "vfmsubps %%ymm7,%%ymm8,%%ymm6,%%ymm9", 0); \
+ GEN_test(_name##_ymm_src_dst, \
+ "vfmsubps %%ymm7,%%ymm8,%%ymm9,%%ymm9", 0); \
+ GEN_test(_name##_ymm_mem1, \
+ "vfmsubps (%%r14),%%ymm8,%%ymm6,%%ymm9", 0); \
+ GEN_test(_name##_ymm_mem2, \
+ "vfmsubps %%ymm8,(%%r14),%%ymm6,%%ymm9", 0);
+GEN_test_VFMSUBPS_ymm(VFMSUBPS)
+
+#define GEN_test_VFMSUBSD_xmm(_name) \
+ GEN_test(_name##_xmm, \
+ "vfmsubsd %%xmm7,%%xmm8,%%xmm6,%%xmm9", 1); \
+ GEN_test(_name##_xmm_src_dst, \
+ "vfmsubsd %%xmm7,%%xmm8,%%xmm9,%%xmm9", 1); \
+ GEN_test(_name##_xmm_mem1, \
+ "vfmsubsd (%%r14),%%xmm8,%%xmm6,%%xmm9", 1); \
+ GEN_test(_name##_xmm_mem2, \
+ "vfmsubsd %%xmm8,(%%r14),%%xmm6,%%xmm9", 1);
+GEN_test_VFMSUBSD_xmm(VFMSUBSD)
+
+#define GEN_test_VFMSUBSS_xmm(_name) \
+ GEN_test(_name##_xmm, \
+ "vfmsubss %%xmm7,%%xmm8,%%xmm6,%%xmm9", 0); \
+ GEN_test(_name##_xmm_src_dst, \
+ "vfmsubss %%xmm7,%%xmm8,%%xmm9,%%xmm9", 0); \
+ GEN_test(_name##_xmm_mem1, \
+ "vfmsubss (%%r14),%%xmm8,%%xmm6,%%xmm9", 0); \
+ GEN_test(_name##_xmm_mem2, \
+ "vfmsubss %%xmm8,(%%r14),%%xmm6,%%xmm9", 0);
+GEN_test_VFMSUBSS_xmm(VFMSUBSS)
+
+#define GEN_test_VFNMADDPD_xmm(_name) \
+ GEN_test(_name##_xmm, \
+ "vfnmaddpd %%xmm7,%%xmm8,%%xmm6,%%xmm9", 1); \
+ GEN_test(_name##_xmm_src_dst, \
+ "vfnmaddpd %%xmm7,%%xmm8,%%xmm9,%%xmm9", 1); \
+ GEN_test(_name##_xmm_mem1, \
+ "vfnmaddpd (%%r14),%%xmm8,%%xmm6,%%xmm9", 1); \
+ GEN_test(_name##_xmm_mem2, \
+ "vfnmaddpd %%xmm8,(%%r14),%%xmm6,%%xmm9", 1);
+GEN_test_VFNMADDPD_xmm(VFNMADDPD)
+
+#define GEN_test_VFNMADDPD_ymm(_name) \
+ GEN_test(_name##_ymm, \
+ "vfnmaddpd %%ymm7,%%ymm8,%%ymm6,%%ymm9", 1); \
+ GEN_test(_name##_ymm_src_dst, \
+ "vfnmaddpd %%ymm7,%%ymm8,%%ymm9,%%ymm9", 1); \
+ GEN_test(_name##_ymm_mem1, \
+ "vfnmaddpd (%%r14),%%ymm8,%%ymm6,%%ymm9", 1); \
+ GEN_test(_name##_ymm_mem2, \
+ "vfnmaddpd %%ymm8,(%%r14),%%ymm6,%%ymm9", 1);
+GEN_test_VFNMADDPD_ymm(VFNMADDPD)
+
+#define GEN_test_VFNMADDPS_xmm(_name) \
+ GEN_test(_name##_xmm, \
+ "vfnmaddps %%xmm7,%%xmm8,%%xmm6,%%xmm9", 0); \
+ GEN_test(_name##_xmm_src_dst, \
+ "vfnmaddps %%xmm7,%%xmm8,%%xmm9,%%xmm9", 0); \
+ GEN_test(_name##_xmm_mem1, \
+ "vfnmaddps (%%r14),%%xmm8,%%xmm6,%%xmm9", 0); \
+ GEN_test(_name##_xmm_mem2, \
+ "vfnmaddps %%xmm8,(%%r14),%%xmm6,%%xmm9", 0);
+GEN_test_VFNMADDPS_xmm(VFNMADDPS)
+
+#define GEN_test_VFNMADDPS_ymm(_name) \
+ GEN_test(_name##_ymm, \
+ "vfnmaddps %%ymm7,%%ymm8,%%ymm6,%%ymm9", 0); \
+ GEN_test(_name##_ymm_src_dst, \
+ "vfnmaddps %%ymm7,%%ymm8,%%ymm9,%%ymm9", 0); \
+ GEN_test(_name##_ymm_mem1, \
+ "vfnmaddps (%%r14),%%ymm8,%%ymm6,%%ymm9", 0); \
+ GEN_test(_name##_ymm_mem2, \
+ "vfnmaddps %%ymm8,(%%r14),%%ymm6,%%ymm9", 0);
+GEN_test_VFNMADDPS_ymm(VFNMADDPS)
+
+#define GEN_test_VFNMADDSD_xmm(_name) \
+ GEN_test(_name##_xmm, \
+ "vfnmaddsd %%xmm7,%%xmm8,%%xmm6,%%xmm9", 1); \
+ GEN_test(_name##_xmm_src_dst, \
+ "vfnmaddsd %%xmm7,%%xmm8,%%xmm9,%%xmm9", 1); \
+ GEN_test(_name##_xmm_mem1, \
+ "vfnmaddsd (%%r14),%%xmm8,%%xmm6,%%xmm9", 1); \
+ GEN_test(_name##_xmm_mem2, \
+ "vfnmaddsd %%xmm8,(%%r14),%%xmm6,%%xmm9", 1);
+GEN_test_VFNMADDSD_xmm(VFNMADDSD)
+
+#define GEN_test_VFNMADDSS_xmm(_name) \
+ GEN_test(_name##_xmm, \
+ "vfnmaddss %%xmm7,%%xmm8,%%xmm6,%%xmm9", 0); \
+ GEN_test(_name##_xmm_src_dst, \
+ "vfnmaddss %%xmm7,%%xmm8,%%xmm9,%%xmm9", 0); \
+ GEN_test(_name##_xmm_mem1, \
+ "vfnmaddss (%%r14),%%xmm8,%%xmm6,%%xmm9", 0); \
+ GEN_test(_name##_xmm_mem2, \
+ "vfnmaddss %%xmm8,(%%r14),%%xmm6,%%xmm9", 0);
+GEN_test_VFNMADDSS_xmm(VFNMADDSS)
+
+#define GEN_test_VFNMSUBPD_xmm(_name) \
+ GEN_test(_name##_xmm, \
+ "vfnmsubpd %%xmm7,%%xmm8,%%xmm6,%%xmm9", 1); \
+ GEN_test(_name##_xmm_src_dst, \
+ "vfnmsubpd %%xmm7,%%xmm8,%%xmm9,%%xmm9", 1); \
+ GEN_test(_name##_xmm_mem1, \
+ "vfnmsubpd (%%r14),%%xmm8,%%xmm6,%%xmm9", 1); \
+ GEN_test(_name##_xmm_mem2, \
+ "vfnmsubpd %%xmm8,(%%r14),%%xmm6,%%xmm9", 1);
+GEN_test_VFNMSUBPD_xmm(VFNMSUBPD)
+
+#define GEN_test_VFNMSUBPD_ymm(_name) \
+ GEN_test(_name##_ymm, \
+ "vfnmsubpd %%ymm7,%%ymm8,%%ymm6,%%ymm9", 1); \
+ GEN_test(_name##_ymm_src_dst, \
+ "vfnmsubpd %%ymm7,%%ymm8,%%ymm9,%%ymm9", 1); \
+ GEN_test(_name##_ymm_mem1, \
+ "vfnmsubpd (%%r14),%%ymm8,%%ymm6,%%ymm9", 1); \
+ GEN_test(_name##_ymm_mem2, \
+ "vfnmsubpd %%ymm8,(%%r14),%%ymm6,%%ymm9", 1);
+GEN_test_VFNMSUBPD_ymm(VFNMSUBPD)
+
+#define GEN_test_VFNMSUBPS_xmm(_name) \
+ GEN_test(_name##_xmm, \
+ "vfnmsubps %%xmm7,%%xmm8,%%xmm6,%%xmm9", 0); \
+ GEN_test(_name##_xmm_src_dst, \
+ "vfnmsubps %%xmm7,%%xmm8,%%xmm9,%%xmm9", 0); \
+ GEN_test(_name##_xmm_mem1, \
+ "vfnmsubps (%%r14),%%xmm8,%%xmm6,%%xmm9", 0); \
+ GEN_test(_name##_xmm_mem2, \
+ "vfnmsubps %%xmm8,(%%r14),%%xmm6,%%xmm9", 0);
+GEN_test_VFNMSUBPS_xmm(VFNMSUBPS)
+
+#define GEN_test_VFNMSUBPS_ymm(_name) \
+ GEN_test(_name##_ymm, \
+ "vfnmsubps %%ymm7,%%ymm8,%%ymm6,%%ymm9", 0); \
+ GEN_test(_name##_ymm_src_dst, \
+ "vfnmsubps %%ymm7,%%ymm8,%%ymm9,%%ymm9", 0); \
+ GEN_test(_name##_ymm_mem1, \
+ "vfnmsubps (%%r14),%%ymm8,%%ymm6,%%ymm9", 0); \
+ GEN_test(_name##_ymm_mem2, \
+ "vfnmsubps %%ymm8,(%%r14),%%ymm6,%%ymm9", 0);
+GEN_test_VFNMSUBPS_ymm(VFNMSUBPS)
+
+#define GEN_test_VFNMSUBSD_xmm(_name) \
+ GEN_test(_name##_xmm, \
+ "vfnmsubsd %%xmm7,%%xmm8,%%xmm6,%%xmm9", 1); \
+ GEN_test(_name##_xmm_src_dst, \
+ "vfnmsubsd %%xmm7,%%xmm8,%%xmm9,%%xmm9", 1); \
+ GEN_test(_name##_xmm_mem1, \
+ "vfnmsubsd (%%r14),%%xmm8,%%xmm6,%%xmm9", 1); \
+ GEN_test(_name##_xmm_mem2, \
+ "vfnmsubsd %%xmm8,(%%r14),%%xmm6,%%xmm9", 1);
+GEN_test_VFNMSUBSD_xmm(VFNMSUBSD)
+
+#define GEN_test_VFNMSUBSS_xmm(_name) \
+ GEN_test(_name##_xmm, \
+ "vfnmsubss %%xmm7,%%xmm8,%%xmm6,%%xmm9", 0); \
+ GEN_test(_name##_xmm_src_dst, \
+ "vfnmsubss %%xmm7,%%xmm8,%%xmm9,%%xmm9", 0); \
+ GEN_test(_name##_xmm_mem1, \
+ "vfnmsubss (%%r14),%%xmm8,%%xmm6,%%xmm9", 0); \
+ GEN_test(_name##_xmm_mem2, \
+ "vfnmsubss %%xmm8,(%%r14),%%xmm6,%%xmm9", 0);
+GEN_test_VFNMSUBSS_xmm(VFNMSUBSS)
+
+#define DO_test_block(_name, _sub, _bname, _block) \
+ test_##_name##_##_sub(_bname,_block);
+
+#define DO_test(_name, _sub, _isD) { \
+ Block* b = memalign32(sizeof(Block)); \
+ oneBlock(b); \
+ DO_test_block(_name, _sub, "ones", b); \
+ if (_isD) { \
+ specialDBlock(b); \
+ DO_test_block(_name, _sub, "specialD", b); \
+ } else { \
+ specialFBlock(b); \
+ DO_test_block(_name, _sub, "specialF", b); \
+ } \
+ randBlock(b); \
+ DO_test_block(_name, _sub, "rand", b); \
+ free(b); \
+}
+
+#define DO_tests_xmm(_name,_isD) \
+ DO_test(_name, xmm, _isD); \
+ DO_test(_name, xmm_src_dst, _isD); \
+ DO_test(_name, xmm_mem1, _isD); \
+ DO_test(_name, xmm_mem2, _isD);
+
+#define DO_tests_ymm(_name,_isD) \
+ DO_test(_name, ymm, _isD); \
+ DO_test(_name, ymm_src_dst, _isD); \
+ DO_test(_name, ymm_mem1, _isD); \
+ DO_test(_name, ymm_mem2, _isD);
+
+int main ( void )
+{
+ init_special_values();
+
+ // 128
+ DO_tests_xmm(VFMADDPD, 1);
+ DO_tests_xmm(VFMADDPS, 0);
+ DO_tests_xmm(VFMADDSD, 1);
+ DO_tests_xmm(VFMADDSS, 0);
+ DO_tests_xmm(VFMADDSUBPD, 1);
+ DO_tests_xmm(VFMADDSUBPS, 0);
+ DO_tests_xmm(VFMSUBADDPD, 1);
+ DO_tests_xmm(VFMSUBADDPS, 0);
+ DO_tests_xmm(VFMSUBPD, 1);
+ DO_tests_xmm(VFMSUBPS, 0);
+ DO_tests_xmm(VFMSUBSD, 1);
+ DO_tests_xmm(VFMSUBSS, 0);
+ DO_tests_xmm(VFNMADDPD, 1);
+ DO_tests_xmm(VFNMADDPS, 0);
+ DO_tests_xmm(VFNMADDSD, 1);
+ DO_tests_xmm(VFNMADDSS, 0);
+ DO_tests_xmm(VFNMSUBPD, 1);
+ DO_tests_xmm(VFNMSUBPS, 0);
+ DO_tests_xmm(VFNMSUBSD, 1);
+ DO_tests_xmm(VFNMSUBSS, 0);
+
+ // 256
+ /*
+ DO_tests_ymm(VFMADDPD, 1);
+ DO_tests_ymm(VFMADDPS, 0);
+ DO_tests_ymm(VFMADDSUBPD, 1);
+ DO_tests_ymm(VFMADDSUBPS, 0);
+ DO_tests_ymm(VFMSUBADDPD, 1);
+ DO_tests_ymm(VFMSUBADDPS, 0);
+ DO_tests_ymm(VFMSUBPD, 1);
+ DO_tests_ymm(VFMSUBPS, 0);
+ DO_tests_ymm(VFNMADDPD, 1);
+ DO_tests_ymm(VFNMADDPS, 0);
+ DO_tests_ymm(VFNMSUBPD, 1);
+ DO_tests_ymm(VFNMSUBPS, 0);
+ */
+
+ return 0;
+}
Added: trunk/none/tests/amd64/fma4.stderr.exp
==============================================================================
(empty)
Added: trunk/none/tests/amd64/fma4.stdout.exp
==============================================================================
--- trunk/none/tests/amd64/fma4.stdout.exp (added)
+++ trunk/none/tests/amd64/fma4.stdout.exp Mon Sep 19 13:41:38 2016
@@ -0,0 +1,3360 @@
+VFMADDPD_xmm ones
+ before
+r1: 0101010101010101.0101010101010101.0101010101010101.0101010101010101
+r2: 0101010101010101.0101010101010101.0101010101010101.0101010101010101
+r3: 0101010101010101.0101010101010101.0101010101010101.0101010101010101
+r4: 0101010101010101.0101010101010101.0101010101010101.0101010101010101
+ m: 0101010101010101.0101010101010101.0101010101010101.0101010101010101
+ after
+r1: 0101010101010101.0101010101010101.0101010101010101.0101010101010101
+r2: 0101010101010101.0101010101010101.0101010101010101.0101010101010101
+r3: 0101010101010101.0101010101010101.0101010101010101.0101010101010101
+r4: [ ZERO ].[ ZERO ].0101010101010101.0101010101010101
+ m: 0101010101010101.0101010101010101.0101010101010101.0101010101010101
+
+VFMADDPD_xmm specialD
+ before
+r1: bff0000000000000.3ff0000000000000.[ -ZERO ].[ ZERO ]
+r2: [ NAN ].[ NAN ].[ -INF ].[ INF ]
+r3: [ -ZERO ].[ ZERO ].[ -SUBNORMAL ].[ SUBNORMAL ]
+r4: [ -INF ].[ INF ].bff0000000000000.3ff0000000000000
+ m: [ -SUBNORMAL ].[ SUBNORMAL ].[ NAN ].[ NAN ]
+ after
+r1: bff0000000000000.3ff0000000000000.[ -ZERO ].[ ZERO ]
+r2: [ NAN ].[ NAN ].[ -INF ].[ INF ]
+r3: [ -ZERO ].[ ZERO ].[ -SUBNORMAL ].[ SUBNORMAL ]
+r4: [ ZERO ].[ ZERO ].[ INF ].[ INF ]
+ m: [ -SUBNORMAL ].[ SUBNORMAL ].[ NAN ].[ NAN ]
+
+VFMADDPD_xmm rand
+ before
+r1: 7d6528c5fa956a0d.69c3e9a6af27d13b.5175e39d19c9ca1e.98f24a4984175700
+r2: b6d2fb5aa7bc5127.fe9915e556a044b2.60b160857d45c484.47b8d8c0eeef1e50
+r3: 065d77195d623e6b.842adc6450659e17.19a348215c3a67fd.399182c2dbcc2d38
+r4: cb509970b8136c85.d740b80eb7839b97.d89998df5035ed36.4a4bc43968bc40e5
+ m: 5ff85bc9535c191f.d3a727d1a705f65d.f9dd4a29f8c093db.56b01a12b0ca1583
+ after
+r1: 7d6528c5fa956a0d.69c3e9a6af27d13b.5175e39d19c9ca1e.98f24a4984175700
+r2: b6d2fb5aa7bc5127.fe9915e556a044b2.60b160857d45c484.47b8d8c0eeef1e50
+r3: 065d77195d623e6b.842adc6450659e17.19a348215c3a67fd.399182c2dbcc2d38
+r4: [ ZERO ].[ ZERO ].5175e39d19c9ca1e.415b315cb6ea9ab9
+ m: 5ff85bc9535c191f.d3a727d1a705f65d.f9dd4a29f8c093db.56b01a12b0ca1583
+
+VFMADDPD_xmm_src_dst ones
+ before
+r1: 0101010101010101.0101010101010101.0101010101010101.0101010101010101
+r2: 0101010101010101.0101010101010101.0101010101010101.0101010101010101
+r3: 0101010101010101.0101010101010101.0101010101010101.0101010101010101
+r4: 0101010101010101.0101010101010101.0101010101010101.0101010101010101
+ m: 0101010101010101.0101010101010101.0101010101010101.0101010101010101
+ after
+r1: 0101010101010101.0101010101010101.0101010101010101.0101010101010101
+r2: 0101010101010101.0101010101010101.0101010101010101.0101010101010101
+r3: 0101010101010101.0101010101010101.0101010101010101.0101010101010101
+r4: [ ZERO ].[ ZERO ].0101010101010101.0101010101010101
+ m: 0101010101010101.0101010101010101.0101010101010101.0101010101010101
+
+VFMADDPD_xmm_src_dst specialD
+ before
+r1: bff0000000000000.3ff0000000000000.[ -ZERO ].[ ZERO ]
+r2: [ NAN ].[ NAN ].[ -INF ].[ INF ]
+r3: [ -ZERO ].[ ZERO ].[ -SUBNORMAL ].[ SUBNORMAL ]
+r4: [ -INF ].[ INF ].bff0000000000000.3ff0000000000000
+ m: [ -SUBNORMAL ].[ SUBNORMAL ].[ NAN ].[ NAN ]
+ after
+r1: bff0000000000000.3ff0000000000000.[ -ZERO ].[ ZERO ]
+r2: [ NAN ].[ NAN ].[ -INF ].[ INF ]
+r3: [ -ZERO ].[ ZERO ].[ -SUBNORMAL ].[ SUBNORMAL ]
+r4: [ ZERO ].[ ZERO ].[ INF ].[ INF ]
+ m: [ -SUBNORMAL ].[ SUBNORMAL ].[ NAN ].[ NAN ]
+
+VFMADDPD_xmm_src_dst rand
+ before
+r1: 20a1bb92cbc97fe8.542da4983df76c96.d8bc5c6dee699597.398e0039cf03663d
+r2: 6897b536bbe4da8a.369dab4f9465b86e.d182c916cebc2e17.cfaff39be272ef40
+r3: 95264321bf3b68b2.55c2b9e2c95c9810.407b8d9035449b06.f4e06e2205236eb7
+r4: 019963bf7459630b.8d69483df7e8c6a9.81f2a547be8d1811.84ededbc53239dcf
+ m: 0a3e0f7c75cb0842.b95ed64d3b13ff64.f0350ca70523e0e4.5ba1ec54e87d39b3
+ after
+r1: 20a1bb92cbc97fe8.542da4983df76c96.d8bc5c6dee699597.398e0039cf03663d
+r2: 6897b536bbe4da8a.369dab4f9465b86e.d182c916cebc2e17.cfaff39be272ef40
+r3: 95264321bf3b68b2.55c2b9e2c95c9810.407b8d9035449b06.f4e06e2205236eb7
+r4: [ ZERO ].[ ZERO ].d8bc5c6dee699597.398e0039cf03663d
+ m: 0a3e0f7c75cb0842.b95ed64d3b13ff64.f0350ca70523e0e4.5ba1ec54e87d39b3
+
+VFMADDPD_xmm_mem1 ones
+ before
+r1: 0101010101010101.0101010101010101.0101010101010101.0101010101010101
+r2: 0101010101010101.0101010101010101.0101010101010101.0101010101010101
+r3: 0101010101010101.0101010101010101.0101010101010101.0101010101010101
+r4: 0101010101010101.0101010101010101.0101010101010101.0101010101010101
+ m: 0101010101010101.0101010101010101.0101010101010101.0101010101010101
+ after
+r1: 0101010101010101.0101010101010101.0101010101010101.0101010101010101
+r2: 0101010101010101.0101010101010101.0101010101010101.0101010101010101
+r3: 0101010101010101.0101010101010101.0101010101010101.0101010101010101
+r4: [ ZERO ].[ ZERO ].0101010101010101.0101010101010101
+ m: 0101010101010101.0101010101010101.0101010101010101.0101010101010101
+
+VFMADDPD_xmm_mem1 specialD
+ before
+r1: bff0000000000000.3ff0000000000000.[ -ZERO ].[ ZERO ]
+r2: [ NAN ].[ NAN ].[ -INF ].[ INF ]
+r3: [ -ZERO ].[ ZERO ].[ -SUBNORMAL ].[ SUBNORMAL ]
+r4: [ -INF ].[ INF ].bff0000000000000.3ff0000000000000
+ m: [ -SUBNORMAL ].[ SUBNORMAL ].[ NAN ].[ NAN ]
+ after
+r1: bff0000000000000.3ff0000000000000.[ -ZERO ].[ ZERO ]
+r2: [ NAN ].[ NAN ].[ -INF ].[ INF ]
+r3: [ -ZERO ].[ ZERO ].[ -SUBNORMAL ].[ SUBNORMAL ]
+r4: [ ZERO ].[ ZERO ].[ NAN ].[ NAN ]
+ m: [ -SUBNORMAL ].[ SUBNORMAL ].[ NAN ].[ NAN ]
+
+VFMADDPD_xmm_mem1 rand
+ before
+r1: 0a5f45c55f1c9202.b76ddefcb0ebfe6e.e98ebd1ca893312a.54cae7d5e13dfe91
+r2: 5f490104ced83ff8.6262dd37727c80f3.c84ab71340684590.4d325b2d5a70a792
+r3: 63483da65c8c49d0.96084deb9ed0411e.e9b5f3f66b2e58c1.21a6c3476d21f1e5
+r4: 73a8f718a8c3ec35.2e2dac0350f6fd1c.a81b6e33c572a86a.acf29b0f395c98b4
+ m: ecb42ac54b0966d4.089b756aa3f77018.61c82534e9bf6f37.c9e25f72d82e582b
+ after
+r1: 0a5f45c55f1c9202.b76ddefcb0ebfe6e.e98ebd1ca893312a.54cae7d5e13dfe91
+r2: 5f490104ced83ff8.6262dd37727c80f3.c84ab71340684590.4d325b2d5a70a792
+r3: 63483da65c8c49d0.96084deb9ed0411e.e9b5f3f66b2e58c1.21a6c3476d21f1e5
+r4: [ ZERO ].[ ZERO ].721253d095545e3c.c9e25f72d82e582b
+ m: ecb42ac54b0966d4.089b756aa3f77018.61c82534e9bf6f37.c9e25f72d82e582b
+
+VFMADDPD_xmm_mem2 ones
+ before
+r1: 0101010101010101.0101010101010101.0101010101010101.0101010101010101
+r2: 0101010101010101.0101010101010101.0101010101010101.0101010101010101
+r3: 0101010101010101.0101010101010101.0101010101010101.0101010101010101
+r4: 0101010101010101.0101010101010101.0101010101010101.0101010101010101
+ m: 0101010101010101.0101010101010101.0101010101010101.0101010101010101
+ after
+r1: 0101010101010101.0101010101010101.0101010101010101.0101010101010101
+r2: 0101010101010101.0101010101010101.0101010101010101.0101010101010101
+r3: 0101010101010101.0101010101010101.0101010101010101.0101010101010101
+r4: [ ZERO ].[ ZERO ].0101010101010101.0101010101010101
+ m: 0101010101010101.0101010101010101.0101010101010101.0101010101010101
+
+VFMADDPD_xmm_mem2 specialD
+ before
+r1: bff0000000000000.3ff0000000000000.[ -ZERO ].[ ZERO ]
+r2: [ NAN ].[ NAN ].[ -INF ].[ INF ]
+r3: [ -ZERO ].[ ZERO ].[ -SUBNORMAL ].[ SUBNORMAL ]
+r4: [ -INF ].[ INF ].bff0000000000000.3ff0000000000000
+ m: [ -SUBNORMAL ].[ SUBNORMAL ].[ NAN ].[ NAN ]
+ after
+r1: bff0000000000000.3ff0000000000000.[ -ZERO ].[ ZERO ]
+r2: [ NAN ].[ NAN ].[ -INF ].[ INF ]
+r3: [ -ZERO ].[ ZERO ].[ -SUBNORMAL ].[ SUBNORMAL ]
+r4: [ ZERO ].[ ZERO ].[ NAN ].[ NAN ]
+ m: [ -SUBNORMAL ].[ SUBNORMAL ].[ NAN ].[ NAN ]
+
+VFMADDPD_xmm_mem2 rand
+ before
+r1: 28bad218e4ebf159.ff1f240eb3e1553f.6f07136773a2ead3.56428c5a66a2ec77
+r2: 8404eb7f0cf4ca6f.ee8536da9dbf68bc.3026343700a654eb.2ddd9db4ffc411c4
+r3: 5cdf726562b02dc2.b39925ba7d9d67bc.ff6f850f2c57ea2a.2c810e6dc1a1833d
+r4: 0c9761367fac55ff.28276f9a6e880c6b.372f015d9242e83d.2ef85b6fc544fd0f
+ m: f078b65e01737fd2.2bfa8f668c8b14f4.36b2a38dcef18acf.0e0f01a829ba3c66
+ after
+r1: 28bad218e4ebf159.ff1f240eb3e1553f.6f07136773a2ead3.56428c5a66a2ec77
+r2: 8404eb7f0cf4ca6f.ee8536da9dbf68bc.3026343700a654eb.2ddd9db4ffc411c4
+r3: 5cdf726562b02dc2.b39925ba7d9d67bc.ff6f850f2c57ea2a.2c810e6dc1a1833d
+r4: [ ZERO ].[ ZERO ].f6325bf1fc5cab6d.2ddd9db4ffc411c4
+ m: f078b65e01737fd2.2bfa8f668c8b14f4.36b2a38dcef18acf.0e0f01a829ba3c66
+
+VFMADDPS_xmm ones
+ before
+r1: 01010101.01010101.01010101.01010101.01010101.01010101.01010101.01010101
+r2: 01010101.01010101.01010101.01010101.01010101.01010101.01010101.01010101
+r3: 01010101.01010101.01010101.01010101.01010101.01010101.01010101.01010101
+r4: 01010101.01010101.01010101.01010101.01010101.01010101.01010101.01010101
+ m: 01010101.01010101.01010101.01010101.01010101.01010101.01010101.01010101
+ after
+r1: 01010101.01010101.01010101.01010101.01010101.01010101.01010101.01010101
+r2: 01010101.01010101.01010101.01010101.01010101.01010101.01010101.01010101
+r3: 01010101.01010101.01010101.01010101.01010101.01010101.01010101.01010101
+r4: [ ZERO ].[ ZERO ].[ ZERO ].[ ZERO ].01010101.01010101.01010101.01010101
+ m: 01010101.01010101.01010101.01010101.01010101.01010101.01010101.01010101
+
+VFMADDPS_xmm specialF
+ before
+r1: [ NAN ].[ NAN ].[ -INF ].[ INF ].bf800000.3f800000.[-ZERO ].[ ZERO ]
+r2: [ -INF ].[ INF ].bf800000.3f800000.[-ZERO ].[ ZERO ].[-ZERO ].[ ZERO ]
+r3: bf800000.3f800000.[-ZERO ].[ ZERO ].[-ZERO ].[ ZERO ].[ NAN ].[ NAN ]
+r4: [-ZERO ].[ ZERO ].[-ZERO ].[ ZERO ].[ NAN ].[ NAN ].[ -INF ].[ INF ]
+ m: [-ZERO ].[ ZERO ].[ NAN ].[ NAN ].[ -INF ].[ INF ].bf800000.3f800000
+ after
+r1: [ NAN ].[ NAN ].[ -INF ].[ INF ].bf800000.3f800000.[-ZERO ].[ ZERO ]
+r2: [ -INF ].[ INF ].bf800000.3f800000.[-ZERO ].[ ZERO ].[-ZERO ].[ ZERO ]
+r3: bf800000.3f800000.[-ZERO ].[ ZERO ].[-ZERO ].[ ZERO ].[ NAN ].[ NAN ]
+r4: [ ZERO ].[ ZERO ].[ ZERO ].[ ZERO ].bf800000.3f800000.[ NAN ].[ NAN ]
+ m: [-ZERO ].[ ZERO ].[ NAN ].[ NAN ].[ -INF ].[ INF ].bf800000.3f800000
+
+VFMADDPS_xmm rand
+ before
+r1: 65ce6d49.8492e7e7.96df010b.f4b23b84.57436a09.7df30b8d.aa927a03.090dfc6d
+r2: c5e48064.a393c8e9.47a34273.c10a3c47.f5304f3e.3ad1a923.dc4c446c.[-SUBNR]
+r3: 6d08ed19.fa045f84.1810cd8c.109ed568.6ec34f98.a2199d3c.810bdacf.ab80ee3d
+r4: b984aed6.2671e865.e6f21d40.fc7bc013.1c4a6784.50562685.769ab818.a5b7985e
+ m: 05a5c205.c3659f38.8e17b17d.a2acb976.5d0f926c.e1157eaa.95c45b33.8afcb3df
+ after
+r1: 65ce6d49.8492e7e7.96df010b.f4b23b84.57436a09.7df30b8d.aa927a03.090dfc6d
+r2: c5e48064.a393c8e9.47a34273.c10a3c47.f5304f3e.3ad1a923.dc4c446c.[-SUBNR]
+r3: 6d08ed19.fa045f84.1810cd8c.109ed568.6ec34f98.a2199d3c.810bdacf.ab80ee3d
+r4: [ ZERO ].[ ZERO ].[ ZERO ].[ ZERO ].[ -INF ].7df30b8d.aa927a03.090dfc6d
+ m: 05a5c205.c3659f38.8e17b17d.a2acb976.5d0f926c.e1157eaa.95c45b33.8afcb3df
+
+VFMADDPS_xmm_src_dst ones
+ before
+r1: 01010101.01010101.01010101.01010101.01010101.01010101.01010101.01010101
+r2: 01010101.01010101.01010101.01010101.01010101.01010101.01010101.01010101
+r3: 01010101.01010101.01010101.01010101.01010101.01010101.01010101.01010101
+r4: 01010101.01010101.01010101.01010101.01010101.01010101.01010101.01010101
+ m: 01010101.01010101.01010101.01010101.01010101.01010101.01010101.01010101
+ after
+r1: 01010101.01010101.01010101.01010101.01010101.01010101.01010101.01010101
+r2: 01010101.01010101.01010101.01010101.01010101.01010101.01010101.01010101
+r3: 01010101.01010101.01010101.01010101.01010101.01010101.01010101.01010101
+r4: [ ZERO ].[ ZERO ].[ ZERO ].[ ZERO ].01010101.01010101.01010101.01010101
+ m: 01010101.01010101.01010101.01010101.01010101.01010101.01010101.01010101
+
+VFMADDPS_xmm_src_dst specialF
+ before
+r1: [ NAN ].[ NAN ].[ -INF ].[ INF ].bf800000.3f800000.[-ZERO ].[ ZERO ]
+r2: [ -INF ].[ INF ].bf800000.3f800000.[-ZERO ].[ ZERO ].[-ZERO ].[ ZERO ]
+r3: bf800000.3f800000.[-ZERO ].[ ZERO ].[-ZERO ].[ ZERO ].[ NAN ].[ NAN ]
+r4: [-ZERO ].[ ZERO ].[-ZERO ].[ ZERO ].[ NAN ].[ NAN ].[ -INF ].[ INF ]
+ m: [-ZERO ].[ ZERO ].[ NAN ].[ NAN ].[ -INF ].[ INF ].bf800000.3f800000
+ after
+r1: [ NAN ].[ NAN ].[ -INF ].[ INF ].bf800000.3f800000.[-ZERO ].[ ZERO ]
+r2: [ -INF ].[ INF ].bf800000.3f800000.[-ZERO ].[ ZERO ].[-ZERO ].[ ZERO ]
+r3: bf800000.3f800000.[-ZERO ].[ ZERO ].[-ZERO ].[ ZERO ].[ NAN ].[ NAN ]
+r4: [ ZERO ].[ ZERO ].[ ZERO ].[ ZERO ].[ NAN ].[ NAN ].[ NAN ].[ NAN ]
+ m: [-ZERO ].[ ZERO ].[ NAN ].[ NAN ].[ -INF ].[ INF ].bf800000.3f800000
+
+VFMADDPS_xmm_src_dst rand
+ before
+r1: acb72214.6c6cbfa9.ea4a022e.1d3d7dbb.8b5fccbe.f0e1e256.bc563e0c.775bfaed
+r2: 0c05cb6e.bd128663.d7568e3e.8a3ac80e.048612e5.1a468e36.c51cdd8f.87e12ab4
+r3: 80ddba7e.53e42d12.3208cf9b.04b0569c.22cf5e4c.fad1bdf5.8de2b4a9.d799ff5f
+r4: 6489eab2.c96df363.d52c4330.a7aae391.4288ae61.2c0dad40.f0733f44.8390351b
+ m: 14575775.bc3a1202.9d8e66ea.90352a18.c1fbfd8f.4d8698c2.cb9dfb4e.a5d18713
+ after
+r1: acb72214.6c6cbfa9.ea4a022e.1d3d7dbb.8b5fccbe.f0e1e256.bc563e0c.775bfaed
+r2: 0c05cb6e.bd128663.d7568e3e.8a3ac80e.048612e5.1a468e36.c51cdd8f.87e12ab4
+r3: 80ddba7e.53e42d12.3208cf9b.04b0569c.22cf5e4c.fad1bdf5.8de2b4a9.d799ff5f
+r4: [ ZERO ].[ ZERO ].[ ZERO ].[ ZERO ].8b5eae69.f0e1e256.76150d13.775bfaed
+ m: 14575775.bc3a1202.9d8e66ea.90352a18.c1fbfd8f.4d8698c2.cb9dfb4e.a5d18713
+
+VFMADDPS_xmm_mem1 ones
+ before
+r1: 01010101.01010101.01010101.01010101.01010101.01010101.01010101.01010101
+r2: 01010101.01010101.01010101.01010101.01010101.01010101.01010101.01010101
+r3: 01010101.01010101.01010101.01010101.01010101.01010101.01010101.01010101
+r4: 01010101.01010101.01010101.01010101.01010101.01010101.01010101.01010101
+ m: 01010101.01010101.01010101.01010101.01010101.01010101.01010101.01010101
+ after
+r1: 01010101.01010101.01010101.01010101.01010101.01010101.01010101.01010101
+r2: 01010101.01010101.01010101.01010101.01010101.01010101.01010101.01010101
+r3: 01010101.01010101.01010101.01010101.01010101.01010101.01010101.01010101
+r4: [ ZERO ].[ ZERO ].[ ZERO ].[ ZERO ].01010101.01010101.01010101.01010101
+ m: 01010101.01010101.01010101.01010101.01010101.01010101.01010101.01010101
+
+VFMADDPS_xmm_mem1 specialF
+ before
+r1: [ NAN ].[ NAN ].[ -INF ].[ INF ].bf800000.3f800000.[-ZERO ].[ ZERO ]
+r2: [ -INF ].[ INF ].bf800000.3f800000.[-ZERO ].[ ZERO ].[-ZERO ].[ ZERO ]
+r3: bf800000.3f800000.[-ZERO ].[ ZERO ].[-ZERO ].[ ZERO ].[ NAN ].[ NAN ]
+r4: [-ZERO ].[ ZERO ].[-ZERO ].[ ZERO ].[ NAN ].[ NAN ].[ -INF ].[ INF ]
+ m: [-ZERO ].[ ZERO ].[ NAN ].[ NAN ].[ -INF ].[ INF ].bf800000.3f800000
+ after
+r1: [ NAN ].[ NAN ].[ -INF ].[ INF ].bf800000.3f800000.[-ZERO ].[ ZERO ]
+r2: [ -INF ].[ INF ].bf800000.3f800000.[-ZERO ].[ ZERO ].[-ZERO ].[ ZERO ]
+r3: bf800000.3f800000.[-ZERO ].[ ZERO ].[-ZERO ].[ ZERO ].[ NAN ].[ NAN ]
+r4: [ ZERO ].[ ZERO ].[ ZERO ].[ ZERO ].[ -INF ].[ INF ].[ NAN ].[ NAN ]
+ m: [-ZERO ].[ ZERO ].[ NAN ].[ NAN ].[ -INF ].[ INF ].bf800000.3f800000
+
+VFMADDPS_xmm_mem1 rand
+ before
+r1: ec91fe34.c7d6c79a.66fab2b3.db5ce85e.f9754842.f9c9ba28.f82a63b1.5c68b274
+r2: 4784d959.87cd4ed8.0c3ca578.a32bd88e.474289e7.cb61501e.54e7f35b.c162726a
+r3: 837be651.97abe268.6b1fba26.04afb8d5.08aebee8.5fda964f.bba02737.f3c98220
+r4: fbc42088.94fdc0f5.5f706da7.1bf2425f.9605e2b2.52c1c868.09217c31.0baca0c3
+ m: 0aaa836b.194e242c.c5fc3ae9.04033357.4e92f1b2.40a12214.1a366d35.2714867e
+ after
+r1: ec91fe34.c7d6c79a.66fab2b3.db5ce85e.f9754842.f9c9ba28.f82a63b1.5c68b274
+r2: 4784d959.87cd4ed8.0c3ca578.a32bd88e.474289e7.cb61501e.54e7f35b.c162726a
+r3: 837be651.97abe268.6b1fba26.04afb8d5.08aebee8.5fda964f.bba02737.f3c98220
+r4: [ ZERO ].[ ZERO ].[ ZERO ].[ ZERO ].4e92f1b2.ebc06284.d1111ba1.75b23ef0
+ m: 0aaa836b.194e242c.c5fc3ae9.04033357.4e92f1b2.40a12214.1a366d35.2714867e
+
+VFMADDPS_xmm_mem2 ones
+ before
+r1: 01010101.01010101.01010101.01010101.01010101.01010101.01010101.01010101
+r2: 01010101.01010101.01010101.01010101.01010101.01010101.01010101.01010101
+r3: 01010101.01010101.01010101.01010101.01010101.01010101.01010101.01010101
+r4: 01010101.01010101.01010101.01010101.01010101.01010101.01010101.01010101
+ m: 01010101.01010101.01010101.01010101.01010101.01010101.01010101.01010101
+ after
+r1: 01010101.01010101.01010101.01010101.01010101.01010101.01010101.01010101
+r2: 01010101.01010101.01010101.01010101.01010101.01010101.01010101.01010101
+r3: 01010101.01010101.01010101.01010101.01010101.01010101.01010101.01010101
+r4: [ ZERO ].[ ZERO ].[ ZERO ].[ ZERO ].01010101.01010101.01010101.01010101
+ m: 01010101.01010101.01010101.01010101.01010101.01010101.01010101.01010101
+
+VFMADDPS_xmm_mem2 specialF
+ before
+r1: [ NAN ].[ NAN ].[ -INF ].[ INF ].bf800000.3f800000.[-ZERO ].[ ZERO ]
+r2: [ -INF ].[ INF ].bf800000.3f800000.[-ZERO ].[ ZERO ].[-ZERO ].[ ZERO ]
+r3: bf800000.3f800000.[-ZERO ].[ ZERO ].[-ZERO ].[ ZERO ].[ NAN ].[ NAN ]
+r4: [-ZERO ].[ ZERO ].[-ZERO ].[ ZERO ].[ NAN ].[ NAN ].[ -INF ].[ INF ]
+ m: [-ZERO ].[ ZERO ].[ NAN ].[ NAN ].[ -INF ].[ INF ].bf800000.3f800000
+ after
+r1: [ NAN ].[ NAN ].[ -INF ].[ INF ].bf800000.3f800000.[-ZERO ].[ ZERO ]
+r2: [ -INF ].[ INF ].bf800000.3f800000.[-ZERO ].[ ZERO ].[-ZERO ].[ ZERO ]
+r3: bf800000.3f800000.[-ZERO ].[ ZERO ].[-ZERO ].[ ZERO ].[ NAN ].[ NAN ]
+r4: [ ZERO ].[ ZERO ].[ ZERO ].[ ZERO ].[ NAN ].[ NAN ].[ NAN ].[ NAN ]
+ m: [-ZERO ].[ ZERO ].[ NAN ].[ NAN ].[ -INF ].[ INF ].bf800000.3f800000
+
+VFMADDPS_xmm_mem2 rand
+ before
+r1: 0e780c65.c22b4ab8.778d9ed6.d9eb46ea.8ca3e752.c306df00.caab752f.630ff07e
+r2: 627bb6e1.2d1f6d46.51ef145c.b9b83843.ac82c100.7a7d3cd8.f54b130c.daa89cef
+r3: 61ff7d4d.f3b6ca81.31f01866.bd76c58f.0a7c7a27.fe917447.77e3c0b6.a9ec44fc
+r4: 69505d14.b27d9d16.f25b26e0.042fa9fa.02dd0e32.eecfc5fa.2c3ffa1a.ebe6a4d2
+ m: d4ba52a2.06ff21b1.70fbbab6.a7f19faf.f0f1798f.e3c1699c.f02b3b25.bca27a9c
+ after
+r1: 0e780c65.c22b4ab8.778d9ed6.d9eb46ea.8ca3e752.c306df00.caab752f.630ff07e
+r2: 627bb6e1.2d1f6d46.51ef145c.b9b83843.ac82c100.7a7d3cd8.f54b130c.daa89cef
+r3: 61ff7d4d.f3b6ca81.31f01866.bd76c58f.0a7c7a27.fe917447.77e3c0b6.a9ec44fc
+r4: [ ZERO ].[ ZERO ].[ ZERO ].[ ZERO ].bbee26e1.[ INF ].[ -INF ].daa89cef
+ m: d4ba52a2.06ff21b1.70fbbab6.a7f19faf.f0f1798f.e3c1699c.f02b3b25.bca27a9c
+
+VFMADDSD_xmm ones
+ before
+r1: 0101010101010101.0101010101010101.0101010101010101.0101010101010101
+r2: 0101010101010101.0101010101010101.0101010101010101.0101010101010101
+r3: 0101010101010101.0101010101010101.0101010101010101.0101010101010101
+r4: 0101010101010101.0101010101010101.0101010101010101.0101010101010101
+ m: 0101010101010101.0101010101010101.0101010101010101.0101010101010101
+ after
+r1: 0101010101010101.0101010101010101.0101010101010101.0101010101010101
+r2: 0101010101010101.0101010101010101.0101010101010101.0101010101010101
+r3: 0101010101010101.0101010101010101.0101010101010101.0101010101010101
+r4: [ ZERO ].[ ZERO ].[ ZERO ].0101010101010101
+ m: 0101010101010101.0101010101010101.0101010101010101.0101010101010101
+
+VFMADDSD_xmm specialD
+ before
+r1: bff0000000000000.3ff0000000000000.[ -ZERO ].[ ZERO ]
+r2: [ NAN ].[ NAN ].[ -INF ].[ INF ]
+r3: [ -ZERO ].[ ZERO ].[ -SUBNORMAL ].[ SUBNORMAL ]
+r4: [ -INF ].[ INF ].bff0000000000000.3ff0000000000000
+ m: [ -SUBNORMAL ].[ SUBNORMAL ].[ NAN ].[ NAN ]
+ after
+r1: bff0000000000000.3ff0000000000000.[ -ZERO ].[ ZERO ]
+r2: [ NAN ].[ NAN ].[ -INF ].[ INF ]
+r3: [ -ZERO ].[ ZERO ].[ -SUBNORMAL ].[ SUBNORMAL ]
+r4: [ ZERO ].[ ZERO ].[ ZERO ].[ INF ]
+ m: [ -SUBNORMAL ].[ SUBNORMAL ].[ NAN ].[ NAN ]
+
+VFMADDSD_xmm rand
+ before
+r1: 0088596389c893fd.879d51d4c5c764db.3004b7a97cf69dda.9f7301c1392d8087
+r2: 47086cc3da642fa7.130d662777beb4a9.1e61c5ec52f79c60.15e3c8dc7e9273bf
+r3: 0784892e9360315b.f0177599dbe14b46.16559ec50352a3d9.2d460a61a5dd0f6f
+r4: 9a49ac115048d4c4.f987fa170d3ce4dd.742c3e9e2b92eef2.c569453ccd1b0fc4
+ m: 5da3cfd6aea6558e.0c28728e28dc3c9c.9432a2e46543b956.b819f459105730e9
+ after
+r1: 0088596389c893fd.879d51d4c5c764db.3004b7a97cf69dda.9f7301c1392d8087
+r2: 47086cc3da642fa7.130d662777beb4a9.1e61c5ec52f79c60.15e3c8dc7e9273bf
+r3: 0784892e9360315b.f0177599dbe14b46.16559ec50352a3d9.2d460a61a5dd0f6f
+r4: [ ZERO ].[ ZERO ].[ ZERO ].9f7301c1392d8087
+ m: 5da3cfd6aea6558e.0c28728e28dc3c9c.9432a2e46543b956.b819f459105730e9
+
+VFMADDSD_xmm_src_dst ones
+ before
+r1: 0101010101010101.0101010101010101.0101010101010101.0101010101010101
+r2: 0101010101010101.0101010101010101.0101010101010101.0101010101010101
+r3: 0101010101010101.0101010101010101.0101010101010101.0101010101010101
+r4: 0101010101010101.0101010101010101.0101010101010101.0101010101010101
+ m: 0101010101010101.0101010101010101.0101010101010101.0101010101010101
+ after
+r1: 0101010101010101.0101010101010101.0101010101010101.0101010101010101
+r2: 0101010101010101.0101010101010101.0101010101010101.0101010101010101
+r3: 0101010101010101.0101010101010101.0101010101010101.0101010101010101
+r4: [ ZERO ].[ ZERO ].[ ZERO ].0101010101010101
+ m: 0101010101010101.0101010101010101.0101010101010101.0101010101010101
+
+VFMADDSD_xmm_src_dst specialD
+ before
+r1: bff0000000000000.3ff0000000000000.[ -ZERO ].[ ZERO ]
+r2: [ NAN ].[ NAN ].[ -INF ].[ INF ]
+r3: [ -ZERO ].[ ZERO ].[ -SUBNORMAL ].[ SUBNORMAL ]
+r4: [ -INF ].[ INF ].bff0000000000000.3ff0000000000000
+ m: [ -SUBNORMAL ].[ SUBNORMAL ].[ NAN ].[ NAN ]
+ after
+r1: bff0000000000000.3ff0000000000000.[ -ZERO ].[ ZERO ]
+r2: [ NAN ].[ NAN ].[ -INF ].[ INF ]
+r3: [ -ZERO ].[ ZERO ].[ -SUBNORMAL ].[ SUBNORMAL ]
+r4: [ ZERO ].[ ZERO ].[ ZERO ].[ INF ]
+ m: [ -SUBNORMAL ].[ SUBNORMAL ].[ NAN ].[ NAN ]
+
+VFMADDSD_xmm_src_dst rand
+ before
+r1: adddf0eb4808f067.04c857e949cc0fac.d2b3c4044ef23fb2.e22093a48a9d2e0b
+r2: e4450ababbfae0f9.bc3127138b19183c.89fba268812abdb2.1e4a9e0958fac555
+r3: 5f2619b1a20662f0.12305efa0acd1475.1755377e9a786f01.4a6592749579b0f4
+r4: 7acb193b9abab2f9.e1917689e3f6bf86.d70f7fb13667914c.413cead25e27ac14
+ m: 918107c43ea20cc0.0420edac31a0d599.2573776df1835e3e.de9a220dce0e75e0
+ after
+r1: adddf0eb4808f067.04c857e949cc0fac.d2b3c4044ef23fb2.e22093a48a9d2e0b
+r2: e4450ababbfae0f9.bc3127138b19183c.89fba268812abdb2.1e4a9e0958fac555
+r3: 5f2619b1a20662f0.12305efa0acd1475.1755377e9a786f01.4a6592749579b0f4
+r4: [ ZERO ].[ ZERO ].[ ZERO ].e22093a48a9d2e0b
+ m: 918107c43ea20cc0.0420edac31a0d599.2573776df1835e3e.de9a220dce0e75e0
+
+VFMADDSD_xmm_mem1 ones
+ before
+r1: 0101010101010101.0101010101010101.0101010101010101.0101010101010101
+r2: 0101010101010101.0101010101010101.0101010101010101.0101010101010101
+r3: 0101010101010101.0101010101010101.0101010101010101.0101010101010101
+r4: 0101010101010101.0101010101010101.0101010101010101.0101010101010101
+ m: 0101010101010101.0101010101010101.0101010101010101.0101010101010101
+ after
+r1: 0101010101010101.0101010101010101.0101010101010101.0101010101010101
+r2: 0101010101010101.0101010101010101.0101010101010101.0101010101010101
+r3: 0101010101010101.0101010101010101.0101010101010101.0101010101010101
+r4: [ ZERO ].[ ZERO ].[ ZERO ].0101010101010101
+ m: 0101010101010101.0101010101010101.0101010101010101.0101010101010101
+
+VFMADDSD_xmm_mem1 specialD
+ before
+r1: bff0000000000000.3ff0000000000000.[ -ZERO ].[ ZERO ]
+r2: [ NAN ].[ NAN ].[ -INF ].[ INF ]
+r3: [ -ZERO ].[ ZERO ].[ -SUBNORMAL ].[ SUBNORMAL ]
+r4: [ -INF ].[ INF ].bff0000000000000.3ff0000000000000
+ m: [ -SUBNORMAL ].[ SUBNORMAL ].[ NAN ].[ NAN ]
+ after
+r1: bff0000000000000.3ff0000000000000.[ -ZERO ].[ ZERO ]
+r2: [ NAN ].[ NAN ].[ -INF ].[ INF ]
+r3: [ -ZERO ].[ ZERO ].[ -SUBNORMAL ].[ SUBNORMAL ]
+r4: [ ZERO ].[ ZERO ].[ ZERO ].[ NAN ]
+ m: [ -SUBNORMAL ].[ SUBNORMAL ].[ NAN ].[ NAN ]
+
+VFMADDSD_xmm_mem1 rand
+ before
+r1: 0194ddb82b49abf0.59a93d4f11d611db.5cce191e65591384.ff4cb613013cc685
+r2: 24509983fc3bcc36.baf7e45e9fa43077.da6c63303173ecc9.7e1e22cf15bd5c2f
+r3: 570037914d04ab3d.05d75ec6f616ee9a.fa99500fef6024ba.39dce32c239cf309
+r4: f6f2b14fbb3184b2.141625713239066f.17a0dc273ba9f803.0a52741849e54740
+ m: 5d700527e24d9241.c57eb74d70183523.8fcf04e5b2dca44f.cf4c517ea3a413ff
+ after
+r1: 0194ddb82b49abf0.59a93d4f11d611db.5cce191e65591384.ff4cb613013cc685
+r2: 24509983fc3bcc36.baf7e45e9fa43077.da6c63303173ecc9.7e1e22cf15bd5c2f
+r3: 570037914d04ab3d.05d75ec6f616ee9a.fa99500fef6024ba.39dce32c239cf309
+r4: [ ZERO ].[ ZERO ].[ ZERO ].780b3465b16e86e6
+ m: 5d700527e24d9241.c57eb74d70183523.8fcf04e5b2dca44f.cf4c517ea3a413ff
+
+VFMADDSD_xmm_mem2 ones
+ before
+r1: 0101010101010101.0101010101010101.0101010101010101.0101010101010101
+r2: 0101010101010101.0101010101010101.0101010101010101.0101010101010101
+r3: 0101010101010101.0101010101010101.0101010101010101.0101010101010101
+r4: 0101010101010101.0101010101010101.0101010101010101.0101010101010101
+ m: 0101010101010101.0101010101010101.0101010101010101.0101010101010101
+ after
+r1: 0101010101010101.0101010101010101.0101010101010101.0101010101010101
+r2: 0101010101010101.0101010101010101.0101010101010101.0101010101010101
+r3: 0101010101010101.0101010101010101.0101010101010101.0101010101010101
+r4: [ ZERO ].[ ZERO ].[ ZERO ].0101010101010101
+ m: 0101010101010101.0101010101010101.0101010101010101.0101010101010101
+
+VFMADDSD_xmm_mem2 specialD
+ before
+r1: bff0000000000000.3ff0000000000000.[ -ZERO ].[ ZERO ]
+r2: [ NAN ].[ NAN ].[ -INF ].[ INF ]
+r3: [ -ZERO ].[ ZERO ].[ -SUBNORMAL ].[ SUBNORMAL ]
+r4: [ -INF ].[ INF ].bff0000000000000.3ff0000000000000
+ m: [ -SUBNORMAL ].[ SUBNORMAL ].[ NAN ].[ NAN ]
+ after
+r1: bff0000000000000.3ff0000000000000.[ -ZERO ].[ ZERO ]
+r2: [ NAN ].[ NAN ].[ -INF ].[ INF ]
+r3: [ -ZERO ].[ ZERO ].[ -SUBNORMAL ].[ SUBNORMAL ]
+r4: [ ZERO ].[ ZERO ].[ ZERO ].[ NAN ]
+ m: [ -SUBNORMAL ].[ SUBNORMAL ].[ NAN ].[ NAN ]
+
+VFMADDSD_xmm_mem2 rand
+ before
+r1: e8c72e865de41295.f2db8f44cbbf37e2.bc70c3b3ef84644b.6295f64a4ce61473
+r2: f34428d9c8833f5b.78fb29445f3bc8d7.fcd015ff8f2e73a3.a0fae06860b606c7
+r3: da30ef8bc0b5573e.34a901384a97a32f.a93bf6332d650e02.66478ac4fc21a428
+r4: f9da7f07e00794eb.00b0940ba5e08516.20fd62bd65b57115.8e48704b3c31abc2
+ m: ac8dd5bbc503330e.b9dd5dab8e212ab7.be625608d5abd787.f5c90ee73af5d7c0
+ after
+r1: e8c72e865de41295.f2db8f44cbbf37e2.bc70c3b3ef84644b.6295f64a4ce61473
+r2: f34428d9c8833f5b.78fb29445f3bc8d7.fcd015ff8f2e73a3.a0fae06860b606c7
+r3: da30ef8bc0b5573e.34a901384a97a32f.a93bf6332d650e02.66478ac4fc21a428
+r4: [ ZERO ].[ ZERO ].[ ZERO ].[ -INF ]
+ m: ac8dd5bbc503330e.b9dd5dab8e212ab7.be625608d5abd787.f5c90ee73af5d7c0
+
+VFMADDSS_xmm ones
+ before
+r1: 01010101.01010101.01010101.01010101.01010101.01010101.01010101.01010101
+r2: 01010101.01010101.01010101.01010101.01010101.01010101.01010101.01010101
+r3: 01010101.01010101.01010101.01010101.01010101.01010101.01010101.01010101
+r4: 01010101.01010101.01010101.01010101.01010101.01010101.01010101.01010101
+ m: 01010101.01010101.01010101.01010101.01010101.01010101.01010101.01010101
+ after
+r1: 01010101.01010101.01010101.01010101.01010101.01010101.01010101.01010101
+r2: 01010101.01010101.01010101.01010101.01010101.01010101.01010101.01010101
+r3: 01010101.01010101.01010101.01010101.01010101.01010101.01010101.01010101
+r4: [ ZERO ].[ ZERO ].[ ZERO ].[ ZERO ].[ ZERO ].[ ZERO ].[ ZERO ].01010101
+ m: 01010101.01010101.01010101.01010101.01010101.01010101.01010101.01010101
+
+VFMADDSS_xmm specialF
+ before
+r1: [ NAN ].[ NAN ].[ -INF ].[ INF ].bf800000.3f800000.[-ZERO ].[ ZERO ]
+r2: [ -INF ].[ INF ].bf800000.3f800000.[-ZERO ].[ ZERO ].[-ZERO ].[ ZERO ]
+r3: bf800000.3f800000.[-ZERO ].[ ZERO ].[-ZERO ].[ ZERO ].[ NAN ].[ NAN ]
+r4: [-ZERO ].[ ZERO ].[-ZERO ].[ ZERO ].[ NAN ].[ NAN ].[ -INF ].[ INF ]
+ m: [-ZERO ].[ ZERO ].[ NAN ].[ NAN ].[ -INF ].[ INF ].bf800000.3f800000
+ after
+r1: [ NAN ].[ NAN ].[ -INF ].[ INF ].bf800000.3f800000.[-ZERO ].[ ZERO ]
+r2: [ -INF ].[ INF ].bf800000.3f800000.[-ZERO ].[ ZERO ].[-ZERO ].[ ZERO ]
+r3: bf800000.3f800000.[-ZERO ].[ ZERO ].[-ZERO ].[ ZERO ].[ NAN ].[ NAN ]
+r4: [ ZERO ].[ ZERO ].[ ZERO ].[ ZERO ].[ ZERO ].[ ZERO ].[ ZERO ].[ NAN ]
+ m: [-ZERO ].[ ZERO ].[ NAN ].[ NAN ].[ -INF ].[ INF ].bf800000.3f800000
+
+VFMADDSS_xmm rand
+ before
+r1: 4e94ec12.0b386f52.3bfcd803.21664d3e.ddb5cd80.16d27d05.7796e086.1576e44f
+r2: 3d3cc078.4c2f8563.63d98100.79bbabd9.db43c391.c6b69f3a.f17a6312.e7c28d9a
+r3: d4d14e59.2776b1ef.0b40d58c.b22d00b1.125934a7.81e479d3.3d431279.cce48fce
+r4: 6f9f9022.35982fa0.10fd4e94.e9c808f5.df411d2e.e2e7467c.38bb69a6.e1e9a617
+ m: 69f2843d.15223a22.4edb6a05.3a967ecf.9e477892.854b43e0.beafe485.41dc8da0
+ after
+r1: 4e94ec12.0b386f52.3bfcd803.21664d3e.ddb5cd80.16d27d05.7796e086.1576e44f
+r2: 3d3cc078.4c2f8563.63d98100.79bbabd9.db43c391.c6b69f3a.f17a6312.e7c28d9a
+r3: d4d14e59.2776b1ef.0b40d58c.b22d00b1.125934a7.81e479d3.3d431279.cce48fce
+r4: [ ZERO ].[ ZERO ].[ ZERO ].[ ZERO ].[ ZERO ].[ ZERO ].[ ZERO ].752db367
+ m: 69f2843d.15223a22.4edb6a05.3a967ecf.9e477892.854b43e0.beafe485.41dc8da0
+
+VFMADDSS_xmm_src_dst ones
+ before
+r1: 01010101.01010101.01010101.01010101.01010101.01010101.01010101.01010101
+r2: 01010101.01010101.01010101.01010101.01010101.01010101.01010101.01010101
+r3: 01010101.01010101.01010101.01010101.01010101.01010101.01010101.01010101
+r4: 01010101.01010101.01010101.01010101.01010101.01010101.01010101.01010101
+ m: 01010101.01010101.01010101.01010101.01010101.01010101.01010101.01010101
+ after
+r1: 01010101.01010101.01010101.01010101.01010101.01010101.01010101.01010101
+r2: 01010101.01010101.01010101.01010101.01010101.01010101.01010101.01010101
+r3: 01010101.01010101.01010101.01010101.01010101.01010101.01010101.01010101
+r4: [ ZERO ].[ ZERO ].[ ZERO ].[ ZERO ].[ ZERO ].[ ZERO ].[ ZERO ].01010101
+ m: 01010101.01010101.01010101.01010101.01010101.01010101.01010101.01010101
+
+VFMADDSS_xmm_src_dst specialF
+ before
+r1: [ NAN ].[ NAN ].[ -INF ].[ INF ].bf800000.3f800000.[-ZERO ].[ ZERO ]
+r2: [ -INF ].[ INF ].bf800000.3f800000.[-ZERO ].[ ZERO ].[-ZERO ].[ ZERO ]
+r3: bf800000.3f800000.[-ZERO ].[ ZERO ].[-ZERO ].[ ZERO ].[ NAN ].[ NAN ]
+r4: [-ZERO ].[ ZERO ].[-ZERO ].[ ZERO ].[ NAN ].[ NAN ].[ -INF ].[ INF ]
+ m: [-ZERO ].[ ZERO ].[ NAN ].[ NAN ].[ -INF ].[ INF ].bf800000.3f800000
+ after
+r1: [ NAN ].[ NAN ].[ -INF ].[ INF ].bf800000.3f800000.[-ZERO ].[ ZERO ]
+r2: [ -INF ].[ INF ].bf800000.3f800000.[-ZERO ].[ ZERO ].[-ZERO ].[ ZERO ]
+r3: bf800000.3f800000.[-ZERO ].[ ZERO ].[-ZERO ].[ ZERO ].[ NAN ].[ NAN ]
+r4: [ ZERO ].[ ZERO ].[ ZERO ].[ ZERO ].[ ZERO ].[ ZERO ].[ ZERO ].[ NAN ]
+ m: [-ZERO ].[ ZERO ].[ NAN ].[ NAN ].[ -INF ].[ INF ].bf800000.3f800000
+
+VFMADDSS_xmm_src_dst rand
+ before
+r1: 20162517.609f0f22.a1a7a4c9.c0a51f6b.acb9433f.079dacac.abeb0002.08c90296
+r2: ef56701d.b49bea4c.e52e79ce.9700a7f7.63e279a2.0368bc8b.db3b3709.54bcbf24
+r3: 31005fb9.ada2074b.f63a63fe.dcb4d29c.200d1726.1638b12a.2a6a0786.3ec28077
+r4: 445ef059.e641a1cc.b097e047.aacc5b89.3f871736.dc9ac535.7446eb65.e4e703bb
+ m: 83bd1e68.fb03f57b.ef136b94.1e54ffe8.1c9c7740.ef193457.95996092.6235021b
+ after
+r1: 20162517.609f0f22.a1a7a4c9.c0a51f6b.acb9433f.079dacac.abeb0002.08c90296
+r2: ef56701d.b49bea4c.e52e79ce.9700a7f7.63e279a2.0368bc8b.db3b3709.54bcbf24
+r3: 31005fb9.ada2074b.f63a63fe.dcb4d29c.200d1726.1638b12a.2a6a0786.3ec28077
+r4: [ ZERO ].[ ZERO ].[ ZERO ].[ ZERO ].[ ZERO ].[ ZERO ].[ ZERO ].fa2a533a
+ m: 83bd1e68.fb03f57b.ef136b94.1e54ffe8.1c9c7740.ef193457.95996092.6235021b
+
+VFMADDSS_xmm_mem1 ones
+ before
+r1: 01010101.01010101.01010101.01010101.01010101.01010101.01010101.01010101
+r2: 01010101.01010101.01010101.01010101.01010101.01010101.01010101.01010101
+r3: 01010101.01010101.01010101.01010101.01010101.01010101.01010101.01010101
+r4: 01010101.01010101.01010101.01010101.01010101.01010101.01010101.01010101
+ m: 01010101.01010101.01010101.01010101.01010101.01010101.01010101.01010101
+ after
+r1: 01010101.01010101.01010101.01010101.01010101.01010101.01010101.01010101
+r2: 01010101.01010101.01010101.01010101.01010101.01010101.01010101.01010101
+r3: 01010101.01010101.01010101.01010101.01010101.01010101.01010101.01010101
+r4: [ ZERO ].[ ZERO ].[ ZERO ].[ ZERO ].[ ZERO ].[ ZERO ].[ ZERO ].01010101
+ m: 01010101.01010101.0101...
[truncated message content] |
|
From: <sv...@va...> - 2016-09-19 12:41:28
|
Author: mjw
Date: Mon Sep 19 13:41:19 2016
New Revision: 3249
Log:
Implement AMD FMA4 instructions. Bug #369000.
Original patch by p4...@gm....
Modified:
trunk/priv/guest_amd64_toIR.c
Modified: trunk/priv/guest_amd64_toIR.c
==============================================================================
--- trunk/priv/guest_amd64_toIR.c (original)
+++ trunk/priv/guest_amd64_toIR.c Mon Sep 19 13:41:19 2016
@@ -30096,6 +30096,136 @@
return delta;
}
+/* operand format:
+ * [0] = dst
+ * [n] = srcn
+ */
+static Long decode_vregW(Int count, Long delta, UChar modrm, Prefix pfx,
+ const VexAbiInfo* vbi, IRTemp *v, UInt *dst, Int swap)
+{
+ v[0] = newTemp(Ity_V128);
+ v[1] = newTemp(Ity_V128);
+ v[2] = newTemp(Ity_V128);
+ v[3] = newTemp(Ity_V128);
+ IRTemp addr = IRTemp_INVALID;
+ Int alen = 0;
+ HChar dis_buf[50];
+
+ *dst = gregOfRexRM(pfx, modrm);
+ assign( v[0], getXMMReg(*dst) );
+
+ if ( epartIsReg( modrm ) ) {
+ UInt ereg = eregOfRexRM(pfx, modrm);
+ assign(swap ? v[count-1] : v[count-2], getXMMReg(ereg) );
+ DIS(dis_buf, "%s", nameXMMReg(ereg));
+ } else {
+ Bool extra_byte = (getUChar(delta - 3) & 0xF) != 9;
+ addr = disAMode(&alen, vbi, pfx, delta, dis_buf, extra_byte);
+ assign(swap ? v[count-1] : v[count-2], loadLE(Ity_V128, mkexpr(addr)));
+ delta += alen - 1;
+ }
+
+ UInt vvvv = getVexNvvvv(pfx);
+ switch(count) {
+ case 2:
+ DIP( "%s,%s", nameXMMReg(*dst), dis_buf );
+ break;
+ case 3:
+ assign( swap ? v[1] : v[2], getXMMReg(vvvv) );
+ DIP( "%s,%s,%s", nameXMMReg(*dst), nameXMMReg(vvvv), dis_buf );
+ break;
+ case 4:
+ {
+ assign( v[1], getXMMReg(vvvv) );
+ UInt src2 = getUChar(delta + 1) >> 4;
+ assign( swap ? v[2] : v[3], getXMMReg(src2) );
+ DIP( "%s,%s,%s,%s", nameXMMReg(*dst), nameXMMReg(vvvv),
+ nameXMMReg(src2), dis_buf );
+ }
+ break;
+ }
+ return delta + 1;
+}
+
+static Long dis_FMA4 (Prefix pfx, Long delta, UChar opc,
+ Bool* uses_vvvv, const VexAbiInfo* vbi )
+{
+ UInt dst;
+ *uses_vvvv = True;
+
+ UChar modrm = getUChar(delta);
+
+ Bool zero_64F = False;
+ Bool zero_96F = False;
+ UInt is_F32 = ((opc & 0x01) == 0x00) ? 1 : 0;
+ Bool neg = (opc & 0xF0) == 0x70;
+ Bool alt = (opc & 0xF0) == 0x50;
+ Bool sub = alt ? (opc & 0x0E) != 0x0E : (opc & 0x0C) == 0x0C;
+
+ IRTemp operand[4];
+ switch(opc & 0xF) {
+ case 0x0A: zero_96F = (opc >> 4) != 0x05; break;
+ case 0x0B: zero_64F = (opc >> 4) != 0x05; break;
+ case 0x0E: zero_96F = (opc >> 4) != 0x05; break;
+ case 0x0F: zero_64F = (opc >> 4) != 0x05; break;
+ default: break;
+ }
+ DIP("vfm%s", neg ? "n" : "");
+ if(alt) DIP("%s", sub ? "add" : "sub");
+ DIP("%s", sub ? "sub" : "add");
+ DIP("%c ", (zero_64F || zero_96F) ? 's' : 'p');
+ DIP("%c ", is_F32 ? 's' : 'd');
+ delta = decode_vregW(4, delta, modrm, pfx, vbi, operand, &dst, getRexW(pfx));
+ DIP("\n");
+ IRExpr *src[3];
+
+ void (*putXMM[2])(UInt,Int,IRExpr*) = {&putXMMRegLane64F, &putXMMRegLane32F};
+
+ IROp size_op[] = {Iop_V128to64, Iop_V128HIto64, Iop_64to32, Iop_64HIto32};
+ IROp neg_op[] = {Iop_NegF64, Iop_NegF32};
+ int i, j;
+ for(i = 0; i < is_F32 * 2 + 2; i++) {
+ for(j = 0; j < 3; j++) {
+ if(is_F32) {
+ src[j] = unop(Iop_ReinterpI32asF32,
+ unop(size_op[i%2+2],
+ unop(size_op[i/2],
+ mkexpr(operand[j + 1])
+ )
+ ));
+ } else {
+ src[j] = unop(Iop_ReinterpI64asF64,
+ unop(size_op[i%2],
+ mkexpr(operand[j + 1])
+ ));
+ }
+ }
+ putXMM[is_F32](dst, i, IRExpr_Qop(is_F32 ? Iop_MAddF32 : Iop_MAddF64,
+ get_FAKE_roundingmode(),
+ neg ? unop(neg_op[is_F32], src[0])
+ : src[0],
+ src[1],
+ sub ? unop(neg_op[is_F32], src[2])
+ : src[2]
+ ));
+ if(alt) {
+ sub = !sub;
+ }
+ }
+
+ /* Zero out top bits of ymm/xmm register. */
+ putYMMRegLane128( dst, 1, mkV128(0) );
+
+ if(zero_64F || zero_96F) {
+ putXMMRegLane64( dst, 1, IRExpr_Const(IRConst_U64(0)));
+ }
+
+ if(zero_96F) {
+ putXMMRegLane32( dst, 1, IRExpr_Const(IRConst_U32(0)));
+ }
+
+ return delta+1;
+}
/*------------------------------------------------------------*/
/*--- ---*/
@@ -31640,6 +31770,16 @@
/* else fall though; dis_PCMPxSTRx failed to decode it */
}
break;
+ case 0x5C ... 0x5F:
+ case 0x68 ... 0x6F:
+ case 0x78 ... 0x7F:
+ if (have66noF2noF3(pfx) && 0==getVexL(pfx)/*128*/) {
+ Long delta0 = delta;
+ delta = dis_FMA4( pfx, delta, opc, uses_vvvv, vbi );
+ if (delta > delta0) goto decode_success;
+ /* else fall though; dis_FMA4 failed to decode it */
+ }
+ break;
case 0xDF:
/* VAESKEYGENASSIST imm8, xmm2/m128, xmm1 = VEX.128.66.0F3A.WIG DF /r */
|
Author: mjw
Date: Mon Sep 19 09:08:51 2016
New Revision: 15960
Log:
Fix bad gdbserver_tests heap usage tests stderr output.
When doing inferior function calls from gdb (in mcmain_pic) there might
be extra heap usage from gdb that we aren't interested in tracking.
Modified:
trunk/gdbserver_tests/filter_memcheck_monitor
trunk/gdbserver_tests/mcclean_after_fork.stderr.exp
trunk/gdbserver_tests/mcmain_pic.stderr.exp
trunk/gdbserver_tests/mcmain_pic.stderr.exp-solaris
trunk/gdbserver_tests/mcsignopass.stderr.exp
trunk/gdbserver_tests/mcsigpass.stderr.exp
trunk/gdbserver_tests/mcwatchpoints.stderr.exp
Modified: trunk/gdbserver_tests/filter_memcheck_monitor
==============================================================================
--- trunk/gdbserver_tests/filter_memcheck_monitor (original)
+++ trunk/gdbserver_tests/filter_memcheck_monitor Mon Sep 19 09:08:51 2016
@@ -22,8 +22,13 @@
# Bypass a s390x kernel bug which makes faultstatus test3 fail. In our case, we are
# not interested in checking the si_code, but rather the signal passing
# in mcsig(no)pass
+#
+# When doing inferior function calls from gdb (in mcmain_pic) there might be
+# extra heap usage from gdb that we aren't interested in tracking.
+#
sed -e '/Cannot access memory at address 0x......../d' \
-e '/^[1-9][0-9]* \.\.\/sysdeps\/powerpc\/powerpc32\/dl-start\.S: No such file or directory\./d' \
-e '/^Missing separate debuginfo/d' \
-e '/^Try: zypper install -C/d' \
- -e 's/Test 3: FAIL: expected si_code==2, not 128/Test 3: PASS/'
+ -e 's/Test 3: FAIL: expected si_code==2, not 128/Test 3: PASS/' \
+ -e '/^ total heap usage: /d'
Modified: trunk/gdbserver_tests/mcclean_after_fork.stderr.exp
==============================================================================
--- trunk/gdbserver_tests/mcclean_after_fork.stderr.exp (original)
+++ trunk/gdbserver_tests/mcclean_after_fork.stderr.exp Mon Sep 19 09:08:51 2016
@@ -1,7 +1,6 @@
(action at startup) vgdb me ...
HEAP SUMMARY:
in use at exit: 0 bytes in 0 blocks
- total heap usage: 0 allocs, 0 frees, 0 bytes allocated
For a detailed leak analysis, rerun with: --leak-check=full
For counts of detected and suppressed errors, rerun with: -v
ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 0 from 0)
Modified: trunk/gdbserver_tests/mcmain_pic.stderr.exp
==============================================================================
--- trunk/gdbserver_tests/mcmain_pic.stderr.exp (original)
+++ trunk/gdbserver_tests/mcmain_pic.stderr.exp Mon Sep 19 09:08:51 2016
@@ -1,7 +1,6 @@
(action at startup) vgdb me ...
HEAP SUMMARY:
in use at exit: 16 bytes in 1 blocks
- total heap usage: 1 allocs, 0 frees, 16 bytes allocated
For a detailed leak analysis, rerun with: --leak-check=full
For counts of detected and suppressed errors, rerun with: -v
ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 0 from 0)
Modified: trunk/gdbserver_tests/mcmain_pic.stderr.exp-solaris
==============================================================================
--- trunk/gdbserver_tests/mcmain_pic.stderr.exp-solaris (original)
+++ trunk/gdbserver_tests/mcmain_pic.stderr.exp-solaris Mon Sep 19 09:08:51 2016
@@ -1,7 +1,6 @@
(action at startup) vgdb me ...
HEAP SUMMARY:
in use at exit: 131,080 bytes in 1 blocks
- total heap usage: 1 allocs, 0 frees, 131,080 bytes allocated
For a detailed leak analysis, rerun with: --leak-check=full
For counts of detected and suppressed errors, rerun with: -v
ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 0 from 0)
Modified: trunk/gdbserver_tests/mcsignopass.stderr.exp
==============================================================================
--- trunk/gdbserver_tests/mcsignopass.stderr.exp (original)
+++ trunk/gdbserver_tests/mcsignopass.stderr.exp Mon Sep 19 09:08:51 2016
@@ -9,7 +9,6 @@
Test 4: PASS
HEAP SUMMARY:
in use at exit: 0 bytes in 0 blocks
- total heap usage: 0 allocs, 0 frees, 0 bytes allocated
For a detailed leak analysis, rerun with: --leak-check=full
For counts of detected and suppressed errors, rerun with: -v
ERROR SUMMARY: 11 errors from 1 contexts (suppressed: 0 from 0)
Modified: trunk/gdbserver_tests/mcsigpass.stderr.exp
==============================================================================
--- trunk/gdbserver_tests/mcsigpass.stderr.exp (original)
+++ trunk/gdbserver_tests/mcsigpass.stderr.exp Mon Sep 19 09:08:51 2016
@@ -9,7 +9,6 @@
Test 4: PASS
HEAP SUMMARY:
in use at exit: 0 bytes in 0 blocks
- total heap usage: 0 allocs, 0 frees, 0 bytes allocated
For a detailed leak analysis, rerun with: --leak-check=full
For counts of detected and suppressed errors, rerun with: -v
ERROR SUMMARY: 1 errors from 1 contexts (suppressed: 0 from 0)
Modified: trunk/gdbserver_tests/mcwatchpoints.stderr.exp
==============================================================================
--- trunk/gdbserver_tests/mcwatchpoints.stderr.exp (original)
+++ trunk/gdbserver_tests/mcwatchpoints.stderr.exp Mon Sep 19 09:08:51 2016
@@ -16,7 +16,6 @@
value of k50[1000] p
HEAP SUMMARY:
in use at exit: 0 bytes in 0 blocks
- total heap usage: 1 allocs, 1 frees, 50,000 bytes allocated
For a detailed leak analysis, rerun with: --leak-check=full
For counts of detected and suppressed errors, rerun with: -v
ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 0 from 0)
|
|
From: Mark W. <mj...@re...> - 2016-09-18 20:18:27
|
On Sun, Sep 18, 2016 at 09:45:08PM +0200, Ivo Raisr wrote: > 2016-09-18 15:50 GMT+02:00 Rich Coe <rc...@wi...>: > > > I found the helgrind and drd tests bar_bad are hanging: > > > > #0 vgModuleLocal_do_syscall_for_client_WRK () at > > m_syswrap/syscall-amd64-linux.S:173 > > #1 0x00000000380c0638 in do_syscall_for_client (syscall_mask=0x802c53d80, > > tst=0x802018f90, syscallno=202) > > at m_syswrap/syswrap-main.c:339 > > #2 vgPlain_client_syscall (tid=tid@entry=1, trc=trc@entry=73) at > > m_syswrap/syswrap-main.c:2007 > > #3 0x00000000380bd02b in handle_syscall (tid=tid@entry=1, trc=73) at > > m_scheduler/scheduler.c:1118 > > #4 0x00000000380be697 in vgPlain_scheduler (tid=tid@entry=1) at > > m_scheduler/scheduler.c:1435 > > #5 0x00000000380cdc07 in thread_wrapper (tidW=1) at > > m_syswrap/syswrap-linux.c:103 > > #6 run_a_thread_NORETURN (tidW=1) at m_syswrap/syswrap-linux.c:156 > > #7 0x0000000000000000 in ?? () > > > > On my Linux/Ubuntu box these tests hang even when run natively during the > fourth testcase described as > "destroy a barrier that has waiting threads". According to POSIX [1]: > "...The results are undefined if *pthread_barrier_destroy*() is called when > any thread is blocked on the barrier... " > which bar_bad precisely does. > > Perhaps a timer which would time out this hang would be handy here. My apologies for not recognizing this earlier. We carry a patch in Fedora to work around this test hang. The workaround is attached to this bug report: https://bugsfiles.kde.org/attachment.cgi?id=96765 As you can read in that bug report the workaround isn't ideal because it might still FAIL the test. If someone could take a look at the bug and proposed patch to see if it can somehow be changed so that it makes the test reliably pass with older and newer glibc that would be very appreciated. Thanks, Mark |