From ae33a57bdec7ed567a2bd51ec855559d81d32756 Mon Sep 17 00:00:00 2001 From: Petar Jovanovic Date: Mon, 13 Jul 2015 00:04:28 +0000 Subject: [PATCH] mips: emit addiu instead of addi 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 | 14 +++++--------- 1 file changed, 5 insertions(+), 9 deletions(-) diff --git a/VEX/priv/host_mips_defs.c b/VEX/priv/host_mips_defs.c index d85a3064fd..5a33dcbb75 100644 --- a/VEX/priv/host_mips_defs.c +++ b/VEX/priv/host_mips_defs.c @@ -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); -- 2.47.2