]> git.ipfire.org Git - thirdparty/valgrind.git/commitdiff
Backend bug: mkFormD wasn't smallifying the imm
authorCerion Armour-Brown <cerion@valgrind.org>
Tue, 1 Mar 2005 09:11:49 +0000 (09:11 +0000)
committerCerion Armour-Brown <cerion@valgrind.org>
Tue, 1 Mar 2005 09:11:49 +0000 (09:11 +0000)
(plus not-quite-right vassert)
Small change to front-end cmp DIP

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

VEX/priv/guest-ppc32/toIR.c
VEX/priv/host-ppc32/hdefs.c

index 0d73b3e3a893064e92464fc83be74529fb9eb0aa..2277da6c972fb73f2ae395273afc8eed467cf5cf 100644 (file)
@@ -1430,8 +1430,8 @@ static Bool dis_int_cmp ( UInt theInstr )
    
    switch (opc1) {
    case 0x0B: // cmpi (Compare Immediate, p398)
-      DIP("cmpi crf%d,%u,r%d,0x%x\n", crfD, flag_L, Ra_addr, SIMM_16);
       EXTS_SIMM = extend_s_16to32(SIMM_16);
+      DIP("cmpi crf%d,%u,r%d,0x%x\n", crfD, flag_L, Ra_addr, EXTS_SIMM);
       irx_tst1 = binop(Iop_CmpEQ32, mkexpr(Ra), mkU32(EXTS_SIMM));
       irx_tst2 = binop(Iop_CmpLT32S, mkexpr(Ra), mkU32(EXTS_SIMM));
       break;
index 1f719b6de07e1b5237b0fb573c869110846abd50..37a461243578a1208e40b20b8d253e9078598b74 100644 (file)
@@ -1810,7 +1810,8 @@ static UChar* mkFormD ( UChar* p, UInt op1, UInt r1, UInt r2, UInt imm )
    vassert(op1 < 0x40);
    vassert(r1  < 0x20);
    vassert(r2  < 0x20);
-   vassert(imm < 0x10000 || imm >= 0xFFFF0000);     // Pos|Neg
+   vassert(imm < 0x10000 || imm >= 0xFFFF8000);     // Pos|Neg
+   imm = imm & 0xFFFF;
    UInt theInstr = ((op1<<26) | (r1<<21) | (r2<<16) | (imm));
    return emit32(p, theInstr);
 }