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 {