|
From: <sv...@va...> - 2015-07-13 00:04:36
|
Author: petarj
Date: Mon Jul 13 01:04:28 2015
New Revision: 3163
Log:
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.
Modified:
trunk/priv/host_mips_defs.c
Modified: trunk/priv/host_mips_defs.c
==============================================================================
--- trunk/priv/host_mips_defs.c (original)
+++ trunk/priv/host_mips_defs.c Mon Jul 13 01:04:28 2015
@@ -2534,13 +2534,9 @@
/* 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 @@
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);
|