From: Petar Jovanovic Date: Sat, 27 Apr 2013 01:15:48 +0000 (+0000) Subject: mips: fix corner case for INS instruction X-Git-Tag: svn/VALGRIND_3_9_0^2~80 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=aad3e42f8b3c2fb89c15d6ae817d53047f448c2c;p=thirdparty%2Fvalgrind.git mips: fix corner case for INS instruction This change fixes corner case for INS instruction when lsb = 0. The test in none/tests/mips32/MIPS32int.c will be extended to include additional test cases that trigger this condition. git-svn-id: svn://svn.valgrind.org/vex/trunk@2715 --- diff --git a/VEX/priv/guest_mips_toIR.c b/VEX/priv/guest_mips_toIR.c index 62f67f1f98..02632d08c0 100644 --- a/VEX/priv/guest_mips_toIR.c +++ b/VEX/priv/guest_mips_toIR.c @@ -4614,7 +4614,8 @@ static DisResult disInstr_MIPS_WRK ( Bool(*resteerOkFn) (/*opaque */void *, assign(t2, binop(Iop_Shl32, mkNarrowTo32(ty, getIReg(rt)), mkU8(32 - lsb))); assign(t3, binop(Iop_Shr32, mkexpr(t2), mkU8(32 - lsb))); - } + } else + assign(t3, mkU32(0)); if (msb < 31) { t4 = newTemp(Ity_I32); @@ -4629,14 +4630,14 @@ static DisResult disInstr_MIPS_WRK ( Bool(*resteerOkFn) (/*opaque */void *, t6 = newTemp(Ity_I32); assign(t6, binop(Iop_Or32, mkexpr(t5), mkexpr(t1))); putIReg(rt, mkWidenFrom32(ty, binop(Iop_Or32, mkexpr(t6), - mkexpr(t3)), False)); + mkexpr(t3)), True)); } else { putIReg(rt, mkWidenFrom32(ty, binop(Iop_Or32, mkexpr(t1), - mkexpr(t5)), False)); + mkexpr(t5)), True)); } } else { putIReg(rt, mkWidenFrom32(ty, binop(Iop_Or32, mkexpr(t1), - mkexpr(t3)), False)); + mkexpr(t3)), True)); } break;