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
(6) |
2
(10) |
3
(4) |
|
4
|
5
|
6
|
7
|
8
|
9
(2) |
10
|
|
11
|
12
(6) |
13
(5) |
14
(2) |
15
(4) |
16
(3) |
17
(1) |
|
18
|
19
(1) |
20
(6) |
21
(4) |
22
|
23
|
24
(2) |
|
25
|
26
(4) |
27
(10) |
28
(12) |
29
(29) |
30
(6) |
|
|
From: Sebastien C. <seb...@ya...> - 2010-04-15 19:56:29
|
Hi,
It seems the instructions were already handled in VEX but not with the REX prefix. I tried changing the code to work around it like the following:
/* 66 0F FC = PADDB */
- if (have66noF2noF3(pfx) && sz == 2
+ if ((have66noF2noF3(pfx) || haveREX(pfx))
+ && (sz == 2 || /* ignore redundant REX.W */ sz == 8)
&& insn[0] == 0x0F && insn[1] == 0xFC) {
delta = dis_SSEint_E_to_G( vbi, pfx, delta+2,
"paddb", Iop_Add8x16, False );
I may have broken something with this change but it got rid of the previous unhandled instructions. However, now I get an unhandled instruction on:
66 48 0f d7 c0 pmovmskb %xmm0,%rax
Now I really don't know how to work around this because the handling of the pmovmskb instruction is much more complex than the previous ones.
Thanks,
Sebastien
--- On Thu, 4/15/10, Philippe Waroquiers <phi...@sk...> wrote:
> From: Philippe Waroquiers <phi...@sk...>
> Subject: Re: [Valgrind-developers] Unhandled instruction on x86-64
> To: val...@li...
> Received: Thursday, April 15, 2010, 2:30 AM
> > Is there a document that
> describes how to add support for new instructions? I
> wouldn't mind if valgrind just skipped these
> > instructions without checking for memory errors.
> >
> > Any help would be appreciated.
> I do not know if there is a document explaining all that
> but maybe the easiest is to take
> one of the recent patches that have added an instruction
> and mimick that ?
>
> e.g. an instruction was added by the following 2 posts to
> valgrind dev
> [Valgrind-developers] vex: r1971 -
> trunk/priv
> [Valgrind-developers] vex: r1972 -
> trunk/priv
>
> Philippe
>
>
> ------------------------------------------------------------------------------
> Download Intel® Parallel Studio Eval
> Try the new software tools for yourself. Speed compiling,
> find bugs
> proactively, and fine-tune applications for parallel
> performance.
> See why Intel Parallel Studio got high marks during beta.
> http://p.sf.net/sfu/intel-sw-dev
> _______________________________________________
> Valgrind-developers mailing list
> Val...@li...
> https://lists.sourceforge.net/lists/listinfo/valgrind-developers
>
|
|
From: <sv...@va...> - 2010-04-15 14:42:50
|
Author: de
Date: 2010-04-15 15:42:41 +0100 (Thu, 15 Apr 2010)
New Revision: 1974
Log:
Fix up printing for some of the SSE4.1 insns.
Modified:
trunk/priv/guest_amd64_toIR.c
Modified: trunk/priv/guest_amd64_toIR.c
===================================================================
--- trunk/priv/guest_amd64_toIR.c 2010-04-15 12:48:35 UTC (rev 1973)
+++ trunk/priv/guest_amd64_toIR.c 2010-04-15 14:42:41 UTC (rev 1974)
@@ -13719,18 +13719,17 @@
imm8 = (Int)insn[4];
assign( src_vec, getXMMReg( eregOfRexRM(pfx, modrm) ) );
delta += 3+1+1;
- DIP( "blendpd %s,%s,$%d\n",
+ DIP( "blendpd $%d, %s,%s\n", imm8,
nameXMMReg( eregOfRexRM(pfx, modrm) ),
- nameXMMReg( gregOfRexRM(pfx, modrm) ),
- imm8 );
+ nameXMMReg( gregOfRexRM(pfx, modrm) ) );
} else {
addr = disAMode( &alen, vbi, pfx, delta+3, dis_buf,
1/* imm8 is 1 byte after the amode */ );
assign( src_vec, loadLE( Ity_V128, mkexpr(addr) ) );
imm8 = (Int)insn[2+alen+1];
delta += 3+alen+1;
- DIP( "blendpd %s,%s,$%d\n",
- dis_buf, nameXMMReg( gregOfRexRM(pfx, modrm) ), imm8 );
+ DIP( "blendpd $%d, %s,%s\n",
+ imm8, dis_buf, nameXMMReg( gregOfRexRM(pfx, modrm) ) );
}
switch( imm8 & 3 ) {
@@ -13770,18 +13769,17 @@
imm8 = (Int)insn[3+1];
assign( src_vec, getXMMReg( eregOfRexRM(pfx, modrm) ) );
delta += 3+1+1;
- DIP( "blendps %s,%s,$%d\n",
+ DIP( "blendps $%d, %s,%s\n", imm8,
nameXMMReg( eregOfRexRM(pfx, modrm) ),
- nameXMMReg( gregOfRexRM(pfx, modrm) ),
- imm8 );
+ nameXMMReg( gregOfRexRM(pfx, modrm) ) );
} else {
addr = disAMode( &alen, vbi, pfx, delta+3, dis_buf,
1/* imm8 is 1 byte after the amode */ );
assign( src_vec, loadLE( Ity_V128, mkexpr(addr) ) );
imm8 = (Int)insn[3+alen];
delta += 3+alen+1;
- DIP( "blendpd %s,%s$%d\n",
- dis_buf, nameXMMReg( gregOfRexRM(pfx, modrm) ), imm8 );
+ DIP( "blendpd $%d, %s,%s\n",
+ imm8, dis_buf, nameXMMReg( gregOfRexRM(pfx, modrm) ) );
}
UShort imm8_perms[16] = { 0x0000, 0x000F, 0x00F0, 0x00FF, 0x0F00, 0x0F0F,
@@ -13820,18 +13818,17 @@
imm8 = (Int)insn[4];
assign( src_vec, getXMMReg( eregOfRexRM(pfx, modrm) ) );
delta += 3+1+1;
- DIP( "dppd %s,%s,$%d\n",
+ DIP( "dppd $%d, %s,%s\n", imm8,
nameXMMReg( eregOfRexRM(pfx, modrm) ),
- nameXMMReg( gregOfRexRM(pfx, modrm) ),
- imm8 );
+ nameXMMReg( gregOfRexRM(pfx, modrm) ) );
} else {
addr = disAMode( &alen, vbi, pfx, delta+3, dis_buf,
1/* imm8 is 1 byte after the amode */ );
assign( src_vec, loadLE( Ity_V128, mkexpr(addr) ) );
imm8 = (Int)insn[2+alen+1];
delta += 3+alen+1;
- DIP( "dppd %s,%s$%d\n",
- dis_buf, nameXMMReg( gregOfRexRM(pfx, modrm) ), imm8 );
+ DIP( "dppd $%d, %s,%s\n",
+ imm8, dis_buf, nameXMMReg( gregOfRexRM(pfx, modrm) ) );
}
UShort imm8_perms[4] = { 0x0000, 0x00FF, 0xFF00, 0xFFFF };
@@ -13882,18 +13879,17 @@
imm8 = (Int)insn[4];
assign( xmm2_vec, getXMMReg( eregOfRexRM(pfx, modrm) ) );
delta += 3+1+1;
- DIP( "dpps %s,%s,$%d\n",
+ DIP( "dpps $%d, %s,%s\n", imm8,
nameXMMReg( eregOfRexRM(pfx, modrm) ),
- nameXMMReg( gregOfRexRM(pfx, modrm) ),
- imm8 );
+ nameXMMReg( gregOfRexRM(pfx, modrm) ) );
} else {
addr = disAMode( &alen, vbi, pfx, delta+3, dis_buf,
1/* imm8 is 1 byte after the amode */ );
assign( xmm2_vec, loadLE( Ity_V128, mkexpr(addr) ) );
imm8 = (Int)insn[2+alen+1];
delta += 3+alen+1;
- DIP( "dpps %s,%s$%d\n",
- dis_buf, nameXMMReg( gregOfRexRM(pfx, modrm) ), imm8 );
+ DIP( "dpps $%d, %s,%s\n",
+ imm8, dis_buf, nameXMMReg( gregOfRexRM(pfx, modrm) ) );
}
UShort imm8_perms[16] = { 0x0000, 0x000F, 0x00F0, 0x00FF, 0x0F00,
@@ -13965,10 +13961,9 @@
}
delta += 3+1+1;
- DIP( "insertps %s,%s,$%d\n",
+ DIP( "insertps $%d, %s,%s\n", imm8,
nameXMMReg( eregOfRexRM(pfx, modrm) ),
- nameXMMReg( gregOfRexRM(pfx, modrm) ),
- imm8 );
+ nameXMMReg( gregOfRexRM(pfx, modrm) ) );
} else {
addr = disAMode( &alen, vbi, pfx, delta+3, dis_buf,
1/* const imm8 is 1 byte after the amode */ );
@@ -13976,8 +13971,8 @@
imm8 = (Int)insn[2+alen+1];
imm8_count_s = 0;
delta += 3+alen+1;
- DIP( "insertps %s,%s,$%d\n",
- dis_buf, nameXMMReg( gregOfRexRM(pfx, modrm) ), imm8 );
+ DIP( "insertps $%d, %s,%s\n",
+ imm8, dis_buf, nameXMMReg( gregOfRexRM(pfx, modrm) ) );
}
IRTemp dst_lane_0 = IRTemp_INVALID;
@@ -14049,14 +14044,14 @@
binop(Iop_And32, mkexpr(shr_lane), mkU32(255)) ) );
delta += 3+1+1;
- DIP( "pextrb %s,%s,$%d\n",
- nameXMMReg( gregOfRexRM(pfx, modrm) ),
- nameXMMReg( eregOfRexRM(pfx, modrm) ), imm8 );
+ DIP( "pextrb $%d, %s,%s\n", imm8,
+ nameXMMReg( gregOfRexRM(pfx, modrm) ),
+ nameIReg64( eregOfRexRM(pfx, modrm) ) );
} else {
storeLE( mkexpr(addr), unop(Iop_32to8, mkexpr(shr_lane) ) );
delta += 3+alen+1;
- DIP( "pextrb %s,%s,$%d\n",
- nameXMMReg( gregOfRexRM(pfx, modrm) ), dis_buf, imm8 );
+ DIP( "$%d, pextrb %s,%s\n",
+ imm8, nameXMMReg( gregOfRexRM(pfx, modrm) ), dis_buf );
}
goto decode_success;
@@ -14097,14 +14092,14 @@
if ( epartIsReg( modrm ) ) {
putIReg32( eregOfRexRM(pfx,modrm), mkexpr(src_dword) );
delta += 3+1+1;
- DIP( "pextrd %s,%s,$%d\n",
+ DIP( "pextrd $%d, %s,%s\n", imm8_10,
nameXMMReg( gregOfRexRM(pfx, modrm) ),
- nameXMMReg( eregOfRexRM(pfx, modrm) ), imm8_10 );
+ nameIReg32( eregOfRexRM(pfx, modrm) ) );
} else {
storeLE( mkexpr(addr), mkexpr(src_dword) );
delta += 3+alen+1;
- DIP( "pextrd %s,%s,$%d\n",
- nameXMMReg( gregOfRexRM(pfx, modrm) ), dis_buf, imm8_10 );
+ DIP( "pextrd $%d, %s,%s\n",
+ imm8_10, nameXMMReg( gregOfRexRM(pfx, modrm) ), dis_buf );
}
goto decode_success;
@@ -14141,14 +14136,14 @@
if ( epartIsReg( modrm ) ) {
putIReg64( eregOfRexRM(pfx,modrm), mkexpr(src_qword) );
delta += 3+1+1;
- DIP( "pextrq %s,%s,$%d\n",
+ DIP( "pextrq $%d, %s,%s\n", imm8_0,
nameXMMReg( gregOfRexRM(pfx, modrm) ),
- nameXMMReg( eregOfRexRM(pfx, modrm) ), imm8_0 );
+ nameIReg64( eregOfRexRM(pfx, modrm) ) );
} else {
storeLE( mkexpr(addr), mkexpr(src_qword) );
delta += 3+alen+1;
- DIP( "pextrq %s,%s,$%d\n",
- nameXMMReg( gregOfRexRM(pfx, modrm) ), dis_buf, imm8_0 );
+ DIP( "pextrq $%d, %s,%s\n",
+ imm8_0, nameXMMReg( gregOfRexRM(pfx, modrm) ), dis_buf );
}
goto decode_success;
@@ -14191,14 +14186,14 @@
if ( epartIsReg( modrm ) ) {
putIReg64( eregOfRexRM(pfx,modrm), unop(Iop_16Uto64, mkexpr(src_word)) );
delta += 3+1+1;
- DIP( "pextrw %s,%s,$%d\n",
+ DIP( "pextrw $%d, %s,%s\n", imm8_20,
nameXMMReg( gregOfRexRM(pfx, modrm) ),
- nameXMMReg( eregOfRexRM(pfx, modrm) ), imm8_20 );
+ nameIReg64( eregOfRexRM(pfx, modrm) ) );
} else {
storeLE( mkexpr(addr), mkexpr(src_word) );
delta += 3+alen+1;
- DIP( "pextrw %s,%s,$%d\n",
- nameXMMReg( gregOfRexRM(pfx, modrm) ), dis_buf, imm8_20 );
+ DIP( "pextrw $%d, %s,%s\n",
+ imm8_20, nameXMMReg( gregOfRexRM(pfx, modrm) ), dis_buf );
}
goto decode_success;
|
|
From: <sv...@va...> - 2010-04-15 12:48:44
|
Author: de
Date: 2010-04-15 13:48:35 +0100 (Thu, 15 Apr 2010)
New Revision: 1973
Log:
Added new SSE4.1 instructions:
PEXTRW, PEXTRQ, PEXTRD, PEXTRB
Modified:
trunk/priv/guest_amd64_toIR.c
Modified: trunk/priv/guest_amd64_toIR.c
===================================================================
--- trunk/priv/guest_amd64_toIR.c 2010-04-12 12:55:44 UTC (rev 1972)
+++ trunk/priv/guest_amd64_toIR.c 2010-04-15 12:48:35 UTC (rev 1973)
@@ -13767,7 +13767,7 @@
assign( dst_vec, getXMMReg( gregOfRexRM(pfx, modrm) ) );
if ( epartIsReg( modrm ) ) {
- imm8 = (Int)insn[4];
+ imm8 = (Int)insn[3+1];
assign( src_vec, getXMMReg( eregOfRexRM(pfx, modrm) ) );
delta += 3+1+1;
DIP( "blendps %s,%s,$%d\n",
@@ -13778,7 +13778,7 @@
addr = disAMode( &alen, vbi, pfx, delta+3, dis_buf,
1/* imm8 is 1 byte after the amode */ );
assign( src_vec, loadLE( Ity_V128, mkexpr(addr) ) );
- imm8 = (Int)insn[2+alen+1];
+ imm8 = (Int)insn[3+alen];
delta += 3+alen+1;
DIP( "blendpd %s,%s$%d\n",
dis_buf, nameXMMReg( gregOfRexRM(pfx, modrm) ), imm8 );
@@ -14012,6 +14012,199 @@
}
+ /* 66 0F 3A 14 /r ib = PEXTRB r/m16, xmm, imm8
+ Extract Byte from xmm, store in mem or zero-extend + store in gen.reg. (XMM) */
+ if ( have66noF2noF3( pfx )
+ && sz == 2
+ && insn[0] == 0x0F && insn[1] == 0x3A && insn[2] == 0x14 ) {
+
+ Int imm8;
+ IRTemp xmm_vec = newTemp(Ity_V128);
+ IRTemp sel_lane = newTemp(Ity_I32);
+ IRTemp shr_lane = newTemp(Ity_I32);
+
+ modrm = insn[3];
+ assign( xmm_vec, getXMMReg( gregOfRexRM(pfx,modrm) ) );
+ breakup128to32s( xmm_vec, &t3, &t2, &t1, &t0 );
+
+ if ( epartIsReg( modrm ) ) {
+ imm8 = (Int)insn[3+1];
+ } else {
+ addr = disAMode( &alen, vbi, pfx, delta+3, dis_buf, 1 );
+ imm8 = (Int)insn[3+alen];
+ }
+ switch( (imm8 >> 2) & 3 ) {
+ case 0: assign( sel_lane, mkexpr(t0) ); break;
+ case 1: assign( sel_lane, mkexpr(t1) ); break;
+ case 2: assign( sel_lane, mkexpr(t2) ); break;
+ case 3: assign( sel_lane, mkexpr(t3) ); break;
+ default: vassert(0);
+ }
+ assign( shr_lane,
+ binop( Iop_Shr32, mkexpr(sel_lane), mkU8(((imm8 & 3)*8)) ) );
+
+ if ( epartIsReg( modrm ) ) {
+ putIReg64( eregOfRexRM(pfx,modrm),
+ unop( Iop_32Uto64,
+ binop(Iop_And32, mkexpr(shr_lane), mkU32(255)) ) );
+
+ delta += 3+1+1;
+ DIP( "pextrb %s,%s,$%d\n",
+ nameXMMReg( gregOfRexRM(pfx, modrm) ),
+ nameXMMReg( eregOfRexRM(pfx, modrm) ), imm8 );
+ } else {
+ storeLE( mkexpr(addr), unop(Iop_32to8, mkexpr(shr_lane) ) );
+ delta += 3+alen+1;
+ DIP( "pextrb %s,%s,$%d\n",
+ nameXMMReg( gregOfRexRM(pfx, modrm) ), dis_buf, imm8 );
+ }
+
+ goto decode_success;
+ }
+
+
+ /* 66 0F 3A 16 /r ib = PEXTRD reg/mem32, xmm2, imm8
+ Extract Doubleword int from xmm reg and store in gen.reg or mem. (XMM)
+ Note that this insn has the same opcodes as PEXTRQ, but
+ here the REX.W bit is _not_ present */
+ if ( have66noF2noF3( pfx )
+ && sz == 2 /* REX.W is _not_ present */
+ && insn[0] == 0x0F && insn[1] == 0x3A && insn[2] == 0x16 ) {
+
+ Int imm8_10;
+ IRTemp xmm_vec = newTemp(Ity_V128);
+ IRTemp src_dword = newTemp(Ity_I32);
+
+ modrm = insn[3];
+ assign( xmm_vec, getXMMReg( gregOfRexRM(pfx,modrm) ) );
+ breakup128to32s( xmm_vec, &t3, &t2, &t1, &t0 );
+
+ if ( epartIsReg( modrm ) ) {
+ imm8_10 = (Int)(insn[3+1] & 3);
+ } else {
+ addr = disAMode( &alen, vbi, pfx, delta+3, dis_buf, 1 );
+ imm8_10 = (Int)(insn[3+alen] & 3);
+ }
+
+ switch ( imm8_10 ) {
+ case 0: assign( src_dword, mkexpr(t0) ); break;
+ case 1: assign( src_dword, mkexpr(t1) ); break;
+ case 2: assign( src_dword, mkexpr(t2) ); break;
+ case 3: assign( src_dword, mkexpr(t3) ); break;
+ default: vassert(0);
+ }
+
+ if ( epartIsReg( modrm ) ) {
+ putIReg32( eregOfRexRM(pfx,modrm), mkexpr(src_dword) );
+ delta += 3+1+1;
+ DIP( "pextrd %s,%s,$%d\n",
+ nameXMMReg( gregOfRexRM(pfx, modrm) ),
+ nameXMMReg( eregOfRexRM(pfx, modrm) ), imm8_10 );
+ } else {
+ storeLE( mkexpr(addr), mkexpr(src_dword) );
+ delta += 3+alen+1;
+ DIP( "pextrd %s,%s,$%d\n",
+ nameXMMReg( gregOfRexRM(pfx, modrm) ), dis_buf, imm8_10 );
+ }
+
+ goto decode_success;
+ }
+
+
+ /* 66 REX.W 0F 3A 16 /r ib = PEXTRQ reg/mem64, xmm2, imm8
+ Extract Quadword int from xmm reg and store in gen.reg or mem. (XMM)
+ Note that this insn has the same opcodes as PEXTRD, but
+ here the REX.W bit is present */
+ if ( have66noF2noF3( pfx )
+ && sz == 8 /* REX.W is present */
+ && insn[0] == 0x0F && insn[1] == 0x3A && insn[2] == 0x16 ) {
+
+ Int imm8_0;
+ IRTemp xmm_vec = newTemp(Ity_V128);
+ IRTemp src_qword = newTemp(Ity_I64);
+
+ modrm = insn[3];
+ assign( xmm_vec, getXMMReg( gregOfRexRM(pfx,modrm) ) );
+
+ if ( epartIsReg( modrm ) ) {
+ imm8_0 = (Int)(insn[3+1] & 1);
+ } else {
+ addr = disAMode( &alen, vbi, pfx, delta+3, dis_buf, 1 );
+ imm8_0 = (Int)(insn[3+alen] & 1);
+ }
+ switch ( imm8_0 ) {
+ case 0: assign( src_qword, unop(Iop_V128to64, mkexpr(xmm_vec)) ); break;
+ case 1: assign( src_qword, unop(Iop_V128HIto64, mkexpr(xmm_vec)) ); break;
+ default: vassert(0);
+ }
+
+ if ( epartIsReg( modrm ) ) {
+ putIReg64( eregOfRexRM(pfx,modrm), mkexpr(src_qword) );
+ delta += 3+1+1;
+ DIP( "pextrq %s,%s,$%d\n",
+ nameXMMReg( gregOfRexRM(pfx, modrm) ),
+ nameXMMReg( eregOfRexRM(pfx, modrm) ), imm8_0 );
+ } else {
+ storeLE( mkexpr(addr), mkexpr(src_qword) );
+ delta += 3+alen+1;
+ DIP( "pextrq %s,%s,$%d\n",
+ nameXMMReg( gregOfRexRM(pfx, modrm) ), dis_buf, imm8_0 );
+ }
+
+ goto decode_success;
+ }
+
+
+ /* 66 0F 3A 15 /r ib = PEXTRW r/m16, xmm, imm8
+ Extract Word from xmm, store in mem or zero-extend + store in gen.reg. (XMM) */
+ if ( have66noF2noF3( pfx )
+ && sz == 2
+ && insn[0] == 0x0F && insn[1] == 0x3A && insn[2] == 0x15 ) {
+
+ Int imm8_20;
+ IRTemp xmm_vec = newTemp(Ity_V128);
+ IRTemp src_word = newTemp(Ity_I16);
+
+ modrm = insn[3];
+ assign( xmm_vec, getXMMReg( gregOfRexRM(pfx,modrm) ) );
+ breakup128to32s( xmm_vec, &t3, &t2, &t1, &t0 );
+
+ if ( epartIsReg( modrm ) ) {
+ imm8_20 = (Int)(insn[3+1] & 7);
+ } else {
+ addr = disAMode( &alen, vbi, pfx, delta+3, dis_buf, 1 );
+ imm8_20 = (Int)(insn[3+alen] & 7);
+ }
+
+ switch ( imm8_20 ) {
+ case 0: assign( src_word, unop(Iop_32to16, mkexpr(t0)) ); break;
+ case 1: assign( src_word, unop(Iop_32HIto16, mkexpr(t0)) ); break;
+ case 2: assign( src_word, unop(Iop_32to16, mkexpr(t1)) ); break;
+ case 3: assign( src_word, unop(Iop_32HIto16, mkexpr(t1)) ); break;
+ case 4: assign( src_word, unop(Iop_32to16, mkexpr(t2)) ); break;
+ case 5: assign( src_word, unop(Iop_32HIto16, mkexpr(t2)) ); break;
+ case 6: assign( src_word, unop(Iop_32to16, mkexpr(t3)) ); break;
+ case 7: assign( src_word, unop(Iop_32HIto16, mkexpr(t3)) ); break;
+ default: vassert(0);
+ }
+
+ if ( epartIsReg( modrm ) ) {
+ putIReg64( eregOfRexRM(pfx,modrm), unop(Iop_16Uto64, mkexpr(src_word)) );
+ delta += 3+1+1;
+ DIP( "pextrw %s,%s,$%d\n",
+ nameXMMReg( gregOfRexRM(pfx, modrm) ),
+ nameXMMReg( eregOfRexRM(pfx, modrm) ), imm8_20 );
+ } else {
+ storeLE( mkexpr(addr), mkexpr(src_word) );
+ delta += 3+alen+1;
+ DIP( "pextrw %s,%s,$%d\n",
+ nameXMMReg( gregOfRexRM(pfx, modrm) ), dis_buf, imm8_20 );
+ }
+
+ goto decode_success;
+ }
+
+
/* 66 0F 38 3D /r = PMAXSD xmm1, xmm2/m128
Maximum of Packed Signed Double Word Integers (XMM)
--
|
|
From: Philippe W. <phi...@sk...> - 2010-04-15 06:30:22
|
> Is there a document that describes how to add support for new instructions? I wouldn't mind if valgrind just skipped these
> instructions without checking for memory errors.
>
> Any help would be appreciated.
I do not know if there is a document explaining all that but maybe the easiest is to take
one of the recent patches that have added an instruction and mimick that ?
e.g. an instruction was added by the following 2 posts to valgrind dev
[Valgrind-developers] vex: r1971 - trunk/priv
[Valgrind-developers] vex: r1972 - trunk/priv
Philippe
|
|
From: Sebastien C. <seb...@ya...> - 2010-04-14 20:53:04
|
Hi, Running memcheck on my application which is using the Intel Performance Primitive library doesn't work because of some unhandled instructions. I opened bug 233638 to track the problem. ( http://bugs.kde.org/show_bug.cgi?id=233638 ) I would really like to get valgrind to run on that application to help tracking memory leaks, but I really don't know where to start. Is there a document that describes how to add support for new instructions? I wouldn't mind if valgrind just skipped these instructions without checking for memory errors. Any help would be appreciated. Sebastien __________________________________________________________________ Looking for the perfect gift? Give the gift of Flickr! http://www.flickr.com/gift/ |
|
From: Loïc M. <lo...@do...> - 2010-04-14 16:32:30
|
On Fri, Mar 26, 2010, Loïc Minier wrote: > Yup, will look into this -- it's clear a 3.6.0 tarball would be too > late for inclusion I'm afraid I failed pushing such an update (didn't file a featurefreeze exception for this); was too busy with other deadlines. Specific patches on top of our current snapshot addressing high impact bugs would be welcome though, either in bugs or sent to me or whatever. Sorry, -- Loïc Minier |
|
From: Philippe W. <phi...@sk...> - 2010-04-13 19:38:29
|
Hello,
In the framework of gdbserver in valgrind, I am looking at automating the tests of a gdb
debugging a valgrind-ified process.
Several options are possible for that:
A use of tcl/expect (this is the standard way with which gdb is tested)
B use of perl/expect. I have experimented with this, and it works quite well.
C a "home made" script hack doing something vaguely similar to A or B.
C does not look that attractive (reinventing the wheel).
B looks more attractive than A (as valgrind tests are already using perl).
However, B implies to have the perl expect module installed (at least on fedora, it is
not installed by default).
Is it ok to add perl expect module as a pre-requisite for the gdb tests ?
On top of this perf/expect modul, I am thinking to add a new
gdbprog:
line to be handled by vg_regtest.
When this line is given, it means that vg_regtest will launch two programs:
* one program is the prog: to be "valgrind-ified"
* the other program will (typically) be a perl expect script which will
debug the first program.
The *.stdout.exp and *.stderr.exp will then verify what the 2nd program has
produced.
Does that approach look ok ?
Thanks in advance for any feedback/advice/...
|
|
From: Alexander P. <gl...@go...> - 2010-04-13 08:44:46
|
Nightly build on mcgrind ( Darwin 9.8.0 i386 ) Started at 2010-04-13 09:06:00 MSD Ended at 2010-04-13 09:25:45 MSD 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 == 438 tests, 16 stderr failures, 1 stdout failure, 0 post failures == memcheck/tests/null_socket (stdout) memcheck/tests/origin5-bz2 (stderr) memcheck/tests/varinfo1 (stderr) memcheck/tests/varinfo2 (stderr) memcheck/tests/varinfo3 (stderr) memcheck/tests/varinfo4 (stderr) memcheck/tests/varinfo5 (stderr) memcheck/tests/varinfo6 (stderr) none/tests/async-sigs (stderr) none/tests/faultstatus (stderr) none/tests/pth_blockedsig (stderr) helgrind/tests/hg05_race2 (stderr) helgrind/tests/rwlock_race (stderr) helgrind/tests/tc06_two_races_xml (stderr) helgrind/tests/tc18_semabuse (stderr) helgrind/tests/tc23_bogus_condwait (stderr) drd/tests/annotate_barrier (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 == 438 tests, 23 stderr failures, 1 stdout failure, 0 post failures == memcheck/tests/null_socket (stdout) memcheck/tests/origin5-bz2 (stderr) memcheck/tests/varinfo1 (stderr) memcheck/tests/varinfo2 (stderr) memcheck/tests/varinfo3 (stderr) memcheck/tests/varinfo4 (stderr) memcheck/tests/varinfo5 (stderr) memcheck/tests/varinfo6 (stderr) none/tests/async-sigs (stderr) none/tests/faultstatus (stderr) none/tests/pth_blockedsig (stderr) helgrind/tests/hg03_inherit (stderr) helgrind/tests/hg04_race (stderr) helgrind/tests/hg05_race2 (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/tc16_byterace (stderr) helgrind/tests/tc18_semabuse (stderr) helgrind/tests/tc21_pthonce (stderr) helgrind/tests/tc23_bogus_condwait (stderr) drd/tests/annotate_barrier (stderr) ================================================= == Difference between 24 hours ago and now == ================================================= *** old.short Tue Apr 13 09:16:03 2010 --- new.short Tue Apr 13 09:25:45 2010 *************** *** 8,10 **** ! == 438 tests, 23 stderr failures, 1 stdout failure, 0 post failures == memcheck/tests/null_socket (stdout) --- 8,10 ---- ! == 438 tests, 16 stderr failures, 1 stdout failure, 0 post failures == memcheck/tests/null_socket (stdout) *************** *** 20,32 **** none/tests/pth_blockedsig (stderr) - helgrind/tests/hg03_inherit (stderr) - helgrind/tests/hg04_race (stderr) helgrind/tests/hg05_race2 (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/tc16_byterace (stderr) helgrind/tests/tc18_semabuse (stderr) - helgrind/tests/tc21_pthonce (stderr) helgrind/tests/tc23_bogus_condwait (stderr) --- 20,25 ---- -- Alexander Potapenko Software Engineer Google Moscow |
|
From: Bart V. A. <bar...@gm...> - 2010-04-13 07:51:00
|
Nightly build on cellbuzz-native ( cellbuzz, ppc64, Fedora 7, native ) Started at 2010-04-13 02:28:45 EDT Ended at 2010-04-13 03:50:41 EDT Results differ from 24 hours ago Checking out valgrind source tree ... done Configuring valgrind ... done Building valgrind ... done Running regression tests ... done Regression test results follow == 454 tests, 42 stderr failures, 10 stdout failures, 0 post failures == memcheck/tests/deep_templates (stdout) memcheck/tests/leak-cases-full (stderr) memcheck/tests/leak-cases-summary (stderr) memcheck/tests/leak-cycle (stderr) memcheck/tests/linux/timerfd-syscall (stdout) memcheck/tests/linux-syscalls-2007 (stderr) memcheck/tests/origin5-bz2 (stderr) memcheck/tests/varinfo1 (stderr) memcheck/tests/varinfo2 (stderr) memcheck/tests/varinfo3 (stderr) memcheck/tests/varinfo4 (stderr) memcheck/tests/varinfo5 (stderr) memcheck/tests/varinfo6 (stderr) memcheck/tests/wrap8 (stdout) memcheck/tests/wrap8 (stderr) none/tests/empty-exe (stderr) none/tests/linux/mremap (stderr) none/tests/ppc32/jm-fp (stdout) none/tests/ppc32/jm-vmx (stdout) none/tests/ppc32/round (stdout) none/tests/ppc32/test_gx (stdout) none/tests/ppc64/jm-fp (stdout) none/tests/ppc64/jm-vmx (stdout) none/tests/ppc64/round (stdout) none/tests/shell_valid2 (stderr) none/tests/shell_valid3 (stderr) none/tests/shell_zerolength (stderr) helgrind/tests/hg05_race2 (stderr) helgrind/tests/tc06_two_races_xml (stderr) helgrind/tests/tc23_bogus_condwait (stderr) exp-ptrcheck/tests/bad_percentify (stderr) exp-ptrcheck/tests/base (stderr) exp-ptrcheck/tests/ccc (stderr) exp-ptrcheck/tests/fp (stderr) exp-ptrcheck/tests/globalerr (stderr) exp-ptrcheck/tests/hackedbz2 (stderr) exp-ptrcheck/tests/hp_bounds (stderr) exp-ptrcheck/tests/hp_dangle (stderr) exp-ptrcheck/tests/hsg (stderr) exp-ptrcheck/tests/justify (stderr) exp-ptrcheck/tests/partial_bad (stderr) exp-ptrcheck/tests/partial_good (stderr) exp-ptrcheck/tests/preen_invars (stderr) exp-ptrcheck/tests/pth_create (stderr) exp-ptrcheck/tests/pth_specific (stderr) exp-ptrcheck/tests/realloc (stderr) exp-ptrcheck/tests/stackerr (stderr) exp-ptrcheck/tests/strcpy (stderr) exp-ptrcheck/tests/supp (stderr) exp-ptrcheck/tests/tricky (stderr) exp-ptrcheck/tests/unaligned (stderr) exp-ptrcheck/tests/zero (stderr) ================================================= == Results from 24 hours ago == ================================================= Checking out valgrind source tree ... done Configuring valgrind ... done Building valgrind ... done Running regression tests ... done Regression test results follow == 454 tests, 43 stderr failures, 10 stdout failures, 0 post failures == memcheck/tests/deep_templates (stdout) memcheck/tests/leak-cases-full (stderr) memcheck/tests/leak-cases-summary (stderr) memcheck/tests/leak-cycle (stderr) memcheck/tests/linux/timerfd-syscall (stdout) memcheck/tests/linux-syscalls-2007 (stderr) memcheck/tests/origin5-bz2 (stderr) memcheck/tests/varinfo1 (stderr) memcheck/tests/varinfo2 (stderr) memcheck/tests/varinfo3 (stderr) memcheck/tests/varinfo4 (stderr) memcheck/tests/varinfo5 (stderr) memcheck/tests/varinfo6 (stderr) memcheck/tests/wrap8 (stdout) memcheck/tests/wrap8 (stderr) none/tests/empty-exe (stderr) none/tests/linux/mremap (stderr) none/tests/ppc32/jm-fp (stdout) none/tests/ppc32/jm-vmx (stdout) none/tests/ppc32/round (stdout) none/tests/ppc32/test_gx (stdout) none/tests/ppc64/jm-fp (stdout) none/tests/ppc64/jm-vmx (stdout) none/tests/ppc64/round (stdout) none/tests/shell_valid2 (stderr) none/tests/shell_valid3 (stderr) none/tests/shell_zerolength (stderr) helgrind/tests/hg05_race2 (stderr) helgrind/tests/tc06_two_races_xml (stderr) helgrind/tests/tc22_exit_w_lock (stderr) helgrind/tests/tc23_bogus_condwait (stderr) exp-ptrcheck/tests/bad_percentify (stderr) exp-ptrcheck/tests/base (stderr) exp-ptrcheck/tests/ccc (stderr) exp-ptrcheck/tests/fp (stderr) exp-ptrcheck/tests/globalerr (stderr) exp-ptrcheck/tests/hackedbz2 (stderr) exp-ptrcheck/tests/hp_bounds (stderr) exp-ptrcheck/tests/hp_dangle (stderr) exp-ptrcheck/tests/hsg (stderr) exp-ptrcheck/tests/justify (stderr) exp-ptrcheck/tests/partial_bad (stderr) exp-ptrcheck/tests/partial_good (stderr) exp-ptrcheck/tests/preen_invars (stderr) exp-ptrcheck/tests/pth_create (stderr) exp-ptrcheck/tests/pth_specific (stderr) exp-ptrcheck/tests/realloc (stderr) exp-ptrcheck/tests/stackerr (stderr) exp-ptrcheck/tests/strcpy (stderr) exp-ptrcheck/tests/supp (stderr) exp-ptrcheck/tests/tricky (stderr) exp-ptrcheck/tests/unaligned (stderr) exp-ptrcheck/tests/zero (stderr) ================================================= == Difference between 24 hours ago and now == ================================================= *** old.short Tue Apr 13 03:09:44 2010 --- new.short Tue Apr 13 03:50:41 2010 *************** *** 8,10 **** ! == 454 tests, 43 stderr failures, 10 stdout failures, 0 post failures == memcheck/tests/deep_templates (stdout) --- 8,10 ---- ! == 454 tests, 42 stderr failures, 10 stdout failures, 0 post failures == memcheck/tests/deep_templates (stdout) *************** *** 38,40 **** helgrind/tests/tc06_two_races_xml (stderr) - helgrind/tests/tc22_exit_w_lock (stderr) helgrind/tests/tc23_bogus_condwait (stderr) --- 38,39 ---- |
|
From: Tom H. <th...@cy...> - 2010-04-13 02:45:27
|
Nightly build on lloyd ( x86_64, Fedora 7 ) Started at 2010-04-13 03:05:06 BST Ended at 2010-04-13 03:45:12 BST Results unchanged from 24 hours ago Checking out valgrind source tree ... done Configuring valgrind ... done Building valgrind ... done Running regression tests ... failed Regression test results follow == 536 tests, 1 stderr failure, 0 stdout failures, 0 post failures == helgrind/tests/tc06_two_races_xml (stderr) |
|
From: Tom H. <th...@cy...> - 2010-04-13 02:36:42
|
Nightly build on mg ( x86_64, Fedora 9 ) Started at 2010-04-13 03:10:06 BST Ended at 2010-04-13 03:36:24 BST Results differ from 24 hours ago Checking out valgrind source tree ... done Configuring valgrind ... done Building valgrind ... done Running regression tests ... failed Regression test results follow == 543 tests, 2 stderr failures, 0 stdout failures, 0 post failures == helgrind/tests/pth_spinlock (stderr) helgrind/tests/tc06_two_races_xml (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 == 543 tests, 1 stderr failure, 0 stdout failures, 0 post failures == helgrind/tests/tc06_two_races_xml (stderr) ================================================= == Difference between 24 hours ago and now == ================================================= *** old.short Tue Apr 13 03:23:21 2010 --- new.short Tue Apr 13 03:36:24 2010 *************** *** 8,10 **** ! == 543 tests, 1 stderr failure, 0 stdout failures, 0 post failures == helgrind/tests/tc06_two_races_xml (stderr) --- 8,11 ---- ! == 543 tests, 2 stderr failures, 0 stdout failures, 0 post failures == ! helgrind/tests/pth_spinlock (stderr) helgrind/tests/tc06_two_races_xml (stderr) |
|
From: <sv...@va...> - 2010-04-12 20:57:05
|
Author: sewardj
Date: 2010-04-12 21:56:56 +0100 (Mon, 12 Apr 2010)
New Revision: 11104
Log:
search_all_symtabs: when mapping addresses to text symbols, consider
any symbol in the r-x mapped segment to be a valid candidate. This
relaxes the filtering criterion slightly, makes it consistent with
other is-it-text? checks. Some addresses which before didn't get
mapped to anything are now correctly mapped to "vtable for Foo"
symbols.
Modified:
trunk/coregrind/m_debuginfo/debuginfo.c
Modified: trunk/coregrind/m_debuginfo/debuginfo.c
===================================================================
--- trunk/coregrind/m_debuginfo/debuginfo.c 2010-04-12 20:05:24 UTC (rev 11103)
+++ trunk/coregrind/m_debuginfo/debuginfo.c 2010-04-12 20:56:56 UTC (rev 11104)
@@ -1239,10 +1239,13 @@
for (di = debugInfo_list; di != NULL; di = di->next) {
if (findText) {
- inRange = di->text_present
- && di->text_size > 0
- && di->text_avma <= ptr
- && ptr < di->text_avma + di->text_size;
+ /* Consider any symbol in the r-x mapped area to be text.
+ See Comment_Regarding_Text_Range_Checks in storage.c for
+ details. */
+ inRange = di->have_rx_map
+ && di->rx_map_size > 0
+ && di->rx_map_avma <= ptr
+ && ptr < di->rx_map_avma + di->rx_map_size;
} else {
inRange = (di->data_present
&& di->data_size > 0
|
|
From: <sv...@va...> - 2010-04-12 20:05:40
|
Author: sewardj
Date: 2010-04-12 21:05:24 +0100 (Mon, 12 Apr 2010)
New Revision: 11103
Log:
Comment-only change.
Modified:
trunk/helgrind/libhb_core.c
Modified: trunk/helgrind/libhb_core.c
===================================================================
--- trunk/helgrind/libhb_core.c 2010-04-12 19:53:05 UTC (rev 11102)
+++ trunk/helgrind/libhb_core.c 2010-04-12 20:05:24 UTC (rev 11103)
@@ -3183,7 +3183,7 @@
///////////////////////////////////////////////////////
-//// Part (1): An OSet of RCECs
+//// Part (1): A hash table of RCECs
///
#define N_FRAMES 8
@@ -3250,7 +3250,7 @@
tl_assert(rcec->magic == RCEC_MAGIC);
gal_Free( &rcec_group_allocator, rcec );
}
-//////////// END OldRef group allocator
+//////////// END RCEC group allocator
/* Find 'ec' in the RCEC list whose head pointer lives at 'headp' and
|
|
From: <sv...@va...> - 2010-04-12 19:53:13
|
Author: sewardj
Date: 2010-04-12 20:53:05 +0100 (Mon, 12 Apr 2010)
New Revision: 11102
Log:
Change the method used in hg_intercepts.c to hide from the user, the
race between mythread_wrapper and the wrapper for pthread_create. The
previous scheme could lead to false race reports in obscure cases.
Modified:
trunk/glibc-2.34567-NPTL-helgrind.supp
trunk/helgrind/hg_intercepts.c
Modified: trunk/glibc-2.34567-NPTL-helgrind.supp
===================================================================
--- trunk/glibc-2.34567-NPTL-helgrind.supp 2010-04-12 19:51:04 UTC (rev 11101)
+++ trunk/glibc-2.34567-NPTL-helgrind.supp 2010-04-12 19:53:05 UTC (rev 11102)
@@ -135,12 +135,6 @@
fun:__lll_*lock_*
}
{
- helgrind-glibc2X-112
- Helgrind:Race
- fun:pthread_create_WRK
- fun:pthread_create@*
-}
-{
helgrind-glibc2X-113
Helgrind:Race
fun:pthread_barrier_wait*
Modified: trunk/helgrind/hg_intercepts.c
===================================================================
--- trunk/helgrind/hg_intercepts.c 2010-04-12 19:51:04 UTC (rev 11101)
+++ trunk/helgrind/hg_intercepts.c 2010-04-12 19:53:05 UTC (rev 11102)
@@ -193,8 +193,6 @@
/*--- pthread_create, pthread_join, pthread_exit ---*/
/*----------------------------------------------------------------*/
-/* Do not rename this function. It contains an unavoidable race and
- so is mentioned by name in glibc-*helgrind*.supp. */
static void* mythread_wrapper ( void* xargsV )
{
volatile Word* xargs = (volatile Word*) xargsV;
@@ -207,7 +205,17 @@
we're ready because (1) we need to make sure it doesn't exit and
hence deallocate xargs[] while we still need it, and (2) we
don't want either parent nor child to proceed until the tool has
- been notified of the child's pthread_t. */
+ been notified of the child's pthread_t.
+
+ Note that parent and child access args[] without a lock,
+ effectively using args[2] as a spinlock in order to get the
+ parent to wait until the child passes this point. The parent
+ disables checking on xargs[] before creating the child and
+ re-enables it once the child goes past this point, so the user
+ never sees the race. The previous approach (suppressing the
+ resulting error) was flawed, because it could leave shadow
+ memory for args[] in a state in which subsequent use of it by
+ the parent would report further races. */
xargs[2] = 0;
/* Now we can no longer safely use xargs[]. */
return (void*) fn( (void*)arg );
@@ -237,6 +245,14 @@
xargs[0] = (Word)start;
xargs[1] = (Word)arg;
xargs[2] = 1; /* serves as a spinlock -- sigh */
+ /* Disable checking on the spinlock and the two words used to
+ convey args to the child. Basically we need to make it appear
+ as if the child never accessed this area, since merely
+ suppressing the resulting races does not address the issue that
+ that piece of the parent's stack winds up in the "wrong" state
+ and therefore may give rise to mysterious races when the parent
+ comes to re-use this piece of stack in some other frame. */
+ VALGRIND_HG_DISABLE_CHECKING(&xargs, sizeof(xargs));
CALL_FN_W_WWWW(ret, fn, thread,attr,mythread_wrapper,&xargs[0]);
@@ -256,6 +272,10 @@
DO_PthAPIerror( "pthread_create", ret );
}
+ /* Reenable checking on the area previously used to communicate
+ with the child. */
+ VALGRIND_HG_ENABLE_CHECKING(&xargs, sizeof(xargs));
+
if (TRACE_PTH_FNS) {
fprintf(stderr, " :: pth_create -> %d >>\n", ret);
}
|
|
From: <sv...@va...> - 2010-04-12 19:51:13
|
Author: sewardj
Date: 2010-04-12 20:51:04 +0100 (Mon, 12 Apr 2010)
New Revision: 11101
Log:
Take account the ABI-mandated stack redzone when changing stack
shvals. AFAIR this has never been handled correctly by Helgrind.
Modified:
trunk/helgrind/hg_main.c
Modified: trunk/helgrind/hg_main.c
===================================================================
--- trunk/helgrind/hg_main.c 2010-04-02 10:27:35 UTC (rev 11100)
+++ trunk/helgrind/hg_main.c 2010-04-12 19:51:04 UTC (rev 11101)
@@ -1501,6 +1501,16 @@
}
static
+void evh__new_mem_stack ( Addr a, SizeT len ) {
+ if (SHOW_EVENTS >= 2)
+ VG_(printf)("evh__new_mem_stack(%p, %lu)\n", (void*)a, len );
+ shadow_mem_make_New( get_current_Thread(),
+ -VG_STACK_REDZONE_SZB + a, len );
+ if (len >= SCE_BIGRANGE_T && (HG_(clo_sanity_flags) & SCE_BIGRANGE))
+ all__sanity_check("evh__new_mem_stack-post");
+}
+
+static
void evh__new_mem_w_tid ( Addr a, SizeT len, ThreadId tid ) {
if (SHOW_EVENTS >= 2)
VG_(printf)("evh__new_mem_w_tid(%p, %lu)\n", (void*)a, len );
@@ -2022,7 +2032,7 @@
/* ------------------------------------------------------- */
-/* -------------- events to do with mutexes -------------- */
+/* -------------- events to do with spinlocks ------------ */
/* ------------------------------------------------------- */
/* All a bit of a kludge. Pretend we're really dealing with ordinary
@@ -4810,7 +4820,7 @@
VG_(track_new_mem_stack_signal)( evh__new_mem_w_tid );
VG_(track_new_mem_brk) ( evh__new_mem_w_tid );
VG_(track_new_mem_mmap) ( evh__new_mem_w_perms );
- VG_(track_new_mem_stack) ( evh__new_mem );
+ VG_(track_new_mem_stack) ( evh__new_mem_stack );
// FIXME: surely this isn't thread-aware
VG_(track_copy_mem_remap) ( evh__copy_mem );
|
|
From: <sv...@va...> - 2010-04-12 12:55:53
|
Author: de
Date: 2010-04-12 13:55:44 +0100 (Mon, 12 Apr 2010)
New Revision: 1972
Log:
Fixed copy+paste error in R1971
Modified:
trunk/priv/guest_amd64_toIR.c
Modified: trunk/priv/guest_amd64_toIR.c
===================================================================
--- trunk/priv/guest_amd64_toIR.c 2010-04-12 12:40:25 UTC (rev 1971)
+++ trunk/priv/guest_amd64_toIR.c 2010-04-12 12:55:44 UTC (rev 1972)
@@ -14053,7 +14053,6 @@
assign( max_min_vec,
binop( Iop_OrV128,
binop( Iop_AndV128, mkexpr(rom_vec),
- unopAndV128, mkexpr(rom_vec),
unop( Iop_NotV128, mkexpr(mask_vec) ) ),
binop( Iop_AndV128, mkexpr(reg_vec), mkexpr(mask_vec) ) ) );
} else {
|
|
From: <sv...@va...> - 2010-04-12 12:40:34
|
Author: de
Date: 2010-04-12 13:40:25 +0100 (Mon, 12 Apr 2010)
New Revision: 1971
Log:
Added new SSE4 instructions PMINSD, PMAXSD.
Modified:
trunk/priv/guest_amd64_toIR.c
Modified: trunk/priv/guest_amd64_toIR.c
===================================================================
--- trunk/priv/guest_amd64_toIR.c 2010-04-09 16:10:35 UTC (rev 1970)
+++ trunk/priv/guest_amd64_toIR.c 2010-04-12 12:40:25 UTC (rev 1971)
@@ -14012,6 +14012,64 @@
}
+ /* 66 0F 38 3D /r = PMAXSD xmm1, xmm2/m128
+ Maximum of Packed Signed Double Word Integers (XMM)
+ --
+ 66 0F 38 39 /r = PMINSD xmm1, xmm2/m128
+ Minimum of Packed Signed Double Word Integers (XMM) */
+ if ( have66noF2noF3( pfx )
+ && sz == 2
+ && insn[0] == 0x0F && insn[1] == 0x38
+ && ( (insn[2] == 0x3D) || (insn[2] == 0x39) ) ) {
+
+ IRTemp reg_vec = newTemp(Ity_V128);
+ IRTemp rom_vec = newTemp(Ity_V128);
+ IRTemp mask_vec = newTemp(Ity_V128);
+
+ Bool isPMAX = (insn[2] == 0x3D) ? True : False;
+
+ HChar* str = isPMAX ? "pmaxsd" : "pminsd";
+
+ modrm = insn[3];
+ assign( reg_vec, getXMMReg( gregOfRexRM(pfx, modrm) ) );
+
+ if ( epartIsReg( modrm ) ) {
+ assign( rom_vec, getXMMReg( eregOfRexRM(pfx, modrm) ) );
+ delta += 3+1;
+ DIP( "%s %s,%s\n", str,
+ nameXMMReg( eregOfRexRM(pfx, modrm) ),
+ nameXMMReg( gregOfRexRM(pfx, modrm) ) );
+ } else {
+ addr = disAMode( &alen, vbi, pfx, delta+3, dis_buf, 0 );
+ assign( rom_vec, loadLE( Ity_V128, mkexpr(addr) ) );
+ delta += 3+alen;
+ DIP( "%s %s,%s\n", str, dis_buf, nameXMMReg( gregOfRexRM(pfx, modrm) ) );
+ }
+
+ assign( mask_vec, binop( Iop_CmpGT32Sx4, mkexpr(reg_vec), mkexpr(rom_vec) ) );
+
+ IRTemp max_min_vec = newTemp(Ity_V128);
+ if ( isPMAX ) {
+ assign( max_min_vec,
+ binop( Iop_OrV128,
+ binop( Iop_AndV128, mkexpr(rom_vec),
+ unopAndV128, mkexpr(rom_vec),
+ unop( Iop_NotV128, mkexpr(mask_vec) ) ),
+ binop( Iop_AndV128, mkexpr(reg_vec), mkexpr(mask_vec) ) ) );
+ } else {
+ assign( max_min_vec,
+ binop( Iop_OrV128,
+ binop( Iop_AndV128, mkexpr(reg_vec),
+ unop( Iop_NotV128, mkexpr(mask_vec) ) ),
+ binop( Iop_AndV128, mkexpr(rom_vec), mkexpr(mask_vec) ) ) );
+ }
+
+ putXMMReg( gregOfRexRM(pfx, modrm), mkexpr(max_min_vec) );
+
+ goto decode_success;
+ }
+
+
/* 66 0f 38 20 /r = PMOVSXBW xmm1, xmm2/m64
Packed Move with Sign Extend from Byte to Word (XMM) */
if ( have66noF2noF3( pfx )
@@ -14880,12 +14938,12 @@
case 0xE1:
xtra = "e";
zbit = mk_amd64g_calculate_condition( AMD64CondZ );
- cond = mkAnd1(cond, zbit);
+ cond = mkAnd1(cond, zbit);
break;
case 0xE0:
xtra = "ne";
zbit = mk_amd64g_calculate_condition( AMD64CondNZ );
- cond = mkAnd1(cond, zbit);
+ cond = mkAnd1(cond, zbit);
break;
default:
vassert(0);
|
|
From: Guillaume K. <gkn...@pr...> - 2010-04-09 20:35:05
|
Hi, I'm interested in working on e500 (PPC variant used on some Freescale SoC, and maybe in other places) support for Valgrind 3.5 I found two related posts on this ML archives (from the Valgrind 3.3 era) http://article.gmane.org/gmane.comp.debugging.valgrind.devel/2278 and http://article.gmane.org/gmane.comp.debugging.valgrind.devel/2729 Does anybody know what is a status of e500 support in Valgrind? What should I take a look at first to do the port? (I don't know anything about Valgrind internals) Trying to cross-compile Valgrind 3.5 I got the build time error m_dispatch/dispatch-ppc32-linux.S:142: Error: Unrecognized opcode: `stvx' [ ... more unrecognized opcodes follow ... ] Checking in my PowerPC e500 Core Family Reference Manual, they are not supported by the e500, so I obviously will need to do some changes there. Any idea if other changes would be needed? Cheers! -- Guillaume KNISPEL |
|
From: <sv...@va...> - 2010-04-09 16:10:44
|
Author: de
Date: 2010-04-09 17:10:35 +0100 (Fri, 09 Apr 2010)
New Revision: 1970
Log:
Tested BLENDPS
Added new SSE4 instructions DPPD and DPPS
Modified:
trunk/priv/guest_amd64_toIR.c
Modified: trunk/priv/guest_amd64_toIR.c
===================================================================
--- trunk/priv/guest_amd64_toIR.c 2010-04-02 14:15:58 UTC (rev 1969)
+++ trunk/priv/guest_amd64_toIR.c 2010-04-09 16:10:35 UTC (rev 1970)
@@ -13752,7 +13752,6 @@
}
- // UNTESTED
/* 66 0F 3A 0C /r ib = BLENDPS xmm1, xmm2/m128, imm8
Blend Packed Single Precision Floating-Point Values (XMM) */
if ( have66noF2noF3( pfx )
@@ -13801,7 +13800,132 @@
}
- // UNTESTED
+ /* 66 0F 3A 41 /r ib = DPPD xmm1, xmm2/m128, imm8
+ Dot Product of Packed Double Precision Floating-Point Values (XMM) */
+ if ( have66noF2noF3( pfx )
+ && sz == 2
+ && insn[0] == 0x0F && insn[1] == 0x3A && insn[2] == 0x41 ) {
+
+ Int imm8;
+ IRTemp src_vec = newTemp(Ity_V128);
+ IRTemp dst_vec = newTemp(Ity_V128);
+ IRTemp and_vec = newTemp(Ity_V128);
+ IRTemp sum_vec = newTemp(Ity_V128);
+
+ modrm = insn[3];
+
+ assign( dst_vec, getXMMReg( gregOfRexRM(pfx, modrm) ) );
+
+ if ( epartIsReg( modrm ) ) {
+ imm8 = (Int)insn[4];
+ assign( src_vec, getXMMReg( eregOfRexRM(pfx, modrm) ) );
+ delta += 3+1+1;
+ DIP( "dppd %s,%s,$%d\n",
+ nameXMMReg( eregOfRexRM(pfx, modrm) ),
+ nameXMMReg( gregOfRexRM(pfx, modrm) ),
+ imm8 );
+ } else {
+ addr = disAMode( &alen, vbi, pfx, delta+3, dis_buf,
+ 1/* imm8 is 1 byte after the amode */ );
+ assign( src_vec, loadLE( Ity_V128, mkexpr(addr) ) );
+ imm8 = (Int)insn[2+alen+1];
+ delta += 3+alen+1;
+ DIP( "dppd %s,%s$%d\n",
+ dis_buf, nameXMMReg( gregOfRexRM(pfx, modrm) ), imm8 );
+ }
+
+ UShort imm8_perms[4] = { 0x0000, 0x00FF, 0xFF00, 0xFFFF };
+
+ assign( and_vec, binop( Iop_AndV128,
+ binop( Iop_Mul64Fx2,
+ mkexpr(dst_vec), mkexpr(src_vec) ),
+ mkV128( imm8_perms[ ((imm8 >> 4) & 3) ] ) ) );
+
+ assign( sum_vec, binop( Iop_Add64F0x2,
+ binop( Iop_InterleaveHI64x2,
+ mkexpr(and_vec), mkexpr(and_vec) ),
+ binop( Iop_InterleaveLO64x2,
+ mkexpr(and_vec), mkexpr(and_vec) ) ) );
+
+ putXMMReg( gregOfRexRM( pfx, modrm ),
+ binop( Iop_AndV128,
+ binop( Iop_InterleaveLO64x2,
+ mkexpr(sum_vec), mkexpr(sum_vec) ),
+ mkV128( imm8_perms[ (imm8 & 3) ] ) ) );
+
+ goto decode_success;
+ }
+
+
+ /* 66 0F 3A 40 /r ib = DPPS xmm1, xmm2/m128, imm8
+ Dot Product of Packed Single Precision Floating-Point Values (XMM) */
+ if ( have66noF2noF3( pfx )
+ && sz == 2
+ && insn[0] == 0x0F
+ && insn[1] == 0x3A
+ && insn[2] == 0x40 ) {
+
+ Int imm8;
+ IRTemp xmm1_vec = newTemp(Ity_V128);
+ IRTemp xmm2_vec = newTemp(Ity_V128);
+ IRTemp tmp_prod_vec = newTemp(Ity_V128);
+ IRTemp prod_vec = newTemp(Ity_V128);
+ IRTemp sum_vec = newTemp(Ity_V128);
+ IRTemp v3, v2, v1, v0;
+ v3 = v2 = v1 = v0 = IRTemp_INVALID;
+
+ modrm = insn[3];
+
+ assign( xmm1_vec, getXMMReg( gregOfRexRM(pfx, modrm) ) );
+
+ if ( epartIsReg( modrm ) ) {
+ imm8 = (Int)insn[4];
+ assign( xmm2_vec, getXMMReg( eregOfRexRM(pfx, modrm) ) );
+ delta += 3+1+1;
+ DIP( "dpps %s,%s,$%d\n",
+ nameXMMReg( eregOfRexRM(pfx, modrm) ),
+ nameXMMReg( gregOfRexRM(pfx, modrm) ),
+ imm8 );
+ } else {
+ addr = disAMode( &alen, vbi, pfx, delta+3, dis_buf,
+ 1/* imm8 is 1 byte after the amode */ );
+ assign( xmm2_vec, loadLE( Ity_V128, mkexpr(addr) ) );
+ imm8 = (Int)insn[2+alen+1];
+ delta += 3+alen+1;
+ DIP( "dpps %s,%s$%d\n",
+ dis_buf, nameXMMReg( gregOfRexRM(pfx, modrm) ), imm8 );
+ }
+
+ UShort imm8_perms[16] = { 0x0000, 0x000F, 0x00F0, 0x00FF, 0x0F00,
+ 0x0F0F, 0x0FF0, 0x0FFF, 0xF000, 0xF00F,
+ 0xF0F0, 0xF0FF, 0xFF00, 0xFF0F, 0xFFF0, 0xFFFF };
+
+ assign( tmp_prod_vec,
+ binop( Iop_AndV128,
+ binop( Iop_Mul32Fx4, mkexpr(xmm1_vec), mkexpr(xmm2_vec) ),
+ mkV128( imm8_perms[((imm8 >> 4)& 15)] ) ) );
+ breakup128to32s( tmp_prod_vec, &v3, &v2, &v1, &v0 );
+ assign( prod_vec, mk128from32s( v3, v1, v2, v0 ) );
+
+ assign( sum_vec, binop( Iop_Add32Fx4,
+ binop( Iop_InterleaveHI32x4,
+ mkexpr(prod_vec), mkexpr(prod_vec) ),
+ binop( Iop_InterleaveLO32x4,
+ mkexpr(prod_vec), mkexpr(prod_vec) ) ) );
+
+ putXMMReg( gregOfRexRM(pfx, modrm),
+ binop( Iop_AndV128,
+ binop( Iop_Add32Fx4,
+ binop( Iop_InterleaveHI32x4,
+ mkexpr(sum_vec), mkexpr(sum_vec) ),
+ binop( Iop_InterleaveLO32x4,
+ mkexpr(sum_vec), mkexpr(sum_vec) ) ),
+ mkV128( imm8_perms[ (imm8 & 15) ] ) ) );
+
+ goto decode_success;
+ }
+
+
/* 66 0F 3A 21 /r ib = INSERTPS xmm1, xmm2/m32, imm8
Insert Packed Single Precision Floating-Point Value (XMM) */
if ( have66noF2noF3( pfx )
|
|
From: Alexander P. <gl...@go...> - 2010-04-03 08:08:53
|
Nightly build on mcgrind ( Darwin 9.8.0 i386 ) Started at 2010-04-03 09:06:02 MSD Ended at 2010-04-03 09:20:13 MSD 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 == 438 tests, 23 stderr failures, 1 stdout failure, 0 post failures == memcheck/tests/null_socket (stdout) memcheck/tests/origin5-bz2 (stderr) memcheck/tests/varinfo1 (stderr) memcheck/tests/varinfo2 (stderr) memcheck/tests/varinfo3 (stderr) memcheck/tests/varinfo4 (stderr) memcheck/tests/varinfo5 (stderr) memcheck/tests/varinfo6 (stderr) none/tests/async-sigs (stderr) none/tests/faultstatus (stderr) none/tests/pth_blockedsig (stderr) helgrind/tests/hg03_inherit (stderr) helgrind/tests/hg04_race (stderr) helgrind/tests/hg05_race2 (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/tc16_byterace (stderr) helgrind/tests/tc18_semabuse (stderr) helgrind/tests/tc21_pthonce (stderr) helgrind/tests/tc23_bogus_condwait (stderr) drd/tests/annotate_barrier (stderr) ================================================= == Results from 24 hours ago == ================================================= Checking out valgrind source tree ... done Configuring valgrind ... done Building valgrind ... failed Last 20 lines of verbose log follow echo gcc -Winline -Wall -Wshadow -g -arch i386 -Wextra -Wno-inline -Wno-unused-parameter -DENABLE_DRD_CONSISTENCY_CHECKS -Wno-long-long -Wno-pointer-sign -fno-stack-protector -o unit_vc unit_vc-unit_vc.o gcc -DHAVE_CONFIG_H -I. -I../.. -I../.. -I../../include -I../../coregrind -I../../include -I../../VEX/pub -DVGA_x86=1 -DVGO_darwin=1 -DVGP_x86_darwin=1 -Winline -Wall -Wshadow -g -arch i386 -Wextra -Wno-inline -Wno-unused-parameter -Wno-long-long -Wno-pointer-sign -fno-stack-protector -MT annotate_barrier.o -MD -MP -MF .deps/annotate_barrier.Tpo -c -o annotate_barrier.o annotate_barrier.c annotate_barrier.c: In function 'barrier_wait': annotate_barrier.c:85: warning: implicit declaration of function 'pthread_yield' annotate_barrier.c: In function 'threadfunc': annotate_barrier.c:101: warning: format '%lx' expects type 'long unsigned int', but argument 2 has type 'pthread_t' annotate_barrier.c:107: warning: format '%lx' expects type 'long unsigned int', but argument 2 has type 'pthread_t' mv -f .deps/annotate_barrier.Tpo .deps/annotate_barrier.Po gcc -Winline -Wall -Wshadow -g -arch i386 -Wextra -Wno-inline -Wno-unused-parameter -Wno-long-long -Wno-pointer-sign -fno-stack-protector -o annotate_barrier annotate_barrier.o -lpthread Undefined symbols: "_pthread_yield", referenced from: _barrier_wait in annotate_barrier.o ld: symbol(s) not found collect2: ld returned 1 exit status make[5]: *** [annotate_barrier] Error 1 make[4]: *** [check-am] Error 2 make[3]: *** [check-recursive] Error 1 make[2]: *** [check] Error 2 make[1]: *** [check-recursive] Error 1 make: *** [check] Error 2 ================================================= == Difference between 24 hours ago and now == ================================================= *** old.short Sat Apr 3 09:10:28 2010 --- new.short Sat Apr 3 09:20:13 2010 *************** *** 3,26 **** Configuring valgrind ... done ! Building valgrind ... failed - Last 20 lines of verbose log follow echo - gcc -Winline -Wall -Wshadow -g -arch i386 -Wextra -Wno-inline -Wno-unused-parameter -DENABLE_DRD_CONSISTENCY_CHECKS -Wno-long-long -Wno-pointer-sign -fno-stack-protector -o unit_vc unit_vc-unit_vc.o - gcc -DHAVE_CONFIG_H -I. -I../.. -I../.. -I../../include -I../../coregrind -I../../include -I../../VEX/pub -DVGA_x86=1 -DVGO_darwin=1 -DVGP_x86_darwin=1 -Winline -Wall -Wshadow -g -arch i386 -Wextra -Wno-inline -Wno-unused-parameter -Wno-long-long -Wno-pointer-sign -fno-stack-protector -MT annotate_barrier.o -MD -MP -MF .deps/annotate_barrier.Tpo -c -o annotate_barrier.o annotate_barrier.c - annotate_barrier.c: In function 'barrier_wait': - annotate_barrier.c:85: warning: implicit declaration of function 'pthread_yield' - annotate_barrier.c: In function 'threadfunc': - annotate_barrier.c:101: warning: format '%lx' expects type 'long unsigned int', but argument 2 has type 'pthread_t' - annotate_barrier.c:107: warning: format '%lx' expects type 'long unsigned int', but argument 2 has type 'pthread_t' - mv -f .deps/annotate_barrier.Tpo .deps/annotate_barrier.Po - gcc -Winline -Wall -Wshadow -g -arch i386 -Wextra -Wno-inline -Wno-unused-parameter -Wno-long-long -Wno-pointer-sign -fno-stack-protector -o annotate_barrier annotate_barrier.o -lpthread - Undefined symbols: - "_pthread_yield", referenced from: - _barrier_wait in annotate_barrier.o - ld: symbol(s) not found - collect2: ld returned 1 exit status - make[5]: *** [annotate_barrier] Error 1 - make[4]: *** [check-am] Error 2 - make[3]: *** [check-recursive] Error 1 - make[2]: *** [check] Error 2 - make[1]: *** [check-recursive] Error 1 - make: *** [check] Error 2 --- 3,34 ---- Configuring valgrind ... done ! Building valgrind ... done ! Running regression tests ... failed ! ! Regression test results follow ! ! == 438 tests, 23 stderr failures, 1 stdout failure, 0 post failures == ! memcheck/tests/null_socket (stdout) ! memcheck/tests/origin5-bz2 (stderr) ! memcheck/tests/varinfo1 (stderr) ! memcheck/tests/varinfo2 (stderr) ! memcheck/tests/varinfo3 (stderr) ! memcheck/tests/varinfo4 (stderr) ! memcheck/tests/varinfo5 (stderr) ! memcheck/tests/varinfo6 (stderr) ! none/tests/async-sigs (stderr) ! none/tests/faultstatus (stderr) ! none/tests/pth_blockedsig (stderr) ! helgrind/tests/hg03_inherit (stderr) ! helgrind/tests/hg04_race (stderr) ! helgrind/tests/hg05_race2 (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/tc16_byterace (stderr) ! helgrind/tests/tc18_semabuse (stderr) ! helgrind/tests/tc21_pthonce (stderr) ! helgrind/tests/tc23_bogus_condwait (stderr) ! drd/tests/annotate_barrier (stderr) -- Alexander Potapenko Software Engineer Google Moscow |
|
From: Bart V. A. <bar...@gm...> - 2010-04-03 07:51:50
|
Nightly build on cellbuzz-native ( cellbuzz, ppc64, Fedora 7, native ) Started at 2010-04-03 02:28:41 EDT Ended at 2010-04-03 03:51:37 EDT Results unchanged from 24 hours ago Checking out valgrind source tree ... done Configuring valgrind ... done Building valgrind ... done Running regression tests ... done Regression test results follow == 454 tests, 43 stderr failures, 10 stdout failures, 0 post failures == memcheck/tests/deep_templates (stdout) memcheck/tests/leak-cases-full (stderr) memcheck/tests/leak-cases-summary (stderr) memcheck/tests/leak-cycle (stderr) memcheck/tests/linux/timerfd-syscall (stdout) memcheck/tests/linux-syscalls-2007 (stderr) memcheck/tests/origin5-bz2 (stderr) memcheck/tests/varinfo1 (stderr) memcheck/tests/varinfo2 (stderr) memcheck/tests/varinfo3 (stderr) memcheck/tests/varinfo4 (stderr) memcheck/tests/varinfo5 (stderr) memcheck/tests/varinfo6 (stderr) memcheck/tests/wrap8 (stdout) memcheck/tests/wrap8 (stderr) none/tests/empty-exe (stderr) none/tests/linux/mremap (stderr) none/tests/ppc32/jm-fp (stdout) none/tests/ppc32/jm-vmx (stdout) none/tests/ppc32/round (stdout) none/tests/ppc32/test_gx (stdout) none/tests/ppc64/jm-fp (stdout) none/tests/ppc64/jm-vmx (stdout) none/tests/ppc64/round (stdout) none/tests/shell_valid2 (stderr) none/tests/shell_valid3 (stderr) none/tests/shell_zerolength (stderr) helgrind/tests/hg05_race2 (stderr) helgrind/tests/tc06_two_races_xml (stderr) helgrind/tests/tc22_exit_w_lock (stderr) helgrind/tests/tc23_bogus_condwait (stderr) exp-ptrcheck/tests/bad_percentify (stderr) exp-ptrcheck/tests/base (stderr) exp-ptrcheck/tests/ccc (stderr) exp-ptrcheck/tests/fp (stderr) exp-ptrcheck/tests/globalerr (stderr) exp-ptrcheck/tests/hackedbz2 (stderr) exp-ptrcheck/tests/hp_bounds (stderr) exp-ptrcheck/tests/hp_dangle (stderr) exp-ptrcheck/tests/hsg (stderr) exp-ptrcheck/tests/justify (stderr) exp-ptrcheck/tests/partial_bad (stderr) exp-ptrcheck/tests/partial_good (stderr) exp-ptrcheck/tests/preen_invars (stderr) exp-ptrcheck/tests/pth_create (stderr) exp-ptrcheck/tests/pth_specific (stderr) exp-ptrcheck/tests/realloc (stderr) exp-ptrcheck/tests/stackerr (stderr) exp-ptrcheck/tests/strcpy (stderr) exp-ptrcheck/tests/supp (stderr) exp-ptrcheck/tests/tricky (stderr) exp-ptrcheck/tests/unaligned (stderr) exp-ptrcheck/tests/zero (stderr) |
|
From: Tom H. <th...@cy...> - 2010-04-03 02:45:45
|
Nightly build on lloyd ( x86_64, Fedora 7 ) Started at 2010-04-03 03:05:05 BST Ended at 2010-04-03 03:45:32 BST Results unchanged from 24 hours ago Checking out valgrind source tree ... done Configuring valgrind ... done Building valgrind ... done Running regression tests ... failed Regression test results follow == 536 tests, 1 stderr failure, 0 stdout failures, 0 post failures == helgrind/tests/tc06_two_races_xml (stderr) |
|
From: Tom H. <th...@cy...> - 2010-04-03 02:36:39
|
Nightly build on mg ( x86_64, Fedora 9 ) Started at 2010-04-03 03:10:06 BST Ended at 2010-04-03 03:36:23 BST Results differ from 24 hours ago Checking out valgrind source tree ... done Configuring valgrind ... done Building valgrind ... done Running regression tests ... failed Regression test results follow == 543 tests, 2 stderr failures, 0 stdout failures, 0 post failures == helgrind/tests/pth_spinlock (stderr) helgrind/tests/tc06_two_races_xml (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 == 543 tests, 1 stderr failure, 0 stdout failures, 0 post failures == helgrind/tests/tc06_two_races_xml (stderr) ================================================= == Difference between 24 hours ago and now == ================================================= *** old.short Sat Apr 3 03:23:20 2010 --- new.short Sat Apr 3 03:36:23 2010 *************** *** 8,10 **** ! == 543 tests, 1 stderr failure, 0 stdout failures, 0 post failures == helgrind/tests/tc06_two_races_xml (stderr) --- 8,11 ---- ! == 543 tests, 2 stderr failures, 0 stdout failures, 0 post failures == ! helgrind/tests/pth_spinlock (stderr) helgrind/tests/tc06_two_races_xml (stderr) |
|
From: <sv...@va...> - 2010-04-02 14:16:08
|
Author: de
Date: 2010-04-02 15:15:58 +0100 (Fri, 02 Apr 2010)
New Revision: 1969
Log:
iselVecExpr_wrk: 128-bit constants: handle all 16 cases
of the form 0x0000 .. 0xFFFF.
Modified:
trunk/priv/host_amd64_isel.c
Modified: trunk/priv/host_amd64_isel.c
===================================================================
--- trunk/priv/host_amd64_isel.c 2010-04-02 13:17:50 UTC (rev 1968)
+++ trunk/priv/host_amd64_isel.c 2010-04-02 14:15:58 UTC (rev 1969)
@@ -329,6 +329,20 @@
hregAMD64_RSP()));
}
+/* Push 64-bit constants on the stack. */
+static void push_uimm64( ISelEnv* env, ULong uimm64 )
+{
+ /* If uimm64 can be expressed as the sign extension of its
+ lower 32 bits, we can do it the easy way. */
+ Long simm64 = (Long)uimm64;
+ if ( simm64 == ((simm64 << 32) >> 32) ) {
+ addInstr( env, AMD64Instr_Push(AMD64RMI_Imm( (UInt)uimm64 )) );
+ } else {
+ HReg tmp = newVRegI(env);
+ addInstr( env, AMD64Instr_Imm64(uimm64, tmp) );
+ addInstr( env, AMD64Instr_Push(AMD64RMI_Reg(tmp)) );
+ }
+}
//.. /* Given an amode, return one which references 4 bytes further
//.. along. */
@@ -3198,26 +3212,70 @@
break;
}
AMD64AMode* rsp0 = AMD64AMode_IR(0, hregAMD64_RSP());
+ const ULong const_z64 = 0x0000000000000000ULL;
+ const ULong const_o64 = 0xFFFFFFFFFFFFFFFFULL;
+ const ULong const_z32o32 = 0x00000000FFFFFFFFULL;
+ const ULong const_o32z32 = 0xFFFFFFFF00000000ULL;
switch (e->Iex.Const.con->Ico.V128) {
case 0x0000: case 0xFFFF:
vassert(0); /* handled just above */
+ /* do push_uimm64 twice, first time for the high-order half. */
+ case 0x00F0:
+ push_uimm64(env, const_z64);
+ push_uimm64(env, const_o32z32);
+ break;
case 0x00FF:
- /* Both of these literals are sign-extended to 64 bits. */
- addInstr(env, AMD64Instr_Push(AMD64RMI_Imm(0)));
- addInstr(env, AMD64Instr_Push(AMD64RMI_Imm(0xFFFFFFFF)));
+ push_uimm64(env, const_z64);
+ push_uimm64(env, const_o64);
break;
- case 0x000F: {
- HReg tmp = newVRegI(env);
- addInstr(env, AMD64Instr_Imm64(0xFFFFFFFFULL, tmp));
- addInstr(env, AMD64Instr_Push(AMD64RMI_Imm(0)));
- addInstr(env, AMD64Instr_Push(AMD64RMI_Reg(tmp)));
+ case 0x000F:
+ push_uimm64(env, const_z64);
+ push_uimm64(env, const_z32o32);
break;
- }
+ case 0x0F00:
+ push_uimm64(env, const_z32o32);
+ push_uimm64(env, const_z64);
+ break;
+ case 0x0F0F:
+ push_uimm64(env, const_z32o32);
+ push_uimm64(env, const_z32o32);
+ break;
+ case 0x0FF0:
+ push_uimm64(env, const_z32o32);
+ push_uimm64(env, const_o32z32);
+ break;
+ case 0x0FFF:
+ push_uimm64(env, const_z32o32);
+ push_uimm64(env, const_o64);
+ break;
+ case 0xF000:
+ push_uimm64(env, const_o32z32);
+ push_uimm64(env, const_z64);
+ break;
+ case 0xF00F:
+ push_uimm64(env, const_o32z32);
+ push_uimm64(env, const_z32o32);
+ break;
+ case 0xF0F0:
+ push_uimm64(env, const_o32z32);
+ push_uimm64(env, const_o32z32);
+ break;
+ case 0xF0FF:
+ push_uimm64(env, const_o32z32);
+ push_uimm64(env, const_o64);
+ break;
case 0xFF00:
- /* Both of these literals are sign-extended to 64 bits. */
- addInstr(env, AMD64Instr_Push(AMD64RMI_Imm(0xFFFFFFFF)));
- addInstr(env, AMD64Instr_Push(AMD64RMI_Imm(0)));
+ push_uimm64(env, const_o64);
+ push_uimm64(env, const_z64);
break;
+ case 0xFF0F:
+ push_uimm64(env, const_o64);
+ push_uimm64(env, const_z32o32);
+ break;
+ case 0xFFF0:
+ push_uimm64(env, const_o64);
+ push_uimm64(env, const_o32z32);
+ break;
default:
goto vec_fail;
}
|
|
From: <sv...@va...> - 2010-04-02 13:17:58
|
Author: de
Date: 2010-04-02 14:17:50 +0100 (Fri, 02 Apr 2010)
New Revision: 1968
Log:
Added new SSE4 instruction BLENDPS (backend needs a fix before testing)
Tested PMOVSXBW
Tested INSERTPS
Tested BLENDPD and fixed typo
Modified:
trunk/priv/guest_amd64_toIR.c
Modified: trunk/priv/guest_amd64_toIR.c
===================================================================
--- trunk/priv/guest_amd64_toIR.c 2010-04-02 11:31:22 UTC (rev 1967)
+++ trunk/priv/guest_amd64_toIR.c 2010-04-02 13:17:50 UTC (rev 1968)
@@ -13744,15 +13744,64 @@
putXMMReg( gregOfRexRM(pfx, modrm),
binop( Iop_OrV128,
- binop( Iop_AndV128, mkexpr(src_vec),
- mkexpr(imm8_mask) ),
- binop( Iop_AndV128, mkexpr(src_vec),
+ binop( Iop_AndV128, mkexpr(src_vec), mkexpr(imm8_mask) ),
+ binop( Iop_AndV128, mkexpr(dst_vec),
unop( Iop_NotV128, mkexpr(imm8_mask) ) ) ) );
goto decode_success;
}
+ // UNTESTED
+ /* 66 0F 3A 0C /r ib = BLENDPS xmm1, xmm2/m128, imm8
+ Blend Packed Single Precision Floating-Point Values (XMM) */
+ if ( have66noF2noF3( pfx )
+ && sz == 2
+ && insn[0] == 0x0F && insn[1] == 0x3A && insn[2] == 0x0C ) {
+
+ Int imm8;
+ IRTemp dst_vec = newTemp(Ity_V128);
+ IRTemp src_vec = newTemp(Ity_V128);
+
+ modrm = insn[3];
+
+ assign( dst_vec, getXMMReg( gregOfRexRM(pfx, modrm) ) );
+
+ if ( epartIsReg( modrm ) ) {
+ imm8 = (Int)insn[4];
+ assign( src_vec, getXMMReg( eregOfRexRM(pfx, modrm) ) );
+ delta += 3+1+1;
+ DIP( "blendps %s,%s,$%d\n",
+ nameXMMReg( eregOfRexRM(pfx, modrm) ),
+ nameXMMReg( gregOfRexRM(pfx, modrm) ),
+ imm8 );
+ } else {
+ addr = disAMode( &alen, vbi, pfx, delta+3, dis_buf,
+ 1/* imm8 is 1 byte after the amode */ );
+ assign( src_vec, loadLE( Ity_V128, mkexpr(addr) ) );
+ imm8 = (Int)insn[2+alen+1];
+ delta += 3+alen+1;
+ DIP( "blendpd %s,%s$%d\n",
+ dis_buf, nameXMMReg( gregOfRexRM(pfx, modrm) ), imm8 );
+ }
+
+ UShort imm8_perms[16] = { 0x0000, 0x000F, 0x00F0, 0x00FF, 0x0F00, 0x0F0F,
+ 0x0FF0, 0x0FFF, 0xF000, 0xF00F, 0xF0F0, 0xF0FF,
+ 0xFF00, 0xFF0F, 0xFFF0, 0xFFFF };
+ IRTemp imm8_mask = newTemp(Ity_V128);
+ assign( imm8_mask, mkV128( imm8_perms[ (imm8 & 15) ] ) );
+
+ putXMMReg( gregOfRexRM(pfx, modrm),
+ binop( Iop_OrV128,
+ binop( Iop_AndV128, mkexpr(src_vec), mkexpr(imm8_mask) ),
+ binop( Iop_AndV128, mkexpr(dst_vec),
+ unop( Iop_NotV128, mkexpr(imm8_mask) ) ) ) );
+
+ goto decode_success;
+ }
+
+
+ // UNTESTED
/* 66 0F 3A 21 /r ib = INSERTPS xmm1, xmm2/m32, imm8
Insert Packed Single Precision Floating-Point Value (XMM) */
if ( have66noF2noF3( pfx )
@@ -13838,11 +13887,9 @@
goto decode_success;
}
+
/* 66 0f 38 20 /r = PMOVSXBW xmm1, xmm2/m64
- Packed Move with Sign Extend from Byte to Word (XMM)
-
- not tested: implementation uses SarN8x16,
- but backend doesn't know what to do with it */
+ Packed Move with Sign Extend from Byte to Word (XMM) */
if ( have66noF2noF3( pfx )
&& sz == 2
&& insn[0] == 0x0F && insn[1] == 0x38 && insn[2] == 0x20 ) {
|