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
(22) |
2
(24) |
|
3
(19) |
4
(20) |
5
(17) |
6
(20) |
7
(13) |
8
|
9
|
|
10
(10) |
11
(35) |
12
(20) |
13
(6) |
14
(19) |
15
|
16
|
|
17
(2) |
18
(3) |
19
(12) |
20
(1) |
21
(14) |
22
(2) |
23
(13) |
|
24
(2) |
25
(16) |
26
(17) |
27
(21) |
28
(17) |
29
(17) |
30
(14) |
|
31
(15) |
|
|
|
|
|
|
|
From: <sv...@va...> - 2013-03-27 22:15:44
|
sewardj 2013-03-27 22:15:36 +0000 (Wed, 27 Mar 2013)
New Revision: 2704
Log:
Fix some rebasing fallout pertaining to today's AVX2 landing.
Fixes #317463.
Modified files:
trunk/priv/guest_amd64_toIR.c
Modified: trunk/priv/guest_amd64_toIR.c (+3 -2)
===================================================================
--- trunk/priv/guest_amd64_toIR.c 2013-03-27 15:38:47 +00:00 (rev 2703)
+++ trunk/priv/guest_amd64_toIR.c 2013-03-27 22:15:36 +00:00 (rev 2704)
@@ -1715,7 +1715,7 @@
return toBool(op8 == Iop_And8 || op8 == Iop_Or8 || op8 == Iop_Xor8);
}
-/* U-widen 8/16/32/64 bit int expr to 64. */
+/* U-widen 1/8/16/32/64 bit int expr to 64. */
static IRExpr* widenUto64 ( IRExpr* e )
{
switch (typeOfIRExpr(irsb->tyenv,e)) {
@@ -1723,6 +1723,7 @@
case Ity_I32: return unop(Iop_32Uto64, e);
case Ity_I16: return unop(Iop_16Uto64, e);
case Ity_I8: return unop(Iop_8Uto64, e);
+ case Ity_I1: return unop(Iop_1Uto64, e);
default: vpanic("widenUto64");
}
}
@@ -28692,7 +28693,7 @@
IRTemp src1 = newTemp(ty);
IRTemp src2 = newTemp(ty);
IRTemp start = newTemp(Ity_I8);
- IRTemp cond = newTemp(Ity_I8);
+ IRTemp cond = newTemp(Ity_I1);
UChar rm = getUChar(delta);
assign( src2, getIRegV(size,pfx) );
|
|
From: <sv...@va...> - 2013-03-27 21:59:29
|
sewardj 2013-03-27 21:59:21 +0000 (Wed, 27 Mar 2013)
New Revision: 13343
Log:
Fix BMI assembler configure check and avx2/bmi/fma vgtest prereqs.
#317461. (Mark Wielaard, mj...@re...)
Modified files:
trunk/configure.in
trunk/none/tests/amd64/avx2-1.vgtest
trunk/none/tests/amd64/bmi.vgtest
trunk/none/tests/amd64/fma.vgtest
Modified: trunk/none/tests/amd64/bmi.vgtest (+1 -1)
===================================================================
--- trunk/none/tests/amd64/bmi.vgtest 2013-03-27 15:39:18 +00:00 (rev 13342)
+++ trunk/none/tests/amd64/bmi.vgtest 2013-03-27 21:59:21 +00:00 (rev 13343)
@@ -1,3 +1,3 @@
prog: bmi
-prereq: ../../../tests/x86_amd64_features amd64-avx
+prereq: test -x bmi && ../../../tests/x86_amd64_features amd64-avx
vgopts: -q
Modified: trunk/configure.in (+2 -2)
===================================================================
--- trunk/configure.in 2013-03-27 15:39:18 +00:00 (rev 13342)
+++ trunk/configure.in 2013-03-27 21:59:21 +00:00 (rev 13343)
@@ -1940,9 +1940,9 @@
AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[
do { unsigned int h, l;
__asm__ __volatile__(
- "andn %2, %1, %0" : "=r" (h) : "r" (0x1234567), "r" (0x7654321) ); }
+ "andn %2, %1, %0" : "=r" (h) : "r" (0x1234567), "r" (0x7654321) );
__asm__ __volatile__(
- "movl %2, %%edx; mulx %3, %1, %0" : "=r" (h), "=r" (l) : "g" (0x1234567), "g" (0x7654321) : "edx" ); }
+ "movl %2, %%edx; mulx %3, %1, %0" : "=r" (h), "=r" (l) : "g" (0x1234567), "rm" (0x7654321) : "edx" ); }
while (0)
]])], [
ac_have_as_bmi=yes
Modified: trunk/none/tests/amd64/fma.vgtest (+1 -1)
===================================================================
--- trunk/none/tests/amd64/fma.vgtest 2013-03-27 15:39:18 +00:00 (rev 13342)
+++ trunk/none/tests/amd64/fma.vgtest 2013-03-27 21:59:21 +00:00 (rev 13343)
@@ -1,3 +1,3 @@
prog: fma
-prereq: ../../../tests/x86_amd64_features amd64-avx
+prereq: test -x fma && ../../../tests/x86_amd64_features amd64-avx
vgopts: -q
Modified: trunk/none/tests/amd64/avx2-1.vgtest (+1 -1)
===================================================================
--- trunk/none/tests/amd64/avx2-1.vgtest 2013-03-27 15:39:18 +00:00 (rev 13342)
+++ trunk/none/tests/amd64/avx2-1.vgtest 2013-03-27 21:59:21 +00:00 (rev 13343)
@@ -1,3 +1,3 @@
prog: avx2-1
-prereq: ../../../tests/x86_amd64_features amd64-avx
+prereq: test -x avx2-1 && ../../../tests/x86_amd64_features amd64-avx
vgopts: -q
|
|
From: <sv...@va...> - 2013-03-27 15:39:25
|
tom 2013-03-27 15:39:18 +0000 (Wed, 27 Mar 2013)
New Revision: 13342
Log:
Test support for the EQ_UQ SSE FP comparison operation. BZ#317444.
Modified files:
trunk/none/tests/amd64/avx-1.c
Modified: trunk/none/tests/amd64/avx-1.c (+8 -0)
===================================================================
--- trunk/none/tests/amd64/avx-1.c 2013-03-27 12:40:48 +00:00 (rev 13341)
+++ trunk/none/tests/amd64/avx-1.c 2013-03-27 15:39:18 +00:00 (rev 13342)
@@ -212,6 +212,9 @@
GEN_test_RandM(VCMPSD_128_0x7,
"vcmpsd $7, %%xmm6, %%xmm8, %%xmm7",
"vcmpsd $7, (%%rax), %%xmm8, %%xmm7")
+GEN_test_RandM(VCMPSD_128_0x8,
+ "vcmpsd $8, %%xmm6, %%xmm8, %%xmm7",
+ "vcmpsd $8, (%%rax), %%xmm8, %%xmm7")
GEN_test_RandM(VCMPSD_128_0xA,
"vcmpsd $0xA, %%xmm6, %%xmm8, %%xmm7",
"vcmpsd $0xA, (%%rax), %%xmm8, %%xmm7")
@@ -623,6 +626,9 @@
GEN_test_RandM(VCMPSS_128_0x7,
"vcmpss $7, %%xmm6, %%xmm8, %%xmm7",
"vcmpss $7, (%%rax), %%xmm8, %%xmm7")
+GEN_test_RandM(VCMPSS_128_0x8,
+ "vcmpss $8, %%xmm6, %%xmm8, %%xmm7",
+ "vcmpss $8, (%%rax), %%xmm8, %%xmm7")
GEN_test_RandM(VCMPSS_128_0xA,
"vcmpss $0xA, %%xmm6, %%xmm8, %%xmm7",
"vcmpss $0xA, (%%rax), %%xmm8, %%xmm7")
@@ -2205,6 +2211,7 @@
DO_D( VCMPSS_128_0x5 );
DO_D( VCMPSS_128_0x6 );
DO_D( VCMPSS_128_0x7 );
+ DO_D( VCMPSS_128_0x8 );
DO_D( VCMPSS_128_0xA );
DO_D( VCMPSS_128_0xC );
DO_D( VCMPSS_128_0xC );
@@ -2309,6 +2316,7 @@
DO_D( VCMPSD_128_0x5 );
DO_D( VCMPSD_128_0x6 );
DO_D( VCMPSD_128_0x7 );
+ DO_D( VCMPSD_128_0x8 );
DO_D( VCMPSD_128_0xA );
DO_D( VCMPSD_128_0xC );
DO_D( VCMPSD_128_0xD );
|
|
From: <sv...@va...> - 2013-03-27 15:38:57
|
tom 2013-03-27 15:38:47 +0000 (Wed, 27 Mar 2013)
New Revision: 2703
Log:
Add support for the EQ_UQ SSE FP comparison operation. BZ#317444.
Modified files:
trunk/priv/guest_amd64_toIR.c
Modified: trunk/priv/guest_amd64_toIR.c (+1 -1)
===================================================================
--- trunk/priv/guest_amd64_toIR.c 2013-03-27 11:37:33 +00:00 (rev 2702)
+++ trunk/priv/guest_amd64_toIR.c 2013-03-27 15:38:47 +00:00 (rev 2703)
@@ -8753,7 +8753,7 @@
case 0x5: XXX(False, Iop_CmpLT32Fx4, True); break; // NLT_US
case 0x6: XXX(False, Iop_CmpLE32Fx4, True); break; // NLE_US
case 0x7: XXX(False, Iop_CmpUN32Fx4, True); break; // ORD_Q
- // 0x8 EQ_UQ
+ case 0x8: XXX(False, Iop_CmpEQ32Fx4, False); break; // EQ_UQ
case 0x9: XXX(True, Iop_CmpLE32Fx4, True); break; // NGE_US
/* "Enhanced Comparison Predicate[s] for VEX-Encoded [insns] */
case 0xA: XXX(True, Iop_CmpLT32Fx4, True); break; // NGT_US
|
|
From: <sv...@va...> - 2013-03-27 12:41:09
|
sewardj 2013-03-27 12:40:48 +0000 (Wed, 27 Mar 2013)
New Revision: 13341
Log:
Commit Philippe Waroquiers' initial work multithread valgrind (mtV)
to branches/MTV. See #301830.
(Philippe Waroquiers, phi...@sk...)
Added files:
branches/MTV/coregrind/m_lock.c
branches/MTV/coregrind/m_scheduler/sched-lock-rwlock.c
branches/MTV/docs/internals/mtV.txt
branches/MTV/include/priv_atomic_amd64.h
branches/MTV/include/priv_atomic_x86.h
branches/MTV/include/pub_tool_atomic.h
branches/MTV/include/pub_tool_lock.h
branches/MTV/perf/big_parallel_sleepers.c
branches/MTV/perf/big_parallel_sleepers.vgperf
Modified files:
branches/MTV/coregrind/Makefile.am
branches/MTV/coregrind/m_aspacemgr/aspacemgr-linux.c
branches/MTV/coregrind/m_aspacemgr/priv_aspacemgr.h
branches/MTV/coregrind/m_dispatch/dispatch-amd64-linux.S
branches/MTV/coregrind/m_dispatch/dispatch-x86-linux.S
branches/MTV/coregrind/m_gdbserver/m_gdbserver.c
branches/MTV/coregrind/m_libcassert.c
branches/MTV/coregrind/m_main.c
branches/MTV/coregrind/m_scheduler/priv_sched-lock-impl.h
branches/MTV/coregrind/m_scheduler/priv_sched-lock.h
branches/MTV/coregrind/m_scheduler/priv_sema.h
branches/MTV/coregrind/m_scheduler/sched-lock-generic.c
branches/MTV/coregrind/m_scheduler/sched-lock.c
branches/MTV/coregrind/m_scheduler/scheduler.c
branches/MTV/coregrind/m_scheduler/sema.c
branches/MTV/coregrind/m_scheduler/ticket-lock-linux.c
branches/MTV/coregrind/m_signals.c
branches/MTV/coregrind/m_stacks.c
branches/MTV/coregrind/m_syswrap/syswrap-amd64-linux.c
branches/MTV/coregrind/m_syswrap/syswrap-linux.c
branches/MTV/coregrind/m_syswrap/syswrap-main.c
branches/MTV/coregrind/m_syswrap/syswrap-x86-linux.c
branches/MTV/coregrind/m_threadstate.c
branches/MTV/coregrind/m_transtab.c
branches/MTV/coregrind/pub_core_scheduler.h
branches/MTV/coregrind/pub_core_threadstate.h
branches/MTV/gdbserver_tests/sleepers.c
branches/MTV/include/Makefile.am
branches/MTV/memcheck/mc_main.c
branches/MTV/perf/Makefile.am
Modified: branches/MTV/coregrind/m_signals.c (+6 -5)
===================================================================
--- branches/MTV/coregrind/m_signals.c 2013-03-27 11:43:20 +00:00 (rev 13340)
+++ branches/MTV/coregrind/m_signals.c 2013-03-27 12:40:48 +00:00 (rev 13341)
@@ -2116,7 +2116,8 @@
/* The thread isn't currently running, make it so before going on */
vg_assert(tst->status == VgTs_WaitSys);
- VG_(acquire_BigLock)(tid, "async_signalhandler");
+ VG_(acquire_BigLock)(tid, VgTs_ReadLock, "async_signalhandler");
+ //mtV? unclear which kind of lock we need here. Normally a readlock I guess.
info->si_code = sanitize_si_code(info->si_code);
@@ -2414,12 +2415,13 @@
void sync_signalhandler_from_kernel ( ThreadId tid,
Int sigNo, vki_siginfo_t *info, struct vki_ucontext *uc )
{
+ ThreadState *tst = VG_(get_ThreadState)(tid);
/* Check to see if some part of Valgrind itself is interested in faults.
The fault catcher should never be set whilst we're in generated code, so
check for that. AFAIK the only use of the catcher right now is
memcheck's leak detector. */
if (fault_catcher) {
- vg_assert(VG_(in_generated_code) == False);
+ vg_assert(tst->in_generated_code == False);
(*fault_catcher)(sigNo, (Addr)info->VKI_SIGINFO_si_addr);
/* If the catcher returns, then it didn't handle the fault,
@@ -2434,14 +2436,13 @@
/* OK, this is a signal we really have to deal with. If it came
from the client's code, then we can jump back into the scheduler
and have it delivered. Otherwise it's a Valgrind bug. */
- ThreadState *tst = VG_(get_ThreadState)(tid);
if (VG_(sigismember)(&tst->sig_mask, sigNo)) {
/* signal is blocked, but they're not allowed to block faults */
VG_(set_default_handler)(sigNo);
}
- if (VG_(in_generated_code)) {
+ if (tst->in_generated_code) {
if (VG_(gdbserver_report_signal) (sigNo, tid)
|| VG_(sigismember)(&tst->sig_mask, sigNo)) {
/* Can't continue; must longjmp back to the scheduler and thus
@@ -2553,7 +2554,7 @@
if (VG_(clo_trace_signals))
VG_(dmsg)("sigvgkill for lwp %d tid %d\n", VG_(gettid)(), tid);
- VG_(acquire_BigLock)(tid, "sigvgkill_handler");
+ VG_(acquire_BigLock)(tid, VgTs_ReadLock, "sigvgkill_handler"); //mtV? see async_signalhandler
vg_assert(signo == VG_SIGVGKILL);
vg_assert(si->si_signo == signo);
Modified: branches/MTV/coregrind/m_scheduler/priv_sema.h (+6 -0)
===================================================================
--- branches/MTV/coregrind/m_scheduler/priv_sema.h 2013-03-27 11:43:20 +00:00 (rev 13340)
+++ branches/MTV/coregrind/m_scheduler/priv_sema.h 2013-03-27 12:40:48 +00:00 (rev 13341)
@@ -34,10 +34,16 @@
/* Not really a semaphore, but use a pipe for a token-passing scheme */
typedef struct {
Int pipe[2];
+ Char sema_char;
Int owner_lwpid; /* who currently has it */
Bool held_as_LL; /* if held, True == held by a _LL call */
} vg_sema_t;
+/* Cycle the sema_char passed through the pipe through 'A' .. 'Z' to make
+ it easier to make sense of strace/truss output - makes it possible
+ to see more clearly the change of ownership of the lock. Need to
+ be careful to reinitialise it at fork() time. */
+
// Nb: this may be OS-specific, but let's not factor it out until we
// implement an OS port for which this isn't ok.
void ML_(sema_init) ( vg_sema_t *sema );
Modified: branches/MTV/coregrind/m_syswrap/syswrap-amd64-linux.c (+5 -1)
===================================================================
--- branches/MTV/coregrind/m_syswrap/syswrap-amd64-linux.c 2013-03-27 11:43:20 +00:00 (rev 13340)
+++ branches/MTV/coregrind/m_syswrap/syswrap-amd64-linux.c 2013-03-27 12:40:48 +00:00 (rev 13341)
@@ -57,7 +57,6 @@
#include "priv_syswrap-linux-variants.h" /* decls of linux variant wrappers */
#include "priv_syswrap-main.h"
-
/* ---------------------------------------------------------------------
clone() handling
------------------------------------------------------------------ */
@@ -290,7 +289,12 @@
know that this thread has come into existence. If the clone
fails, we'll send out a ll_exit notification for it at the out:
label below, to clean up. */
+#ifdef SINGLEV
vg_assert(VG_(owns_BigLock_LL)(ptid));
+#else
+ vg_assert(ptst->slk == VgTs_ReadLock);
+ //mtV? or should we acquire the write lock ?
+#endif
VG_TRACK ( pre_thread_ll_create, ptid, ctid );
if (flags & VKI_CLONE_SETTLS) {
Modified: branches/MTV/coregrind/m_aspacemgr/aspacemgr-linux.c (+26 -4)
===================================================================
--- branches/MTV/coregrind/m_aspacemgr/aspacemgr-linux.c 2013-03-27 11:43:20 +00:00 (rev 13340)
+++ branches/MTV/coregrind/m_aspacemgr/aspacemgr-linux.c 2013-03-27 12:40:48 +00:00 (rev 13341)
@@ -300,6 +300,8 @@
static NSegment nsegments[VG_N_SEGMENTS];
static Int nsegments_used = 0;
+static Mutex ns_mutex;
+
#define Addr_MIN ((Addr)0)
#define Addr_MAX ((Addr)(-1ULL))
@@ -1196,14 +1198,22 @@
readonly data. */
NSegment const * VG_(am_find_nsegment) ( Addr a )
{
+ // mtV? Well, we are locking the data structure while we search it.
+ // But we return a pointer to it ???
+ // So, what if nsegments[i] is changed afterwards by another thread ?
+ VG_(mutex_lock)(&ns_mutex);
Int i = find_nsegment_idx(a);
aspacem_assert(i >= 0 && i < nsegments_used);
aspacem_assert(nsegments[i].start <= a);
aspacem_assert(a <= nsegments[i].end);
- if (nsegments[i].kind == SkFree)
+ if (nsegments[i].kind == SkFree) {
+ VG_(mutex_unlock)(&ns_mutex);
return NULL;
- else
+ }
+ else {
+ VG_(mutex_unlock)(&ns_mutex);
return &nsegments[i];
+ }
}
@@ -1323,7 +1333,10 @@
Bool VG_(am_is_valid_for_client)( Addr start, SizeT len,
UInt prot )
{
- return is_valid_for_client( start, len, prot, False/*free not OK*/ );
+ VG_(mutex_lock)(&ns_mutex);
+ Bool res = is_valid_for_client( start, len, prot, False/*free not OK*/ );
+ VG_(mutex_unlock)(&ns_mutex);
+ return res;
}
/* Variant of VG_(am_is_valid_for_client) which allows free areas to
@@ -1333,7 +1346,10 @@
Bool VG_(am_is_valid_for_client_or_free_or_resvn)
( Addr start, SizeT len, UInt prot )
{
- return is_valid_for_client( start, len, prot, True/*free is OK*/ );
+ VG_(mutex_lock)(&ns_mutex);
+ Bool res = is_valid_for_client( start, len, prot, True/*free is OK*/ );
+ VG_(mutex_unlock)(&ns_mutex);
+ return res;
}
@@ -1598,6 +1614,8 @@
NSegment seg;
Addr suggested_clstack_top;
+ VG_(mutex_init)(&ns_mutex);
+
aspacem_assert(sizeof(Word) == sizeof(void*));
aspacem_assert(sizeof(Addr) == sizeof(void*));
aspacem_assert(sizeof(SizeT) == sizeof(void*));
@@ -2023,6 +2041,7 @@
NSegment seg;
Bool needDiscard;
+ VG_(mutex_lock)(&ns_mutex);
aspacem_assert(len > 0);
aspacem_assert(VG_IS_PAGE_ALIGNED(a));
aspacem_assert(VG_IS_PAGE_ALIGNED(len));
@@ -2052,6 +2071,7 @@
}
add_segment( &seg );
AM_SANITY_CHECK;
+ VG_(mutex_unlock)(&ns_mutex);
return needDiscard;
}
@@ -2748,11 +2768,13 @@
segment. */
void VG_(am_set_segment_hasT_if_SkFileC_or_SkAnonC)( const NSegment* seg )
{
+ VG_(mutex_lock)(&ns_mutex);
Int i = segAddr_to_index( seg );
aspacem_assert(i >= 0 && i < nsegments_used);
if (nsegments[i].kind == SkAnonC || nsegments[i].kind == SkFileC) {
nsegments[i].hasT = True;
}
+ VG_(mutex_unlock)(&ns_mutex);
}
Modified: branches/MTV/perf/Makefile.am (+5 -1)
===================================================================
--- branches/MTV/perf/Makefile.am 2013-03-27 11:43:20 +00:00 (rev 13340)
+++ branches/MTV/perf/Makefile.am 2013-03-27 12:40:48 +00:00 (rev 13341)
@@ -6,6 +6,7 @@
EXTRA_DIST = \
bigcode1.vgperf \
bigcode2.vgperf \
+ big_parallel_sleepers.vgperf \
bz2.vgperf \
fbench.vgperf \
ffbench.vgperf \
@@ -18,7 +19,8 @@
test_input_for_tinycc.c
check_PROGRAMS = \
- bigcode bz2 fbench ffbench heap many-loss-records many-xpts sarp tinycc
+ bigcode big_parallel_sleepers bz2 fbench ffbench heap \
+ many-loss-records many-xpts sarp tinycc
AM_CFLAGS += -O $(AM_FLAG_M3264_PRI)
AM_CXXFLAGS += -O $(AM_FLAG_M3264_PRI)
@@ -30,6 +32,8 @@
fbench_CFLAGS = $(AM_CFLAGS) -O2
ffbench_LDADD = -lm
+big_parallel_sleepers_CFLAGS = $(AM_CFLAGS) -lpthread
+
tinycc_CFLAGS = $(AM_CFLAGS) -Wno-shadow -Wno-inline
if HAS_POINTER_SIGN_WARNING
tinycc_CFLAGS += -Wno-pointer-sign
Added: branches/MTV/include/priv_atomic_x86.h (+399 -0)
===================================================================
--- branches/MTV/include/priv_atomic_x86.h 2013-03-27 11:43:20 +00:00 (rev 13340)
+++ branches/MTV/include/priv_atomic_x86.h 2013-03-27 12:40:48 +00:00 (rev 13341)
@@ -0,0 +1,399 @@
+
+/*--------------------------------------------------------------------*/
+/*--- Atomic primitives for x86. priv_atomic_x86.h ---*/
+/*--------------------------------------------------------------------*/
+
+/*
+ This file is part of Valgrind, a dynamic binary instrumentation
+ framework.
+ Derived from glibc 2.13
+ Copyright (C) 2002-2004, 2006, 2007, 2009 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+ Contributed by Ulrich Drepper <dr...@re...>, 2002.
+
+ Copyright (C) 2012-2012 Philippe Waroquiers
+
+ This program is free software; you can redistribute it and/or
+ modify it under the terms of the GNU General Public License as
+ published by the Free Software Foundation; either version 2 of the
+ License, or (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307, USA.
+
+ The GNU General Public License is contained in the file COPYING.
+*/
+
+#ifndef __PRIV_ATOMIC_X86_H
+#define __PRIV_ATOMIC_X86_H
+
+#define LOCK_PREFIX "lock;"
+
+
+# define __arch_compare_and_exchange_val_8_acq(mem, newval, oldval) \
+ ({ __typeof (*mem) ret; \
+ __asm __volatile (LOCK_PREFIX "cmpxchgb %b2, %1" \
+ : "=a" (ret), "=m" (*mem) \
+ : "q" (newval), "m" (*mem), "0" (oldval)); \
+ ret; })
+
+# define __arch_compare_and_exchange_val_16_acq(mem, newval, oldval) \
+ ({ __typeof (*mem) ret; \
+ __asm __volatile (LOCK_PREFIX "cmpxchgw %w2, %1" \
+ : "=a" (ret), "=m" (*mem) \
+ : "r" (newval), "m" (*mem), "0" (oldval)); \
+ ret; })
+
+# define __arch_compare_and_exchange_val_32_acq(mem, newval, oldval) \
+ ({ __typeof (*mem) ret; \
+ __asm __volatile (LOCK_PREFIX "cmpxchgl %2, %1" \
+ : "=a" (ret), "=m" (*mem) \
+ : "r" (newval), "m" (*mem), "0" (oldval)); \
+ ret; })
+
+# define __arch_compare_and_exchange_val_64_acq(mem, newval, oldval) \
+ ({ __typeof (*mem) ret; \
+ __asm __volatile (LOCK_PREFIX "cmpxchg8b %1" \
+ : "=A" (ret), "=m" (*mem) \
+ : "b" (((unsigned long long int) (newval)) \
+ & 0xffffffff), \
+ "c" (((unsigned long long int) (newval)) >> 32), \
+ "m" (*mem), "a" (((unsigned long long int) (oldval)) \
+ & 0xffffffff), \
+ "d" (((unsigned long long int) (oldval)) >> 32)); \
+ ret; })
+
+
+/* Note that we need no lock prefix. */
+#define atomic_exchange_acq(mem, newvalue) \
+ ({ __typeof (*mem) result; \
+ if (sizeof (*mem) == 1) \
+ __asm __volatile ("xchgb %b0, %1" \
+ : "=q" (result), "=m" (*mem) \
+ : "0" (newvalue), "m" (*mem)); \
+ else if (sizeof (*mem) == 2) \
+ __asm __volatile ("xchgw %w0, %1" \
+ : "=r" (result), "=m" (*mem) \
+ : "0" (newvalue), "m" (*mem)); \
+ else if (sizeof (*mem) == 4) \
+ __asm __volatile ("xchgl %0, %1" \
+ : "=r" (result), "=m" (*mem) \
+ : "0" (newvalue), "m" (*mem)); \
+ else \
+ { \
+ result = 0; \
+ vg_assert (False); \
+ } \
+ result; })
+
+
+#define __arch_exchange_and_add_body(lock, pfx, mem, value) \
+ ({ __typeof (*mem) __result; \
+ __typeof (value) __addval = (value); \
+ if (sizeof (*mem) == 1) \
+ __asm __volatile (lock "xaddb %b0, %1" \
+ : "=q" (__result), "=m" (*mem) \
+ : "0" (__addval), "m" (*mem)); \
+ else if (sizeof (*mem) == 2) \
+ __asm __volatile (lock "xaddw %w0, %1" \
+ : "=r" (__result), "=m" (*mem) \
+ : "0" (__addval), "m" (*mem))); \
+ else if (sizeof (*mem) == 4) \
+ __asm __volatile (lock "xaddl %0, %1" \
+ : "=r" (__result), "=m" (*mem) \
+ : "0" (__addval), "m" (*mem)); \
+ else \
+ { \
+ __typeof (mem) __memp = (mem); \
+ __typeof (*mem) __tmpval; \
+ __result = *__memp; \
+ do \
+ __tmpval = __result; \
+ while ((__result = pfx##_compare_and_exchange_val_64_acq \
+ (__memp, __result + __addval, __result)) == __tmpval); \
+ } \
+ __result; })
+
+# define atomic_exchange_and_add(mem, value) \
+ __arch_exchange_and_add_body (LOCK_PREFIX, __arch, mem, value)
+
+#define __arch_add_body(lock, pfx, mem, value) \
+ do { \
+ if (__builtin_constant_p (value) && (value) == 1) \
+ atomic_increment (mem); \
+ else if (__builtin_constant_p (value) && (value) == -1) \
+ atomic_decrement (mem); \
+ else if (sizeof (*mem) == 1) \
+ __asm __volatile (lock "addb %b1, %0" \
+ : "=m" (*mem) \
+ : "iq" (value), "m" (*mem)); \
+ else if (sizeof (*mem) == 2) \
+ __asm __volatile (lock "addw %w1, %0" \
+ : "=m" (*mem) \
+ : "ir" (value), "m" (*mem)); \
+ else if (sizeof (*mem) == 4) \
+ __asm __volatile (lock "addl %1, %0" \
+ : "=m" (*mem) \
+ : "ir" (value), "m" (*mem)); \
+ else \
+ __sync_add_and_fetch(mem, value); \
+ } while (0)
+#if 0
+//mtV?
+ The below gives compilation problems:
+error: impossible register constraint in ‘asm’
+Waiting for that, we use __sync_add_and_fetch
+To be fixed ...
+ else \
+ { \
+ __typeof (value) __addval = (value); \
+ __typeof (mem) __memp = (mem); \
+ __typeof (*mem) __oldval = *__memp; \
+ __typeof (*mem) __tmpval; \
+ do \
+ __tmpval = __oldval; \
+ while ((__oldval = pfx##_compare_and_exchange_val_64_acq \
+ (__memp, __oldval + __addval, __oldval)) == __tmpval); \
+ }} while (0)
+#endif
+
+
+#define atomic_add(mem, value) \
+ __arch_add_body (LOCK_PREFIX, __arch, mem, value)
+
+
+#define atomic_add_negative(mem, value) \
+ ({ unsigned char __result; \
+ if (sizeof (*mem) == 1) \
+ __asm __volatile (LOCK_PREFIX "addb %b2, %0; sets %1" \
+ : "=m" (*mem), "=qm" (__result) \
+ : "iq" (value), "m" (*mem)); \
+ else if (sizeof (*mem) == 2) \
+ __asm __volatile (LOCK_PREFIX "addw %w2, %0; sets %1" \
+ : "=m" (*mem), "=qm" (__result) \
+ : "ir" (value), "m" (*mem)); \
+ else if (sizeof (*mem) == 4) \
+ __asm __volatile (LOCK_PREFIX "addl %2, %0; sets %1" \
+ : "=m" (*mem), "=qm" (__result) \
+ : "ir" (value), "m" (*mem)); \
+ else \
+ vg_assert (False); \
+ __result; })
+
+
+#define atomic_add_zero(mem, value) \
+ ({ unsigned char __result; \
+ if (sizeof (*mem) == 1) \
+ __asm __volatile (LOCK_PREFIX "addb %b2, %0; setz %1" \
+ : "=m" (*mem), "=qm" (__result) \
+ : "iq" (value), "m" (*mem)); \
+ else if (sizeof (*mem) == 2) \
+ __asm __volatile (LOCK_PREFIX "addw %w2, %0; setz %1" \
+ : "=m" (*mem), "=qm" (__result) \
+ : "ir" (value), "m" (*mem)); \
+ else if (sizeof (*mem) == 4) \
+ __asm __volatile (LOCK_PREFIX "addl %2, %0; setz %1" \
+ : "=m" (*mem), "=qm" (__result) \
+ : "ir" (value), "m" (*mem)); \
+ else \
+ vg_assert (False); \
+ __result; })
+
+
+#define __arch_increment_body(lock, pfx, mem) \
+ do { \
+ if (sizeof (*mem) == 1) \
+ __asm __volatile (lock "incb %b0" \
+ : "=m" (*mem) \
+ : "m" (*mem)); \
+ else if (sizeof (*mem) == 2) \
+ __asm __volatile (lock "incw %w0" \
+ : "=m" (*mem) \
+ : "m" (*mem)); \
+ else if (sizeof (*mem) == 4) \
+ __asm __volatile (lock "incl %0" \
+ : "=m" (*mem) \
+ : "m" (*mem)); \
+ else \
+ __sync_add_and_fetch(mem, 1); \
+ } while (0)
+
+#if 0
+ //mtV?
+ //????? the below gives asm error on x86 at least ?????
+ /// replacing by __sync_add_and_fetch
+ else \
+ { \
+ __typeof (mem) __memp = (mem); \
+ __typeof (*mem) __oldval = *__memp; \
+ __typeof (*mem) __tmpval; \
+ do \
+ __tmpval = __oldval; \
+ while ((__oldval = pfx##_compare_and_exchange_val_64_acq \
+ (__memp, __oldval + 1, __oldval)) == __tmpval); \
+ }
+#endif
+
+#define atomic_increment(mem) __arch_increment_body (LOCK_PREFIX, __arch, mem)
+
+
+#define atomic_increment_and_test(mem) \
+ ({ unsigned char __result; \
+ if (sizeof (*mem) == 1) \
+ __asm __volatile (LOCK_PREFIX "incb %0; sete %b1" \
+ : "=m" (*mem), "=qm" (__result) \
+ : "m" (*mem)); \
+ else if (sizeof (*mem) == 2) \
+ __asm __volatile (LOCK_PREFIX "incw %0; sete %w1" \
+ : "=m" (*mem), "=qm" (__result) \
+ : "m" (*mem)); \
+ else if (sizeof (*mem) == 4) \
+ __asm __volatile (LOCK_PREFIX "incl %0; sete %1" \
+ : "=m" (*mem), "=qm" (__result) \
+ : "m" (*mem)); \
+ else \
+ vg_assert (False); \
+ __result; })
+
+
+#define __arch_decrement_body(lock, pfx, mem) \
+ do { \
+ if (sizeof (*mem) == 1) \
+ __asm __volatile (lock "decb %b0" \
+ : "=m" (*mem) \
+ : "m" (*mem)); \
+ else if (sizeof (*mem) == 2) \
+ __asm __volatile (lock "decw %w0" \
+ : "=m" (*mem) \
+ : "m" (*mem)); \
+ else if (sizeof (*mem) == 4) \
+ __asm __volatile (lock "decl %0" \
+ : "=m" (*mem) \
+ : "m" (*mem)); \
+ else \
+ { \
+ __typeof (mem) __memp = (mem); \
+ __typeof (*mem) __oldval = *__memp; \
+ __typeof (*mem) __tmpval; \
+ do \
+ __tmpval = __oldval; \
+ while ((__oldval = pfx##_compare_and_exchange_val_64_acq \
+ (__memp, __oldval - 1, __oldval)) == __tmpval); \
+ } \
+ } while (0)
+
+#define atomic_decrement(mem) __arch_decrement_body (LOCK_PREFIX, __arch, mem)
+
+#define atomic_decrement_and_test(mem) \
+ ({ unsigned char __result; \
+ if (sizeof (*mem) == 1) \
+ __asm __volatile (LOCK_PREFIX "decb %b0; sete %1" \
+ : "=m" (*mem), "=qm" (__result) \
+ : "m" (*mem)); \
+ else if (sizeof (*mem) == 2) \
+ __asm __volatile (LOCK_PREFIX "decw %w0; sete %1" \
+ : "=m" (*mem), "=qm" (__result) \
+ : "m" (*mem)); \
+ else if (sizeof (*mem) == 4) \
+ __asm __volatile (LOCK_PREFIX "decl %0; sete %1" \
+ : "=m" (*mem), "=qm" (__result) \
+ : "m" (*mem)); \
+ else \
+ vg_assert (False); \
+ __result; })
+
+
+#define atomic_bit_set(mem, bit) \
+ do { \
+ if (sizeof (*mem) == 1) \
+ __asm __volatile (LOCK_PREFIX "orb %b2, %0" \
+ : "=m" (*mem) \
+ : "m" (*mem), "iq" (1 << (bit))); \
+ else if (sizeof (*mem) == 2) \
+ __asm __volatile (LOCK_PREFIX "orw %w2, %0" \
+ : "=m" (*mem) \
+ : "m" (*mem), "ir" (1 << (bit))); \
+ else if (sizeof (*mem) == 4) \
+ __asm __volatile (LOCK_PREFIX "orl %2, %0" \
+ : "=m" (*mem) \
+ : "m" (*mem), "ir" (1 << (bit))); \
+ else \
+ vg_assert (False); \
+ } while (0)
+
+
+#define atomic_bit_test_set(mem, bit) \
+ ({ unsigned char __result; \
+ if (sizeof (*mem) == 1) \
+ __asm __volatile (LOCK_PREFIX "btsb %3, %1; setc %0" \
+ : "=q" (__result), "=m" (*mem) \
+ : "m" (*mem), "ir" (bit)); \
+ else if (sizeof (*mem) == 2) \
+ __asm __volatile (LOCK_PREFIX "btsw %3, %1; setc %0" \
+ : "=q" (__result), "=m" (*mem) \
+ : "m" (*mem), "ir" (bit)); \
+ else if (sizeof (*mem) == 4) \
+ __asm __volatile (LOCK_PREFIX "btsl %3, %1; setc %0" \
+ : "=q" (__result), "=m" (*mem) \
+ : "m" (*mem), "ir" (bit)); \
+ else \
+ vg_assert (False); \
+ __result; })
+
+
+#define atomic_delay() asm ("rep; nop")
+
+
+#define __arch_and_body(lock, mem, mask) \
+ do { \
+ if (sizeof (*mem) == 1) \
+ __asm __volatile (lock "andb %b1, %0" \
+ : "=m" (*mem) \
+ : "iq" (mask), "m" (*mem)); \
+ else if (sizeof (*mem) == 2) \
+ __asm __volatile (lock "andw %w1, %0" \
+ : "=m" (*mem) \
+ : "ir" (mask), "m" (*mem)); \
+ else if (sizeof (*mem) == 4) \
+ __asm __volatile (lock "andl %1, %0" \
+ : "=m" (*mem) \
+ : "ir" (mask), "m" (*mem)); \
+ else \
+ vg_assert (False); \
+ } while (0)
+
+
+#define atomic_and(mem, mask) __arch_and_body (LOCK_PREFIX, mem, mask)
+
+#define __arch_or_body(lock, mem, mask) \
+ do { \
+ if (sizeof (*mem) == 1) \
+ __asm __volatile (lock "orb %b1, %0" \
+ : "=m" (*mem) \
+ : "iq" (mask), "m" (*mem)); \
+ else if (sizeof (*mem) == 2) \
+ __asm __volatile (lock "orw %w1, %0" \
+ : "=m" (*mem) \
+ : "ir" (mask), "m" (*mem)); \
+ else if (sizeof (*mem) == 4) \
+ __asm __volatile (lock "orl %1, %0" \
+ : "=m" (*mem) \
+ : "ir" (mask), "m" (*mem)); \
+ else \
+ vg_assert (False); \
+ } while (0)
+
+#define atomic_or(mem, mask) __arch_or_body (LOCK_PREFIX, mem, mask)
+
+#endif /* __PRIV_ATOMIC_X86_H */
+
+/*--------------------------------------------------------------------*/
+/*--- end priv_atomic_x86.h ---*/
+/*--------------------------------------------------------------------*/
Modified: branches/MTV/gdbserver_tests/sleepers.c (+1 -1)
===================================================================
--- branches/MTV/gdbserver_tests/sleepers.c 2013-03-27 11:43:20 +00:00 (rev 13340)
+++ branches/MTV/gdbserver_tests/sleepers.c 2013-03-27 12:40:48 +00:00 (rev 13341)
@@ -132,7 +132,7 @@
pthread_t ebbr, egll, zzzz;
struct spec b, l, p, m;
char *some_mem __attribute__((unused)) = malloc(100);
- setaffinity();
+ if (argc < 6) setaffinity(); // add -p to have parallel sleepers
if (argc > 1)
loops = atoi(argv[1]);
Modified: branches/MTV/coregrind/m_transtab.c (+54 -9)
===================================================================
--- branches/MTV/coregrind/m_transtab.c 2013-03-27 11:43:20 +00:00 (rev 13340)
+++ branches/MTV/coregrind/m_transtab.c 2013-03-27 12:40:48 +00:00 (rev 13341)
@@ -44,8 +44,8 @@
#include "pub_core_mallocfree.h" // VG_(out_of_memory_NORETURN)
#include "pub_core_xarray.h"
#include "pub_core_dispatch.h" // For VG_(disp_cp*) addresses
+#include "pub_tool_lock.h"
-
#define DEBUG_TRANSTAB 0
@@ -348,6 +348,20 @@
N_TC_SECTORS. The initial -1 value indicates the TT/TC system is
not yet initialised.
*/
+
+/* translation table search/add/... protected by the below mutex.
+ Why is this mutex needed ?
+ Why can't we just use the Big Lock e.g. in Read mode ?
+ Having the Big Lock in read mode does not provide
+ a safe access to the translation table. A.o., a search in
+ the translation table will modify various "small caches"
+ arrays (such as the order in which sectors are searched.
+ It would be possible to use the Big Lock in write mode.
+ This was even tried. This gave catastrophic performances:
+ more total CPU and longer total elapsed time than the
+ serialised Valgrind. */
+static Mutex tt_mutex;
+
static Sector sectors[N_SECTORS];
static Int youngest_sector = -1;
@@ -673,6 +687,7 @@
{
Int i;
+ VG_(mutex_lock) (&tt_mutex);
/* Search order logic copied from VG_(search_transtab). */
for (i = 0; i < N_SECTORS; i++) {
Int sno = sector_search_order[i];
@@ -700,9 +715,10 @@
/* if this hx entry corresponds to dead host code, we must
tell this code has not been found, as it cannot be patched. */
- if (HostExtent__is_dead (hx, sec))
+ if (HostExtent__is_dead (hx, sec)) {
+ VG_(mutex_unlock) (&tt_mutex);
return False;
-
+ }
vg_assert(sec->tt[tteNo].status == InUse);
/* Can only half check that the found TTEntry contains hcode,
due to not having a length value for the hcode in the
@@ -711,9 +727,11 @@
/* Looks plausible */
*from_sNo = sno;
*from_tteNo = (UInt)tteNo;
+ VG_(mutex_unlock) (&tt_mutex);
return True;
}
}
+ VG_(mutex_unlock) (&tt_mutex);
return False;
}
@@ -783,7 +801,27 @@
}
TTEntry* from_tte = index_tte(from_sNo, from_tteNo);
+ HWord from_offs = (HWord)( (UChar*)from__patch_addr
+ - (UChar*)from_tte->tcptr );
+ vg_assert(from_offs < 100000/* let's say */);
+ /* The chaining might have been done already by another thread.
+ In such a case, don't redo the chaining. */
+ /* Visit all OutEdges owned by from_tte. */
+ UWord n = OutEdgeArr__size(&from_tte->out_edges);
+ UWord i;
+ for (i = 0; i < n; i++) {
+ OutEdge* oe = OutEdgeArr__index(&from_tte->out_edges, i);
+ if (oe->to_sNo == to_sNo && oe->to_tteNo == to_tteNo
+ && oe->from_offs == from_offs) {
+ VG_(debugLog)(1,"transtab",
+ "host code %p already chained"
+ " => no chaining redone\n",
+ from__patch_addr);
+ return;
+ }
+ }
+
/* Get VEX to do the patching itself. We have to hand it off
since it is host-dependent. */
VexInvalRange vir
@@ -808,9 +846,6 @@
ie.from_sNo = from_sNo;
ie.from_tteNo = from_tteNo;
ie.to_fastEP = to_fastEP;
- HWord from_offs = (HWord)( (UChar*)from__patch_addr
- - (UChar*)from_tte->tcptr );
- vg_assert(from_offs < 100000/* let's say */);
ie.from_offs = (UInt)from_offs;
/* This is the new to_ -> from_ backlink to add. */
@@ -1528,6 +1563,7 @@
VG_(printf)("add_to_transtab(entry = 0x%llx, len = %d) ...\n",
entry, code_len);
+ VG_(mutex_lock) (&tt_mutex);
n_in_count++;
n_in_tsize += code_len;
n_in_osize += vge_osize(vge);
@@ -1660,9 +1696,9 @@
/* Note the eclass numbers for this translation. */
upd_eclasses_after_add( §ors[y], i );
+ VG_(mutex_unlock) (&tt_mutex);
}
-
/* Search for the translation of the given guest address. If
requested, a successful search can also cause the fast-caches to be
updated.
@@ -1678,18 +1714,22 @@
vg_assert(init_done);
/* Find the initial probe point just once. It will be the same in
all sectors and avoids multiple expensive % operations. */
- n_full_lookups++;
k = -1;
kstart = HASH_TT(guest_addr);
vg_assert(kstart >= 0 && kstart < N_TTES_PER_SECTOR);
+ VG_(mutex_lock) (&tt_mutex);
+ n_full_lookups++;
+
/* Search in all the sectors,using sector_search_order[] as a
heuristic guide as to what order to visit the sectors. */
for (i = 0; i < N_SECTORS; i++) {
sno = sector_search_order[i];
- if (UNLIKELY(sno == -1))
+ if (UNLIKELY(sno == -1)) {
+ VG_(mutex_unlock) (&tt_mutex);
return False; /* run out of sectors to search */
+ }
k = kstart;
for (j = 0; j < N_TTES_PER_SECTOR; j++) {
@@ -1714,6 +1754,7 @@
sector_search_order[i-1] = sector_search_order[i];
sector_search_order[i] = tmp;
}
+ VG_(mutex_unlock) (&tt_mutex);
return True;
}
if (sectors[sno].tt[k].status == Empty)
@@ -1729,6 +1770,7 @@
}
/* Not found in any sector. */
+ VG_(mutex_unlock) (&tt_mutex);
return False;
}
@@ -2175,6 +2217,8 @@
{
Int i, j, avg_codeszQ;
+ VG_(mutex_init) (&tt_mutex);
+ VG_(mutex_lock)(&tt_mutex);
vg_assert(!init_done);
init_done = True;
@@ -2249,6 +2293,7 @@
N_SECTORS * N_TTES_PER_SECTOR,
N_SECTORS * N_TTES_PER_SECTOR_USABLE,
SECTOR_TT_LIMIT_PERCENT );
+ VG_(mutex_unlock)(&tt_mutex);
}
Modified: branches/MTV/coregrind/m_syswrap/syswrap-linux.c (+8 -1)
===================================================================
--- branches/MTV/coregrind/m_syswrap/syswrap-linux.c 2013-03-27 11:43:20 +00:00 (rev 13340)
+++ branches/MTV/coregrind/m_syswrap/syswrap-linux.c 2013-03-27 12:40:48 +00:00 (rev 13341)
@@ -80,7 +80,7 @@
vg_assert(tst->status == VgTs_Init);
/* make sure we get the CPU lock before doing anything significant */
- VG_(acquire_BigLock)(tid, "thread_wrapper(starting new thread)");
+ VG_(acquire_BigLock)(tid, VgTs_WriteLock, "thread_wrapper(starting new thread)");
if (0)
VG_(printf)("thread tid %d started: stack = %p\n",
@@ -424,6 +424,13 @@
VG_(do_atfork_pre)(tid);
+#ifdef SINGLEV
+ vg_assert(VG_(owns_BigLock_LL)(ptid));
+#else
+ vg_assert(VG_(threads)[tid].slk == VgTs_ReadLock);
+ //mtV? or should we rather have the write lock ?
+#endif
+
/* Since this is the fork() form of clone, we don't need all that
VG_(clone) stuff */
#if defined(VGP_x86_linux) \
Modified: branches/MTV/coregrind/m_libcassert.c (+6 -2)
===================================================================
--- branches/MTV/coregrind/m_libcassert.c 2013-03-27 11:43:20 +00:00 (rev 13340)
+++ branches/MTV/coregrind/m_libcassert.c 2013-03-27 12:40:48 +00:00 (rev 13341)
@@ -230,11 +230,15 @@
{
Int i;
VG_(printf)("\nsched status:\n");
+#ifdef SINGLEV
VG_(printf)(" running_tid=%d\n", VG_(get_running_tid)());
+#endif
for (i = 1; i < VG_N_THREADS; i++) {
if (VG_(threads)[i].status == VgTs_Empty) continue;
- VG_(printf)( "\nThread %d: status = %s\n", i,
- VG_(name_of_ThreadStatus)(VG_(threads)[i].status) );
+ VG_(printf)( "\nThread %d: status = %s slk = %s in_gen_code %d\n", i,
+ VG_(name_of_ThreadStatus)(VG_(threads)[i].status),
+ VG_(name_of_SchedLockKind)(VG_(threads)[i].slk),
+ VG_(threads)[i].in_generated_code);
VG_(get_and_pp_StackTrace)( i, BACKTRACE_DEPTH );
}
VG_(printf)("\n");
Modified: branches/MTV/coregrind/m_dispatch/dispatch-x86-linux.S (+2 -2)
===================================================================
--- branches/MTV/coregrind/m_dispatch/dispatch-x86-linux.S 2013-03-27 11:43:20 +00:00 (rev 13340)
+++ branches/MTV/coregrind/m_dispatch/dispatch-x86-linux.S 2013-03-27 12:40:48 +00:00 (rev 13341)
@@ -200,7 +200,7 @@
movl OFFSET_x86_EIP(%ebp), %eax
/* stats only */
- addl $1, VG_(stats__n_xindirs_32)
+ lock addl $1, VG_(stats__n_xindirs_32)
/* try a fast lookup in the translation cache */
movl %eax, %ebx /* next guest addr */
@@ -216,7 +216,7 @@
fast_lookup_failed:
/* stats only */
- addl $1, VG_(stats__n_xindir_misses_32)
+ lock addl $1, VG_(stats__n_xindir_misses_32)
movl $VG_TRC_INNER_FASTMISS, %eax
movl $0, %edx
Added: branches/MTV/docs/internals/mtV.txt (+982 -0)
===================================================================
--- branches/MTV/docs/internals/mtV.txt 2013-03-27 11:43:20 +00:00 (rev 13340)
+++ branches/MTV/docs/internals/mtV.txt 2013-03-27 12:40:48 +00:00 (rev 13341)
@@ -0,0 +1,982 @@
+Valgrind supports multi-threaded applications, but schedules
+only one thread at a time. In other words, a multi-threaded application
+running under Valgrind will not benefit from multiple CPUs.
+
+A prototype has been developped of a "really" multi threaded Valgrind
+(mtV). The prototype is made of ugly and/or inefficient
+kludges/trials/...
+Now, you have been warned that you will encounter horrors.
+The only objective of this prototype is to understand the problems of
+doing an mtV, see what are the possible approaches, possible
+performance gains.
+The current state of the patches and/or tests results are maintained
+in bugzilla in bug
+https://bugs.kde.org/show_bug.cgi?id=301830
+
+
+The document starts with a description of the current behaviour and
+structure of Valgrind.
+It then contains a description of the prototype developped,
+the techniques used, the problems still opened.
+The document below has some sections.
+Section title starts with a #.
+The first section is some general information, which might
+be skipped by most V developpers.
+
+
+# The 3 Valgrind "layers":
+==========================
+ ------------------------------------------------------------------------
+ | | |
+ | TOOL "runtime code" | "instrument function" |
+ ------------------------------------------------------------------------
+ | |
+ | GUEST JIT code |
+ | (generated/instrumented code) |
+ --------------------------------------------------------------------
+ | |
+ | CORE layer |
+ --------------------------------------------------------------------
+
+
+ CORE layer : this contains the V framework & modules
+ used to support the TOOL code.
+ TOOL layer : made of two big parts.
+ 1. The instrument function is called by the CORE layer.
+ It instruments the code of the executable running
+ under V small blocks at a time, producing
+ "translated and instrumented" small pieces of JIT code.
+ These pieces of JIT codes are called by the scheduler
+ contained in the CORE layer.
+ 2. the TOOL "runtime code" (C helper functions and data
+ structures needed by the GUEST JIT code).
+ For example, for memcheck, it contains the data
+ structures to track the allocated and freed memory.
+ GUEST layer : contains GUEST JIT : this is the process guest code
+ translated and instrumented by the TOOL instrument function.
+
+
+ The typical control flow is:
+
+ 1. CORE layer calls the "instrument function", producing
+ instrumented GUEST JIT code
+
+ 2. CORE layer calls the GUEST JIT generated code.
+
+ 3. the GUEST JIT code runs. It will typically do many calls to
+ the tool runtime code.
+
+ Note: the none tool is special : the "instrument function"
+ does not do any code transformation. The none tool has no
+ runtime code.
+
+ The tool runtime code can itself do calls to the CORE layer.
+
+ Example:
+ the guest process code is: char *s;
+ s = malloc (10);
+ strcpy(s, "abc");
+ (*fnptr)();
+ The following sequence will happen:
+ 1. CORE will decode the guest process code.
+ 2. CORE will call the TOOL function to instrument this decoded code
+ For memcheck, the instrumented code will be made of:
+ a call to the memcheck malloc replacement function
+ (this replacement function is part of memcheck runtime code,
+ it a.o. tracks the allocated memory to allow leak search).
+ an assignment of the result of the malloc replacement to s
+ a call to a tool C helper to indicate that s (the ptr) is now
+ initialized
+ a call to the function strcpy
+ a (dynamic) call to the function pointed to by fnptr.
+ 3. CORE will translate the instrumented code to executable code (JIT)
+ and will store this code in a data structure (the translation table).
+ Basically, the translation table is a mapping between a guest code
+ address and the corresponding translated JIT code.
+ 4. CORE scheduler will call the JIT code (the just translated piece of
+ code)
+ 5. the JIT code does the following:
+ call the tool malloc replacement function, which does:
+ call the CORE code to allocate a block of memory
+ (10 bytes + some admin overhead).
+ call the CORE code to compute (and store) a stack trace of
+ the guest code call stack.
+ call the CORE code to store in an hash table
+ the address of the allocated block
+ + the stack trace reference
+ maintain in a memcheck data structure that the 10 bytes are
+ accessible but not initialized.
+ the JIT code should normally call strcpy. Because strcpy
+ is not translated yet, the call code is exiting to the scheduler.
+ So, the JIT code executes a return, giving back the control to
+ the CORE scheduler
+ 6. the scheduler will translate the strcpy function (generating a new
+ piece of instrumented JIT code) and add it in the translation table.
+ Possibly, the table is full. Then the old translations have to be
+ removed from the table.
+ 7. The scheduler then calls the new JIT code
+ The JIT code will execute the strcpy instrumented JIT code
+ (this code will typically do multiple calls to the tool runtime
+ code to indicate that the 4 first bytes pointed to by s are now
+ initialized).
+ 8. The JIT code will search in the translation table for the
+ translated piece of code corresponding to *fnptr.
+ If existing, it is called.
+ Otherwise, control is given back to scheduler for instrumentation.
+
+
+For a typical tool and guest application being executed, most of the
+time is spent in GUEST JIT code, in the TOOL runtime code and in
+the CORE code. It is deemed that the time spent in TOOL instrument
+function is not a major part : usually, a translated piece of code
+is executed often.
+
+If we have an application containing multiple threads, there is no
+(to be more precise, almost no) parallel execution : at any moment
+in time, there is maximum one thread which "really" executes some code.
+This thread can be busy either in the CORE layer (possibly calling
+the TOOL instrument function), or can be busy in GUEST JIT code
+or in the TOOL runtime code.
+
+This "single thread busy" model is needed because neither the CORE
+layer, nor the TOOL layer (runtime or instrument) are re-entrant.
+These 3 layers are containing global variables/data structures/...
+which can only be used by one thread at a time.
+
+To ensure thread-safety of this non-reentrant code, V uses the very
+simple approach of "single thread busy". The "single thread busy" is
+ensured by the "Big Lock".
+
+A thread must acquire the Big Lock before it executes CORE or GUEST or
+TOOL code. When a thread acquires the Big Lock, it becomes THE running
+thread.
+
+The running thread releases the Big Lock after it has executed a certain
+quantity of GUEST code. Releasing the Big lock will allow another thread
+to run during some time.
+
+The other threads (ready to run) are all blocked, trying
+to acquire the Big Lock. One of these threads will acquire the Big Lock
+and start to execute some code. Typically, it will start to execute
+GUEST JIT code. But it might also start to execute CORE code because
+some guest code has to be instrumented.
+
+If the running thread executing GUEST JIT code has to execute a
+syscall (e.g. reading data on a socket), the running thread must
+release the Big Lock : if this thread would not release the Big Lock
+before doing a syscall, then the whole application will be blocked
+waiting for this thread to finish its syscall.
+
+In other words, the only real parallelism provided by Valgrind is
+between one thread doing some CPU in CORE/GUEST/TOOL
+and all other threads doing a system call called by GUEST JIT code.
+
+This is a very low level of parallelism. If an application does
+an intensive usage of threads, the typically slowdown factor
+of the V tool (e.g. 5 to 20 for memcheck) will be multiplied
+by the serial execution of the CORE/GUEST/TOOL code.
+
+The objective of the prototype is to determine how to best increase
+the parallelism of Valgrind.
+
+# the non-thread safe code
+==========================
+To increase the performance, we want to have multiple
+threads running in parallel (e.g. executing the code of the example).
+For this, the Big Lock must be removed and replaced by other
+techniques : in all the above steps, global data structures are used
+that will be corrupted by parallel access : almost all the steps are
+not thread safe if the Big Lock is removed.
+Typically, for the translation part, the following are not thread safe :
+ the VEX lib (used by the CORE and tool instrument function)
+ the tool instrument function itself
+ the CORE translation framework
+ ...
+
+At runtime (executing JIT code), e.g. the following are not thread safe
+ the CORE scheduler
+ the memcheck C helpers
+ memcheck malloc replacement
+ memcheck V and A bits C helpers
+ the CORE malloc/free
+ the CORE aspacemgr (used e.g. by the CORE malloc/free)
+ ...
+
+At many places in the code, we have statistical counters
+to help understand the behaviour/performance of V.
+(e.g. CORE malloc is counting how many bytes have been malloc-ed).
+These counters are all non-thread safe.
+
+The guest code might or might not be thread safe (e.g. might contain
+race condition). Such non thread safe guest code is not a problem
+for our objective, as such non thread safety will only corrupt the
+guest process data structure (the developper of the guest code might
+use helgrind to search for such non thread safe code).
+
+However, currently, even thread-safe guest code can result in non
+thread safe JIT code. For example, two threads executing
+at the same time a call to a not yet translated function (e.g. strcpy)
+will corrupt the JIT code (t-chaining).
+
+Making all the above thread safe can be done using various techniques:
+ using thread local storage instead of global variables
+ using mutex locks
+ using read/write locks
+ using atomic instructions
+ (e.g. for statistical counters)
+ using lock-less algorithms
+ (e.g. to maintain data structures without
+ using locks. Such lock-less algorithms are
+ based on atomic instructions)
+ Note: mutex can be implemented using atomic instructions and
+ OS syscalls (e.g. based on futex). If there is no contention,
+ the perf. of mutex based approach will be very probably similar
+ (or even maybe better?) than a lock-less algorithm.
+ Lock-less algorithms might however help either to increase
+ the throughput or to avoid difficulties such as deadlocks.
+
+The prototype has explored some of the above techniques.
+Some "testing" (ha ha) has been done. See # testing below.
+
+At this stage, only the thread safe aspect of CORE and JIT layer
+was looked at for the prototype. Nothing has been done to look
+at the tool runtime layer.
+
+# prototype
+===========
+
+The very first version of the prototype was based on the following
+idea (looking somewhat wrong a posteriori):
+ When a thread executes guest code, it has to use some data
+ structures (e.g. the translation table, the JIT code itself, ...).
+ These structures can't be protected by a mutex, otherwise
+ we are back to stage 1: no parallelism.
+ So, let's transform the Big Lock into a rwlock.
+ Before executing guest code, a thread must acquire
+ the Big Lock in read mode.
+ Before doing any modifications to any data structure, the
+ thread must acquire the Big Lock in write mode.
+
+So, the Big Lock was transformed into a rwlock by using
+low level "semaphores". These semaphores are the
+same as the current trunk scheduler "big lock", i.e. implemented
+using a pipe. !!! Fair scheduler has not been looked at.
+The rwlock implemented on top of these semaphores is not
+efficient as it implies several read/write syscall
+to acquire/release the lock. Really
+
+With this, a bunch of changes were needed to avoid assertions
+being raised. A.o.:
+ * the concept of THE lock owner disappears
+ so this cannot be checked anymore
+ * the concept of THE running thread disappears similarly
+ * the concept of a global 'in generated code' disappears
+ * a bunch of failing asserts have been #ifdef-ed or commented.
+
+After fixing the above, the 4 threads were able to run in parallel.
+One observe the following on the "big_parallel_sleepers" test:
+ * during +- 40 seconds, about 125% CPU is used
+ * after that, jump to 400%.
+ Interpretation of this: making the translations and storing them
+ in the transtab is still very serialized by the Big Lock.
+ Once all the code is translated, full speed is possible.
+ See also the "duplicate t-chaining" below.
+
+
+helgrind (trunk) was then used in a setup "outer trunk helgrind/inner
+none tool prototype" to find race conditions.
+
+A bunch of such race conditions were found.
+Typically:
+ * race conditions in statistical counters
+ * ... need to retrieve and document more of these changes done.
+
+There are some tricky races as some actions looks like they are just
+reading some data, but in fact they do modifications to global
+variables. E.g. all the functions which are maintaining a small static
+local cache will write to the local cache. Typical example in the
+aspacemgr or in the transtab.
+The transtab (VG_(tt_fast)) is the worst case because:
+ 1. it is used a lot
+ 2. it is used by the asm dispatch code.
+=> using a rw lock for this might not be an ideal solution.
+See # tt_fast below for another suggested approach.
+Currently the VG_(tt_fast) race condition is not fixed
+in the prototype.
+The other data structures related to translation tables were
+first tried to be protected the following way:
+ Before having to search or modify the translation table,
+ the Big Lock has to be acquired in W mode.
+ So, if a thread had the Big Lock in R mode, it
+ was reacquiring it in W mode (by releasing and re-acquiring).
+ Really not efficient, the effect of this was really bad:
+ The max CPU usage dropped from 400% till 140%.
+ Worse, the total elapsed time to run the test was
+ bigger than with the V trunk.
+
+The conclusion of this was : a (reasonable) mtV cannot be based
+purely on a RW Big Lock.
+
+* So, started to make a pub_tool_lock.h and m_lock.c module.
+ (currently only contains a mutex, based on atomic instructions
+ and futex syscall). It should at least be completed with
+ a rwlock. Maybe also spin locks ?
+ Some constraints for this module:
+ * it should be initialisable very early in the startup sequence
+ (as e.g. aspacemgr will need it. Even maybe DebugLog might
+ need locks).
+
+ The m_lock.c is derived from (lgpl 2.1) NPTL glibc 2.13 code.
+ Atomic instructions for x86 and amd64 were also copied from
+ the NPTL pthread lib and slightly transformed.
+ Basically, removed the 'catomic*' kind of actions, which are
+ optimisations done referencing a global pthread NPTL var
+ to "skip" the LOCK prefix when there is only one thread.
+ !!! There is one asm statement in priv_atomic_x86.h
+ giving a compile/assembly error.
+ Replaced by __sync_add_and_fetch temporarily. This should
+ be fixed.
+ !!! the fair scheduler should be rewritten based on the
+ atomic instructions rather than the __sync.. and __builtin
+ so that it will be available everywhere.
+ !!! need to see if all 32 bits platforms are supporting
+ an atomic increment of a 64 bit counter. Might either not
+ be supported or cause problems like the x86 compile error above.
+ Then these will have to be emulated. This might all be
+ costly so we might have to avoid some of the 64 bits statistical
+ counters.
+
+* The above efficient futex based mutex was used to protect
+ the translation table. With this, many race condiions
+ disappeared. CPU usage back to 400%.
+
+* VG_(unknown_SP_update) is a perf. critical function.
+ This function contains a piece of non thread safe code
+ for detecting stack changes. This code has been
+ disabled waiting for a proper solution.
+ A possible approach is to use TLS : the current_stack
+ global variable would become a 'per thread' variable.
+ See # TLS below for the trial of thread local storage.
+
+* aspacemgr locking: race condition detected e.g. between
+ VG_(am_find_nsegment)
+ and a mmap syscall, calling VG_(am_notify_client_mmap)
+ => a mutex was added in aspacemgr, protecting at least
+ the race between these 2 functions.
+ However, it is far to be clear that the aspacemgr is
+ "safe" with that. Effectively, VG_(am_find_nsegment)
+ returns a pointer to an element of the segment array.
+ So, if another thread is modifying the entry in the
+ array once the first thread has got an access to it,
+ then what ? It looks however that VG_(am_find_nsegment)
+ is used for "small durations". But still it is not
+ clear this is a "clean thread safe interface".
+ It is unclear exactly what and how should be protected
+ in the aspace mgr. Protecting all the public interface
+ of aspacemgr could be done (need to avoid recursive locking,
+ as pub_tool_lock.h does not detect that). Howeve, unclear
+ if this is good enough (or not).
+
+* When doing the trial of protecting aspacemgr globally,
+ deadlock obtained due to recursive locking.
+ => one might need to make "safe" locks (currently,
+ m_lock.c does not verify non-recursive locking).
+ Also, if we do plenty of fine grained locking everywhere,
+ deadlocks might be difficult to avoid.
+ Lock-free algorithms might help to avoid these.
+ See # Lock free algorithms below.
+
+* Need to avoid "duplicate t-chaining".
+ Got an assert failure in VEX, as the place to t-chain did not
+ contain the expected bytes. This was created by two threads
+ detecting at the same time that a t-chaining is to be done.
+ Then, even if Write Locked one after each other, the 2nd
+ thread would assert as the expected bytes to replace
+ for t-chain are not there anymore.
+ So, in the t-chaining protected critical section, there
+ is a verification if the t-chaining has not been done
+ in the meantime.
+ This causes a really bizarre perf impact (search for really bizarre
+ in the # Performance measurements) :
+ running 150 iterations with 4 parallel threads is total less cpu
+ than in serial. But running only 2 iterations is significantly slower
+ in parallel than serial.
+ The most probable explanation: I suppose there is some useless work
+ done e.g. during translation which consumes CPU : a thread detects it
+ must do t-chaining" : it exits to the scheduler, takes the write big
+ lock, detects that this t-chaining has already be done by another
+ thread and so has done all this work for nothing.
+ This hypothesis is confirmed when giving -d.
+ This causes plenty of traces:
+ --22919:1:transtab host code 0x40537438F already chained => no chaining redone
+ But by which miracle are the parallel threads "recuperating" this cpu burned
+ for nothing later on when doing more iterations ?
+
+ Whatever: a possible solution might be to have VEX provide an
+ efficient way to check that the current ip of the thread has
+ been already chained. Then a "already done t-chaining" would only
+ cost an exit to the C scheduler, and a few "VEX" if-s.
+ This condition looks easy to implement in VEX.
+ Is it safe ? I believe yes:
+ At least VEX can detect that the t-chaining has been done
+ already (or rather that the place is not t-chainable anymore).
+ I suppose just a "!" on this condition would do it :
+ if a place has to be chained, then it contains (for x86)
+ BA <4 bytes value == disp_cp_chain_me_EXPECTED>
+ FF D2
+ otherwise it contains something different.
+
+ ??? is it so clear that this will avoid burning cpu : when a thread
+ exits to C, it will try to acquire the big lock to do t-chaining,
+ but will not be able till all threads go out of the JIT code
+ either due to need of t-chaining or due to QUANTUM expired).
+ If all exits due to QUANTUM expired, our thread will get
+ the big lock, do the t-chaining and all is well.
+ But if the other threads have to do the same t-chaining,
+ they will all exits, see that the t-chaining is not done,
+ and then queue to acquire the write big lock.
+ One will get it, do the t-chaining, then all others will one
+ by one get the write lock, and see the t-chaining is done.
+ Threads have quite some chance to get to the same not
+ done t-chaining if they all execute the same code.
+
+ ??? or even isn't it that the translation table and
+ the rd/wr big lock protecting it is just not scalable :
+ whenever there are some threads which are executing
+ JITted code not yet translated and/or t-chained, there
+ is a high level of contention, causing a lot of
+ lock/unlock, consuming user and sys cpu ?
+
+
+# tt_fast "xor" approach
+========================
+(the tt_fast race condition has not been solved yet.
+Here is a suggested very elegant approach. But is
+this really working ?)
+[after a lot of discussion, it became clear that this does
+not work. There is a small probability of a wrong
+value being read. See at the end of the section the
+failing case and probability analysis]
+
+tt_fast is used (read only) by the asm dispatcher.
+tt_fast is accessed for every 'dynamic' call/jump/...
+(the 'static' call/jump/... are resolved using translation
+chaining).
+tt_fast is modified either when a new translation is
+done or when an already translated piece of code is
+found in the translation cache.
+In other words, one see that even if tt_fast+translation
+table is logically only read, it is also modified by a search.
+
+http://www.cis.uab.edu/hyatt/hashing.html
+describes a technique which (I believe) would allow to use
+tt_fast without locking and without atomic instruction,
+with very few changes in the asm dispatcher.
+
+Basically, the idea of the paper applied on tt_fast would be:
+ tt_fast is an array of pair (G, H)
+ where G is a guest code address and H is the address
+ of the JIT translation of G.
+ (G, H) is stored at a position in tt_fast obtained by
+ "hashing" G (basically, shifting and masking some bits of G).
+If we have a pair (G1,H1) and (G2,H2) which have the same
+hash value, and these pairs are inserted (or modified)
+in parallel, a third thread reading this table might get
+one of the following 4 pairs:
+ (G1,H1) (good)
+ (G2,H2) (good)
+ (G1,H2) (bad)
+ (G2,H1) (bad)
+The idea is that the asm dispatcher would detect the
+bad cases, and then just fall back to the normal
+search (exiting the asm dispatcher to do a full search
+in the translation table).
+To differentiate the good from the bad (without an ugly lock :),
+the idea is to store in tt_fast the following:
+ (G xor H, H)
+Then when searching for G1, one does the following:
+ ...
[truncated message content] |
|
From: <sv...@va...> - 2013-03-27 11:43:26
|
sewardj 2013-03-27 11:43:20 +0000 (Wed, 27 Mar 2013)
New Revision: 13340
Log:
Build system and hwcaps fixes pertaining to #305728, which added
support for AVX2, BMI1, BMI2 and FMA instructions.
(Jakub Jelinek, ja...@re...)
Modified files:
trunk/Makefile.vex.am
trunk/configure.in
trunk/coregrind/m_machine.c
Modified: trunk/coregrind/m_machine.c (+18 -6)
===================================================================
--- trunk/coregrind/m_machine.c 2013-03-27 11:42:05 +00:00 (rev 13339)
+++ trunk/coregrind/m_machine.c 2013-03-27 11:43:20 +00:00 (rev 13340)
@@ -767,9 +767,9 @@
#elif defined(VGA_amd64)
{ Bool have_sse3, have_cx8, have_cx16;
- Bool have_lzcnt, have_avx /*, have_fma*/;
+ Bool have_lzcnt, have_avx, have_bmi, have_avx2;
Bool have_rdtscp;
- UInt eax, ebx, ecx, edx, max_extended;
+ UInt eax, ebx, ecx, edx, max_basic, max_extended;
HChar vstr[13];
vstr[0] = 0;
@@ -778,7 +778,8 @@
return False;
VG_(cpuid)(0, 0, &eax, &ebx, &ecx, &edx);
- if (eax < 1)
+ max_basic = eax;
+ if (max_basic < 1)
/* we can't ask for cpuid(x) for x > 0. Give up. */
return False;
@@ -835,13 +836,13 @@
/* on amd64 we tolerate older cpus, which don't have cmpxchg16b */
have_cx16 = (ecx & (1<<13)) != 0; /* True => have cmpxchg16b */
- /* Figure out if this is an AMD that can do LZCNT. */
+ /* Figure out if this CPU can do LZCNT. */
have_lzcnt = False;
- if (0 == VG_(strcmp)(vstr, "AuthenticAMD")
- && max_extended >= 0x80000001) {
+ if (max_extended >= 0x80000001) {
VG_(cpuid)(0x80000001, 0, &eax, &ebx, &ecx, &edx);
have_lzcnt = (ecx & (1<<5)) != 0; /* True => have LZCNT */
}
+
/* Can we do RDTSCP? */
have_rdtscp = False;
if (max_extended >= 0x80000001) {
@@ -849,11 +850,22 @@
have_rdtscp = (edx & (1<<27)) != 0; /* True => have RDTSVCP */
}
+ /* Check for BMI1 and AVX2. */
+ have_bmi = False;
+ have_avx2 = False;
+ if (max_basic >= 7) {
+ VG_(cpuid)(7, 0, &eax, &ebx, &ecx, &edx);
+ have_bmi = (ebx & (1<<3)) != 0; /* True => have BMI1 */
+ have_avx2 = have_avx && ((ebx & (1<<5)) != 0); /* True => have AVX2 */
+ }
+
va = VexArchAMD64;
vai.hwcaps = (have_sse3 ? VEX_HWCAPS_AMD64_SSE3 : 0)
| (have_cx16 ? VEX_HWCAPS_AMD64_CX16 : 0)
| (have_lzcnt ? VEX_HWCAPS_AMD64_LZCNT : 0)
| (have_avx ? VEX_HWCAPS_AMD64_AVX : 0)
+ | (have_bmi ? VEX_HWCAPS_AMD64_BMI : 0)
+ | (have_avx2 ? VEX_HWCAPS_AMD64_AVX2 : 0)
| (have_rdtscp ? VEX_HWCAPS_AMD64_RDTSCP : 0);
VG_(machine_get_cache_info)(&vai);
Modified: trunk/configure.in (+71 -0)
===================================================================
--- trunk/configure.in 2013-03-27 11:42:05 +00:00 (rev 13339)
+++ trunk/configure.in 2013-03-27 11:43:20 +00:00 (rev 13340)
@@ -1909,6 +1909,77 @@
AM_CONDITIONAL(BUILD_AVX_TESTS, test x$ac_have_as_avx = xyes)
+# does the x86/amd64 assembler understand AVX2 instructions?
+# Note, this doesn't generate a C-level symbol. It generates a
+# automake-level symbol (BUILD_AVX2_TESTS), used in test Makefile.am's
+AC_MSG_CHECKING([if x86/amd64 assembler speaks AVX2])
+
+AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[
+ do { long long int x;
+ __asm__ __volatile__(
+ "vpsravd (%%rsp), %%ymm8, %%ymm7" : : : "xmm7", "xmm8" );
+ __asm__ __volatile__(
+ "vpaddb %%ymm6,%%ymm7,%%ymm8" : : : "xmm6","xmm7","xmm8"); }
+ while (0)
+]])], [
+ac_have_as_avx2=yes
+AC_MSG_RESULT([yes])
+], [
+ac_have_as_avx2=no
+AC_MSG_RESULT([no])
+])
+
+AM_CONDITIONAL(BUILD_AVX2_TESTS, test x$ac_have_as_avx2 = xyes)
+
+
+# does the x86/amd64 assembler understand BMI1 and BMI2 instructions?
+# Note, this doesn't generate a C-level symbol. It generates a
+# automake-level symbol (BUILD_BMI_TESTS), used in test Makefile.am's
+AC_MSG_CHECKING([if x86/amd64 assembler speaks BMI1 and BMI2])
+
+AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[
+ do { unsigned int h, l;
+ __asm__ __volatile__(
+ "andn %2, %1, %0" : "=r" (h) : "r" (0x1234567), "r" (0x7654321) ); }
+ __asm__ __volatile__(
+ "movl %2, %%edx; mulx %3, %1, %0" : "=r" (h), "=r" (l) : "g" (0x1234567), "g" (0x7654321) : "edx" ); }
+ while (0)
+]])], [
+ac_have_as_bmi=yes
+AC_MSG_RESULT([yes])
+], [
+ac_have_as_bmi=no
+AC_MSG_RESULT([no])
+])
+
+AM_CONDITIONAL(BUILD_BMI_TESTS, test x$ac_have_as_bmi = xyes)
+
+
+# does the x86/amd64 assembler understand FMA instructions?
+# Note, this doesn't generate a C-level symbol. It generates a
+# automake-level symbol (BUILD_FMA_TESTS), used in test Makefile.am's
+AC_MSG_CHECKING([if x86/amd64 assembler speaks FMA])
+
+AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[
+ do { unsigned int h, l;
+ __asm__ __volatile__(
+ "vfmadd132ps (%%rsp), %%ymm8, %%ymm7" : : : "xmm7", "xmm8" );
+ __asm__ __volatile__(
+ "vfnmsub231sd (%%rsp), %%xmm8, %%xmm7" : : : "xmm7", "xmm8" );
+ __asm__ __volatile__(
+ "vfmsubadd213pd (%%rsp), %%xmm8, %%xmm7" : : : "xmm7", "xmm8" ); }
+ while (0)
+]])], [
+ac_have_as_fma=yes
+AC_MSG_RESULT([yes])
+], [
+ac_have_as_fma=no
+AC_MSG_RESULT([no])
+])
+
+AM_CONDITIONAL(BUILD_FMA_TESTS, test x$ac_have_as_fma = xyes)
+
+
# does the x86/amd64 assembler understand MOVBE?
# Note, this doesn't generate a C-level symbol. It generates a
# automake-level symbol (BUILD_MOVBE_TESTS), used in test Makefile.am's
Modified: trunk/Makefile.vex.am (+4 -0)
===================================================================
--- trunk/Makefile.vex.am 2013-03-27 11:42:05 +00:00 (rev 13339)
+++ trunk/Makefile.vex.am 2013-03-27 11:43:20 +00:00 (rev 13340)
@@ -46,6 +46,8 @@
priv/host_generic_regs.h \
priv/host_generic_simd64.h \
priv/host_generic_simd128.h \
+ priv/host_generic_simd256.h \
+ priv/host_generic_maddf.h \
priv/host_x86_defs.h \
priv/host_amd64_defs.h \
priv/host_ppc_defs.h \
@@ -117,6 +119,8 @@
priv/host_generic_regs.c \
priv/host_generic_simd64.c \
priv/host_generic_simd128.c \
+ priv/host_generic_simd256.c \
+ priv/host_generic_maddf.c \
priv/host_generic_reg_alloc2.c \
priv/host_x86_defs.c \
priv/host_x86_isel.c \
|
|
From: <sv...@va...> - 2013-03-27 11:42:16
|
sewardj 2013-03-27 11:42:05 +0000 (Wed, 27 Mar 2013)
New Revision: 13339
Log:
Testcase additions pertaining to #305728, which added support for
AVX2, BMI1, BMI2 and FMA instructions.
(Jakub Jelinek, ja...@re...)
Added files:
trunk/none/tests/amd64/avx2-1.c
trunk/none/tests/amd64/avx2-1.stderr.exp
trunk/none/tests/amd64/avx2-1.stdout.exp
trunk/none/tests/amd64/avx2-1.vgtest
trunk/none/tests/amd64/bmi.c
trunk/none/tests/amd64/bmi.stderr.exp
trunk/none/tests/amd64/bmi.stdout.exp
trunk/none/tests/amd64/bmi.vgtest
trunk/none/tests/amd64/fma.c
trunk/none/tests/amd64/fma.stderr.exp
trunk/none/tests/amd64/fma.stdout.exp
trunk/none/tests/amd64/fma.vgtest
Modified files:
trunk/none/tests/amd64/Makefile.am
trunk/none/tests/amd64/avx-1.c
trunk/none/tests/amd64/avx-1.stdout.exp
Added: trunk/none/tests/amd64/bmi.vgtest (+3 -0)
===================================================================
--- trunk/none/tests/amd64/bmi.vgtest 2013-03-27 11:40:02 +00:00 (rev 13338)
+++ trunk/none/tests/amd64/bmi.vgtest 2013-03-27 11:42:05 +00:00 (rev 13339)
@@ -0,0 +1,3 @@
+prog: bmi
+prereq: ../../../tests/x86_amd64_features amd64-avx
+vgopts: -q
Added: trunk/none/tests/amd64/fma.stdout.exp (+1 -0)
===================================================================
--- trunk/none/tests/amd64/fma.stdout.exp 2013-03-27 11:40:02 +00:00 (rev 13338)
+++ trunk/none/tests/amd64/fma.stdout.exp 2013-03-27 11:42:05 +00:00 (rev 13339)
@@ -0,0 +1 @@
+Testing successful
Added: trunk/none/tests/amd64/fma.c (+1431 -0)
===================================================================
--- trunk/none/tests/amd64/fma.c 2013-03-27 11:40:02 +00:00 (rev 13338)
+++ trunk/none/tests/amd64/fma.c 2013-03-27 11:42:05 +00:00 (rev 13339)
@@ -0,0 +1,1431 @@
+#include <stdio.h>
+#include <string.h>
+
+#define N 64
+struct float_test {
+ float x[N], y[N], z[N], expected[N], res[N];
+} ft __attribute__((aligned (32)));
+
+struct double_test {
+ double x[N], y[N], z[N], expected[N], res[N];
+} dt __attribute__((aligned (32)));
+
+float plus_zero, plus_infty, minus_infty, nan_value;
+
+static int testf( float x, float y )
+{
+ unsigned int a, b;
+ memcpy( &a, &x, sizeof (a) );
+ memcpy( &b, &y, sizeof (b) );
+ if ((a & 0x7fc00000U) == 0x7fc00000U)
+ return (b & 0x7fc00000U) != 0x7fc00000U;
+ return memcmp( &a, &b, sizeof (a) ) != 0;
+}
+
+static int test_fmaf( void )
+{
+ int res = 0, i, j;
+ float w;
+ for (i = 0; i < N; i++) {
+ int thisres = 0;
+ __asm __volatile__ ("vfmadd132ss %2, %3, %0" : "=x" (w) : "0" (ft.x[i]), "x" (ft.y[i]), "x" (ft.z[i]));
+ thisres |= testf( w, ft.expected[i] );
+ __asm __volatile__ ("vfmadd132ss %2, %3, %0" : "=x" (w) : "0" (ft.x[i]), "m" (ft.y[i]), "x" (ft.z[i]));
+ thisres |= testf( w, ft.expected[i] );
+ __asm __volatile__ ("vfmadd213ss %3, %2, %0" : "=x" (w) : "0" (ft.x[i]), "x" (ft.y[i]), "x" (ft.z[i]));
+ thisres |= testf( w, ft.expected[i] );
+ __asm __volatile__ ("vfmadd213ss %3, %2, %0" : "=x" (w) : "0" (ft.x[i]), "x" (ft.y[i]), "m" (ft.z[i]));
+ thisres |= testf( w, ft.expected[i] );
+ __asm __volatile__ ("vfmadd231ss %2, %1, %0" : "=x" (w) : "x" (ft.x[i]), "x" (ft.y[i]), "0" (ft.z[i]));
+ thisres |= testf( w, ft.expected[i] );
+ __asm __volatile__ ("vfmadd231ss %2, %1, %0" : "=x" (w) : "x" (ft.x[i]), "m" (ft.y[i]), "0" (ft.z[i]));
+ thisres |= testf( w, ft.expected[i] );
+ if (thisres)
+ printf( "Failure 1 %d %a %a\n", i, w, ft.expected[i] );
+ res |= thisres;
+ thisres = 0;
+ __asm __volatile__ ("vfnmsub132ss %2, %3, %0" : "=x" (w) : "0" (ft.x[i]), "x" (ft.y[i]), "x" (ft.z[i]));
+ thisres |= testf( -w, ft.expected[i] );
+ __asm __volatile__ ("vfnmsub132ss %2, %3, %0" : "=x" (w) : "0" (ft.x[i]), "m" (ft.y[i]), "x" (ft.z[i]));
+ thisres |= testf( -w, ft.expected[i] );
+ __asm __volatile__ ("vfnmsub213ss %3, %2, %0" : "=x" (w) : "0" (ft.x[i]), "x" (ft.y[i]), "x" (ft.z[i]));
+ thisres |= testf( -w, ft.expected[i] );
+ __asm __volatile__ ("vfnmsub213ss %3, %2, %0" : "=x" (w) : "0" (ft.x[i]), "x" (ft.y[i]), "m" (ft.z[i]));
+ thisres |= testf( -w, ft.expected[i] );
+ __asm __volatile__ ("vfnmsub231ss %2, %1, %0" : "=x" (w) : "x" (ft.x[i]), "x" (ft.y[i]), "0" (ft.z[i]));
+ thisres |= testf( -w, ft.expected[i] );
+ __asm __volatile__ ("vfnmsub231ss %2, %1, %0" : "=x" (w) : "x" (ft.x[i]), "m" (ft.y[i]), "0" (ft.z[i]));
+ thisres |= testf( -w, ft.expected[i] );
+ if (thisres)
+ printf( "Failure 2 %d %a %a\n", i, w, ft.expected[i] );
+ res |= thisres;
+ }
+ for (i = 0; i < N; i++)
+ ft.z[i] = -ft.z[i];
+ for (i = 0; i < N; i++) {
+ int thisres = 0;
+ __asm __volatile__ ("vfmsub132ss %2, %3, %0" : "=x" (w) : "0" (ft.x[i]), "x" (ft.y[i]), "x" (ft.z[i]));
+ thisres |= testf( w, ft.expected[i] );
+ __asm __volatile__ ("vfmsub132ss %2, %3, %0" : "=x" (w) : "0" (ft.x[i]), "m" (ft.y[i]), "x" (ft.z[i]));
+ thisres |= testf( w, ft.expected[i] );
+ __asm __volatile__ ("vfmsub213ss %3, %2, %0" : "=x" (w) : "0" (ft.x[i]), "x" (ft.y[i]), "x" (ft.z[i]));
+ thisres |= testf( w, ft.expected[i] );
+ __asm __volatile__ ("vfmsub213ss %3, %2, %0" : "=x" (w) : "0" (ft.x[i]), "x" (ft.y[i]), "m" (ft.z[i]));
+ thisres |= testf( w, ft.expected[i] );
+ __asm __volatile__ ("vfmsub231ss %2, %1, %0" : "=x" (w) : "x" (ft.x[i]), "x" (ft.y[i]), "0" (ft.z[i]));
+ thisres |= testf( w, ft.expected[i] );
+ __asm __volatile__ ("vfmsub231ss %2, %1, %0" : "=x" (w) : "x" (ft.x[i]), "m" (ft.y[i]), "0" (ft.z[i]));
+ thisres |= testf( w, ft.expected[i] );
+ if (thisres)
+ printf( "Failure 3 %d %a %a\n", i, w, ft.expected[i] );
+ res |= thisres;
+ thisres = 0;
+ __asm __volatile__ ("vfnmadd132ss %2, %3, %0" : "=x" (w) : "0" (ft.x[i]), "x" (ft.y[i]), "x" (ft.z[i]));
+ thisres |= testf( -w, ft.expected[i] );
+ __asm __volatile__ ("vfnmadd132ss %2, %3, %0" : "=x" (w) : "0" (ft.x[i]), "m" (ft.y[i]), "x" (ft.z[i]));
+ thisres |= testf( -w, ft.expected[i] );
+ __asm __volatile__ ("vfnmadd213ss %3, %2, %0" : "=x" (w) : "0" (ft.x[i]), "x" (ft.y[i]), "x" (ft.z[i]));
+ thisres |= testf( -w, ft.expected[i] );
+ __asm __volatile__ ("vfnmadd213ss %3, %2, %0" : "=x" (w) : "0" (ft.x[i]), "x" (ft.y[i]), "m" (ft.z[i]));
+ thisres |= testf( -w, ft.expected[i] );
+ __asm __volatile__ ("vfnmadd231ss %2, %1, %0" : "=x" (w) : "x" (ft.x[i]), "x" (ft.y[i]), "0" (ft.z[i]));
+ thisres |= testf( -w, ft.expected[i] );
+ __asm __volatile__ ("vfnmadd231ss %2, %1, %0" : "=x" (w) : "x" (ft.x[i]), "m" (ft.y[i]), "0" (ft.z[i]));
+ thisres |= testf( -w, ft.expected[i] );
+ if (thisres)
+ printf( "Failure 4 %d %a %a\n", i, w, ft.expected[i] );
+ res |= thisres;
+ }
+ for (i = 0; i < N; i++)
+ ft.z[i] = -ft.z[i];
+ for (i = 0; i < N; i += 4) {
+ int thisres = 0;
+ __asm __volatile__ ("vmovaps (%1), %%xmm9; vmovaps (%2), %%xmm7; vmovaps (%3), %%xmm8;"
+ "vfmadd132ps %%xmm7, %%xmm8, %%xmm9;"
+ "vmovaps %%xmm9, (%0)" : : "r" (&ft.res[i]), "r" (&ft.x[i]),
+ "r" (&ft.y[i]), "r" (&ft.z[i]) : "xmm7", "xmm8", "xmm9");
+ for (j = 0; j < 4; j++)
+ thisres |= testf( ft.res[i+j], ft.expected[i+j] );
+ __asm __volatile__ ("vmovaps (%1), %%xmm9; vmovaps (%3), %%xmm8;"
+ "vfmadd132ps (%2), %%xmm8, %%xmm9;"
+ "vmovaps %%xmm9, (%0)" : : "r" (&ft.res[i]), "r" (&ft.x[i]),
+ "r" (&ft.y[i]), "r" (&ft.z[i]) : "xmm7", "xmm8", "xmm9");
+ for (j = 0; j < 4; j++)
+ thisres |= testf( ft.res[i+j], ft.expected[i+j] );
+ __asm __volatile__ ("vmovaps (%1), %%xmm9; vmovaps (%3), %%xmm7; vmovaps (%2), %%xmm8;"
+ "vfmadd213ps %%xmm7, %%xmm8, %%xmm9;"
+ "vmovaps %%xmm9, (%0)" : : "r" (&ft.res[i]), "r" (&ft.x[i]),
+ "r" (&ft.y[i]), "r" (&ft.z[i]) : "xmm7", "xmm8", "xmm9");
+ for (j = 0; j < 4; j++)
+ thisres |= testf( ft.res[i+j], ft.expected[i+j] );
+ __asm __volatile__ ("vmovaps (%1), %%xmm9; vmovaps (%2), %%xmm8;"
+ "vfmadd213ps (%3), %%xmm8, %%xmm9;"
+ "vmovaps %%xmm9, (%0)" : : "r" (&ft.res[i]), "r" (&ft.x[i]),
+ "r" (&ft.y[i]), "r" (&ft.z[i]) : "xmm7", "xmm8", "xmm9");
+ for (j = 0; j < 4; j++)
+ thisres |= testf( ft.res[i+j], ft.expected[i+j] );
+ __asm __volatile__ ("vmovaps (%3), %%xmm9; vmovaps (%2), %%xmm7; vmovaps (%1), %%xmm8;"
+ "vfmadd231ps %%xmm7, %%xmm8, %%xmm9;"
+ "vmovaps %%xmm9, (%0)" : : "r" (&ft.res[i]), "r" (&ft.x[i]),
+ "r" (&ft.y[i]), "r" (&ft.z[i]) : "xmm7", "xmm8", "xmm9");
+ for (j = 0; j < 4; j++)
+ thisres |= testf( ft.res[i+j], ft.expected[i+j] );
+ __asm __volatile__ ("vmovaps (%3), %%xmm9; vmovaps (%1), %%xmm8;"
+ "vfmadd231ps (%2), %%xmm8, %%xmm9;"
+ "vmovaps %%xmm9, (%0)" : : "r" (&ft.res[i]), "r" (&ft.x[i]),
+ "r" (&ft.y[i]), "r" (&ft.z[i]) : "xmm7", "xmm8", "xmm9");
+ for (j = 0; j < 4; j++)
+ thisres |= testf( ft.res[i+j], ft.expected[i+j] );
+ if (thisres) {
+ printf( "Failure 5 %d", i );
+ for (j = 0; j < 4; j++)
+ printf( " %a %a", ft.res[i+j], ft.expected[i+j] );
+ printf( "\n" );
+ }
+ res |= thisres;
+ thisres = 0;
+ __asm __volatile__ ("vmovaps (%1), %%xmm9; vmovaps (%2), %%xmm7; vmovaps (%3), %%xmm8;"
+ "vfnmsub132ps %%xmm7, %%xmm8, %%xmm9;"
+ "vmovaps %%xmm9, (%0)" : : "r" (&ft.res[i]), "r" (&ft.x[i]),
+ "r" (&ft.y[i]), "r" (&ft.z[i]) : "xmm7", "xmm8", "xmm9");
+ for (j = 0; j < 4; j++)
+ thisres |= testf( -ft.res[i+j], ft.expected[i+j] );
+ __asm __volatile__ ("vmovaps (%1), %%xmm9; vmovaps (%3), %%xmm8;"
+ "vfnmsub132ps (%2), %%xmm8, %%xmm9;"
+ "vmovaps %%xmm9, (%0)" : : "r" (&ft.res[i]), "r" (&ft.x[i]),
+ "r" (&ft.y[i]), "r" (&ft.z[i]) : "xmm7", "xmm8", "xmm9");
+ for (j = 0; j < 4; j++)
+ thisres |= testf( -ft.res[i+j], ft.expected[i+j] );
+ __asm __volatile__ ("vmovaps (%1), %%xmm9; vmovaps (%3), %%xmm7; vmovaps (%2), %%xmm8;"
+ "vfnmsub213ps %%xmm7, %%xmm8, %%xmm9;"
+ "vmovaps %%xmm9, (%0)" : : "r" (&ft.res[i]), "r" (&ft.x[i]),
+ "r" (&ft.y[i]), "r" (&ft.z[i]) : "xmm7", "xmm8", "xmm9");
+ for (j = 0; j < 4; j++)
+ thisres |= testf( -ft.res[i+j], ft.expected[i+j] );
+ __asm __volatile__ ("vmovaps (%1), %%xmm9; vmovaps (%2), %%xmm8;"
+ "vfnmsub213ps (%3), %%xmm8, %%xmm9;"
+ "vmovaps %%xmm9, (%0)" : : "r" (&ft.res[i]), "r" (&ft.x[i]),
+ "r" (&ft.y[i]), "r" (&ft.z[i]) : "xmm7", "xmm8", "xmm9");
+ for (j = 0; j < 4; j++)
+ thisres |= testf( -ft.res[i+j], ft.expected[i+j] );
+ __asm __volatile__ ("vmovaps (%3), %%xmm9; vmovaps (%2), %%xmm7; vmovaps (%1), %%xmm8;"
+ "vfnmsub231ps %%xmm7, %%xmm8, %%xmm9;"
+ "vmovaps %%xmm9, (%0)" : : "r" (&ft.res[i]), "r" (&ft.x[i]),
+ "r" (&ft.y[i]), "r" (&ft.z[i]) : "xmm7", "xmm8", "xmm9");
+ for (j = 0; j < 4; j++)
+ thisres |= testf( -ft.res[i+j], ft.expected[i+j] );
+ __asm __volatile__ ("vmovaps (%3), %%xmm9; vmovaps (%1), %%xmm8;"
+ "vfnmsub231ps (%2), %%xmm8, %%xmm9;"
+ "vmovaps %%xmm9, (%0)" : : "r" (&ft.res[i]), "r" (&ft.x[i]),
+ "r" (&ft.y[i]), "r" (&ft.z[i]) : "xmm7", "xmm8", "xmm9");
+ for (j = 0; j < 4; j++)
+ thisres |= testf( -ft.res[i+j], ft.expected[i+j] );
+ if (thisres) {
+ printf( "Failure 6 %d", i );
+ for (j = 0; j < 4; j++)
+ printf( " %a %a", ft.res[i+j], ft.expected[i+j] );
+ printf( "\n" );
+ }
+ res |= thisres;
+ }
+ for (i = 0; i < N; i++)
+ ft.z[i] = -ft.z[i];
+ for (i = 0; i < N; i += 4) {
+ int thisres = 0;
+ __asm __volatile__ ("vmovaps (%1), %%xmm9; vmovaps (%2), %%xmm7; vmovaps (%3), %%xmm8;"
+ "vfmsub132ps %%xmm7, %%xmm8, %%xmm9;"
+ "vmovaps %%xmm9, (%0)" : : "r" (&ft.res[i]), "r" (&ft.x[i]),
+ "r" (&ft.y[i]), "r" (&ft.z[i]) : "xmm7", "xmm8", "xmm9");
+ for (j = 0; j < 4; j++)
+ thisres |= testf( ft.res[i+j], ft.expected[i+j] );
+ __asm __volatile__ ("vmovaps (%1), %%xmm9; vmovaps (%3), %%xmm8;"
+ "vfmsub132ps (%2), %%xmm8, %%xmm9;"
+ "vmovaps %%xmm9, (%0)" : : "r" (&ft.res[i]), "r" (&ft.x[i]),
+ "r" (&ft.y[i]), "r" (&ft.z[i]) : "xmm7", "xmm8", "xmm9");
+ for (j = 0; j < 4; j++)
+ thisres |= testf( ft.res[i+j], ft.expected[i+j] );
+ __asm __volatile__ ("vmovaps (%1), %%xmm9; vmovaps (%3), %%xmm7; vmovaps (%2), %%xmm8;"
+ "vfmsub213ps %%xmm7, %%xmm8, %%xmm9;"
+ "vmovaps %%xmm9, (%0)" : : "r" (&ft.res[i]), "r" (&ft.x[i]),
+ "r" (&ft.y[i]), "r" (&ft.z[i]) : "xmm7", "xmm8", "xmm9");
+ for (j = 0; j < 4; j++)
+ thisres |= testf( ft.res[i+j], ft.expected[i+j] );
+ __asm __volatile__ ("vmovaps (%1), %%xmm9; vmovaps (%2), %%xmm8;"
+ "vfmsub213ps (%3), %%xmm8, %%xmm9;"
+ "vmovaps %%xmm9, (%0)" : : "r" (&ft.res[i]), "r" (&ft.x[i]),
+ "r" (&ft.y[i]), "r" (&ft.z[i]) : "xmm7", "xmm8", "xmm9");
+ for (j = 0; j < 4; j++)
+ thisres |= testf( ft.res[i+j], ft.expected[i+j] );
+ __asm __volatile__ ("vmovaps (%3), %%xmm9; vmovaps (%2), %%xmm7; vmovaps (%1), %%xmm8;"
+ "vfmsub231ps %%xmm7, %%xmm8, %%xmm9;"
+ "vmovaps %%xmm9, (%0)" : : "r" (&ft.res[i]), "r" (&ft.x[i]),
+ "r" (&ft.y[i]), "r" (&ft.z[i]) : "xmm7", "xmm8", "xmm9");
+ for (j = 0; j < 4; j++)
+ thisres |= testf( ft.res[i+j], ft.expected[i+j] );
+ __asm __volatile__ ("vmovaps (%3), %%xmm9; vmovaps (%1), %%xmm8;"
+ "vfmsub231ps (%2), %%xmm8, %%xmm9;"
+ "vmovaps %%xmm9, (%0)" : : "r" (&ft.res[i]), "r" (&ft.x[i]),
+ "r" (&ft.y[i]), "r" (&ft.z[i]) : "xmm7", "xmm8", "xmm9");
+ for (j = 0; j < 4; j++)
+ thisres |= testf( ft.res[i+j], ft.expected[i+j] );
+ if (thisres) {
+ printf( "Failure 7 %d", i );
+ for (j = 0; j < 4; j++)
+ printf( " %a %a", ft.res[i+j], ft.expected[i+j] );
+ printf( "\n" );
+ }
+ res |= thisres;
+ thisres = 0;
+ __asm __volatile__ ("vmovaps (%1), %%xmm9; vmovaps (%2), %%xmm7; vmovaps (%3), %%xmm8;"
+ "vfnmadd132ps %%xmm7, %%xmm8, %%xmm9;"
+ "vmovaps %%xmm9, (%0)" : : "r" (&ft.res[i]), "r" (&ft.x[i]),
+ "r" (&ft.y[i]), "r" (&ft.z[i]) : "xmm7", "xmm8", "xmm9");
+ for (j = 0; j < 4; j++)
+ thisres |= testf( -ft.res[i+j], ft.expected[i+j] );
+ __asm __volatile__ ("vmovaps (%1), %%xmm9; vmovaps (%3), %%xmm8;"
+ "vfnmadd132ps (%2), %%xmm8, %%xmm9;"
+ "vmovaps %%xmm9, (%0)" : : "r" (&ft.res[i]), "r" (&ft.x[i]),
+ "r" (&ft.y[i]), "r" (&ft.z[i]) : "xmm7", "xmm8", "xmm9");
+ for (j = 0; j < 4; j++)
+ thisres |= testf( -ft.res[i+j], ft.expected[i+j] );
+ __asm __volatile__ ("vmovaps (%1), %%xmm9; vmovaps (%3), %%xmm7; vmovaps (%2), %%xmm8;"
+ "vfnmadd213ps %%xmm7, %%xmm8, %%xmm9;"
+ "vmovaps %%xmm9, (%0)" : : "r" (&ft.res[i]), "r" (&ft.x[i]),
+ "r" (&ft.y[i]), "r" (&ft.z[i]) : "xmm7", "xmm8", "xmm9");
+ for (j = 0; j < 4; j++)
+ thisres |= testf( -ft.res[i+j], ft.expected[i+j] );
+ __asm __volatile__ ("vmovaps (%1), %%xmm9; vmovaps (%2), %%xmm8;"
+ "vfnmadd213ps (%3), %%xmm8, %%xmm9;"
+ "vmovaps %%xmm9, (%0)" : : "r" (&ft.res[i]), "r" (&ft.x[i]),
+ "r" (&ft.y[i]), "r" (&ft.z[i]) : "xmm7", "xmm8", "xmm9");
+ for (j = 0; j < 4; j++)
+ thisres |= testf( -ft.res[i+j], ft.expected[i+j] );
+ __asm __volatile__ ("vmovaps (%3), %%xmm9; vmovaps (%2), %%xmm7; vmovaps (%1), %%xmm8;"
+ "vfnmadd231ps %%xmm7, %%xmm8, %%xmm9;"
+ "vmovaps %%xmm9, (%0)" : : "r" (&ft.res[i]), "r" (&ft.x[i]),
+ "r" (&ft.y[i]), "r" (&ft.z[i]) : "xmm7", "xmm8", "xmm9");
+ for (j = 0; j < 4; j++)
+ thisres |= testf( -ft.res[i+j], ft.expected[i+j] );
+ __asm __volatile__ ("vmovaps (%3), %%xmm9; vmovaps (%1), %%xmm8;"
+ "vfnmadd231ps (%2), %%xmm8, %%xmm9;"
+ "vmovaps %%xmm9, (%0)" : : "r" (&ft.res[i]), "r" (&ft.x[i]),
+ "r" (&ft.y[i]), "r" (&ft.z[i]) : "xmm7", "xmm8", "xmm9");
+ for (j = 0; j < 4; j++)
+ thisres |= testf( -ft.res[i+j], ft.expected[i+j] );
+ if (thisres) {
+ printf( "Failure 8 %d", i );
+ for (j = 0; j < 4; j++)
+ printf( " %a %a", ft.res[i+j], ft.expected[i+j] );
+ printf( "\n" );
+ }
+ res |= thisres;
+ }
+ for (i = 1; i < N; i += 2)
+ ft.z[i] = -ft.z[i];
+ for (i = 0; i < N; i += 4) {
+ int thisres = 0;
+ __asm __volatile__ ("vmovaps (%1), %%xmm9; vmovaps (%2), %%xmm7; vmovaps (%3), %%xmm8;"
+ "vfmaddsub132ps %%xmm7, %%xmm8, %%xmm9;"
+ "vmovaps %%xmm9, (%0)" : : "r" (&ft.res[i]), "r" (&ft.x[i]),
+ "r" (&ft.y[i]), "r" (&ft.z[i]) : "xmm7", "xmm8", "xmm9");
+ for (j = 0; j < 4; j++)
+ thisres |= testf( ft.res[i+j], ft.expected[i+j] );
+ __asm __volatile__ ("vmovaps (%1), %%xmm9; vmovaps (%3), %%xmm8;"
+ "vfmaddsub132ps (%2), %%xmm8, %%xmm9;"
+ "vmovaps %%xmm9, (%0)" : : "r" (&ft.res[i]), "r" (&ft.x[i]),
+ "r" (&ft.y[i]), "r" (&ft.z[i]) : "xmm7", "xmm8", "xmm9");
+ for (j = 0; j < 4; j++)
+ thisres |= testf( ft.res[i+j], ft.expected[i+j] );
+ __asm __volatile__ ("vmovaps (%1), %%xmm9; vmovaps (%3), %%xmm7; vmovaps (%2), %%xmm8;"
+ "vfmaddsub213ps %%xmm7, %%xmm8, %%xmm9;"
+ "vmovaps %%xmm9, (%0)" : : "r" (&ft.res[i]), "r" (&ft.x[i]),
+ "r" (&ft.y[i]), "r" (&ft.z[i]) : "xmm7", "xmm8", "xmm9");
+ for (j = 0; j < 4; j++)
+ thisres |= testf( ft.res[i+j], ft.expected[i+j] );
+ __asm __volatile__ ("vmovaps (%1), %%xmm9; vmovaps (%2), %%xmm8;"
+ "vfmaddsub213ps (%3), %%xmm8, %%xmm9;"
+ "vmovaps %%xmm9, (%0)" : : "r" (&ft.res[i]), "r" (&ft.x[i]),
+ "r" (&ft.y[i]), "r" (&ft.z[i]) : "xmm7", "xmm8", "xmm9");
+ for (j = 0; j < 4; j++)
+ thisres |= testf( ft.res[i+j], ft.expected[i+j] );
+ __asm __volatile__ ("vmovaps (%3), %%xmm9; vmovaps (%2), %%xmm7; vmovaps (%1), %%xmm8;"
+ "vfmaddsub231ps %%xmm7, %%xmm8, %%xmm9;"
+ "vmovaps %%xmm9, (%0)" : : "r" (&ft.res[i]), "r" (&ft.x[i]),
+ "r" (&ft.y[i]), "r" (&ft.z[i]) : "xmm7", "xmm8", "xmm9");
+ for (j = 0; j < 4; j++)
+ thisres |= testf( ft.res[i+j], ft.expected[i+j] );
+ __asm __volatile__ ("vmovaps (%3), %%xmm9; vmovaps (%1), %%xmm8;"
+ "vfmaddsub231ps (%2), %%xmm8, %%xmm9;"
+ "vmovaps %%xmm9, (%0)" : : "r" (&ft.res[i]), "r" (&ft.x[i]),
+ "r" (&ft.y[i]), "r" (&ft.z[i]) : "xmm7", "xmm8", "xmm9");
+ for (j = 0; j < 4; j++)
+ thisres |= testf( ft.res[i+j], ft.expected[i+j] );
+ if (thisres) {
+ printf( "Failure 9 %d", i );
+ for (j = 0; j < 4; j++)
+ printf( " %a %a", ft.res[i+j], ft.expected[i+j] );
+ printf( "\n" );
+ }
+ res |= thisres;
+ }
+ for (i = 0; i < N; i++)
+ ft.z[i] = -ft.z[i];
+ for (i = 0; i < N; i += 4) {
+ int thisres = 0;
+ __asm __volatile__ ("vmovaps (%1), %%xmm9; vmovaps (%2), %%xmm7; vmovaps (%3), %%xmm8;"
+ "vfmsubadd132ps %%xmm7, %%xmm8, %%xmm9;"
+ "vmovaps %%xmm9, (%0)" : : "r" (&ft.res[i]), "r" (&ft.x[i]),
+ "r" (&ft.y[i]), "r" (&ft.z[i]) : "xmm7", "xmm8", "xmm9");
+ for (j = 0; j < 4; j++)
+ thisres |= testf( ft.res[i+j], ft.expected[i+j] );
+ __asm __volatile__ ("vmovaps (%1), %%xmm9; vmovaps (%3), %%xmm8;"
+ "vfmsubadd132ps (%2), %%xmm8, %%xmm9;"
+ "vmovaps %%xmm9, (%0)" : : "r" (&ft.res[i]), "r" (&ft.x[i]),
+ "r" (&ft.y[i]), "r" (&ft.z[i]) : "xmm7", "xmm8", "xmm9");
+ for (j = 0; j < 4; j++)
+ thisres |= testf( ft.res[i+j], ft.expected[i+j] );
+ __asm __volatile__ ("vmovaps (%1), %%xmm9; vmovaps (%3), %%xmm7; vmovaps (%2), %%xmm8;"
+ "vfmsubadd213ps %%xmm7, %%xmm8, %%xmm9;"
+ "vmovaps %%xmm9, (%0)" : : "r" (&ft.res[i]), "r" (&ft.x[i]),
+ "r" (&ft.y[i]), "r" (&ft.z[i]) : "xmm7", "xmm8", "xmm9");
+ for (j = 0; j < 4; j++)
+ thisres |= testf( ft.res[i+j], ft.expected[i+j] );
+ __asm __volatile__ ("vmovaps (%1), %%xmm9; vmovaps (%2), %%xmm8;"
+ "vfmsubadd213ps (%3), %%xmm8, %%xmm9;"
+ "vmovaps %%xmm9, (%0)" : : "r" (&ft.res[i]), "r" (&ft.x[i]),
+ "r" (&ft.y[i]), "r" (&ft.z[i]) : "xmm7", "xmm8", "xmm9");
+ for (j = 0; j < 4; j++)
+ thisres |= testf( ft.res[i+j], ft.expected[i+j] );
+ __asm __volatile__ ("vmovaps (%3), %%xmm9; vmovaps (%2), %%xmm7; vmovaps (%1), %%xmm8;"
+ "vfmsubadd231ps %%xmm7, %%xmm8, %%xmm9;"
+ "vmovaps %%xmm9, (%0)" : : "r" (&ft.res[i]), "r" (&ft.x[i]),
+ "r" (&ft.y[i]), "r" (&ft.z[i]) : "xmm7", "xmm8", "xmm9");
+ for (j = 0; j < 4; j++)
+ thisres |= testf( ft.res[i+j], ft.expected[i+j] );
+ __asm __volatile__ ("vmovaps (%3), %%xmm9; vmovaps (%1), %%xmm8;"
+ "vfmsubadd231ps (%2), %%xmm8, %%xmm9;"
+ "vmovaps %%xmm9, (%0)" : : "r" (&ft.res[i]), "r" (&ft.x[i]),
+ "r" (&ft.y[i]), "r" (&ft.z[i]) : "xmm7", "xmm8", "xmm9");
+ for (j = 0; j < 4; j++)
+ thisres |= testf( ft.res[i+j], ft.expected[i+j] );
+ if (thisres) {
+ printf( "Failure 10 %d", i );
+ for (j = 0; j < 4; j++)
+ printf( " %a %a", ft.res[i+j], ft.expected[i+j] );
+ printf( "\n" );
+ }
+ res |= thisres;
+ }
+ for (i = 1; i < N; i += 2)
+ ft.z[i] = -ft.z[i];
+ for (i = 0; i < N; i += 8) {
+ int thisres = 0;
+ __asm __volatile__ ("vmovaps (%1), %%ymm9; vmovaps (%2), %%ymm7; vmovaps (%3), %%ymm8;"
+ "vfmadd132ps %%ymm7, %%ymm8, %%ymm9;"
+ "vmovaps %%ymm9, (%0)" : : "r" (&ft.res[i]), "r" (&ft.x[i]),
+ "r" (&ft.y[i]), "r" (&ft.z[i]) : "xmm7", "xmm8", "xmm9");
+ for (j = 0; j < 8; j++)
+ thisres |= testf( ft.res[i+j], ft.expected[i+j] );
+ __asm __volatile__ ("vmovaps (%1), %%ymm9; vmovaps (%3), %%ymm8;"
+ "vfmadd132ps (%2), %%ymm8, %%ymm9;"
+ "vmovaps %%ymm9, (%0)" : : "r" (&ft.res[i]), "r" (&ft.x[i]),
+ "r" (&ft.y[i]), "r" (&ft.z[i]) : "xmm7", "xmm8", "xmm9");
+ for (j = 0; j < 8; j++)
+ thisres |= testf( ft.res[i+j], ft.expected[i+j] );
+ __asm __volatile__ ("vmovaps (%1), %%ymm9; vmovaps (%3), %%ymm7; vmovaps (%2), %%ymm8;"
+ "vfmadd213ps %%ymm7, %%ymm8, %%ymm9;"
+ "vmovaps %%ymm9, (%0)" : : "r" (&ft.res[i]), "r" (&ft.x[i]),
+ "r" (&ft.y[i]), "r" (&ft.z[i]) : "xmm7", "xmm8", "xmm9");
+ for (j = 0; j < 8; j++)
+ thisres |= testf( ft.res[i+j], ft.expected[i+j] );
+ __asm __volatile__ ("vmovaps (%1), %%ymm9; vmovaps (%2), %%ymm8;"
+ "vfmadd213ps (%3), %%ymm8, %%ymm9;"
+ "vmovaps %%ymm9, (%0)" : : "r" (&ft.res[i]), "r" (&ft.x[i]),
+ "r" (&ft.y[i]), "r" (&ft.z[i]) : "xmm7", "xmm8", "xmm9");
+ for (j = 0; j < 8; j++)
+ thisres |= testf( ft.res[i+j], ft.expected[i+j] );
+ __asm __volatile__ ("vmovaps (%3), %%ymm9; vmovaps (%2), %%ymm7; vmovaps (%1), %%ymm8;"
+ "vfmadd231ps %%ymm7, %%ymm8, %%ymm9;"
+ "vmovaps %%ymm9, (%0)" : : "r" (&ft.res[i]), "r" (&ft.x[i]),
+ "r" (&ft.y[i]), "r" (&ft.z[i]) : "xmm7", "xmm8", "xmm9");
+ for (j = 0; j < 8; j++)
+ thisres |= testf( ft.res[i+j], ft.expected[i+j] );
+ __asm __volatile__ ("vmovaps (%3), %%ymm9; vmovaps (%1), %%ymm8;"
+ "vfmadd231ps (%2), %%ymm8, %%ymm9;"
+ "vmovaps %%ymm9, (%0)" : : "r" (&ft.res[i]), "r" (&ft.x[i]),
+ "r" (&ft.y[i]), "r" (&ft.z[i]) : "xmm7", "xmm8", "xmm9");
+ for (j = 0; j < 8; j++)
+ thisres |= testf( ft.res[i+j], ft.expected[i+j] );
+ if (thisres) {
+ printf( "Failure 11 %d", i );
+ for (j = 0; j < 8; j++)
+ printf( " %a %a", ft.res[i+j], ft.expected[i+j] );
+ printf( "\n" );
+ }
+ res |= thisres;
+ thisres = 0;
+ __asm __volatile__ ("vmovaps (%1), %%ymm9; vmovaps (%2), %%ymm7; vmovaps (%3), %%ymm8;"
+ "vfnmsub132ps %%ymm7, %%ymm8, %%ymm9;"
+ "vmovaps %%ymm9, (%0)" : : "r" (&ft.res[i]), "r" (&ft.x[i]),
+ "r" (&ft.y[i]), "r" (&ft.z[i]) : "xmm7", "xmm8", "xmm9");
+ for (j = 0; j < 8; j++)
+ thisres |= testf( -ft.res[i+j], ft.expected[i+j] );
+ __asm __volatile__ ("vmovaps (%1), %%ymm9; vmovaps (%3), %%ymm8;"
+ "vfnmsub132ps (%2), %%ymm8, %%ymm9;"
+ "vmovaps %%ymm9, (%0)" : : "r" (&ft.res[i]), "r" (&ft.x[i]),
+ "r" (&ft.y[i]), "r" (&ft.z[i]) : "xmm7", "xmm8", "xmm9");
+ for (j = 0; j < 8; j++)
+ thisres |= testf( -ft.res[i+j], ft.expected[i+j] );
+ __asm __volatile__ ("vmovaps (%1), %%ymm9; vmovaps (%3), %%ymm7; vmovaps (%2), %%ymm8;"
+ "vfnmsub213ps %%ymm7, %%ymm8, %%ymm9;"
+ "vmovaps %%ymm9, (%0)" : : "r" (&ft.res[i]), "r" (&ft.x[i]),
+ "r" (&ft.y[i]), "r" (&ft.z[i]) : "xmm7", "xmm8", "xmm9");
+ for (j = 0; j < 8; j++)
+ thisres |= testf( -ft.res[i+j], ft.expected[i+j] );
+ __asm __volatile__ ("vmovaps (%1), %%ymm9; vmovaps (%2), %%ymm8;"
+ "vfnmsub213ps (%3), %%ymm8, %%ymm9;"
+ "vmovaps %%ymm9, (%0)" : : "r" (&ft.res[i]), "r" (&ft.x[i]),
+ "r" (&ft.y[i]), "r" (&ft.z[i]) : "xmm7", "xmm8", "xmm9");
+ for (j = 0; j < 8; j++)
+ thisres |= testf( -ft.res[i+j], ft.expected[i+j] );
+ __asm __volatile__ ("vmovaps (%3), %%ymm9; vmovaps (%2), %%ymm7; vmovaps (%1), %%ymm8;"
+ "vfnmsub231ps %%ymm7, %%ymm8, %%ymm9;"
+ "vmovaps %%ymm9, (%0)" : : "r" (&ft.res[i]), "r" (&ft.x[i]),
+ "r" (&ft.y[i]), "r" (&ft.z[i]) : "xmm7", "xmm8", "xmm9");
+ for (j = 0; j < 8; j++)
+ thisres |= testf( -ft.res[i+j], ft.expected[i+j] );
+ __asm __volatile__ ("vmovaps (%3), %%ymm9; vmovaps (%1), %%ymm8;"
+ "vfnmsub231ps (%2), %%ymm8, %%ymm9;"
+ "vmovaps %%ymm9, (%0)" : : "r" (&ft.res[i]), "r" (&ft.x[i]),
+ "r" (&ft.y[i]), "r" (&ft.z[i]) : "xmm7", "xmm8", "xmm9");
+ for (j = 0; j < 8; j++)
+ thisres |= testf( -ft.res[i+j], ft.expected[i+j] );
+ if (thisres) {
+ printf( "Failure 12 %d", i );
+ for (j = 0; j < 8; j++)
+ printf( " %a %a", ft.res[i+j], ft.expected[i+j] );
+ printf( "\n" );
+ }
+ res |= thisres;
+ }
+ for (i = 0; i < N; i++)
+ ft.z[i] = -ft.z[i];
+ for (i = 0; i < N; i += 8) {
+ int thisres = 0;
+ __asm __volatile__ ("vmovaps (%1), %%ymm9; vmovaps (%2), %%ymm7; vmovaps (%3), %%ymm8;"
+ "vfmsub132ps %%ymm7, %%ymm8, %%ymm9;"
+ "vmovaps %%ymm9, (%0)" : : "r" (&ft.res[i]), "r" (&ft.x[i]),
+ "r" (&ft.y[i]), "r" (&ft.z[i]) : "xmm7", "xmm8", "xmm9");
+ for (j = 0; j < 8; j++)
+ thisres |= testf( ft.res[i+j], ft.expected[i+j] );
+ __asm __volatile__ ("vmovaps (%1), %%ymm9; vmovaps (%3), %%ymm8;"
+ "vfmsub132ps (%2), %%ymm8, %%ymm9;"
+ "vmovaps %%ymm9, (%0)" : : "r" (&ft.res[i]), "r" (&ft.x[i]),
+ "r" (&ft.y[i]), "r" (&ft.z[i]) : "xmm7", "xmm8", "xmm9");
+ for (j = 0; j < 8; j++)
+ thisres |= testf( ft.res[i+j], ft.expected[i+j] );
+ __asm __volatile__ ("vmovaps (%1), %%ymm9; vmovaps (%3), %%ymm7; vmovaps (%2), %%ymm8;"
+ "vfmsub213ps %%ymm7, %%ymm8, %%ymm9;"
+ "vmovaps %%ymm9, (%0)" : : "r" (&ft.res[i]), "r" (&ft.x[i]),
+ "r" (&ft.y[i]), "r" (&ft.z[i]) : "xmm7", "xmm8", "xmm9");
+ for (j = 0; j < 8; j++)
+ thisres |= testf( ft.res[i+j], ft.expected[i+j] );
+ __asm __volatile__ ("vmovaps (%1), %%ymm9; vmovaps (%2), %%ymm8;"
+ "vfmsub213ps (%3), %%ymm8, %%ymm9;"
+ "vmovaps %%ymm9, (%0)" : : "r" (&ft.res[i]), "r" (&ft.x[i]),
+ "r" (&ft.y[i]), "r" (&ft.z[i]) : "xmm7", "xmm8", "xmm9");
+ for (j = 0; j < 8; j++)
+ thisres |= testf( ft.res[i+j], ft.expected[i+j] );
+ __asm __volatile__ ("vmovaps (%3), %%ymm9; vmovaps (%2), %%ymm7; vmovaps (%1), %%ymm8;"
+ "vfmsub231ps %%ymm7, %%ymm8, %%ymm9;"
+ "vmovaps %%ymm9, (%0)" : : "r" (&ft.res[i]), "r" (&ft.x[i]),
+ "r" (&ft.y[i]), "r" (&ft.z[i]) : "xmm7", "xmm8", "xmm9");
+ for (j = 0; j < 8; j++)
+ thisres |= testf( ft.res[i+j], ft.expected[i+j] );
+ __asm __volatile__ ("vmovaps (%3), %%ymm9; vmovaps (%1), %%ymm8;"
+ "vfmsub231ps (%2), %%ymm8, %%ymm9;"
+ "vmovaps %%ymm9, (%0)" : : "r" (&ft.res[i]), "r" (&ft.x[i]),
+ "r" (&ft.y[i]), "r" (&ft.z[i]) : "xmm7", "xmm8", "xmm9");
+ for (j = 0; j < 8; j++)
+ thisres |= testf( ft.res[i+j], ft.expected[i+j] );
+ if (thisres) {
+ printf( "Failure 13 %d", i );
+ for (j = 0; j < 8; j++)
+ printf( " %a %a", ft.res[i+j], ft.expected[i+j] );
+ printf( "\n" );
+ }
+ res |= thisres;
+ thisres = 0;
+ __asm __volatile__ ("vmovaps (%1), %%ymm9; vmovaps (%2), %%ymm7; vmovaps (%3), %%ymm8;"
+ "vfnmadd132ps %%ymm7, %%ymm8, %%ymm9;"
+ "vmovaps %%ymm9, (%0)" : : "r" (&ft.res[i]), "r" (&ft.x[i]),
+ "r" (&ft.y[i]), "r" (&ft.z[i]) : "xmm7", "xmm8", "xmm9");
+ for (j = 0; j < 8; j++)
+ thisres |= testf( -ft.res[i+j], ft.expected[i+j] );
+ __asm __volatile__ ("vmovaps (%1), %%ymm9; vmovaps (%3), %%ymm8;"
+ "vfnmadd132ps (%2), %%ymm8, %%ymm9;"
+ "vmovaps %%ymm9, (%0)" : : "r" (&ft.res[i]), "r" (&ft.x[i]),
+ "r" (&ft.y[i]), "r" (&ft.z[i]) : "xmm7", "xmm8", "xmm9");
+ for (j = 0; j < 8; j++)
+ thisres |= testf( -ft.res[i+j], ft.expected[i+j] );
+ __asm __volatile__ ("vmovaps (%1), %%ymm9; vmovaps (%3), %%ymm7; vmovaps (%2), %%ymm8;"
+ "vfnmadd213ps %%ymm7, %%ymm8, %%ymm9;"
+ "vmovaps %%ymm9, (%0)" : : "r" (&ft.res[i]), "r" (&ft.x[i]),
+ "r" (&ft.y[i]), "r" (&ft.z[i]) : "xmm7", "xmm8", "xmm9");
+ for (j = 0; j < 8; j++)
+ thisres |= testf( -ft.res[i+j], ft.expected[i+j] );
+ __asm __volatile__ ("vmovaps (%1), %%ymm9; vmovaps (%2), %%ymm8;"
+ "vfnmadd213ps (%3), %%ymm8, %%ymm9;"
+ "vmovaps %%ymm9, (%0)" : : "r" (&ft.res[i]), "r" (&ft.x[i]),
+ "r" (&ft.y[i]), "r" (&ft.z[i]) : "xmm7", "xmm8", "xmm9");
+ for (j = 0; j < 8; j++)
+ thisres |= testf( -ft.res[i+j], ft.expected[i+j] );
+ __asm __volatile__ ("vmovaps (%3), %%ymm9; vmovaps (%2), %%ymm7; vmovaps (%1), %%ymm8;"
+ "vfnmadd231ps %%ymm7, %%ymm8, %%ymm9;"
+ "vmovaps %%ymm9, (%0)" : : "r" (&ft.res[i]), "r" (&ft.x[i]),
+ "r" (&ft.y[i]), "r" (&ft.z[i]) : "xmm7", "xmm8", "xmm9");
+ for (j = 0; j < 8; j++)
+ thisres |= testf( -ft.res[i+j], ft.expected[i+j] );
+ __asm __volatile__ ("vmovaps (%3), %%ymm9; vmovaps (%1), %%ymm8;"
+ "vfnmadd231ps (%2), %%ymm8, %%ymm9;"
+ "vmovaps %%ymm9, (%0)" : : "r" (&ft.res[i]), "r" (&ft.x[i]),
+ "r" (&ft.y[i]), "r" (&ft.z[i]) : "xmm7", "xmm8", "xmm9");
+ for (j = 0; j < 8; j++)
+ thisres |= testf( -ft.res[i+j], ft.expected[i+j] );
+ if (thisres) {
+ printf( "Failure 14 %d", i );
+ for (j = 0; j < 8; j++)
+ printf( " %a %a", ft.res[i+j], ft.expected[i+j] );
+ printf( "\n" );
+ }
+ res |= thisres;
+ }
+ for (i = 1; i < N; i += 2)
+ ft.z[i] = -ft.z[i];
+ for (i = 0; i < N; i += 8) {
+ int thisres = 0;
+ __asm __volatile__ ("vmovaps (%1), %%ymm9; vmovaps (%2), %%ymm7; vmovaps (%3), %%ymm8;"
+ "vfmaddsub132ps %%ymm7, %%ymm8, %%ymm9;"
+ "vmovaps %%ymm9, (%0)" : : "r" (&ft.res[i]), "r" (&ft.x[i]),
+ "r" (&ft.y[i]), "r" (&ft.z[i]) : "xmm7", "xmm8", "xmm9");
+ for (j = 0; j < 8; j++)
+ thisres |= testf( ft.res[i+j], ft.expected[i+j] );
+ __asm __volatile__ ("vmovaps (%1), %%ymm9; vmovaps (%3), %%ymm8;"
+ "vfmaddsub132ps (%2), %%ymm8, %%ymm9;"
+ "vmovaps %%ymm9, (%0)" : : "r" (&ft.res[i]), "r" (&ft.x[i]),
+ "r" (&ft.y[i]), "r" (&ft.z[i]) : "xmm7", "xmm8", "xmm9");
+ for (j = 0; j < 8; j++)
+ thisres |= testf( ft.res[i+j], ft.expected[i+j] );
+ __asm __volatile__ ("vmovaps (%1), %%ymm9; vmovaps (%3), %%ymm7; vmovaps (%2), %%ymm8;"
+ "vfmaddsub213ps %%ymm7, %%ymm8, %%ymm9;"
+ "vmovaps %%ymm9, (%0)" : : "r" (&ft.res[i]), "r" (&ft.x[i]),
+ "r" (&ft.y[i]), "r" (&ft.z[i]) : "xmm7", "xmm8", "xmm9");
+ for (j = 0; j < 8; j++)
+ thisres |= testf( ft.res[i+j], ft.expected[i+j] );
+ __asm __volatile__ ("vmovaps (%1), %%ymm9; vmovaps (%2), %%ymm8;"
+ "vfmaddsub213ps (%3), %%ymm8, %%ymm9;"
+ "vmovaps %%ymm9, (%0)" : : "r" (&ft.res[i]), "r" (&ft.x[i]),
+ "r" (&ft.y[i]), "r" (&ft.z[i]) : "xmm7", "xmm8", "xmm9");
+ for (j = 0; j < 8; j++)
+ thisres |= testf( ft.res[i+j], ft.expected[i+j] );
+ __asm __volatile__ ("vmovaps (%3), %%ymm9; vmovaps (%2), %%ymm7; vmovaps (%1), %%ymm8;"
+ "vfmaddsub231ps %%ymm7, %%ymm8, %%ymm9;"
+ "vmovaps %%ymm9, (%0)" : : "r" (&ft.res[i]), "r" (&ft.x[i]),
+ "r" (&ft.y[i]), "r" (&ft.z[i]) : "xmm7", "xmm8", "xmm9");
+ for (j = 0; j < 8; j++)
+ thisres |= testf( ft.res[i+j], ft.expected[i+j] );
+ __asm __volatile__ ("vmovaps (%3), %%ymm9; vmovaps (%1), %%ymm8;"
+ "vfmaddsub231ps (%2), %%ymm8, %%ymm9;"
+ "vmovaps %%ymm9, (%0)" : : "r" (&ft.res[i]), "r" (&ft.x[i]),
+ "r" (&ft.y[i]), "r" (&ft.z[i]) : "xmm7", "xmm8", "xmm9");
+ for (j = 0; j < 8; j++)
+ thisres |= testf( ft.res[i+j], ft.expected[i+j] );
+ if (thisres) {
+ printf( "Failure 15 %d", i );
+ for (j = 0; j < 8; j++)
+ printf( " %a %a", ft.res[i+j], ft.expected[i+j] );
+ printf( "\n" );
+ }
+ res |= thisres;
+ }
+ for (i = 0; i < N; i++)
+ ft.z[i] = -ft.z[i];
+ for (i = 0; i < N; i += 8) {
+ int thisres = 0;
+ __asm __volatile__ ("vmovaps (%1), %%ymm9; vmovaps (%2), %%ymm7; vmovaps (%3), %%ymm8;"
+ "vfmsubadd132ps %%ymm7, %%ymm8, %%ymm9;"
+ "vmovaps %%ymm9, (%0)" : : "r" (&ft.res[i]), "r" (&ft.x[i]),
+ "r" (&ft.y[i]), "r" (&ft.z[i]) : "xmm7", "xmm8", "xmm9");
+ for (j = 0; j < 8; j++)
+ thisres |= testf( ft.res[i+j], ft.expected[i+j] );
+ __asm __volatile__ ("vmovaps (%1), %%ymm9; vmovaps (%3), %%ymm8;"
+ "vfmsubadd132ps (%2), %%ymm8, %%ymm9;"
+ "vmovaps %%ymm9, (%0)" : : "r" (&ft.res[i]), "r" (&ft.x[i]),
+ "r" (&ft.y[i]), "r" (&ft.z[i]) : "xmm7", "xmm8", "xmm9");
+ for (j = 0; j < 8; j++)
+ thisres |= testf( ft.res[i+j], ft.expected[i+j] );
+ __asm __volatile__ ("vmovaps (%1), %%ymm9; vmovaps (%3), %%ymm7; vmovaps (%2), %%ymm8;"
+ "vfmsubadd213ps %%ymm7, %%ymm8, %%ymm9;"
+ "vmovaps %%ymm9, (%0)" : : "r" (&ft.res[i]), "r" (&ft.x[i]),
+ "r" (&ft.y[i]), "r" (&ft.z[i]) : "xmm7", "xmm8", "xmm9");
+ for (j = 0; j < 8; j++)
+ thisres |= testf( ft.res[i+j], ft.expected[i+j] );
+ __asm __volatile__ ("vmovaps (%1), %%ymm9; vmovaps (%2), %%ymm8;"
+ "vfmsubadd213ps (%3), %%ymm8, %%ymm9;"
+ "vmovaps %%ymm9, (%0)" : : "r" (&ft.res[i]), "r" (&ft.x[i]),
+ "r" (&ft.y[i]), "r" (&ft.z[i]) : "xmm7", "xmm8", "xmm9");
+ for (j = 0; j < 8; j++)
+ thisres |= testf( ft.res[i+j], ft.expected[i+j] );
+ __asm __volatile__ ("vmovaps (%3), %%ymm9; vmovaps (%2), %%ymm7; vmovaps (%1), %%ymm8;"
+ "vfmsubadd231ps %%ymm7, %%ymm8, %%ymm9;"
+ "vmovaps %%ymm9, (%0)" : : "r" (&ft.res[i]), "r" (&ft.x[i]),
+ "r" (&ft.y[i]), "r" (&ft.z[i]) : "xmm7", "xmm8", "xmm9");
+ for (j = 0; j < 8; j++)
+ thisres |= testf( ft.res[i+j], ft.expected[i+j] );
+ __asm __volatile__ ("vmovaps (%3), %%ymm9; vmovaps (%1), %%ymm8;"
+ "vfmsubadd231ps (%2), %%ymm8, %%ymm9;"
+ "vmovaps %%ymm9, (%0)" : : "r" (&ft.res[i]), "r" (&ft.x[i]),
+ "r" (&ft.y[i]), "r" (&ft.z[i]) : "xmm7", "xmm8", "xmm9");
+ for (j = 0; j < 8; j++)
+ thisres |= testf( ft.res[i+j], ft.expected[i+j] );
+ if (thisres) {
+ printf( "Failure 16 %d", i );
+ for (j = 0; j < 8; j++)
+ printf( " %a %a", ft.res[i+j], ft.expected[i+j] );
+ printf( "\n" );
+ }
+ res |= thisres;
+ }
+ for (i = 1; i < N; i += 2)
+ ft.z[i] = -ft.z[i];
+ return res;
+}
+
+static int test( double x, double y )
+{
+ unsigned long long a, b;
+ memcpy( &a, &x, sizeof (a) );
+ memcpy( &b, &y, sizeof (b) );
+ if ((a & 0x7ff8000000000000ULL) == 0x7ff8000000000000ULL)
+ return (b & 0x7ff8000000000000ULL) != 0x7ff8000000000000ULL;
+ return memcmp( &a, &b, sizeof (a) ) != 0;
+}
+
+static int test_fma( void )
+{
+ int res = 0, i, j;
+ double w;
+ for (i = 0; i < N; i++) {
+ int thisres = 0;
+ __asm __volatile__ ("vfmadd132sd %2, %3, %0" : "=x" (w) : "0" (dt.x[i]), "x" (dt.y[i]), "x" (dt.z[i]));
+ thisres |= test( w, dt.expected[i] );
+ __asm __volatile__ ("vfmadd132sd %2, %3, %0" : "=x" (w) : "0" (dt.x[i]), "m" (dt.y[i]), "x" (dt.z[i]));
+ thisres |= test( w, dt.expected[i] );
+ __asm __volatile__ ("vfmadd213sd %3, %2, %0" : "=x" (w) : "0" (dt.x[i]), "x" (dt.y[i]), "x" (dt.z[i]));
+ thisres |= test( w, dt.expected[i] );
+ __asm __volatile__ ("vfmadd213sd %3, %2, %0" : "=x" (w) : "0" (dt.x[i]), "x" (dt.y[i]), "m" (dt.z[i]));
+ thisres |= test( w, dt.expected[i] );
+ __asm __volatile__ ("vfmadd231sd %2, %1, %0" : "=x" (w) : "x" (dt.x[i]), "x" (dt.y[i]), "0" (dt.z[i]));
+ thisres |= test( w, dt.expected[i] );
+ __asm __volatile__ ("vfmadd231sd %2, %1, %0" : "=x" (w) : "x" (dt.x[i]), "m" (dt.y[i]), "0" (dt.z[i]));
+ thisres |= test( w, dt.expected[i] );
+ if (thisres)
+ printf( "Failure 1 %d %a %a\n", i, w, dt.expected[i] );
+ res |= thisres;
+ thisres = 0;
+ __asm __volatile__ ("vfnmsub132sd %2, %3, %0" : "=x" (w) : "0" (dt.x[i]), "x" (dt.y[i]), "x" (dt.z[i]));
+ thisres |= test( -w, dt.expected[i] );
+ __asm __volatile__ ("vfnmsub132sd %2, %3, %0" : "=x" (w) : "0" (dt.x[i]), "m" (dt.y[i]), "x" (dt.z[i]));
+ thisres |= test( -w, dt.expected[i] );
+ __asm __volatile__ ("vfnmsub213sd %3, %2, %0" : "=x" (w) : "0" (dt.x[i]), "x" (dt.y[i]), "x" (dt.z[i]));
+ thisres |= test( -w, dt.expected[i] );
+ __asm __volatile__ ("vfnmsub213sd %3, %2, %0" : "=x" (w) : "0" (dt.x[i]), "x" (dt.y[i]), "m" (dt.z[i]));
+ thisres |= test( -w, dt.expected[i] );
+ __asm __volatile__ ("vfnmsub231sd %2, %1, %0" : "=x" (w) : "x" (dt.x[i]), "x" (dt.y[i]), "0" (dt.z[i]));
+ thisres |= test( -w, dt.expected[i] );
+ __asm __volatile__ ("vfnmsub231sd %2, %1, %0" : "=x" (w) : "x" (dt.x[i]), "m" (dt.y[i]), "0" (dt.z[i]));
+ thisres |= test( -w, dt.expected[i] );
+ if (thisres)
+ printf( "Failure 2 %d %a %a\n", i, w, dt.expected[i] );
+ res |= thisres;
+ }
+ for (i = 0; i < N; i++)
+ dt.z[i] = -dt.z[i];
+ for (i = 0; i < N; i++) {
+ int thisres = 0;
+ __asm __volatile__ ("vfmsub132sd %2, %3, %0" : "=x" (w) : "0" (dt.x[i]), "x" (dt.y[i]), "x" (dt.z[i]));
+ thisres |= test( w, dt.expected[i] );
+ __asm __volatile__ ("vfmsub132sd %2, %3, %0" : "=x" (w) : "0" (dt.x[i]), "m" (dt.y[i]), "x" (dt.z[i]));
+ thisres |= test( w, dt.expected[i] );
+ __asm __volatile__ ("vfmsub213sd %3, %2, %0" : "=x" (w) : "0" (dt.x[i]), "x" (dt.y[i]), "x" (dt.z[i]));
+ thisres |= test( w, dt.expected[i] );
+ __asm __volatile__ ("vfmsub213sd %3, %2, %0" : "=x" (w) : "0" (dt.x[i]), "x" (dt.y[i]), "m" (dt.z[i]));
+ thisres |= test( w, dt.expected[i] );
+ __asm __volatile__ ("vfmsub231sd %2, %1, %0" : "=x" (w) : "x" (dt.x[i]), "x" (dt.y[i]), "0" (dt.z[i]));
+ thisres |= test( w, dt.expected[i] );
+ __asm __volatile__ ("vfmsub231sd %2, %1, %0" : "=x" (w) : "x" (dt.x[i]), "m" (dt.y[i]), "0" (dt.z[i]));
+ thisres |= test( w, dt.expected[i] );
+ if (thisres)
+ printf( "Failure 3 %d %a %a\n", i, w, dt.expected[i] );
+ res |= thisres;
+ thisres = 0;
+ __asm __volatile__ ("vfnmadd132sd %2, %3, %0" : "=x" (w) : "0" (dt.x[i]), "x" (dt.y[i]), "x" (dt.z[i]));
+ thisres |= test( -w, dt.expected[i] );
+ __asm __volatile__ ("vfnmadd132sd %2, %3, %0" : "=x" (w) : "0" (dt.x[i]), "m" (dt.y[i]), "x" (dt.z[i]));
+ thisres |= test( -w, dt.expected[i] );
+ __asm __volatile__ ("vfnmadd213sd %3, %2, %0" : "=x" (w) : "0" (dt.x[i]), "x" (dt.y[i]), "x" (dt.z[i]));
+ thisres |= test( -w, dt.expected[i] );
+ __asm __volatile__ ("vfnmadd213sd %3, %2, %0" : "=x" (w) : "0" (dt.x[i]), "x" (dt.y[i]), "m" (dt.z[i]));
+ thisres |= test( -w, dt.expected[i] );
+ __asm __volatile__ ("vfnmadd231sd %2, %1, %0" : "=x" (w) : "x" (dt.x[i]), "x" (dt.y[i]), "0" (dt.z[i]));
+ thisres |= test( -w, dt.expected[i] );
+ __asm __volatile__ ("vfnmadd231sd %2, %1, %0" : "=x" (w) : "x" (dt.x[i]), "m" (dt.y[i]), "0" (dt.z[i]));
+ thisres |= test( -w, dt.expected[i] );
+ if (thisres)
+ printf( "Failure 4 %d %a %a\n", i, w, dt.expected[i] );
+ res |= thisres;
+ }
+ for (i = 0; i < N; i++)
+ dt.z[i] = -dt.z[i];
+ for (i = 0; i < N; i += 2) {
+ int thisres = 0;
+ __asm __volatile__ ("vmovapd (%1), %%xmm9; vmovapd (%2), %%xmm7; vmovapd (%3), %%xmm8;"
+ "vfmadd132pd %%xmm7, %%xmm8, %%xmm9;"
+ "vmovapd %%xmm9, (%0)" : : "r" (&dt.res[i]), "r" (&dt.x[i]),
+ "r" (&dt.y[i]), "r" (&dt.z[i]) : "xmm7", "xmm8", "xmm9");
+ for (j = 0; j < 2; j++)
+ thisres |= test( dt.res[i+j], dt.expected[i+j] );
+ __asm __volatile__ ("vmovapd (%1), %%xmm9; vmovapd (%3), %%xmm8;"
+ "vfmadd132pd (%2), %%xmm8, %%xmm9;"
+ "vmovapd %%xmm9, (%0)" : : "r" (&dt.res[i]), "r" (&dt.x[i]),
+ "r" (&dt.y[i]), "r" (&dt.z[i]) : "xmm7", "xmm8", "xmm9");
+ for (j = 0; j < 2; j++)
+ thisres |= test( dt.res[i+j], dt.expected[i+j] );
+ __asm __volatile__ ("vmovapd (%1), %%xmm9; vmovapd (%3), %%xmm7; vmovapd (%2), %%xmm8;"
+ "vfmadd213pd %%xmm7, %%xmm8, %%xmm9;"
+ "vmovapd %%xmm9, (%0)" : : "r" (&dt.res[i]), "r" (&dt.x[i]),
+ "r" (&dt.y[i]), "r" (&dt.z[i]) : "xmm7", "xmm8", "xmm9");
+ for (j = 0; j < 2; j++)
+ thisres |= test( dt.res[i+j], dt.expected[i+j] );
+ __asm __volatile__ ("vmovapd (%1), %%xmm9; vmovapd (%2), %%xmm8;"
+ "vfmadd213pd (%3), %%xmm8, %%xmm9;"
+ "vmovapd %%xmm9, (%0)" : : "r" (&dt.res[i]), "r" (&dt.x[i]),
+ "r" (&dt.y[i]), "r" (&dt.z[i]) : "xmm7", "xmm8", "xmm9");
+ for (j = 0; j < 2; j++)
+ thisres |= test( dt.res[i+j], dt.expected[i+j] );
+ __asm __volatile__ ("vmovapd (%3), %%xmm9; vmovapd (%2), %%xmm7; vmovapd (%1), %%xmm8;"
+ "vfmadd231pd %%xmm7, %%xmm8, %%xmm9;"
+ "vmovapd %%xmm9, (%0)" : : "r" (&dt.res[i]), "r" (&dt.x[i]),
+ "r" (&dt.y[i]), "r" (&dt.z[i]) : "xmm7", "xmm8", "xmm9");
+ for (j = 0; j < 2; j++)
+ thisres |= test( dt.res[i+j], dt.expected[i+j] );
+ __asm __volatile__ ("vmovapd (%3), %%xmm9; vmovapd (%1), %%xmm8;"
+ "vfmadd231pd (%2), %%xmm8, %%xmm9;"
+ "vmovapd %%xmm9, (%0)" : : "r" (&dt.res[i]), "r" (&dt.x[i]),
+ "r" (&dt.y[i]), "r" (&dt.z[i]) : "xmm7", "xmm8", "xmm9");
+ for (j = 0; j < 2; j++)
+ thisres |= test( dt.res[i+j], dt.expected[i+j] );
+ if (thisres) {
+ printf( "Failure 5 %d", i );
+ for (j = 0; j < 2; j++)
+ printf( " %a %a", dt.res[i+j], dt.expected[i+j] );
+ printf( "\n" );
+ }
+ res |= thisres;
+ thisres = 0;
+ __asm __volatile__ ("vmovapd (%1), %%xmm9; vmovapd (%2), %%xmm7; vmovapd (%3), %%xmm8;"
+ "vfnmsub132pd %%xmm7, %%xmm8, %%xmm9;"
+ "vmovapd %%xmm9, (%0)" : : "r" (&dt.res[i]), "r" (&dt.x[i]),
+ "r" (&dt.y[i]), "r" (&dt.z[i]) : "xmm7", "xmm8", "xmm9");
+ for (j = 0; j < 2; j++)
+ thisres |= test( -dt.res[i+j], dt.expected[i+j] );
+ __asm __volatile__ ("vmovapd (%1), %%xmm9; vmovapd (%3), %%xmm8;"
+ "vfnmsub132pd (%2), %%xmm8, %%xmm9;"
+ "vmovapd %%xmm9, (%0)" : : "r" (&dt.res[i]), "r" (&dt.x[i]),
+ "r" (&dt.y[i]), "r" (&dt.z[i]) : "xmm7", "xmm8", "xmm9");
+ for (j = 0; j < 2; j++)
+ thisres |= test( -dt.res[i+j], dt.expected[i+j] );
+ __asm __volatile__ ("vmovapd (%1), %%xmm9; vmovapd (%3), %%xmm7; vmovapd (%2), %%xmm8;"
+ "vfnmsub213pd %%xmm7, %%xmm8, %%xmm9;"
+ "vmovapd %%xmm9, (%0)" : : "r" (&dt.res[i]), "r" (&dt.x[i]),
+ "r" (&dt.y[i]), "r" (&dt.z[i]) : "xmm7", "xmm8", "xmm9");
+ for (j = 0; j < 2; j++)
+ thisres |= test( -dt.res[i+j], dt.expected[i+j] );
+ __asm __volatile__ ("vmovapd (%1), %%xmm9; vmovapd (%2), %%xmm8;"
+ "vfnmsub213pd (%3), %%xmm8, %%xmm9;"
+ "vmovapd %%xmm9, (%0)" : : "r" (&dt.res[i]), "r" (&dt.x[i]),
+ "r" (&dt.y[i]), "r" (&dt.z[i]) : "xmm7", "xmm8", "xmm9");
+ for (j = 0; j < 2; j++)
+ thisres |= test( -dt.res[i+j], dt.expected[i+j] );
+ __asm __volatile__ ("vmovapd (%3), %%xmm9; vmovapd (%2), %%xmm7; vmovapd (%1), %%xmm8;"
+ "vfnmsub231pd %%xmm7, %%xmm8, %%xmm9;"
+ "vmovapd %%xmm9, (%0)" : : "r" (&dt.res[i]), "r" (&dt.x[i]),
+ "r" (&dt.y[i]), "r" (&dt.z[i]) : "xmm7", "xmm8", "xmm9");
+ for (j = 0; j < 2; j++)
+ thisres |= test( -dt.res[i+j], dt.expected[i+j] );
+ __asm __volatile__ ("vmovapd (%3), %%xmm9; vmovapd (%1), %%xmm8;"
+ "vfnmsub231pd (%2), %%xmm8, %%xmm9;"
+ "vmovapd %%xmm9, (%0)" : : "r" (&dt.res[i]), "r" (&dt.x[i]),
+ "r" (&dt.y[i]), "r" (&dt.z[i]) : "xmm7", "xmm8", "xmm9");
+ for (j = 0; j < 2; j++)
+ thisres |= test( -dt.res[i+j], dt.expected[i+j] );
+ if (thisres) {
+ printf( "Failure 6 %d", i );
+ for (j = 0; j < 2; j++)
+ printf( " %a %a", dt.res[i+j], dt.expected[i+j] );
+ printf( "\n" );
+ }
+ res |= thisres;
+ }
+ for (i = 0; i < N; i++)
+ dt.z[i] = -dt.z[i];
+ for (i = 0; i < N; i += 2) {
+ int thisres = 0;
+ __asm __volatile__ ("vmovapd (%1), %%xmm9; vmovapd (%2), %%xmm7; vmovapd (%3), %%xmm8;"
+ "vfmsub132pd %%xmm7, %%xmm8, %%xmm9;"
+ "vmovapd %%xmm9, (%0)" : : "r" (&dt.res[i]), "r" (&dt.x[i]),
+ "r" (&dt.y[i]), "r" (&dt.z[i]) : "xmm7", "xmm8", "xmm9");
+ for (j = 0; j < 2; j++)
+ thisres |= test( dt.res[i+j], dt.expected[i+j] );
+ __asm __volatile__ ("vmovapd (%1), %%xmm9; vmovapd (%3), %%xmm8;"
+ "vfmsub132pd (%2), %%xmm8, %%xmm9;"
+ "vmovapd %%xmm9, (%0)" : : "r" (&dt.res[i]), "r" (&dt.x[i]),
+ "r" (&dt.y[i]), "r" (&dt.z[i]) : "xmm7", "xmm8", "xmm9");
+ for (j = 0; j < 2; j++)
+ thisres |= test( dt.res[i+j], dt.expected[i+j] );
+ __asm __volatile__ ("vmovapd (%1), %%xmm9; vmovapd (%3), %%xmm7; vmovapd (%2), %%xmm8;"
+ "vfmsub213pd %%xmm7, %%xmm8, %%xmm9;"
+ "vmovapd %%xmm9, (%0)" : : "r" (&dt.res[i]), "r" (&dt.x[i]),
+ "r" (&dt.y[i]), "r" (&dt.z[i]) : "xmm7", "xmm8", "xmm9");
+ for (j = 0; j < 2; j++)
+ thisres |= test( dt.res[i+j], dt.expected[i+j] );
+ __asm __volatile__ ("vmovapd (%1), %%xmm9; vmovapd (%2), %%xmm8;"
+ "vfmsub213pd (%3), %%xmm8, %%xmm9;"
+ "vmovapd %%xmm9, (%0)" : : "r" (&dt.res[i]), "r" (&dt.x[i]),
+ "r" (&dt.y[i]), "r" (&dt.z[i]) : "xmm7", "xmm8", "xmm9");
+ for (j = 0; j < 2; j++)
+ thisres |= test( dt.res[i+j], dt.expected[i+j] );
+ __asm __volatile__ ("vmovapd (%3), %%xmm9; vmovapd (%2), %%xmm7; vmovapd (%1), %%xmm8;"
+ "vfmsub231pd %%xmm7, %%xmm8, %%xmm9;"
+ "vmovapd %%xmm9, (%0)" : : "r" (&dt.res[i]), "r" (&dt.x[i]),
+ "r" (&dt.y[i]), "r" (&dt.z[i]) : "xmm7", "xmm8", "xmm9");
+ for (j = 0; j < 2; j++)
+ thisres |= test( dt.res[i+j], dt.expected[i+j] );
+ __asm __volatile__ ("vmovapd (%3), %%xmm9; vmovapd (%1), %%xmm8;"
+ "vfmsub231pd (%2), %%xmm8, %%xmm9;"
+ "vmovapd %%xmm9, (%0)" : : "r" (&dt.res[i]), "r" (&dt.x[i]),
+ "r" (&dt.y[i]), "r" (&dt.z[i]) : "xmm7", "xmm8", "xmm9");
+ for (j = 0; j < 2; j++)
+ thisres |= test( dt.res[i+j], dt.expected[i+j] );
+ if (thisres) {
+ printf( "Failure 7 %d", i );
+ for (j = 0; j < 2; j++)
+ printf( " %a %a", dt.res[i+j], dt.expected[i+j] );
+ printf( "\n" );
+ }
+ res |= thisres;
+ thisres = 0;
+ __asm __volatile__ ("vmovapd (%1), %%xmm9; vmovapd (%2), %%xmm7; vmovapd (%3), %%xmm8;"
+ "vfnmadd132pd %%xmm7, %%xmm8, %%xmm9;"
+ "vmovapd %%xmm9, (%0)" : : "r" (&dt.res[i]), "r" (&dt.x[i]),
+ "r" (&dt.y[i]), "r" (&dt.z[i]) : "xmm7", "xmm8", "xmm9");
+ for (j = 0; j < 2; j++)
+ thisres |= test( -dt.res[i+j], dt.expected[i+j] );
+ __asm __volatile__ ("vmovapd (%1), %%xmm9; vmovapd (%3), %%xmm8;"
+ "vfnmadd132pd (%2), %%xmm8, %%xmm9;"
+ "vmovapd %%xmm9, (%0)" : : "r" (&dt.res[i]), "r" (&dt.x[i]),
+ "r" (&dt.y[i]), "r" (&dt.z[i]) : "xmm7", "xmm8", "xmm9");
+ for (j = 0; j < 2; j++)
+ thisres |= test( -dt.res[i+j], dt.expected[i+j] );
+ __asm __volatile__ ("vmovapd (%1), %%xmm9; vmovapd (%3), %%xmm7; vmovapd (%2), %%xmm8;"
+ "vfnmadd213pd %%xmm7, %%xmm8, %%xmm9;"
+ "vmovapd %%xmm9, (%0)" : : "r" (&dt.res[i]), "r" (&dt.x[i]),
+ "r" (&dt.y[i]), "r" (&dt.z[i]) : "xmm7", "xmm8", "xmm9");
+ for (j = 0; j < 2; j++)
+ thisres |= test( -dt.res[i+j], dt.expected[i+j] );
+ __asm __volatile__ ("vmovapd (%1), %%xmm9; vmovapd (%2), %%xmm8;"
+ "vfnmadd213pd (%3), %%xmm8, %%xmm9;"
+ "vmovapd %%xmm9, (%0)" : : "r" (&dt.res[i]), "r" (&dt.x[i]),
+ "r" (&dt.y[i]), "r" (&dt.z[i]) : "xmm7", "xmm8", "xmm9");
+ for (j = 0; j < 2; j++)
+ thisres |= test( -dt.res[i+j], dt.expected[i+j] );
+ __asm __volatile__ ("vmovapd (%3), %%xmm9; vmovapd (%2), %%xmm7; vmovapd (%1), %%xmm8;"
+ "vfnmadd231pd %%xmm7, %%xmm8, %%xmm9;"
+ "vmovapd %%xmm9, (%0)" : : "r" (&dt.res[i]), "r" (&dt.x[i]),
+ "r" (&dt.y[i]), "r" (&dt.z[i]) : "xmm7", "xmm8", "xmm9");
+ for (j = 0; j < 2; j++)
+ thisres |= test( -dt.res[i+j], dt.expected[i+j] );
+ __asm __volatile__ ("vmovapd (%3), %%xmm9; vmovapd (%1), %%xmm8;"
+ "vfnmadd231pd (%2), %%xmm8, %%xmm9;"
+ "vmovapd %%xmm9, (%0)" : : "r" (&dt.res[i]), "r" (&dt.x[i]),
+ "r" (&dt.y[i]), "r" (&dt.z[i]) : "xmm7", "xmm8", "xmm9");
+ for (j = 0; j < 2; j++)
+ thisres |= test( -dt.res[i+j], dt.expected[i+j] );
+ if (thisres) {
+ printf( "Failure 8 %d", i );
+ for (j = 0; j < 2; j++)
+ printf( " %a %a", dt.res[i+j], dt.expected[i+j] );
+ printf( "\n" );
+ }
+ res |= thisres;
+ }
+ for (i = 1; i < N; i += 2)
+ dt.z[i] = -dt.z[i];
+ for (i = 0; i < N; i += 2) {
+ int thisres = 0;
+ __asm __volatile__ ("vmovapd (%1), %%xmm9; vmovapd (%2), %%xmm7; vmovapd (%3), %%xmm8;"
+ "vfmaddsub132pd %%xmm7, %%xmm8, %%xmm9;"
+ "vmovapd %%xmm9, (%0)" : : "r" (&dt.res[i]), "r" (&dt.x[i]),
+ "r" (&dt.y[i]), "r" (&dt.z[i]) : "xmm7", "xmm8", "xmm9");
+ for (j = 0; j < 2; j++)
+ thisres |= test( dt.res[i+j], dt.expected[i+j] );
+ __asm __volatile__ ("vmovapd (%1), %%xmm9; vmovapd (%3), %%xmm8;"
+ "vfmaddsub132pd (%2), %%xmm8, %%xmm9;"
+ "vmovapd %%xmm9, (%0)" : : "r" (&dt.res[i]), "r" (&dt.x[i]),
+ "r" (&dt.y[i]), "r" (&dt.z[i]) : "xmm7", "xmm8", "xmm9");
+ for (j = 0; j < 2; j++)
+ thisres |= test( dt.res[i+j], dt.expected[i+j] );
+ __asm __volatile__ ("vmovapd (%1), %%xmm9; vmovapd (%3), %%xmm7; vmovapd (%2), %%xmm8;"
+ "vfmaddsub213pd %%xmm7, %%xmm8, %%xmm9;"
+ "vmovapd %%xmm9, (%0)" : : "r" (&dt.res[i]), "r" (&dt.x[i]),
+ "r" (&dt.y[i]), "r" (&dt.z[i]) : "xmm7", "xmm8", "xmm9");
+ for (j = 0; j < 2; j++)
+ thisres |= test( dt.res[i+j], dt.expected[i+j] );
+ __asm __volatile__ ("vmovapd (%1), %%xmm9; vmovapd (%2), %%xmm8;"
+ "vfmaddsub213pd (%3), %%xmm8, %%xmm9;"
+ "vmovapd %%xmm9, (%0)" : : "r" (&dt.res[i]), "r" (&dt.x[i]),
+ "...
[truncated message content] |
|
From: <sv...@va...> - 2013-03-27 11:40:09
|
sewardj 2013-03-27 11:40:02 +0000 (Wed, 27 Mar 2013)
New Revision: 13338
Log:
Memcheck fixes for new IR ops introduced by r2702 (which added support
for AVX2, BMI1, BMI2 and FMA instructions). Part of #305728.
(Jakub Jelinek, ja...@re...)
Modified files:
trunk/memcheck/mc_translate.c
Modified: trunk/memcheck/mc_translate.c (+132 -0)
===================================================================
--- trunk/memcheck/mc_translate.c 2013-03-26 13:57:48 +00:00 (rev 13337)
+++ trunk/memcheck/mc_translate.c 2013-03-27 11:40:02 +00:00 (rev 13338)
@@ -627,6 +627,7 @@
case Ity_I64: return mkUifU64(mce, a1, a2);
case Ity_I128: return mkUifU128(mce, a1, a2);
case Ity_V128: return mkUifUV128(mce, a1, a2);
+ case Ity_V256: return mkUifUV256(mce, a1, a2);
default:
VG_(printf)("\n"); ppIRType(vty); VG_(printf)("\n");
VG_(tool_panic)("memcheck:mkUifU");
@@ -872,6 +873,13 @@
tmp1 = assignNew('V', mce, Ity_I64, unop(Iop_1Sto64, tmp1));
tmp1 = assignNew('V', mce, Ity_I128, binop(Iop_64HLto128, tmp1, tmp1));
return tmp1;
+ case Ity_V256:
+ tmp1 = assignNew('V', mce, Ity_I64, unop(Iop_1Sto64, tmp1));
+ tmp1 = assignNew('V', mce, Ity_V128, binop(Iop_64HLtoV128,
+ tmp1, tmp1));
+ tmp1 = assignNew('V', mce, Ity_V256, binop(Iop_V128HLtoV256,
+ tmp1, tmp1));
+ return tmp1;
default:
ppIRType(dst_ty);
VG_(tool_panic)("mkPCastTo(2)");
@@ -2024,11 +2032,21 @@
return assignNew('V', mce, Ity_I64, unop(Iop_CmpNEZ32x2, at));
}
+static IRAtom* mkPCast16x16 ( MCEnv* mce, IRAtom* at )
+{
+ return assignNew('V', mce, Ity_V256, unop(Iop_CmpNEZ16x16, at));
+}
+
static IRAtom* mkPCast16x4 ( MCEnv* mce, IRAtom* at )
{
return assignNew('V', mce, Ity_I64, unop(Iop_CmpNEZ16x4, at));
}
+static IRAtom* mkPCast8x32 ( MCEnv* mce, IRAtom* at )
+{
+ return assignNew('V', mce, Ity_V256, unop(Iop_CmpNEZ8x32, at));
+}
+
static IRAtom* mkPCast8x8 ( MCEnv* mce, IRAtom* at )
{
return assignNew('V', mce, Ity_I64, unop(Iop_CmpNEZ8x8, at));
@@ -2433,6 +2451,44 @@
/* Simple ... UifU the args and per-lane pessimise the results. */
+/* --- V256-bit versions --- */
+
+static
+IRAtom* binary8Ix32 ( MCEnv* mce, IRAtom* vatom1, IRAtom* vatom2 )
+{
+ IRAtom* at;
+ at = mkUifUV256(mce, vatom1, vatom2);
+ at = mkPCast8x32(mce, at);
+ return at;
+}
+
+static
+IRAtom* binary16Ix16 ( MCEnv* mce, IRAtom* vatom1, IRAtom* vatom2 )
+{
+ IRAtom* at;
+ at = mkUifUV256(mce, vatom1, vatom2);
+ at = mkPCast16x16(mce, at);
+ return at;
+}
+
+static
+IRAtom* binary32Ix8 ( MCEnv* mce, IRAtom* vatom1, IRAtom* vatom2 )
+{
+ IRAtom* at;
+ at = mkUifUV256(mce, vatom1, vatom2);
+ at = mkPCast32x8(mce, at);
+ return at;
+}
+
+static
+IRAtom* binary64Ix4 ( MCEnv* mce, IRAtom* vatom1, IRAtom* vatom2 )
+{
+ IRAtom* at;
+ at = mkUifUV256(mce, vatom1, vatom2);
+ at = mkPCast64x4(mce, at);
+ return at;
+}
+
/* --- V128-bit versions --- */
static
@@ -3697,6 +3753,82 @@
case Iop_XorV256:
return mkUifUV256(mce, vatom1, vatom2);
+ /* V256-bit SIMD */
+
+ case Iop_ShrN16x16:
+ case Iop_ShrN32x8:
+ case Iop_ShrN64x4:
+ case Iop_SarN16x16:
+ case Iop_SarN32x8:
+ case Iop_ShlN16x16:
+ case Iop_ShlN32x8:
+ case Iop_ShlN64x4:
+ /* Same scheme as with all other shifts. Note: 22 Oct 05:
+ this is wrong now, scalar shifts are done properly lazily.
+ Vector shifts should be fixed too. */
+ complainIfUndefined(mce, atom2);
+ return assignNew('V', mce, Ity_V256, binop(op, vatom1, atom2));
+
+ case Iop_QSub8Ux32:
+ case Iop_QSub8Sx32:
+ case Iop_Sub8x32:
+ case Iop_Min8Ux32:
+ case Iop_Min8Sx32:
+ case Iop_Max8Ux32:
+ case Iop_Max8Sx32:
+ case Iop_CmpGT8Sx32:
+ case Iop_CmpEQ8x32:
+ case Iop_Avg8Ux32:
+ case Iop_QAdd8Ux32:
+ case Iop_QAdd8Sx32:
+ case Iop_Add8x32:
+ return binary8Ix32(mce, vatom1, vatom2);
+
+ case Iop_QSub16Ux16:
+ case Iop_QSub16Sx16:
+ case Iop_Sub16x16:
+ case Iop_Mul16x16:
+ case Iop_MulHi16Sx16:
+ case Iop_MulHi16Ux16:
+ case Iop_Min16Sx16:
+ case Iop_Min16Ux16:
+ case Iop_Max16Sx16:
+ case Iop_Max16Ux16:
+ case Iop_CmpGT16Sx16:
+ case Iop_CmpEQ16x16:
+ case Iop_Avg16Ux16:
+ case Iop_QAdd16Ux16:
+ case Iop_QAdd16Sx16:
+ case Iop_Add16x16:
+ return binary16Ix16(mce, vatom1, vatom2);
+
+ case Iop_Sub32x8:
+ case Iop_CmpGT32Sx8:
+ case Iop_CmpEQ32x8:
+ case Iop_Add32x8:
+ case Iop_Max32Ux8:
+ case Iop_Max32Sx8:
+ case Iop_Min32Ux8:
+ case Iop_Min32Sx8:
+ case Iop_Mul32x8:
+ return binary32Ix8(mce, vatom1, vatom2);
+
+ case Iop_Sub64x4:
+ case Iop_Add64x4:
+ case Iop_CmpEQ64x4:
+ case Iop_CmpGT64Sx4:
+ return binary64Ix4(mce, vatom1, vatom2);
+
+ /* Perm32x8: rearrange values in left arg using steering values
+ from right arg. So rearrange the vbits in the same way but
+ pessimise wrt steering values. */
+ case Iop_Perm32x8:
+ return mkUifUV256(
+ mce,
+ assignNew('V', mce, Ity_V256, binop(op, vatom1, atom2)),
+ mkPCast32x8(mce, vatom2)
+ );
+
default:
ppIROp(op);
VG_(tool_panic)("memcheck:expr2vbits_Binop");
|
|
From: <sv...@va...> - 2013-03-27 11:37:50
|
sewardj 2013-03-27 11:37:33 +0000 (Wed, 27 Mar 2013)
New Revision: 2702
Log:
AMD64: Add support for AVX2, BMI1, BMI2 and FMA instructions (VEX side).
Fixes #305728. (Jakub Jelinek, ja...@re...)
Added files:
trunk/priv/host_generic_maddf.c
trunk/priv/host_generic_maddf.h
trunk/priv/host_generic_simd256.c
trunk/priv/host_generic_simd256.h
Modified files:
trunk/priv/guest_amd64_defs.h
trunk/priv/guest_amd64_helpers.c
trunk/priv/guest_amd64_toIR.c
trunk/priv/host_amd64_isel.c
trunk/priv/ir_defs.c
trunk/priv/main_main.c
trunk/pub/libvex.h
trunk/pub/libvex_basictypes.h
trunk/pub/libvex_ir.h
Modified: trunk/priv/ir_defs.c (+90 -0)
===================================================================
--- trunk/priv/ir_defs.c 2013-03-26 13:53:18 +00:00 (rev 2701)
+++ trunk/priv/ir_defs.c 2013-03-27 11:37:33 +00:00 (rev 2702)
@@ -1036,6 +1036,68 @@
case Iop_NotV256: vex_printf("NotV256"); return;
case Iop_CmpNEZ64x4: vex_printf("CmpNEZ64x4"); return;
case Iop_CmpNEZ32x8: vex_printf("CmpNEZ32x8"); return;
+ case Iop_CmpNEZ16x16: vex_printf("CmpNEZ16x16"); return;
+ case Iop_CmpNEZ8x32: vex_printf("CmpNEZ8x32"); return;
+
+ case Iop_Add8x32: vex_printf("Add8x32"); return;
+ case Iop_Add16x16: vex_printf("Add16x16"); return;
+ case Iop_Add32x8: vex_printf("Add32x8"); return;
+ case Iop_Add64x4: vex_printf("Add64x4"); return;
+ case Iop_Sub8x32: vex_printf("Sub8x32"); return;
+ case Iop_Sub16x16: vex_printf("Sub16x16"); return;
+ case Iop_Sub32x8: vex_printf("Sub32x8"); return;
+ case Iop_Sub64x4: vex_printf("Sub64x4"); return;
+ case Iop_QAdd8Ux32: vex_printf("QAdd8Ux32"); return;
+ case Iop_QAdd16Ux16: vex_printf("QAdd16Ux16"); return;
+ case Iop_QAdd8Sx32: vex_printf("QAdd8Sx32"); return;
+ case Iop_QAdd16Sx16: vex_printf("QAdd16Sx16"); return;
+ case Iop_QSub8Ux32: vex_printf("QSub8Ux32"); return;
+ case Iop_QSub16Ux16: vex_printf("QSub16Ux16"); return;
+ case Iop_QSub8Sx32: vex_printf("QSub8Sx32"); return;
+ case Iop_QSub16Sx16: vex_printf("QSub16Sx16"); return;
+
+ case Iop_Mul16x16: vex_printf("Mul16x16"); return;
+ case Iop_Mul32x8: vex_printf("Mul32x8"); return;
+ case Iop_MulHi16Ux16: vex_printf("MulHi16Ux16"); return;
+ case Iop_MulHi16Sx16: vex_printf("MulHi16Sx16"); return;
+
+ case Iop_Avg8Ux32: vex_printf("Avg8Ux32"); return;
+ case Iop_Avg16Ux16: vex_printf("Avg16Ux16"); return;
+
+ case Iop_Max8Sx32: vex_printf("Max8Sx32"); return;
+ case Iop_Max16Sx16: vex_printf("Max16Sx16"); return;
+ case Iop_Max32Sx8: vex_printf("Max32Sx8"); return;
+ case Iop_Max8Ux32: vex_printf("Max8Ux32"); return;
+ case Iop_Max16Ux16: vex_printf("Max16Ux16"); return;
+ case Iop_Max32Ux8: vex_printf("Max32Ux8"); return;
+
+ case Iop_Min8Sx32: vex_printf("Min8Sx32"); return;
+ case Iop_Min16Sx16: vex_printf("Min16Sx16"); return;
+ case Iop_Min32Sx8: vex_printf("Min32Sx8"); return;
+ case Iop_Min8Ux32: vex_printf("Min8Ux32"); return;
+ case Iop_Min16Ux16: vex_printf("Min16Ux16"); return;
+ case Iop_Min32Ux8: vex_printf("Min32Ux8"); return;
+
+ case Iop_CmpEQ8x32: vex_printf("CmpEQ8x32"); return;
+ case Iop_CmpEQ16x16: vex_printf("CmpEQ16x16"); return;
+ case Iop_CmpEQ32x8: vex_printf("CmpEQ32x8"); return;
+ case Iop_CmpEQ64x4: vex_printf("CmpEQ64x4"); return;
+ case Iop_CmpGT8Sx32: vex_printf("CmpGT8Sx32"); return;
+ case Iop_CmpGT16Sx16: vex_printf("CmpGT16Sx16"); return;
+ case Iop_CmpGT32Sx8: vex_printf("CmpGT32Sx8"); return;
+ case Iop_CmpGT64Sx4: vex_printf("CmpGT64Sx4"); return;
+
+ case Iop_ShlN16x16: vex_printf("ShlN16x16"); return;
+ case Iop_ShlN32x8: vex_printf("ShlN32x8"); return;
+ case Iop_ShlN64x4: vex_printf("ShlN64x4"); return;
+ case Iop_ShrN16x16: vex_printf("ShrN16x16"); return;
+ case Iop_ShrN32x8: vex_printf("ShrN32x8"); return;
+ case Iop_ShrN64x4: vex_printf("ShrN64x4"); return;
+ case Iop_SarN16x16: vex_printf("SarN16x16"); return;
+ case Iop_SarN32x8: vex_printf("SarN32x8"); return;
+
+ case Iop_Perm32x8: vex_printf("Perm32x8"); return;
+
default: vpanic("ppIROp(1)");
}
@@ -3001,6 +3063,26 @@
case Iop_XorV256:
case Iop_Max32Fx8: case Iop_Min32Fx8:
case Iop_Max64Fx4: case Iop_Min64Fx4:
+ case Iop_Add8x32: case Iop_Add16x16:
+ case Iop_Add32x8: case Iop_Add64x4:
+ case Iop_Sub8x32: case Iop_Sub16x16:
+ case Iop_Sub32x8: case Iop_Sub64x4:
+ case Iop_Mul16x16: case Iop_Mul32x8:
+ case Iop_MulHi16Ux16: case Iop_MulHi16Sx16:
+ case Iop_Avg8Ux32: case Iop_Avg16Ux16:
+ case Iop_Max8Sx32: case Iop_Max16Sx16: case Iop_Max32Sx8:
+ case Iop_Max8Ux32: case Iop_Max16Ux16: case Iop_Max32Ux8:
+ case Iop_Min8Sx32: case Iop_Min16Sx16: case Iop_Min32Sx8:
+ case Iop_Min8Ux32: case Iop_Min16Ux16: case Iop_Min32Ux8:
+ case Iop_CmpEQ8x32: case Iop_CmpEQ16x16:
+ case Iop_CmpEQ32x8: case Iop_CmpEQ64x4:
+ case Iop_CmpGT8Sx32: case Iop_CmpGT16Sx16:
+ case Iop_CmpGT32Sx8: case Iop_CmpGT64Sx4:
+ case Iop_QAdd8Ux32: case Iop_QAdd16Ux16:
+ case Iop_QAdd8Sx32: case Iop_QAdd16Sx16:
+ case Iop_QSub8Ux32: case Iop_QSub16Ux16:
+ case Iop_QSub8Sx32: case Iop_QSub16Sx16:
+ case Iop_Perm32x8:
BINARY(Ity_V256,Ity_V256, Ity_V256);
case Iop_V256toV128_1: case Iop_V256toV128_0:
@@ -3014,9 +3096,17 @@
case Iop_Sqrt32Fx8:
case Iop_Sqrt64Fx4:
case Iop_Recip32Fx8:
+ case Iop_CmpNEZ8x32: case Iop_CmpNEZ16x16:
case Iop_CmpNEZ64x4: case Iop_CmpNEZ32x8:
UNARY(Ity_V256, Ity_V256);
+ case Iop_ShlN16x16: case Iop_ShlN32x8:
+ case Iop_ShlN64x4:
+ case Iop_ShrN16x16: case Iop_ShrN32x8:
+ case Iop_ShrN64x4:
+ case Iop_SarN16x16: case Iop_SarN32x8:
+ BINARY(Ity_V256,Ity_I8, Ity_V256);
+
default:
ppIROp(op);
vpanic("typeOfPrimop");
Added: trunk/priv/host_generic_simd256.h (+55 -0)
===================================================================
--- trunk/priv/host_generic_simd256.h 2013-03-26 13:53:18 +00:00 (rev 2701)
+++ trunk/priv/host_generic_simd256.h 2013-03-27 11:37:33 +00:00 (rev 2702)
@@ -0,0 +1,55 @@
+
+/*---------------------------------------------------------------*/
+/*--- begin host_generic_simd256.h ---*/
+/*---------------------------------------------------------------*/
+
+/*
+ This file is part of Valgrind, a dynamic binary instrumentation
+ framework.
+
+ Copyright (C) 2012 OpenWorks GbR
+ in...@op...
+
+ This program is free software; you can redistribute it and/or
+ modify it under the terms of the GNU General Public License as
+ published by the Free Software Foundation; either version 2 of the
+ License, or (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301, USA.
+
+ The GNU General Public License is contained in the file COPYING.
+*/
+
+/* Generic helper functions for doing 256-bit SIMD arithmetic in cases
+ where the instruction selectors cannot generate code in-line.
+ These are purely back-end entities and cannot be seen/referenced
+ as clean helper functions from IR.
+
+ These will get called from generated code and therefore should be
+ well behaved -- no floating point or mmx insns, just straight
+ integer code.
+
+ Each function implements the correspondingly-named IR primop.
+*/
+
+#ifndef __VEX_HOST_GENERIC_SIMD256_H
+#define __VEX_HOST_GENERIC_SIMD256_H
+
+#include "libvex_basictypes.h"
+
+extern VEX_REGPARM(3)
+ void h_generic_calc_Perm32x8 ( /*OUT*/V256*, V256*, V256* );
+
+#endif /* ndef __VEX_HOST_GENERIC_SIMD256_H */
+
+/*---------------------------------------------------------------*/
+/*--- end host_generic_simd256.h ---*/
+/*---------------------------------------------------------------*/
Added: trunk/priv/host_generic_simd256.c (+57 -0)
===================================================================
--- trunk/priv/host_generic_simd256.c 2013-03-26 13:53:18 +00:00 (rev 2701)
+++ trunk/priv/host_generic_simd256.c 2013-03-27 11:37:33 +00:00 (rev 2702)
@@ -0,0 +1,57 @@
+
+/*---------------------------------------------------------------*/
+/*--- begin host_generic_simd256.c ---*/
+/*---------------------------------------------------------------*/
+
+/*
+ This file is part of Valgrind, a dynamic binary instrumentation
+ framework.
+
+ Copyright (C) 2012 OpenWorks GbR
+ in...@op...
+
+ This program is free software; you can redistribute it and/or
+ modify it under the terms of the GNU General Public License as
+ published by the Free Software Foundation; either version 2 of the
+ License, or (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301, USA.
+
+ The GNU General Public License is contained in the file COPYING.
+*/
+
+/* Generic helper functions for doing 256-bit SIMD arithmetic in cases
+ where the instruction selectors cannot generate code in-line.
+ These are purely back-end entities and cannot be seen/referenced
+ from IR. */
+
+#include "libvex_basictypes.h"
+#include "host_generic_simd256.h"
+
+
+void VEX_REGPARM(3)
+ h_generic_calc_Perm32x8 ( /*OUT*/V256* res,
+ V256* argL, V256* argR )
+{
+ res->w32[0] = argL->w32[ argR->w32[0] & 7 ];
+ res->w32[1] = argL->w32[ argR->w32[1] & 7 ];
+ res->w32[2] = argL->w32[ argR->w32[2] & 7 ];
+ res->w32[3] = argL->w32[ argR->w32[3] & 7 ];
+ res->w32[4] = argL->w32[ argR->w32[4] & 7 ];
+ res->w32[5] = argL->w32[ argR->w32[5] & 7 ];
+ res->w32[6] = argL->w32[ argR->w32[6] & 7 ];
+ res->w32[7] = argL->w32[ argR->w32[7] & 7 ];
+}
+
+
+/*---------------------------------------------------------------*/
+/*--- end host_generic_simd256.c ---*/
+/*---------------------------------------------------------------*/
Added: trunk/priv/host_generic_maddf.h (+48 -0)
===================================================================
--- trunk/priv/host_generic_maddf.h 2013-03-26 13:53:18 +00:00 (rev 2701)
+++ trunk/priv/host_generic_maddf.h 2013-03-27 11:37:33 +00:00 (rev 2702)
@@ -0,0 +1,48 @@
+
+/*---------------------------------------------------------------*/
+/*--- begin host_generic_maddf.h ---*/
+/*---------------------------------------------------------------*/
+
+/*
+ Compute x * y + z as ternary operation.
+ Copyright (C) 2010-2013 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+ Contributed by Jakub Jelinek <ja...@re...>, 2010.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <http://www.gnu.org/licenses/>.
+*/
+
+/* Generic helper functions for doing FMA, i.e. compute x * y + z
+ as ternary operation.
+ These are purely back-end entities and cannot be seen/referenced
+ from IR. */
+
+#ifndef __VEX_HOST_GENERIC_MADDF_H
+#define __VEX_HOST_GENERIC_MADDF_H
+
+#include "libvex_basictypes.h"
+
+extern VEX_REGPARM(3)
+ void h_generic_calc_MAddF32 ( /*OUT*/Float*, Float*, Float*, Float* );
+
+extern VEX_REGPARM(3)
+ void h_generic_calc_MAddF64 ( /*OUT*/Double*, Double*, Double*,
+ Double* );
+
+#endif /* ndef __VEX_HOST_GENERIC_MADDF_H */
+
+/*---------------------------------------------------------------*/
+/*--- end host_generic_maddf.h --*/
+/*---------------------------------------------------------------*/
Added: trunk/priv/host_generic_maddf.c (+320 -0)
===================================================================
--- trunk/priv/host_generic_maddf.c 2013-03-26 13:53:18 +00:00 (rev 2701)
+++ trunk/priv/host_generic_maddf.c 2013-03-27 11:37:33 +00:00 (rev 2702)
@@ -0,0 +1,320 @@
+
+/*---------------------------------------------------------------*/
+/*--- begin host_generic_maddf.c ---*/
+/*---------------------------------------------------------------*/
+
+/*
+ Compute x * y + z as ternary operation.
+ Copyright (C) 2010-2013 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+ Contributed by Jakub Jelinek <ja...@re...>, 2010.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <http://www.gnu.org/licenses/>.
+*/
+
+/* Generic helper functions for doing FMA, i.e. compute x * y + z
+ as ternary operation.
+ These are purely back-end entities and cannot be seen/referenced
+ from IR. */
+
+#include "libvex_basictypes.h"
+#include "host_generic_maddf.h"
+#include "main_util.h"
+
+/* This implementation relies on Double being more than twice as
+ precise as Float and uses rounding to odd in order to avoid problems
+ with double rounding.
+ See a paper by Boldo and Melquiond:
+ http://www.lri.fr/~melquion/doc/08-tc.pdf */
+
+#define FORCE_EVAL(X) __asm __volatile__ ("" : : "m" (X))
+
+#if defined(__x86_64__) && defined(__SSE2_MATH__)
+# define ENV_TYPE unsigned int
+/* Save current rounding mode into ENV, hold exceptions, set rounding
+ mode to rounding toward zero. */
+# define ROUNDTOZERO(env) \
+ do { \
+ unsigned int mxcsr; \
+ __asm __volatile__ ("stmxcsr %0" : "=m" (mxcsr)); \
+ (env) = mxcsr; \
+ mxcsr = (mxcsr | 0x7f80) & ~0x3f; \
+ __asm __volatile__ ("ldmxcsr %0" : : "m" (mxcsr));\
+ } while (0)
+/* Restore exceptions from ENV, return if inexact exception has been raised
+ since ROUNDTOZERO. */
+# define RESET_TESTINEXACT(env) \
+ ({ \
+ unsigned int mxcsr, ret; \
+ __asm __volatile__ ("stmxcsr %0" : "=m" (mxcsr)); \
+ ret = (mxcsr >> 5) & 1; \
+ mxcsr = (mxcsr & 0x3d) | (env); \
+ __asm __volatile__ ("ldmxcsr %0" : : "m" (mxcsr));\
+ ret; \
+ })
+/* Return if inexact exception has been raised since ROUNDTOZERO. */
+# define TESTINEXACT() \
+ ({ \
+ unsigned int mxcsr; \
+ __asm __volatile__ ("stmxcsr %0" : "=m" (mxcsr)); \
+ (mxcsr >> 5) & 1; \
+ })
+#endif
+
+#define DBL_MANT_DIG 53
+#define IEEE754_DOUBLE_BIAS 0x3ff
+
+union vg_ieee754_double {
+ Double d;
+
+ /* This is the IEEE 754 double-precision format. */
+ struct {
+#ifdef VKI_BIG_ENDIAN
+ unsigned int negative:1;
+ unsigned int exponent:11;
+ unsigned int mantissa0:20;
+ unsigned int mantissa1:32;
+#else
+ unsigned int mantissa1:32;
+ unsigned int mantissa0:20;
+ unsigned int exponent:11;
+ unsigned int negative:1;
+#endif
+ } ieee;
+};
+
+void VEX_REGPARM(3)
+ h_generic_calc_MAddF32 ( /*OUT*/Float* res,
+ Float* argX, Float* argY, Float* argZ )
+{
+#ifndef ENV_TYPE
+ /* Lame fallback implementation. */
+ *res = *argX * *argY + *argZ;
+#else
+ ENV_TYPE env;
+ /* Multiplication is always exact. */
+ Double temp = (Double) *argX * (Double) *argY;
+ union vg_ieee754_double u;
+
+ ROUNDTOZERO (env);
+
+ /* Perform addition with round to odd. */
+ u.d = temp + (Double) *argZ;
+ /* Ensure the addition is not scheduled after fetestexcept call. */
+ FORCE_EVAL (u.d);
+
+ /* Reset rounding mode and test for inexact simultaneously. */
+ int j = RESET_TESTINEXACT (env);
+
+ if ((u.ieee.mantissa1 & 1) == 0 && u.ieee.exponent != 0x7ff)
+ u.ieee.mantissa1 |= j;
+
+ /* And finally truncation with round to nearest. */
+ *res = (Float) u.d;
+#endif
+}
+
+
+void VEX_REGPARM(3)
+ h_generic_calc_MAddF64 ( /*OUT*/Double* res,
+ Double* argX, Double* argY, Double* argZ )
+{
+#ifndef ENV_TYPE
+ /* Lame fallback implementation. */
+ *res = *argX * *argY + *argZ;
+#else
+ Double x = *argX, y = *argY, z = *argZ;
+ union vg_ieee754_double u, v, w;
+ int adjust = 0;
+ u.d = x;
+ v.d = y;
+ w.d = z;
+ if (UNLIKELY (u.ieee.exponent + v.ieee.exponent
+ >= 0x7ff + IEEE754_DOUBLE_BIAS - DBL_MANT_DIG)
+ || UNLIKELY (u.ieee.exponent >= 0x7ff - DBL_MANT_DIG)
+ || UNLIKELY (v.ieee.exponent >= 0x7ff - DBL_MANT_DIG)
+ || UNLIKELY (w.ieee.exponent >= 0x7ff - DBL_MANT_DIG)
+ || UNLIKELY (u.ieee.exponent + v.ieee.exponent
+ <= IEEE754_DOUBLE_BIAS + DBL_MANT_DIG)) {
+ /* If z is Inf, but x and y are finite, the result should be
+ z rather than NaN. */
+ if (w.ieee.exponent == 0x7ff
+ && u.ieee.exponent != 0x7ff
+ && v.ieee.exponent != 0x7ff) {
+ *res = (z + x) + y;
+ return;
+ }
+ /* If x or y or z is Inf/NaN, or if fma will certainly overflow,
+ or if x * y is less than half of DBL_DENORM_MIN,
+ compute as x * y + z. */
+ if (u.ieee.exponent == 0x7ff
+ || v.ieee.exponent == 0x7ff
+ || w.ieee.exponent == 0x7ff
+ || u.ieee.exponent + v.ieee.exponent > 0x7ff + IEEE754_DOUBLE_BIAS
+ || u.ieee.exponent + v.ieee.exponent
+ < IEEE754_DOUBLE_BIAS - DBL_MANT_DIG - 2) {
+ *res = x * y + z;
+ return;
+ }
+ if (u.ieee.exponent + v.ieee.exponent
+ >= 0x7ff + IEEE754_DOUBLE_BIAS - DBL_MANT_DIG) {
+ /* Compute 1p-53 times smaller result and multiply
+ at the end. */
+ if (u.ieee.exponent > v.ieee.exponent)
+ u.ieee.exponent -= DBL_MANT_DIG;
+ else
+ v.ieee.exponent -= DBL_MANT_DIG;
+ /* If x + y exponent is very large and z exponent is very small,
+ it doesn't matter if we don't adjust it. */
+ if (w.ieee.exponent > DBL_MANT_DIG)
+ w.ieee.exponent -= DBL_MANT_DIG;
+ adjust = 1;
+ } else if (w.ieee.exponent >= 0x7ff - DBL_MANT_DIG) {
+ /* Similarly.
+ If z exponent is very large and x and y exponents are
+ very small, it doesn't matter if we don't adjust it. */
+ if (u.ieee.exponent > v.ieee.exponent) {
+ if (u.ieee.exponent > DBL_MANT_DIG)
+ u.ieee.exponent -= DBL_MANT_DIG;
+ } else if (v.ieee.exponent > DBL_MANT_DIG)
+ v.ieee.exponent -= DBL_MANT_DIG;
+ w.ieee.exponent -= DBL_MANT_DIG;
+ adjust = 1;
+ } else if (u.ieee.exponent >= 0x7ff - DBL_MANT_DIG) {
+ u.ieee.exponent -= DBL_MANT_DIG;
+ if (v.ieee.exponent)
+ v.ieee.exponent += DBL_MANT_DIG;
+ else
+ v.d *= 0x1p53;
+ } else if (v.ieee.exponent >= 0x7ff - DBL_MANT_DIG) {
+ v.ieee.exponent -= DBL_MANT_DIG;
+ if (u.ieee.exponent)
+ u.ieee.exponent += DBL_MANT_DIG;
+ else
+ u.d *= 0x1p53;
+ } else /* if (u.ieee.exponent + v.ieee.exponent
+ <= IEEE754_DOUBLE_BIAS + DBL_MANT_DIG) */ {
+ if (u.ieee.exponent > v.ieee.exponent)
+ u.ieee.exponent += 2 * DBL_MANT_DIG;
+ else
+ v.ieee.exponent += 2 * DBL_MANT_DIG;
+ if (w.ieee.exponent <= 4 * DBL_MANT_DIG + 4) {
+ if (w.ieee.exponent)
+ w.ieee.exponent += 2 * DBL_MANT_DIG;
+ else
+ w.d *= 0x1p106;
+ adjust = -1;
+ }
+ /* Otherwise x * y should just affect inexact
+ and nothing else. */
+ }
+ x = u.d;
+ y = v.d;
+ z = w.d;
+ }
+ /* Multiplication m1 + m2 = x * y using Dekker's algorithm. */
+# define C ((1 << (DBL_MANT_DIG + 1) / 2) + 1)
+ Double x1 = x * C;
+ Double y1 = y * C;
+ Double m1 = x * y;
+ x1 = (x - x1) + x1;
+ y1 = (y - y1) + y1;
+ Double x2 = x - x1;
+ Double y2 = y - y1;
+ Double m2 = (((x1 * y1 - m1) + x1 * y2) + x2 * y1) + x2 * y2;
+# undef C
+
+ /* Addition a1 + a2 = z + m1 using Knuth's algorithm. */
+ Double a1 = z + m1;
+ Double t1 = a1 - z;
+ Double t2 = a1 - t1;
+ t1 = m1 - t1;
+ t2 = z - t2;
+ Double a2 = t1 + t2;
+
+ ENV_TYPE env;
+ ROUNDTOZERO (env);
+
+ /* Perform m2 + a2 addition with round to odd. */
+ u.d = a2 + m2;
+
+ if (UNLIKELY (adjust < 0)) {
+ if ((u.ieee.mantissa1 & 1) == 0)
+ u.ieee.mantissa1 |= TESTINEXACT ();
+ v.d = a1 + u.d;
+ /* Ensure the addition is not scheduled after fetestexcept call. */
+ FORCE_EVAL (v.d);
+ }
+
+ /* Reset rounding mode and test for inexact simultaneously. */
+ int j = RESET_TESTINEXACT (env) != 0;
+
+ if (LIKELY (adjust == 0)) {
+ if ((u.ieee.mantissa1 & 1) == 0 && u.ieee.exponent != 0x7ff)
+ u.ieee.mantissa1 |= j;
+ /* Result is a1 + u.d. */
+ *res = a1 + u.d;
+ } else if (LIKELY (adjust > 0)) {
+ if ((u.ieee.mantissa1 & 1) == 0 && u.ieee.exponent != 0x7ff)
+ u.ieee.mantissa1 |= j;
+ /* Result is a1 + u.d, scaled up. */
+ *res = (a1 + u.d) * 0x1p53;
+ } else {
+ /* If a1 + u.d is exact, the only rounding happens during
+ scaling down. */
+ if (j == 0) {
+ *res = v.d * 0x1p-106;
+ return;
+ }
+ /* If result rounded to zero is not subnormal, no double
+ rounding will occur. */
+ if (v.ieee.exponent > 106) {
+ *res = (a1 + u.d) * 0x1p-106;
+ return;
+ }
+ /* If v.d * 0x1p-106 with round to zero is a subnormal above
+ or equal to DBL_MIN / 2, then v.d * 0x1p-106 shifts mantissa
+ down just by 1 bit, which means v.ieee.mantissa1 |= j would
+ change the round bit, not sticky or guard bit.
+ v.d * 0x1p-106 never normalizes by shifting up,
+ so round bit plus sticky bit should be already enough
+ for proper rounding. */
+ if (v.ieee.exponent == 106) {
+ /* v.ieee.mantissa1 & 2 is LSB bit of the result before rounding,
+ v.ieee.mantissa1 & 1 is the round bit and j is our sticky
+ bit. In round-to-nearest 001 rounds down like 00,
+ 011 rounds up, even though 01 rounds down (thus we need
+ to adjust), 101 rounds down like 10 and 111 rounds up
+ like 11. */
+ if ((v.ieee.mantissa1 & 3) == 1) {
+ v.d *= 0x1p-106;
+ if (v.ieee.negative)
+ *res = v.d - 0x1p-1074;
+ else
+ *res = v.d + 0x1p-1074;
+ } else
+ *res = v.d * 0x1p-106;
+ return;
+ }
+ v.ieee.mantissa1 |= j;
+ *res = v.d * 0x1p-106;
+ return;
+ }
+#endif
+}
+
+/*---------------------------------------------------------------*/
+/*--- end host_generic_maddf.c --*/
+/*---------------------------------------------------------------*/
Modified: trunk/priv/host_amd64_isel.c (+356 -1)
===================================================================
--- trunk/priv/host_amd64_isel.c 2013-03-26 13:53:18 +00:00 (rev 2701)
+++ trunk/priv/host_amd64_isel.c 2013-03-27 11:37:33 +00:00 (rev 2702)
@@ -43,6 +43,8 @@
#include "host_generic_regs.h"
#include "host_generic_simd64.h"
#include "host_generic_simd128.h"
+#include "host_generic_simd256.h"
+#include "host_generic_maddf.h"
#include "host_amd64_defs.h"
@@ -2531,6 +2533,73 @@
return dst;
}
+ if (e->tag == Iex_Unop && e->Iex.Unop.op == Iop_NegF32) {
+ /* Sigh ... very rough code. Could do much better. */
+ /* Get the 128-bit literal 00---0 10---0 into a register
+ and xor it with the value to be negated. */
+ HReg r1 = newVRegI(env);
+ HReg dst = newVRegV(env);
+ HReg tmp = newVRegV(env);
+ HReg src = iselFltExpr(env, e->Iex.Unop.arg);
+ AMD64AMode* rsp0 = AMD64AMode_IR(0, hregAMD64_RSP());
+ addInstr(env, mk_vMOVsd_RR(src,tmp));
+ addInstr(env, AMD64Instr_Push(AMD64RMI_Imm(0)));
+ addInstr(env, AMD64Instr_Imm64( 1ULL<<31, r1 ));
+ addInstr(env, AMD64Instr_Push(AMD64RMI_Reg(r1)));
+ addInstr(env, AMD64Instr_SseLdSt(True, 16, dst, rsp0));
+ addInstr(env, AMD64Instr_SseReRg(Asse_XOR, tmp, dst));
+ add_to_rsp(env, 16);
+ return dst;
+ }
+
+ if (e->tag == Iex_Qop && e->Iex.Qop.details->op == Iop_MAddF32) {
+ IRQop *qop = e->Iex.Qop.details;
+ HReg dst = newVRegV(env);
+ HReg argX = iselFltExpr(env, qop->arg2);
+ HReg argY = iselFltExpr(env, qop->arg3);
+ HReg argZ = iselFltExpr(env, qop->arg4);
+ /* XXXROUNDINGFIXME */
+ /* set roundingmode here */
+ /* subq $16, %rsp -- make a space*/
+ sub_from_rsp(env, 16);
+ /* Prepare 4 arg regs:
+ leaq 0(%rsp), %rdi
+ leaq 4(%rsp), %rsi
+ leaq 8(%rsp), %rdx
+ leaq 12(%rsp), %rcx
+ */
+ addInstr(env, AMD64Instr_Lea64(AMD64AMode_IR(0, hregAMD64_RSP()),
+ hregAMD64_RDI()));
+ addInstr(env, AMD64Instr_Lea64(AMD64AMode_IR(4, hregAMD64_RSP()),
+ hregAMD64_RSI()));
+ addInstr(env, AMD64Instr_Lea64(AMD64AMode_IR(8, hregAMD64_RSP()),
+ hregAMD64_RDX()));
+ addInstr(env, AMD64Instr_Lea64(AMD64AMode_IR(12, hregAMD64_RSP()),
+ hregAMD64_RCX()));
+ /* Store the three args, at (%rsi), (%rdx) and (%rcx):
+ movss %argX, 0(%rsi)
+ movss %argY, 0(%rdx)
+ movss %argZ, 0(%rcx)
+ */
+ addInstr(env, AMD64Instr_SseLdSt(False/*!isLoad*/, 4, argX,
+ AMD64AMode_IR(0, hregAMD64_RSI())));
+ addInstr(env, AMD64Instr_SseLdSt(False/*!isLoad*/, 4, argY,
+ AMD64AMode_IR(0, hregAMD64_RDX())));
+ addInstr(env, AMD64Instr_SseLdSt(False/*!isLoad*/, 4, argZ,
+ AMD64AMode_IR(0, hregAMD64_RCX())));
+ /* call the helper */
+ addInstr(env, AMD64Instr_Call( Acc_ALWAYS,
+ (ULong)(HWord)h_generic_calc_MAddF32,
+ 4, RetLocNone ));
+ /* fetch the result from memory, using %r_argp, which the
+ register allocator will keep alive across the call. */
+ addInstr(env, AMD64Instr_SseLdSt(True/*isLoad*/, 4, dst,
+ AMD64AMode_IR(0, hregAMD64_RSP())));
+ /* and finally, clear the space */
+ add_to_rsp(env, 16);
+ return dst;
+ }
+
ppIRExpr(e);
vpanic("iselFltExpr_wrk");
}
@@ -2662,6 +2731,54 @@
}
}
+ if (e->tag == Iex_Qop && e->Iex.Qop.details->op == Iop_MAddF64) {
+ IRQop *qop = e->Iex.Qop.details;
+ HReg dst = newVRegV(env);
+ HReg argX = iselDblExpr(env, qop->arg2);
+ HReg argY = iselDblExpr(env, qop->arg3);
+ HReg argZ = iselDblExpr(env, qop->arg4);
+ /* XXXROUNDINGFIXME */
+ /* set roundingmode here */
+ /* subq $32, %rsp -- make a space*/
+ sub_from_rsp(env, 32);
+ /* Prepare 4 arg regs:
+ leaq 0(%rsp), %rdi
+ leaq 8(%rsp), %rsi
+ leaq 16(%rsp), %rdx
+ leaq 24(%rsp), %rcx
+ */
+ addInstr(env, AMD64Instr_Lea64(AMD64AMode_IR(0, hregAMD64_RSP()),
+ hregAMD64_RDI()));
+ addInstr(env, AMD64Instr_Lea64(AMD64AMode_IR(8, hregAMD64_RSP()),
+ hregAMD64_RSI()));
+ addInstr(env, AMD64Instr_Lea64(AMD64AMode_IR(16, hregAMD64_RSP()),
+ hregAMD64_RDX()));
+ addInstr(env, AMD64Instr_Lea64(AMD64AMode_IR(24, hregAMD64_RSP()),
+ hregAMD64_RCX()));
+ /* Store the three args, at (%rsi), (%rdx) and (%rcx):
+ movsd %argX, 0(%rsi)
+ movsd %argY, 0(%rdx)
+ movsd %argZ, 0(%rcx)
+ */
+ addInstr(env, AMD64Instr_SseLdSt(False/*!isLoad*/, 8, argX,
+ AMD64AMode_IR(0, hregAMD64_RSI())));
+ addInstr(env, AMD64Instr_SseLdSt(False/*!isLoad*/, 8, argY,
+ AMD64AMode_IR(0, hregAMD64_RDX())));
+ addInstr(env, AMD64Instr_SseLdSt(False/*!isLoad*/, 8, argZ,
+ AMD64AMode_IR(0, hregAMD64_RCX())));
+ /* call the helper */
+ addInstr(env, AMD64Instr_Call( Acc_ALWAYS,
+ (ULong)(HWord)h_generic_calc_MAddF64,
+ 4, RetLocNone ));
+ /* fetch the result from memory, using %r_argp, which the
+ register allocator will keep alive across the call. */
+ addInstr(env, AMD64Instr_SseLdSt(True/*isLoad*/, 8, dst,
+ AMD64AMode_IR(0, hregAMD64_RSP())));
+ /* and finally, clear the space */
+ add_to_rsp(env, 32);
+ return dst;
+ }
+
if (e->tag == Iex_Binop && e->Iex.Binop.op == Iop_RoundF64toInt) {
AMD64AMode* m8_rsp = AMD64AMode_IR(-8, hregAMD64_RSP());
HReg arg = iselDblExpr(env, e->Iex.Binop.arg2);
@@ -3478,6 +3595,7 @@
static void iselDVecExpr_wrk ( /*OUT*/HReg* rHi, /*OUT*/HReg* rLo,
ISelEnv* env, IRExpr* e )
{
+ HWord fn = 0; /* address of helper fn, if required */
vassert(e);
IRType ty = typeOfIRExpr(env->type_env,e);
vassert(ty == Ity_V256);
@@ -3599,6 +3717,8 @@
}
case Iop_CmpNEZ32x8: op = Asse_CMPEQ32; goto do_CmpNEZ_vector;
+ case Iop_CmpNEZ16x16: op = Asse_CMPEQ16; goto do_CmpNEZ_vector;
+ case Iop_CmpNEZ8x32: op = Asse_CMPEQ8; goto do_CmpNEZ_vector;
do_CmpNEZ_vector:
{
HReg argHi, argLo;
@@ -3673,6 +3793,37 @@
case Iop_AndV256: op = Asse_AND; goto do_SseReRg;
case Iop_OrV256: op = Asse_OR; goto do_SseReRg;
case Iop_XorV256: op = Asse_XOR; goto do_SseReRg;
+ case Iop_Add8x32: op = Asse_ADD8; goto do_SseReRg;
+ case Iop_Add16x16: op = Asse_ADD16; goto do_SseReRg;
+ case Iop_Add32x8: op = Asse_ADD32; goto do_SseReRg;
+ case Iop_Add64x4: op = Asse_ADD64; goto do_SseReRg;
+ case Iop_QAdd8Sx32: op = Asse_QADD8S; goto do_SseReRg;
+ case Iop_QAdd16Sx16: op = Asse_QADD16S; goto do_SseReRg;
+ case Iop_QAdd8Ux32: op = Asse_QADD8U; goto do_SseReRg;
+ case Iop_QAdd16Ux16: op = Asse_QADD16U; goto do_SseReRg;
+ case Iop_Avg8Ux32: op = Asse_AVG8U; goto do_SseReRg;
+ case Iop_Avg16Ux16: op = Asse_AVG16U; goto do_SseReRg;
+ case Iop_CmpEQ8x32: op = Asse_CMPEQ8; goto do_SseReRg;
+ case Iop_CmpEQ16x16: op = Asse_CMPEQ16; goto do_SseReRg;
+ case Iop_CmpEQ32x8: op = Asse_CMPEQ32; goto do_SseReRg;
+ case Iop_CmpGT8Sx32: op = Asse_CMPGT8S; goto do_SseReRg;
+ case Iop_CmpGT16Sx16: op = Asse_CMPGT16S; goto do_SseReRg;
+ case Iop_CmpGT32Sx8: op = Asse_CMPGT32S; goto do_SseReRg;
+ case Iop_Max16Sx16: op = Asse_MAX16S; goto do_SseReRg;
+ case Iop_Max8Ux32: op = Asse_MAX8U; goto do_SseReRg;
+ case Iop_Min16Sx16: op = Asse_MIN16S; goto do_SseReRg;
+ case Iop_Min8Ux32: op = Asse_MIN8U; goto do_SseReRg;
+ case Iop_MulHi16Ux16: op = Asse_MULHI16U; goto do_SseReRg;
+ case Iop_MulHi16Sx16: op = Asse_MULHI16S; goto do_SseReRg;
+ case Iop_Mul16x16: op = Asse_MUL16; goto do_SseReRg;
+ case Iop_Sub8x32: op = Asse_SUB8; goto do_SseReRg;
+ case Iop_Sub16x16: op = Asse_SUB16; goto do_SseReRg;
+ case Iop_Sub32x8: op = Asse_SUB32; goto do_SseReRg;
+ case Iop_Sub64x4: op = Asse_SUB64; goto do_SseReRg;
+ case Iop_QSub8Sx32: op = Asse_QSUB8S; goto do_SseReRg;
+ case Iop_QSub16Sx16: op = Asse_QSUB16S; goto do_SseReRg;
+ case Iop_QSub8Ux32: op = Asse_QSUB8U; goto do_SseReRg;
+ case Iop_QSub16Ux16: op = Asse_QSUB16U; goto do_SseReRg;
do_SseReRg:
{
HReg argLhi, argLlo, argRhi, argRlo;
@@ -3689,12 +3840,198 @@
return;
}
+ case Iop_ShlN16x16: op = Asse_SHL16; goto do_SseShift;
+ case Iop_ShlN32x8: op = Asse_SHL32; goto do_SseShift;
+ case Iop_ShlN64x4: op = Asse_SHL64; goto do_SseShift;
+ case Iop_SarN16x16: op = Asse_SAR16; goto do_SseShift;
+ case Iop_SarN32x8: op = Asse_SAR32; goto do_SseShift;
+ case Iop_ShrN16x16: op = Asse_SHR16; goto do_SseShift;
+ case Iop_ShrN32x8: op = Asse_SHR32; goto do_SseShift;
+ case Iop_ShrN64x4: op = Asse_SHR64; goto do_SseShift;
+ do_SseShift: {
+ HReg gregHi, gregLo;
+ iselDVecExpr(&gregHi, &gregLo, env, e->Iex.Binop.arg1);
+ AMD64RMI* rmi = iselIntExpr_RMI(env, e->Iex.Binop.arg2);
+ AMD64AMode* rsp0 = AMD64AMode_IR(0, hregAMD64_RSP());
+ HReg ereg = newVRegV(env);
+ HReg dstHi = newVRegV(env);
+ HReg dstLo = newVRegV(env);
+ addInstr(env, AMD64Instr_Push(AMD64RMI_Imm(0)));
+ addInstr(env, AMD64Instr_Push(rmi));
+ addInstr(env, AMD64Instr_SseLdSt(True/*load*/, 16, ereg, rsp0));
+ addInstr(env, mk_vMOVsd_RR(gregHi, dstHi));
+ addInstr(env, AMD64Instr_SseReRg(op, ereg, dstHi));
+ addInstr(env, mk_vMOVsd_RR(gregLo, dstLo));
+ addInstr(env, AMD64Instr_SseReRg(op, ereg, dstLo));
+ add_to_rsp(env, 16);
+ *rHi = dstHi;
+ *rLo = dstLo;
+ return;
+ }
+
case Iop_V128HLtoV256: {
*rHi = iselVecExpr(env, e->Iex.Binop.arg1);
*rLo = iselVecExpr(env, e->Iex.Binop.arg2);
return;
}
+ case Iop_Mul32x8: fn = (HWord)h_generic_calc_Mul32x4;
+ goto do_SseAssistedBinary;
+ case Iop_Max32Sx8: fn = (HWord)h_generic_calc_Max32Sx4;
+ goto do_SseAssistedBinary;
+ case Iop_Min32Sx8: fn = (HWord)h_generic_calc_Min32Sx4;
+ goto do_SseAssistedBinary;
+ case Iop_Max32Ux8: fn = (HWord)h_generic_calc_Max32Ux4;
+ goto do_SseAssistedBinary;
+ case Iop_Min32Ux8: fn = (HWord)h_generic_calc_Min32Ux4;
+ goto do_SseAssistedBinary;
+ case Iop_Max16Ux16: fn = (HWord)h_generic_calc_Max16Ux8;
+ goto do_SseAssistedBinary;
+ case Iop_Min16Ux16: fn = (HWord)h_generic_calc_Min16Ux8;
+ goto do_SseAssistedBinary;
+ case Iop_Max8Sx32: fn = (HWord)h_generic_calc_Max8Sx16;
+ goto do_SseAssistedBinary;
+ case Iop_Min8Sx32: fn = (HWord)h_generic_calc_Min8Sx16;
+ goto do_SseAssistedBinary;
+ case Iop_CmpEQ64x4: fn = (HWord)h_generic_calc_CmpEQ64x2;
+ goto do_SseAssistedBinary;
+ case Iop_CmpGT64Sx4: fn = (HWord)h_generic_calc_CmpGT64Sx2;
+ goto do_SseAssistedBinary;
+ do_SseAssistedBinary: {
+ /* RRRufff! RRRufff code is what we're generating here. Oh
+ well. */
+ vassert(fn != 0);
+ HReg dstHi = newVRegV(env);
+ HReg dstLo = newVRegV(env);
+ HReg argLhi, argLlo, argRhi, argRlo;
+ iselDVecExpr(&argLhi, &argLlo, env, e->Iex.Binop.arg1);
+ iselDVecExpr(&argRhi, &argRlo, env, e->Iex.Binop.arg2);
+ HReg argp = newVRegI(env);
+ /* subq $160, %rsp -- make a space*/
+ sub_from_rsp(env, 160);
+ /* leaq 48(%rsp), %r_argp -- point into it */
+ addInstr(env, AMD64Instr_Lea64(AMD64AMode_IR(48, hregAMD64_RSP()),
+ argp));
+ /* andq $-16, %r_argp -- 16-align the pointer */
+ addInstr(env, AMD64Instr_Alu64R(Aalu_AND,
+ AMD64RMI_Imm( ~(UInt)15 ),
+ argp));
+ /* Prepare 3 arg regs:
+ leaq 0(%r_argp), %rdi
+ leaq 16(%r_argp), %rsi
+ leaq 32(%r_argp), %rdx
+ */
+ addInstr(env, AMD64Instr_Lea64(AMD64AMode_IR(0, argp),
+ hregAMD64_RDI()));
+ addInstr(env, AMD64Instr_Lea64(AMD64AMode_IR(16, argp),
+ hregAMD64_RSI()));
+ addInstr(env, AMD64Instr_Lea64(AMD64AMode_IR(32, argp),
+ hregAMD64_RDX()));
+ /* Store the two high args, at (%rsi) and (%rdx):
+ movupd %argLhi, 0(%rsi)
+ movupd %argRhi, 0(%rdx)
+ */
+ addInstr(env, AMD64Instr_SseLdSt(False/*!isLoad*/, 16, argLhi,
+ AMD64AMode_IR(0, hregAMD64_RSI())));
+ addInstr(env, AMD64Instr_SseLdSt(False/*!isLoad*/, 16, argRhi,
+ AMD64AMode_IR(0, hregAMD64_RDX())));
+ /* Store the two low args, at 48(%rsi) and 48(%rdx):
+ movupd %argLlo, 48(%rsi)
+ movupd %argRlo, 48(%rdx)
+ */
+ addInstr(env, AMD64Instr_SseLdSt(False/*!isLoad*/, 16, argLlo,
+ AMD64AMode_IR(48, hregAMD64_RSI())));
+ addInstr(env, AMD64Instr_SseLdSt(False/*!isLoad*/, 16, argRlo,
+ AMD64AMode_IR(48, hregAMD64_RDX())));
+ /* call the helper */
+ addInstr(env, AMD64Instr_Call( Acc_ALWAYS, (ULong)fn, 3, RetLocNone ));
+ /* Prepare 3 arg regs:
+ leaq 48(%r_argp), %rdi
+ leaq 64(%r_argp), %rsi
+ leaq 80(%r_argp), %rdx
+ */
+ addInstr(env, AMD64Instr_Lea64(AMD64AMode_IR(48, argp),
+ hregAMD64_RDI()));
+ addInstr(env, AMD64Instr_Lea64(AMD64AMode_IR(64, argp),
+ hregAMD64_RSI()));
+ addInstr(env, AMD64Instr_Lea64(AMD64AMode_IR(80, argp),
+ hregAMD64_RDX()));
+ /* call the helper */
+ addInstr(env, AMD64Instr_Call( Acc_ALWAYS, (ULong)fn, 3, RetLocNone ));
+ /* fetch the result from memory, using %r_argp, which the
+ register allocator will keep alive across the call. */
+ addInstr(env, AMD64Instr_SseLdSt(True/*isLoad*/, 16, dstHi,
+ AMD64AMode_IR(0, argp)));
+ addInstr(env, AMD64Instr_SseLdSt(True/*isLoad*/, 16, dstLo,
+ AMD64AMode_IR(48, argp)));
+ /* and finally, clear the space */
+ add_to_rsp(env, 160);
+ *rHi = dstHi;
+ *rLo = dstLo;
+ return;
+ }
+
+ case Iop_Perm32x8: fn = (HWord)h_generic_calc_Perm32x8;
+ goto do_SseAssistedBinary256;
+ do_SseAssistedBinary256: {
+ /* RRRufff! RRRufff code is what we're generating here. Oh
+ well. */
+ vassert(fn != 0);
+ HReg dstHi = newVRegV(env);
+ HReg dstLo = newVRegV(env);
+ HReg argLhi, argLlo, argRhi, argRlo;
+ iselDVecExpr(&argLhi, &argLlo, env, e->Iex.Binop.arg1);
+ iselDVecExpr(&argRhi, &argRlo, env, e->Iex.Binop.arg2);
+ HReg argp = newVRegI(env);
+ /* subq $160, %rsp -- make a space*/
+ sub_from_rsp(env, 160);
+ /* leaq 48(%rsp), %r_argp -- point into it */
+ addInstr(env, AMD64Instr_Lea64(AMD64AMode_IR(48, hregAMD64_RSP()),
+ argp));
+ /* andq $-16, %r_argp -- 16-align the pointer */
+ addInstr(env, AMD64Instr_Alu64R(Aalu_AND,
+ AMD64RMI_Imm( ~(UInt)15 ),
+ argp));
+ /* Prepare 3 arg regs:
+ leaq 0(%r_argp), %rdi
+ leaq 32(%r_argp), %rsi
+ leaq 64(%r_argp), %rdx
+ */
+ addInstr(env, AMD64Instr_Lea64(AMD64AMode_IR(0, argp),
+ hregAMD64_RDI()));
+ addInstr(env, AMD64Instr_Lea64(AMD64AMode_IR(32, argp),
+ hregAMD64_RSI()));
+ addInstr(env, AMD64Instr_Lea64(AMD64AMode_IR(64, argp),
+ hregAMD64_RDX()));
+ /* Store the two args, at (%rsi) and (%rdx):
+ movupd %argLlo, 0(%rsi)
+ movupd %argLhi, 16(%rsi)
+ movupd %argRlo, 0(%rdx)
+ movupd %argRhi, 16(%rdx)
+ */
+ addInstr(env, AMD64Instr_SseLdSt(False/*!isLoad*/, 16, argLlo,
+ AMD64AMode_IR(0, hregAMD64_RSI())));
+ addInstr(env, AMD64Instr_SseLdSt(False/*!isLoad*/, 16, argLhi,
+ AMD64AMode_IR(16, hregAMD64_RSI())));
+ addInstr(env, AMD64Instr_SseLdSt(False/*!isLoad*/, 16, argRlo,
+ AMD64AMode_IR(0, hregAMD64_RDX())));
+ addInstr(env, AMD64Instr_SseLdSt(False/*!isLoad*/, 16, argRhi,
+ AMD64AMode_IR(16, hregAMD64_RDX())));
+ /* call the helper */
+ addInstr(env, AMD64Instr_Call( Acc_ALWAYS, (ULong)fn, 3, RetLocNone ));
+ /* fetch the result from memory, using %r_argp, which the
+ register allocator will keep alive across the call. */
+ addInstr(env, AMD64Instr_SseLdSt(True/*isLoad*/, 16, dstLo,
+ AMD64AMode_IR(0, argp)));
+ addInstr(env, AMD64Instr_SseLdSt(True/*isLoad*/, 16, dstHi,
+ AMD64AMode_IR(16, argp)));
+ /* and finally, clear the space */
+ add_to_rsp(env, 160);
+ *rHi = dstHi;
+ *rLo = dstLo;
+ return;
+ }
+
default:
break;
} /* switch (e->Iex.Binop.op) */
@@ -3725,6 +4062,22 @@
return;
}
+ if (e->tag == Iex_ITE) {
+ HReg r1Hi, r1Lo, r0Hi, r0Lo;
+ iselDVecExpr(&r1Hi, &r1Lo, env, e->Iex.ITE.iftrue);
+ iselDVecExpr(&r0Hi, &r0Lo, env, e->Iex.ITE.iffalse);
+ HReg dstHi = newVRegV(env);
+ HReg dstLo = newVRegV(env);
+ addInstr(env, mk_vMOVsd_RR(r1Hi,dstHi));
+ addInstr(env, mk_vMOVsd_RR(r1Lo,dstLo));
+ AMD64CondCode cc = iselCondCode(env, e->Iex.ITE.cond);
+ addInstr(env, AMD64Instr_SseCMov(cc ^ 1, r0Hi, dstHi));
+ addInstr(env, AMD64Instr_SseCMov(cc ^ 1, r0Lo, dstLo));
+ *rHi = dstHi;
+ *rLo = dstLo;
+ return;
+ }
+
//avx_fail:
vex_printf("iselDVecExpr (amd64, subarch = %s): can't reduce\n",
LibVEX_ppVexHwCaps(VexArchAMD64, env->hwcaps));
@@ -4303,7 +4656,9 @@
| VEX_HWCAPS_AMD64_CX16
| VEX_HWCAPS_AMD64_LZCNT
| VEX_HWCAPS_AMD64_AVX
- | VEX_HWCAPS_AMD64_RDTSCP)));
+ | VEX_HWCAPS_AMD64_RDTSCP
+ | VEX_HWCAPS_AMD64_BMI
+ | VEX_HWCAPS_AMD64_AVX2)));
/* Make up an initial environment to use. */
env = LibVEX_Alloc(sizeof(ISelEnv));
Modified: trunk/pub/libvex_ir.h (+28 -1)
===================================================================
--- trunk/pub/libvex_ir.h 2013-03-26 13:53:18 +00:00 (rev 2701)
+++ trunk/pub/libvex_ir.h 2013-03-27 11:37:33 +00:00 (rev 2702)
@@ -1514,8 +1514,35 @@
Iop_NotV256,
/* MISC (vector integer cmp != 0) */
- Iop_CmpNEZ32x8, Iop_CmpNEZ64x4,
+ Iop_CmpNEZ8x32, Iop_CmpNEZ16x16, Iop_CmpNEZ32x8, Iop_CmpNEZ64x4,
+ Iop_Add8x32, Iop_Add16x16, Iop_Add32x8, Iop_Add64x4,
+ Iop_Sub8x32, Iop_Sub16x16, Iop_Sub32x8, Iop_Sub64x4,
+
+ Iop_CmpEQ8x32, Iop_CmpEQ16x16, Iop_CmpEQ32x8, Iop_CmpEQ64x4,
+ Iop_CmpGT8Sx32, Iop_CmpGT16Sx16, Iop_CmpGT32Sx8, Iop_CmpGT64Sx4,
+
+ Iop_ShlN16x16, Iop_ShlN32x8, Iop_ShlN64x4,
+ Iop_ShrN16x16, Iop_ShrN32x8, Iop_ShrN64x4,
+ Iop_SarN16x16, Iop_SarN32x8,
+
+ Iop_Max8Sx32, Iop_Max16Sx16, Iop_Max32Sx8,
+ Iop_Max8Ux32, Iop_Max16Ux16, Iop_Max32Ux8,
+ Iop_Min8Sx32, Iop_Min16Sx16, Iop_Min32Sx8,
+ Iop_Min8Ux32, Iop_Min16Ux16, Iop_Min32Ux8,
+
+ Iop_Mul16x16, Iop_Mul32x8,
+ Iop_MulHi16Ux16, Iop_MulHi16Sx16,
+
+ Iop_QAdd8Ux32, Iop_QAdd16Ux16,
+ Iop_QAdd8Sx32, Iop_QAdd16Sx16,
+ Iop_QSub8Ux32, Iop_QSub16Ux16,
+ Iop_QSub8Sx32, Iop_QSub16Sx16,
+
+ Iop_Avg8Ux32, Iop_Avg16Ux16,
+
+ Iop_Perm32x8,
+
/* ------------------ 256-bit SIMD FP. ------------------ */
Iop_Add64Fx4,
Iop_Sub64Fx4,
Modified: trunk/pub/libvex.h (+7 -5)
===================================================================
--- trunk/pub/libvex.h 2013-03-26 13:53:18 +00:00 (rev 2701)
+++ trunk/pub/libvex.h 2013-03-27 11:37:33 +00:00 (rev 2702)
@@ -79,11 +79,13 @@
/* amd64: baseline capability is SSE2, with cmpxchg8b but not
cmpxchg16b. */
-#define VEX_HWCAPS_AMD64_SSE3 (1<<5) /* SSE3 support */
-#define VEX_HWCAPS_AMD64_CX16 (1<<6) /* cmpxchg16b support */
-#define VEX_HWCAPS_AMD64_LZCNT (1<<7) /* SSE4a LZCNT insn */
-#define VEX_HWCAPS_AMD64_AVX (1<<8) /* AVX instructions */
-#define VEX_HWCAPS_AMD64_RDTSCP (1<<9) /* RDTSCP instruction */
+#define VEX_HWCAPS_AMD64_SSE3 (1<<5) /* SSE3 support */
+#define VEX_HWCAPS_AMD64_CX16 (1<<6) /* cmpxchg16b support */
+#define VEX_HWCAPS_AMD64_LZCNT (1<<7) /* SSE4a LZCNT insn */
+#define VEX_HWCAPS_AMD64_AVX (1<<8) /* AVX instructions */
+#define VEX_HWCAPS_AMD64_RDTSCP (1<<9) /* RDTSCP instruction */
+#define VEX_HWCAPS_AMD64_BMI (1<<10) /* BMI1 instructions */
+#define VEX_HWCAPS_AMD64_AVX2 (1<<11) /* AVX2 instructions */
/* ppc32: baseline capability is integer only */
#define VEX_HWCAPS_PPC32_F (1<<8) /* basic (non-optional) FP */
Modified: trunk/pub/libvex_basictypes.h (+10 -0)
===================================================================
--- trunk/pub/libvex_basictypes.h 2013-03-26 13:53:18 +00:00 (rev 2701)
+++ trunk/pub/libvex_basictypes.h 2013-03-27 11:37:33 +00:00 (rev 2702)
@@ -75,6 +75,16 @@
}
V128;
+/* A union for doing 256-bit vector primitives conveniently. */
+typedef
+ union {
+ UChar w8[32];
+ UShort w16[16];
+ UInt w32[8];
+ ULong w64[4];
+ }
+ V256;
+
/* Floating point. */
typedef float Float; /* IEEE754 single-precision (32-bit) value */
typedef double Double; /* IEEE754 double-precision (64-bit) value */
Modified: trunk/priv/guest_amd64_toIR.c (+3983 -26)
===================================================================
--- trunk/priv/guest_amd64_toIR.c 2013-03-26 13:53:18 +00:00 (rev 2701)
+++ trunk/priv/guest_amd64_toIR.c 2013-03-27 11:37:33 +00:00 (rev 2702)
@@ -1290,6 +1290,38 @@
}
+static
+IRExpr* getIRegV ( Int sz, Prefix pfx )
+{
+ if (sz == 4) {
+ sz = 8;
+ return unop(Iop_64to32,
+ IRExpr_Get( offsetIReg( sz, getVexNvvvv(pfx), False ),
+ szToITy(sz) ));
+ } else {
+ return IRExpr_Get( offsetIReg( sz, getVexNvvvv(pfx), False ),
+ szToITy(sz) );
+ }
+}
+
+static
+void putIRegV ( Int sz, Prefix pfx, IRExpr* e )
+{
+ vassert(typeOfIRExpr(irsb->tyenv,e) == szToITy(sz));
+ if (sz == 4) {
+ e = unop(Iop_32Uto64,e);
+ }
+ stmt( IRStmt_Put( offsetIReg( sz, getVexNvvvv(pfx), False ), e ) );
+}
+
+static
+const HChar* nameIRegV ( Int sz, Prefix pfx )
+{
+ return nameIReg( sz, getVexNvvvv(pfx), False );
+}
+
+
+
/* Produce the guest state offset for a reference to the 'e' register
field in a modrm byte, taking into account REX (or its absence),
and the size of the access. eregOfRexRM will assert if mod_reg_rm
@@ -2677,6 +2709,88 @@
}
+/* Similarly for VSIB addressing. This returns just the addend,
+ and fills in *rI and *vscale with the register number of the vector
+ index and its multiplicand. */
+static
+IRTemp disAVSIBMode ( /*OUT*/Int* len,
+ VexAbiInfo* vbi, Prefix pfx, Long delta,
+ /*OUT*/HChar* buf, /*OUT*/UInt* rI,
+ IRType ty, /*OUT*/Int* vscale )
+{
+ UChar mod_reg_rm = getUChar(delta);
+ const HChar *vindex;
+
+ *len = 0;
+ *rI = 0;
+ *vscale = 0;
+ buf[0] = (UChar)0;
+ if ((mod_reg_rm & 7) != 4 || epartIsReg(mod_reg_rm))
+ return IRTemp_INVALID;
+
+ UChar sib = getUChar(delta+1);
+ UChar scale = toUChar((sib >> 6) & 3);
+ UChar index_r = toUChar((sib >> 3) & 7);
+ UChar base_r = toUChar(sib & 7);
+ Long d = 0;
+ /* correct since #(R13) == 8 + #(RBP) */
+ Bool base_is_BPor13 = toBool(base_r == R_RBP);
+ delta += 2;
+ *len = 2;
+
+ *rI = index_r | (getRexX(pfx) << 3);
+ if (ty == Ity_V128)
+ vindex = nameXMMReg(*rI);
+ else
+ vindex = nameYMMReg(*rI);
+ *vscale = 1<<scale;
+
+ switch (mod_reg_rm >> 6) {
+ case 0:
+ if (base_is_BPor13) {
+ d = getSDisp32(delta);
+ *len += 4;
+ if (scale == 0) {
+ DIS(buf, "%s%lld(,%s)", segRegTxt(pfx), d, vindex);
+ } else {
+ DIS(buf, "%s%lld(,%s,%d)", segRegTxt(pfx), d, vindex, 1<<scale);
+ }
+ return disAMode_copy2tmp( mkU64(d) );
+ } else {
+ if (scale == 0) {
+ DIS(buf, "%s(%s,%s)", segRegTxt(pfx),
+ nameIRegRexB(8,pfx,base_r), vindex);
+ } else {
+ DIS(buf, "%s(%s,%s,%d)", segRegTxt(pfx),
+ nameIRegRexB(8,pfx,base_r), vindex, 1<<scale);
+ }
+ }
+ break;
+ case 1:
+ d = getSDisp8(delta);
+ *len += 1;
+ goto have_disp;
+ case 2:
+ d = getSDisp32(delta);
+ *len += 4;
+ have_disp:
+ if (scale == 0) {
+ DIS(buf, "%s%lld(%s,%s)", segRegTxt(pfx), d,
+ nameIRegRexB(8,pfx,base_r), vindex);
+ } else {
+ DIS(buf, "%s%lld(%s,%s,%d)", segRegTxt(pfx), d,
+ nameIRegRexB(8,pfx,base_r), vindex, 1<<scale);
+ }
+ break;
+ }
+
+ if (!d)
+ return disAMode_copy2tmp( getIRegRexB(8,pfx,base_r) );
+ return disAMode_copy2tmp( binop(Iop_Add64, getIRegRexB(8,pfx,base_r),
+ mkU64(d)) );
+}
+
+
/* Figure out the number of (insn-stream) bytes constituting the amode
beginning at delta. Is useful for getting hold of literals beyond
the end of the amode before it has been disassembled. */
@@ -2822,7 +2936,7 @@
&& offsetIRegG(size,pfx,rm) == offsetIRegE(size,pfx,rm)) {
if (False && op8 == Iop_Sub8)
vex_printf("vex amd64->IR: sbb %%r,%%r optimisation(1)\n");
- putIRegG(size,pfx,rm, mkU(ty,0));
+ putIRegG(size,pfx,rm, mkU(ty,0));
}
assign( dst0, getIRegG(size,pfx,rm) );
@@ -3734,7 +3848,7 @@
/* Write the result back, if non-BT. */
if (gregLO3ofRM(modrm) != 4 /* BT */) {
if (epartIsReg(modrm)) {
- putIRegE(sz, pfx, modrm, narrowTo(ty, mkexpr(t2m)));
+ putIRegE(sz, pfx, modrm, narrowTo(ty, mkexpr(t2m)));
} else {
if (pfx & PFX_LOCK) {
casLE( mkexpr(t_addr),
@@ -3931,7 +4045,7 @@
} else {
addr = disAMode ( &len, vbi, pfx, delta, dis_buf,
/* we have to inform disAMode of any immediate
- bytes used */
+ bytes used */
gregLO3ofRM(modrm)==0/*TEST*/
? imin(4,sz)
: 0
@@ -4212,9 +4326,9 @@
putIReg64(R_RSP, mkexpr(t2) );
storeLE( mkexpr(t2), mkexpr(t3) );
break;
- } else {
+ } else {
goto unhandled; /* awaiting test case */
- }
+ }
default:
unhandled:
*decode_OK = False;
@@ -4673,6 +4787,34 @@
}
+/* Generate an IR sequence to do a count-trailing-zeroes operation on
+ the supplied IRTemp, and return a new IRTemp holding the result.
+ 'ty' may be Ity_I16, Ity_I32 or Ity_I64 only. In the case where
+ the argument is zero, return the number of bits in the word (the
+ natural semantics). */
+static IRTemp gen_TZCNT ( IRType ty, IRTemp src )
+{
+ vassert(ty == Ity_I64 || ty == Ity_I32 || ty == Ity_I16);
+
+ IRTemp src64 = newTemp(Ity_I64);
+ assign(src64, widenUto64( mkexpr(src) ));
+
+ // Ctz64 has undefined semantics when its input is zero, so
+ // special-case around that.
+ IRTemp res64 = newTemp(Ity_I64);
+ assign(res64,
+ IRExpr_ITE(
+ binop(Iop_CmpEQ64, mkexpr(src64), mkU64(0)),
+ mkU64(8 * sizeofIRType(ty)),
+ unop(Iop_Ctz64, mkexpr(src64))
+ ));
+
+ IRTemp res = newTemp(ty);
+ assign(res, narrowTo(ty, mkexpr(res64)));
+ return res;
+}
+
+
/*------------------------------------------------------------*/
/*--- ---*/
/*--- x87 FLOATING POINT INSTRUCTIONS ---*/
@@ -5248,7 +5390,7 @@
issue. If needed, side-exit to the next insn,
reporting the warning, so that Valgrind's dispatcher
sees the warning. */
- assign(ew, unop(Iop_64to32,mkexpr(w64)) );
+ assign(ew, unop(Iop_64to32,mkexpr(w64)) );
put_emwarn( mkexpr(ew) );
stmt(
IRStmt_Exit(
@@ -7512,7 +7654,7 @@
binop(Iop_16HLto32, mkexpr(esrc), mkexpr(gsrc)),
binop(Iop_16HLto32, mkexpr(gsrc), mkexpr(gsrc))
));
- /* result formed by shifting [esrc'gsrc'gsrc'gsrc] */
+ /* result formed by shifting [esrc'gsrc'gsrc'gsrc] */
assign( res64,
binop(Iop_Shr64,
binop(Iop_Shl64, mkexpr(tmp64), mkexpr(tmpSH)),
@@ -8142,8 +8284,7 @@
putIRegG(sz, pfx, rm, mkexpr(tmpd));
putIRegE(sz, pfx, rm, mkexpr(tmpt1));
DIP("xadd%c %s, %s\n",
- nameISize(sz), nameIRegG(sz,pfx,rm),
- nameIRegE(sz,pfx,rm));
+ nameISize(sz), nameIRegG(sz,pfx,rm), nameIRegE(sz,pfx,rm));
*decode_ok = True;
return 1+delta0;
}
@@ -8570,7 +8711,7 @@
}
putXMMReg( gregOfRexRM(pfx,rm),
eLeft ? binop(op, epart, gpart)
- : binop(op, gpart, epart) );
+ : binop(op, gpart, epart) );
return delta;
}
@@ -8743,7 +8884,7 @@
? unop( Iop_64UtoV128, loadLE(Ity_I64, mkexpr(addr)))
: /*sz==4*/
unop( Iop_32UtoV128, loadLE(Ity_I32, mkexpr(addr)))
- )
+ )
);
delta += alen+1;
DIP("%s $%d,%s,%s\n", opname,
@@ -9267,6 +9408,31 @@
return math_PABS_XMM(aa, 1);
}
+/* YMM version of math_PABS_XMM. */
+static IRTemp math_PABS_YMM ( IRTemp aa, Int laneszB )
+{
+ IRTemp res = newTemp(Ity_V256);
+ IRTemp aaHi = IRTemp_INVALID;
+ IRTemp aaLo = IRTemp_INVALID;
+ breakupV256toV128s(aa, &aaHi, &aaLo);
+ assign(res, binop(Iop_V128HLtoV256,
+ mkexpr(math_PABS_XMM(aaHi, laneszB)),
+ mkexpr(math_PABS_XMM(aaLo, laneszB))));
+ return res;
+}
+
+static IRTemp math_PABS_YMM_pap4 ( IRTemp aa ) {
+ return math_PABS_YMM(aa, 4);
+}
+
+static IRTemp math_PABS_YMM_pap2 ( IRTemp aa ) {
+ return math_PABS_YMM(aa, 2);
+}
+
+static IRTemp math_PABS_YMM_pap1 ( IRTemp aa ) {
+ return math_PABS_YMM(aa, 1);
+}
+
static IRExpr* dis_PALIGNR_XMM_helper ( IRTemp hi64,
IRTemp lo64, Long byteShift )
{
@@ -9634,6 +9800,47 @@
}
+static Long dis_PSHUFD_32x8 ( VexAbiInfo* vbi, Prefix pfx, Long delta )
+{
+ Int order;
+ Int alen = 0;
+ HChar dis_buf[50];
+ IRTemp sV = newTemp(Ity_V256);
+ UChar modrm = getUChar(delta);
+ IRTemp addr = IRTemp_INVALID;
+ UInt rG = gregOfRexRM(pfx,modrm);
+ if (epartIsReg(modrm)) {
+ UInt rE = eregOfRexRM(pfx,modrm);
+ assign( sV, getYMMReg(rE) );
+ order = (Int)getUChar(delta+1);
+ delta += 1+1;
+ DIP("vpshufd $%d,%s,%s\n", order, nameYMMReg(rE), nameYMMReg(rG));
+ } else {
+ addr = disAMode ( &alen, vbi, pfx, delta, dis_buf,
+ 1/*byte after the amode*/ );
+ assign( sV, loadLE(Ity_V256, mkexpr(addr)) );
+ order = (Int)getUChar(delta+alen);
+ delta += alen+1;
+ DIP("vpshufd $%d,%s,%s\n", order, dis_buf, nameYMMReg(rG));
+ }
+
+ IRTemp s[8];
+ s[7] = s[6] = s[5] = s[4] = s[3] = s[2] = s[1] = s[0] = IRTemp_INVALID;
+ breakupV256to32s( sV, &s[7], &s[6], &s[5], &s[4],
+ &s[3], &s[2], &s[1], &s[0] );
+
+ putYMMReg( rG, mkV256from32s( s[4 + ((order>>6)&3)],
+ s[4 + ((order>>4)&3)],
+ s[4 + ((order>>2)&3)],
+ s[4 + ((order>>0)&3)],
+ s[0 + ((order>>6)&3)],
+ s[0 + ((order>>4)&3)],
+ s[0 + ((order>>2)&3)],
+ s[0 + ((order>>0)&3)] ) );
+ return delta;
+}
+
+
static IRTemp math_PSRLDQ ( IRTemp sV, Int imm )
{
IRTemp dV = newTemp(Ity_V128);
@@ -10280,6 +10487,28 @@
}
+static Long dis_PMOVMSKB_256 ( VexAbiInfo* vbi, Prefix pfx,
+ Long delta )
+{
+ UChar modrm = getUChar(delta);
+ vassert(epartIsReg(modrm)); /* ensured by caller */
+ UInt rE = eregOfRexRM(pfx,modrm);
+ UInt rG = gregOfRexRM(pfx,modrm);
+ IRTemp t0 = newTemp(Ity_V128);
+ IRTemp t1 = newTemp(Ity_V128);
+ IRTemp t2 = newTemp(Ity_I16);
+ IRTemp t3 = newTemp(Ity_I16);
+ assign(t0, getYMMRegLane128(rE, 0));
+ assign(t1, getYMMRegLane128(rE, 1));
+ assign(t2, unop(Iop_GetMSBs8x16, mkexpr(t0)));
+ assign(t3, unop(Iop_GetMSBs8x16, mkexpr(t1)));
+ putIReg32(rG, binop(Iop_16HLto32, mkexpr(t3), mkexpr(t2)));
+ DIP("vpmovmskb %s,%s\n", nameYMMReg(rE), nameIReg32(rG));
+ delta += 1;
+ return delta;
+}
+
+
/* FIXME: why not just use InterleaveLO / InterleaveHI? I think the
relevant ops are "xIsH ? InterleaveHI32x4 : InterleaveLO32x4". */
/* Does the maths for 128 bit versions of UNPCKLPS and UNPCKHPS */
@@ -10542,6 +10771,22 @@
}
+static IRTemp math_PMULUDQ_256 ( IRTemp sV, IRTemp dV )
+{
+ /* This is a really poor translation -- could be improved if
+ performance critical */
+ IRTemp sHi, sLo, dHi, dLo;
+ sHi = sLo = dHi = dLo = IRTemp_INVALID;
+ breakupV256toV128s( dV, &dHi, &dLo);
+ breakupV256toV128s( sV, &sHi, &sLo);
+...
[truncated message content] |
|
From: Rich C. <rc...@wi...> - 2013-03-27 06:13:43
|
valgrind revision: VEX revision: C compiler: i686-apple-darwin10-gcc-4.2.1 (GCC) 4.2.1 (Apple Inc. build 5646) (dot 1) GDB: GNU gdb 6.3.50-20050815 (Apple version gdb-1346) (Fri Sep 18 20:40:51 UTC 2009) Assembler: C library: unknown uname -mrs: Darwin 10.8.0 i386 Vendor version: unknown Nightly build on macamd64 ( Darwin 10.8.0 i386 ) Started at 2013-03-27 00:35:01 CDT Ended at 2013-03-27 01:13:23 CDT Results differ from 24 hours ago Checking out valgrind source tree ... failed Last 20 lines of verbose log follow echo Checking out valgrind source tree ... svn co svn://svn.valgrind.org/valgrind/trunk -r {2013-03-27T00:35:01} valgrind-new && svn update -r {2013-03-27T00:35:01} valgrind-new/VEX + eval 'svn co svn://svn.valgrind.org/valgrind/trunk -r {2013-03-27T00:35:01} valgrind-new && svn update -r {2013-03-27T00:35:01} valgrind-new/VEX' ++ svn co svn://svn.valgrind.org/valgrind/trunk -r '{2013-03-27T00:35:01}' valgrind-new svn: Can't connect to host 'svn.valgrind.org': Operation timed out ================================================= == Results from 24 hours ago == ================================================= Checking out valgrind source tree ... done Configuring valgrind ... done Building valgrind ... done Running regression tests ... failed Regression test results follow == 558 tests, 96 stderr failures, 17 stdout failures, 0 stderrB failures, 0 stdoutB failures, 0 post failures == memcheck/tests/accounting (stderr) memcheck/tests/amd64/insn-pcmpistri (stderr) memcheck/tests/amd64/more_x87_fp (stdout) memcheck/tests/badpoll (stderr) memcheck/tests/big_blocks_freed_list (stderr) memcheck/tests/bug287260 (stderr) memcheck/tests/darwin/aio (stderr) memcheck/tests/darwin/pth-supp (stderr) memcheck/tests/darwin/scalar (stderr) memcheck/tests/darwin/scalar_nocancel (stderr) memcheck/tests/err_disable4 (stderr) memcheck/tests/leak-segv-jmp (stderr) memcheck/tests/lks (stderr) memcheck/tests/memcmptest (stderr) memcheck/tests/mismatches (stderr) memcheck/tests/origin5-bz2 (stderr) memcheck/tests/overlap (stdout) memcheck/tests/overlap (stderr) memcheck/tests/post-syscall (stderr) memcheck/tests/sem (stderr) memcheck/tests/sendmsg (stderr) memcheck/tests/strchr (stderr) memcheck/tests/test-plo-no (stderr) memcheck/tests/varinfo3 (stderr) memcheck/tests/varinfo5 (stderr) memcheck/tests/vbit-test/vbit-test (stderr) memcheck/tests/vcpu_fnfns (stdout) memcheck/tests/writev1 (stderr) massif/tests/pages_as_heap (stderr) none/tests/allexec32 (stdout) none/tests/allexec32 (stderr) none/tests/allexec64 (stdout) none/tests/allexec64 (stderr) none/tests/amd64/bug137714-amd64 (stdout) none/tests/amd64/bug137714-amd64 (stderr) none/tests/amd64/bug156404-amd64 (stdout) none/tests/amd64/bug156404-amd64 (stderr) none/tests/amd64/fcmovnu (stdout) none/tests/amd64/fcmovnu (stderr) none/tests/amd64/fxtract (stdout) none/tests/amd64/fxtract (stderr) none/tests/amd64/jrcxz (stdout) none/tests/amd64/jrcxz (stderr) none/tests/amd64/looper (stdout) none/tests/amd64/looper (stderr) none/tests/amd64/loopnel (stdout) none/tests/amd64/loopnel (stderr) none/tests/amd64/shrld (stdout) none/tests/amd64/shrld (stderr) none/tests/amd64/slahf-amd64 (stdout) none/tests/amd64/slahf-amd64 (stderr) none/tests/async-sigs (stderr) none/tests/execve (stderr) none/tests/faultstatus (stderr) none/tests/fdleak_cmsg (stderr) none/tests/manythreads (stdout) none/tests/manythreads (stderr) none/tests/mmap_fcntl_bug (stderr) none/tests/pth_blockedsig (stderr) none/tests/pth_exit (stderr) none/tests/require-text-symbol-2 (stderr) none/tests/rlimit64_nofile (stderr) none/tests/syscall-restart1 (stderr) none/tests/thread-exits (stdout) none/tests/thread-exits (stderr) none/tests/x86/cse_fail (stdout) none/tests/x86/cse_fail (stderr) helgrind/tests/annotate_hbefore (stderr) helgrind/tests/annotate_rwlock (stderr) helgrind/tests/annotate_smart_pointer (stderr) helgrind/tests/cond_init_destroy (stderr) helgrind/tests/cond_timedwait_invalid (stderr) helgrind/tests/free_is_write (stderr) helgrind/tests/hg01_all_ok (stderr) helgrind/tests/hg02_deadlock (stderr) helgrind/tests/hg03_inherit (stderr) helgrind/tests/hg04_race (stderr) helgrind/tests/hg05_race2 (stderr) helgrind/tests/hg06_readshared (stderr) helgrind/tests/locked_vs_unlocked1_fwd (stderr) helgrind/tests/locked_vs_unlocked1_rev (stderr) helgrind/tests/locked_vs_unlocked2 (stderr) helgrind/tests/locked_vs_unlocked3 (stderr) helgrind/tests/pth_cond_destroy_busy (stderr) helgrind/tests/pth_destroy_cond (stderr) helgrind/tests/rwlock_race (stderr) helgrind/tests/rwlock_test (stderr) helgrind/tests/t2t_laog (stderr) helgrind/tests/tc01_simple_race (stderr) helgrind/tests/tc02_simple_tls (stderr) helgrind/tests/tc03_re_excl (stderr) helgrind/tests/tc04_free_lock (stderr) helgrind/tests/tc05_simple_race (stderr) helgrind/tests/tc06_two_races (stderr) helgrind/tests/tc06_two_races_xml (stderr) helgrind/tests/tc07_hbl1 (stderr) helgrind/tests/tc08_hbl2 (stderr) helgrind/tests/tc09_bad_unlock (stderr) helgrind/tests/tc10_rec_lock (stderr) helgrind/tests/tc11_XCHG (stderr) helgrind/tests/tc12_rwl_trivial (stderr) helgrind/tests/tc13_laog1 (stderr) helgrind/tests/tc14_laog_dinphils (stderr) helgrind/tests/tc15_laog_lockdel (stderr) helgrind/tests/tc16_byterace (stderr) helgrind/tests/tc17_sembar (stderr) helgrind/tests/tc18_semabuse (stderr) helgrind/tests/tc19_shadowmem (stderr) helgrind/tests/tc21_pthonce (stderr) helgrind/tests/tc23_bogus_condwait (stderr) helgrind/tests/tc24_nonzero_sem (stderr) drd/tests/annotate_barrier_xml (stderr) drd/tests/hg03_inherit (stderr) ================================================= == Difference between 24 hours ago and now == ================================================= *** old.short Wed Mar 27 01:12:08 2013 --- new.short Wed Mar 27 01:13:23 2013 *************** *** 1,123 **** ! Checking out valgrind source tree ... done ! Configuring valgrind ... done ! Building valgrind ... done ! Running regression tests ... failed ! Regression test results follow ! ! == 558 tests, 96 stderr failures, 17 stdout failures, 0 stderrB failures, 0 stdoutB failures, 0 post failures == ! memcheck/tests/accounting (stderr) ! memcheck/tests/amd64/insn-pcmpistri (stderr) ! memcheck/tests/amd64/more_x87_fp (stdout) ! memcheck/tests/badpoll (stderr) ! memcheck/tests/big_blocks_freed_list (stderr) ! memcheck/tests/bug287260 (stderr) ! memcheck/tests/darwin/aio (stderr) ! memcheck/tests/darwin/pth-supp (stderr) ! memcheck/tests/darwin/scalar (stderr) ! memcheck/tests/darwin/scalar_nocancel (stderr) ! memcheck/tests/err_disable4 (stderr) ! memcheck/tests/leak-segv-jmp (stderr) ! memcheck/tests/lks (stderr) ! memcheck/tests/memcmptest (stderr) ! memcheck/tests/mismatches (stderr) ! memcheck/tests/origin5-bz2 (stderr) ! memcheck/tests/overlap (stdout) ! memcheck/tests/overlap (stderr) ! memcheck/tests/post-syscall (stderr) ! memcheck/tests/sem (stderr) ! memcheck/tests/sendmsg (stderr) ! memcheck/tests/strchr (stderr) ! memcheck/tests/test-plo-no (stderr) ! memcheck/tests/varinfo3 (stderr) ! memcheck/tests/varinfo5 (stderr) ! memcheck/tests/vbit-test/vbit-test (stderr) ! memcheck/tests/vcpu_fnfns (stdout) ! memcheck/tests/writev1 (stderr) ! massif/tests/pages_as_heap (stderr) ! none/tests/allexec32 (stdout) ! none/tests/allexec32 (stderr) ! none/tests/allexec64 (stdout) ! none/tests/allexec64 (stderr) ! none/tests/amd64/bug137714-amd64 (stdout) ! none/tests/amd64/bug137714-amd64 (stderr) ! none/tests/amd64/bug156404-amd64 (stdout) ! none/tests/amd64/bug156404-amd64 (stderr) ! none/tests/amd64/fcmovnu (stdout) ! none/tests/amd64/fcmovnu (stderr) ! none/tests/amd64/fxtract (stdout) ! none/tests/amd64/fxtract (stderr) ! none/tests/amd64/jrcxz (stdout) ! none/tests/amd64/jrcxz (stderr) ! none/tests/amd64/looper (stdout) ! none/tests/amd64/looper (stderr) ! none/tests/amd64/loopnel (stdout) ! none/tests/amd64/loopnel (stderr) ! none/tests/amd64/shrld (stdout) ! none/tests/amd64/shrld (stderr) ! none/tests/amd64/slahf-amd64 (stdout) ! none/tests/amd64/slahf-amd64 (stderr) ! none/tests/async-sigs (stderr) ! none/tests/execve (stderr) ! none/tests/faultstatus (stderr) ! none/tests/fdleak_cmsg (stderr) ! none/tests/manythreads (stdout) ! none/tests/manythreads (stderr) ! none/tests/mmap_fcntl_bug (stderr) ! none/tests/pth_blockedsig (stderr) ! none/tests/pth_exit (stderr) ! none/tests/require-text-symbol-2 (stderr) ! none/tests/rlimit64_nofile (stderr) ! none/tests/syscall-restart1 (stderr) ! none/tests/thread-exits (stdout) ! none/tests/thread-exits (stderr) ! none/tests/x86/cse_fail (stdout) ! none/tests/x86/cse_fail (stderr) ! helgrind/tests/annotate_hbefore (stderr) ! helgrind/tests/annotate_rwlock (stderr) ! helgrind/tests/annotate_smart_pointer (stderr) ! helgrind/tests/cond_init_destroy (stderr) ! helgrind/tests/cond_timedwait_invalid (stderr) ! helgrind/tests/free_is_write (stderr) ! helgrind/tests/hg01_all_ok (stderr) ! helgrind/tests/hg02_deadlock (stderr) ! helgrind/tests/hg03_inherit (stderr) ! helgrind/tests/hg04_race (stderr) ! helgrind/tests/hg05_race2 (stderr) ! helgrind/tests/hg06_readshared (stderr) ! helgrind/tests/locked_vs_unlocked1_fwd (stderr) ! helgrind/tests/locked_vs_unlocked1_rev (stderr) ! helgrind/tests/locked_vs_unlocked2 (stderr) ! helgrind/tests/locked_vs_unlocked3 (stderr) ! helgrind/tests/pth_cond_destroy_busy (stderr) ! helgrind/tests/pth_destroy_cond (stderr) ! helgrind/tests/rwlock_race (stderr) ! helgrind/tests/rwlock_test (stderr) ! helgrind/tests/t2t_laog (stderr) ! helgrind/tests/tc01_simple_race (stderr) ! helgrind/tests/tc02_simple_tls (stderr) ! helgrind/tests/tc03_re_excl (stderr) ! helgrind/tests/tc04_free_lock (stderr) ! helgrind/tests/tc05_simple_race (stderr) ! helgrind/tests/tc06_two_races (stderr) ! helgrind/tests/tc06_two_races_xml (stderr) ! helgrind/tests/tc07_hbl1 (stderr) ! helgrind/tests/tc08_hbl2 (stderr) ! helgrind/tests/tc09_bad_unlock (stderr) ! helgrind/tests/tc10_rec_lock (stderr) ! helgrind/tests/tc11_XCHG (stderr) ! helgrind/tests/tc12_rwl_trivial (stderr) ! helgrind/tests/tc13_laog1 (stderr) ! helgrind/tests/tc14_laog_dinphils (stderr) ! helgrind/tests/tc15_laog_lockdel (stderr) ! helgrind/tests/tc16_byterace (stderr) ! helgrind/tests/tc17_sembar (stderr) ! helgrind/tests/tc18_semabuse (stderr) ! helgrind/tests/tc19_shadowmem (stderr) ! helgrind/tests/tc21_pthonce (stderr) ! helgrind/tests/tc23_bogus_condwait (stderr) ! helgrind/tests/tc24_nonzero_sem (stderr) ! drd/tests/annotate_barrier_xml (stderr) ! drd/tests/hg03_inherit (stderr) --- 1,9 ---- ! Checking out valgrind source tree ... failed ! Last 20 lines of verbose log follow echo + Checking out valgrind source tree ... svn co svn://svn.valgrind.org/valgrind/trunk -r {2013-03-27T00:35:01} valgrind-new && svn update -r {2013-03-27T00:35:01} valgrind-new/VEX + + eval 'svn co svn://svn.valgrind.org/valgrind/trunk -r {2013-03-27T00:35:01} valgrind-new && svn update -r {2013-03-27T00:35:01} valgrind-new/VEX' + ++ svn co svn://svn.valgrind.org/valgrind/trunk -r '{2013-03-27T00:35:01}' valgrind-new + svn: Can't connect to host 'svn.valgrind.org': Operation timed out ================================================= ./valgrind-old/drd/tests/annotate_barrier_xml.stderr.diff ================================================= --- annotate_barrier_xml.stderr.exp 2013-03-27 00:35:39.000000000 -0500 +++ annotate_barrier_xml.stderr.out 2013-03-27 01:09:21.000000000 -0500 @@ -188,7 +188,7 @@ <frame> <ip>0x........</ip> <obj>...</obj> - <fn>start_thread</fn> + <fn>_pthread_start</fn> </frame> </stack> <auxwhat>Address 0x........ is at offset 0 from 0x.........</auxwhat> ================================================= ./valgrind-old/drd/tests/hg03_inherit.stderr.diff ================================================= --- hg03_inherit.stderr.exp 2013-03-27 00:35:39.000000000 -0500 +++ hg03_inherit.stderr.out 2013-03-27 01:10:16.000000000 -0500 @@ -12,5 +12,10 @@ Location 0x........ is 0 bytes inside shared[1], a global variable declared at hg03_inherit.c:11 +Conflicting load by thread 3 at 0x........ size 4 + at 0x........: ??? + by 0x........: _pthread_free_pthread_onstack (in /...libc...) +Allocation context: Data section of /usr/lib/libSystem.B.dylib -ERROR SUMMARY: 2 errors from 2 contexts (suppressed: 0 from 0) + +ERROR SUMMARY: 3 errors from 3 contexts (suppressed: 0 from 0) ================================================= ./valgrind-old/helgrind/tests/annotate_hbefore.stderr.diff ================================================= --- annotate_hbefore.stderr.exp 2013-03-27 00:35:17.000000000 -0500 +++ annotate_hbefore.stderr.out 2013-03-27 01:07:48.000000000 -0500 @@ -0,0 +1,704 @@ +---Thread-Announcement------------------------------------------ + +Thread #x is the program's root thread + +---------------------------------------------------------------- + +Thread #x's call to pthread_mutex_lock failed + with error code 22 (EINVAL: Invalid argument) + at 0x........: pthread_mutex_lock (hg_intercepts.c:...) + ... + +---------------------------------------------------------------- + +Thread #x unlocked an invalid lock at 0x........ + at 0x........: pthread_mutex_unlock (hg_intercepts.c:...) + ... + +---------------------------------------------------------------- + +Thread #x's call to pthread_mutex_unlock failed + with error code 22 (EINVAL: Invalid argument) + at 0x........: pthread_mutex_unlock (hg_intercepts.c:...) + ... + +---Thread-Announcement------------------------------------------ + +Thread #x was created + ... + by 0x........: pthread_create_WRK (hg_intercepts.c:...) + by 0x........: pthread_create (hg_intercepts.c:...) + by 0x........: main (annotate_hbefore.c:333) + +---------------------------------------------------------------- + +Possible data race during read of size 4 at 0x........ by thread #x +Locks held: none + ... + +This conflicts with a previous write of size 4 by thread #x +Locks held: none + ... + by 0x........: pthread_create_WRK (hg_intercepts.c:...) + by 0x........: pthread_create (hg_intercepts.c:...) + by 0x........: main (annotate_hbefore.c:333) + +---------------------------------------------------------------- + +Possible data race during read of size 1 at 0x........ by thread #x +Locks held: none + ... + +This conflicts with a previous write of size 1 by thread #x +Locks held: none + ... + by 0x........: pthread_create_WRK (hg_intercepts.c:...) + by 0x........: pthread_create (hg_intercepts.c:...) + by 0x........: main (annotate_hbefore.c:333) + +---------------------------------------------------------------- + +Possible data race during write of size 1 at 0x........ by thread #x +Locks held: none + ... + +This conflicts with a previous write of size 1 by thread #x +Locks held: none + ... + by 0x........: pthread_create_WRK (hg_intercepts.c:...) + by 0x........: pthread_create (hg_intercepts.c:...) + by 0x........: main (annotate_hbefore.c:333) + +---------------------------------------------------------------- + +Possible data race during write of size 4 at 0x........ by thread #x +Locks held: none + ... + +This conflicts with a previous write of size 4 by thread #x +Locks held: none + ... + by 0x........: pthread_create_WRK (hg_intercepts.c:...) + by 0x........: pthread_create (hg_intercepts.c:...) + by 0x........: main (annotate_hbefore.c:333) + +---------------------------------------------------------------- + +Possible data race during write of size 4 at 0x........ by thread #x +Locks held: none + ... + by 0x........: pthread_create_WRK (hg_intercepts.c:...) + by 0x........: pthread_create (hg_intercepts.c:...) + by 0x........: main (annotate_hbefore.c:334) + +This conflicts with a previous read of size 4 by thread #x +Locks held: none + ... + <truncated beyond 100 lines> ================================================= ./valgrind-old/helgrind/tests/annotate_rwlock.stderr.diff ================================================= --- annotate_rwlock.stderr.exp 2013-03-27 00:35:17.000000000 -0500 +++ annotate_rwlock.stderr.out 2013-03-27 01:07:50.000000000 -0500 @@ -1,17 +1,132 @@ ---Thread-Announcement------------------------------------------ +Thread #x is the program's root thread + +---------------------------------------------------------------- + +Thread #x's call to pthread_mutex_lock failed + with error code 22 (EINVAL: Invalid argument) + at 0x........: pthread_mutex_lock (hg_intercepts.c:...) + ... + +---------------------------------------------------------------- + +Thread #x unlocked an invalid lock at 0x........ + at 0x........: pthread_mutex_unlock (hg_intercepts.c:...) + ... + +---------------------------------------------------------------- + +Thread #x's call to pthread_mutex_unlock failed + with error code 22 (EINVAL: Invalid argument) + at 0x........: pthread_mutex_unlock (hg_intercepts.c:...) + ... + +---Thread-Announcement------------------------------------------ + Thread #x was created ... by 0x........: pthread_create_WRK (hg_intercepts.c:...) - by 0x........: pthread_create@* (hg_intercepts.c:...) + by 0x........: pthread_create (hg_intercepts.c:...) by 0x........: main (annotate_rwlock.c:164) +---------------------------------------------------------------- + +Possible data race during read of size 4 at 0x........ by thread #x +Locks held: none + ... + +This conflicts with a previous write of size 4 by thread #x +Locks held: none + ... + by 0x........: pthread_create_WRK (hg_intercepts.c:...) + by 0x........: pthread_create (hg_intercepts.c:...) + by 0x........: main (annotate_rwlock.c:164) + +---------------------------------------------------------------- + +Possible data race during read of size 1 at 0x........ by thread #x +Locks held: none + ... + +This conflicts with a previous write of size 1 by thread #x +Locks held: none + ... + by 0x........: pthread_create_WRK (hg_intercepts.c:...) + by 0x........: pthread_create (hg_intercepts.c:...) + by 0x........: main (annotate_rwlock.c:164) + +---------------------------------------------------------------- + +Possible data race during write of size 1 at 0x........ by thread #x +Locks held: none + ... + +This conflicts with a previous write of size 1 by thread #x +Locks held: none + ... + by 0x........: pthread_create_WRK (hg_intercepts.c:...) + by 0x........: pthread_create (hg_intercepts.c:...) + by 0x........: main (annotate_rwlock.c:164) + +---------------------------------------------------------------- + +Possible data race during write of size 4 at 0x........ by thread #x +Locks held: none + ... + +This conflicts with a previous write of size 4 by thread #x +Locks held: none + ... + by 0x........: pthread_create_WRK (hg_intercepts.c:...) + by 0x........: pthread_create (hg_intercepts.c:...) + by 0x........: main (annotate_rwlock.c:164) + +---------------------------------------------------------------- + +Possible data race during write of size 4 at 0x........ by thread #x +Locks held: none + ... + by 0x........: pthread_create_WRK (hg_intercepts.c:...) + by 0x........: pthread_create (hg_intercepts.c:...) + by 0x........: main (annotate_rwlock.c:164) + +This conflicts with a previous read of size 4 by thread #x +Locks held: none + ... <truncated beyond 100 lines> ================================================= ./valgrind-old/helgrind/tests/annotate_smart_pointer.stderr.diff ================================================= --- annotate_smart_pointer.stderr.exp 2013-03-27 00:35:17.000000000 -0500 +++ annotate_smart_pointer.stderr.out 2013-03-27 01:07:53.000000000 -0500 @@ -1,4 +1,958 @@ +---Thread-Announcement------------------------------------------ + +Thread #x is the program's root thread + +---------------------------------------------------------------- + +Thread #x's call to pthread_mutex_lock failed + with error code 22 (EINVAL: Invalid argument) + at 0x........: pthread_mutex_lock (hg_intercepts.c:...) + ... + +---------------------------------------------------------------- + +Thread #x unlocked an invalid lock at 0x........ + at 0x........: pthread_mutex_unlock (hg_intercepts.c:...) + ... + +---------------------------------------------------------------- + +Thread #x's call to pthread_mutex_unlock failed + with error code 22 (EINVAL: Invalid argument) + at 0x........: pthread_mutex_unlock (hg_intercepts.c:...) + ... + +---Thread-Announcement------------------------------------------ + +Thread #x was created + ... + by 0x........: pthread_create_WRK (hg_intercepts.c:...) + by 0x........: pthread_create (hg_intercepts.c:...) + by 0x........: Thread::Create(void* (*)(void*), void*) (annotate_smart_pointer.cpp:145) + by 0x........: main (annotate_smart_pointer.cpp:319) + +---------------------------------------------------------------- + +Possible data race during read of size 4 at 0x........ by thread #x +Locks held: none + ... + +This conflicts with a previous write of size 4 by thread #x +Locks held: none + ... + by 0x........: pthread_create_WRK (hg_intercepts.c:...) + by 0x........: pthread_create (hg_intercepts.c:...) + by 0x........: Thread::Create(void* (*)(void*), void*) (annotate_smart_pointer.cpp:145) + by 0x........: main (annotate_smart_pointer.cpp:319) + +---------------------------------------------------------------- + +Possible data race during read of size 1 at 0x........ by thread #x +Locks held: none + ... + +This conflicts with a previous write of size 1 by thread #x +Locks held: none + ... + by 0x........: pthread_create_WRK (hg_intercepts.c:...) + by 0x........: pthread_create (hg_intercepts.c:...) + by 0x........: Thread::Create(void* (*)(void*), void*) (annotate_smart_pointer.cpp:145) + by 0x........: main (annotate_smart_pointer.cpp:319) + +---------------------------------------------------------------- + +Possible data race during write of size 1 at 0x........ by thread #x +Locks held: none + ... + +This conflicts with a previous write of size 1 by thread #x +Locks held: none + ... + by 0x........: pthread_create_WRK (hg_intercepts.c:...) + by 0x........: pthread_create (hg_intercepts.c:...) + by 0x........: Thread::Create(void* (*)(void*), void*) (annotate_smart_pointer.cpp:145) + by 0x........: main (annotate_smart_pointer.cpp:319) + +---------------------------------------------------------------- + +Possible data race during write of size 4 at 0x........ by thread #x +Locks held: none + ... + +This conflicts with a previous write of size 4 by thread #x +Locks held: none + ... + by 0x........: pthread_create_WRK (hg_intercepts.c:...) + by 0x........: pthread_create (hg_intercepts.c:...) + by 0x........: Thread::Create(void* (*)(void*), void*) (annotate_smart_pointer.cpp:145) + by 0x........: main (annotate_smart_pointer.cpp:319) + +---------------------------------------------------------------- + +Possible data race during write of size 4 at 0x........ by thread #x +Locks held: none + ... + by 0x........: pthread_create_WRK (hg_intercepts.c:...) + by 0x........: pthread_create (hg_intercepts.c:...) <truncated beyond 100 lines> ================================================= ./valgrind-old/helgrind/tests/cond_init_destroy.stderr.diff ================================================= --- cond_init_destroy.stderr.exp 2013-03-27 00:35:17.000000000 -0500 +++ cond_init_destroy.stderr.out 2013-03-27 01:07:54.000000000 -0500 @@ -1,3 +1,27 @@ +---Thread-Announcement------------------------------------------ -ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 0 from 0) +Thread #x is the program's root thread + +---------------------------------------------------------------- + +Thread #x's call to pthread_mutex_lock failed + with error code 22 (EINVAL: Invalid argument) + at 0x........: pthread_mutex_lock (hg_intercepts.c:...) + ... + +---------------------------------------------------------------- + +Thread #x unlocked an invalid lock at 0x........ + at 0x........: pthread_mutex_unlock (hg_intercepts.c:...) + ... + +---------------------------------------------------------------- + +Thread #x's call to pthread_mutex_unlock failed + with error code 22 (EINVAL: Invalid argument) + at 0x........: pthread_mutex_unlock (hg_intercepts.c:...) + ... + + +ERROR SUMMARY: 3 errors from 3 contexts (suppressed: 0 from 0) ================================================= ./valgrind-old/helgrind/tests/cond_timedwait_invalid.stderr.diff ================================================= --- cond_timedwait_invalid.stderr.exp 2013-03-27 00:35:17.000000000 -0500 +++ cond_timedwait_invalid.stderr.out 2013-03-27 01:07:55.000000000 -0500 @@ -5,11 +5,31 @@ ---------------------------------------------------------------- +Thread #x's call to pthread_mutex_lock failed + with error code 22 (EINVAL: Invalid argument) + at 0x........: pthread_mutex_lock (hg_intercepts.c:...) + ... + +---------------------------------------------------------------- + +Thread #x unlocked an invalid lock at 0x........ + at 0x........: pthread_mutex_unlock (hg_intercepts.c:...) + ... + +---------------------------------------------------------------- + +Thread #x's call to pthread_mutex_unlock failed + with error code 22 (EINVAL: Invalid argument) + at 0x........: pthread_mutex_unlock (hg_intercepts.c:...) + ... + +---------------------------------------------------------------- + Thread #x's call to pthread_cond_timedwait failed with error code 22 (EINVAL: Invalid argument) at 0x........: pthread_cond_timedwait_WRK (hg_intercepts.c:...) - by 0x........: pthread_cond_timedwait@* (hg_intercepts.c:...) + by 0x........: pthread_cond_timedwait (hg_intercepts.c:...) by 0x........: main (cond_timedwait_invalid.c:22) -ERROR SUMMARY: 1 errors from 1 contexts (suppressed: 0 from 0) +ERROR SUMMARY: 4 errors from 4 contexts (suppressed: 0 from 0) ================================================= ./valgrind-old/helgrind/tests/free_is_write.stderr.diff ================================================= --- free_is_write.stderr.exp 2013-03-27 00:35:17.000000000 -0500 +++ free_is_write.stderr.out 2013-03-27 01:07:56.000000000 -0500 @@ -1,16 +1,192 @@ +---Thread-Announcement------------------------------------------ + +Thread #x is the program's root thread + +---------------------------------------------------------------- + +Thread #x's call to pthread_mutex_lock failed + with error code 22 (EINVAL: Invalid argument) + at 0x........: pthread_mutex_lock (hg_intercepts.c:...) + ... + +---------------------------------------------------------------- + +Thread #x unlocked an invalid lock at 0x........ + at 0x........: pthread_mutex_unlock (hg_intercepts.c:...) + ... + +---------------------------------------------------------------- + +Thread #x's call to pthread_mutex_unlock failed + with error code 22 (EINVAL: Invalid argument) + at 0x........: pthread_mutex_unlock (hg_intercepts.c:...) + ... + Start. ---Thread-Announcement------------------------------------------ Thread #x was created ... by 0x........: pthread_create_WRK (hg_intercepts.c:...) - by 0x........: pthread_create@* (hg_intercepts.c:...) + by 0x........: pthread_create (hg_intercepts.c:...) by 0x........: main (free_is_write.c:32) ----Thread-Announcement------------------------------------------ +---------------------------------------------------------------- -Thread #x is the program's root thread +Possible data race during read of size 4 at 0x........ by thread #x +Locks held: none + ... + +This conflicts with a previous write of size 4 by thread #x +Locks held: none + ... + by 0x........: pthread_create_WRK (hg_intercepts.c:...) + by 0x........: pthread_create (hg_intercepts.c:...) + by 0x........: main (free_is_write.c:32) + +---------------------------------------------------------------- + +Possible data race during read of size 1 at 0x........ by thread #x +Locks held: none + ... + +This conflicts with a previous write of size 1 by thread #x +Locks held: none + ... + by 0x........: pthread_create_WRK (hg_intercepts.c:...) + by 0x........: pthread_create (hg_intercepts.c:...) + by 0x........: main (free_is_write.c:32) + +---------------------------------------------------------------- + +Possible data race during write of size 1 at 0x........ by thread #x +Locks held: none + ... + +This conflicts with a previous write of size 1 by thread #x +Locks held: none + ... + by 0x........: pthread_create_WRK (hg_intercepts.c:...) + by 0x........: pthread_create (hg_intercepts.c:...) + by 0x........: main (free_is_write.c:32) + +---------------------------------------------------------------- + +Possible data race during write of size 4 at 0x........ by thread #x +Locks held: none + ... + +This conflicts with a previous write of size 4 by thread #x +Locks held: none + ... + by 0x........: pthread_create_WRK (hg_intercepts.c:...) + by 0x........: pthread_create (hg_intercepts.c:...) + by 0x........: main (free_is_write.c:32) + +---------------------------------------------------------------- + +Possible data race during read of size 4 at 0x........ by thread #x +Locks held: none + ... + by 0x........: pthread_join_WRK (hg_intercepts.c:...) + by 0x........: pthread_join* (hg_intercepts.c:...) + by 0x........: main (free_is_write.c:39) <truncated beyond 100 lines> ================================================= ./valgrind-old/helgrind/tests/hg01_all_ok.stderr.diff ================================================= --- hg01_all_ok.stderr.exp 2013-03-27 00:35:17.000000000 -0500 +++ hg01_all_ok.stderr.out 2013-03-27 01:07:57.000000000 -0500 @@ -1,3 +1,990 @@ +---Thread-Announcement------------------------------------------ -ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 0 from 0) +Thread #x is the program's root thread + +---------------------------------------------------------------- + +Thread #x's call to pthread_mutex_lock failed + with error code 22 (EINVAL: Invalid argument) + at 0x........: pthread_mutex_lock (hg_intercepts.c:...) + ... + +---------------------------------------------------------------- + +Thread #x unlocked an invalid lock at 0x........ + at 0x........: pthread_mutex_unlock (hg_intercepts.c:...) + ... + +---------------------------------------------------------------- + +Thread #x's call to pthread_mutex_unlock failed + with error code 22 (EINVAL: Invalid argument) + at 0x........: pthread_mutex_unlock (hg_intercepts.c:...) + ... + +---Thread-Announcement------------------------------------------ + +Thread #x was created + ... + by 0x........: pthread_create_WRK (hg_intercepts.c:...) + by 0x........: pthread_create (hg_intercepts.c:...) + by 0x........: main (hg01_all_ok.c:25) + +---------------------------------------------------------------- + +Possible data race during read of size 4 at 0x........ by thread #x +Locks held: none + ... + +This conflicts with a previous write of size 4 by thread #x +Locks held: none + ... + by 0x........: pthread_create_WRK (hg_intercepts.c:...) + by 0x........: pthread_create (hg_intercepts.c:...) + by 0x........: main (hg01_all_ok.c:25) + +---------------------------------------------------------------- + +Possible data race during read of size 1 at 0x........ by thread #x +Locks held: none + ... + +This conflicts with a previous write of size 1 by thread #x +Locks held: none + ... + by 0x........: pthread_create_WRK (hg_intercepts.c:...) + by 0x........: pthread_create (hg_intercepts.c:...) + by 0x........: main (hg01_all_ok.c:25) + +---------------------------------------------------------------- + +Possible data race during write of size 1 at 0x........ by thread #x +Locks held: none + ... + +This conflicts with a previous write of size 1 by thread #x +Locks held: none + ... + by 0x........: pthread_create_WRK (hg_intercepts.c:...) + by 0x........: pthread_create (hg_intercepts.c:...) + by 0x........: main (hg01_all_ok.c:25) + +---------------------------------------------------------------- + +Possible data race during write of size 4 at 0x........ by thread #x +Locks held: none + ... + +This conflicts with a previous write of size 4 by thread #x +Locks held: none + ... + by 0x........: pthread_create_WRK (hg_intercepts.c:...) + by 0x........: pthread_create (hg_intercepts.c:...) + by 0x........: main (hg01_all_ok.c:25) + +---------------------------------------------------------------- + +Possible data race during write of size 4 at 0x........ by thread #x +Locks held: none + ... + by 0x........: pthread_create_WRK (hg_intercepts.c:...) + by 0x........: pthread_create (hg_intercepts.c:...) + by 0x........: main (hg01_all_ok.c:26) + +This conflicts with a previous read of size 4 by thread #x +Locks held: none <truncated beyond 100 lines> ================================================= ./valgrind-old/helgrind/tests/hg02_deadlock.stderr.diff ================================================= --- hg02_deadlock.stderr.exp 2013-03-27 00:35:17.000000000 -0500 +++ hg02_deadlock.stderr.out 2013-03-27 01:07:58.000000000 -0500 @@ -1,14 +1,275 @@ ---Thread-Announcement------------------------------------------ +Thread #x is the program's root thread + +---------------------------------------------------------------- + +Thread #x's call to pthread_mutex_lock failed + with error code 22 (EINVAL: Invalid argument) + at 0x........: pthread_mutex_lock (hg_intercepts.c:...) + ... + +---------------------------------------------------------------- + +Thread #x unlocked an invalid lock at 0x........ + at 0x........: pthread_mutex_unlock (hg_intercepts.c:...) + ... + +---------------------------------------------------------------- + +Thread #x's call to pthread_mutex_unlock failed + with error code 22 (EINVAL: Invalid argument) + at 0x........: pthread_mutex_unlock (hg_intercepts.c:...) + ... + +---Thread-Announcement------------------------------------------ + +Thread #x was created + ... + by 0x........: pthread_create_WRK (hg_intercepts.c:...) + by 0x........: pthread_create (hg_intercepts.c:...) + by 0x........: main (hg02_deadlock.c:35) + +---------------------------------------------------------------- + +Possible data race during read of size 4 at 0x........ by thread #x +Locks held: none + ... + +This conflicts with a previous write of size 4 by thread #x +Locks held: none + ... + by 0x........: pthread_create_WRK (hg_intercepts.c:...) + by 0x........: pthread_create (hg_intercepts.c:...) + by 0x........: main (hg02_deadlock.c:35) + +---------------------------------------------------------------- + +Possible data race during read of size 1 at 0x........ by thread #x +Locks held: none + ... + +This conflicts with a previous write of size 1 by thread #x +Locks held: none + ... + by 0x........: pthread_create_WRK (hg_intercepts.c:...) + by 0x........: pthread_create (hg_intercepts.c:...) + by 0x........: main (hg02_deadlock.c:35) + +---------------------------------------------------------------- + +Possible data race during write of size 1 at 0x........ by thread #x +Locks held: none + ... + +This conflicts with a previous write of size 1 by thread #x +Locks held: none + ... + by 0x........: pthread_create_WRK (hg_intercepts.c:...) + by 0x........: pthread_create (hg_intercepts.c:...) + by 0x........: main (hg02_deadlock.c:35) + +---------------------------------------------------------------- + +Possible data race during write of size 4 at 0x........ by thread #x +Locks held: none + ... + +This conflicts with a previous write of size 4 by thread #x +Locks held: none + ... + by 0x........: pthread_create_WRK (hg_intercepts.c:...) + by 0x........: pthread_create (hg_intercepts.c:...) + by 0x........: main (hg02_deadlock.c:35) + +---------------------------------------------------------------- + +Possible data race during write of size 4 at 0x........ by thread #x +Locks held: none + ... + by 0x........: pthread_create_WRK (hg_intercepts.c:...) + by 0x........: pthread_create (hg_intercepts.c:...) + by 0x........: main (hg02_deadlock.c:36) + +This conflicts with a previous read of size 4 by thread #x +Locks held: none + ... <truncated beyond 100 lines> ================================================= ./valgrind-old/helgrind/tests/hg03_inherit.stderr.diff ================================================= --- hg03_inherit.stderr.exp 2013-03-27 00:35:17.000000000 -0500 +++ hg03_inherit.stderr.out 2013-03-27 01:08:01.000000000 -0500 @@ -1,15 +1,508 @@ ---Thread-Announcement------------------------------------------ +Thread #x is the program's root thread + +---------------------------------------------------------------- + +Thread #x's call to pthread_mutex_lock failed + with error code 22 (EINVAL: Invalid argument) + at 0x........: pthread_mutex_lock (hg_intercepts.c:...) + ... + +---------------------------------------------------------------- + +Thread #x unlocked an invalid lock at 0x........ + at 0x........: pthread_mutex_unlock (hg_intercepts.c:...) + ... + +---------------------------------------------------------------- + +Thread #x's call to pthread_mutex_unlock failed + with error code 22 (EINVAL: Invalid argument) + at 0x........: pthread_mutex_unlock (hg_intercepts.c:...) + ... + +---Thread-Announcement------------------------------------------ + Thread #x was created ... by 0x........: pthread_create_WRK (hg_intercepts.c:...) - by 0x........: pthread_create@* (hg_intercepts.c:...) + by 0x........: pthread_create (hg_intercepts.c:...) + by 0x........: main (hg03_inherit.c:44) + +---------------------------------------------------------------- + +Possible data race during read of size 4 at 0x........ by thread #x +Locks held: none + ... + +This conflicts with a previous write of size 4 by thread #x +Locks held: none + ... + by 0x........: pthread_create_WRK (hg_intercepts.c:...) + by 0x........: pthread_create (hg_intercepts.c:...) + by 0x........: main (hg03_inherit.c:44) + +---------------------------------------------------------------- + +Possible data race during read of size 1 at 0x........ by thread #x +Locks held: none + ... + +This conflicts with a previous write of size 1 by thread #x +Locks held: none + ... + by 0x........: pthread_create_WRK (hg_intercepts.c:...) + by 0x........: pthread_create (hg_intercepts.c:...) + by 0x........: main (hg03_inherit.c:44) + +---------------------------------------------------------------- + +Possible data race during write of size 1 at 0x........ by thread #x +Locks held: none + ... + +This conflicts with a previous write of size 1 by thread #x +Locks held: none + ... + by 0x........: pthread_create_WRK (hg_intercepts.c:...) + by 0x........: pthread_create (hg_intercepts.c:...) + by 0x........: main (hg03_inherit.c:44) + +---------------------------------------------------------------- + +Possible data race during write of size 4 at 0x........ by thread #x +Locks held: none + ... + +This conflicts with a previous write of size 4 by thread #x +Locks held: none + ... + by 0x........: pthread_create_WRK (hg_intercepts.c:...) + by 0x........: pthread_create (hg_intercepts.c:...) + by 0x........: main (hg03_inherit.c:44) + +---------------------------------------------------------------- + +Possible data race during write of size 4 at 0x........ by thread #x +Locks held: none + ... + by 0x........: pthread_create_WRK (hg_intercepts.c:...) + by 0x........: pthread_create (hg_intercepts.c:...) + by 0x........: main (hg03_inherit.c:46) + +This conflicts with a previous read of size 4 by thread #x +Locks held: none <truncated beyond 100 lines> ================================================= ./valgrind-old/helgrind/tests/hg04_race.stderr.diff ================================================= --- hg04_race.stderr.exp 2013-03-27 00:35:17.000000000 -0500 +++ hg04_race.stderr.out 2013-03-27 01:08:03.000000000 -0500 @@ -1,19 +1,238 @@ ---Thread-Announcement------------------------------------------ +Thread #x is the program's root thread + +---------------------------------------------------------------- + +Thread #x's call to pthread_mutex_lock failed + with error code 22 (EINVAL: Invalid argument) + at 0x........: pthread_mutex_lock (hg_intercepts.c:...) + ... + +---------------------------------------------------------------- + +Thread #x unlocked an invalid lock at 0x........ + at 0x........: pthread_mutex_unlock (hg_intercepts.c:...) + ... + +---------------------------------------------------------------- + +Thread #x's call to pthread_mutex_unlock failed + with error code 22 (EINVAL: Invalid argument) + at 0x........: pthread_mutex_unlock (hg_intercepts.c:...) + ... + +---Thread-Announcement------------------------------------------ + Thread #x was created ... by 0x........: pthread_create_WRK (hg_intercepts.c:...) - by 0x........: pthread_create@* (hg_intercepts.c:...) + by 0x........: pthread_create (hg_intercepts.c:...) + by 0x........: main (hg04_race.c:19) + +---------------------------------------------------------------- + +Possible data race during read of size 4 at 0x........ by thread #x +Locks held: none + ... + +This conflicts with a previous write of size 4 by thread #x +Locks held: none + ... + by 0x........: pthread_create_WRK (hg_intercepts.c:...) + by 0x........: pthread_create (hg_intercepts.c:...) + by 0x........: main (hg04_race.c:19) + +---------------------------------------------------------------- + +Possible data race during read of size 1 at 0x........ by thread #x +Locks held: none + ... + +This conflicts with a previous write of size 1 by thread #x +Locks held: none + ... + by 0x........: pthread_create_WRK (hg_intercepts.c:...) + by 0x........: pthread_create (hg_intercepts.c:...) + by 0x........: main (hg04_race.c:19) + +---------------------------------------------------------------- + +Possible data race during write of size 1 at 0x........ by thread #x +Locks held: none + ... + +This conflicts with a previous write of size 1 by thread #x +Locks held: none + ... + by 0x........: pthread_create_WRK (hg_intercepts.c:...) + by 0x........: pthread_create (hg_intercepts.c:...) + by 0x........: main (hg04_race.c:19) + +---------------------------------------------------------------- + +Possible data race during write of size 4 at 0x........ by thread #x +Locks held: none + ... + +This conflicts with a previous write of size 4 by thread #x +Locks held: none + ... + by 0x........: pthread_create_WRK (hg_intercepts.c:...) + by 0x........: pthread_create (hg_intercepts.c:...) + by 0x........: main (hg04_race.c:19) + +---------------------------------------------------------------- + +Possible data race during read of size 4 at 0x........ by thread #x +Locks held: none + ... + +This conflicts with a previous write of size 4 by thread #x +Locks held: none + ... + by 0x........: pthread_create_WRK (hg_intercepts.c:...) + by 0x........: pthread_create (hg_intercepts.c:...) <truncated beyond 100 lines> ================================================= ./valgrind-old/helgrind/tests/hg05_race2.stderr.diff ================================================= --- hg05_race2.stderr.exp 2013-03-27 00:35:17.000000000 -0500 +++ hg05_race2.stderr.out 2013-03-27 01:08:05.000000000 -0500 @@ -1,19 +1,238 @@ ---Thread-Announcement------------------------------------------ +Thread #x is the program's root thread + +---------------------------------------------------------------- + +Thread #x's call to pthread_mutex_lock failed + with error code 22 (EINVAL: Invalid argument) + at 0x........: pthread_mutex_lock (hg_intercepts.c:...) + ... + +---------------------------------------------------------------- + +Thread #x unlocked an invalid lock at 0x........ + at 0x........: pthread_mutex_unlock (hg_intercepts.c:...) + ... + +---------------------------------------------------------------- + +Thread #x's call to pthread_mutex_unlock failed + with error code 22 (EINVAL: Invalid argument) + at 0x........: pthread_mutex_unlock (hg_intercepts.c:...) + ... + +---Thread-Announcement------------------------------------------ + Thread #x was created ... by 0x........: pthread_create_WRK (hg_intercepts.c:...) - by 0x........: pthread_create@* (hg_intercepts.c:...) + by 0x........: pthread_create (hg_intercepts.c:...) + by 0x........: main (hg05_race2.c:27) + +---------------------------------------------------------------- + +Possible data race during read of size 4 at 0x........ by thread #x +Locks held: none + ... + +This conflicts with a previous write of size 4 by thread #x +Locks held: none + ... + by 0x........: pthread_create_WRK (hg_intercepts.c:...) + by 0x........: pthread_create (hg_intercepts.c:...) + by 0x........: main (hg05_race2.c:27) + +---------------------------------------------------------------- + +Possible data race during read of size 1 at 0x........ by thread #x +Locks held: none + ... + +This conflicts with a previous write of size 1 by thread #x +Locks held: none + ... + by 0x........: pthread_create_WRK (hg_intercepts.c:...) + by 0x........: pthread_create (hg_intercepts.c:...) + by 0x........: main (hg05_race2.c:27) + +---------------------------------------------------------------- + +Possible data race during write of size 1 at 0x........ by thread #x +Locks held: none + ... + +This conflicts with a previous write of size 1 by thread #x +Locks held: none + ... + by 0x........: pthread_create_WRK (hg_intercepts.c:...) + by 0x........: pthread_create (hg_intercepts.c:...) + by 0x........: main (hg05_race2.c:27) + +---------------------------------------------------------------- + +Possible data race during write of size 4 at 0x........ by thread #x +Locks held: none + ... + +This conflicts with a previous write of size 4 by thread #x +Locks held: none + ... + by 0x........: pthread_create_WRK (hg_intercepts.c:...) + by 0x........: pthread_create (hg_intercepts.c:...) + by 0x........: main (hg05_race2.c:27) + +---------------------------------------------------------------- + +Possible data race during read of size 4 at 0x........ by thread #x +Locks held: none + ... + +This conflicts with a previous write of size 4 by thread #x +Locks held: none + ... + by 0x........: pthread_create_WRK (hg_intercepts.c:...) + by 0x........: pthread_create (hg_intercepts.c:...) <truncated beyond 100 lines> ================================================= ./valgrind-old/helgrind/tests/hg06_readshared.stderr.diff ================================================= --- hg06_readshared.stderr.exp 2013-03-27 00:35:17.000000000 -0500 +++ hg06_readshared.stderr.out 2013-03-27 01:08:06.000000000 -0500 @@ -1,3 +1,755 @@ +---Thread-Announcement------------------------------------------ -ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 0 from 0) +Thread #x is the program's root thread + +---------------------------------------------------------------- + +Thread #x's call to pthread_mutex_lock failed + with error code 22 (EINVAL: Invalid argument) + at 0x........: pthread_mutex_lock (hg_intercepts.c:...) + ... + +---------------------------------------------------------------- + +Thread #x unlocked an invalid lock at 0x........ + at 0x........: pthread_mutex_unlock (hg_intercepts.c:...) + ... + +---------------------------------------------------------------- + +Thread #x's call to pthread_mutex_unlock failed + with error code 22 (EINVAL: Invalid argument) + at 0x........: pthread_mutex_unlock (hg_intercepts.c:...) + ... + +---Thread-Announcement------------------------------------------ + +Thread #x was created + ... + by 0x........: pthread_create_WRK (hg_intercepts.c:...) + by 0x........: pthread_create (hg_intercepts.c:...) + by 0x........: main (hg06_readshared.c:24) + +---------------------------------------------------------------- + +Possible data race during read of size 4 at 0x........ by thread #x +Locks held: none + ... + +This conflicts with a previous write of size 4 by thread #x +Locks held: none + ... + by 0x........: pthread_create_WRK (hg_intercepts.c:...) + by 0x........: pthread_create (hg_intercepts.c:...) + by 0x........: main (hg06_readshared.c:24) + +---------------------------------------------------------------- + +Possible data race during read of size 1 at 0x........ by thread #x +Locks held: none + ... + +This conflicts with a previous write of size 1 by thread #x +Locks held: none + ... + by 0x........: pthread_create_WRK (hg_intercepts.c:...) + by 0x........: pthread_create (hg_intercepts.c:...) + by 0x........: main (hg06_readshared.c:24) + +---------------------------------------------------------------- + +Possible data race during write of size 1 at 0x........ by thread #x +Locks held: none + ... + +This conflicts with a previous write of size 1 by thread #x +Locks held: none + ... + by 0x........: pthread_create_WRK (hg_intercepts.c:...) + by 0x........: pthread_create (hg_intercepts.c:...) + by 0x........: main (hg06_readshared.c:24) + +---------------------------------------------------------------- + +Possible data race during write of size 4 at 0x........ by thread #x +Locks held: none + ... + +This conflicts with a previous write of size 4 by thread #x +Locks held: none + ... + by 0x........: pthread_create_WRK (hg_intercepts.c:...) + by 0x........: pthread_create (hg_intercepts.c:...) + by 0x........: main (hg06_readshared.c:24) + +---------------------------------------------------------------- + +Possible data race during write of size 4 at 0x........ by thread #x +Locks held: none + ... + by 0x........: pthread_create_WRK (hg_intercepts.c:...) + by 0x........: pthread_create (hg_intercepts.c:...) + by 0x........: main (hg06_readshared.c:25) + +This conflicts with a previous read of size 4 by thread #x +Locks held: none <truncated beyond 100 lines> ================================================= ./valgrind-old/helgrind/tests/locked_vs_unlocked1_fwd.stderr.diff ================================================= --- locked_vs_unlocked1_fwd.stderr.exp 2013-03-27 00:35:17.000000000 -0500 +++ locked_vs_unlocked1_fwd.stderr.out 2013-03-27 01:08:07.000000000 -0500 @@ -1,18 +1,241 @@ ---Thread-Announcement------------------------------------------ +Thread #x is the program's root thread + +---------------------------------------------------------------- + +Thread #x's call to pthread_mutex_lock failed + with error code 22 (EINVAL: Invalid argument) + at 0x........: pthread_mutex_lock (hg_intercepts.c:...) + ... + +---------------------------------------------------------------- + +Thread #x unlocked an invalid lock at 0x........ + at 0x........: pthread_mutex_unlock (hg_intercepts.c:...) + ... + +---------------------------------------------------------------- + +Thread #x's call to pthread_mutex_unlock failed + with error code 22 (EINVAL: Invalid argument) + at 0x........: pthread_mutex_unlock (hg_intercepts.c:...) + ... + +---Thread-Announcement------------------------------------------ + Thread #x was created ... by 0x........: pthread_create_WRK (hg_intercepts.c:...) - by 0x........: pthread_create@* (hg_intercepts.c:...) + by 0x........: pthread_create (hg_intercepts.c:...) + by 0x........: main (locked_vs_unlocked1.c:29) + +---------------------------------------------------------------- + +Possible data race during read of size 4 at 0x........ by thread #x +Locks held: none + ... + +This conflicts with a previous write of size 4 by thread #x +Locks held: none + ... + by 0x........: pthread_create_WRK (hg_intercepts.c:...) + by 0x........: pthread_create (hg_intercepts.c:...) + by 0x........: main (locked_vs_unlocked1.c:29) + +---------------------------------------------------------------- + +Possible data race during read of size 1 at 0x........ by thread #x +Locks held: none + ... + +This conflicts with a previous write of size 1 by thread #x +Locks held: none + ... + by 0x........: pthread_create_WRK (hg_intercepts.c:...) + by 0x........: pthread_create (hg_intercepts.c:...) + by 0x........: main (locked_vs_unlocked1.c:29) + +---------------------------------------------------------------- + +Possible data race during write of size 1 at 0x........ by thread #x +Locks held: none + ... + +This conflicts with a previous write of size 1 by thread #x +Locks held: none + ... + by 0x........: pthread_create_WRK (hg_intercepts.c:...) + by 0x........: pthread_create (hg_intercepts.c:...) + by 0x........: main (locked_vs_unlocked1.c:29) + +---------------------------------------------------------------- + +Possible data race during write of size 4 at 0x........ by thread #x +Locks held: none + ... + +This conflicts with a previous write of size 4 by thread #x +Locks held: none + ... + by 0x........: pthread_create_WRK (hg_intercepts.c:...) + by 0x........: pthread_create (hg_intercepts.c:...) + by 0x........: main (locked_vs_unlocked1.c:29) + +---------------------------------------------------------------- + +Possible data race during read of size 4 at 0x........ by thread #x +Locks held: none + ... + +This conflicts with a previous write of size 4 by thread #x +Locks held: none + ... + by 0x........: pthread_create_WRK (hg_intercepts.c:...) + by 0x........: pthread_create (hg_intercepts.c:...) + by 0x........: main (locked_vs_unlocked1.c:29) <truncated beyond 100 lines> ================================================= ./valgrind-old/helgrind/tests/locked_vs_unlocked1_rev.stderr.diff ================================================= --- locked_vs_unlocked1_rev.stderr.exp 2013-03-27 00:35:17.000000000 -0500 +++ locked_vs_unlocked1_rev.stderr.out 2013-03-27 01:08:09.000000000 -0500 @@ -1,18 +1,237 @@ ---Thread-Announcement------------------------------------------ +Thread #x is the program's root thread + +---------------------------------------------------------------- + +Thread #x's call to pthread_mutex_lock failed + with error code 22 (EINVAL: Invalid argument) + at 0x........: pthread_mutex_lock (hg_intercepts.c:...) + ... + +---------------------------------------------------------------- + +Thread #x unlocked an invalid lock at 0x........ + at 0x........: pthread_mutex_unlock (hg_intercepts.c:...) + ... + +---------------------------------------------------------------- + +Thread #x's call to pthread_mutex_unlock failed + with error code 22 (EINVAL: Invalid argument) + at 0x........: pthread_mutex_unlock (hg_intercepts.c:...) + ... + +---Thread-Announcement------------------------------------------ + Thread #x was created ... by 0x........: pthread_create_WRK (hg_intercepts.c:...) - by 0x........: pthread_create@* (hg_intercepts.c:...) + by 0x........: pthread_create (hg_intercepts.c:...) + by 0x........: main (locked_vs_unlocked1.c:29) + +---------------------------------------------------------------- + +Possible data race during read of size 4 at 0x........ by thread #x +Locks held: none + ... + +This conflicts with a previous write of size 4 by thread #x +Locks held: none + ... + by 0x........: pthread_create_WRK (hg_intercepts.c:...) + by 0x........: pthread_create (hg_intercepts.c:...) + by 0x........: main (locked_vs_unlocked1.c:29) + +---------------------------------------------------------------- + +Possible data race during read of size 1 at 0x........ by thread #x +Locks held: none + ... + +This conflicts with a previous write of size 1 by thread #x +Locks held: none + ... + by 0x........: pthread_create_WRK (hg_intercepts.c:...) + by 0x........: pthread_create (hg_intercepts.c:...) + by 0x........: main (locked_vs_unlocked1.c:29) + +---------------------------------------------------------------- + +Possible data race during write of size 1 at 0x........ by thread #x +Locks held: none + ... + +This conflicts with a previous write of size 1 by thread #x +Locks held: none + ... + by 0x........: pthread_create_WRK (hg_intercepts.c:...) + by 0x........: pthread_create (hg_intercepts.c:...) + by 0x........: main (locked_vs_unlocked1.c:29) + +---------------------------------------------------------------- + +Possible data race during write of size 4 at 0x........ by thread #x +Locks held: none + ... + +This conflicts with a previous write of size 4 by thread #x +Locks held: none + ... + by 0x........: pthread_create_WRK (hg_intercepts.c:...) + by 0x........: pthread_create (hg_intercepts.c:...) + by 0x........: main (locked_vs_unlocked1.c:29) + +---------------------------------------------------------------- + +Possible data race during read of size 4 at 0x........ by thread #x +Locks held: none + ... + +This conflicts with a previous write of size 4 by thread #x +Locks held: none + ... + by 0x........: pthread_create_WRK (hg_intercepts.c:...) + by 0x........: pthread_create (hg_intercepts.c:...) + by 0x........: main (locked_vs_unlocked1.c:29) <truncated... [truncated message content] |
|
From: Rich C. <rc...@wi...> - 2013-03-27 05:17:43
|
valgrind revision: 13337
VEX revision: 2701
C compiler: i686-apple-darwin10-gcc-4.2.1 (GCC) 4.2.1 (Apple Inc. build 5666) (dot 3)
GDB: GNU gdb 6.3.50-20050815 (Apple version gdb-1515) (Sat Jan 15 08:30:16 UTC 2011)
Assembler:
C library: unknown
uname -mrs: Darwin 10.8.0 i386
Vendor version: unknown
Nightly build on macx86 ( Darwin 10.8.0 i386 )
Started at 2013-03-26 23:35:00 CDT
Ended at 2013-03-27 00:17:25 CDT
Results unchanged from 24 hours ago
Checking out valgrind source tree ... done
Configuring valgrind ... done
Building valgrind ... done
Running regression tests ... failed
Regression test results follow
== 511 tests, 151 stderr failures, 4 stdout failures, 3 stderrB failures, 3 stdoutB failures, 1 post failure ==
gdbserver_tests/mchelp (stdoutB)
gdbserver_tests/mchelp (stderrB)
gdbserver_tests/mcinvokeRU (stdoutB)
gdbserver_tests/mcinvokeRU (stderrB)
gdbserver_tests/mcinvokeWS (stdoutB)
gdbserver_tests/mcinvokeWS (stderrB)
memcheck/tests/accounting (stderr)
memcheck/tests/badpoll (stderr)
memcheck/tests/big_blocks_freed_list (stderr)
memcheck/tests/bug287260 (stderr)
memcheck/tests/darwin/aio (stderr)
memcheck/tests/darwin/pth-supp (stderr)
memcheck/tests/darwin/scalar (stderr)
memcheck/tests/deep-backtrace (stderr)
memcheck/tests/err_disable4 (stderr)
memcheck/tests/leak-delta (stderr)
memcheck/tests/leak-segv-jmp (stderr)
memcheck/tests/lks (stderr)
memcheck/tests/memcmptest (stderr)
memcheck/tests/mismatches (stderr)
memcheck/tests/null_socket (stdout)
memcheck/tests/origin5-bz2 (stderr)
memcheck/tests/overlap (stdout)
memcheck/tests/overlap (stderr)
memcheck/tests/sem (stderr)
memcheck/tests/sendmsg (stderr)
memcheck/tests/strchr (stderr)
memcheck/tests/test-plo-no (stderr)
memcheck/tests/varinfo3 (stderr)
memcheck/tests/varinfo5 (stderr)
memcheck/tests/vbit-test/vbit-test (stderr)
memcheck/tests/vcpu_fnfns (stdout)
memcheck/tests/writev1 (stderr)
massif/tests/big-alloc (post)
massif/tests/pages_as_heap (stderr)
none/tests/allexec32 (stderr)
none/tests/allexec64 (stderr)
none/tests/async-sigs (stderr)
none/tests/cmdline5 (stderr)
none/tests/execve (stderr)
none/tests/faultstatus (stderr)
none/tests/mmap_fcntl_bug (stderr)
none/tests/nodir (stderr)
none/tests/pth_blockedsig (stderr)
none/tests/require-text-symbol-2 (stderr)
none/tests/rlimit64_nofile (stderr)
none/tests/shell_nosuchfile (stderr)
none/tests/x86/cse_fail (stdout)
helgrind/tests/annotate_hbefore (stderr)
helgrind/tests/annotate_rwlock (stderr)
helgrind/tests/annotate_smart_pointer (stderr)
helgrind/tests/cond_init_destroy (stderr)
helgrind/tests/cond_timedwait_invalid (stderr)
helgrind/tests/free_is_write (stderr)
helgrind/tests/hg01_all_ok (stderr)
helgrind/tests/hg02_deadlock (stderr)
helgrind/tests/hg03_inherit (stderr)
helgrind/tests/hg04_race (stderr)
helgrind/tests/hg05_race2 (stderr)
helgrind/tests/hg06_readshared (stderr)
helgrind/tests/locked_vs_unlocked1_fwd (stderr)
helgrind/tests/locked_vs_unlocked1_rev (stderr)
helgrind/tests/locked_vs_unlocked2 (stderr)
helgrind/tests/locked_vs_unlocked3 (stderr)
helgrind/tests/pth_cond_destroy_busy (stderr)
helgrind/tests/pth_destroy_cond (stderr)
helgrind/tests/rwlock_race (stderr)
helgrind/tests/rwlock_test (stderr)
helgrind/tests/t2t_laog (stderr)
helgrind/tests/tc01_simple_race (stderr)
helgrind/tests/tc02_simple_tls (stderr)
helgrind/tests/tc03_re_excl (stderr)
helgrind/tests/tc04_free_lock (stderr)
helgrind/tests/tc05_simple_race (stderr)
helgrind/tests/tc06_two_races (stderr)
helgrind/tests/tc06_two_races_xml (stderr)
helgrind/tests/tc07_hbl1 (stderr)
helgrind/tests/tc08_hbl2 (stderr)
helgrind/tests/tc09_bad_unlock (stderr)
helgrind/tests/tc10_rec_lock (stderr)
helgrind/tests/tc11_XCHG (stderr)
helgrind/tests/tc12_rwl_trivial (stderr)
helgrind/tests/tc13_laog1 (stderr)
helgrind/tests/tc14_laog_dinphils (stderr)
helgrind/tests/tc15_laog_lockdel (stderr)
helgrind/tests/tc16_byterace (stderr)
helgrind/tests/tc17_sembar (stderr)
helgrind/tests/tc18_semabuse (stderr)
helgrind/tests/tc19_shadowmem (stderr)
helgrind/tests/tc21_pthonce (stderr)
helgrind/tests/tc23_bogus_condwait (stderr)
helgrind/tests/tc24_nonzero_sem (stderr)
drd/tests/annotate_barrier (stderr)
drd/tests/annotate_barrier_xml (stderr)
drd/tests/annotate_hb_race (stderr)
drd/tests/annotate_hbefore (stderr)
drd/tests/annotate_ignore_read (stderr)
drd/tests/annotate_ignore_rw (stderr)
drd/tests/annotate_ignore_rw2 (stderr)
drd/tests/annotate_ignore_write (stderr)
drd/tests/annotate_ignore_write2 (stderr)
drd/tests/annotate_order_1 (stderr)
drd/tests/annotate_order_2 (stderr)
drd/tests/annotate_order_3 (stderr)
drd/tests/annotate_rwlock (stderr)
drd/tests/annotate_smart_pointer (stderr)
drd/tests/annotate_smart_pointer2 (stderr)
drd/tests/annotate_spinlock (stderr)
drd/tests/annotate_static (stderr)
drd/tests/atomic_var (stderr)
drd/tests/bug-235681 (stderr)
drd/tests/circular_buffer (stderr)
drd/tests/fp_race (stderr)
drd/tests/fp_race2 (stderr)
drd/tests/fp_race_xml (stderr)
drd/tests/free_is_write (stderr)
drd/tests/free_is_write2 (stderr)
drd/tests/hg01_all_ok (stderr)
drd/tests/hg02_deadlock (stderr)
drd/tests/hg03_inherit (stderr)
drd/tests/hg04_race (stderr)
drd/tests/hg05_race2 (stderr)
drd/tests/hg06_readshared (stderr)
drd/tests/linuxthreads_det (stderr)
drd/tests/monitor_example (stderr)
drd/tests/pth_broadcast (stderr)
drd/tests/pth_cleanup_handler (stderr)
drd/tests/pth_cond_destroy_busy (stderr)
drd/tests/pth_cond_race (stderr)
drd/tests/pth_cond_race2 (stderr)
drd/tests/pth_cond_race3 (stderr)
drd/tests/pth_create_chain (stderr)
drd/tests/pth_detached3 (stderr)
drd/tests/pth_inconsistent_cond_wait (stderr)
drd/tests/pth_once (stderr)
drd/tests/read_and_free_race (stderr)
drd/tests/rwlock_race (stderr)
drd/tests/rwlock_test (stderr)
drd/tests/sem_open (stderr)
drd/tests/sem_open2 (stderr)
drd/tests/sem_open3 (stderr)
drd/tests/sem_open_traced (stderr)
drd/tests/sigalrm (stderr)
drd/tests/tc01_simple_race (stderr)
drd/tests/tc02_simple_tls (stderr)
drd/tests/tc03_re_excl (stderr)
drd/tests/tc05_simple_race (stderr)
drd/tests/tc06_two_races (stderr)
drd/tests/tc07_hbl1 (stderr)
drd/tests/tc08_hbl2 (stderr)
drd/tests/tc09_bad_unlock (stderr)
drd/tests/tc11_XCHG (stderr)
drd/tests/tc16_byterace (stderr)
drd/tests/tc17_sembar (stderr)
drd/tests/tc19_shadowmem (stderr)
drd/tests/tc21_pthonce (stderr)
drd/tests/tc23_bogus_condwait (stderr)
drd/tests/thread_name (stderr)
drd/tests/thread_name_xml (stderr)
drd/tests/threaded-fork (stderr)
drd/tests/unit_bitmap (stderr)
drd/tests/unit_vc (stderr)
=================================================
./valgrind-new/drd/tests/annotate_barrier.stderr.diff
=================================================
--- annotate_barrier.stderr.exp 2013-03-26 23:56:40.000000000 -0500
+++ annotate_barrier.stderr.out 2013-03-27 00:14:32.000000000 -0500
@@ -37,6 +37,117 @@
by 0x........: vgDrd_thread_wrapper (drd_pthread_intercepts.c:?)
Thread 1:
+Conflicting load by thread 1 at 0x........ size 4
+ at 0x........: ???
+ by 0x........: pthread_join$UNIX2003 (in /...libc...)
+ by 0x........: pthread_join (drd_pthread_intercepts.c:?)
+Allocation context: Data section of /usr/lib/libSystem.B.dylib
+
+Conflicting load by thread 1 at 0x........ size 4
+ at 0x........: new_sem_from_pool (in /...libc...)
+ by 0x........: pthread_join$UNIX2003 (in /...libc...)
+ by 0x........: pthread_join (drd_pthread_intercepts.c:?)
+Allocation context: Data section of /usr/lib/libSystem.B.dylib
+
+Conflicting load by thread 1 at 0x........ size 4
+ at 0x........: new_sem_from_pool (in /...libc...)
+ by 0x........: pthread_join$UNIX2003 (in /...libc...)
+ by 0x........: pthread_join (drd_pthread_intercepts.c:?)
+Allocation context: Data section of /usr/lib/libSystem.B.dylib
+
+Conflicting load by thread 1 at 0x........ size 4
+ at 0x........: new_sem_from_pool (in /...libc...)
+ by 0x........: pthread_join$UNIX2003 (in /...libc...)
+ by 0x........: pthread_join (drd_pthread_intercepts.c:?)
+Allocation context: Data section of /usr/lib/libSystem.B.dylib
+
+Conflicting load by thread 1 at 0x........ size 4
+ at 0x........: new_sem_from_pool (in /...libc...)
+ by 0x........: pthread_join$UNIX2003 (in /...libc...)
+ by 0x........: pthread_join (drd_pthread_intercepts.c:?)
+Address 0x........ is at offset 4 from 0x......... Allocation context:
+ at 0x........: malloc (vg_replace_malloc.c:...)
+ by 0x........: realloc (vg_replace_malloc.c:...)
+ by 0x........: new_sem_from_pool (in /...libc...)
+
+Conflicting store by thread 1 at 0x........ size 4
+ at 0x........: new_sem_from_pool (in /...libc...)
+ by 0x........: pthread_join$UNIX2003 (in /...libc...)
+ by 0x........: pthread_join (drd_pthread_intercepts.c:?)
+Allocation context: Data section of /usr/lib/libSystem.B.dylib
+
+Conflicting load by thread 1 at 0x........ size 4
+ at 0x........: ???
+ by 0x........: pthread_join$UNIX2003 (in /...libc...)
+ by 0x........: pthread_join (drd_pthread_intercepts.c:?)
+Allocation context: Data section of /usr/lib/libSystem.B.dylib
+
+Conflicting load by thread 1 at 0x........ size 4
+ at 0x........: restore_sem_to_pool (in /...libc...)
+ by 0x........: pthread_join$UNIX2003 (in /...libc...)
+ by 0x........: pthread_join (drd_pthread_intercepts.c:?)
+Allocation context: Data section of /usr/lib/libSystem.B.dylib
+
+Conflicting store by thread 1 at 0x........ size 4
+ at 0x........: restore_sem_to_pool (in /...libc...)
+ by 0x........: pthread_join$UNIX2003 (in /...libc...)
+ by 0x........: pthread_join (drd_pthread_intercepts.c:?)
+Allocation context: Data section of /usr/lib/libSystem.B.dylib
+
+Conflicting load by thread 1 at 0x........ size 4
+ at 0x........: restore_sem_to_pool (in /...libc...)
+ by 0x........: pthread_join$UNIX2003 (in /...libc...)
+ by 0x........: pthread_join (drd_pthread_intercepts.c:?)
+Allocation context: Data section of /usr/lib/libSystem.B.dylib
+
+Conflicting store by thread 1 at 0x........ size 4
+ at 0x........: restore_sem_to_pool (in /...libc...)
+ by 0x........: pthread_join$UNIX2003 (in /...libc...)
+ by 0x........: pthread_join (drd_pthread_intercepts.c:?)
+Address 0x........ is at offset 4 from 0x......... Allocation context:
+ at 0x........: malloc (vg_replace_malloc.c:...)
+ by 0x........: realloc (vg_replace_malloc.c:...)
+ by 0x........: new_sem_from_pool (in /...libc...)
+
+Conflicting load by thread 1 at 0x........ size 4
+ at 0x........: ???
+ by 0x........: pthread_join$UNIX2003 (in /...libc...)
+ by 0x........: pthread_join (drd_pthread_intercepts.c:?)
+Allocation context: Data section of /usr/lib/libSystem.B.dylib
+
+Conflicting load by thread 1 at 0x........ size 4
+ at 0x........: restore_sem_to_pool (in /...libc...)
+ by 0x........: pthread_join$UNIX2003 (in /...libc...)
+ by 0x........: pthread_join (drd_pthread_intercepts.c:?)
+Allocation context: Data section of /usr/lib/libSystem.B.dylib
+
+Conflicting store by thread 1 at 0x........ size 4
+ at 0x........: restore_sem_to_pool (in /...libc...)
+ by 0x........: pthread_join$UNIX2003 (in /...libc...)
+ by 0x........: pthread_join (drd_pthread_intercepts.c:?)
+Allocation context: Data section of /usr/lib/libSystem.B.dylib
+
+Conflicting load by thread 1 at 0x........ size 4
+ at 0x........: restore_sem_to_pool (in /...libc...)
+ by 0x........: pthread_join$UNIX2003 (in /...libc...)
+ by 0x........: pthread_join (drd_pthread_intercepts.c:?)
<truncated beyond 100 lines>
=================================================
./valgrind-new/drd/tests/annotate_barrier_xml.stderr.diff
=================================================
--- annotate_barrier_xml.stderr.exp 2013-03-26 23:56:40.000000000 -0500
+++ annotate_barrier_xml.stderr.out 2013-03-27 00:14:33.000000000 -0500
@@ -188,7 +188,7 @@
<frame>
<ip>0x........</ip>
<obj>...</obj>
- <fn>start_thread</fn>
+ <fn>_pthread_start</fn>
</frame>
</stack>
<auxwhat>Address 0x........ is at offset 0 from 0x.........</auxwhat>
@@ -258,6 +258,549 @@
<error>
<unique>0x........</unique>
<tid>...</tid>
+ <kind>ConflictingAccess</kind>
+ <what>Conflicting load by thread 1 at 0x........ size 4</what>
+ <stack>
+ <frame>
+ <ip>0x........</ip>
+ </frame>
+ <frame>
+ <ip>0x........</ip>
+ <obj>...</obj>
+ <fn>pthread_join$UNIX2003</fn>
+ </frame>
+ <frame>
+ <ip>0x........</ip>
+ <obj>...</obj>
+ <fn>pthread_join$*</fn>
+ <dir>...</dir>
+ <file>drd_pthread_intercepts.c</file>
+ <line>...</line>
+ </frame>
+ </stack>
+ <auxwhat>Allocation context: Data section of /usr/lib/libSystem.B.dylib</auxwhat>
+</error>
+
+<error>
+ <unique>0x........</unique>
+ <tid>...</tid>
+ <kind>ConflictingAccess</kind>
+ <what>Conflicting load by thread 1 at 0x........ size 4</what>
+ <stack>
+ <frame>
+ <ip>0x........</ip>
+ <obj>...</obj>
+ <fn>new_sem_from_pool</fn>
+ </frame>
+ <frame>
+ <ip>0x........</ip>
+ <obj>...</obj>
+ <fn>pthread_join$UNIX2003</fn>
+ </frame>
+ <frame>
+ <ip>0x........</ip>
+ <obj>...</obj>
+ <fn>pthread_join$*</fn>
+ <dir>...</dir>
+ <file>drd_pthread_intercepts.c</file>
+ <line>...</line>
+ </frame>
+ </stack>
+ <auxwhat>Allocation context: Data section of /usr/lib/libSystem.B.dylib</auxwhat>
+</error>
+
+<error>
+ <unique>0x........</unique>
+ <tid>...</tid>
+ <kind>ConflictingAccess</kind>
+ <what>Conflicting load by thread 1 at 0x........ size 4</what>
+ <stack>
+ <frame>
+ <ip>0x........</ip>
+ <obj>...</obj>
+ <fn>new_sem_from_pool</fn>
+ </frame>
+ <frame>
+ <ip>0x........</ip>
+ <obj>...</obj>
+ <fn>pthread_join$UNIX2003</fn>
+ </frame>
+ <frame>
+ <ip>0x........</ip>
+ <obj>...</obj>
+ <fn>pthread_join$*</fn>
+ <dir>...</dir>
+ <file>drd_pthread_intercepts.c</file>
+ <line>...</line>
+ </frame>
+ </stack>
+ <auxwhat>Allocation context: Data section of /usr/lib/libSystem.B.dylib</auxwhat>
+</error>
+
+<error>
+ <unique>0x........</unique>
+ <tid>...</tid>
+ <kind>ConflictingAccess</kind>
+ <what>Conflicting load by thread 1 at 0x........ size 4</what>
+ <stack>
<truncated beyond 100 lines>
=================================================
./valgrind-new/drd/tests/annotate_hb_race.stderr.diff
=================================================
--- annotate_hb_race.stderr.exp 2013-03-26 23:56:40.000000000 -0500
+++ annotate_hb_race.stderr.out 2013-03-27 00:14:34.000000000 -0500
@@ -3,6 +3,60 @@
at 0x........: main (annotate_hb_race.c:?)
Allocation context: BSS section of annotate_hb_race
+Conflicting load by thread x at 0x........ size 4
+ at 0x........: ???
+ by 0x........: pthread_join$UNIX2003 (in /...libc...)
+ by 0x........: pthread_join (drd_pthread_intercepts.c:?)
+ by 0x........: main (annotate_hb_race.c:?)
+Allocation context: Data section of /usr/lib/libSystem.B.dylib
+
+Conflicting load by thread x at 0x........ size 4
+ at 0x........: ???
+ by 0x........: pthread_join$UNIX2003 (in /...libc...)
+ by 0x........: pthread_join (drd_pthread_intercepts.c:?)
+ by 0x........: main (annotate_hb_race.c:?)
+Allocation context: Data section of /usr/lib/libSystem.B.dylib
+
+Conflicting load by thread x at 0x........ size 4
+ at 0x........: restore_sem_to_pool (in /...libc...)
+ by 0x........: pthread_join$UNIX2003 (in /...libc...)
+ by 0x........: pthread_join (drd_pthread_intercepts.c:?)
+ by 0x........: main (annotate_hb_race.c:?)
+Allocation context: Data section of /usr/lib/libSystem.B.dylib
+
+Conflicting store by thread x at 0x........ size 4
+ at 0x........: restore_sem_to_pool (in /...libc...)
+ by 0x........: pthread_join$UNIX2003 (in /...libc...)
+ by 0x........: pthread_join (drd_pthread_intercepts.c:?)
+ by 0x........: main (annotate_hb_race.c:?)
+Allocation context: Data section of /usr/lib/libSystem.B.dylib
+
+Conflicting load by thread x at 0x........ size 4
+ at 0x........: restore_sem_to_pool (in /...libc...)
+ by 0x........: pthread_join$UNIX2003 (in /...libc...)
+ by 0x........: pthread_join (drd_pthread_intercepts.c:?)
+ by 0x........: main (annotate_hb_race.c:?)
+Allocation context: Data section of /usr/lib/libSystem.B.dylib
+
+Conflicting store by thread x at 0x........ size 4
+ at 0x........: restore_sem_to_pool (in /...libc...)
+ by 0x........: pthread_join$UNIX2003 (in /...libc...)
+ by 0x........: pthread_join (drd_pthread_intercepts.c:?)
+ by 0x........: main (annotate_hb_race.c:?)
+Address 0x........ is at offset 4 from 0x......... Allocation context:
+ at 0x........: malloc (vg_replace_malloc.c:...)
+ by 0x........: realloc (vg_replace_malloc.c:...)
+ by 0x........: new_sem_from_pool (in /...libc...)
+ by 0x........: _pthread_exit (in /...libc...)
+ by 0x........: thread_start (in /...libc...)
+
+Conflicting load by thread x at 0x........ size 4
+ at 0x........: ???
+ by 0x........: pthread_join$UNIX2003 (in /...libc...)
+ by 0x........: pthread_join (drd_pthread_intercepts.c:?)
+ by 0x........: main (annotate_hb_race.c:?)
+Allocation context: Data section of /usr/lib/libSystem.B.dylib
+
Done.
-ERROR SUMMARY: 1 errors from 1 contexts (suppressed: 0 from 0)
+ERROR SUMMARY: 8 errors from 8 contexts (suppressed: 0 from 0)
=================================================
./valgrind-new/drd/tests/annotate_hbefore.stderr.diff
=================================================
--- annotate_hbefore.stderr.exp 2013-03-26 23:56:40.000000000 -0500
+++ annotate_hbefore.stderr.out 2013-03-27 00:14:36.000000000 -0500
@@ -1,3 +1,44 @@
+Conflicting load by thread 1 at 0x........ size 4
+ at 0x........: ???
+ by 0x........: pthread_join$UNIX2003 (in /...libc...)
+ by 0x........: pthread_join (drd_pthread_intercepts.c:?)
+ by 0x........: main (annotate_hbefore.c:?)
+Allocation context: Data section of /usr/lib/libSystem.B.dylib
-ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 0 from 0)
+Conflicting load by thread 1 at 0x........ size 4
+ at 0x........: restore_sem_to_pool (in /...libc...)
+ by 0x........: pthread_join$UNIX2003 (in /...libc...)
+ by 0x........: pthread_join (drd_pthread_intercepts.c:?)
+ by 0x........: main (annotate_hbefore.c:?)
+Allocation context: Data section of /usr/lib/libSystem.B.dylib
+
+Conflicting store by thread 1 at 0x........ size 4
+ at 0x........: restore_sem_to_pool (in /...libc...)
+ by 0x........: pthread_join$UNIX2003 (in /...libc...)
+ by 0x........: pthread_join (drd_pthread_intercepts.c:?)
+ by 0x........: main (annotate_hbefore.c:?)
+Allocation context: Data section of /usr/lib/libSystem.B.dylib
+
+Conflicting store by thread 1 at 0x........ size 4
+ at 0x........: restore_sem_to_pool (in /...libc...)
+ by 0x........: pthread_join$UNIX2003 (in /...libc...)
+ by 0x........: pthread_join (drd_pthread_intercepts.c:?)
+ by 0x........: main (annotate_hbefore.c:?)
+Address 0x........ is at offset 4 from 0x......... Allocation context:
+ at 0x........: malloc (vg_replace_malloc.c:...)
+ by 0x........: realloc (vg_replace_malloc.c:...)
+ by 0x........: new_sem_from_pool (in /...libc...)
+ by 0x........: pthread_join$UNIX2003 (in /...libc...)
+ by 0x........: pthread_join (drd_pthread_intercepts.c:?)
+ by 0x........: main (annotate_hbefore.c:?)
+
+Conflicting load by thread 1 at 0x........ size 4
+ at 0x........: ???
+ by 0x........: pthread_join$UNIX2003 (in /...libc...)
+ by 0x........: pthread_join (drd_pthread_intercepts.c:?)
+ by 0x........: main (annotate_hbefore.c:?)
+Allocation context: Data section of /usr/lib/libSystem.B.dylib
+
+
+ERROR SUMMARY: 5 errors from 5 contexts (suppressed: 0 from 0)
=================================================
./valgrind-new/drd/tests/annotate_ignore_read.stderr.diff
=================================================
--- annotate_ignore_read.stderr.exp 2013-03-26 23:56:40.000000000 -0500
+++ annotate_ignore_read.stderr.out 2013-03-27 00:14:38.000000000 -0500
@@ -1,6 +1,88 @@
FLAGS [phb=1, fm=0]
test69: negative
+Conflicting load by thread x at 0x........ size 4
+ at 0x........: ???
+ by 0x........: pthread_join$UNIX2003 (in /...libc...)
+ by 0x........: pthread_join (drd_pthread_intercepts.c:?)
+ by 0x........: MyThread::Join() (tsan_thread_wrappers_pthread.h:?)
+ by 0x........: MyThreadArray::Join() (tsan_unittest.cpp:?)
+ by 0x........: test69::Run() (tsan_unittest.cpp:?)
+ by 0x........: Test::Run() (tsan_unittest.cpp:?)
+ by 0x........: main (tsan_unittest.cpp:?)
+Allocation context: Data section of /usr/lib/libSystem.B.dylib
+
+Conflicting load by thread x at 0x........ size 4
+ at 0x........: ???
+ by 0x........: pthread_join$UNIX2003 (in /...libc...)
+ by 0x........: pthread_join (drd_pthread_intercepts.c:?)
+ by 0x........: MyThread::Join() (tsan_thread_wrappers_pthread.h:?)
+ by 0x........: MyThreadArray::Join() (tsan_unittest.cpp:?)
+ by 0x........: test69::Run() (tsan_unittest.cpp:?)
+ by 0x........: Test::Run() (tsan_unittest.cpp:?)
+ by 0x........: main (tsan_unittest.cpp:?)
+Allocation context: Data section of /usr/lib/libSystem.B.dylib
+
+Conflicting load by thread x at 0x........ size 4
+ at 0x........: restore_sem_to_pool (in /...libc...)
+ by 0x........: pthread_join$UNIX2003 (in /...libc...)
+ by 0x........: pthread_join (drd_pthread_intercepts.c:?)
+ by 0x........: MyThread::Join() (tsan_thread_wrappers_pthread.h:?)
+ by 0x........: MyThreadArray::Join() (tsan_unittest.cpp:?)
+ by 0x........: test69::Run() (tsan_unittest.cpp:?)
+ by 0x........: Test::Run() (tsan_unittest.cpp:?)
+ by 0x........: main (tsan_unittest.cpp:?)
+Allocation context: Data section of /usr/lib/libSystem.B.dylib
+
+Conflicting store by thread x at 0x........ size 4
+ at 0x........: restore_sem_to_pool (in /...libc...)
+ by 0x........: pthread_join$UNIX2003 (in /...libc...)
+ by 0x........: pthread_join (drd_pthread_intercepts.c:?)
+ by 0x........: MyThread::Join() (tsan_thread_wrappers_pthread.h:?)
+ by 0x........: MyThreadArray::Join() (tsan_unittest.cpp:?)
+ by 0x........: test69::Run() (tsan_unittest.cpp:?)
+ by 0x........: Test::Run() (tsan_unittest.cpp:?)
+ by 0x........: main (tsan_unittest.cpp:?)
+Allocation context: Data section of /usr/lib/libSystem.B.dylib
+
+Conflicting load by thread x at 0x........ size 4
+ at 0x........: restore_sem_to_pool (in /...libc...)
+ by 0x........: pthread_join$UNIX2003 (in /...libc...)
+ by 0x........: pthread_join (drd_pthread_intercepts.c:?)
+ by 0x........: MyThread::Join() (tsan_thread_wrappers_pthread.h:?)
+ by 0x........: MyThreadArray::Join() (tsan_unittest.cpp:?)
+ by 0x........: test69::Run() (tsan_unittest.cpp:?)
+ by 0x........: Test::Run() (tsan_unittest.cpp:?)
+ by 0x........: main (tsan_unittest.cpp:?)
+Allocation context: Data section of /usr/lib/libSystem.B.dylib
+
+Conflicting store by thread x at 0x........ size 4
+ at 0x........: restore_sem_to_pool (in /...libc...)
+ by 0x........: pthread_join$UNIX2003 (in /...libc...)
+ by 0x........: pthread_join (drd_pthread_intercepts.c:?)
+ by 0x........: MyThread::Join() (tsan_thread_wrappers_pthread.h:?)
+ by 0x........: MyThreadArray::Join() (tsan_unittest.cpp:?)
+ by 0x........: test69::Run() (tsan_unittest.cpp:?)
+ by 0x........: Test::Run() (tsan_unittest.cpp:?)
+ by 0x........: main (tsan_unittest.cpp:?)
+Address 0x........ is at offset 12 from 0x......... Allocation context:
+ at 0x........: malloc (vg_replace_malloc.c:...)
+ by 0x........: realloc (vg_replace_malloc.c:...)
+ by 0x........: new_sem_from_pool (in /...libc...)
+ by 0x........: _pthread_exit (in /...libc...)
+ by 0x........: thread_start (in /...libc...)
+
+Conflicting load by thread x at 0x........ size 4
+ at 0x........: ???
+ by 0x........: pthread_join$UNIX2003 (in /...libc...)
+ by 0x........: pthread_join (drd_pthread_intercepts.c:?)
+ by 0x........: MyThread::Join() (tsan_thread_wrappers_pthread.h:?)
+ by 0x........: MyThreadArray::Join() (tsan_unittest.cpp:?)
+ by 0x........: test69::Run() (tsan_unittest.cpp:?)
+ by 0x........: Test::Run() (tsan_unittest.cpp:?)
+ by 0x........: main (tsan_unittest.cpp:?)
+Allocation context: Data section of /usr/lib/libSystem.B.dylib
+
GLOB=30
-ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 0 from 0)
+ERROR SUMMARY: 7 errors from 7 contexts (suppressed: 0 from 0)
=================================================
./valgrind-new/drd/tests/annotate_ignore_rw.stderr.diff
=================================================
--- annotate_ignore_rw.stderr.exp 2013-03-26 23:56:40.000000000 -0500
+++ annotate_ignore_rw.stderr.out 2013-03-27 00:14:40.000000000 -0500
@@ -4,6 +4,60 @@
Location 0x........ is 0 bytes inside global var "s_c"
declared at annotate_ignore_rw.c:12
+Conflicting load by thread 1 at 0x........ size 4
+ at 0x........: ???
+ by 0x........: pthread_join$UNIX2003 (in /...libc...)
+ by 0x........: pthread_join (drd_pthread_intercepts.c:?)
+ by 0x........: main (annotate_ignore_rw.c:?)
+Allocation context: Data section of /usr/lib/libSystem.B.dylib
+
+Conflicting load by thread 1 at 0x........ size 4
+ at 0x........: ???
+ by 0x........: pthread_join$UNIX2003 (in /...libc...)
+ by 0x........: pthread_join (drd_pthread_intercepts.c:?)
+ by 0x........: main (annotate_ignore_rw.c:?)
+Allocation context: Data section of /usr/lib/libSystem.B.dylib
+
+Conflicting load by thread 1 at 0x........ size 4
+ at 0x........: restore_sem_to_pool (in /...libc...)
+ by 0x........: pthread_join$UNIX2003 (in /...libc...)
+ by 0x........: pthread_join (drd_pthread_intercepts.c:?)
+ by 0x........: main (annotate_ignore_rw.c:?)
+Allocation context: Data section of /usr/lib/libSystem.B.dylib
+
+Conflicting store by thread 1 at 0x........ size 4
+ at 0x........: restore_sem_to_pool (in /...libc...)
+ by 0x........: pthread_join$UNIX2003 (in /...libc...)
+ by 0x........: pthread_join (drd_pthread_intercepts.c:?)
+ by 0x........: main (annotate_ignore_rw.c:?)
+Allocation context: Data section of /usr/lib/libSystem.B.dylib
+
+Conflicting load by thread 1 at 0x........ size 4
+ at 0x........: restore_sem_to_pool (in /...libc...)
+ by 0x........: pthread_join$UNIX2003 (in /...libc...)
+ by 0x........: pthread_join (drd_pthread_intercepts.c:?)
+ by 0x........: main (annotate_ignore_rw.c:?)
+Allocation context: Data section of /usr/lib/libSystem.B.dylib
+
+Conflicting store by thread 1 at 0x........ size 4
+ at 0x........: restore_sem_to_pool (in /...libc...)
+ by 0x........: pthread_join$UNIX2003 (in /...libc...)
+ by 0x........: pthread_join (drd_pthread_intercepts.c:?)
+ by 0x........: main (annotate_ignore_rw.c:?)
+Address 0x........ is at offset 0 from 0x......... Allocation context:
+ at 0x........: malloc (vg_replace_malloc.c:...)
+ by 0x........: realloc (vg_replace_malloc.c:...)
+ by 0x........: new_sem_from_pool (in /...libc...)
+ by 0x........: _pthread_exit (in /...libc...)
+ by 0x........: thread_start (in /...libc...)
+
+Conflicting load by thread 1 at 0x........ size 4
+ at 0x........: ???
+ by 0x........: pthread_join$UNIX2003 (in /...libc...)
+ by 0x........: pthread_join (drd_pthread_intercepts.c:?)
+ by 0x........: main (annotate_ignore_rw.c:?)
+Allocation context: Data section of /usr/lib/libSystem.B.dylib
+
Finished.
-ERROR SUMMARY: 1 errors from 1 contexts (suppressed: 0 from 0)
+ERROR SUMMARY: 8 errors from 8 contexts (suppressed: 0 from 0)
=================================================
./valgrind-new/drd/tests/annotate_ignore_rw2.stderr.diff
=================================================
--- annotate_ignore_rw2.stderr.exp 2013-03-26 23:56:40.000000000 -0500
+++ annotate_ignore_rw2.stderr.out 2013-03-27 00:14:42.000000000 -0500
@@ -14,6 +14,60 @@
Location 0x........ is 0 bytes inside global var "s_c"
declared at annotate_ignore_rw.c:12
+Conflicting load by thread 1 at 0x........ size 4
+ at 0x........: ???
+ by 0x........: pthread_join$UNIX2003 (in /...libc...)
+ by 0x........: pthread_join (drd_pthread_intercepts.c:?)
+ by 0x........: main (annotate_ignore_rw.c:?)
+Allocation context: Data section of /usr/lib/libSystem.B.dylib
+
+Conflicting load by thread 1 at 0x........ size 4
+ at 0x........: ???
+ by 0x........: pthread_join$UNIX2003 (in /...libc...)
+ by 0x........: pthread_join (drd_pthread_intercepts.c:?)
+ by 0x........: main (annotate_ignore_rw.c:?)
+Allocation context: Data section of /usr/lib/libSystem.B.dylib
+
+Conflicting load by thread 1 at 0x........ size 4
+ at 0x........: restore_sem_to_pool (in /...libc...)
+ by 0x........: pthread_join$UNIX2003 (in /...libc...)
+ by 0x........: pthread_join (drd_pthread_intercepts.c:?)
+ by 0x........: main (annotate_ignore_rw.c:?)
+Allocation context: Data section of /usr/lib/libSystem.B.dylib
+
+Conflicting store by thread 1 at 0x........ size 4
+ at 0x........: restore_sem_to_pool (in /...libc...)
+ by 0x........: pthread_join$UNIX2003 (in /...libc...)
+ by 0x........: pthread_join (drd_pthread_intercepts.c:?)
+ by 0x........: main (annotate_ignore_rw.c:?)
+Allocation context: Data section of /usr/lib/libSystem.B.dylib
+
+Conflicting load by thread 1 at 0x........ size 4
+ at 0x........: restore_sem_to_pool (in /...libc...)
+ by 0x........: pthread_join$UNIX2003 (in /...libc...)
+ by 0x........: pthread_join (drd_pthread_intercepts.c:?)
+ by 0x........: main (annotate_ignore_rw.c:?)
+Allocation context: Data section of /usr/lib/libSystem.B.dylib
+
+Conflicting store by thread 1 at 0x........ size 4
+ at 0x........: restore_sem_to_pool (in /...libc...)
+ by 0x........: pthread_join$UNIX2003 (in /...libc...)
+ by 0x........: pthread_join (drd_pthread_intercepts.c:?)
+ by 0x........: main (annotate_ignore_rw.c:?)
+Address 0x........ is at offset 0 from 0x......... Allocation context:
+ at 0x........: malloc (vg_replace_malloc.c:...)
+ by 0x........: realloc (vg_replace_malloc.c:...)
+ by 0x........: new_sem_from_pool (in /...libc...)
+ by 0x........: _pthread_exit (in /...libc...)
+ by 0x........: thread_start (in /...libc...)
+
+Conflicting load by thread 1 at 0x........ size 4
+ at 0x........: ???
+ by 0x........: pthread_join$UNIX2003 (in /...libc...)
+ by 0x........: pthread_join (drd_pthread_intercepts.c:?)
+ by 0x........: main (annotate_ignore_rw.c:?)
+Allocation context: Data section of /usr/lib/libSystem.B.dylib
+
Finished.
-ERROR SUMMARY: 3 errors from 3 contexts (suppressed: 0 from 0)
+ERROR SUMMARY: 10 errors from 10 contexts (suppressed: 0 from 0)
=================================================
./valgrind-new/drd/tests/annotate_ignore_write.stderr.diff
=================================================
--- annotate_ignore_write.stderr.exp 2013-03-26 23:56:40.000000000 -0500
+++ annotate_ignore_write.stderr.out 2013-03-27 00:14:43.000000000 -0500
@@ -14,6 +14,60 @@
Location 0x........ is 0 bytes inside global var "s_a"
declared at annotate_ignore_write.c:10
+Conflicting load by thread 1 at 0x........ size 4
+ at 0x........: ???
+ by 0x........: pthread_join$UNIX2003 (in /...libc...)
+ by 0x........: pthread_join (drd_pthread_intercepts.c:?)
+ by 0x........: main (annotate_ignore_write.c:?)
+Allocation context: Data section of /usr/lib/libSystem.B.dylib
+
+Conflicting load by thread 1 at 0x........ size 4
+ at 0x........: ???
+ by 0x........: pthread_join$UNIX2003 (in /...libc...)
+ by 0x........: pthread_join (drd_pthread_intercepts.c:?)
+ by 0x........: main (annotate_ignore_write.c:?)
+Allocation context: Data section of /usr/lib/libSystem.B.dylib
+
+Conflicting load by thread 1 at 0x........ size 4
+ at 0x........: restore_sem_to_pool (in /...libc...)
+ by 0x........: pthread_join$UNIX2003 (in /...libc...)
+ by 0x........: pthread_join (drd_pthread_intercepts.c:?)
+ by 0x........: main (annotate_ignore_write.c:?)
+Allocation context: Data section of /usr/lib/libSystem.B.dylib
+
+Conflicting store by thread 1 at 0x........ size 4
+ at 0x........: restore_sem_to_pool (in /...libc...)
+ by 0x........: pthread_join$UNIX2003 (in /...libc...)
+ by 0x........: pthread_join (drd_pthread_intercepts.c:?)
+ by 0x........: main (annotate_ignore_write.c:?)
+Allocation context: Data section of /usr/lib/libSystem.B.dylib
+
+Conflicting load by thread 1 at 0x........ size 4
+ at 0x........: restore_sem_to_pool (in /...libc...)
+ by 0x........: pthread_join$UNIX2003 (in /...libc...)
+ by 0x........: pthread_join (drd_pthread_intercepts.c:?)
+ by 0x........: main (annotate_ignore_write.c:?)
+Allocation context: Data section of /usr/lib/libSystem.B.dylib
+
+Conflicting store by thread 1 at 0x........ size 4
+ at 0x........: restore_sem_to_pool (in /...libc...)
+ by 0x........: pthread_join$UNIX2003 (in /...libc...)
+ by 0x........: pthread_join (drd_pthread_intercepts.c:?)
+ by 0x........: main (annotate_ignore_write.c:?)
+Address 0x........ is at offset 0 from 0x......... Allocation context:
+ at 0x........: malloc (vg_replace_malloc.c:...)
+ by 0x........: realloc (vg_replace_malloc.c:...)
+ by 0x........: new_sem_from_pool (in /...libc...)
+ by 0x........: _pthread_exit (in /...libc...)
+ by 0x........: thread_start (in /...libc...)
+
+Conflicting load by thread 1 at 0x........ size 4
+ at 0x........: ???
+ by 0x........: pthread_join$UNIX2003 (in /...libc...)
+ by 0x........: pthread_join (drd_pthread_intercepts.c:?)
+ by 0x........: main (annotate_ignore_write.c:?)
+Allocation context: Data section of /usr/lib/libSystem.B.dylib
+
Finished.
-ERROR SUMMARY: 3 errors from 3 contexts (suppressed: 0 from 0)
+ERROR SUMMARY: 10 errors from 10 contexts (suppressed: 0 from 0)
=================================================
./valgrind-new/drd/tests/annotate_ignore_write2.stderr.diff
=================================================
--- annotate_ignore_write2.stderr.exp 2013-03-26 23:56:40.000000000 -0500
+++ annotate_ignore_write2.stderr.out 2013-03-27 00:14:44.000000000 -0500
@@ -19,6 +19,60 @@
Location 0x........ is 0 bytes inside global var "s_a"
declared at annotate_ignore_write.c:10
+Conflicting load by thread 1 at 0x........ size 4
+ at 0x........: ???
+ by 0x........: pthread_join$UNIX2003 (in /...libc...)
+ by 0x........: pthread_join (drd_pthread_intercepts.c:?)
+ by 0x........: main (annotate_ignore_write.c:?)
+Allocation context: Data section of /usr/lib/libSystem.B.dylib
+
+Conflicting load by thread 1 at 0x........ size 4
+ at 0x........: ???
+ by 0x........: pthread_join$UNIX2003 (in /...libc...)
+ by 0x........: pthread_join (drd_pthread_intercepts.c:?)
+ by 0x........: main (annotate_ignore_write.c:?)
+Allocation context: Data section of /usr/lib/libSystem.B.dylib
+
+Conflicting load by thread 1 at 0x........ size 4
+ at 0x........: restore_sem_to_pool (in /...libc...)
+ by 0x........: pthread_join$UNIX2003 (in /...libc...)
+ by 0x........: pthread_join (drd_pthread_intercepts.c:?)
+ by 0x........: main (annotate_ignore_write.c:?)
+Allocation context: Data section of /usr/lib/libSystem.B.dylib
+
+Conflicting store by thread 1 at 0x........ size 4
+ at 0x........: restore_sem_to_pool (in /...libc...)
+ by 0x........: pthread_join$UNIX2003 (in /...libc...)
+ by 0x........: pthread_join (drd_pthread_intercepts.c:?)
+ by 0x........: main (annotate_ignore_write.c:?)
+Allocation context: Data section of /usr/lib/libSystem.B.dylib
+
+Conflicting load by thread 1 at 0x........ size 4
+ at 0x........: restore_sem_to_pool (in /...libc...)
+ by 0x........: pthread_join$UNIX2003 (in /...libc...)
+ by 0x........: pthread_join (drd_pthread_intercepts.c:?)
+ by 0x........: main (annotate_ignore_write.c:?)
+Allocation context: Data section of /usr/lib/libSystem.B.dylib
+
+Conflicting store by thread 1 at 0x........ size 4
+ at 0x........: restore_sem_to_pool (in /...libc...)
+ by 0x........: pthread_join$UNIX2003 (in /...libc...)
+ by 0x........: pthread_join (drd_pthread_intercepts.c:?)
+ by 0x........: main (annotate_ignore_write.c:?)
+Address 0x........ is at offset 0 from 0x......... Allocation context:
+ at 0x........: malloc (vg_replace_malloc.c:...)
+ by 0x........: realloc (vg_replace_malloc.c:...)
+ by 0x........: new_sem_from_pool (in /...libc...)
+ by 0x........: _pthread_exit (in /...libc...)
+ by 0x........: thread_start (in /...libc...)
+
+Conflicting load by thread 1 at 0x........ size 4
+ at 0x........: ???
+ by 0x........: pthread_join$UNIX2003 (in /...libc...)
+ by 0x........: pthread_join (drd_pthread_intercepts.c:?)
+ by 0x........: main (annotate_ignore_write.c:?)
+Allocation context: Data section of /usr/lib/libSystem.B.dylib
+
Finished.
-ERROR SUMMARY: 4 errors from 4 contexts (suppressed: 0 from 0)
+ERROR SUMMARY: 11 errors from 11 contexts (suppressed: 0 from 0)
=================================================
./valgrind-new/drd/tests/annotate_order_1.stderr.diff
=================================================
--- annotate_order_1.stderr.exp 2013-03-26 23:56:40.000000000 -0500
+++ annotate_order_1.stderr.out 2013-03-27 00:14:45.000000000 -0500
@@ -1,6 +1,18 @@
FLAGS [phb=1, fm=0]
test03: negative
+Conflicting load by thread x at 0x........ size 4
+ at 0x........: ???
+ by 0x........: pthread_join$UNIX2003 (in /...libc...)
+ by 0x........: pthread_join (drd_pthread_intercepts.c:?)
+ by 0x........: MyThread::Join() (tsan_thread_wrappers_pthread.h:?)
+ by 0x........: ThreadPool::~ThreadPool() (tsan_thread_wrappers_pthread.h:?)
+ by 0x........: test03::Waiter() (tsan_unittest.cpp:?)
+ by 0x........: test03::Run() (tsan_unittest.cpp:?)
+ by 0x........: Test::Run() (tsan_unittest.cpp:?)
+ by 0x........: main (tsan_unittest.cpp:?)
+Allocation context: Data section of /usr/lib/libSystem.B.dylib
+
GLOB=2
-ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 0 from 0)
+ERROR SUMMARY: 1 errors from 1 contexts (suppressed: 0 from 0)
=================================================
./valgrind-new/drd/tests/annotate_order_2.stderr.diff
=================================================
--- annotate_order_2.stderr.exp 2013-03-26 23:56:40.000000000 -0500
+++ annotate_order_2.stderr.out 2013-03-27 00:14:47.000000000 -0500
@@ -1,6 +1,88 @@
FLAGS [phb=1, fm=0]
test30: negative
+Conflicting load by thread x at 0x........ size 4
+ at 0x........: ???
+ by 0x........: pthread_join$UNIX2003 (in /...libc...)
+ by 0x........: pthread_join (drd_pthread_intercepts.c:?)
+ by 0x........: MyThread::Join() (tsan_thread_wrappers_pthread.h:?)
+ by 0x........: MyThreadArray::Join() (tsan_unittest.cpp:?)
+ by 0x........: test30::Run() (tsan_unittest.cpp:?)
+ by 0x........: Test::Run() (tsan_unittest.cpp:?)
+ by 0x........: main (tsan_unittest.cpp:?)
+Allocation context: Data section of /usr/lib/libSystem.B.dylib
+
+Conflicting load by thread x at 0x........ size 4
+ at 0x........: ???
+ by 0x........: pthread_join$UNIX2003 (in /...libc...)
+ by 0x........: pthread_join (drd_pthread_intercepts.c:?)
+ by 0x........: MyThread::Join() (tsan_thread_wrappers_pthread.h:?)
+ by 0x........: MyThreadArray::Join() (tsan_unittest.cpp:?)
+ by 0x........: test30::Run() (tsan_unittest.cpp:?)
+ by 0x........: Test::Run() (tsan_unittest.cpp:?)
+ by 0x........: main (tsan_unittest.cpp:?)
+Allocation context: Data section of /usr/lib/libSystem.B.dylib
+
+Conflicting load by thread x at 0x........ size 4
+ at 0x........: restore_sem_to_pool (in /...libc...)
+ by 0x........: pthread_join$UNIX2003 (in /...libc...)
+ by 0x........: pthread_join (drd_pthread_intercepts.c:?)
+ by 0x........: MyThread::Join() (tsan_thread_wrappers_pthread.h:?)
+ by 0x........: MyThreadArray::Join() (tsan_unittest.cpp:?)
+ by 0x........: test30::Run() (tsan_unittest.cpp:?)
+ by 0x........: Test::Run() (tsan_unittest.cpp:?)
+ by 0x........: main (tsan_unittest.cpp:?)
+Allocation context: Data section of /usr/lib/libSystem.B.dylib
+
+Conflicting store by thread x at 0x........ size 4
+ at 0x........: restore_sem_to_pool (in /...libc...)
+ by 0x........: pthread_join$UNIX2003 (in /...libc...)
+ by 0x........: pthread_join (drd_pthread_intercepts.c:?)
+ by 0x........: MyThread::Join() (tsan_thread_wrappers_pthread.h:?)
+ by 0x........: MyThreadArray::Join() (tsan_unittest.cpp:?)
+ by 0x........: test30::Run() (tsan_unittest.cpp:?)
+ by 0x........: Test::Run() (tsan_unittest.cpp:?)
+ by 0x........: main (tsan_unittest.cpp:?)
+Allocation context: Data section of /usr/lib/libSystem.B.dylib
+
+Conflicting load by thread x at 0x........ size 4
+ at 0x........: restore_sem_to_pool (in /...libc...)
+ by 0x........: pthread_join$UNIX2003 (in /...libc...)
+ by 0x........: pthread_join (drd_pthread_intercepts.c:?)
+ by 0x........: MyThread::Join() (tsan_thread_wrappers_pthread.h:?)
+ by 0x........: MyThreadArray::Join() (tsan_unittest.cpp:?)
+ by 0x........: test30::Run() (tsan_unittest.cpp:?)
+ by 0x........: Test::Run() (tsan_unittest.cpp:?)
+ by 0x........: main (tsan_unittest.cpp:?)
+Allocation context: Data section of /usr/lib/libSystem.B.dylib
+
+Conflicting store by thread x at 0x........ size 4
+ at 0x........: restore_sem_to_pool (in /...libc...)
+ by 0x........: pthread_join$UNIX2003 (in /...libc...)
+ by 0x........: pthread_join (drd_pthread_intercepts.c:?)
+ by 0x........: MyThread::Join() (tsan_thread_wrappers_pthread.h:?)
+ by 0x........: MyThreadArray::Join() (tsan_unittest.cpp:?)
+ by 0x........: test30::Run() (tsan_unittest.cpp:?)
+ by 0x........: Test::Run() (tsan_unittest.cpp:?)
+ by 0x........: main (tsan_unittest.cpp:?)
+Address 0x........ is at offset 12 from 0x......... Allocation context:
+ at 0x........: malloc (vg_replace_malloc.c:...)
+ by 0x........: realloc (vg_replace_malloc.c:...)
+ by 0x........: new_sem_from_pool (in /...libc...)
+ by 0x........: _pthread_exit (in /...libc...)
+ by 0x........: thread_start (in /...libc...)
+
+Conflicting load by thread x at 0x........ size 4
+ at 0x........: ???
+ by 0x........: pthread_join$UNIX2003 (in /...libc...)
+ by 0x........: pthread_join (drd_pthread_intercepts.c:?)
+ by 0x........: MyThread::Join() (tsan_thread_wrappers_pthread.h:?)
+ by 0x........: MyThreadArray::Join() (tsan_unittest.cpp:?)
+ by 0x........: test30::Run() (tsan_unittest.cpp:?)
+ by 0x........: Test::Run() (tsan_unittest.cpp:?)
+ by 0x........: main (tsan_unittest.cpp:?)
+Allocation context: Data section of /usr/lib/libSystem.B.dylib
+
GLOB=47
-ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 0 from 0)
+ERROR SUMMARY: 7 errors from 7 contexts (suppressed: 0 from 0)
=================================================
./valgrind-new/drd/tests/annotate_order_3.stderr.diff
=================================================
--- annotate_order_3.stderr.exp 2013-03-26 23:56:40.000000000 -0500
+++ annotate_order_3.stderr.out 2013-03-27 00:14:48.000000000 -0500
@@ -1,6 +1,71 @@
FLAGS [phb=1, fm=0]
test31: negative
+Conflicting load by thread x at 0x........ size 4
+ at 0x........: ???
+ by 0x........: pthread_join$UNIX2003 (in /...libc...)
+ by 0x........: pthread_join (drd_pthread_intercepts.c:?)
+ by 0x........: MyThread::Join() (tsan_thread_wrappers_pthread.h:?)
+ by 0x........: MyThreadArray::Join() (tsan_unittest.cpp:?)
+ by 0x........: test31::Run() (tsan_unittest.cpp:?)
+ by 0x........: Test::Run() (tsan_unittest.cpp:?)
+ by 0x........: main (tsan_unittest.cpp:?)
+Allocation context: Data section of /usr/lib/libSystem.B.dylib
+
+Conflicting load by thread x at 0x........ size 4
+ at 0x........: restore_sem_to_pool (in /...libc...)
+ by 0x........: pthread_join$UNIX2003 (in /...libc...)
+ by 0x........: pthread_join (drd_pthread_intercepts.c:?)
+ by 0x........: MyThread::Join() (tsan_thread_wrappers_pthread.h:?)
+ by 0x........: MyThreadArray::Join() (tsan_unittest.cpp:?)
+ by 0x........: test31::Run() (tsan_unittest.cpp:?)
+ by 0x........: Test::Run() (tsan_unittest.cpp:?)
+ by 0x........: main (tsan_unittest.cpp:?)
+Allocation context: Data section of /usr/lib/libSystem.B.dylib
+
+Conflicting store by thread x at 0x........ size 4
+ at 0x........: restore_sem_to_pool (in /...libc...)
+ by 0x........: pthread_join$UNIX2003 (in /...libc...)
+ by 0x........: pthread_join (drd_pthread_intercepts.c:?)
+ by 0x........: MyThread::Join() (tsan_thread_wrappers_pthread.h:?)
+ by 0x........: MyThreadArray::Join() (tsan_unittest.cpp:?)
+ by 0x........: test31::Run() (tsan_unittest.cpp:?)
+ by 0x........: Test::Run() (tsan_unittest.cpp:?)
+ by 0x........: main (tsan_unittest.cpp:?)
+Allocation context: Data section of /usr/lib/libSystem.B.dylib
+
+Conflicting store by thread x at 0x........ size 4
+ at 0x........: restore_sem_to_pool (in /...libc...)
+ by 0x........: pthread_join$UNIX2003 (in /...libc...)
+ by 0x........: pthread_join (drd_pthread_intercepts.c:?)
+ by 0x........: MyThread::Join() (tsan_thread_wrappers_pthread.h:?)
+ by 0x........: MyThreadArray::Join() (tsan_unittest.cpp:?)
+ by 0x........: test31::Run() (tsan_unittest.cpp:?)
+ by 0x........: Test::Run() (tsan_unittest.cpp:?)
+ by 0x........: main (tsan_unittest.cpp:?)
+Address 0x........ is at offset 4 from 0x......... Allocation context:
+ at 0x........: malloc (vg_replace_malloc.c:...)
+ by 0x........: realloc (vg_replace_malloc.c:...)
+ by 0x........: new_sem_from_pool (in /...libc...)
+ by 0x........: pthread_join$UNIX2003 (in /...libc...)
+ by 0x........: pthread_join (drd_pthread_intercepts.c:?)
+ by 0x........: MyThread::Join() (tsan_thread_wrappers_pthread.h:?)
+ by 0x........: MyThreadArray::Join() (tsan_unittest.cpp:?)
+ by 0x........: test31::Run() (tsan_unittest.cpp:?)
+ by 0x........: Test::Run() (tsan_unittest.cpp:?)
+ by 0x........: main (tsan_unittest.cpp:?)
+
+Conflicting load by thread x at 0x........ size 4
+ at 0x........: ???
+ by 0x........: pthread_join$UNIX2003 (in /...libc...)
+ by 0x........: pthread_join (drd_pthread_intercepts.c:?)
+ by 0x........: MyThread::Join() (tsan_thread_wrappers_pthread.h:?)
+ by 0x........: MyThreadArray::Join() (tsan_unittest.cpp:?)
+ by 0x........: test31::Run() (tsan_unittest.cpp:?)
+ by 0x........: Test::Run() (tsan_unittest.cpp:?)
+ by 0x........: main (tsan_unittest.cpp:?)
+Allocation context: Data section of /usr/lib/libSystem.B.dylib
+
GLOB=48
-ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 0 from 0)
+ERROR SUMMARY: 5 errors from 5 contexts (suppressed: 0 from 0)
=================================================
./valgrind-new/drd/tests/annotate_rwlock.stderr.diff
=================================================
--- annotate_rwlock.stderr.exp 2013-03-26 23:56:40.000000000 -0500
+++ annotate_rwlock.stderr.out 2013-03-27 00:14:53.000000000 -0500
@@ -1,4 +1,58 @@
+Conflicting load by thread x at 0x........ size 4
+ at 0x........: ???
+ by 0x........: pthread_join$UNIX2003 (in /...libc...)
+ by 0x........: pthread_join (drd_pthread_intercepts.c:?)
+ by 0x........: main (annotate_rwlock.c:?)
+Allocation context: Data section of /usr/lib/libSystem.B.dylib
+
+Conflicting load by thread x at 0x........ size 4
+ at 0x........: ???
+ by 0x........: pthread_join$UNIX2003 (in /...libc...)
+ by 0x........: pthread_join (drd_pthread_intercepts.c:?)
+ by 0x........: main (annotate_rwlock.c:?)
+Allocation context: Data section of /usr/lib/libSystem.B.dylib
+
+Conflicting load by thread x at 0x........ size 4
+ at 0x........: restore_sem_to_pool (in /...libc...)
+ by 0x........: pthread_join$UNIX2003 (in /...libc...)
+ by 0x........: pthread_join (drd_pthread_intercepts.c:?)
+ by 0x........: main (annotate_rwlock.c:?)
+Allocation context: Data section of /usr/lib/libSystem.B.dylib
+
+Conflicting store by thread x at 0x........ size 4
+ at 0x........: restore_sem_to_pool (in /...libc...)
+ by 0x........: pthread_join$UNIX2003 (in /...libc...)
+ by 0x........: pthread_join (drd_pthread_intercepts.c:?)
+ by 0x........: main (annotate_rwlock.c:?)
+Allocation context: Data section of /usr/lib/libSystem.B.dylib
+
+Conflicting load by thread x at 0x........ size 4
+ at 0x........: restore_sem_to_pool (in /...libc...)
+ by 0x........: pthread_join$UNIX2003 (in /...libc...)
+ by 0x........: pthread_join (drd_pthread_intercepts.c:?)
+ by 0x........: main (annotate_rwlock.c:?)
+Allocation context: Data section of /usr/lib/libSystem.B.dylib
+
+Conflicting store by thread x at 0x........ size 4
+ at 0x........: restore_sem_to_pool (in /...libc...)
+ by 0x........: pthread_join$UNIX2003 (in /...libc...)
+ by 0x........: pthread_join (drd_pthread_intercepts.c:?)
+ by 0x........: main (annotate_rwlock.c:?)
+Address 0x........ is at offset 36 from 0x......... Allocation context:
+ at 0x........: malloc (vg_replace_malloc.c:...)
+ by 0x........: realloc (vg_replace_malloc.c:...)
+ by 0x........: new_sem_from_pool (in /...libc...)
+ by 0x........: _pthread_exit (in /...libc...)
+ by 0x........: thread_start (in /...libc...)
+
+Conflicting load by thread x at 0x........ size 4
+ at 0x........: ???
+ by 0x........: pthread_join$UNIX2003 (in /...libc...)
+ by 0x........: pthread_join (drd_pthread_intercepts.c:?)
+ by 0x........: main (annotate_rwlock.c:?)
+Allocation context: Data section of /usr/lib/libSystem.B.dylib
+
Finished.
-ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 0 from 0)
+ERROR SUMMARY: 7 errors from 7 contexts (suppressed: 0 from 0)
=================================================
./valgrind-new/drd/tests/annotate_smart_pointer.stderr.diff
=================================================
--- annotate_smart_pointer.stderr.exp 2013-03-26 23:56:40.000000000 -0500
+++ annotate_smart_pointer.stderr.out 2013-03-27 00:15:01.000000000 -0500
@@ -1,4 +1,64 @@
+Conflicting load by thread x at 0x........ size 4
+ at 0x........: ???
+ by 0x........: pthread_join$UNIX2003 (in /...libc...)
+ by 0x........: pthread_join (drd_pthread_intercepts.c:?)
+ by 0x........: Thread::Join() (annotate_smart_pointer.cpp:?)
+ by 0x........: main (annotate_smart_pointer.cpp:?)
+Allocation context: Data section of /usr/lib/libSystem.B.dylib
+
+Conflicting load by thread x at 0x........ size 4
+ at 0x........: ???
+ by 0x........: pthread_join$UNIX2003 (in /...libc...)
+ by 0x........: pthread_join (drd_pthread_intercepts.c:?)
+ by 0x........: Thread::Join() (annotate_smart_pointer.cpp:?)
+ by 0x........: main (annotate_smart_pointer.cpp:?)
+Allocation context: Data section of /usr/lib/libSystem.B.dylib
+
+Conflicting load by thread x at 0x........ size 4
+ at 0x........: restore_sem_to_pool (in /...libc...)
+ by 0x........: pthread_join$UNIX2003 (in /...libc...)
+ by 0x........: pthread_join (drd_pthread_intercepts.c:?)
+ by 0x........: Thread::Join() (annotate_smart_pointer.cpp:?)
+ by 0x........: main (annotate_smart_pointer.cpp:?)
+Allocation context: Data section of /usr/lib/libSystem.B.dylib
+
+Conflicting store by thread x at 0x........ size 4
+ at 0x........: restore_sem_to_pool (in /...libc...)
+ by 0x........: pthread_join$UNIX2003 (in /...libc...)
+ by 0x........: pthread_join (drd_pthread_intercepts.c:?)
+ by 0x........: Thread::Join() (annotate_smart_pointer.cpp:?)
+ by 0x........: main (annotate_smart_pointer.cpp:?)
+Allocation context: Data section of /usr/lib/libSystem.B.dylib
+
+Conflicting load by thread x at 0x........ size 4
+ at 0x........: restore_sem_to_pool (in /...libc...)
+ by 0x........: pthread_join$UNIX2003 (in /...libc...)
+ by 0x........: pthread_join (drd_pthread_intercepts.c:?)
+ by 0x........: Thread::Join() (annotate_smart_pointer.cpp:?)
+ by 0x........: main (annotate_smart_pointer.cpp:?)
+Allocation context: Data section of /usr/lib/libSystem.B.dylib
+
+Conflicting store by thread x at 0x........ size 4
+ at 0x........: restore_sem_to_pool (in /...libc...)
+ by 0x........: pthread_join$UNIX2003 (in /...libc...)
+ by 0x........: pthread_join (drd_pthread_intercepts.c:?)
+ by 0x........: Thread::Join() (annotate_smart_pointer.cpp:?)
+ by 0x........: main (annotate_smart_pointer.cpp:?)
+Address 0x........ is at offset 196 from 0x......... Allocation context:
+ at 0x........: realloc (vg_replace_malloc.c:...)
+ by 0x........: new_sem_from_pool (in /...libc...)
+ by 0x........: _pthread_exit (in /...libc...)
+ by 0x........: thread_start (in /...libc...)
+
+Conflicting load by thread x at 0x........ size 4
+ at 0x........: ???
+ by 0x........: pthread_join$UNIX2003 (in /...libc...)
+ by 0x........: pthread_join (drd_pthread_intercepts.c:?)
+ by 0x........: Thread::Join() (annotate_smart_pointer.cpp:?)
+ by 0x........: main (annotate_smart_pointer.cpp:?)
+Allocation context: Data section of /usr/lib/libSystem.B.dylib
+
Done.
-ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 0 from 0)
+ERROR SUMMARY: 7 errors from 7 contexts (suppressed: 0 from 0)
=================================================
./valgrind-new/drd/tests/annotate_smart_pointer2.stderr.diff
=================================================
--- annotate_smart_pointer2.stderr.exp 2013-03-26 23:56:40.000000000 -0500
+++ annotate_smart_pointer2.stderr.out 2013-03-27 00:15:02.000000000 -0500
@@ -5,9 +5,71 @@
by 0x........: smart_ptr<counter>::operator=(counter*) (annotate_smart_pointer.cpp:?)
by 0x........: main (annotate_smart_pointer.cpp:?)
Address 0x........ is at offset ... from 0x......... Allocation context:
- at 0x........: ...operator new... (vg_replace_malloc.c:...)
+ at 0x........: malloc (vg_replace_malloc.c:...)
+ by 0x........: operator new(unsigned long) (in /usr/lib/libstdc++.6.0.9.dylib)
by 0x........: main (annotate_smart_pointer.cpp:?)
+Conflicting load by thread x at 0x........ size 4
+ at 0x........: ???
+ by 0x........: pthread_join$UNIX2003 (in /...libc...)
+ by 0x........: pthread_join (drd_pthread_intercepts.c:?)
+ by 0x........: Thread::Join() (annotate_smart_pointer.cpp:?)
+ by 0x........: main (annotate_smart_pointer.cpp:?)
+Allocation context: Data section of /usr/lib/libSystem.B.dylib
+
+Conflicting load by thread x at 0x........ size 4
+ at 0x........: ???
+ by 0x........: pthread_join$UNIX2003 (in /...libc...)
+ by 0x........: pthread_join (drd_pthread_intercepts.c:?)
+ by 0x........: Thread::Join() (annotate_smart_pointer.cpp:?)
+ by 0x........: main (annotate_smart_pointer.cpp:?)
+Allocation context: Data section of /usr/lib/libSystem.B.dylib
+
+Conflicting load by thread x at 0x........ size 4
+ at 0x........: restore_sem_to_pool (in /...libc...)
+ by 0x........: pthread_join$UNIX2003 (in /...libc...)
+ by 0x........: pthread_join (drd_pthread_intercepts.c:?)
+ by 0x........: Thread::Join() (annotate_smart_pointer.cpp:?)
+ by 0x........: main (annotate_smart_pointer.cpp:?)
+Allocation context: Data section of /usr/lib/libSystem.B.dylib
+
+Conflicting store by thread x at 0x........ size 4
+ at 0x........: restore_sem_to_pool (in /...libc...)
+ by 0x........: pthread_join$UNIX2003 (in /...libc...)
+ by 0x........: pthread_join (drd_pthread_intercepts.c:?)
+ by 0x........: Thread::Join() (annotate_smart_pointer.cpp:?)
+ by 0x........: main (annotate_smart_pointer.cpp:?)
+Allocation context: Data section of /usr/lib/libSystem.B.dylib
+
+Conflicting load by thread x at 0x........ size 4
+ at 0x........: restore_sem_to_pool (in /...libc...)
+ by 0x........: pthread_join$UNIX2003 (in /...libc...)
+ by 0x........: pthread_join (drd_pthread_intercepts.c:?)
+ by 0x........: Thread::Join() (annotate_smart_pointer.cpp:?)
+ by 0x........: main (annotate_smart_pointer.cpp:?)
+Allocation context: Data section of /usr/lib/libSystem.B.dylib
+
+Conflicting store by thread x at 0x........ size 4
+ at 0x........: restore_sem_to_pool (in /...libc...)
+ by 0x........: pthread_join$UNIX2003 (in /...libc...)
+ by 0x........: pthread_join (drd_pthread_intercepts.c:?)
+ by 0x........: Thread::Join() (annotate_smart_pointer.cpp:?)
+ by 0x........: main (annotate_smart_pointer.cpp:?)
+Address 0x........ is at offset ... from 0x......... Allocation context:
+ at 0x........: malloc (vg_replace_malloc.c:...)
+ by 0x........: realloc (vg_replace_malloc.c:...)
+ by 0x........: new_sem_from_pool (in /...libc...)
+ by 0x........: _pthread_exit (in /...libc...)
+ by 0x........: thread_start (in /...libc...)
+
+Conflicting load by thread x at 0x........ size 4
+ at 0x........: ???
+ by 0x........: pthread_join$UNIX2003 (in /...libc...)
+ by 0x........: pthread_join (drd_pthread_intercepts.c:?)
+ by 0x........: Thread::Join() (annotate_smart_pointer.cpp:?)
+ by 0x........: main (annotate_smart_pointer.cpp:?)
+Allocation context: Data section of /usr/lib/libSystem.B.dylib
+
Done.
-ERROR SUMMARY: 1 errors from 1 contexts (suppressed: 0 from 0)
+ERROR SUMMARY: 8 errors from 8 contexts (suppressed: 0 from 0)
=================================================
./valgrind-new/drd/tests/annotate_smart_pointer2.stderr.diff-darwin
=================================================
--- annotate_smart_pointer2.stderr.exp-darwin 2013-03-26 23:56:40.000000000 -0500
+++ annotate_smart_pointer2.stderr.out 2013-03-27 00:15:02.000000000 -0500
@@ -9,6 +9,67 @@
by 0x........: operator new(unsigned long) (in /usr/lib/libstdc++.6.0.9.dylib)
by 0x........: main (annotate_smart_pointer.cpp:?)
+Conflicting load by thread x at 0x........ size 4
+ at 0x........: ???
+ by 0x........: pthread_join$UNIX2003 (in /...libc...)
+ by 0x........: pthread_join (drd_pthread_intercepts.c:?)
+ by 0x........: Thread::Join() (annotate_smart_pointer.cpp:?)
+ by 0x........: main (annotate_smart_pointer.cpp:?)
+Allocation context: Data section of /usr/lib/libSystem.B.dylib
+
+Conflicting load by thread x at 0x........ size 4
+ at 0x........: ???
+ by 0x........: pthread_join$UNIX2003 (in /...libc...)
+ by 0x........: pthread_join (drd_pthread_intercepts.c:?)
+ by 0x........: Thread::Join() (annotate_smart_p...
[truncated message content] |
|
From: Tom H. <to...@co...> - 2013-03-27 04:07:44
|
valgrind revision: 13337 VEX revision: 2701 C compiler: gcc (GCC) 4.4.1 20090725 (Red Hat 4.4.1-2) GDB: Assembler: GNU assembler version 2.19.51.0.14-3.fc11 20090722 C library: GNU C Library stable release version 2.10.2 uname -mrs: Linux 3.7.1-5.fc18.x86_64 x86_64 Vendor version: Fedora release 11 (Leonidas) Nightly build on bristol ( x86_64, Fedora 11 ) Started at 2013-03-27 03:41:32 GMT Ended at 2013-03-27 04:07:22 GMT Results unchanged from 24 hours ago Checking out valgrind source tree ... done Configuring valgrind ... done Building valgrind ... done Running regression tests ... failed Regression test results follow == 630 tests, 1 stderr failure, 1 stdout failure, 0 stderrB failures, 0 stdoutB failures, 0 post failures == memcheck/tests/long_namespace_xml (stderr) none/tests/amd64/sse4-64 (stdout) |
|
From: Tom H. <to...@co...> - 2013-03-27 04:01:55
|
valgrind revision: 13337 VEX revision: 2701 C compiler: gcc (GCC) 4.4.5 20101112 (Red Hat 4.4.5-2) GDB: Assembler: GNU assembler version 2.20.51.0.2-20.fc13 20091009 C library: GNU C Library stable release version 2.12.2 uname -mrs: Linux 3.7.1-5.fc18.x86_64 x86_64 Vendor version: Fedora release 13 (Goddard) Nightly build on bristol ( x86_64, Fedora 13 ) Started at 2013-03-27 03:33:11 GMT Ended at 2013-03-27 04:01:41 GMT Results differ from 24 hours ago Checking out valgrind source tree ... done Configuring valgrind ... done Building valgrind ... done Running regression tests ... failed Regression test results follow == 630 tests, 3 stderr failures, 0 stdout failures, 0 stderrB failures, 0 stdoutB failures, 0 post failures == memcheck/tests/overlap (stderr) memcheck/tests/strchr (stderr) helgrind/tests/pth_barrier3 (stderr) ================================================= == Results from 24 hours ago == ================================================= Checking out valgrind source tree ... done Configuring valgrind ... done Building valgrind ... done Running regression tests ... failed Regression test results follow == 630 tests, 1 stderr failure, 0 stdout failures, 0 stderrB failures, 0 stdoutB failures, 0 post failures == helgrind/tests/pth_barrier3 (stderr) ================================================= == Difference between 24 hours ago and now == ================================================= *** old.short 2013-03-27 03:47:55.705489591 +0000 --- new.short 2013-03-27 04:01:41.312430165 +0000 *************** *** 8,10 **** ! == 630 tests, 1 stderr failure, 0 stdout failures, 0 stderrB failures, 0 stdoutB failures, 0 post failures == helgrind/tests/pth_barrier3 (stderr) --- 8,12 ---- ! == 630 tests, 3 stderr failures, 0 stdout failures, 0 stderrB failures, 0 stdoutB failures, 0 post failures == ! memcheck/tests/overlap (stderr) ! memcheck/tests/strchr (stderr) helgrind/tests/pth_barrier3 (stderr) |
|
From: Tom H. <to...@co...> - 2013-03-27 03:52:14
|
valgrind revision: 13337 VEX revision: 2701 C compiler: gcc (GCC) 4.5.1 20100924 (Red Hat 4.5.1-4) GDB: GNU gdb (GDB) Fedora (7.2-52.fc14) Assembler: GNU assembler version 2.20.51.0.7-8.fc14 20100318 C library: GNU C Library stable release version 2.13 uname -mrs: Linux 3.7.1-5.fc18.x86_64 x86_64 Vendor version: Fedora release 14 (Laughlin) Nightly build on bristol ( x86_64, Fedora 14 ) Started at 2013-03-27 03:22:39 GMT Ended at 2013-03-27 03:52:00 GMT Results differ from 24 hours ago Checking out valgrind source tree ... done Configuring valgrind ... done Building valgrind ... done Running regression tests ... failed Regression test results follow == 649 tests, 3 stderr failures, 0 stdout failures, 0 stderrB failures, 0 stdoutB failures, 0 post failures == memcheck/tests/origin5-bz2 (stderr) memcheck/tests/overlap (stderr) memcheck/tests/strchr (stderr) ================================================= == Results from 24 hours ago == ================================================= Checking out valgrind source tree ... done Configuring valgrind ... done Building valgrind ... done Running regression tests ... failed Regression test results follow == 649 tests, 1 stderr failure, 0 stdout failures, 0 stderrB failures, 0 stdoutB failures, 0 post failures == memcheck/tests/origin5-bz2 (stderr) ================================================= == Difference between 24 hours ago and now == ================================================= *** old.short 2013-03-27 03:37:39.427789305 +0000 --- new.short 2013-03-27 03:52:00.520653570 +0000 *************** *** 8,11 **** ! == 649 tests, 1 stderr failure, 0 stdout failures, 0 stderrB failures, 0 stdoutB failures, 0 post failures == memcheck/tests/origin5-bz2 (stderr) --- 8,13 ---- ! == 649 tests, 3 stderr failures, 0 stdout failures, 0 stderrB failures, 0 stdoutB failures, 0 post failures == memcheck/tests/origin5-bz2 (stderr) + memcheck/tests/overlap (stderr) + memcheck/tests/strchr (stderr) |
|
From: Tom H. <to...@co...> - 2013-03-27 03:44:55
|
valgrind revision: 13337 VEX revision: 2701 C compiler: gcc (GCC) 4.6.3 20120306 (Red Hat 4.6.3-2) GDB: GNU gdb (GDB) Fedora (7.3.1-48.fc15) Assembler: GNU assembler version 2.21.51.0.6-6.fc15 20110118 C library: GNU C Library stable release version 2.14.1 uname -mrs: Linux 3.7.1-5.fc18.x86_64 x86_64 Vendor version: Fedora release 15 (Lovelock) Nightly build on bristol ( x86_64, Fedora 15 ) Started at 2013-03-27 03:13:45 GMT Ended at 2013-03-27 03:44:42 GMT Results differ from 24 hours ago Checking out valgrind source tree ... done Configuring valgrind ... done Building valgrind ... done Running regression tests ... failed Regression test results follow == 651 tests, 3 stderr failures, 0 stdout failures, 0 stderrB failures, 0 stdoutB failures, 0 post failures == memcheck/tests/origin5-bz2 (stderr) memcheck/tests/overlap (stderr) memcheck/tests/strchr (stderr) ================================================= == Results from 24 hours ago == ================================================= Checking out valgrind source tree ... done Configuring valgrind ... done Building valgrind ... done Running regression tests ... failed Regression test results follow == 651 tests, 1 stderr failure, 0 stdout failures, 0 stderrB failures, 0 stdoutB failures, 0 post failures == memcheck/tests/origin5-bz2 (stderr) ================================================= == Difference between 24 hours ago and now == ================================================= *** old.short 2013-03-27 03:28:38.147185291 +0000 --- new.short 2013-03-27 03:44:42.712427395 +0000 *************** *** 8,11 **** ! == 651 tests, 1 stderr failure, 0 stdout failures, 0 stderrB failures, 0 stdoutB failures, 0 post failures == memcheck/tests/origin5-bz2 (stderr) --- 8,13 ---- ! == 651 tests, 3 stderr failures, 0 stdout failures, 0 stderrB failures, 0 stdoutB failures, 0 post failures == memcheck/tests/origin5-bz2 (stderr) + memcheck/tests/overlap (stderr) + memcheck/tests/strchr (stderr) |
|
From: Philippe W. <phi...@sk...> - 2013-03-27 03:34:15
|
valgrind revision: 13337 VEX revision: 2701 C compiler: gcc (GCC) 4.7.2 20121109 (Red Hat 4.7.2-8) GDB: GNU gdb (GDB) Fedora (7.5.1-36.fc18) Assembler: GNU assembler version 2.23.51.0.1-7.fc18 20120806 C library: GNU C Library stable release version 2.16 uname -mrs: Linux 3.7.2-204.fc18.ppc64 ppc64 Vendor version: Fedora release 18 (Spherical Cow) Nightly build on gcc110 ( Fedora release 18 (Spherical Cow), ppc64 ) Started at 2013-03-26 20:00:13 PDT Ended at 2013-03-26 20:32:14 PDT Results unchanged from 24 hours ago Checking out valgrind source tree ... done Configuring valgrind ... done Building valgrind ... done Running regression tests ... failed Regression test results follow == 551 tests, 32 stderr failures, 4 stdout failures, 0 stderrB failures, 1 stdoutB failure, 2 post failures == gdbserver_tests/mcmain_pic (stdout) gdbserver_tests/mcmain_pic (stderr) gdbserver_tests/mcmain_pic (stdoutB) memcheck/tests/linux/getregset (stdout) memcheck/tests/linux/getregset (stderr) memcheck/tests/ppc64/power_ISA2_05 (stdout) memcheck/tests/supp_unknown (stderr) memcheck/tests/varinfo6 (stderr) memcheck/tests/wrap8 (stdout) memcheck/tests/wrap8 (stderr) massif/tests/big-alloc (post) massif/tests/deep-D (post) helgrind/tests/annotate_rwlock (stderr) helgrind/tests/free_is_write (stderr) helgrind/tests/hg02_deadlock (stderr) helgrind/tests/hg03_inherit (stderr) helgrind/tests/hg04_race (stderr) helgrind/tests/hg05_race2 (stderr) helgrind/tests/locked_vs_unlocked1_fwd (stderr) helgrind/tests/locked_vs_unlocked1_rev (stderr) helgrind/tests/locked_vs_unlocked2 (stderr) helgrind/tests/locked_vs_unlocked3 (stderr) helgrind/tests/pth_barrier1 (stderr) helgrind/tests/pth_barrier2 (stderr) helgrind/tests/pth_barrier3 (stderr) helgrind/tests/pth_destroy_cond (stderr) helgrind/tests/rwlock_race (stderr) helgrind/tests/tc01_simple_race (stderr) helgrind/tests/tc05_simple_race (stderr) helgrind/tests/tc06_two_races (stderr) helgrind/tests/tc06_two_races_xml (stderr) helgrind/tests/tc09_bad_unlock (stderr) helgrind/tests/tc14_laog_dinphils (stderr) helgrind/tests/tc16_byterace (stderr) helgrind/tests/tc18_semabuse (stderr) helgrind/tests/tc19_shadowmem (stderr) helgrind/tests/tc20_verifywrap (stderr) helgrind/tests/tc21_pthonce (stderr) helgrind/tests/tc22_exit_w_lock (stderr) |
|
From: Tom H. <to...@co...> - 2013-03-27 03:33:29
|
valgrind revision: 13337 VEX revision: 2701 C compiler: gcc (GCC) 4.6.3 20120306 (Red Hat 4.6.3-2) GDB: GNU gdb (GDB) Fedora (7.3.50.20110722-16.fc16) Assembler: GNU assembler version 2.21.53.0.1-6.fc16 20110716 C library: GNU C Library development release version 2.14.90 uname -mrs: Linux 3.7.1-5.fc18.x86_64 x86_64 Vendor version: Fedora release 16 (Verne) Nightly build on bristol ( x86_64, Fedora 16 ) Started at 2013-03-27 03:02:33 GMT Ended at 2013-03-27 03:33:03 GMT Results differ from 24 hours ago Checking out valgrind source tree ... done Configuring valgrind ... done Building valgrind ... done Running regression tests ... failed Regression test results follow == 651 tests, 3 stderr failures, 0 stdout failures, 0 stderrB failures, 0 stdoutB failures, 0 post failures == memcheck/tests/origin5-bz2 (stderr) memcheck/tests/overlap (stderr) memcheck/tests/strchr (stderr) ================================================= == Results from 24 hours ago == ================================================= Checking out valgrind source tree ... done Configuring valgrind ... done Building valgrind ... done Running regression tests ... failed Regression test results follow == 651 tests, 1 stderr failure, 0 stdout failures, 0 stderrB failures, 0 stdoutB failures, 0 post failures == memcheck/tests/origin5-bz2 (stderr) ================================================= == Difference between 24 hours ago and now == ================================================= *** old.short 2013-03-27 03:17:34.767830907 +0000 --- new.short 2013-03-27 03:33:03.514073456 +0000 *************** *** 8,11 **** ! == 651 tests, 1 stderr failure, 0 stdout failures, 0 stderrB failures, 0 stdoutB failures, 0 post failures == memcheck/tests/origin5-bz2 (stderr) --- 8,13 ---- ! == 651 tests, 3 stderr failures, 0 stdout failures, 0 stderrB failures, 0 stdoutB failures, 0 post failures == memcheck/tests/origin5-bz2 (stderr) + memcheck/tests/overlap (stderr) + memcheck/tests/strchr (stderr) |
|
From: Tom H. <to...@co...> - 2013-03-27 03:23:19
|
valgrind revision: 13337 VEX revision: 2701 C compiler: gcc (GCC) 4.7.2 20120921 (Red Hat 4.7.2-2) GDB: GNU gdb (GDB) Fedora (7.4.50.20120120-54.fc17) Assembler: GNU assembler version 2.22.52.0.1-10.fc17 20120131 C library: GNU C Library stable release version 2.15 uname -mrs: Linux 3.7.1-5.fc18.x86_64 x86_64 Vendor version: Fedora release 17 (Beefy Miracle) Nightly build on bristol ( x86_64, Fedora 17 (Beefy Miracle) ) Started at 2013-03-27 02:52:00 GMT Ended at 2013-03-27 03:23:03 GMT Results differ from 24 hours ago Checking out valgrind source tree ... done Configuring valgrind ... done Building valgrind ... done Running regression tests ... failed Regression test results follow == 651 tests, 7 stderr failures, 1 stdout failure, 0 stderrB failures, 0 stdoutB failures, 0 post failures == gdbserver_tests/mcinfcallRU (stderr) gdbserver_tests/mcinfcallWSRU (stderr) gdbserver_tests/mcmain_pic (stderr) memcheck/tests/origin5-bz2 (stderr) memcheck/tests/overlap (stderr) memcheck/tests/strchr (stderr) exp-sgcheck/tests/preen_invars (stdout) exp-sgcheck/tests/preen_invars (stderr) ================================================= == Results from 24 hours ago == ================================================= Checking out valgrind source tree ... done Configuring valgrind ... done Building valgrind ... done Running regression tests ... failed Regression test results follow == 651 tests, 5 stderr failures, 1 stdout failure, 0 stderrB failures, 0 stdoutB failures, 0 post failures == gdbserver_tests/mcinfcallRU (stderr) gdbserver_tests/mcinfcallWSRU (stderr) gdbserver_tests/mcmain_pic (stderr) memcheck/tests/origin5-bz2 (stderr) exp-sgcheck/tests/preen_invars (stdout) exp-sgcheck/tests/preen_invars (stderr) ================================================= == Difference between 24 hours ago and now == ================================================= *** old.short 2013-03-27 03:06:53.828551528 +0000 --- new.short 2013-03-27 03:23:03.976338447 +0000 *************** *** 8,10 **** ! == 651 tests, 5 stderr failures, 1 stdout failure, 0 stderrB failures, 0 stdoutB failures, 0 post failures == gdbserver_tests/mcinfcallRU (stderr) --- 8,10 ---- ! == 651 tests, 7 stderr failures, 1 stdout failure, 0 stderrB failures, 0 stdoutB failures, 0 post failures == gdbserver_tests/mcinfcallRU (stderr) *************** *** 13,14 **** --- 13,16 ---- memcheck/tests/origin5-bz2 (stderr) + memcheck/tests/overlap (stderr) + memcheck/tests/strchr (stderr) exp-sgcheck/tests/preen_invars (stdout) |
|
From: Tom H. <to...@co...> - 2013-03-27 03:14:01
|
valgrind revision: 13337 VEX revision: 2701 C compiler: gcc (GCC) 4.7.2 20121109 (Red Hat 4.7.2-8) GDB: GNU gdb (GDB) Fedora (7.5.1-36.fc18) Assembler: GNU assembler version 2.23.51.0.1-6.fc18 20120806 C library: GNU C Library stable release version 2.16 uname -mrs: Linux 3.7.1-5.fc18.x86_64 x86_64 Vendor version: Fedora release 18 (Spherical Cow) Nightly build on bristol ( x86_64, Fedora 18 (Spherical Cow) ) Started at 2013-03-27 02:42:51 GMT Ended at 2013-03-27 03:13:48 GMT Results differ from 24 hours ago Checking out valgrind source tree ... done Configuring valgrind ... done Building valgrind ... done Running regression tests ... failed Regression test results follow == 651 tests, 4 stderr failures, 1 stdout failure, 0 stderrB failures, 0 stdoutB failures, 0 post failures == memcheck/tests/origin5-bz2 (stderr) memcheck/tests/overlap (stderr) memcheck/tests/strchr (stderr) exp-sgcheck/tests/preen_invars (stdout) exp-sgcheck/tests/preen_invars (stderr) ================================================= == Results from 24 hours ago == ================================================= Checking out valgrind source tree ... done Configuring valgrind ... done Building valgrind ... done Running regression tests ... failed Regression test results follow == 651 tests, 2 stderr failures, 1 stdout failure, 0 stderrB failures, 0 stdoutB failures, 0 post failures == memcheck/tests/origin5-bz2 (stderr) exp-sgcheck/tests/preen_invars (stdout) exp-sgcheck/tests/preen_invars (stderr) ================================================= == Difference between 24 hours ago and now == ================================================= *** old.short 2013-03-27 02:58:02.522102504 +0000 --- new.short 2013-03-27 03:13:48.327327596 +0000 *************** *** 8,11 **** ! == 651 tests, 2 stderr failures, 1 stdout failure, 0 stderrB failures, 0 stdoutB failures, 0 post failures == memcheck/tests/origin5-bz2 (stderr) exp-sgcheck/tests/preen_invars (stdout) --- 8,13 ---- ! == 651 tests, 4 stderr failures, 1 stdout failure, 0 stderrB failures, 0 stdoutB failures, 0 post failures == memcheck/tests/origin5-bz2 (stderr) + memcheck/tests/overlap (stderr) + memcheck/tests/strchr (stderr) exp-sgcheck/tests/preen_invars (stdout) |
|
From: Rich C. <rc...@wi...> - 2013-03-27 02:55:03
|
valgrind revision: 13337
VEX revision: 2701
C compiler: gcc (SUSE Linux) 4.7.2 20130108 [gcc-4_7-branch revision 195012]
GDB: GNU gdb (GDB) SUSE (7.5.1-2.1.1)
Assembler: GNU assembler (GNU Binutils; openSUSE 12.3) 2.23.1
C library: GNU C Library (GNU libc) stable release version 2.17 (git c758a6861537)
uname -mrs: Linux 3.7.9-1.1-desktop x86_64
Vendor version: Welcome to openSUSE 12.3 "Dartmouth" Beta 1 - Kernel %r (%t).
Nightly build on ultra ( gcc 4.5.1 Linux 3.7.9-1.1-desktop x86_64 )
Started at 2013-03-26 21:30:01 CDT
Ended at 2013-03-26 21:54:51 CDT
Results unchanged from 24 hours ago
Checking out valgrind source tree ... done
Configuring valgrind ... done
Building valgrind ... done
Running regression tests ... failed
Regression test results follow
== 644 tests, 1 stderr failure, 0 stdout failures, 1 stderrB failure, 0 stdoutB failures, 0 post failures ==
gdbserver_tests/mssnapshot (stderrB)
memcheck/tests/origin5-bz2 (stderr)
=================================================
./valgrind-new/gdbserver_tests/mssnapshot.stderrB.diff
=================================================
--- mssnapshot.stderrB.exp 2013-03-26 21:42:37.532582671 -0500
+++ mssnapshot.stderrB.out 2013-03-26 21:46:18.738310738 -0500
@@ -1,5 +1,11 @@
relaying data between gdb and process ....
+Missing separate debuginfo for /lib64/ld-linux-x86-64.so.2
+Try: zypper install -C "debuginfo(build-id)=ecb8ef1a6904a2a3ec60a527f415f520c8636158"
vgdb-error value changed from 0 to 999999
+Missing separate debuginfo for /lib64/libpthread.so.0
+Try: zypper install -C "debuginfo(build-id)=ef5f5dbcb2398c608fef7884e1bfb65be3b5f0ef"
+Missing separate debuginfo for /lib64/libc.so.6
+Try: zypper install -C "debuginfo(build-id)=bd1473e8e6a4c10a14731b5be4b35b4e87db2af7"
general valgrind monitor commands:
help [debug] : monitor command help. With debug: + debugging commands
v.wait [<ms>] : sleep <ms> (default 0) then continue
=================================================
./valgrind-new/memcheck/tests/origin5-bz2.stderr.diff-glibc212-s390x
=================================================
--- origin5-bz2.stderr.exp-glibc212-s390x 2013-03-26 21:42:38.287561246 -0500
+++ origin5-bz2.stderr.out 2013-03-26 21:47:52.812646681 -0500
@@ -75,17 +75,6 @@
at 0x........: main (origin5-bz2.c:6479)
Use of uninitialised value of size 8
- at 0x........: mainSort (origin5-bz2.c:2859)
- by 0x........: BZ2_blockSort (origin5-bz2.c:3105)
- by 0x........: BZ2_compressBlock (origin5-bz2.c:4034)
- by 0x........: handle_compress (origin5-bz2.c:4753)
- by 0x........: BZ2_bzCompress (origin5-bz2.c:4822)
- by 0x........: BZ2_bzBuffToBuffCompress (origin5-bz2.c:5630)
- by 0x........: main (origin5-bz2.c:6484)
- Uninitialised value was created by a client request
- at 0x........: main (origin5-bz2.c:6479)
-
-Use of uninitialised value of size 8
at 0x........: mainSort (origin5-bz2.c:2963)
by 0x........: BZ2_blockSort (origin5-bz2.c:3105)
by 0x........: BZ2_compressBlock (origin5-bz2.c:4034)
@@ -131,6 +120,12 @@
Conditional jump or move depends on uninitialised value(s)
at 0x........: main (origin5-bz2.c:6512)
- Uninitialised value was created by a client request
- at 0x........: main (origin5-bz2.c:6479)
+ Uninitialised value was created by a heap allocation
+ at 0x........: malloc (vg_replace_malloc.c:...)
+ by 0x........: g_serviceFn (origin5-bz2.c:6429)
+ by 0x........: default_bzalloc (origin5-bz2.c:4470)
+ by 0x........: BZ2_decompress (origin5-bz2.c:1578)
+ by 0x........: BZ2_bzDecompress (origin5-bz2.c:5192)
+ by 0x........: BZ2_bzBuffToBuffDecompress (origin5-bz2.c:5678)
+ by 0x........: main (origin5-bz2.c:6498)
=================================================
./valgrind-new/memcheck/tests/origin5-bz2.stderr.diff-glibc234-s390x
=================================================
--- origin5-bz2.stderr.exp-glibc234-s390x 2013-03-26 21:42:38.141565389 -0500
+++ origin5-bz2.stderr.out 2013-03-26 21:47:52.812646681 -0500
@@ -120,6 +120,12 @@
Conditional jump or move depends on uninitialised value(s)
at 0x........: main (origin5-bz2.c:6512)
- Uninitialised value was created by a client request
- at 0x........: main (origin5-bz2.c:6479)
+ Uninitialised value was created by a heap allocation
+ at 0x........: malloc (vg_replace_malloc.c:...)
+ by 0x........: g_serviceFn (origin5-bz2.c:6429)
+ by 0x........: default_bzalloc (origin5-bz2.c:4470)
+ by 0x........: BZ2_decompress (origin5-bz2.c:1578)
+ by 0x........: BZ2_bzDecompress (origin5-bz2.c:5192)
+ by 0x........: BZ2_bzBuffToBuffDecompress (origin5-bz2.c:5678)
+ by 0x........: main (origin5-bz2.c:6498)
=================================================
./valgrind-new/memcheck/tests/origin5-bz2.stderr.diff-glibc25-amd64
=================================================
--- origin5-bz2.stderr.exp-glibc25-amd64 2013-03-26 21:42:37.634579776 -0500
+++ origin5-bz2.stderr.out 2013-03-26 21:47:52.812646681 -0500
@@ -120,6 +120,12 @@
Conditional jump or move depends on uninitialised value(s)
at 0x........: main (origin5-bz2.c:6512)
- Uninitialised value was created by a client request
- at 0x........: main (origin5-bz2.c:6479)
+ Uninitialised value was created by a heap allocation
+ at 0x........: malloc (vg_replace_malloc.c:...)
+ by 0x........: g_serviceFn (origin5-bz2.c:6429)
+ by 0x........: default_bzalloc (origin5-bz2.c:4470)
+ by 0x........: BZ2_decompress (origin5-bz2.c:1578)
+ by 0x........: BZ2_bzDecompress (origin5-bz2.c:5192)
+ by 0x........: BZ2_bzBuffToBuffDecompress (origin5-bz2.c:5678)
+ by 0x........: main (origin5-bz2.c:6498)
=================================================
./valgrind-new/memcheck/tests/origin5-bz2.stderr.diff-glibc25-x86
=================================================
--- origin5-bz2.stderr.exp-glibc25-x86 2013-03-26 21:42:37.950570809 -0500
+++ origin5-bz2.stderr.out 2013-03-26 21:47:52.812646681 -0500
@@ -12,7 +12,7 @@
Uninitialised value was created by a client request
at 0x........: main (origin5-bz2.c:6479)
-Use of uninitialised value of size 4
+Use of uninitialised value of size 8
at 0x........: copy_input_until_stop (origin5-bz2.c:4686)
by 0x........: handle_compress (origin5-bz2.c:4750)
by 0x........: BZ2_bzCompress (origin5-bz2.c:4822)
@@ -21,7 +21,7 @@
Uninitialised value was created by a client request
at 0x........: main (origin5-bz2.c:6479)
-Use of uninitialised value of size 4
+Use of uninitialised value of size 8
at 0x........: copy_input_until_stop (origin5-bz2.c:4686)
by 0x........: handle_compress (origin5-bz2.c:4750)
by 0x........: BZ2_bzCompress (origin5-bz2.c:4822)
@@ -30,7 +30,7 @@
Uninitialised value was created by a client request
at 0x........: main (origin5-bz2.c:6479)
-Use of uninitialised value of size 4
+Use of uninitialised value of size 8
at 0x........: mainSort (origin5-bz2.c:2820)
by 0x........: BZ2_blockSort (origin5-bz2.c:3105)
by 0x........: BZ2_compressBlock (origin5-bz2.c:4034)
@@ -41,7 +41,7 @@
Uninitialised value was created by a client request
at 0x........: main (origin5-bz2.c:6479)
-Use of uninitialised value of size 4
+Use of uninitialised value of size 8
at 0x........: mainSort (origin5-bz2.c:2823)
by 0x........: BZ2_blockSort (origin5-bz2.c:3105)
by 0x........: BZ2_compressBlock (origin5-bz2.c:4034)
@@ -52,7 +52,7 @@
Uninitialised value was created by a client request
at 0x........: main (origin5-bz2.c:6479)
-Use of uninitialised value of size 4
+Use of uninitialised value of size 8
at 0x........: mainSort (origin5-bz2.c:2854)
by 0x........: BZ2_blockSort (origin5-bz2.c:3105)
by 0x........: BZ2_compressBlock (origin5-bz2.c:4034)
@@ -63,7 +63,7 @@
Uninitialised value was created by a client request
at 0x........: main (origin5-bz2.c:6479)
-Use of uninitialised value of size 4
+Use of uninitialised value of size 8
at 0x........: mainSort (origin5-bz2.c:2858)
by 0x........: BZ2_blockSort (origin5-bz2.c:3105)
by 0x........: BZ2_compressBlock (origin5-bz2.c:4034)
@@ -74,7 +74,7 @@
Uninitialised value was created by a client request
at 0x........: main (origin5-bz2.c:6479)
-Use of uninitialised value of size 4
+Use of uninitialised value of size 8
at 0x........: mainSort (origin5-bz2.c:2963)
by 0x........: BZ2_blockSort (origin5-bz2.c:3105)
by 0x........: BZ2_compressBlock (origin5-bz2.c:4034)
@@ -85,7 +85,7 @@
Uninitialised value was created by a client request
at 0x........: main (origin5-bz2.c:6479)
-Use of uninitialised value of size 4
+Use of uninitialised value of size 8
at 0x........: mainSort (origin5-bz2.c:2964)
by 0x........: BZ2_blockSort (origin5-bz2.c:3105)
by 0x........: BZ2_compressBlock (origin5-bz2.c:4034)
@@ -96,7 +96,7 @@
Uninitialised value was created by a client request
at 0x........: main (origin5-bz2.c:6479)
-Use of uninitialised value of size 4
+Use of uninitialised value of size 8
at 0x........: fallbackSort (origin5-bz2.c:2269)
by 0x........: BZ2_blockSort (origin5-bz2.c:3116)
by 0x........: BZ2_compressBlock (origin5-bz2.c:4034)
@@ -107,7 +107,7 @@
Uninitialised value was created by a client request
at 0x........: main (origin5-bz2.c:6479)
-Use of uninitialised value of size 4
+Use of uninitialised value of size 8
at 0x........: fallbackSort (origin5-bz2.c:2275)
by 0x........: BZ2_blockSort (origin5-bz2.c:3116)
by 0x........: BZ2_compressBlock (origin5-bz2.c:4034)
@@ -120,6 +120,12 @@
Conditional jump or move depends on uninitialised value(s)
at 0x........: main (origin5-bz2.c:6512)
- Uninitialised value was created by a client request
- at 0x........: main (origin5-bz2.c:6479)
+ Uninitialised value was created by a heap allocation
+ at 0x........: malloc (vg_replace_malloc.c:...)
<truncated beyond 100 lines>
=================================================
./valgrind-new/memcheck/tests/origin5-bz2.stderr.diff-glibc27-ppc64
=================================================
--- origin5-bz2.stderr.exp-glibc27-ppc64 2013-03-26 21:42:38.039568283 -0500
+++ origin5-bz2.stderr.out 2013-03-26 21:47:52.812646681 -0500
@@ -1,7 +1,7 @@
Conditional jump or move depends on uninitialised value(s)
at 0x........: main (origin5-bz2.c:6481)
Uninitialised value was created by a client request
- at 0x........: main (origin5-bz2.c:6481)
+ at 0x........: main (origin5-bz2.c:6479)
Conditional jump or move depends on uninitialised value(s)
at 0x........: copy_input_until_stop (origin5-bz2.c:4686)
@@ -10,7 +10,7 @@
by 0x........: BZ2_bzBuffToBuffCompress (origin5-bz2.c:5630)
by 0x........: main (origin5-bz2.c:6484)
Uninitialised value was created by a client request
- at 0x........: main (origin5-bz2.c:6481)
+ at 0x........: main (origin5-bz2.c:6479)
Use of uninitialised value of size 8
at 0x........: copy_input_until_stop (origin5-bz2.c:4686)
@@ -19,7 +19,7 @@
by 0x........: BZ2_bzBuffToBuffCompress (origin5-bz2.c:5630)
by 0x........: main (origin5-bz2.c:6484)
Uninitialised value was created by a client request
- at 0x........: main (origin5-bz2.c:6481)
+ at 0x........: main (origin5-bz2.c:6479)
Use of uninitialised value of size 8
at 0x........: copy_input_until_stop (origin5-bz2.c:4686)
@@ -28,7 +28,7 @@
by 0x........: BZ2_bzBuffToBuffCompress (origin5-bz2.c:5630)
by 0x........: main (origin5-bz2.c:6484)
Uninitialised value was created by a client request
- at 0x........: main (origin5-bz2.c:6481)
+ at 0x........: main (origin5-bz2.c:6479)
Use of uninitialised value of size 8
at 0x........: mainSort (origin5-bz2.c:2820)
@@ -39,7 +39,7 @@
by 0x........: BZ2_bzBuffToBuffCompress (origin5-bz2.c:5630)
by 0x........: main (origin5-bz2.c:6484)
Uninitialised value was created by a client request
- at 0x........: main (origin5-bz2.c:6481)
+ at 0x........: main (origin5-bz2.c:6479)
Use of uninitialised value of size 8
at 0x........: mainSort (origin5-bz2.c:2823)
@@ -50,7 +50,7 @@
by 0x........: BZ2_bzBuffToBuffCompress (origin5-bz2.c:5630)
by 0x........: main (origin5-bz2.c:6484)
Uninitialised value was created by a client request
- at 0x........: main (origin5-bz2.c:6481)
+ at 0x........: main (origin5-bz2.c:6479)
Use of uninitialised value of size 8
at 0x........: mainSort (origin5-bz2.c:2854)
@@ -61,7 +61,7 @@
by 0x........: BZ2_bzBuffToBuffCompress (origin5-bz2.c:5630)
by 0x........: main (origin5-bz2.c:6484)
Uninitialised value was created by a client request
- at 0x........: main (origin5-bz2.c:6481)
+ at 0x........: main (origin5-bz2.c:6479)
Use of uninitialised value of size 8
at 0x........: mainSort (origin5-bz2.c:2858)
@@ -72,7 +72,7 @@
by 0x........: BZ2_bzBuffToBuffCompress (origin5-bz2.c:5630)
by 0x........: main (origin5-bz2.c:6484)
Uninitialised value was created by a client request
- at 0x........: main (origin5-bz2.c:6481)
+ at 0x........: main (origin5-bz2.c:6479)
Use of uninitialised value of size 8
at 0x........: mainSort (origin5-bz2.c:2963)
@@ -83,7 +83,7 @@
by 0x........: BZ2_bzBuffToBuffCompress (origin5-bz2.c:5630)
by 0x........: main (origin5-bz2.c:6484)
Uninitialised value was created by a client request
- at 0x........: main (origin5-bz2.c:6481)
+ at 0x........: main (origin5-bz2.c:6479)
Use of uninitialised value of size 8
at 0x........: mainSort (origin5-bz2.c:2964)
@@ -94,7 +94,7 @@
by 0x........: BZ2_bzBuffToBuffCompress (origin5-bz2.c:5630)
by 0x........: main (origin5-bz2.c:6484)
Uninitialised value was created by a client request
- at 0x........: main (origin5-bz2.c:6481)
+ at 0x........: main (origin5-bz2.c:6479)
Use of uninitialised value of size 8
at 0x........: fallbackSort (origin5-bz2.c:2269)
@@ -105,7 +105,7 @@
by 0x........: BZ2_bzBuffToBuffCompress (origin5-bz2.c:5630)
by 0x........: main (origin5-bz2.c:6484)
Uninitialised value was created by a client request
- at 0x........: main (origin5-bz2.c:6481)
+ at 0x........: main (origin5-bz2.c:6479)
Use of uninitialised value of size 8
<truncated beyond 100 lines>
=================================================
./valgrind-old/gdbserver_tests/mssnapshot.stderrB.diff
=================================================
--- mssnapshot.stderrB.exp 2013-03-26 21:30:16.594259306 -0500
+++ mssnapshot.stderrB.out 2013-03-26 21:34:01.340051811 -0500
@@ -1,5 +1,11 @@
relaying data between gdb and process ....
+Missing separate debuginfo for /lib64/ld-linux-x86-64.so.2
+Try: zypper install -C "debuginfo(build-id)=ecb8ef1a6904a2a3ec60a527f415f520c8636158"
vgdb-error value changed from 0 to 999999
+Missing separate debuginfo for /lib64/libpthread.so.0
+Try: zypper install -C "debuginfo(build-id)=ef5f5dbcb2398c608fef7884e1bfb65be3b5f0ef"
+Missing separate debuginfo for /lib64/libc.so.6
+Try: zypper install -C "debuginfo(build-id)=bd1473e8e6a4c10a14731b5be4b35b4e87db2af7"
general valgrind monitor commands:
help [debug] : monitor command help. With debug: + debugging commands
v.wait [<ms>] : sleep <ms> (default 0) then continue
=================================================
./valgrind-old/memcheck/tests/origin5-bz2.stderr.diff-glibc212-s390x
=================================================
--- origin5-bz2.stderr.exp-glibc212-s390x 2013-03-26 21:30:17.356238256 -0500
+++ origin5-bz2.stderr.out 2013-03-26 21:35:35.426453862 -0500
@@ -75,17 +75,6 @@
at 0x........: main (origin5-bz2.c:6479)
Use of uninitialised value of size 8
- at 0x........: mainSort (origin5-bz2.c:2859)
- by 0x........: BZ2_blockSort (origin5-bz2.c:3105)
- by 0x........: BZ2_compressBlock (origin5-bz2.c:4034)
- by 0x........: handle_compress (origin5-bz2.c:4753)
- by 0x........: BZ2_bzCompress (origin5-bz2.c:4822)
- by 0x........: BZ2_bzBuffToBuffCompress (origin5-bz2.c:5630)
- by 0x........: main (origin5-bz2.c:6484)
- Uninitialised value was created by a client request
- at 0x........: main (origin5-bz2.c:6479)
-
-Use of uninitialised value of size 8
at 0x........: mainSort (origin5-bz2.c:2963)
by 0x........: BZ2_blockSort (origin5-bz2.c:3105)
by 0x........: BZ2_compressBlock (origin5-bz2.c:4034)
@@ -131,6 +120,12 @@
Conditional jump or move depends on uninitialised value(s)
at 0x........: main (origin5-bz2.c:6512)
- Uninitialised value was created by a client request
- at 0x........: main (origin5-bz2.c:6479)
+ Uninitialised value was created by a heap allocation
+ at 0x........: malloc (vg_replace_malloc.c:...)
+ by 0x........: g_serviceFn (origin5-bz2.c:6429)
+ by 0x........: default_bzalloc (origin5-bz2.c:4470)
+ by 0x........: BZ2_decompress (origin5-bz2.c:1578)
+ by 0x........: BZ2_bzDecompress (origin5-bz2.c:5192)
+ by 0x........: BZ2_bzBuffToBuffDecompress (origin5-bz2.c:5678)
+ by 0x........: main (origin5-bz2.c:6498)
=================================================
./valgrind-old/memcheck/tests/origin5-bz2.stderr.diff-glibc234-s390x
=================================================
--- origin5-bz2.stderr.exp-glibc234-s390x 2013-03-26 21:30:17.208242344 -0500
+++ origin5-bz2.stderr.out 2013-03-26 21:35:35.426453862 -0500
@@ -120,6 +120,12 @@
Conditional jump or move depends on uninitialised value(s)
at 0x........: main (origin5-bz2.c:6512)
- Uninitialised value was created by a client request
- at 0x........: main (origin5-bz2.c:6479)
+ Uninitialised value was created by a heap allocation
+ at 0x........: malloc (vg_replace_malloc.c:...)
+ by 0x........: g_serviceFn (origin5-bz2.c:6429)
+ by 0x........: default_bzalloc (origin5-bz2.c:4470)
+ by 0x........: BZ2_decompress (origin5-bz2.c:1578)
+ by 0x........: BZ2_bzDecompress (origin5-bz2.c:5192)
+ by 0x........: BZ2_bzBuffToBuffDecompress (origin5-bz2.c:5678)
+ by 0x........: main (origin5-bz2.c:6498)
=================================================
./valgrind-old/memcheck/tests/origin5-bz2.stderr.diff-glibc25-amd64
=================================================
--- origin5-bz2.stderr.exp-glibc25-amd64 2013-03-26 21:30:16.695256516 -0500
+++ origin5-bz2.stderr.out 2013-03-26 21:35:35.426453862 -0500
@@ -120,6 +120,12 @@
Conditional jump or move depends on uninitialised value(s)
at 0x........: main (origin5-bz2.c:6512)
- Uninitialised value was created by a client request
- at 0x........: main (origin5-bz2.c:6479)
+ Uninitialised value was created by a heap allocation
+ at 0x........: malloc (vg_replace_malloc.c:...)
+ by 0x........: g_serviceFn (origin5-bz2.c:6429)
+ by 0x........: default_bzalloc (origin5-bz2.c:4470)
+ by 0x........: BZ2_decompress (origin5-bz2.c:1578)
+ by 0x........: BZ2_bzDecompress (origin5-bz2.c:5192)
+ by 0x........: BZ2_bzBuffToBuffDecompress (origin5-bz2.c:5678)
+ by 0x........: main (origin5-bz2.c:6498)
=================================================
./valgrind-old/memcheck/tests/origin5-bz2.stderr.diff-glibc25-x86
=================================================
--- origin5-bz2.stderr.exp-glibc25-x86 2013-03-26 21:30:17.004247979 -0500
+++ origin5-bz2.stderr.out 2013-03-26 21:35:35.426453862 -0500
@@ -12,7 +12,7 @@
Uninitialised value was created by a client request
at 0x........: main (origin5-bz2.c:6479)
-Use of uninitialised value of size 4
+Use of uninitialised value of size 8
at 0x........: copy_input_until_stop (origin5-bz2.c:4686)
by 0x........: handle_compress (origin5-bz2.c:4750)
by 0x........: BZ2_bzCompress (origin5-bz2.c:4822)
@@ -21,7 +21,7 @@
Uninitialised value was created by a client request
at 0x........: main (origin5-bz2.c:6479)
-Use of uninitialised value of size 4
+Use of uninitialised value of size 8
at 0x........: copy_input_until_stop (origin5-bz2.c:4686)
by 0x........: handle_compress (origin5-bz2.c:4750)
by 0x........: BZ2_bzCompress (origin5-bz2.c:4822)
@@ -30,7 +30,7 @@
Uninitialised value was created by a client request
at 0x........: main (origin5-bz2.c:6479)
-Use of uninitialised value of size 4
+Use of uninitialised value of size 8
at 0x........: mainSort (origin5-bz2.c:2820)
by 0x........: BZ2_blockSort (origin5-bz2.c:3105)
by 0x........: BZ2_compressBlock (origin5-bz2.c:4034)
@@ -41,7 +41,7 @@
Uninitialised value was created by a client request
at 0x........: main (origin5-bz2.c:6479)
-Use of uninitialised value of size 4
+Use of uninitialised value of size 8
at 0x........: mainSort (origin5-bz2.c:2823)
by 0x........: BZ2_blockSort (origin5-bz2.c:3105)
by 0x........: BZ2_compressBlock (origin5-bz2.c:4034)
@@ -52,7 +52,7 @@
Uninitialised value was created by a client request
at 0x........: main (origin5-bz2.c:6479)
-Use of uninitialised value of size 4
+Use of uninitialised value of size 8
at 0x........: mainSort (origin5-bz2.c:2854)
by 0x........: BZ2_blockSort (origin5-bz2.c:3105)
by 0x........: BZ2_compressBlock (origin5-bz2.c:4034)
@@ -63,7 +63,7 @@
Uninitialised value was created by a client request
at 0x........: main (origin5-bz2.c:6479)
-Use of uninitialised value of size 4
+Use of uninitialised value of size 8
at 0x........: mainSort (origin5-bz2.c:2858)
by 0x........: BZ2_blockSort (origin5-bz2.c:3105)
by 0x........: BZ2_compressBlock (origin5-bz2.c:4034)
@@ -74,7 +74,7 @@
Uninitialised value was created by a client request
at 0x........: main (origin5-bz2.c:6479)
-Use of uninitialised value of size 4
+Use of uninitialised value of size 8
at 0x........: mainSort (origin5-bz2.c:2963)
by 0x........: BZ2_blockSort (origin5-bz2.c:3105)
by 0x........: BZ2_compressBlock (origin5-bz2.c:4034)
@@ -85,7 +85,7 @@
Uninitialised value was created by a client request
at 0x........: main (origin5-bz2.c:6479)
-Use of uninitialised value of size 4
+Use of uninitialised value of size 8
at 0x........: mainSort (origin5-bz2.c:2964)
by 0x........: BZ2_blockSort (origin5-bz2.c:3105)
by 0x........: BZ2_compressBlock (origin5-bz2.c:4034)
@@ -96,7 +96,7 @@
Uninitialised value was created by a client request
at 0x........: main (origin5-bz2.c:6479)
-Use of uninitialised value of size 4
+Use of uninitialised value of size 8
at 0x........: fallbackSort (origin5-bz2.c:2269)
by 0x........: BZ2_blockSort (origin5-bz2.c:3116)
by 0x........: BZ2_compressBlock (origin5-bz2.c:4034)
@@ -107,7 +107,7 @@
Uninitialised value was created by a client request
at 0x........: main (origin5-bz2.c:6479)
-Use of uninitialised value of size 4
+Use of uninitialised value of size 8
at 0x........: fallbackSort (origin5-bz2.c:2275)
by 0x........: BZ2_blockSort (origin5-bz2.c:3116)
by 0x........: BZ2_compressBlock (origin5-bz2.c:4034)
@@ -120,6 +120,12 @@
Conditional jump or move depends on uninitialised value(s)
at 0x........: main (origin5-bz2.c:6512)
- Uninitialised value was created by a client request
- at 0x........: main (origin5-bz2.c:6479)
+ Uninitialised value was created by a heap allocation
+ at 0x........: malloc (vg_replace_malloc.c:...)
<truncated beyond 100 lines>
=================================================
./valgrind-old/memcheck/tests/origin5-bz2.stderr.diff-glibc27-ppc64
=================================================
--- origin5-bz2.stderr.exp-glibc27-ppc64 2013-03-26 21:30:17.091245577 -0500
+++ origin5-bz2.stderr.out 2013-03-26 21:35:35.426453862 -0500
@@ -1,7 +1,7 @@
Conditional jump or move depends on uninitialised value(s)
at 0x........: main (origin5-bz2.c:6481)
Uninitialised value was created by a client request
- at 0x........: main (origin5-bz2.c:6481)
+ at 0x........: main (origin5-bz2.c:6479)
Conditional jump or move depends on uninitialised value(s)
at 0x........: copy_input_until_stop (origin5-bz2.c:4686)
@@ -10,7 +10,7 @@
by 0x........: BZ2_bzBuffToBuffCompress (origin5-bz2.c:5630)
by 0x........: main (origin5-bz2.c:6484)
Uninitialised value was created by a client request
- at 0x........: main (origin5-bz2.c:6481)
+ at 0x........: main (origin5-bz2.c:6479)
Use of uninitialised value of size 8
at 0x........: copy_input_until_stop (origin5-bz2.c:4686)
@@ -19,7 +19,7 @@
by 0x........: BZ2_bzBuffToBuffCompress (origin5-bz2.c:5630)
by 0x........: main (origin5-bz2.c:6484)
Uninitialised value was created by a client request
- at 0x........: main (origin5-bz2.c:6481)
+ at 0x........: main (origin5-bz2.c:6479)
Use of uninitialised value of size 8
at 0x........: copy_input_until_stop (origin5-bz2.c:4686)
@@ -28,7 +28,7 @@
by 0x........: BZ2_bzBuffToBuffCompress (origin5-bz2.c:5630)
by 0x........: main (origin5-bz2.c:6484)
Uninitialised value was created by a client request
- at 0x........: main (origin5-bz2.c:6481)
+ at 0x........: main (origin5-bz2.c:6479)
Use of uninitialised value of size 8
at 0x........: mainSort (origin5-bz2.c:2820)
@@ -39,7 +39,7 @@
by 0x........: BZ2_bzBuffToBuffCompress (origin5-bz2.c:5630)
by 0x........: main (origin5-bz2.c:6484)
Uninitialised value was created by a client request
- at 0x........: main (origin5-bz2.c:6481)
+ at 0x........: main (origin5-bz2.c:6479)
Use of uninitialised value of size 8
at 0x........: mainSort (origin5-bz2.c:2823)
@@ -50,7 +50,7 @@
by 0x........: BZ2_bzBuffToBuffCompress (origin5-bz2.c:5630)
by 0x........: main (origin5-bz2.c:6484)
Uninitialised value was created by a client request
- at 0x........: main (origin5-bz2.c:6481)
+ at 0x........: main (origin5-bz2.c:6479)
Use of uninitialised value of size 8
at 0x........: mainSort (origin5-bz2.c:2854)
@@ -61,7 +61,7 @@
by 0x........: BZ2_bzBuffToBuffCompress (origin5-bz2.c:5630)
by 0x........: main (origin5-bz2.c:6484)
Uninitialised value was created by a client request
- at 0x........: main (origin5-bz2.c:6481)
+ at 0x........: main (origin5-bz2.c:6479)
Use of uninitialised value of size 8
at 0x........: mainSort (origin5-bz2.c:2858)
@@ -72,7 +72,7 @@
by 0x........: BZ2_bzBuffToBuffCompress (origin5-bz2.c:5630)
by 0x........: main (origin5-bz2.c:6484)
Uninitialised value was created by a client request
- at 0x........: main (origin5-bz2.c:6481)
+ at 0x........: main (origin5-bz2.c:6479)
Use of uninitialised value of size 8
at 0x........: mainSort (origin5-bz2.c:2963)
@@ -83,7 +83,7 @@
by 0x........: BZ2_bzBuffToBuffCompress (origin5-bz2.c:5630)
by 0x........: main (origin5-bz2.c:6484)
Uninitialised value was created by a client request
- at 0x........: main (origin5-bz2.c:6481)
+ at 0x........: main (origin5-bz2.c:6479)
Use of uninitialised value of size 8
at 0x........: mainSort (origin5-bz2.c:2964)
@@ -94,7 +94,7 @@
by 0x........: BZ2_bzBuffToBuffCompress (origin5-bz2.c:5630)
by 0x........: main (origin5-bz2.c:6484)
Uninitialised value was created by a client request
- at 0x........: main (origin5-bz2.c:6481)
+ at 0x........: main (origin5-bz2.c:6479)
Use of uninitialised value of size 8
at 0x........: fallbackSort (origin5-bz2.c:2269)
@@ -105,7 +105,7 @@
by 0x........: BZ2_bzBuffToBuffCompress (origin5-bz2.c:5630)
by 0x........: main (origin5-bz2.c:6484)
Uninitialised value was created by a client request
- at 0x........: main (origin5-bz2.c:6481)
+ at 0x........: main (origin5-bz2.c:6479)
Use of uninitialised value of size 8
<truncated beyond 100 lines>
|
|
From: Tom H. <to...@co...> - 2013-03-27 02:49:52
|
valgrind revision: 13337 VEX revision: 2701 C compiler: gcc (GCC) 4.8.0 20130320 (Red Hat 4.8.0-0.18) GDB: GNU gdb (GDB) Fedora (7.5.50.20130310-13.fc19) Assembler: GNU assembler version 2.23.52.0.1-9.fc20 20130226 C library: GNU C Library (GNU libc) stable release version 2.17 uname -mrs: Linux 3.7.1-5.fc18.x86_64 x86_64 Vendor version: Fedora release 20 (Rawhide) Nightly build on bristol ( x86_64, Fedora 20 ) Started at 2013-03-27 02:23:36 GMT Ended at 2013-03-27 02:49:38 GMT Results differ from 24 hours ago Checking out valgrind source tree ... done Configuring valgrind ... done Building valgrind ... done Running regression tests ... failed Regression test results follow == 651 tests, 5 stderr failures, 0 stdout failures, 0 stderrB failures, 0 stdoutB failures, 0 post failures == memcheck/tests/dw4 (stderr) memcheck/tests/origin5-bz2 (stderr) memcheck/tests/overlap (stderr) memcheck/tests/strchr (stderr) exp-sgcheck/tests/hackedbz2 (stderr) ================================================= == Results from 24 hours ago == ================================================= Checking out valgrind source tree ... done Configuring valgrind ... done Building valgrind ... done Running regression tests ... failed Regression test results follow == 651 tests, 3 stderr failures, 0 stdout failures, 0 stderrB failures, 0 stdoutB failures, 0 post failures == memcheck/tests/dw4 (stderr) memcheck/tests/origin5-bz2 (stderr) exp-sgcheck/tests/hackedbz2 (stderr) ================================================= == Difference between 24 hours ago and now == ================================================= *** old.short 2013-03-27 02:36:36.072572958 +0000 --- new.short 2013-03-27 02:49:38.268153155 +0000 *************** *** 8,12 **** ! == 651 tests, 3 stderr failures, 0 stdout failures, 0 stderrB failures, 0 stdoutB failures, 0 post failures == memcheck/tests/dw4 (stderr) memcheck/tests/origin5-bz2 (stderr) exp-sgcheck/tests/hackedbz2 (stderr) --- 8,14 ---- ! == 651 tests, 5 stderr failures, 0 stdout failures, 0 stderrB failures, 0 stdoutB failures, 0 post failures == memcheck/tests/dw4 (stderr) memcheck/tests/origin5-bz2 (stderr) + memcheck/tests/overlap (stderr) + memcheck/tests/strchr (stderr) exp-sgcheck/tests/hackedbz2 (stderr) |