mips: Fixing some HReg <--> UInt mixups spotted by Florian.


git-svn-id: svn://svn.valgrind.org/vex/trunk@2670 8f6e269a-dfd6-0310-a8e1-e2731360e62c
diff --git a/priv/host_mips_defs.c b/priv/host_mips_defs.c
index e0e490b..2e144c2 100644
--- a/priv/host_mips_defs.c
+++ b/priv/host_mips_defs.c
@@ -863,7 +863,10 @@
          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 @@
          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 @@
          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 @@
             /* 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 @@
                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 @@
                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 @@
                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/priv/host_mips_isel.c b/priv/host_mips_isel.c
index 6cc7dc6..9d56cd7 100644
--- a/priv/host_mips_isel.c
+++ b/priv/host_mips_isel.c
@@ -371,7 +371,7 @@
    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 @@
          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 @@
                           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 @@
             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;