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
(1) |
|
2
(19) |
3
(17) |
4
(15) |
5
(20) |
6
(29) |
7
(13) |
8
(16) |
|
9
(20) |
10
(5) |
11
(10) |
12
(17) |
13
(17) |
14
(22) |
15
(8) |
|
16
(4) |
17
(15) |
18
(7) |
19
(14) |
20
(16) |
21
(18) |
22
(9) |
|
23
(2) |
24
(12) |
25
(3) |
26
(3) |
27
(20) |
28
(9) |
29
(4) |
|
30
(3) |
31
(4) |
|
|
|
|
|
|
From: <sv...@va...> - 2012-12-27 20:59:57
|
florian 2012-12-27 20:59:43 +0000 (Thu, 27 Dec 2012)
New Revision: 2623
Log:
Indentation only change.
Modified files:
trunk/priv/guest_s390_helpers.c
Modified: trunk/priv/guest_s390_helpers.c (+8 -8)
===================================================================
--- trunk/priv/guest_s390_helpers.c 2012-12-27 20:14:03 +00:00 (rev 2622)
+++ trunk/priv/guest_s390_helpers.c 2012-12-27 20:59:43 +00:00 (rev 2623)
@@ -1141,8 +1141,8 @@
#define S390_CC_FOR_BFP128_TDC(cc_dep1,cc_dep2,cc_ndep) \
({ \
- /* Recover the original DEP2 value. See comment near s390_cc_thunk_put1f128Z \
- for rationale. */ \
+ /* Recover the original DEP2 value. See comment near \
+ s390_cc_thunk_put1f128Z for rationale. */ \
cc_dep2 = cc_dep2 ^ cc_ndep; \
__asm__ volatile ( \
"ldr 4,%[high]\n\t" \
@@ -1168,12 +1168,12 @@
#define S390_CC_FOR_DFP128_RESULT(hi,lo) \
({ \
__asm__ volatile ( \
- "ldr 4,%[high]\n\t" \
- "ldr 6,%[low]\n\t" \
- ".insn rre, 0xb3de0000,0,4\n\t" /* LTXTR */ \
- "ipm %[psw]\n\t" : [psw] "=d"(psw) \
- : [high] "f"(hi), [low] "f"(lo) \
- : "cc", "f0", "f2", "f4", "f6"); \
+ "ldr 4,%[high]\n\t" \
+ "ldr 6,%[low]\n\t" \
+ ".insn rre, 0xb3de0000,0,4\n\t" /* LTXTR */ \
+ "ipm %[psw]\n\t" : [psw] "=d"(psw) \
+ : [high] "f"(hi), [low] "f"(lo) \
+ : "cc", "f0", "f2", "f4", "f6"); \
psw >> 28; /* cc */ \
})
|
|
From: <sv...@va...> - 2012-12-27 20:17:39
|
florian 2012-12-27 20:17:32 +0000 (Thu, 27 Dec 2012)
New Revision: 13212
Log:
s390: Add testcases for ESDTR and EXDTR.
Patch by Maran Pakkirisamy (ma...@li...).
Part of fixing BZ #307113.
[ r13211 was also implemented by Maran. ]
Modified files:
trunk/none/tests/s390x/dfp-2.c
trunk/none/tests/s390x/dfp-2.stdout.exp
Modified: trunk/none/tests/s390x/dfp-2.c (+1 -4)
===================================================================
--- trunk/none/tests/s390x/dfp-2.c 2012-12-27 20:06:18 +00:00 (rev 13211)
+++ trunk/none/tests/s390x/dfp-2.c 2012-12-27 20:17:32 +00:00 (rev 13212)
@@ -6,7 +6,6 @@
- load and test 64/128 bit
*/
-#if 0 //fixs390: enable it when Iop_ExtractSigD64/D128 is available
void esdtr(_Decimal64 in)
{
long out;
@@ -26,7 +25,6 @@
DFP_VAL_PRINT(in, _Decimal128);
printf(" -> %ld\n", out);
}
-#endif
void ltdtr(_Decimal64 in)
{
@@ -60,14 +58,13 @@
_Decimal64 d64 = 50.0005DD;
_Decimal128 d128 = 50.0005DL;
-#if 0 //fixs390: enable it when Iop_ExtractSigD64/D128 is available
esdtr(d64);
esdtr(-d64);
esdtr(0.DD);
esxtr(d128);
esxtr(-d128);
esxtr(0.DL);
-#endif
+
ltdtr(d64);
ltdtr(-d64);
ltdtr(0.0DD);
Modified: trunk/none/tests/s390x/dfp-2.stdout.exp (+6 -0)
===================================================================
--- trunk/none/tests/s390x/dfp-2.stdout.exp 2012-12-27 20:06:18 +00:00 (rev 13211)
+++ trunk/none/tests/s390x/dfp-2.stdout.exp 2012-12-27 20:17:32 +00:00 (rev 13212)
@@ -1,3 +1,9 @@
+ESDTR 22280000000a0005 -> 6
+ESDTR a2280000000a0005 -> 6
+ESDTR 2238000000000000 -> 0
+ESXTR 2207000000000000000a0005 -> 6
+ESXTR a207000000000000000a0005 -> 6
+ESXTR 220800000000000000000000 -> 0
LTDTR 22280000000a0005 -> 2
LTDTR a2280000000a0005 -> 1
LTDTR 2234000000000000 -> 0
|
|
From: <sv...@va...> - 2012-12-27 20:14:14
|
florian 2012-12-27 20:14:03 +0000 (Thu, 27 Dec 2012)
New Revision: 2622
Log:
s390: Support the "test data class/group" and "extract significance"
insns. Patch by Maran Pakkirisamy (ma...@li...).
This is part of fixing BZ 307113.
[ revision 2621 was also implemented by Maran. ]
Modified files:
trunk/priv/guest_s390_defs.h
trunk/priv/guest_s390_helpers.c
trunk/priv/guest_s390_toIR.c
trunk/priv/host_s390_defs.c
trunk/priv/host_s390_defs.h
trunk/priv/host_s390_isel.c
Modified: trunk/priv/guest_s390_toIR.c (+134 -8)
===================================================================
--- trunk/priv/guest_s390_toIR.c 2012-12-27 20:01:13 +00:00 (rev 2621)
+++ trunk/priv/guest_s390_toIR.c 2012-12-27 20:14:03 +00:00 (rev 2622)
@@ -707,7 +707,25 @@
}
+/* Write a 128-bit decimal floating point value and an integer into the flags
+ thunk. The integer value is zero-extended first. */
static void
+s390_cc_thunk_put1d128Z(UInt opc, IRTemp d1, IRTemp nd)
+{
+ IRExpr *op, *hi, *lo, *lox, *ndep;
+
+ op = mkU64(opc);
+ hi = unop(Iop_D128HItoD64, mkexpr(d1));
+ lo = unop(Iop_ReinterpD64asI64, unop(Iop_D128LOtoD64, mkexpr(d1)));
+ ndep = s390_cc_widen(nd, False);
+
+ lox = binop(Iop_Xor64, lo, ndep); /* convey dependency */
+
+ s390_cc_thunk_fill(op, hi, lox, ndep);
+}
+
+
+static void
s390_cc_set(UInt val)
{
s390_cc_thunk_fill(mkU64(S390_CC_OP_SET),
@@ -9365,6 +9383,22 @@
}
static const HChar *
+s390_irgen_ESDTR(UChar r1, UChar r2)
+{
+ vassert(s390_host_has_dfp);
+ put_gpr_dw0(r1, unop(Iop_ExtractSigD64, get_dpr_dw0(r2)));
+ return "esdtr";
+}
+
+static const HChar *
+s390_irgen_ESXTR(UChar r1, UChar r2)
+{
+ vassert(s390_host_has_dfp);
+ put_gpr_dw0(r1, unop(Iop_ExtractSigD128, get_dpr_pair(r2)));
+ return "esxtr";
+}
+
+static const HChar *
s390_irgen_LDETR(UChar m4 __attribute__((unused)), UChar r1, UChar r2)
{
IRTemp op = newTemp(Ity_D32);
@@ -9540,6 +9574,84 @@
}
static const HChar *
+s390_irgen_TDCET(UChar r1, IRTemp op2addr)
+{
+ IRTemp value = newTemp(Ity_D32);
+
+ vassert(s390_host_has_dfp);
+ assign(value, get_dpr_w0(r1));
+
+ s390_cc_thunk_putFZ(S390_CC_OP_DFP_TDC_32, value, op2addr);
+
+ return "tdcet";
+}
+
+static const HChar *
+s390_irgen_TDCDT(UChar r1, IRTemp op2addr)
+{
+ IRTemp value = newTemp(Ity_D64);
+
+ vassert(s390_host_has_dfp);
+ assign(value, get_dpr_dw0(r1));
+
+ s390_cc_thunk_putFZ(S390_CC_OP_DFP_TDC_64, value, op2addr);
+
+ return "tdcdt";
+}
+
+static const HChar *
+s390_irgen_TDCXT(UChar r1, IRTemp op2addr)
+{
+ IRTemp value = newTemp(Ity_D128);
+
+ vassert(s390_host_has_dfp);
+ assign(value, get_dpr_pair(r1));
+
+ s390_cc_thunk_put1d128Z(S390_CC_OP_DFP_TDC_128, value, op2addr);
+
+ return "tdcxt";
+}
+
+static const HChar *
+s390_irgen_TDGET(UChar r1, IRTemp op2addr)
+{
+ IRTemp value = newTemp(Ity_D32);
+
+ vassert(s390_host_has_dfp);
+ assign(value, get_dpr_w0(r1));
+
+ s390_cc_thunk_putFZ(S390_CC_OP_DFP_TDG_32, value, op2addr);
+
+ return "tdget";
+}
+
+static const HChar *
+s390_irgen_TDGDT(UChar r1, IRTemp op2addr)
+{
+ IRTemp value = newTemp(Ity_D64);
+
+ vassert(s390_host_has_dfp);
+ assign(value, get_dpr_dw0(r1));
+
+ s390_cc_thunk_putFZ(S390_CC_OP_DFP_TDG_64, value, op2addr);
+
+ return "tdgdt";
+}
+
+static const HChar *
+s390_irgen_TDGXT(UChar r1, IRTemp op2addr)
+{
+ IRTemp value = newTemp(Ity_D128);
+
+ vassert(s390_host_has_dfp);
+ assign(value, get_dpr_pair(r1));
+
+ s390_cc_thunk_put1d128Z(S390_CC_OP_DFP_TDG_128, value, op2addr);
+
+ return "tdgxt";
+}
+
+static const HChar *
s390_irgen_CLC(UChar length, IRTemp start1, IRTemp start2)
{
IRTemp len = newTemp(Ity_I64);
@@ -13560,7 +13672,8 @@
case 0xb3e4: s390_format_RRE_FF(s390_irgen_CDTR, ovl.fmt.RRE.r1,
ovl.fmt.RRE.r2); goto ok;
case 0xb3e5: /* EEDTR */ goto unimplemented;
- case 0xb3e7: /* ESDTR */ goto unimplemented;
+ case 0xb3e7: s390_format_RRE_RF(s390_irgen_ESDTR, ovl.fmt.RRE.r1,
+ ovl.fmt.RRE.r2); goto ok;
case 0xb3e8: /* KXTR */ goto unimplemented;
case 0xb3e9: /* CGXTR */ goto unimplemented;
case 0xb3ea: /* CUXTR */ goto unimplemented;
@@ -13568,7 +13681,8 @@
case 0xb3ec: s390_format_RRE_FF(s390_irgen_CXTR, ovl.fmt.RRE.r1,
ovl.fmt.RRE.r2); goto ok;
case 0xb3ed: /* EEXTR */ goto unimplemented;
- case 0xb3ef: /* ESXTR */ goto unimplemented;
+ case 0xb3ef: s390_format_RRE_RF(s390_irgen_ESXTR, ovl.fmt.RRE.r1,
+ ovl.fmt.RRE.r2); goto ok;
case 0xb3f1: /* CDGTR */ goto unimplemented;
case 0xb3f2: /* CDUTR */ goto unimplemented;
case 0xb3f3: /* CDSTR */ goto unimplemented;
@@ -14993,12 +15107,24 @@
case 0xed0000000041ULL: /* SRDT */ goto unimplemented;
case 0xed0000000048ULL: /* SLXT */ goto unimplemented;
case 0xed0000000049ULL: /* SRXT */ goto unimplemented;
- case 0xed0000000050ULL: /* TDCET */ goto unimplemented;
- case 0xed0000000051ULL: /* TDGET */ goto unimplemented;
- case 0xed0000000054ULL: /* TDCDT */ goto unimplemented;
- case 0xed0000000055ULL: /* TDGDT */ goto unimplemented;
- case 0xed0000000058ULL: /* TDCXT */ goto unimplemented;
- case 0xed0000000059ULL: /* TDGXT */ goto unimplemented;
+ case 0xed0000000050ULL: s390_format_RXE_FRRD(s390_irgen_TDCET, ovl.fmt.RXE.r1,
+ ovl.fmt.RXE.x2, ovl.fmt.RXE.b2,
+ ovl.fmt.RXE.d2); goto ok;
+ case 0xed0000000051ULL: s390_format_RXE_FRRD(s390_irgen_TDGET, ovl.fmt.RXE.r1,
+ ovl.fmt.RXE.x2, ovl.fmt.RXE.b2,
+ ovl.fmt.RXE.d2); goto ok;
+ case 0xed0000000054ULL: s390_format_RXE_FRRD(s390_irgen_TDCDT, ovl.fmt.RXE.r1,
+ ovl.fmt.RXE.x2, ovl.fmt.RXE.b2,
+ ovl.fmt.RXE.d2); goto ok;
+ case 0xed0000000055ULL: s390_format_RXE_FRRD(s390_irgen_TDGDT, ovl.fmt.RXE.r1,
+ ovl.fmt.RXE.x2, ovl.fmt.RXE.b2,
+ ovl.fmt.RXE.d2); goto ok;
+ case 0xed0000000058ULL: s390_format_RXE_FRRD(s390_irgen_TDCXT, ovl.fmt.RXE.r1,
+ ovl.fmt.RXE.x2, ovl.fmt.RXE.b2,
+ ovl.fmt.RXE.d2); goto ok;
+ case 0xed0000000059ULL: s390_format_RXE_FRRD(s390_irgen_TDGXT, ovl.fmt.RXE.r1,
+ ovl.fmt.RXE.x2, ovl.fmt.RXE.b2,
+ ovl.fmt.RXE.d2); goto ok;
case 0xed0000000064ULL: s390_format_RXY_FRRD(s390_irgen_LEY, ovl.fmt.RXY.r1,
ovl.fmt.RXY.x2, ovl.fmt.RXY.b2,
ovl.fmt.RXY.dl2,
Modified: trunk/priv/guest_s390_helpers.c (+47 -0)
===================================================================
--- trunk/priv/guest_s390_helpers.c 2012-12-27 20:01:13 +00:00 (rev 2621)
+++ trunk/priv/guest_s390_helpers.c 2012-12-27 20:14:03 +00:00 (rev 2622)
@@ -1177,7 +1177,34 @@
psw >> 28; /* cc */ \
})
+#define S390_CC_FOR_DFP_TD(opcode,cc_dep1,cc_dep2) \
+({ \
+ __asm__ volatile ( \
+ opcode ",%[value],0(%[class])\n\t" \
+ "ipm %[psw]\n\t" : [psw] "=d"(psw) \
+ : [value] "f"(cc_dep1), \
+ [class] "a"(cc_dep2) \
+ : "cc"); \
+ psw >> 28; /* cc */ \
+})
+#define S390_CC_FOR_DFP128_TD(opcode,cc_dep1,cc_dep2,cc_ndep) \
+({ \
+ /* Recover the original DEP2 value. See comment near \
+ s390_cc_thunk_put1d128Z for rationale. */ \
+ cc_dep2 = cc_dep2 ^ cc_ndep; \
+ __asm__ volatile ( \
+ "ldr 4,%[high]\n\t" \
+ "ldr 6,%[low]\n\t" \
+ opcode ",4,0(%[class])\n\t" \
+ "ipm %[psw]\n\t" : [psw] "=d"(psw) \
+ : [high] "f"(cc_dep1), [low] "f"(cc_dep2), \
+ [class] "a"(cc_ndep) \
+ : "cc", "f4", "f6"); \
+ psw >> 28; /* cc */ \
+})
+
+
/* Return the value of the condition code from the supplied thunk parameters.
This is not the value of the PSW. It is the value of the 2 CC bits within
the PSW. The returned value is thusly in the interval [0:3]. */
@@ -1399,6 +1426,26 @@
case S390_CC_OP_DFP_RESULT_128:
return S390_CC_FOR_DFP128_RESULT(cc_dep1, cc_dep2);
+ case S390_CC_OP_DFP_TDC_32: /* TDCET */
+ return S390_CC_FOR_DFP_TD(".insn rxe, 0xed0000000050", cc_dep1, cc_dep2);
+
+ case S390_CC_OP_DFP_TDC_64: /* TDCDT */
+ return S390_CC_FOR_DFP_TD(".insn rxe, 0xed0000000054", cc_dep1, cc_dep2);
+
+ case S390_CC_OP_DFP_TDC_128: /* TDCXT */
+ return S390_CC_FOR_DFP128_TD(".insn rxe, 0xed0000000058", cc_dep1,
+ cc_dep2, cc_ndep);
+
+ case S390_CC_OP_DFP_TDG_32: /* TDGET */
+ return S390_CC_FOR_DFP_TD(".insn rxe, 0xed0000000051", cc_dep1, cc_dep2);
+
+ case S390_CC_OP_DFP_TDG_64: /* TDGDT */
+ return S390_CC_FOR_DFP_TD(".insn rxe, 0xed0000000055", cc_dep1, cc_dep2);
+
+ case S390_CC_OP_DFP_TDG_128: /* TDGXT */
+ return S390_CC_FOR_DFP128_TD(".insn rxe, 0xed0000000059", cc_dep1,
+ cc_dep2, cc_ndep);
+
default:
break;
}
Modified: trunk/priv/guest_s390_defs.h (+13 -1)
===================================================================
--- trunk/priv/guest_s390_defs.h 2012-12-27 20:01:13 +00:00 (rev 2621)
+++ trunk/priv/guest_s390_defs.h 2012-12-27 20:14:03 +00:00 (rev 2622)
@@ -138,7 +138,13 @@
S390_CC_OP_BFP_64_TO_UINT_64 = 40,
S390_CC_OP_BFP_128_TO_UINT_64 = 41,
S390_CC_OP_DFP_RESULT_64 = 42,
- S390_CC_OP_DFP_RESULT_128 = 43
+ S390_CC_OP_DFP_RESULT_128 = 43,
+ S390_CC_OP_DFP_TDC_32 = 44,
+ S390_CC_OP_DFP_TDC_64 = 45,
+ S390_CC_OP_DFP_TDC_128 = 46,
+ S390_CC_OP_DFP_TDG_32 = 47,
+ S390_CC_OP_DFP_TDG_64 = 48,
+ S390_CC_OP_DFP_TDG_128 = 49
};
/*------------------------------------------------------------*/
@@ -198,6 +204,12 @@
| S390_CC_OP_BFP_128_TO_UINT_64 | F source hi 64 bits | F source low 64 bits | Z rounding mode |
| S390_CC_OP_DFP_RESULT_64 | D result | | |
| S390_CC_OP_DFP_RESULT_128 | D result hi 64 bits | D result low 64 bits | |
+ | S390_CC_OP_DFP_TDC_32 | D value | Z class | |
+ | S390_CC_OP_DFP_TDC_64 | D value | Z class | |
+ | S390_CC_OP_DFP_TDC_128 | D value hi 64 bits | D value low 64 bits | Z class |
+ | S390_CC_OP_DFP_TDG_32 | D value | Z group | |
+ | S390_CC_OP_DFP_TDG_64 | D value | Z group | |
+ | S390_CC_OP_DFP_TDG_128 | D value hi 64 bits | D value low 64 bits | Z group |
+--------------------------------+-----------------------+----------------------+-----------------+
*/
Modified: trunk/priv/host_s390_isel.c (+26 -0)
===================================================================
--- trunk/priv/host_s390_isel.c 2012-12-27 20:01:13 +00:00 (rev 2621)
+++ trunk/priv/host_s390_isel.c 2012-12-27 20:14:03 +00:00 (rev 2622)
@@ -1448,6 +1448,32 @@
return dst;
}
+ if (unop == Iop_ExtractSigD64) {
+ dst = newVRegI(env);
+ h1 = s390_isel_dfp_expr(env, arg); /* Process the operand */
+ addInstr(env,
+ s390_insn_dfp_unop(size, S390_DFP_EXTRACT_SIG_D64, dst, h1));
+ return dst;
+ }
+
+ if (unop == Iop_ExtractSigD128) {
+ HReg op_hi, op_lo, f13, f15;
+ dst = newVRegI(env);
+ s390_isel_dfp128_expr(&op_hi, &op_lo, env, arg); /* Process operand */
+
+ /* We use non-virtual registers r13 and r15 as pair */
+ f13 = make_fpr(13);
+ f15 = make_fpr(15);
+
+ /* operand --> (f13, f15) */
+ addInstr(env, s390_insn_move(8, f13, op_hi));
+ addInstr(env, s390_insn_move(8, f15, op_lo));
+
+ addInstr(env, s390_insn_dfp128_unop(size, S390_DFP_EXTRACT_SIG_D128,
+ dst, f13, f15));
+ return dst;
+ }
+
/* Expressions whose argument is 1-bit wide */
if (typeOfIRExpr(env->type_env, arg) == Ity_I1) {
s390_cc_t cond = s390_isel_cc(env, arg);
Modified: trunk/priv/host_s390_defs.h (+17 -0)
===================================================================
--- trunk/priv/host_s390_defs.h 2012-12-27 20:01:13 +00:00 (rev 2621)
+++ trunk/priv/host_s390_defs.h 2012-12-27 20:14:03 +00:00 (rev 2622)
@@ -141,6 +141,7 @@
S390_INSN_BFP_COMPARE,
S390_INSN_BFP_CONVERT,
S390_INSN_DFP_BINOP, /* Decimal floating point */
+ S390_INSN_DFP_UNOP,
S390_INSN_DFP_COMPARE,
S390_INSN_DFP_CONVERT,
S390_INSN_MFENCE,
@@ -254,6 +255,12 @@
S390_DFP_DIV
} s390_dfp_binop_t;
+/* The kind of unary DFP operations */
+typedef enum {
+ S390_DFP_EXTRACT_SIG_D64,
+ S390_DFP_EXTRACT_SIG_D128,
+} s390_dfp_unop_t;
+
/* The kind of DFP compare operations */
typedef enum {
S390_DFP_COMPARE,
@@ -444,6 +451,13 @@
s390_dfp_binop *details;
} dfp_binop;
struct {
+ s390_dfp_unop_t tag;
+ HReg dst_hi; /* 128-bit result high part; 64-bit result */
+ HReg dst_lo; /* 128-bit result low part */
+ HReg op_hi; /* 128-bit operand high part; 64-bit opnd */
+ HReg op_lo; /* 128-bit operand low part */
+ } dfp_unop;
+ struct {
s390_dfp_conv_t tag;
s390_dfp_round_t rounding_mode;
HReg dst_hi; /* 128-bit result high part; 64-bit result */
@@ -568,6 +582,7 @@
s390_insn *s390_insn_dfp_binop(UChar size, s390_dfp_binop_t, HReg dst,
HReg op2, HReg op3,
s390_dfp_round_t rounding_mode);
+s390_insn *s390_insn_dfp_unop(UChar size, s390_dfp_unop_t, HReg dst, HReg op);
s390_insn *s390_insn_dfp_compare(UChar size, s390_dfp_cmp_t, HReg dst,
HReg op1, HReg op2);
s390_insn *s390_insn_dfp_convert(UChar size, s390_dfp_conv_t tag, HReg dst,
@@ -576,6 +591,8 @@
HReg dst_lo, HReg op2_hi, HReg op2_lo,
HReg op3_hi, HReg op3_lo,
s390_dfp_round_t rounding_mode);
+s390_insn *s390_insn_dfp128_unop(UChar size, s390_dfp_unop_t, HReg dst,
+ HReg op_hi, HReg op_lo);
s390_insn *s390_insn_dfp128_compare(UChar size, s390_dfp_cmp_t, HReg dst,
HReg op1_hi, HReg op1_lo, HReg op2_hi,
HReg op2_lo);
Modified: trunk/priv/host_s390_defs.c (+113 -0)
===================================================================
--- trunk/priv/host_s390_defs.c 2012-12-27 20:01:13 +00:00 (rev 2621)
+++ trunk/priv/host_s390_defs.c 2012-12-27 20:14:03 +00:00 (rev 2622)
@@ -722,6 +722,15 @@
break;
}
+ case S390_INSN_DFP_UNOP:
+ addHRegUse(u, HRmWrite, insn->variant.dfp_unop.dst_hi);
+ addHRegUse(u, HRmRead, insn->variant.dfp_unop.op_hi); /* operand */
+ if (insn->size == 16) {
+ addHRegUse(u, HRmWrite, insn->variant.dfp_unop.dst_lo);
+ addHRegUse(u, HRmRead, insn->variant.dfp_unop.op_lo); /* operand */
+ }
+ break;
+
case S390_INSN_DFP_COMPARE:
addHRegUse(u, HRmWrite, insn->variant.dfp_compare.dst);
addHRegUse(u, HRmRead, insn->variant.dfp_compare.op1_hi); /* left */
@@ -998,6 +1007,19 @@
break;
}
+ case S390_INSN_DFP_UNOP:
+ insn->variant.dfp_unop.dst_hi =
+ lookupHRegRemap(m, insn->variant.dfp_unop.dst_hi);
+ insn->variant.dfp_unop.op_hi =
+ lookupHRegRemap(m, insn->variant.dfp_unop.op_hi);
+ if (insn->size == 16) {
+ insn->variant.dfp_unop.dst_lo =
+ lookupHRegRemap(m, insn->variant.dfp_unop.dst_lo);
+ insn->variant.dfp_unop.op_lo =
+ lookupHRegRemap(m, insn->variant.dfp_unop.op_lo);
+ }
+ break;
+
case S390_INSN_DFP_COMPARE:
insn->variant.dfp_compare.dst =
lookupHRegRemap(m, insn->variant.dfp_compare.dst);
@@ -4127,6 +4149,26 @@
static UChar *
+s390_emit_ESDTR(UChar *p, UChar r1, UChar r2)
+{
+ if (UNLIKELY(vex_traceflags & VEX_TRACE_ASM))
+ s390_disasm(ENC3(MNM, GPR, FPR), "esdtr", r1, r2);
+
+ return emit_RRE(p, 0xb3e70000, r1, r2);
+}
+
+
+static UChar *
+s390_emit_ESXTR(UChar *p, UChar r1, UChar r2)
+{
+ if (UNLIKELY(vex_traceflags & VEX_TRACE_ASM))
+ s390_disasm(ENC3(MNM, GPR, FPR), "esxtr", r1, r2);
+
+ return emit_RRE(p, 0xb3ef0000, r1, r2);
+}
+
+
+static UChar *
s390_emit_LDETR(UChar *p, UChar m4, UChar r1, UChar r2)
{
vassert(s390_host_has_dfp);
@@ -5378,6 +5420,25 @@
s390_insn *
+s390_insn_dfp_unop(UChar size, s390_dfp_unop_t tag, HReg dst, HReg op)
+{
+ s390_insn *insn = LibVEX_Alloc(sizeof(s390_insn));
+
+ vassert(size == 8);
+
+ insn->tag = S390_INSN_DFP_UNOP;
+ insn->size = size;
+ insn->variant.dfp_unop.tag = tag;
+ insn->variant.dfp_unop.dst_hi = dst;
+ insn->variant.dfp_unop.op_hi = op;
+ insn->variant.dfp_unop.dst_lo = INVALID_HREG;
+ insn->variant.dfp_unop.op_lo = INVALID_HREG;
+
+ return insn;
+}
+
+
+s390_insn *
s390_insn_dfp_compare(UChar size, s390_dfp_cmp_t tag, HReg dst,
HReg op1, HReg op2)
{
@@ -5450,6 +5511,28 @@
s390_insn *
+s390_insn_dfp128_unop(UChar size, s390_dfp_unop_t tag, HReg dst,
+ HReg op_hi, HReg op_lo)
+{
+ s390_insn *insn = LibVEX_Alloc(sizeof(s390_insn));
+
+ /* destination is an 8 byte integer value */
+ vassert(size == 8);
+ vassert(is_valid_fp128_regpair(op_hi, op_lo));
+
+ insn->tag = S390_INSN_DFP_UNOP;
+ insn->size = size;
+ insn->variant.dfp_unop.tag = tag;
+ insn->variant.dfp_unop.dst_hi = dst;
+ insn->variant.dfp_unop.dst_lo = INVALID_HREG;
+ insn->variant.dfp_unop.op_hi = op_hi;
+ insn->variant.dfp_unop.op_lo = op_lo;
+
+ return insn;
+}
+
+
+s390_insn *
s390_insn_dfp128_compare(UChar size, s390_dfp_cmp_t tag, HReg dst, HReg op1_hi,
HReg op1_lo, HReg op2_hi, HReg op2_lo)
{
@@ -6114,6 +6197,16 @@
break;
}
+ case S390_INSN_DFP_UNOP:
+ switch (insn->variant.dfp_unop.tag) {
+ case S390_DFP_EXTRACT_SIG_D64:
+ case S390_DFP_EXTRACT_SIG_D128: op = "v-d2sig"; break;
+ default: goto fail;
+ }
+ s390_sprintf(buf, "%M %R,%R", op, insn->variant.dfp_unop.dst_hi,
+ insn->variant.dfp_unop.op_hi);
+ break;
+
case S390_INSN_DFP_COMPARE:
switch (insn->variant.dfp_compare.tag) {
case S390_DFP_COMPARE: op = "v-dcmp"; break;
@@ -8304,6 +8397,22 @@
static UChar *
+s390_insn_dfp_unop_emit(UChar *buf, const s390_insn *insn)
+{
+ UInt r1 = hregNumber(insn->variant.dfp_unop.dst_hi);
+ UInt r2 = hregNumber(insn->variant.dfp_unop.op_hi);
+
+ switch (insn->variant.dfp_unop.tag) {
+ case S390_DFP_EXTRACT_SIG_D64: return s390_emit_ESDTR(buf, r1, r2); break;
+ case S390_DFP_EXTRACT_SIG_D128: return s390_emit_ESXTR(buf, r1, r2); break;
+ default: goto fail;
+ }
+ fail:
+ vpanic("s390_insn_dfp_unop_emit");
+}
+
+
+static UChar *
s390_insn_dfp_compare_emit(UChar *buf, const s390_insn *insn)
{
UInt dst = hregNumber(insn->variant.dfp_compare.dst);
@@ -8999,6 +9108,10 @@
end = s390_insn_dfp_binop_emit(buf, insn);
break;
+ case S390_INSN_DFP_UNOP:
+ end = s390_insn_dfp_unop_emit(buf, insn);
+ break;
+
case S390_INSN_DFP_COMPARE:
end = s390_insn_dfp_compare_emit(buf, insn);
break;
|
|
From: <sv...@va...> - 2012-12-27 20:06:25
|
florian 2012-12-27 20:06:18 +0000 (Thu, 27 Dec 2012)
New Revision: 13211
Log:
valgrind-side support for Iop_ExtractSigD64 and Iop_ExtractSigD128.
See also companion patch VEX r2621.
Modified files:
trunk/memcheck/mc_translate.c
trunk/memcheck/tests/vbit-test/irops.c
trunk/memcheck/tests/vbit-test/util.c
Modified: trunk/memcheck/mc_translate.c (+2 -0)
===================================================================
--- trunk/memcheck/mc_translate.c 2012-12-27 17:47:09 +00:00 (rev 13210)
+++ trunk/memcheck/mc_translate.c 2012-12-27 20:06:18 +00:00 (rev 13211)
@@ -3716,6 +3716,8 @@
case Iop_D32toD64:
case Iop_ExtractExpD64: /* D64 -> I64 */
case Iop_ExtractExpD128: /* D128 -> I64 */
+ case Iop_ExtractSigD64: /* D64 -> I64 */
+ case Iop_ExtractSigD128: /* D128 -> I64 */
case Iop_DPBtoBCD:
case Iop_BCDtoDPB:
return mkPCastTo(mce, Ity_I64, vatom);
Modified: trunk/memcheck/tests/vbit-test/irops.c (+2 -0)
===================================================================
--- trunk/memcheck/tests/vbit-test/irops.c 2012-12-27 17:47:09 +00:00 (rev 13210)
+++ trunk/memcheck/tests/vbit-test/irops.c 2012-12-27 20:06:18 +00:00 (rev 13211)
@@ -509,6 +509,8 @@
{ DEFOP(Iop_SignificanceRoundD128, UNDEF_ALL), .s390x = 0, .ppc64 = 1, .ppc32 = 1 },
{ DEFOP(Iop_ExtractExpD64, UNDEF_ALL), .s390x = 0, .ppc64 = 1, .ppc32 = 1 },
{ DEFOP(Iop_ExtractExpD128, UNDEF_ALL), .s390x = 0, .ppc64 = 1, .ppc32 = 1 },
+ { DEFOP(Iop_ExtractSigD64, UNDEF_ALL), .s390x = 1, .ppc64 = 0, .ppc32 = 0 },
+ { DEFOP(Iop_ExtractSigD128, UNDEF_ALL), .s390x = 1, .ppc64 = 0, .ppc32 = 0 },
{ DEFOP(Iop_InsertExpD64, UNDEF_ALL), .s390x = 0, .ppc64 = 1, .ppc32 = 1 },
{ DEFOP(Iop_InsertExpD128, UNDEF_ALL), .s390x = 0, .ppc64 = 1, .ppc32 = 1 },
{ DEFOP(Iop_D64HLtoD128, UNDEF_CONCAT), .s390x = 1, .ppc64 = 1, .ppc32 = 1 },
Modified: trunk/memcheck/tests/vbit-test/util.c (+6 -0)
===================================================================
--- trunk/memcheck/tests/vbit-test/util.c 2012-12-27 17:47:09 +00:00 (rev 13210)
+++ trunk/memcheck/tests/vbit-test/util.c 2012-12-27 20:06:18 +00:00 (rev 13211)
@@ -829,12 +829,18 @@
case Iop_ExtractExpD64:
UNARY(Ity_D64, Ity_D64);
+ case Iop_ExtractSigD64:
+ UNARY(Ity_D64, Ity_I64);
+
case Iop_InsertExpD64:
BINARY(Ity_D64,Ity_D64, Ity_D64);
case Iop_ExtractExpD128:
UNARY(Ity_D128, Ity_D64);
+ case Iop_ExtractSigD128:
+ UNARY(Ity_D128, Ity_I64);
+
case Iop_InsertExpD128:
BINARY(Ity_D64,Ity_D128, Ity_D128);
|
|
From: <sv...@va...> - 2012-12-27 20:01:26
|
florian 2012-12-27 20:01:13 +0000 (Thu, 27 Dec 2012)
New Revision: 2621
Log:
New IROps: Iop_ExtractSigD64 and Iop_ExtractSigD128. These are needed to
implement s390's "extract significance" insns.
Modified files:
trunk/priv/ir_defs.c
trunk/pub/libvex_ir.h
Modified: trunk/priv/ir_defs.c (+8 -0)
===================================================================
--- trunk/priv/ir_defs.c 2012-12-27 17:19:12 +00:00 (rev 2620)
+++ trunk/priv/ir_defs.c 2012-12-27 20:01:13 +00:00 (rev 2621)
@@ -983,6 +983,8 @@
case Iop_QuantizeD128: vex_printf("Iop_QuantizeD128"); return;
case Iop_ExtractExpD64: vex_printf("Iop_ExtractExpD64"); return;
case Iop_ExtractExpD128: vex_printf("Iop_ExtractExpD128"); return;
+ case Iop_ExtractSigD64: vex_printf("Iop_ExtractSigD64"); return;
+ case Iop_ExtractSigD128: vex_printf("Iop_ExtractSigD128"); return;
case Iop_InsertExpD64: vex_printf("Iop_InsertExpD64"); return;
case Iop_InsertExpD128: vex_printf("Iop_InsertExpD128"); return;
case Iop_CmpD64: vex_printf("CmpD64"); return;
@@ -2747,12 +2749,18 @@
case Iop_ExtractExpD64:
UNARY(Ity_D64, Ity_D64);
+ case Iop_ExtractSigD64:
+ UNARY(Ity_D64, Ity_I64);
+
case Iop_InsertExpD64:
BINARY(Ity_D64,Ity_D64, Ity_D64);
case Iop_ExtractExpD128:
UNARY(Ity_D128, Ity_D64);
+ case Iop_ExtractSigD128:
+ UNARY(Ity_D128, Ity_I64);
+
case Iop_InsertExpD128:
BINARY(Ity_D64,Ity_D128, Ity_D128);
Modified: trunk/pub/libvex_ir.h (+9 -0)
===================================================================
--- trunk/pub/libvex_ir.h 2012-12-27 17:19:12 +00:00 (rev 2620)
+++ trunk/pub/libvex_ir.h 2012-12-27 20:01:13 +00:00 (rev 2621)
@@ -1114,6 +1114,15 @@
/* D128 -> I64 */
Iop_ExtractExpD128,
+ /* D64 -> I64
+ * The number of significand digits of the D64 operand is extracted.
+ * The number is stored as a 64-bit signed binary integer.
+ */
+ Iop_ExtractSigD64,
+
+ /* D128 -> I64 */
+ Iop_ExtractSigD128,
+
/* I64 x I64 -> D64
* The exponent is specified by the first I64 operand the signed
* significand is given by the second I64 value. The result is a D64
|
|
From: <sv...@va...> - 2012-12-27 17:47:16
|
sewardj 2012-12-27 17:47:09 +0000 (Thu, 27 Dec 2012)
New Revision: 13210
Log:
Teach DRD about IRLoadG and IRStoreG. Includes small bug fix from
trunk r13209.
Modified files:
branches/COMEM/drd/drd_load_store.c
Modified: branches/COMEM/drd/drd_load_store.c (+71 -30)
===================================================================
--- branches/COMEM/drd/drd_load_store.c 2012-12-27 17:46:10 +00:00 (rev 13209)
+++ branches/COMEM/drd/drd_load_store.c 2012-12-27 17:47:09 +00:00 (rev 13210)
@@ -312,7 +312,7 @@
if (addr_expr->tag == Iex_RdTmp)
{
int i;
- for (i = 0; i < bb->stmts_size; i++)
+ for (i = 0; i < bb->stmts_used; i++)
{
if (bb->stmts[i]
&& bb->stmts[i]->tag == Ist_WrTmp
@@ -344,22 +344,23 @@
* Instrument the client code to trace a memory load (--trace-addr).
*/
static IRExpr* instr_trace_mem_load(IRSB* const bb, IRExpr* addr_expr,
- const HWord size)
+ const HWord size,
+ IRExpr* const guard/* NULL => True */)
{
IRTemp tmp;
tmp = newIRTemp(bb->tyenv, typeOfIRExpr(bb->tyenv, addr_expr));
addStmtToIRSB(bb, IRStmt_WrTmp(tmp, addr_expr));
addr_expr = IRExpr_RdTmp(tmp);
+ IRDirty* di
+ = unsafeIRDirty_0_N(/*regparms*/2,
+ "drd_trace_mem_load",
+ VG_(fnptr_to_fnentry)
+ (drd_trace_mem_load),
+ mkIRExprVec_2(addr_expr, mkIRExpr_HWord(size)));
+ if (guard) di->guard = guard;
+ addStmtToIRSB(bb, IRStmt_Dirty(di));
- addStmtToIRSB(bb,
- IRStmt_Dirty(
- unsafeIRDirty_0_N(/*regparms*/2,
- "drd_trace_mem_load",
- VG_(fnptr_to_fnentry)
- (drd_trace_mem_load),
- mkIRExprVec_2(addr_expr, mkIRExpr_HWord(size)))));
-
return addr_expr;
}
@@ -367,7 +368,8 @@
* Instrument the client code to trace a memory store (--trace-addr).
*/
static void instr_trace_mem_store(IRSB* const bb, IRExpr* const addr_expr,
- IRExpr* data_expr_hi, IRExpr* data_expr_lo)
+ IRExpr* data_expr_hi, IRExpr* data_expr_lo,
+ IRExpr* const guard/* NULL => True */)
{
IRType ty_data_expr;
HWord size;
@@ -453,18 +455,20 @@
data_expr_lo = mkIRExpr_HWord(0);
}
}
- addStmtToIRSB(bb,
- IRStmt_Dirty(
- unsafeIRDirty_0_N(/*regparms*/3,
- "drd_trace_mem_store",
- VG_(fnptr_to_fnentry)(drd_trace_mem_store),
- mkIRExprVec_4(addr_expr, mkIRExpr_HWord(size),
- data_expr_hi ? data_expr_hi
- : mkIRExpr_HWord(0), data_expr_lo))));
+ IRDirty* di
+ = unsafeIRDirty_0_N(/*regparms*/3,
+ "drd_trace_mem_store",
+ VG_(fnptr_to_fnentry)(drd_trace_mem_store),
+ mkIRExprVec_4(addr_expr, mkIRExpr_HWord(size),
+ data_expr_hi ? data_expr_hi
+ : mkIRExpr_HWord(0), data_expr_lo));
+ if (guard) di->guard = guard;
+ addStmtToIRSB(bb, IRStmt_Dirty(di) );
}
static void instrument_load(IRSB* const bb, IRExpr* const addr_expr,
- const HWord size)
+ const HWord size,
+ IRExpr* const guard/* NULL => True */)
{
IRExpr* size_expr;
IRExpr** argv;
@@ -512,11 +516,13 @@
argv);
break;
}
+ if (guard) di->guard = guard;
addStmtToIRSB(bb, IRStmt_Dirty(di));
}
static void instrument_store(IRSB* const bb, IRExpr* addr_expr,
- IRExpr* const data_expr)
+ IRExpr* const data_expr,
+ IRExpr* const guard_expr/* NULL => True */)
{
IRExpr* size_expr;
IRExpr** argv;
@@ -529,7 +535,7 @@
IRTemp tmp = newIRTemp(bb->tyenv, typeOfIRExpr(bb->tyenv, addr_expr));
addStmtToIRSB(bb, IRStmt_WrTmp(tmp, addr_expr));
addr_expr = IRExpr_RdTmp(tmp);
- instr_trace_mem_store(bb, addr_expr, NULL, data_expr);
+ instr_trace_mem_store(bb, addr_expr, NULL, data_expr, guard_expr);
}
if (!s_check_stack_accesses && is_stack_access(bb, addr_expr))
@@ -574,6 +580,7 @@
argv);
break;
}
+ if (guard_expr) di->guard = guard_expr;
addStmtToIRSB(bb, IRStmt_Dirty(di));
}
@@ -631,10 +638,38 @@
case Ist_Store:
if (instrument)
- instrument_store(bb, st->Ist.Store.addr, st->Ist.Store.data);
+ instrument_store(bb, st->Ist.Store.addr, st->Ist.Store.data,
+ NULL/* no guard */);
addStmtToIRSB(bb, st);
break;
+ case Ist_StoreG: {
+ IRStoreG* sg = st->Ist.StoreG.details;
+ IRExpr* data = sg->data;
+ IRExpr* addr = sg->addr;
+ if (instrument)
+ instrument_store(bb, addr, data, sg->guard);
+ addStmtToIRSB(bb, st);
+ break;
+ }
+
+ case Ist_LoadG: {
+ IRLoadG* lg = st->Ist.LoadG.details;
+ IRType type = Ity_INVALID; /* loaded type */
+ IRType typeWide = Ity_INVALID; /* after implicit widening */
+ IRExpr* addr_expr = lg->addr;
+ typeOfIRLoadGOp(lg->cvt, &typeWide, &type);
+ tl_assert(type != Ity_INVALID);
+ if (UNLIKELY(DRD_(any_address_is_traced)())) {
+ addr_expr = instr_trace_mem_load(bb, addr_expr,
+ sizeofIRType(type), lg->guard);
+ }
+ instrument_load(bb, lg->addr,
+ sizeofIRType(type), lg->guard);
+ addStmtToIRSB(bb, st);
+ break;
+ }
+
case Ist_WrTmp:
if (instrument) {
const IRExpr* const data = st->Ist.WrTmp.data;
@@ -642,10 +677,12 @@
if (data->tag == Iex_Load) {
if (UNLIKELY(DRD_(any_address_is_traced)())) {
addr_expr = instr_trace_mem_load(bb, addr_expr,
- sizeofIRType(data->Iex.Load.ty));
+ sizeofIRType(data->Iex.Load.ty),
+ NULL/* no guard */);
}
instrument_load(bb, data->Iex.Load.addr,
- sizeofIRType(data->Iex.Load.ty));
+ sizeofIRType(data->Iex.Load.ty),
+ NULL/* no guard */);
}
}
addStmtToIRSB(bb, st);
@@ -709,9 +746,10 @@
dataSize *= 2; /* since it's a doubleword-CAS */
if (UNLIKELY(DRD_(any_address_is_traced)()))
- instr_trace_mem_store(bb, cas->addr, cas->dataHi, cas->dataLo);
+ instr_trace_mem_store(bb, cas->addr, cas->dataHi, cas->dataLo,
+ NULL/* no guard */);
- instrument_load(bb, cas->addr, dataSize);
+ instrument_load(bb, cas->addr, dataSize, NULL/*no guard*/);
}
addStmtToIRSB(bb, st);
break;
@@ -730,14 +768,17 @@
IRExpr* addr_expr = st->Ist.LLSC.addr;
if (UNLIKELY(DRD_(any_address_is_traced)()))
addr_expr = instr_trace_mem_load(bb, addr_expr,
- sizeofIRType(dataTy));
+ sizeofIRType(dataTy),
+ NULL /* no guard */);
- instrument_load(bb, addr_expr, sizeofIRType(dataTy));
+ instrument_load(bb, addr_expr, sizeofIRType(dataTy),
+ NULL/*no guard*/);
}
} else {
/* SC */
instr_trace_mem_store(bb, st->Ist.LLSC.addr, NULL,
- st->Ist.LLSC.storedata);
+ st->Ist.LLSC.storedata,
+ NULL/* no guard */);
}
addStmtToIRSB(bb, st);
break;
|
|
From: <sv...@va...> - 2012-12-27 17:46:19
|
sewardj 2012-12-27 17:46:10 +0000 (Thu, 27 Dec 2012)
New Revision: 13209
Log:
is_stack_access: don't iterate over possibly non-existent stmts. This
has been observed to cause the JIT to segfault when using DRD on ARM.
Modified files:
trunk/drd/drd_load_store.c
Modified: trunk/drd/drd_load_store.c (+1 -1)
===================================================================
--- trunk/drd/drd_load_store.c 2012-12-27 17:21:46 +00:00 (rev 13208)
+++ trunk/drd/drd_load_store.c 2012-12-27 17:46:10 +00:00 (rev 13209)
@@ -312,7 +312,7 @@
if (addr_expr->tag == Iex_RdTmp)
{
int i;
- for (i = 0; i < bb->stmts_size; i++)
+ for (i = 0; i < bb->stmts_used; i++)
{
if (bb->stmts[i]
&& bb->stmts[i]->tag == Ist_WrTmp
|
|
From: <sv...@va...> - 2012-12-27 17:21:57
|
florian 2012-12-27 17:21:46 +0000 (Thu, 27 Dec 2012)
New Revision: 13208
Log:
Update list of ignored files.
Modified directories:
trunk/drd/tests/
Modified: trunk/drd/tests/
Property changed: trunk/drd/tests (+0 -0)
___________________________________________________________________
Name: svn:ignore
- *.dSYM
*.stderr.diff*
*.stderr.out
*.stdout.diff*
*.stdout.out
.deps
annotate_barrier
annotate_hb_err
annotate_hb_race
annotate_ignore_rw
annotate_ignore_write
annotate_publish_hg
annotate_rwlock
annotate_smart_pointer
annotate_static
annotate_trace_memory
atomic_var
bar_bad
bar_trivial
boost_thread
bug-235681
circular_buffer
custom_alloc
drd_bitmap_test
fp_race
free_is_write
hg01_all_ok
hg02_deadlock
hg03_inherit
hg04_race
hg05_race2
hg06_readshared
hold_lock
linuxthreads_det
Makefile
Makefile.in
matinv
memory_allocation
monitor_example
new_delete
omp_matinv
omp_prime
omp_printf
pth_barrier
pth_barrier_race
pth_barrier_reinit
pth_barrier_thr_cr
pth_broadcast
pth_cancel_locked
pth_cleanup_handler
pth_cond_race
pth_create_chain
pth_create_glibc_2_0
pth_detached
pth_detached3
pth_detached_sem
pth_inconsistent_cond_wait
pth_mutex_reinit
pth_process_shared_mutex
pth_spinlock
pth_uninitialized_cond
qt4_atomic
qt4_mutex
qt4_rwlock
qt4_semaphore
read_after_free
recursive_mutex
rwlock_race
rwlock_test
rwlock_type_checking
sem_as_mutex
sem_open
sem_wait
sigalrm
std_thread
tc01_simple_race
tc02_simple_tls
tc03_re_excl
tc04_free_lock
tc05_simple_race
tc06_two_races
tc07_hbl1
tc08_hbl2
tc09_bad_unlock
tc10_rec_lock
tc11_XCHG
tc12_rwl_trivial
tc13_laog1
tc15_laog_lockdel
tc16_byterace
tc17_sembar
tc18_semabuse
tc19_shadowmem
tc20_verifywrap
tc21_pthonce
tc22_exit_w_lock
tc23_bogus_condwait
tc24_nonzero_sem
threaded-fork
thread_name
trylock
tsan_unittest
unit_bitmap
unit_vc
vg_regtest.tmp*
+ *.dSYM
*.stderr.diff*
*.stderr.out
*.stdout.diff*
*.stdout.out
.deps
annotate_barrier
annotate_hb_err
annotate_hb_race
annotate_ignore_rw
annotate_ignore_write
annotate_publish_hg
annotate_rwlock
annotate_smart_pointer
annotate_static
annotate_trace_memory
atomic_var
bar_bad
bar_trivial
boost_thread
bug-235681
circular_buffer
custom_alloc
drd_bitmap_test
fp_race
free_is_write
hg01_all_ok
hg02_deadlock
hg03_inherit
hg04_race
hg05_race2
hg06_readshared
hold_lock
linuxthreads_det
Makefile
Makefile.in
matinv
memory_allocation
monitor_example
new_delete
omp_matinv
omp_prime
omp_printf
pth_barrier
pth_barrier_race
pth_barrier_reinit
pth_barrier_thr_cr
pth_broadcast
pth_cancel_locked
pth_cleanup_handler
pth_cond_destroy_busy
pth_cond_race
pth_create_chain
pth_create_glibc_2_0
pth_detached
pth_detached3
pth_detached_sem
pth_inconsistent_cond_wait
pth_mutex_reinit
pth_process_shared_mutex
pth_spinlock
pth_uninitialized_cond
qt4_atomic
qt4_mutex
qt4_rwlock
qt4_semaphore
read_after_free
recursive_mutex
rwlock_race
rwlock_test
rwlock_type_checking
sem_as_mutex
sem_open
sem_wait
sigalrm
std_thread
tc01_simple_race
tc02_simple_tls
tc03_re_excl
tc04_free_lock
tc05_simple_race
tc06_two_races
tc07_hbl1
tc08_hbl2
tc09_bad_unlock
tc10_rec_lock
tc11_XCHG
tc12_rwl_trivial
tc13_laog1
tc15_laog_lockdel
tc16_byterace
tc17_sembar
tc18_semabuse
tc19_shadowmem
tc20_verifywrap
tc21_pthonce
tc22_exit_w_lock
tc23_bogus_condwait
tc24_nonzero_sem
threaded-fork
thread_name
trylock
tsan_unittest
unit_bitmap
unit_vc
vg_regtest.tmp*
|
|
From: <sv...@va...> - 2012-12-27 17:19:22
|
florian 2012-12-27 17:19:12 +0000 (Thu, 27 Dec 2012)
New Revision: 2620
Log:
Remove Makefile-icc which has been broken for a long time.
Removed files:
trunk/Makefile-icc
Deleted: trunk/Makefile-icc (+0 -261)
===================================================================
--- trunk/Makefile-icc 2012-12-27 00:59:43 +00:00 (rev 2619)
+++ trunk/Makefile-icc 2012-12-27 17:19:12 +00:00 (rev 2620)
@@ -1,261 +0,0 @@
-
-PUB_HEADERS = pub/libvex_basictypes.h \
- pub/libvex_ir.h \
- pub/libvex.h \
- pub/libvex_trc_values.h \
- pub/libvex_emwarn.h \
- pub/libvex_guest_x86.h \
- pub/libvex_guest_amd64.h \
- pub/libvex_guest_arm.h \
- pub/libvex_guest_ppc32.h \
- pub/libvex_guest_ppc64.h \
- pub/libvex_guest_mips.h \
- pub/libvex_guest_offsets.h
-
-PRIV_HEADERS = priv/host-x86/hdefs.h \
- priv/host-amd64/hdefs.h \
- priv/host-arm/hdefs.h \
- priv/host-ppc/hdefs.h \
- priv/host-mips/hdefs.h \
- priv/host-generic/h_generic_regs.h \
- priv/host-generic/h_generic_simd64.h \
- priv/main/vex_globals.h \
- priv/main/vex_util.h \
- priv/guest-generic/g_generic_x87.h \
- priv/guest-generic/bb_to_IR.h \
- priv/guest-x86/gdefs.h \
- priv/guest-amd64/gdefs.h \
- priv/guest-arm/gdefs.h \
- priv/guest-ppc/gdefs.h \
- priv/guest-mips/gdefs.h \
- priv/ir/irmatch.h \
- priv/ir/iropt.h
-
-LIB_OBJS = priv/ir/irdefs.o \
- priv/ir/irmatch.o \
- priv/ir/iropt.o \
- priv/main/vex_main.o \
- priv/main/vex_globals.o \
- priv/main/vex_util.o \
- priv/host-x86/hdefs.o \
- priv/host-amd64/hdefs.o \
- priv/host-arm/hdefs.o \
- priv/host-ppc/hdefs.o \
- priv/host-x86/isel.o \
- priv/host-amd64/isel.o \
- priv/host-arm/isel.o \
- priv/host-ppc/isel.o \
- priv/host-mips/isel.o \
- priv/host-generic/h_generic_regs.o \
- priv/host-generic/h_generic_simd64.o \
- priv/host-generic/reg_alloc2.o \
- priv/guest-generic/g_generic_x87.o \
- priv/guest-generic/bb_to_IR.o \
- priv/guest-x86/ghelpers.o \
- priv/guest-amd64/ghelpers.o \
- priv/guest-arm/ghelpers.o \
- priv/guest-ppc/ghelpers.o \
- priv/guest-mips/ghelpers.o \
- priv/guest-x86/toIR.o \
- priv/guest-amd64/toIR.o \
- priv/guest-arm/toIR.o \
- priv/guest-ppc/toIR.o \
- priv/guest-mips/toIR.o
-
-PUB_INCLUDES = -Ipub
-
-# Do not add any priv/host-ARCH or priv/guest-ARCH directories to this
-# list, as they contain duplicate file names (each host has a hdefs.h,
-# for example).
-PRIV_INCLUDES = -Ipriv
-
-
-#CC = gcc
-#CCFLAGS = -g -O -Wall -Wmissing-prototypes -Wshadow -Winline \
-# -Wpointer-arith -Wbad-function-cast -Wcast-qual \
-# -Wcast-align -Wmissing-declarations \
-# $(EXTRA_CFLAGS)
-
-CC = icc
-CCFLAGS = -g -Wall -wd981 -wd279 -wd1287 -wd869 -wd111 -wd188 -wd186 -wd810
-# 981: operands are evaluated in unspecified order
-# 279: controlling expression is constant
-# 1287: invalid attribute for parameter
-# 869: parameter "..." was never referenced
-# 111: statement is unreachable
-# 188: enumerated type mixed with another type
-# (the above are for icc 8.0 -- 8.0.0.55 I think)
-# 186: pointless comparison of unsigned integer with zero
-# 810: conversion from ... to ... may lose significant bits
-
-all: vex
-
-scratch: clean version all
-
-vex: libvex.a test_main.o
- $(CC) $(CCFLAGS) -o vex test_main.o libvex.a
-
-libvex.a: $(LIB_OBJS)
- rm -f libvex.a
- ar clq libvex.a $(LIB_OBJS)
-
-clean:
- rm -f $(LIB_OBJS) libvex.a vex test_main.o \
- priv/main/vex_svnversion.h \
- pub/libvex_guest_offsets.h
-
-version:
- rm -f priv/main/vex_svnversion.h
- echo -n "\"" > priv/main/vex_svnversion.h
- svnversion -n . >> priv/main/vex_svnversion.h
- echo "\"" >> priv/main/vex_svnversion.h
-
-minidist: version
- rm -f vex--minidist-2005MMDD.tar
- tar cf vex--minidist-2005MMDD.tar $(PUB_HEADERS) $(PRIV_HEADERS) \
- priv/main/vex_svnversion.h \
- test_main.c test_main.h \
- Makefile \
- `echo $(LIB_OBJS) | sed "s/\.o/\.c/g"`
- @echo
- @echo minidist done, size and svnversion follow:
- @ls -l vex--minidist-2005MMDD.tar
- @cat priv/main/vex_svnversion.h
- @echo
-
-pub/libvex_guest_offsets.h:
- gcc -Wall -g -o auxprogs/genoffsets auxprogs/genoffsets.c
- ./auxprogs/genoffsets > pub/libvex_guest_offsets.h
-
-
-ALL_HEADERS = $(PUB_HEADERS) $(PRIV_HEADERS)
-ALL_INCLUDES = $(PUB_INCLUDES) $(PRIV_INCLUDES)
-
-test_main.o: $(PUB_HEADERS) test_main.c test_main.h
- $(CC) $(CCFLAGS) $(PUB_INCLUDES) -o test_main.o \
- -c test_main.c
-
-priv/ir/irdefs.o: $(ALL_HEADERS) priv/ir/irdefs.c
- $(CC) $(CCFLAGS) $(ALL_INCLUDES) -o priv/ir/irdefs.o \
- -c priv/ir/irdefs.c
-
-priv/ir/irmatch.o: $(ALL_HEADERS) priv/ir/irmatch.c
- $(CC) $(CCFLAGS) $(ALL_INCLUDES) -o priv/ir/irmatch.o \
- -c priv/ir/irmatch.c
-
-priv/ir/iropt.o: $(ALL_HEADERS) priv/ir/iropt.c
- $(CC) $(CCFLAGS) $(ALL_INCLUDES) -o priv/ir/iropt.o \
- -c priv/ir/iropt.c
-
-priv/main/vex_main.o: $(ALL_HEADERS) priv/main/vex_main.c \
- priv/main/vex_svnversion.h
- $(CC) $(CCFLAGS) $(ALL_INCLUDES) -o priv/main/vex_main.o \
- -c priv/main/vex_main.c
-
-priv/main/vex_globals.o: $(ALL_HEADERS) priv/main/vex_globals.c
- $(CC) $(CCFLAGS) $(ALL_INCLUDES) -o priv/main/vex_globals.o \
- -c priv/main/vex_globals.c
-
-priv/main/vex_util.o: $(ALL_HEADERS) priv/main/vex_util.c
- $(CC) $(CCFLAGS) $(ALL_INCLUDES) -o priv/main/vex_util.o \
- -c priv/main/vex_util.c
-
-priv/host-x86/hdefs.o: $(ALL_HEADERS) priv/host-x86/hdefs.c
- $(CC) $(CCFLAGS) $(ALL_INCLUDES) -o priv/host-x86/hdefs.o \
- -c priv/host-x86/hdefs.c
-
-priv/host-amd64/hdefs.o: $(ALL_HEADERS) priv/host-amd64/hdefs.c
- $(CC) $(CCFLAGS) $(ALL_INCLUDES) -o priv/host-amd64/hdefs.o \
- -c priv/host-amd64/hdefs.c
-
-priv/host-arm/hdefs.o: $(ALL_HEADERS) priv/host-arm/hdefs.c
- $(CC) $(CCFLAGS) $(ALL_INCLUDES) -o priv/host-arm/hdefs.o \
- -c priv/host-arm/hdefs.c
-
-priv/host-ppc/hdefs.o: $(ALL_HEADERS) priv/host-ppc/hdefs.c
- $(CC) $(CCFLAGS) $(ALL_INCLUDES) -o priv/host-ppc/hdefs.o \
- -c priv/host-ppc/hdefs.c
-
-priv/host-mips/hdefs.o: $(ALL_HEADERS) priv/host-mips/hdefs.c
- $(CC) $(CCFLAGS) $(ALL_INCLUDES) -o priv/host-mips/hdefs.o \
- -c priv/host-mips/hdefs.c
-
-priv/host-x86/isel.o: $(ALL_HEADERS) priv/host-x86/isel.c
- $(CC) $(CCFLAGS) $(ALL_INCLUDES) -o priv/host-x86/isel.o \
- -c priv/host-x86/isel.c
-
-priv/host-amd64/isel.o: $(ALL_HEADERS) priv/host-amd64/isel.c
- $(CC) $(CCFLAGS) $(ALL_INCLUDES) -o priv/host-amd64/isel.o \
- -c priv/host-amd64/isel.c
-
-priv/host-arm/isel.o: $(ALL_HEADERS) priv/host-arm/isel.c
- $(CC) $(CCFLAGS) $(ALL_INCLUDES) -o priv/host-arm/isel.o \
- -c priv/host-arm/isel.c
-
-priv/host-ppc/isel.o: $(ALL_HEADERS) priv/host-ppc/isel.c
- $(CC) $(CCFLAGS) $(ALL_INCLUDES) -o priv/host-ppc/isel.o \
- -c priv/host-ppc/isel.c
-
-priv/host-mips/isel.o: $(ALL_HEADERS) priv/host-mips/isel.c
- $(CC) $(CCFLAGS) $(ALL_INCLUDES) -o priv/host-mips/isel.o \
- -c priv/host-mips/isel.c
-
-priv/host-generic/h_generic_regs.o: $(ALL_HEADERS) priv/host-generic/h_generic_regs.c
- $(CC) $(CCFLAGS) $(ALL_INCLUDES) -o priv/host-generic/h_generic_regs.o \
- -c priv/host-generic/h_generic_regs.c
-
-priv/host-generic/h_generic_simd64.o: $(ALL_HEADERS) priv/host-generic/h_generic_simd64.c
- $(CC) $(CCFLAGS) $(ALL_INCLUDES) -o priv/host-generic/h_generic_simd64.o \
- -c priv/host-generic/h_generic_simd64.c
-
-priv/host-generic/reg_alloc2.o: $(ALL_HEADERS) priv/host-generic/reg_alloc2.c
- $(CC) $(CCFLAGS) $(ALL_INCLUDES) -o priv/host-generic/reg_alloc2.o \
- -c priv/host-generic/reg_alloc2.c
-
-priv/guest-x86/toIR.o: $(ALL_HEADERS) priv/guest-x86/toIR.c
- $(CC) $(CCFLAGS) $(ALL_INCLUDES) -o priv/guest-x86/toIR.o \
- -c priv/guest-x86/toIR.c
-
-priv/guest-generic/g_generic_x87.o: $(ALL_HEADERS) priv/guest-generic/g_generic_x87.c
- $(CC) $(CCFLAGS) $(ALL_INCLUDES) -o priv/guest-generic/g_generic_x87.o \
- -c priv/guest-generic/g_generic_x87.c
-
-priv/guest-generic/bb_to_IR.o: $(ALL_HEADERS) priv/guest-generic/bb_to_IR.c
- $(CC) $(CCFLAGS) $(ALL_INCLUDES) -o priv/guest-generic/bb_to_IR.o \
- -c priv/guest-generic/bb_to_IR.c
-
-priv/guest-x86/ghelpers.o: $(ALL_HEADERS) priv/guest-x86/ghelpers.c
- $(CC) $(CCFLAGS) $(ALL_INCLUDES) -o priv/guest-x86/ghelpers.o \
- -c priv/guest-x86/ghelpers.c
-
-priv/guest-amd64/ghelpers.o: $(ALL_HEADERS) priv/guest-amd64/ghelpers.c
- $(CC) $(CCFLAGS) $(ALL_INCLUDES) -o priv/guest-amd64/ghelpers.o \
- -c priv/guest-amd64/ghelpers.c
-
-priv/guest-amd64/toIR.o: $(ALL_HEADERS) priv/guest-amd64/toIR.c
- $(CC) $(CCFLAGS) $(ALL_INCLUDES) -o priv/guest-amd64/toIR.o \
- -c priv/guest-amd64/toIR.c
-
-priv/guest-arm/ghelpers.o: $(ALL_HEADERS) priv/guest-arm/ghelpers.c
- $(CC) $(CCFLAGS) $(ALL_INCLUDES) -o priv/guest-arm/ghelpers.o \
- -c priv/guest-arm/ghelpers.c
-
-priv/guest-arm/toIR.o: $(ALL_HEADERS) priv/guest-arm/toIR.c
- $(CC) $(CCFLAGS) $(ALL_INCLUDES) -o priv/guest-arm/toIR.o \
- -c priv/guest-arm/toIR.c
-
-priv/guest-ppc/ghelpers.o: $(ALL_HEADERS) priv/guest-ppc/ghelpers.c
- $(CC) $(CCFLAGS) $(ALL_INCLUDES) -o priv/guest-ppc/ghelpers.o \
- -c priv/guest-ppc/ghelpers.c
-
-priv/guest-ppc/toIR.o: $(ALL_HEADERS) priv/guest-ppc/toIR.c
- $(CC) $(CCFLAGS) $(ALL_INCLUDES) -o priv/guest-ppc/toIR.o \
- -c priv/guest-ppc/toIR.c
-
-priv/guest-mips/ghelpers.o: $(ALL_HEADERS) priv/guest-mips/ghelpers.c
- $(CC) $(CCFLAGS) $(ALL_INCLUDES) -o priv/guest-mips/ghelpers.o \
- -c priv/guest-mips/ghelpers.c
-
-priv/guest-mips/toIR.o: $(ALL_HEADERS) priv/guest-mips/toIR.c
- $(CC) $(CCFLAGS) $(ALL_INCLUDES) -o priv/guest-mips/toIR.o \
- -c priv/guest-mips/toIR.c
|
|
From: <sv...@va...> - 2012-12-27 13:37:47
|
sewardj 2012-12-27 13:37:36 +0000 (Thu, 27 Dec 2012)
New Revision: 13207
Log:
Teach Helgrind about IRLoadG and IRStoreG.
Modified files:
branches/COMEM/helgrind/hg_main.c
Modified: branches/COMEM/helgrind/hg_main.c (+71 -14)
===================================================================
--- branches/COMEM/helgrind/hg_main.c 2012-12-27 12:02:15 +00:00 (rev 13206)
+++ branches/COMEM/helgrind/hg_main.c 2012-12-27 13:37:36 +00:00 (rev 13207)
@@ -4126,18 +4126,40 @@
/*--- Instrumentation ---*/
/*--------------------------------------------------------------*/
+#define unop(_op, _arg1) IRExpr_Unop((_op),(_arg1))
#define binop(_op, _arg1, _arg2) IRExpr_Binop((_op),(_arg1),(_arg2))
#define mkexpr(_tmp) IRExpr_RdTmp((_tmp))
#define mkU32(_n) IRExpr_Const(IRConst_U32(_n))
#define mkU64(_n) IRExpr_Const(IRConst_U64(_n))
#define assign(_t, _e) IRStmt_WrTmp((_t), (_e))
+/* This takes and returns atoms, of course. Not full IRExprs. */
+static IRExpr* mk_And1 ( IRSB* sbOut, IRExpr* arg1, IRExpr* arg2 )
+{
+ tl_assert(arg1 && arg2);
+ tl_assert(isIRAtom(arg1));
+ tl_assert(isIRAtom(arg2));
+ /* Generate 32to1(And32(1Uto32(arg1), 1Uto32(arg2))). Appalling
+ code, I know. */
+ IRTemp wide1 = newIRTemp(sbOut->tyenv, Ity_I32);
+ IRTemp wide2 = newIRTemp(sbOut->tyenv, Ity_I32);
+ IRTemp anded = newIRTemp(sbOut->tyenv, Ity_I32);
+ IRTemp res = newIRTemp(sbOut->tyenv, Ity_I1);
+ addStmtToIRSB(sbOut, assign(wide1, unop(Iop_1Uto32, arg1)));
+ addStmtToIRSB(sbOut, assign(wide2, unop(Iop_1Uto32, arg2)));
+ addStmtToIRSB(sbOut, assign(anded, binop(Iop_And32, mkexpr(wide1),
+ mkexpr(wide2))));
+ addStmtToIRSB(sbOut, assign(res, unop(Iop_32to1, mkexpr(anded))));
+ return mkexpr(res);
+}
+
static void instrument_mem_access ( IRSB* sbOut,
IRExpr* addr,
Int szB,
Bool isStore,
Int hWordTy_szB,
- Int goff_sp )
+ Int goff_sp,
+ IRExpr* guard ) /* NULL => True */
{
IRType tyAddr = Ity_INVALID;
const HChar* hName = NULL;
@@ -4273,17 +4295,25 @@
: binop(Iop_Add64, mkexpr(addr_minus_sp), mkU64(rz_szB)))
);
- IRTemp guard = newIRTemp(sbOut->tyenv, Ity_I1);
+ /* guardA == "guard on the address" */
+ IRTemp guardA = newIRTemp(sbOut->tyenv, Ity_I1);
addStmtToIRSB(
sbOut,
- assign(guard,
+ assign(guardA,
tyAddr == Ity_I32
? binop(Iop_CmpLT32U, mkU32(THRESH), mkexpr(diff))
: binop(Iop_CmpLT64U, mkU64(THRESH), mkexpr(diff)))
);
- di->guard = mkexpr(guard);
+ di->guard = mkexpr(guardA);
}
+ /* If there's a guard on the access itself (as supplied by the
+ caller of this routine), we need to AND that in to any guard we
+ might already have. */
+ if (guard) {
+ di->guard = mk_And1(sbOut, di->guard, guard);
+ }
+
/* Add the helper. */
addStmtToIRSB( sbOut, IRStmt_Dirty(di) );
}
@@ -4428,7 +4458,8 @@
(isDCAS ? 2 : 1)
* sizeofIRType(typeOfIRExpr(bbIn->tyenv, cas->dataLo)),
False/*!isStore*/,
- sizeofIRType(hWordTy), goff_sp
+ sizeofIRType(hWordTy), goff_sp,
+ NULL/*no-guard*/
);
}
break;
@@ -4448,7 +4479,8 @@
st->Ist.LLSC.addr,
sizeofIRType(dataTy),
False/*!isStore*/,
- sizeofIRType(hWordTy), goff_sp
+ sizeofIRType(hWordTy), goff_sp,
+ NULL/*no-guard*/
);
}
} else {
@@ -4459,22 +4491,46 @@
}
case Ist_Store:
- /* It seems we pretend that store-conditionals don't
- exist, viz, just ignore them ... */
if (!inLDSO) {
instrument_mem_access(
bbOut,
st->Ist.Store.addr,
sizeofIRType(typeOfIRExpr(bbIn->tyenv, st->Ist.Store.data)),
True/*isStore*/,
- sizeofIRType(hWordTy), goff_sp
+ sizeofIRType(hWordTy), goff_sp,
+ NULL/*no-guard*/
);
}
break;
+ case Ist_StoreG: {
+ IRStoreG* sg = st->Ist.StoreG.details;
+ IRExpr* data = sg->data;
+ IRExpr* addr = sg->addr;
+ IRType type = typeOfIRExpr(bbIn->tyenv, data);
+ tl_assert(type != Ity_INVALID);
+ instrument_mem_access( bbOut, addr, sizeofIRType(type),
+ True/*isStore*/,
+ sizeofIRType(hWordTy),
+ goff_sp, sg->guard );
+ break;
+ }
+
+ case Ist_LoadG: {
+ IRLoadG* lg = st->Ist.LoadG.details;
+ IRType type = Ity_INVALID; /* loaded type */
+ IRType typeWide = Ity_INVALID; /* after implicit widening */
+ IRExpr* addr = lg->addr;
+ typeOfIRLoadGOp(lg->cvt, &typeWide, &type);
+ tl_assert(type != Ity_INVALID);
+ instrument_mem_access( bbOut, addr, sizeofIRType(type),
+ False/*!isStore*/,
+ sizeofIRType(hWordTy),
+ goff_sp, lg->guard );
+ break;
+ }
+
case Ist_WrTmp: {
- /* ... whereas here we don't care whether a load is a
- vanilla one or a load-linked. */
IRExpr* data = st->Ist.WrTmp.data;
if (data->tag == Iex_Load) {
if (!inLDSO) {
@@ -4483,7 +4539,8 @@
data->Iex.Load.addr,
sizeofIRType(data->Iex.Load.ty),
False/*!isStore*/,
- sizeofIRType(hWordTy), goff_sp
+ sizeofIRType(hWordTy), goff_sp,
+ NULL/*no-guard*/
);
}
}
@@ -4503,7 +4560,7 @@
if (!inLDSO) {
instrument_mem_access(
bbOut, d->mAddr, dataSize, False/*!isStore*/,
- sizeofIRType(hWordTy), goff_sp
+ sizeofIRType(hWordTy), goff_sp, NULL/*no-guard*/
);
}
}
@@ -4511,7 +4568,7 @@
if (!inLDSO) {
instrument_mem_access(
bbOut, d->mAddr, dataSize, True/*isStore*/,
- sizeofIRType(hWordTy), goff_sp
+ sizeofIRType(hWordTy), goff_sp, NULL/*no-guard*/
);
}
}
|
|
From: Julian S. <js...@ac...> - 2012-12-27 12:49:22
|
On Monday, December 24, 2012, Florian Krohm wrote: > And we don't ship it in the release tarball. > OK to remove? Fine by me. J |
|
From: Julian S. <js...@ac...> - 2012-12-27 12:12:24
|
On Friday, December 21, 2012, Josef Weidendorfer wrote: > On x86, for sure they are rare. On x86 they do not exist at all for any instruction set < AVX, IIUC, since AVX has conditional scatter/gather loads. Did you mean something else? > I am not so sure for ARM. From my experimentation so far, they do exist on ARM (obviously) but are still quite rare. One reason they might be rare is that flattening an if-then-else into conditionalised straight-line code on ARM is only going to be a performance win if the then- and else- branches are very small (or empty). Also, on Thumb, the conditionalisation scheme -- which is different from ARM -- makes it impossible to write straight-line if-then-else for more than 4 instructions total. > The changes for Callgrind should be exactly the same. I think so, but it would be good if you could look at what I just committed for Callgrind (r13206). It does not produce the same numbers for insn reads or data accesses for "perf/bz2 x" compiled -g -O, which worries me. But IIRC you fixed some bug on the trunk relating to cachegrind/callgrind inconsistencies, and maybe you fixed it after I made the COMEM branch from the trunk. So maybe that is the reason for the differences. J |
|
From: <sv...@va...> - 2012-12-27 12:02:28
|
sewardj 2012-12-27 12:02:15 +0000 (Thu, 27 Dec 2012)
New Revision: 13206
Log:
Teach Callgrind about IRLoadG and IRStoreG.
Modified files:
branches/COMEM/callgrind/main.c
branches/COMEM/callgrind/sim.c
Modified: branches/COMEM/callgrind/sim.c (+4 -0)
===================================================================
--- branches/COMEM/callgrind/sim.c 2012-12-27 03:00:49 +00:00 (rev 13205)
+++ branches/COMEM/callgrind/sim.c 2012-12-27 12:02:15 +00:00 (rev 13206)
@@ -1189,6 +1189,9 @@
}
+/* Note that addEvent_D_guarded assumes that log_0I1Dr and log_0I1Dw
+ have exactly the same prototype. If you change them, you must
+ change addEvent_D_guarded too. */
VG_REGPARM(3)
static void log_0I1Dr(InstrInfo* ii, Addr data_addr, Word data_size)
{
@@ -1248,6 +1251,7 @@
}
}
+/* See comment on log_0I1Dr. */
VG_REGPARM(3)
static void log_0I1Dw(InstrInfo* ii, Addr data_addr, Word data_size)
{
Modified: branches/COMEM/callgrind/main.c (+75 -6)
===================================================================
--- branches/COMEM/callgrind/main.c 2012-12-27 03:00:49 +00:00 (rev 13205)
+++ branches/COMEM/callgrind/main.c 2012-12-27 12:02:15 +00:00 (rev 13206)
@@ -669,6 +669,50 @@
}
static
+void addEvent_D_guarded ( ClgState* clgs, InstrInfo* inode,
+ Int datasize, IRAtom* ea, IRAtom* guard,
+ Bool isWrite )
+{
+ tl_assert(isIRAtom(ea));
+ tl_assert(guard);
+ tl_assert(isIRAtom(guard));
+ tl_assert(datasize >= 1);
+ if (!CLG_(clo).simulate_cache) return;
+ tl_assert(datasize <= CLG_(min_line_size));
+
+ /* Adding guarded memory actions and merging them with the existing
+ queue is too complex. Simply flush the queue and add this
+ action immediately. Since guarded loads and stores are pretty
+ rare, this is not thought likely to cause any noticeable
+ performance loss as a result of the loss of event-merging
+ opportunities. */
+ tl_assert(clgs->events_used >= 0);
+ flushEvents(clgs);
+ tl_assert(clgs->events_used == 0);
+ /* Same as case Ev_Dw / case Ev_Dr in flushEvents, except with guard */
+ IRExpr* i_node_expr;
+ const HChar* helperName;
+ void* helperAddr;
+ IRExpr** argv;
+ Int regparms;
+ IRDirty* di;
+ i_node_expr = mkIRExpr_HWord( (HWord)inode );
+ helperName = isWrite ? CLG_(cachesim).log_0I1Dw_name
+ : CLG_(cachesim).log_0I1Dr_name;
+ helperAddr = isWrite ? CLG_(cachesim).log_0I1Dw
+ : CLG_(cachesim).log_0I1Dr;
+ argv = mkIRExprVec_3( i_node_expr,
+ ea, mkIRExpr_HWord( datasize ) );
+ regparms = 3;
+ di = unsafeIRDirty_0_N(
+ regparms,
+ helperName, VG_(fnptr_to_fnentry)( helperAddr ),
+ argv );
+ di->guard = guard;
+ addStmtToIRSB( clgs->sbOut, IRStmt_Dirty(di) );
+}
+
+static
void addEvent_Bc ( ClgState* clgs, InstrInfo* inode, IRAtom* guard )
{
Event* evt;
@@ -912,14 +956,14 @@
VexArchInfo* archinfo_host,
IRType gWordTy, IRType hWordTy )
{
- Int i;
- IRStmt* st;
- Addr origAddr;
+ Int i;
+ IRStmt* st;
+ Addr origAddr;
InstrInfo* curr_inode = NULL;
- ClgState clgs;
- UInt cJumps = 0;
+ ClgState clgs;
+ UInt cJumps = 0;
+ IRTypeEnv* tyenv = sbIn->tyenv;
-
if (gWordTy != hWordTy) {
/* We don't currently support this case. */
VG_(tool_panic)("host/guest word size mismatch");
@@ -1022,6 +1066,31 @@
break;
}
+ case Ist_StoreG: {
+ IRStoreG* sg = st->Ist.StoreG.details;
+ IRExpr* data = sg->data;
+ IRExpr* addr = sg->addr;
+ IRType type = typeOfIRExpr(tyenv, data);
+ tl_assert(type != Ity_INVALID);
+ addEvent_D_guarded( &clgs, curr_inode,
+ sizeofIRType(type), addr, sg->guard,
+ True/*isWrite*/ );
+ break;
+ }
+
+ case Ist_LoadG: {
+ IRLoadG* lg = st->Ist.LoadG.details;
+ IRType type = Ity_INVALID; /* loaded type */
+ IRType typeWide = Ity_INVALID; /* after implicit widening */
+ IRExpr* addr = lg->addr;
+ typeOfIRLoadGOp(lg->cvt, &typeWide, &type);
+ tl_assert(type != Ity_INVALID);
+ addEvent_D_guarded( &clgs, curr_inode,
+ sizeofIRType(type), addr, lg->guard,
+ False/*!isWrite*/ );
+ break;
+ }
+
case Ist_Dirty: {
Int dataSize;
IRDirty* d = st->Ist.Dirty.details;
|
|
From: Philippe W. <phi...@sk...> - 2012-12-27 04:48:20
|
valgrind revision: 13205 VEX revision: 2619 C compiler: gcc (GCC) 4.6.3 20120306 (Red Hat 4.6.3-2) 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.3.1-3.fc16.ppc64 ppc64 Vendor version: Fedora release 16 (Verne) Nightly build on gcc110 ( Fedora release 16 (Verne), ppc64 ) Started at 2012-12-26 20:00:14 PST Ended at 2012-12-26 20:46:33 PST 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 == 543 tests, 10 stderr failures, 5 stdout failures, 1 stderrB failure, 1 stdoutB failure, 2 post failures == gdbserver_tests/mcmain_pic (stdout) gdbserver_tests/mcmain_pic (stderr) gdbserver_tests/mcmain_pic (stdoutB) gdbserver_tests/mcmain_pic (stderrB) memcheck/tests/linux/getregset (stdout) memcheck/tests/linux/getregset (stderr) memcheck/tests/supp_unknown (stderr) memcheck/tests/varinfo6 (stderr) memcheck/tests/vbit-test/vbit-test (stderr) memcheck/tests/wrap8 (stdout) memcheck/tests/wrap8 (stderr) massif/tests/big-alloc (post) massif/tests/deep-D (post) none/tests/ppc32/test_dfp2 (stdout) none/tests/ppc32/test_dfp2 (stderr) none/tests/ppc64/test_dfp2 (stdout) none/tests/ppc64/test_dfp2 (stderr) helgrind/tests/tc18_semabuse (stderr) helgrind/tests/tc20_verifywrap (stderr) |
|
From: Rich C. <rc...@wi...> - 2012-12-27 04:03:44
|
valgrind revision: 13205
VEX revision: 2619
C compiler: gcc (SUSE Linux) 4.7.1 20120723 [gcc-4_7-branch revision 189773]
Assembler: GNU assembler (GNU Binutils; openSUSE 12.2) 2.22
C library: GNU C Library stable release version 2.15 (20120628)
uname -mrs: Linux 3.4.11-2.16-desktop x86_64
Vendor version: Welcome to openSUSE 12.2 "Mantis" - Kernel %r (%t).
Nightly build on ultra ( gcc 4.5.1 Linux 3.4.11-2.16-desktop x86_64 )
Started at 2012-12-26 21:30:01 CST
Ended at 2012-12-26 22:03:33 CST
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
== 635 tests, 3 stderr failures, 0 stdout failures, 0 stderrB failures, 0 stdoutB failures, 0 post failures ==
gdbserver_tests/mcinfcallRU (stderr)
gdbserver_tests/mcinfcallWSRU (stderr)
memcheck/tests/origin5-bz2 (stderr)
=================================================
./valgrind-new/gdbserver_tests/mcinfcallRU.stderr.diff
=================================================
--- mcinfcallRU.stderr.exp 2012-12-26 21:49:23.113307998 -0600
+++ mcinfcallRU.stderr.out 2012-12-26 21:54:35.062687540 -0600
@@ -1,4 +1,12 @@
loops/sleep_ms/burn/threads_spec: 1 0 2000000000 ------B-
main ready to sleep and/or burn
+vex amd64->IR: unhandled instruction bytes: 0x........ 0x........ 0x........ 0x........ 0x........ 0x........ 0x........ 0x........
+vex amd64->IR: REX=0 REX.W=0 REX.R=0 REX.X=0 REX.B=0
+vex amd64->IR: VEX=0 VEX.L=0 VEX.nVVVV=0x........ ESC=NONE
+vex amd64->IR: PFX.66=0 PFX.F2=0 PFX.F3=0
pid .... Thread .... inferior call pushed from gdb in mcinfcallRU.stdinB.gdb
+vex amd64->IR: unhandled instruction bytes: 0x........ 0x........ 0x........ 0x........ 0x........ 0x........ 0x........ 0x........
+vex amd64->IR: REX=0 REX.W=0 REX.R=0 REX.X=0 REX.B=0
+vex amd64->IR: VEX=0 VEX.L=0 VEX.nVVVV=0x........ ESC=NONE
+vex amd64->IR: PFX.66=0 PFX.F2=0 PFX.F3=0
Reset valgrind output to log (orderly_finish)
=================================================
./valgrind-new/gdbserver_tests/mcinfcallWSRU.stderr.diff
=================================================
--- mcinfcallWSRU.stderr.exp 2012-12-26 21:49:23.115307942 -0600
+++ mcinfcallWSRU.stderr.out 2012-12-26 21:54:37.540619084 -0600
@@ -3,5 +3,13 @@
London ready to sleep and/or burn
Petaouchnok ready to sleep and/or burn
main ready to sleep and/or burn
+vex amd64->IR: unhandled instruction bytes: 0x........ 0x........ 0x........ 0x........ 0x........ 0x........ 0x........ 0x........
+vex amd64->IR: REX=0 REX.W=0 REX.R=0 REX.X=0 REX.B=0
+vex amd64->IR: VEX=0 VEX.L=0 VEX.nVVVV=0x........ ESC=NONE
+vex amd64->IR: PFX.66=0 PFX.F2=0 PFX.F3=0
pid .... Thread .... thread 1 inferior call pushed from gdb in mcinfcallWSRU.stdinB.gdb
+vex amd64->IR: unhandled instruction bytes: 0x........ 0x........ 0x........ 0x........ 0x........ 0x........ 0x........ 0x........
+vex amd64->IR: REX=0 REX.W=0 REX.R=0 REX.X=0 REX.B=0
+vex amd64->IR: VEX=0 VEX.L=0 VEX.nVVVV=0x........ ESC=NONE
+vex amd64->IR: PFX.66=0 PFX.F2=0 PFX.F3=0
Reset valgrind output to log (orderly_finish)
=================================================
./valgrind-new/memcheck/tests/origin5-bz2.stderr.diff-glibc212-s390x
=================================================
--- origin5-bz2.stderr.exp-glibc212-s390x 2012-12-26 21:49:44.317721880 -0600
+++ origin5-bz2.stderr.out 2012-12-26 21:56:27.542577948 -0600
@@ -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 2012-12-26 21:49:42.975758980 -0600
+++ origin5-bz2.stderr.out 2012-12-26 21:56:27.542577948 -0600
@@ -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 2012-12-26 21:49:26.815205808 -0600
+++ origin5-bz2.stderr.out 2012-12-26 21:56:27.542577948 -0600
@@ -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 2012-12-26 21:49:34.117003399 -0600
+++ origin5-bz2.stderr.out 2012-12-26 21:56:27.542577948 -0600
@@ -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 2012-12-26 21:49:40.373830874 -0600
+++ origin5-bz2.stderr.out 2012-12-26 21:56:27.542577948 -0600
@@ -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/mcinfcallRU.stderr.diff
=================================================
--- mcinfcallRU.stderr.exp 2012-12-26 21:32:23.807509913 -0600
+++ mcinfcallRU.stderr.out 2012-12-26 21:39:39.819439541 -0600
@@ -1,4 +1,12 @@
loops/sleep_ms/burn/threads_spec: 1 0 2000000000 ------B-
main ready to sleep and/or burn
+vex amd64->IR: unhandled instruction bytes: 0x........ 0x........ 0x........ 0x........ 0x........ 0x........ 0x........ 0x........
+vex amd64->IR: REX=0 REX.W=0 REX.R=0 REX.X=0 REX.B=0
+vex amd64->IR: VEX=0 VEX.L=0 VEX.nVVVV=0x........ ESC=NONE
+vex amd64->IR: PFX.66=0 PFX.F2=0 PFX.F3=0
pid .... Thread .... inferior call pushed from gdb in mcinfcallRU.stdinB.gdb
+vex amd64->IR: unhandled instruction bytes: 0x........ 0x........ 0x........ 0x........ 0x........ 0x........ 0x........ 0x........
+vex amd64->IR: REX=0 REX.W=0 REX.R=0 REX.X=0 REX.B=0
+vex amd64->IR: VEX=0 VEX.L=0 VEX.nVVVV=0x........ ESC=NONE
+vex amd64->IR: PFX.66=0 PFX.F2=0 PFX.F3=0
Reset valgrind output to log (orderly_finish)
=================================================
./valgrind-old/gdbserver_tests/mcinfcallWSRU.stderr.diff
=================================================
--- mcinfcallWSRU.stderr.exp 2012-12-26 21:32:23.810509844 -0600
+++ mcinfcallWSRU.stderr.out 2012-12-26 21:39:42.343369701 -0600
@@ -3,5 +3,13 @@
London ready to sleep and/or burn
Petaouchnok ready to sleep and/or burn
main ready to sleep and/or burn
+vex amd64->IR: unhandled instruction bytes: 0x........ 0x........ 0x........ 0x........ 0x........ 0x........ 0x........ 0x........
+vex amd64->IR: REX=0 REX.W=0 REX.R=0 REX.X=0 REX.B=0
+vex amd64->IR: VEX=0 VEX.L=0 VEX.nVVVV=0x........ ESC=NONE
+vex amd64->IR: PFX.66=0 PFX.F2=0 PFX.F3=0
pid .... Thread .... thread 1 inferior call pushed from gdb in mcinfcallWSRU.stdinB.gdb
+vex amd64->IR: unhandled instruction bytes: 0x........ 0x........ 0x........ 0x........ 0x........ 0x........ 0x........ 0x........
+vex amd64->IR: REX=0 REX.W=0 REX.R=0 REX.X=0 REX.B=0
+vex amd64->IR: VEX=0 VEX.L=0 VEX.nVVVV=0x........ ESC=NONE
+vex amd64->IR: PFX.66=0 PFX.F2=0 PFX.F3=0
Reset valgrind output to log (orderly_finish)
=================================================
./valgrind-old/memcheck/tests/origin5-bz2.stderr.diff-glibc212-s390x
=================================================
--- origin5-bz2.stderr.exp-glibc212-s390x 2012-12-26 21:32:58.834540130 -0600
+++ origin5-bz2.stderr.out 2012-12-26 21:41:32.747315037 -0600
@@ -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 2012-12-26 21:32:48.065838073 -0600
+++ origin5-bz2.stderr.out 2012-12-26 21:41:32.747315037 -0600
@@ -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 2012-12-26 21:32:30.147334442 -0600
+++ origin5-bz2.stderr.out 2012-12-26 21:41:32.747315037 -0600
@@ -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 2012-12-26 21:32:39.914063839 -0600
+++ origin5-bz2.stderr.out 2012-12-26 21:41:32.747315037 -0600
@@ -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 2012-12-26 21:32:46.907870140 -0600
+++ origin5-bz2.stderr.out 2012-12-26 21:41:32.747315037 -0600
@@ -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: Christian B. <bor...@de...> - 2012-12-27 03:13:40
|
valgrind revision: 13204 VEX revision: 2619 C compiler: gcc (SUSE Linux) 4.3.4 [gcc-4_3-branch revision 152973] Assembler: GNU assembler (GNU Binutils; SUSE Linux Enterprise 11) 2.21.1 C library: GNU C Library stable release version 2.11.3 (20110527) uname -mrs: Linux 3.0.42-0.7-default s390x Vendor version: Welcome to SUSE Linux Enterprise Server 11 SP2 (s390x) - Kernel %r (%t). Nightly build on sless390 ( SUSE Linux Enterprise Server 11 SP1 gcc 4.3.4 on z196 (s390x) ) Started at 2012-12-27 03:45:02 CET Ended at 2012-12-27 04:13:26 CET 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 == 619 tests, 0 stderr failures, 0 stdout failures, 0 stderrB failures, 0 stdoutB failures, 0 post failures == |
|
From: Christian B. <bor...@de...> - 2012-12-27 03:11:38
|
valgrind revision: 13204 VEX revision: 2619 C compiler: gcc (GCC) 4.6.1 20110908 (Red Hat 4.6.1-9bb4) Assembler: GNU assembler version 2.21.51.0.6-6bb6.fc15 20110118 C library: GNU C Library stable release version 2.14.1 uname -mrs: Linux 3.6.8-57.x.20121204-s390xperformance s390x Vendor version: unknown Nightly build on fedora390 ( Fedora 15 with devel libc/toolchain on z196 (s390x) ) Started at 2012-12-27 03:45:01 CET Ended at 2012-12-27 04:11:45 CET 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 == 620 tests, 3 stderr failures, 1 stdout failure, 6 stderrB failures, 0 stdoutB failures, 0 post failures == gdbserver_tests/mcbreak (stderrB) gdbserver_tests/mcclean_after_fork (stderrB) gdbserver_tests/mcleak (stderrB) gdbserver_tests/mcmain_pic (stderrB) gdbserver_tests/mcvabits (stderrB) gdbserver_tests/mssnapshot (stderrB) memcheck/tests/linux/timerfd-syscall (stderr) none/tests/s390x/test_clone (stdout) helgrind/tests/tc18_semabuse (stderr) helgrind/tests/tc20_verifywrap (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 == 620 tests, 3 stderr failures, 0 stdout failures, 6 stderrB failures, 0 stdoutB failures, 0 post failures == gdbserver_tests/mcbreak (stderrB) gdbserver_tests/mcclean_after_fork (stderrB) gdbserver_tests/mcleak (stderrB) gdbserver_tests/mcmain_pic (stderrB) gdbserver_tests/mcvabits (stderrB) gdbserver_tests/mssnapshot (stderrB) memcheck/tests/linux/timerfd-syscall (stderr) helgrind/tests/tc18_semabuse (stderr) helgrind/tests/tc20_verifywrap (stderr) ================================================= == Difference between 24 hours ago and now == ================================================= *** old.short Thu Dec 27 03:58:20 2012 --- new.short Thu Dec 27 04:11:45 2012 *************** *** 8,10 **** ! == 620 tests, 3 stderr failures, 0 stdout failures, 6 stderrB failures, 0 stdoutB failures, 0 post failures == gdbserver_tests/mcbreak (stderrB) --- 8,10 ---- ! == 620 tests, 3 stderr failures, 1 stdout failure, 6 stderrB failures, 0 stdoutB failures, 0 post failures == gdbserver_tests/mcbreak (stderrB) *************** *** 16,17 **** --- 16,18 ---- memcheck/tests/linux/timerfd-syscall (stderr) + none/tests/s390x/test_clone (stdout) helgrind/tests/tc18_semabuse (stderr) |
|
From: <sv...@va...> - 2012-12-27 03:00:58
|
florian 2012-12-27 03:00:49 +0000 (Thu, 27 Dec 2012)
New Revision: 13205
Log:
vbit-tester: In test_ternary_op return number of tests executed.
I don't recall gcc complaining about this. But clang did.
Modified files:
trunk/memcheck/tests/vbit-test/ternary.c
Modified: trunk/memcheck/tests/vbit-test/ternary.c (+1 -0)
===================================================================
--- trunk/memcheck/tests/vbit-test/ternary.c 2012-12-26 21:12:07 +00:00 (rev 13204)
+++ trunk/memcheck/tests/vbit-test/ternary.c 2012-12-27 03:00:49 +00:00 (rev 13205)
@@ -62,4 +62,5 @@
tests_done++;
}
}
+ return tests_done;
}
|
|
From: <sv...@va...> - 2012-12-27 00:59:52
|
florian 2012-12-27 00:59:43 +0000 (Thu, 27 Dec 2012)
New Revision: 2619
Log:
s390: Do not waste a register when assigning a constant to a memory
location. If available, use MVHI and friends. If those are not available,
load the constant value into register r0 and store that. r0 is not visible
to register allocation and therefore using it does not increase register
pressure.
Remove S390_INSN_MZERO and replace it with S390_INSN_MIMM. Assigning zero
is just a special case..
Saves between 0.9% and 2.4% of insns as measured with the perf regression
bucket.
Modified files:
trunk/priv/host_s390_defs.c
trunk/priv/host_s390_defs.h
trunk/priv/host_s390_isel.c
Modified: trunk/priv/host_s390_isel.c (+29 -19)
===================================================================
--- trunk/priv/host_s390_isel.c 2012-12-27 00:44:30 +00:00 (rev 2618)
+++ trunk/priv/host_s390_isel.c 2012-12-27 00:59:43 +00:00 (rev 2619)
@@ -426,6 +426,24 @@
}
+/* Return the value of CON as a sign-exteded ULong value */
+static ULong
+get_const_value_as_ulong(const IRConst *con)
+{
+ Long value;
+
+ switch (con->tag) {
+ case Ico_U1: value = con->Ico.U1; return (ULong) ((value << 63) >> 63);
+ case Ico_U8: value = con->Ico.U8; return (ULong) ((value << 56) >> 56);
+ case Ico_U16: value = con->Ico.U16; return (ULong) ((value << 48) >> 48);
+ case Ico_U32: value = con->Ico.U32; return (ULong) ((value << 32) >> 32);
+ case Ico_U64: return con->Ico.U64;
+ default:
+ vpanic("get_const_value_as_ulong");
+ }
+}
+
+
/* Call a helper (clean or dirty)
Arguments must satisfy the following conditions:
@@ -2924,8 +2942,10 @@
case Ity_I64:
/* fixs390: We could check for INSN_MADD here. */
if (am->tag == S390_AMODE_B12 &&
- s390_expr_is_const_zero(stmt->Ist.Store.data)) {
- addInstr(env, s390_insn_mzero(sizeofIRType(tyd), am));
+ stmt->Ist.Store.data->tag == Iex_Const) {
+ ULong value =
+ get_const_value_as_ulong(stmt->Ist.Store.data->Iex.Const.con);
+ addInstr(env, s390_insn_mimm(sizeofIRType(tyd), am, value));
return;
}
src = s390_isel_int_expr(env, stmt->Ist.Store.data);
@@ -3000,13 +3020,6 @@
return;
}
- /* guest register = 0 */
- if (new_value == 0) {
- am = s390_amode_for_guest_state(offset);
- addInstr(env, s390_insn_mzero(sizeofIRType(tyd), am));
- return;
- }
-
if (old_value_is_valid == False) goto not_special;
/* If the new value is in the neighbourhood of the old value
@@ -3020,22 +3033,17 @@
return;
}
- /* If the high word is the same it is sufficient to load the low word.
- Use R0 as a scratch reg. */
+ /* If the high word is the same it is sufficient to load the low word. */
if ((old_value >> 32) == (new_value >> 32)) {
- HReg r0 = make_gpr(0);
-
am = s390_amode_for_guest_state(offset + 4);
- addInstr(env, s390_insn_load_immediate(4, r0,
- new_value & 0xFFFFFFFF));
- addInstr(env, s390_insn_store(4, am, r0));
+ addInstr(env, s390_insn_mimm(4, am, new_value & 0xFFFFFFFF));
return;
}
/* No special case applies... fall through */
not_special:
- am = s390_amode_for_guest_state(stmt->Ist.Put.offset);
+ am = s390_amode_for_guest_state(offset);
switch (tyd) {
case Ity_I8:
@@ -3043,8 +3051,10 @@
case Ity_I32:
case Ity_I64:
if (am->tag == S390_AMODE_B12 &&
- s390_expr_is_const_zero(stmt->Ist.Put.data)) {
- addInstr(env, s390_insn_mzero(sizeofIRType(tyd), am));
+ stmt->Ist.Put.data->tag == Iex_Const) {
+ ULong value =
+ get_const_value_as_ulong(stmt->Ist.Put.data->Iex.Const.con);
+ addInstr(env, s390_insn_mimm(sizeofIRType(tyd), am, value));
return;
}
src = s390_isel_int_expr(env, stmt->Ist.Put.data);
Modified: trunk/priv/host_s390_defs.h (+4 -3)
===================================================================
--- trunk/priv/host_s390_defs.h 2012-12-27 00:44:30 +00:00 (rev 2618)
+++ trunk/priv/host_s390_defs.h 2012-12-27 00:59:43 +00:00 (rev 2619)
@@ -144,7 +144,7 @@
S390_INSN_DFP_COMPARE,
S390_INSN_DFP_CONVERT,
S390_INSN_MFENCE,
- S390_INSN_MZERO, /* Assign zero to a memory location */
+ S390_INSN_MIMM, /* Assign an immediate constant to a memory location */
S390_INSN_MADD, /* Add a value to a memory location */
S390_INSN_SET_FPC_BFPRM, /* Set the bfp rounding mode in the FPC */
S390_INSN_SET_FPC_DFPRM, /* Set the dfp rounding mode in the FPC */
@@ -463,7 +463,8 @@
/* Miscellaneous */
struct {
s390_amode *dst;
- } mzero;
+ ULong value; /* sign extended */
+ } mimm;
struct {
s390_amode *dst;
UChar delta;
@@ -584,7 +585,7 @@
HReg dst, HReg op_hi, HReg op_lo,
s390_dfp_round_t);
s390_insn *s390_insn_mfence(void);
-s390_insn *s390_insn_mzero(UChar size, s390_amode *dst);
+s390_insn *s390_insn_mimm(UChar size, s390_amode *dst, ULong value);
s390_insn *s390_insn_madd(UChar size, s390_amode *dst, UChar delta,
ULong value);
s390_insn *s390_insn_set_fpc_bfprm(UChar size, HReg mode);
Modified: trunk/priv/host_s390_defs.c (+114 -15)
===================================================================
--- trunk/priv/host_s390_defs.c 2012-12-27 00:44:30 +00:00 (rev 2618)
+++ trunk/priv/host_s390_defs.c 2012-12-27 00:59:43 +00:00 (rev 2619)
@@ -741,8 +741,8 @@
addHRegUse(u, HRmRead, insn->variant.dfp_convert.op_lo); /* operand */
break;
- case S390_INSN_MZERO:
- s390_amode_get_reg_usage(u, insn->variant.mzero.dst);
+ case S390_INSN_MIMM:
+ s390_amode_get_reg_usage(u, insn->variant.mimm.dst);
break;
case S390_INSN_MADD:
@@ -1026,8 +1026,8 @@
lookupHRegRemap(m, insn->variant.dfp_convert.op_lo);
break;
- case S390_INSN_MZERO:
- s390_amode_map_regs(m, insn->variant.mzero.dst);
+ case S390_INSN_MIMM:
+ s390_amode_map_regs(m, insn->variant.mimm.dst);
break;
case S390_INSN_MADD:
@@ -1310,6 +1310,32 @@
static UChar *
+emit_SI(UChar *p, UInt op, UChar i2, UChar b1, UShort d1)
+{
+ ULong the_insn = op;
+
+ the_insn |= ((ULong)i2) << 16;
+ the_insn |= ((ULong)b1) << 12;
+ the_insn |= ((ULong)d1) << 0;
+
+ return emit_4bytes(p, the_insn);
+}
+
+
+static UChar *
+emit_SIL(UChar *p, ULong op, UChar b1, UShort d1, UShort i2)
+{
+ ULong the_insn = op;
+
+ the_insn |= ((ULong)b1) << 28;
+ the_insn |= ((ULong)d1) << 16;
+ the_insn |= ((ULong)i2) << 0;
+
+ return emit_6bytes(p, the_insn);
+}
+
+
+static UChar *
emit_SIY(UChar *p, ULong op, UChar i2, UChar b1, UShort dl1, UChar dh1)
{
ULong the_insn = op;
@@ -2735,6 +2761,46 @@
static UChar *
+s390_emit_MVI(UChar *p, UChar i2, UChar b1, UShort d1)
+{
+ if (UNLIKELY(vex_traceflags & VEX_TRACE_ASM))
+ s390_disasm(ENC3(MNM, UDXB, INT), "mvi", b1, 0, d1, i2);
+
+ return emit_SI(p, 0x92000000, i2, b1, d1);
+}
+
+
+static UChar *
+s390_emit_MVHHI(UChar *p, UChar b1, UShort d1, UShort i2)
+{
+ if (UNLIKELY(vex_traceflags & VEX_TRACE_ASM))
+ s390_disasm(ENC3(MNM, UDXB, INT), "mvhhi", b1, 0, d1, i2);
+
+ return emit_SIL(p, 0xe54400000000ULL, b1, d1, i2);
+}
+
+
+static UChar *
+s390_emit_MVHI(UChar *p, UChar b1, UShort d1, UShort i2)
+{
+ if (UNLIKELY(vex_traceflags & VEX_TRACE_ASM))
+ s390_disasm(ENC3(MNM, UDXB, INT), "mvhi", b1, 0, d1, i2);
+
+ return emit_SIL(p, 0xe54c00000000ULL, b1, d1, i2);
+}
+
+
+static UChar *
+s390_emit_MVGHI(UChar *p, UChar b1, UShort d1, UShort i2)
+{
+ if (UNLIKELY(vex_traceflags & VEX_TRACE_ASM))
+ s390_disasm(ENC3(MNM, UDXB, INT), "mvghi", b1, 0, d1, i2);
+
+ return emit_SIL(p, 0xe54800000000ULL, b1, d1, i2);
+}
+
+
+static UChar *
s390_emit_OR(UChar *p, UChar r1, UChar r2)
{
if (UNLIKELY(vex_traceflags & VEX_TRACE_ASM))
@@ -5472,17 +5538,18 @@
s390_insn *
-s390_insn_mzero(UChar size, s390_amode *dst)
+s390_insn_mimm(UChar size, s390_amode *dst, ULong value)
{
s390_insn *insn = LibVEX_Alloc(sizeof(s390_insn));
- /* This insn will be mapped to an XC so we can only allow base register
+ /* This insn will be mapped to insns that require base register
plus 12-bit displacement */
vassert(dst->tag == S390_AMODE_B12);
- insn->tag = S390_INSN_MZERO;
+ insn->tag = S390_INSN_MIMM;
insn->size = size;
- insn->variant.mzero.dst = dst;
+ insn->variant.mimm.dst = dst;
+ insn->variant.mimm.value = value;
return insn;
}
@@ -6074,8 +6141,9 @@
s390_sprintf(buf, "%M", "v-mfence");
return buf; /* avoid printing "size = ..." which is meaningless */
- case S390_INSN_MZERO:
- s390_sprintf(buf, "%M %A", "v-mzero", insn->variant.mzero.dst);
+ case S390_INSN_MIMM:
+ s390_sprintf(buf, "%M %A,%I", "v-mimm", insn->variant.mimm.dst,
+ insn->variant.mimm.value);
break;
case S390_INSN_MADD:
@@ -8305,11 +8373,42 @@
static UChar *
-s390_insn_mzero_emit(UChar *buf, const s390_insn *insn)
+s390_insn_mimm_emit(UChar *buf, const s390_insn *insn)
{
- s390_amode *am = insn->variant.mzero.dst;
+ s390_amode *am = insn->variant.mimm.dst;
+ ULong value = insn->variant.mimm.value;
- return s390_emit_XC(buf, insn->size - 1, am->b, am->d, am->b, am->d);
+ if (value == 0) {
+ return s390_emit_XC(buf, insn->size - 1, am->b, am->d, am->b, am->d);
+ }
+
+ if (insn->size == 1) {
+ return s390_emit_MVI(buf, value & 0xFF, am->b, am->d);
+ }
+
+ if (s390_host_has_gie && ulong_fits_signed_16bit(value)) {
+ value &= 0xFFFF;
+ switch (insn->size) {
+ case 2: return s390_emit_MVHHI(buf, am->b, am->d, value);
+ case 4: return s390_emit_MVHI(buf, am->b, am->d, value);
+ case 8: return s390_emit_MVGHI(buf, am->b, am->d, value);
+ }
+ } else {
+ // Load value to R0, then store.
+ switch (insn->size) {
+ case 2:
+ buf = s390_emit_LHI(buf, R0, value & 0xFFFF);
+ return s390_emit_STH(buf, R0, 0, am->b, am->d);
+ case 4:
+ buf = s390_emit_load_32imm(buf, R0, value);
+ return s390_emit_ST(buf, R0, 0, am->b, am->d);
+ case 8:
+ buf = s390_emit_load_64imm(buf, R0, value);
+ return s390_emit_STG(buf, R0, 0, am->b, DISP20(am->d));
+ }
+ }
+
+ vpanic("s390_insn_mimm_emit");
}
@@ -8912,8 +9011,8 @@
end = s390_insn_mfence_emit(buf, insn);
break;
- case S390_INSN_MZERO:
- end = s390_insn_mzero_emit(buf, insn);
+ case S390_INSN_MIMM:
+ end = s390_insn_mimm_emit(buf, insn);
break;
case S390_INSN_MADD:
|
|
From: <sv...@va...> - 2012-12-27 00:44:40
|
florian 2012-12-27 00:44:30 +0000 (Thu, 27 Dec 2012)
New Revision: 2618
Log:
s390: Remove a forgotten debug print statement.
Modified files:
trunk/priv/s390_disasm.c
Modified: trunk/priv/s390_disasm.c (+0 -1)
===================================================================
--- trunk/priv/s390_disasm.c 2012-12-26 17:47:19 +00:00 (rev 2617)
+++ trunk/priv/s390_disasm.c 2012-12-27 00:44:30 +00:00 (rev 2618)
@@ -42,7 +42,6 @@
static const HChar *
mnemonic(const HChar *mnm)
{
- vex_printf("MNEMONIC = |%s|\n", mnm);
vassert(vex_strlen(mnm) <= S390_MAX_MNEMONIC_LEN);
static HChar buf[S390_MAX_MNEMONIC_LEN + 1];
|