]> git.ipfire.org Git - thirdparty/valgrind.git/commitdiff
mips: Fixing some HReg <--> UInt mixups spotted by Florian.
authorPetar Jovanovic <mips32r2@gmail.com>
Wed, 30 Jan 2013 18:06:26 +0000 (18:06 +0000)
committerPetar Jovanovic <mips32r2@gmail.com>
Wed, 30 Jan 2013 18:06:26 +0000 (18:06 +0000)
git-svn-id: svn://svn.valgrind.org/vex/trunk@2670

VEX/priv/host_mips_defs.c
VEX/priv/host_mips_isel.c

index e0e490b380002c3764e61d0fda8900faf426dbc2..2e144c2c410569c412a917a1947d8354a256d253 100644 (file)
@@ -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;
       }
index 6cc7dc6e69a6c53b7ad1c740e57d055ad6826a07..9d56cd7971b1082247af2e9a0af69327fa8e770d 100644 (file)
@@ -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;