From: Petar Jovanovic Date: Wed, 30 Jan 2013 18:06:26 +0000 (+0000) Subject: mips: Fixing some HReg <--> UInt mixups spotted by Florian. X-Git-Tag: svn/VALGRIND_3_9_0^2~124 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=6bb0eeae6b90951ab19f425b1964576014d1ddfb;p=thirdparty%2Fvalgrind.git mips: Fixing some HReg <--> UInt mixups spotted by Florian. git-svn-id: svn://svn.valgrind.org/vex/trunk@2670 --- diff --git a/VEX/priv/host_mips_defs.c b/VEX/priv/host_mips_defs.c index e0e490b380..2e144c2c41 100644 --- a/VEX/priv/host_mips_defs.c +++ b/VEX/priv/host_mips_defs.c @@ -863,7 +863,10 @@ MIPSAMode *nextMIPSAModeFloat(MIPSAMode * am) ret = MIPSAMode_IR(am->Mam.IR.index + 4, am->Mam.IR.base); break; case Mam_RR: - ret = MIPSAMode_RR(am->Mam.RR.index + 1, am->Mam.RR.base); + ret = MIPSAMode_RR(mkHReg(hregNumber(am->Mam.RR.index) + 1, + hregClass(am->Mam.RR.index), + hregIsVirtual(am->Mam.RR.index)), + am->Mam.RR.base); break; default: vpanic("dopyMIPSAMode"); @@ -880,7 +883,10 @@ MIPSAMode *nextMIPSAModeInt(MIPSAMode * am) ret = MIPSAMode_IR(am->Mam.IR.index + 4, am->Mam.IR.base); break; case Mam_RR: - ret = MIPSAMode_RR(am->Mam.RR.index + 1, am->Mam.RR.base); + ret = MIPSAMode_RR(mkHReg(hregNumber(am->Mam.RR.index) + 1, + hregClass(am->Mam.RR.index), + hregIsVirtual(am->Mam.RR.index)), + am->Mam.RR.base); break; default: vpanic("dopyMIPSAMode"); @@ -2175,7 +2181,8 @@ Bool isMove_MIPSInstr(MIPSInstr * i, HReg * src, HReg * dst) return False; if (i->Min.Alu.srcR->tag != Mrh_Reg) return False; - if (i->Min.Alu.srcR->Mrh.Reg.reg != i->Min.Alu.srcL) + if (hregNumber(i->Min.Alu.srcR->Mrh.Reg.reg) + != hregNumber(i->Min.Alu.srcL)) return False; *src = i->Min.Alu.srcL; *dst = i->Min.Alu.dst; @@ -3127,7 +3134,7 @@ Int emit_MIPSInstr ( /*MB_MOD*/Bool* is_profInc, /* blez r_src, delta/4-1 */ vassert(cond == MIPScc_EQ); ptmp = mkFormI(ptmp, 6, r_src, 0, delta / 4 - 1); - ptmp = mkFormR(ptmp, 0, 0, 0, 0, 0, 0); + mkFormR(ptmp, 0, 0, 0, 0, 0, 0); } goto done; } @@ -3189,7 +3196,7 @@ Int emit_MIPSInstr ( /*MB_MOD*/Bool* is_profInc, nop*/ ptmp = mkFormI(ptmp, 35, 10, 9, 316); ptmp = mkFormI(ptmp, 4, 0, 9, (delta)); - ptmp = mkFormR(ptmp, 0, 0, 0, 0, 0, 0); + mkFormR(ptmp, 0, 0, 0, 0, 0, 0); } goto done; } @@ -3238,7 +3245,7 @@ Int emit_MIPSInstr ( /*MB_MOD*/Bool* is_profInc, nop*/ ptmp = mkFormI(ptmp, 35, 10, 9, 316); ptmp = mkFormI(ptmp, 4, 0, 9, (delta)); - ptmp = mkFormR(ptmp, 0, 0, 0, 0, 0, 0); + mkFormR(ptmp, 0, 0, 0, 0, 0, 0); } goto done; } @@ -3308,7 +3315,7 @@ Int emit_MIPSInstr ( /*MB_MOD*/Bool* is_profInc, nop*/ ptmp = mkFormI(ptmp, 35, 10, 9, 316); ptmp = mkFormI(ptmp, 4, 0, 9, (delta)); - ptmp = mkFormR(ptmp, 0, 0, 0, 0, 0, 0); + mkFormR(ptmp, 0, 0, 0, 0, 0, 0); } goto done; } diff --git a/VEX/priv/host_mips_isel.c b/VEX/priv/host_mips_isel.c index 6cc7dc6e69..9d56cd7971 100644 --- a/VEX/priv/host_mips_isel.c +++ b/VEX/priv/host_mips_isel.c @@ -371,7 +371,7 @@ static void doHelperCall(ISelEnv * env, Bool passBBP, IRExpr * guard, Int n_args, i, argreg; UInt argiregs; ULong target; - HReg src = 0; + HReg src = INVALID_HREG; /* MIPS O32 calling convention: up to four registers ($a0 ... $a3) are allowed to be used for passing integer arguments. They correspond @@ -570,7 +570,7 @@ static Bool sane_AMode(ISelEnv * env, MIPSAMode * am) return toBool(hregClass(am->Mam.RR.base) == HRcGPR(mode64) && hregIsVirtual(am->Mam.RR.base) && hregClass(am->Mam.RR.index) == HRcGPR(mode64) && - hregIsVirtual(am->Mam.IR.index)); + hregIsVirtual(am->Mam.RR.index)); default: vpanic("sane_AMode: unknown mips amode tag"); } @@ -1206,25 +1206,25 @@ static HReg iselWordExpr_R_wrk(ISelEnv * env, IRExpr * e) MIPSRH_Imm(False, 0xFF))); return r_dst; } - - case Iop_16Uto32: + + case Iop_1Uto32: case Iop_8Uto32: - case Iop_1Uto32: { + case Iop_16Uto32: { HReg r_dst = newVRegI(env); HReg r_src = iselWordExpr_R(env, e->Iex.Unop.arg); UShort amt; switch (op_unop) { case Iop_1Uto32: - case Iop_1Uto8: amt = 31; break; - + case Iop_8Uto32: + amt = 24; + break; case Iop_16Uto32: amt = 16; break; - default: - amt = 24; + vassert(0); break; } @@ -1241,8 +1241,7 @@ static HReg iselWordExpr_R_wrk(ISelEnv * env, IRExpr * e) vassert(mode64); HReg r_dst = newVRegI(env); HReg r_src = iselWordExpr_R(env, e->Iex.Unop.arg); - UShort mask = toUShort(op_unop == Iop_16Uto64 ? 0xFFFF : - op_unop == Iop_16Uto32 ? 0xFFFF : 0xFF); + UShort mask = toUShort(op_unop == Iop_16Uto64 ? 0xFFFF : 0xFF); addInstr(env, MIPSInstr_Alu(Malu_AND, r_dst, r_src, MIPSRH_Imm(False, mask))); return r_dst;