You can subscribe to this list here.
| 2002 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
(1) |
Oct
(122) |
Nov
(152) |
Dec
(69) |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 2003 |
Jan
(6) |
Feb
(25) |
Mar
(73) |
Apr
(82) |
May
(24) |
Jun
(25) |
Jul
(10) |
Aug
(11) |
Sep
(10) |
Oct
(54) |
Nov
(203) |
Dec
(182) |
| 2004 |
Jan
(307) |
Feb
(305) |
Mar
(430) |
Apr
(312) |
May
(187) |
Jun
(342) |
Jul
(487) |
Aug
(637) |
Sep
(336) |
Oct
(373) |
Nov
(441) |
Dec
(210) |
| 2005 |
Jan
(385) |
Feb
(480) |
Mar
(636) |
Apr
(544) |
May
(679) |
Jun
(625) |
Jul
(810) |
Aug
(838) |
Sep
(634) |
Oct
(521) |
Nov
(965) |
Dec
(543) |
| 2006 |
Jan
(494) |
Feb
(431) |
Mar
(546) |
Apr
(411) |
May
(406) |
Jun
(322) |
Jul
(256) |
Aug
(401) |
Sep
(345) |
Oct
(542) |
Nov
(308) |
Dec
(481) |
| 2007 |
Jan
(427) |
Feb
(326) |
Mar
(367) |
Apr
(255) |
May
(244) |
Jun
(204) |
Jul
(223) |
Aug
(231) |
Sep
(354) |
Oct
(374) |
Nov
(497) |
Dec
(362) |
| 2008 |
Jan
(322) |
Feb
(482) |
Mar
(658) |
Apr
(422) |
May
(476) |
Jun
(396) |
Jul
(455) |
Aug
(267) |
Sep
(280) |
Oct
(253) |
Nov
(232) |
Dec
(304) |
| 2009 |
Jan
(486) |
Feb
(470) |
Mar
(458) |
Apr
(423) |
May
(696) |
Jun
(461) |
Jul
(551) |
Aug
(575) |
Sep
(134) |
Oct
(110) |
Nov
(157) |
Dec
(102) |
| 2010 |
Jan
(226) |
Feb
(86) |
Mar
(147) |
Apr
(117) |
May
(107) |
Jun
(203) |
Jul
(193) |
Aug
(238) |
Sep
(300) |
Oct
(246) |
Nov
(23) |
Dec
(75) |
| 2011 |
Jan
(133) |
Feb
(195) |
Mar
(315) |
Apr
(200) |
May
(267) |
Jun
(293) |
Jul
(353) |
Aug
(237) |
Sep
(278) |
Oct
(611) |
Nov
(274) |
Dec
(260) |
| 2012 |
Jan
(303) |
Feb
(391) |
Mar
(417) |
Apr
(441) |
May
(488) |
Jun
(655) |
Jul
(590) |
Aug
(610) |
Sep
(526) |
Oct
(478) |
Nov
(359) |
Dec
(372) |
| 2013 |
Jan
(467) |
Feb
(226) |
Mar
(391) |
Apr
(281) |
May
(299) |
Jun
(252) |
Jul
(311) |
Aug
(352) |
Sep
(481) |
Oct
(571) |
Nov
(222) |
Dec
(231) |
| 2014 |
Jan
(185) |
Feb
(329) |
Mar
(245) |
Apr
(238) |
May
(281) |
Jun
(399) |
Jul
(382) |
Aug
(500) |
Sep
(579) |
Oct
(435) |
Nov
(487) |
Dec
(256) |
| 2015 |
Jan
(338) |
Feb
(357) |
Mar
(330) |
Apr
(294) |
May
(191) |
Jun
(108) |
Jul
(142) |
Aug
(261) |
Sep
(190) |
Oct
(54) |
Nov
(83) |
Dec
(22) |
| 2016 |
Jan
(49) |
Feb
(89) |
Mar
(33) |
Apr
(50) |
May
(27) |
Jun
(34) |
Jul
(53) |
Aug
(53) |
Sep
(98) |
Oct
(206) |
Nov
(93) |
Dec
(53) |
| 2017 |
Jan
(65) |
Feb
(82) |
Mar
(102) |
Apr
(86) |
May
(187) |
Jun
(67) |
Jul
(23) |
Aug
(93) |
Sep
(65) |
Oct
(45) |
Nov
(35) |
Dec
(17) |
| 2018 |
Jan
(26) |
Feb
(35) |
Mar
(38) |
Apr
(32) |
May
(8) |
Jun
(43) |
Jul
(27) |
Aug
(30) |
Sep
(43) |
Oct
(42) |
Nov
(38) |
Dec
(67) |
| 2019 |
Jan
(32) |
Feb
(37) |
Mar
(53) |
Apr
(64) |
May
(49) |
Jun
(18) |
Jul
(14) |
Aug
(53) |
Sep
(25) |
Oct
(30) |
Nov
(49) |
Dec
(31) |
| 2020 |
Jan
(87) |
Feb
(45) |
Mar
(37) |
Apr
(51) |
May
(99) |
Jun
(36) |
Jul
(11) |
Aug
(14) |
Sep
(20) |
Oct
(24) |
Nov
(40) |
Dec
(23) |
| 2021 |
Jan
(14) |
Feb
(53) |
Mar
(85) |
Apr
(15) |
May
(19) |
Jun
(3) |
Jul
(14) |
Aug
(1) |
Sep
(57) |
Oct
(73) |
Nov
(56) |
Dec
(22) |
| 2022 |
Jan
(3) |
Feb
(22) |
Mar
(6) |
Apr
(55) |
May
(46) |
Jun
(39) |
Jul
(15) |
Aug
(9) |
Sep
(11) |
Oct
(34) |
Nov
(20) |
Dec
(36) |
| 2023 |
Jan
(79) |
Feb
(41) |
Mar
(99) |
Apr
(169) |
May
(48) |
Jun
(16) |
Jul
(16) |
Aug
(57) |
Sep
(19) |
Oct
|
Nov
|
Dec
|
| S | M | T | W | T | F | S |
|---|---|---|---|---|---|---|
|
|
|
|
1
(4) |
2
(7) |
3
(29) |
4
(2) |
|
5
(2) |
6
(14) |
7
(4) |
8
(17) |
9
(19) |
10
(17) |
11
(18) |
|
12
(21) |
13
(22) |
14
(16) |
15
(14) |
16
(2) |
17
|
18
(3) |
|
19
|
20
(1) |
21
(14) |
22
(9) |
23
(13) |
24
|
25
|
|
26
(1) |
27
(12) |
28
(2) |
29
(17) |
30
(14) |
31
(5) |
|
|
From: Paralkar Anmol-B. <B0...@fr...> - 2013-05-31 16:51:06
|
Hello, Freescale recently added support for the e500v2 SPE architecture based off of Valgrind-3.8.1; this will be available in the upcoming SDK-1.4 release and is intended to be contributed back to the public-domain mainline Valgrind sources. Thank you. Best Regards, Anmol. |
|
From: <sv...@va...> - 2013-05-31 15:44:14
|
florian 2013-05-31 16:44:06 +0100 (Fri, 31 May 2013)
New Revision: 13413
Log:
s390x: The CC_DEP1 field is accessed as a whole or bits [0:31]
in case the field holds a 32-bit floating point value.
Patch by Maran Pakkirisamy (ma...@li...).
Part of fixing BZ 307113.
Modified files:
trunk/memcheck/mc_machine.c
Modified: trunk/memcheck/mc_machine.c (+3 -1)
===================================================================
--- trunk/memcheck/mc_machine.c 2013-05-29 11:50:31 +01:00 (rev 13412)
+++ trunk/memcheck/mc_machine.c 2013-05-31 16:44:06 +01:00 (rev 13413)
@@ -817,7 +817,9 @@
if (o == GOF(EMNOTE) && sz == 4) return -1;
if (o == GOF(CC_OP) && sz == 8) return -1;
- if (o == GOF(CC_DEP1) && sz == 8) return o;
+ /* We access CC_DEP1 either fully or bits [0:31] */
+ if (o == GOF(CC_DEP1) && (sz == 8 || sz ==4))
+ return o;
if (o == GOF(CC_DEP2) && sz == 8) return o;
if (o == GOF(CC_NDEP) && sz == 8) return -1;
if (o == GOF(TISTART) && sz == 8) return -1;
|
|
From: <sv...@va...> - 2013-05-31 15:42:04
|
florian 2013-05-31 16:41:55 +0100 (Fri, 31 May 2013)
New Revision: 2724
Log:
s390x: Make the CC_DEP1 field appear completely initialised when
writing a 32-bit floating point value into it.
Patch by Maran Pakkirisamy (ma...@li...).
Part of fixing BZ 307113.
Modified files:
trunk/priv/guest_s390_toIR.c
Modified: trunk/priv/guest_s390_toIR.c (+16 -0)
===================================================================
--- trunk/priv/guest_s390_toIR.c 2013-05-31 16:09:56 +01:00 (rev 2723)
+++ trunk/priv/guest_s390_toIR.c 2013-05-31 16:41:55 +01:00 (rev 2724)
@@ -632,6 +632,14 @@
{
IRExpr *op, *dep1, *dep2, *ndep;
+ /* Make the CC_DEP1 slot appear completely defined.
+ Otherwise, assigning a 32-bit value will cause memcheck
+ to trigger an undefinedness error.
+ */
+ if (sizeofIRType(typeOfIRTemp(irsb->tyenv, d1)) == 4) {
+ UInt dep1_off = S390X_GUEST_OFFSET(guest_CC_DEP1);
+ stmt(IRStmt_Put(dep1_off, mkU64(0)));
+ }
op = mkU64(opc);
dep1 = mkexpr(d1);
dep2 = mkU64(0);
@@ -648,6 +656,14 @@
{
IRExpr *op, *dep1, *dep2, *ndep;
+ /* Make the CC_DEP1 slot appear completely defined.
+ Otherwise, assigning a 32-bit value will cause memcheck
+ to trigger an undefinedness error.
+ */
+ if (sizeofIRType(typeOfIRTemp(irsb->tyenv, d1)) == 4) {
+ UInt dep1_off = S390X_GUEST_OFFSET(guest_CC_DEP1);
+ stmt(IRStmt_Put(dep1_off, mkU64(0)));
+ }
op = mkU64(opc);
dep1 = mkexpr(d1);
dep2 = s390_cc_widen(d2, False);
|
|
From: <sv...@va...> - 2013-05-31 15:10:06
|
petarj 2013-05-31 16:09:56 +0100 (Fri, 31 May 2013)
New Revision: 2723
Log:
mips32/mips64: implement sdl, sdr, swl and swr without reading memory
New implementation of SDL, SDW, SWL and SWR instructions in a way in which
no memory read is required. This came as an issue for programs that map
memory as write-exec only.
Modified files:
trunk/priv/guest_mips_toIR.c
Modified: trunk/priv/guest_mips_toIR.c (+438 -128)
===================================================================
--- trunk/priv/guest_mips_toIR.c 2013-05-13 11:28:59 +01:00 (rev 2722)
+++ trunk/priv/guest_mips_toIR.c 2013-05-31 16:09:56 +01:00 (rev 2723)
@@ -952,6 +952,20 @@
return IRExpr_Get(offsetof(VexGuestMIPS32State, guest_FCSR), Ity_I32);
}
+/* Get byte from register reg, byte pos from 0 to 3 (or 7 for MIPS64) . */
+static IRExpr *getByteFromReg(UInt reg, UInt byte_pos)
+{
+ UInt pos = byte_pos * 8;
+ if (mode64)
+ return unop(Iop_64to8, binop(Iop_And64,
+ binop(Iop_Shr64, getIReg(reg), mkU8(pos)),
+ mkU64(0xFF)));
+ else
+ return unop(Iop_32to8, binop(Iop_And32,
+ binop(Iop_Shr32, getIReg(reg), mkU8(pos)),
+ mkU32(0xFF)));
+}
+
static void putFCSR(IRExpr * e)
{
if (mode64)
@@ -1918,7 +1932,7 @@
VexAbiInfo* abiinfo,
Bool sigill_diag )
{
- IRTemp t0, t1 = 0, t2, t3, t4, t5, t6, t7, t8;
+ IRTemp t0, t1 = 0, t2, t3, t4, t5, t6, t7;
UInt opcode, cins, rs, rt, rd, sa, ft, fs, fd, fmt, tf, nd, function,
trap_code, imm, instr_index, p, msb, lsb, size, rot, sel;
@@ -3767,40 +3781,124 @@
case 0x2C: { /* SDL rt, offset(base) MIPS64 */
DIP("sdl r%u, %d(r%u)", rt, (Int) imm, rs);
+ vassert(mode64);
+ IRTemp A_byte = newTemp(Ity_I8);
+ IRTemp B_byte = newTemp(Ity_I8);
+ IRTemp C_byte = newTemp(Ity_I8);
+ IRTemp D_byte = newTemp(Ity_I8);
+ IRTemp E_byte = newTemp(Ity_I8);
+ IRTemp F_byte = newTemp(Ity_I8);
+ IRTemp G_byte = newTemp(Ity_I8);
+ IRTemp H_byte = newTemp(Ity_I8);
+ IRTemp B_pos = newTemp(Ity_I64);
+ IRTemp C_pos = newTemp(Ity_I64);
+ IRTemp D_pos = newTemp(Ity_I64);
+ IRTemp E_pos = newTemp(Ity_I64);
+ IRTemp F_pos = newTemp(Ity_I64);
+ IRTemp G_pos = newTemp(Ity_I64);
+
+ /* H byte */
+ assign(H_byte, getByteFromReg(rt, 0));
+ /* G byte */
+ assign(G_byte, getByteFromReg(rt, 1));
+ /* F byte */
+ assign(F_byte, getByteFromReg(rt, 2));
+ /* E byte */
+ assign(E_byte, getByteFromReg(rt, 3));
+ /* D byte */
+ assign(D_byte, getByteFromReg(rt, 4));
+ /* C byte */
+ assign(C_byte, getByteFromReg(rt, 5));
+ /* B byte */
+ assign(B_byte, getByteFromReg(rt, 6));
+ /* A byte */
+ assign(A_byte, getByteFromReg(rt, 7));
+
/* t1 = addr */
-#if defined (_MIPSEL)
t1 = newTemp(Ity_I64);
assign(t1, binop(Iop_Add64, getIReg(rs), mkU64(extend_s_16to64(imm))));
-#elif defined (_MIPSEB)
- t1 = newTemp(Ity_I64);
- assign(t1, binop(Iop_Xor64, mkU64(0x7), binop(Iop_Add64, getIReg(rs),
- mkU64(extend_s_16to64(imm)))));
-#endif
/* t2 = word addr */
- /* t4 = addr mod 4 */
- LWX_SWX_PATTERN64_1;
+ t2 = newTemp(Ity_I64);
+ assign(t2, binop(Iop_And64, mkexpr(t1), mkU64(0xFFFFFFFFFFFFFFF8ULL)));
- /* t3 = rt content - shifted */
+ /* t3 = addr mod 7 */
t3 = newTemp(Ity_I64);
- assign(t3, binop(Iop_Shr64, getIReg(rt), narrowTo(Ity_I8, binop(Iop_Shl64,
- binop(Iop_Sub64, mkU64(0x07), mkexpr(t4)), mkU8(3)))));
+ assign(t3, binop(Iop_And64, mkexpr(t1), mkU64(0x7)));
- /* word content - adjusted */
- t5 = newTemp(Ity_I64);
- t6 = newTemp(Ity_I64);
- t7 = newTemp(Ity_I64);
- t8 = newTemp(Ity_I64);
+#if defined (_MIPSEL)
+ /* Calculate X_byte position. */
+ assign(B_pos, IRExpr_ITE(binop(Iop_CmpLT64U, mkexpr(t3), mkU64(0x1)),
+ mkU64(0x0),
+ mkU64(0x1)));
- /* neg(shr(0xFFFFFFFF, mul(sub(7,n), 8))) */
- assign(t5, binop(Iop_Mul64, binop(Iop_Sub64, mkU64(0x7), mkexpr(t4)),
- mkU64(0x8)));
+ assign(C_pos, IRExpr_ITE(binop(Iop_CmpLT64U, mkexpr(t3), mkU64(0x2)),
+ mkU64(0x0),
+ mkU64(0x2)));
- assign(t6, binop(Iop_Shr64, mkU64(0xFFFFFFFFFFFFFFFFULL),
- narrowTo(Ity_I8, mkexpr(t5))));
- assign(t7, binop(Iop_Xor64, mkU64(0xFFFFFFFFFFFFFFFFULL), mkexpr(t6)));
- assign(t8, binop(Iop_And64, load(Ity_I64, mkexpr(t2)), mkexpr(t7)));
- store(mkexpr(t2), binop(Iop_Or64, mkexpr(t8), mkexpr(t3)));
+ assign(D_pos, IRExpr_ITE(binop(Iop_CmpLT64U, mkexpr(t3), mkU64(0x3)),
+ mkU64(0x0),
+ mkU64(0x3)));
+
+ assign(E_pos, IRExpr_ITE(binop(Iop_CmpLT64U, mkexpr(t3), mkU64(0x4)),
+ mkU64(0x0),
+ mkU64(0x4)));
+
+ assign(F_pos, IRExpr_ITE(binop(Iop_CmpLT64U, mkexpr(t3), mkU64(0x5)),
+ mkU64(0x0),
+ mkU64(0x5)));
+
+ assign(G_pos, IRExpr_ITE(binop(Iop_CmpEQ64, mkexpr(t3), mkU64(0x7)),
+ mkU64(0x1),
+ mkU64(0x0)));
+
+ /* Store X_byte on the right place. */
+ store(mkexpr(t2), mkexpr(H_byte));
+ store(binop(Iop_Add64, mkexpr(t2), mkexpr(G_pos)), mkexpr(G_byte));
+ store(binop(Iop_Sub64, mkexpr(t1), mkexpr(F_pos)), mkexpr(F_byte));
+ store(binop(Iop_Sub64, mkexpr(t1), mkexpr(E_pos)), mkexpr(E_byte));
+ store(binop(Iop_Sub64, mkexpr(t1), mkexpr(D_pos)), mkexpr(D_byte));
+ store(binop(Iop_Sub64, mkexpr(t1), mkexpr(C_pos)), mkexpr(C_byte));
+ store(binop(Iop_Sub64, mkexpr(t1), mkexpr(B_pos)), mkexpr(B_byte));
+ store(mkexpr(t1), mkexpr(A_byte));
+
+#elif defined (_MIPSEB)
+ /* Calculate X_byte position. */
+ assign(B_pos, IRExpr_ITE(binop(Iop_CmpEQ64, mkexpr(t3), mkU64(0x7)),
+ mkU64(0x0),
+ mkU64(0x1)));
+
+ assign(C_pos, IRExpr_ITE(binop(Iop_CmpLT64U, mkexpr(t3), mkU64(0x6)),
+ mkU64(0x2),
+ mkU64(0x0)));
+
+ assign(D_pos, IRExpr_ITE(binop(Iop_CmpLT64U, mkexpr(t3), mkU64(0x5)),
+ mkU64(0x3),
+ mkU64(0x0)));
+
+ assign(E_pos, IRExpr_ITE(binop(Iop_CmpLT64U, mkexpr(t3), mkU64(0x4)),
+ mkU64(0x4),
+ mkU64(0x0)));
+
+ assign(F_pos, IRExpr_ITE(binop(Iop_CmpLT64U, mkexpr(t3), mkU64(0x3)),
+ mkU64(0x5),
+ mkU64(0x0)));
+
+ assign(G_pos, IRExpr_ITE(binop(Iop_CmpEQ64, mkexpr(t3), mkU64(0x0)),
+ mkU64(0x6),
+ mkU64(0x7)));
+
+ /* Store X_byte on the right place. */
+ store(binop(Iop_Add64, mkexpr(t2), mkU64(0x7)), mkexpr(H_byte));
+ store(binop(Iop_Add64, mkexpr(t2), mkexpr(G_pos)), mkexpr(G_byte));
+ store(binop(Iop_Add64, mkexpr(t1), mkexpr(F_pos)), mkexpr(F_byte));
+ store(binop(Iop_Add64, mkexpr(t1), mkexpr(E_pos)), mkexpr(E_byte));
+ store(binop(Iop_Add64, mkexpr(t1), mkexpr(D_pos)), mkexpr(D_byte));
+ store(binop(Iop_Add64, mkexpr(t1), mkexpr(C_pos)), mkexpr(C_byte));
+ store(binop(Iop_Add64, mkexpr(t1), mkexpr(B_pos)), mkexpr(B_byte));
+ store(mkexpr(t1), mkexpr(A_byte));
+#endif
+
break;
}
@@ -3808,32 +3906,123 @@
/* SDR rt, offset(base) - MIPS64 */
vassert(mode64);
DIP("sdr r%u, %d(r%u)", rt, imm, rs);
+ IRTemp A_byte = newTemp(Ity_I8);
+ IRTemp B_byte = newTemp(Ity_I8);
+ IRTemp C_byte = newTemp(Ity_I8);
+ IRTemp D_byte = newTemp(Ity_I8);
+ IRTemp E_byte = newTemp(Ity_I8);
+ IRTemp F_byte = newTemp(Ity_I8);
+ IRTemp G_byte = newTemp(Ity_I8);
+ IRTemp H_byte = newTemp(Ity_I8);
+ IRTemp B_pos = newTemp(Ity_I64);
+ IRTemp C_pos = newTemp(Ity_I64);
+ IRTemp D_pos = newTemp(Ity_I64);
+ IRTemp E_pos = newTemp(Ity_I64);
+ IRTemp F_pos = newTemp(Ity_I64);
+ IRTemp G_pos = newTemp(Ity_I64);
+
+ /* H byte */
+ assign(H_byte, getByteFromReg(rt, 0));
+ /* G byte */
+ assign(G_byte, getByteFromReg(rt, 1));
+ /* F byte */
+ assign(F_byte, getByteFromReg(rt, 2));
+ /* E byte */
+ assign(E_byte, getByteFromReg(rt, 3));
+ /* D byte */
+ assign(D_byte, getByteFromReg(rt, 4));
+ /* C byte */
+ assign(C_byte, getByteFromReg(rt, 5));
+ /* B byte */
+ assign(B_byte, getByteFromReg(rt, 6));
+ /* A byte */
+ assign(A_byte, getByteFromReg(rt, 7));
+
/* t1 = addr */
-#if defined (_MIPSEL)
t1 = newTemp(Ity_I64);
assign(t1, binop(Iop_Add64, getIReg(rs), mkU64(extend_s_16to64(imm))));
-#elif defined (_MIPSEB)
- t1 = newTemp(Ity_I64);
- assign(t1, binop(Iop_Xor64, mkU64(0x7), binop(Iop_Add64, getIReg(rs),
- mkU64(extend_s_16to64(imm)))));
-#endif
/* t2 = word addr */
- /* t4 = addr mod 8 */
- LWX_SWX_PATTERN64_1;
+ t2 = newTemp(Ity_I64);
+ assign(t2, binop(Iop_And64, mkexpr(t1), mkU64(0xFFFFFFFFFFFFFFF8ULL)));
- /* t3 = rt content - shifted */
+ /* t3 = addr mod 7 */
t3 = newTemp(Ity_I64);
- assign(t3, binop(Iop_Shl64, getIReg(rt), narrowTo(Ity_I8,
- binop(Iop_Shl64, mkexpr(t4), mkU8(3)))));
+ assign(t3, binop(Iop_And64, mkexpr(t1), mkU64(0x7)));
- /* word content - adjusted */
- t5 = newTemp(Ity_I64);
- assign(t5, binop(Iop_And64, load(Ity_I64, mkexpr(t2)), unop(Iop_Not64,
- binop(Iop_Shl64, mkU64(0xFFFFFFFFFFFFFFFFULL),
- narrowTo(Ity_I8, binop(Iop_Shl64, mkexpr(t4), mkU8(0x3)))))));
+#if defined (_MIPSEL)
+ /* Calculate X_byte position. */
+ assign(B_pos, IRExpr_ITE(binop(Iop_CmpLT64U, mkU64(0x1), mkexpr(t3)),
+ mkU64(0x0),
+ mkU64(0x6)));
- store(mkexpr(t2), binop(Iop_Xor64, mkexpr(t5), mkexpr(t3)));
+ assign(C_pos, IRExpr_ITE(binop(Iop_CmpLT64U, mkU64(0x2), mkexpr(t3)),
+ mkU64(0x0),
+ mkU64(0x5)));
+
+ assign(D_pos, IRExpr_ITE(binop(Iop_CmpLT64U, mkU64(0x3), mkexpr(t3)),
+ mkU64(0x0),
+ mkU64(0x4)));
+
+ assign(E_pos, IRExpr_ITE(binop(Iop_CmpLT64U, mkU64(0x4), mkexpr(t3)),
+ mkU64(0x0),
+ mkU64(0x3)));
+
+ assign(F_pos, IRExpr_ITE(binop(Iop_CmpLT64U, mkU64(0x5), mkexpr(t3)),
+ mkU64(0x0),
+ mkU64(0x2)));
+
+ assign(G_pos, IRExpr_ITE(binop(Iop_CmpEQ64, mkexpr(t3), mkU64(0x7)),
+ mkU64(0x0),
+ mkU64(0x1)));
+
+ /* Store X_byte on the right place. */
+ store(binop(Iop_Add64, mkexpr(t2), mkU64(0x7)), mkexpr(A_byte));
+ store(binop(Iop_Add64, mkexpr(t1), mkexpr(B_pos)), mkexpr(B_byte));
+ store(binop(Iop_Add64, mkexpr(t1), mkexpr(C_pos)), mkexpr(C_byte));
+ store(binop(Iop_Add64, mkexpr(t1), mkexpr(D_pos)), mkexpr(D_byte));
+ store(binop(Iop_Add64, mkexpr(t1), mkexpr(E_pos)), mkexpr(E_byte));
+ store(binop(Iop_Add64, mkexpr(t1), mkexpr(F_pos)), mkexpr(F_byte));
+ store(binop(Iop_Add64, mkexpr(t1), mkexpr(G_pos)), mkexpr(G_byte));
+ store(mkexpr(t1), mkexpr(H_byte));
+
+#elif defined (_MIPSEB)
+ /* Calculate X_byte position. */
+ assign(B_pos, IRExpr_ITE(binop(Iop_CmpLT64U, mkU64(0x5), mkexpr(t3)),
+ mkU64(0x6),
+ mkU64(0x0)));
+
+ assign(C_pos, IRExpr_ITE(binop(Iop_CmpLT64U, mkU64(0x4), mkexpr(t3)),
+ mkU64(0x5),
+ mkU64(0x0)));
+
+ assign(D_pos, IRExpr_ITE(binop(Iop_CmpLT64U, mkU64(0x3), mkexpr(t3)),
+ mkU64(0x4),
+ mkU64(0x0)));
+
+ assign(E_pos, IRExpr_ITE(binop(Iop_CmpLT64U, mkU64(0x2), mkexpr(t3)),
+ mkU64(0x3),
+ mkU64(0x0)));
+
+ assign(F_pos, IRExpr_ITE(binop(Iop_CmpLT64U, mkU64(0x1), mkexpr(t3)),
+ mkU64(0x2),
+ mkU64(0x0)));
+
+ assign(G_pos, IRExpr_ITE(binop(Iop_CmpEQ64, mkexpr(t3), mkU64(0x0)),
+ mkU64(0x0),
+ mkU64(0x1)));
+
+ /* Store X_byte on the right place. */
+ store(mkexpr(t2), mkexpr(A_byte));
+ store(binop(Iop_Sub64, mkexpr(t1), mkexpr(B_pos)), mkexpr(B_byte));
+ store(binop(Iop_Sub64, mkexpr(t1), mkexpr(C_pos)), mkexpr(C_byte));
+ store(binop(Iop_Sub64, mkexpr(t1), mkexpr(D_pos)), mkexpr(D_byte));
+ store(binop(Iop_Sub64, mkexpr(t1), mkexpr(E_pos)), mkexpr(E_byte));
+ store(binop(Iop_Sub64, mkexpr(t1), mkexpr(F_pos)), mkexpr(F_byte));
+ store(binop(Iop_Sub64, mkexpr(t1), mkexpr(G_pos)), mkexpr(G_byte));
+ store(mkexpr(t1), mkexpr(H_byte));
+#endif
+ break;
}
case 0x28: /* SB */
@@ -3851,132 +4040,254 @@
case 0x2A: /* SWL */
DIP("swl r%d, %d(r%d)", rt, imm, rs);
if (mode64) {
-#if defined (_MIPSEL)
+ IRTemp E_byte = newTemp(Ity_I8);
+ IRTemp F_byte = newTemp(Ity_I8);
+ IRTemp G_byte = newTemp(Ity_I8);
+ IRTemp H_byte = newTemp(Ity_I8);
+ IRTemp F_pos = newTemp(Ity_I64);
+ IRTemp G_pos = newTemp(Ity_I64);
+
+ /* H byte */
+ assign(H_byte, getByteFromReg(rt, 0));
+ /* G byte */
+ assign(G_byte, getByteFromReg(rt, 1));
+ /* F byte */
+ assign(F_byte, getByteFromReg(rt, 2));
+ /* E byte */
+ assign(E_byte, getByteFromReg(rt, 3));
+
+ /* t1 = addr */
t1 = newTemp(Ity_I64);
assign(t1, binop(Iop_Add64, getIReg(rs), mkU64(extend_s_16to64(imm))));
-#elif defined (_MIPSEB)
- t1 = newTemp(Ity_I64);
- assign(t1, binop(Iop_Xor64, mkU64(0x3), binop(Iop_Add64, getIReg(rs),
- mkU64(extend_s_16to64(imm)))));
-#endif
+
/* t2 = word addr */
- /* t4 = addr mod 4 */
- LWX_SWX_PATTERN64;
+ t2 = newTemp(Ity_I64);
+ assign(t2, binop(Iop_And64, mkexpr(t1), mkU64(0xFFFFFFFFFFFFFFFCULL)));
- /* t3 = rt content - shifted */
- t3 = newTemp(Ity_I32);
- assign(t3, binop(Iop_Shr32, mkNarrowTo32(ty, getIReg(rt)),
- narrowTo(Ity_I8, binop(Iop_Shl32, binop(Iop_Sub32,
- mkU32(0x03), mkexpr(t4)), mkU8(3)))));
+ /* t3 = addr mod 4 */
+ t3 = newTemp(Ity_I64);
+ assign(t3, binop(Iop_And64, mkexpr(t1), mkU64(0x3)));
- /* word content - adjusted */
- t5 = newTemp(Ity_I32);
- t6 = newTemp(Ity_I32);
- t7 = newTemp(Ity_I32);
- t8 = newTemp(Ity_I32);
+#if defined (_MIPSEL)
+ /* Calculate X_byte position. */
+ assign(F_pos, IRExpr_ITE(binop(Iop_CmpEQ64, mkexpr(t3), mkU64(0x0)),
+ mkU64(0x0),
+ mkU64(0x1)));
- /* neg(shr(0xFFFFFFFF, mul(sub(3,n), 8))) */
- assign(t5, binop(Iop_Mul32, binop(Iop_Sub32, mkU32(0x3), mkexpr(t4)),
- mkU32(0x8)));
+ assign(G_pos, IRExpr_ITE(binop(Iop_CmpEQ64, mkexpr(t3), mkU64(0x3)),
+ mkU64(0x1),
+ mkU64(0x0)));
- assign(t6, binop(Iop_Shr32, mkU32(0xFFFFFFFF), narrowTo(Ity_I8,
- mkexpr(t5))));
- assign(t7, binop(Iop_Xor32, mkU32(0xFFFFFFFF), mkexpr(t6)));
- assign(t8, binop(Iop_And32, load(Ity_I32, mkexpr(t2)), mkexpr(t7)));
- store(mkexpr(t2), binop(Iop_Or32, mkexpr(t8), mkexpr(t3)));
+ /* Store X_byte on the right place. */
+ store(mkexpr(t2), mkexpr(H_byte));
+ store(binop(Iop_Add64, mkexpr(t2), mkexpr(G_pos)), mkexpr(G_byte));
+ store(binop(Iop_Sub64, mkexpr(t1), mkexpr(F_pos)), mkexpr(F_byte));
+ store(mkexpr(t1), mkexpr(E_byte));
+
+#elif defined (_MIPSEB)
+ /* Calculate X_byte position. */
+ assign(F_pos, IRExpr_ITE(binop(Iop_CmpEQ64, mkexpr(t3), mkU64(0x3)),
+ mkU64(0x0),
+ mkU64(0x1)));
+
+ assign(G_pos, IRExpr_ITE(binop(Iop_CmpEQ64, mkexpr(t3), mkU64(0x0)),
+ mkU64(0x2),
+ mkU64(0x3)));
+
+ store(binop(Iop_Add64, mkexpr(t2), mkU64(3)), mkexpr(H_byte));
+ store(binop(Iop_Add64, mkexpr(t2), mkexpr(G_pos)), mkexpr(G_byte));
+ store(binop(Iop_Add64, mkexpr(t1), mkexpr(F_pos)), mkexpr(F_byte));
+ store(mkexpr(t1), mkexpr(E_byte));
+
+#endif
} else {
+ IRTemp E_byte = newTemp(Ity_I8);
+ IRTemp F_byte = newTemp(Ity_I8);
+ IRTemp G_byte = newTemp(Ity_I8);
+ IRTemp H_byte = newTemp(Ity_I8);
+ IRTemp F_pos = newTemp(Ity_I32);
+ IRTemp G_pos = newTemp(Ity_I32);
+
+ /* H byte */
+ assign(H_byte, getByteFromReg(rt, 0));
+ /* G byte */
+ assign(G_byte, getByteFromReg(rt, 1));
+ /* F byte */
+ assign(F_byte, getByteFromReg(rt, 2));
+ /* E byte */
+ assign(E_byte, getByteFromReg(rt, 3));
+
/* t1 = addr */
t1 = newTemp(Ity_I32);
-#if defined (_MIPSEL)
assign(t1, binop(Iop_Add32, getIReg(rs), mkU32(extend_s_16to32(imm))));
-#elif defined (_MIPSEB)
- assign(t1, binop(Iop_Xor32, mkU32(0x3), binop(Iop_Add32, getIReg(rs),
- mkU32(extend_s_16to32(imm)))));
-#endif
+
/* t2 = word addr */
- /* t4 = addr mod 4 */
- LWX_SWX_PATTERN;
+ t2 = newTemp(Ity_I32);
+ assign(t2, binop(Iop_And32, mkexpr(t1), mkU32(0xFFFFFFFCULL)));
- /* t3 = rt content - shifted */
+ /* t3 = addr mod 4 */
t3 = newTemp(Ity_I32);
- assign(t3, binop(Iop_Shr32, getIReg(rt), narrowTo(Ity_I8,
- binop(Iop_Shl32, binop(Iop_Sub32, mkU32(0x03), mkexpr(t4)),
- mkU8(3)))));
+ assign(t3, binop(Iop_And32, mkexpr(t1), mkU32(0x3)));
- /* word content - adjusted */
- t5 = newTemp(Ity_I32);
- t6 = newTemp(Ity_I32);
- t7 = newTemp(Ity_I32);
- t8 = newTemp(Ity_I32);
+#if defined (_MIPSEL)
+ /* Calculate X_byte position. */
+ assign(F_pos, IRExpr_ITE(binop(Iop_CmpEQ32, mkexpr(t3), mkU32(0x0)),
+ mkU32(0x0),
+ mkU32(0x1)));
- /* neg(shr(0xFFFFFFFF, mul(sub(3,n), 8))) */
- assign(t5, binop(Iop_Mul32, binop(Iop_Sub32, mkU32(0x3), mkexpr(t4)),
- mkU32(0x8)));
+ assign(G_pos, IRExpr_ITE(binop(Iop_CmpEQ32, mkexpr(t3), mkU32(0x3)),
+ mkU32(0x1),
+ mkU32(0x0)));
- assign(t6, binop(Iop_Shr32, mkU32(0xFFFFFFFF), narrowTo(Ity_I8,
- mkexpr(t5))));
- assign(t7, binop(Iop_Xor32, mkU32(0xFFFFFFFF), mkexpr(t6)));
- assign(t8, binop(Iop_And32, load(Ity_I32, mkexpr(t2)), mkexpr(t7)));
- store(mkexpr(t2), binop(Iop_Or32, mkexpr(t8), mkexpr(t3)));
+ /* Store X_byte on the right place. */
+ store(mkexpr(t2), mkexpr(H_byte));
+ store(binop(Iop_Add32, mkexpr(t2), mkexpr(G_pos)), mkexpr(G_byte));
+ store(binop(Iop_Sub32, mkexpr(t1), mkexpr(F_pos)), mkexpr(F_byte));
+ store(mkexpr(t1), mkexpr(E_byte));
+
+#elif defined (_MIPSEB)
+ /* Calculate X_byte position. */
+ assign(F_pos, IRExpr_ITE(binop(Iop_CmpEQ32, mkexpr(t3), mkU32(0x3)),
+ mkU32(0x0),
+ mkU32(0x1)));
+
+ assign(G_pos, IRExpr_ITE(binop(Iop_CmpEQ32, mkexpr(t3), mkU32(0x0)),
+ mkU32(0x2),
+ mkU32(0x3)));
+
+ store(binop(Iop_Add32, mkexpr(t2), mkU32(3)), mkexpr(H_byte));
+ store(binop(Iop_Add32, mkexpr(t2), mkexpr(G_pos)), mkexpr(G_byte));
+ store(binop(Iop_Add32, mkexpr(t1), mkexpr(F_pos)), mkexpr(F_byte));
+ store(mkexpr(t1), mkexpr(E_byte));
+
+#endif
}
break;
case 0x2E: /* SWR */
-
DIP("swr r%d, %d(r%d)", rt, imm, rs);
if (mode64) {
+ IRTemp E_byte = newTemp(Ity_I8);
+ IRTemp F_byte = newTemp(Ity_I8);
+ IRTemp G_byte = newTemp(Ity_I8);
+ IRTemp H_byte = newTemp(Ity_I8);
+ IRTemp F_pos = newTemp(Ity_I64);
+ IRTemp G_pos = newTemp(Ity_I64);
+
+ /* H byte */
+ assign(H_byte, getByteFromReg(rt, 0));
+ /* G byte */
+ assign(G_byte, getByteFromReg(rt, 1));
+ /* F byte */
+ assign(F_byte, getByteFromReg(rt, 2));
+ /* E byte */
+ assign(E_byte, getByteFromReg(rt, 3));
+
/* t1 = addr */
-#if defined (_MIPSEL)
t1 = newTemp(Ity_I64);
assign(t1, binop(Iop_Add64, getIReg(rs), mkU64(extend_s_16to64(imm))));
-#elif defined (_MIPSEB)
- t1 = newTemp(Ity_I64);
- assign(t1, binop(Iop_Xor64, mkU64(0x3), binop(Iop_Add64, getIReg(rs),
- mkU64(extend_s_16to64(imm)))));
-#endif
/* t2 = word addr */
- /* t4 = addr mod 4 */
- LWX_SWX_PATTERN64;
+ t2 = newTemp(Ity_I64);
+ assign(t2, binop(Iop_And64, mkexpr(t1), mkU64(0xFFFFFFFFFFFFFFFCULL)));
- /* t3 = rt content - shifted */
- t3 = newTemp(Ity_I32);
- assign(t3, binop(Iop_Shl32, mkNarrowTo32(ty, getIReg(rt)),
- narrowTo(Ity_I8, binop(Iop_Shl32, mkexpr(t4), mkU8(3)))));
+ /* t3 = addr mod 4 */
+ t3 = newTemp(Ity_I64);
+ assign(t3, binop(Iop_And64, mkexpr(t1), mkU64(0x3)));
- /* word content - adjusted */
- t5 = newTemp(Ity_I32);
- assign(t5, binop(Iop_And32, load(Ity_I32, mkexpr(t2)), unop(Iop_Not32,
- binop(Iop_Shl32, mkU32(0xFFFFFFFF), narrowTo(Ity_I8,
- binop(Iop_Shl32, mkexpr(t4), mkU8(0x3)))))));
+#if defined (_MIPSEL)
+ /* Calculate X_byte position. */
+ assign(F_pos, IRExpr_ITE(binop(Iop_CmpEQ64, mkexpr(t3), mkU64(0x0)),
+ mkU64(0x2),
+ mkU64(0x3)));
- store(mkexpr(t2), binop(Iop_Xor32, mkexpr(t5), mkexpr(t3)));
+ assign(G_pos, IRExpr_ITE(binop(Iop_CmpEQ64, mkexpr(t3), mkU64(0x3)),
+ mkU64(0x0),
+ mkU64(0x1)));
+
+ /* Store X_byte on the right place. */
+ store(binop(Iop_Add64, mkexpr(t2), mkU64(0x3)), mkexpr(E_byte));
+ store(binop(Iop_Add64, mkexpr(t2), mkexpr(F_pos)), mkexpr(F_byte));
+ store(binop(Iop_Add64, mkexpr(t1), mkexpr(G_pos)), mkexpr(G_byte));
+ store(mkexpr(t1), mkexpr(H_byte));
+
+#elif defined (_MIPSEB)
+ /* Calculate X_byte position. */
+ assign(F_pos, IRExpr_ITE(binop(Iop_CmpEQ64, mkexpr(t3), mkU64(0x3)),
+ mkU64(0x1),
+ mkU64(0x0)));
+
+ assign(G_pos, IRExpr_ITE(binop(Iop_CmpEQ64, mkexpr(t3), mkU64(0x0)),
+ mkU64(0x0),
+ mkU64(0x1)));
+
+ /* Store X_byte on the right place. */
+ store(mkexpr(t2), mkexpr(E_byte));
+ store(binop(Iop_Add64, mkexpr(t2), mkexpr(F_pos)), mkexpr(F_byte));
+ store(binop(Iop_Sub64, mkexpr(t1), mkexpr(G_pos)), mkexpr(G_byte));
+ store(mkexpr(t1), mkexpr(H_byte));
+#endif
} else {
+ IRTemp E_byte = newTemp(Ity_I8);
+ IRTemp F_byte = newTemp(Ity_I8);
+ IRTemp G_byte = newTemp(Ity_I8);
+ IRTemp H_byte = newTemp(Ity_I8);
+ IRTemp F_pos = newTemp(Ity_I32);
+ IRTemp G_pos = newTemp(Ity_I32);
+
+ /* H byte */
+ assign(H_byte, getByteFromReg(rt, 0));
+ /* G byte */
+ assign(G_byte, getByteFromReg(rt, 1));
+ /* F byte */
+ assign(F_byte, getByteFromReg(rt, 2));
+ /* E byte */
+ assign(E_byte, getByteFromReg(rt, 3));
+
/* t1 = addr */
t1 = newTemp(Ity_I32);
-#if defined (_MIPSEL)
assign(t1, binop(Iop_Add32, getIReg(rs), mkU32(extend_s_16to32(imm))));
-#elif defined (_MIPSEB)
- assign(t1, binop(Iop_Xor32, mkU32(0x3), binop(Iop_Add32, getIReg(rs),
- mkU32(extend_s_16to32(imm)))));
-#endif
/* t2 = word addr */
- /* t4 = addr mod 4 */
- LWX_SWX_PATTERN;
+ t2 = newTemp(Ity_I32);
+ assign(t2, binop(Iop_And32, mkexpr(t1), mkU32(0xFFFFFFFCULL)));
- /* t3 = rt content - shifted */
+ /* t3 = addr mod 4 */
t3 = newTemp(Ity_I32);
- assign(t3, binop(Iop_Shl32, getIReg(rt), narrowTo(Ity_I8,
- binop(Iop_Shl32, mkexpr(t4), mkU8(3)))));
+ assign(t3, binop(Iop_And32, mkexpr(t1), mkU32(0x3)));
- /* word content - adjusted */
- t5 = newTemp(Ity_I32);
- assign(t5, binop(Iop_And32, load(Ity_I32, mkexpr(t2)), unop(Iop_Not32,
- binop(Iop_Shl32, mkU32(0xFFFFFFFF), narrowTo(Ity_I8,
- binop(Iop_Shl32, mkexpr(t4), mkU8(0x3)))))));
+#if defined (_MIPSEL)
+ /* Calculate X_byte position. */
+ assign(F_pos, IRExpr_ITE(binop(Iop_CmpEQ32, mkexpr(t3), mkU32(0x0)),
+ mkU32(0x2),
+ mkU32(0x3)));
- store(mkexpr(t2), binop(Iop_Xor32, mkexpr(t5), mkexpr(t3)));
+ assign(G_pos, IRExpr_ITE(binop(Iop_CmpEQ32, mkexpr(t3), mkU32(0x3)),
+ mkU32(0x0),
+ mkU32(0x1)));
+
+ /* Store X_byte on the right place. */
+ store(binop(Iop_Add32, mkexpr(t2), mkU32(0x3)), mkexpr(E_byte));
+ store(binop(Iop_Add32, mkexpr(t2), mkexpr(F_pos)), mkexpr(F_byte));
+ store(binop(Iop_Add32, mkexpr(t1), mkexpr(G_pos)), mkexpr(G_byte));
+ store(mkexpr(t1), mkexpr(H_byte));
+
+#elif defined (_MIPSEB)
+ /* Calculate X_byte position. */
+ assign(F_pos, IRExpr_ITE(binop(Iop_CmpEQ32, mkexpr(t3), mkU32(0x3)),
+ mkU32(0x1),
+ mkU32(0x0)));
+
+ assign(G_pos, IRExpr_ITE(binop(Iop_CmpEQ32, mkexpr(t3), mkU32(0x0)),
+ mkU32(0x0),
+ mkU32(0x1)));
+
+ /* Store X_byte on the right place. */
+ store(mkexpr(t2), mkexpr(E_byte));
+ store(binop(Iop_Add32, mkexpr(t2), mkexpr(F_pos)), mkexpr(F_byte));
+ store(binop(Iop_Sub32, mkexpr(t1), mkexpr(G_pos)), mkexpr(G_byte));
+ store(mkexpr(t1), mkexpr(H_byte));
+#endif
}
break;
@@ -6134,7 +6445,6 @@
t5 = newTemp(Ity_I64);
t6 = newTemp(Ity_I64);
t7 = newTemp(Ity_I64);
- t8 = newTemp(Ity_I64);
assign(t5, binop(Iop_Mul64, mkexpr(t4), mkU64(0x8)));
|
|
From: Sergey G. <Ser...@as...> - 2013-05-31 12:51:35
|
Hi all! I'm working on adapting valgrind for powerpc e500v2 CPU. Can I send patch for it in future for accepting in mainline sources? Can I send current intermediate patch for review? Thanks. ------ Best Regards, Sergey Gerasimov |