Cleaned up isel for instns taking an RI arg
- limiting imms to 15 bits, so don't get inappropriately sign-extended.
git-svn-id: svn://svn.valgrind.org/vex/trunk@998 8f6e269a-dfd6-0310-a8e1-e2731360e62c
diff --git a/priv/host-ppc32/hdefs.c b/priv/host-ppc32/hdefs.c
index 7f0068e..427aebd 100644
--- a/priv/host-ppc32/hdefs.c
+++ b/priv/host-ppc32/hdefs.c
@@ -485,6 +485,8 @@
return i;
}
PPC32Instr* PPC32Instr_Cmp32 ( PPC32CmpOp op, UInt crfD, HReg src1, PPC32RI* src2 ) {
+ if (src2->tag == Pri_Imm)
+ vassert(src2->Pri.Imm.imm32 < 0x10000);
PPC32Instr* i = LibVEX_Alloc(sizeof(PPC32Instr));
i->tag = Pin_Cmp32;
i->Pin.Cmp32.op = op;
@@ -1965,8 +1967,7 @@
{
vassert(r_dst < 0x20);
- if (imm < 0x10000) {
- // CAB: Sign extends immediate...
+ if (imm >= 0xFFFF8000 || imm <= 0x7FFF) { // sign-extendable from 16 bits?
// addi r_dst,0,imm => li r_dst,imm
p = mkFormD(p, 14, r_dst, 0, imm);
} else {