]> git.ipfire.org Git - thirdparty/valgrind.git/commitdiff
mips: emit addiu instead of addi
authorPetar Jovanovic <mips32r2@gmail.com>
Mon, 13 Jul 2015 00:04:28 +0000 (00:04 +0000)
committerPetar Jovanovic <mips32r2@gmail.com>
Mon, 13 Jul 2015 00:04:28 +0000 (00:04 +0000)
Remove wrong emission of addi when addiu is correct, sufficient and needed.
Attention to this part of the code has been brought by BZ #338924. This
patch fixes the reported issue as well.

git-svn-id: svn://svn.valgrind.org/vex/trunk@3163

VEX/priv/host_mips_defs.c

index d85a3064fda736de5f555de03f0f543d230f6920..5a33dcbb75977c44f7fa71fa99046ab56cbaf1cf 100644 (file)
@@ -2534,13 +2534,9 @@ Int emit_MIPSInstr ( /*MB_MOD*/Bool* is_profInc,
             /* Malu_ADD, Malu_SUB, Malu_AND, Malu_OR, Malu_NOR, Malu_XOR, Malu_SLT */
             case Malu_ADD:
                if (immR) {
-                  vassert(srcR->Mrh.Imm.imm16 != 0x8000);
-                  if (srcR->Mrh.Imm.syned)
-                     /* addi */
-                     p = mkFormI(p, 9, r_srcL, r_dst, srcR->Mrh.Imm.imm16);
-                  else
-                     /* addiu */
-                     p = mkFormI(p, 9, r_srcL, r_dst, srcR->Mrh.Imm.imm16);
+                  vassert(srcR->Mrh.Imm.syned);
+                  /* addiu */
+                  p = mkFormI(p, 9, r_srcL, r_dst, srcR->Mrh.Imm.imm16);
                } else {
                   /* addu */
                   p = mkFormR(p, 0, r_srcL, r_srcR, r_dst, 0, 33);
@@ -2548,10 +2544,10 @@ Int emit_MIPSInstr ( /*MB_MOD*/Bool* is_profInc,
                break;
             case Malu_SUB:
                if (immR) {
-                  /* addi , but with negated imm */
+                  /* addiu , but with negated imm */
                   vassert(srcR->Mrh.Imm.syned);
                   vassert(srcR->Mrh.Imm.imm16 != 0x8000);
-                  p = mkFormI(p, 8, r_srcL, r_dst, (-srcR->Mrh.Imm.imm16));
+                  p = mkFormI(p, 9, r_srcL, r_dst, (-srcR->Mrh.Imm.imm16));
                } else {
                   /* subu */
                   p = mkFormR(p, 0, r_srcL, r_srcR, r_dst, 0, 35);