From: Julian Seward Date: Wed, 5 Oct 2005 10:39:58 +0000 (+0000) Subject: Handle the redundant-encoding (Grp5) versions of {inc,dec}{b,w}. X-Git-Tag: svn/VALGRIND_3_1_1^2~79 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=ea4a288fb2501caad43ca212326d2937524cca30;p=thirdparty%2Fvalgrind.git Handle the redundant-encoding (Grp5) versions of {inc,dec}{b,w}. git-svn-id: svn://svn.valgrind.org/vex/trunk@1412 --- diff --git a/VEX/priv/guest-x86/toIR.c b/VEX/priv/guest-x86/toIR.c index 5ff900e135..7a86bf6d2c 100644 --- a/VEX/priv/guest-x86/toIR.c +++ b/VEX/priv/guest-x86/toIR.c @@ -2751,16 +2751,22 @@ UInt dis_Grp5 ( UChar sorb, Int sz, Int delta, DisResult* dres ) if (epartIsReg(modrm)) { assign(t1, getIReg(sz,eregOfRM(modrm))); switch (gregOfRM(modrm)) { -//-- case 0: /* INC */ -//-- uInstr1(cb, INC, sz, TempReg, t1); -//-- setFlagsFromUOpcode(cb, INC); -//-- uInstr2(cb, PUT, sz, TempReg, t1, ArchReg, eregOfRM(modrm)); -//-- break; -//-- case 1: /* DEC */ -//-- uInstr1(cb, DEC, sz, TempReg, t1); -//-- setFlagsFromUOpcode(cb, DEC); -//-- uInstr2(cb, PUT, sz, TempReg, t1, ArchReg, eregOfRM(modrm)); -//-- break; + case 0: /* INC */ + vassert(sz == 2 || sz == 4); + t2 = newTemp(ty); + assign(t2, binop(mkSizedOp(ty,Iop_Add8), + mkexpr(t1), mkU(ty,1))); + setFlags_INC_DEC( True, t2, ty ); + putIReg(sz,eregOfRM(modrm),mkexpr(t2)); + break; + case 1: /* DEC */ + vassert(sz == 2 || sz == 4); + t2 = newTemp(ty); + assign(t2, binop(mkSizedOp(ty,Iop_Sub8), + mkexpr(t1), mkU(ty,1))); + setFlags_INC_DEC( False, t2, ty ); + putIReg(sz,eregOfRM(modrm),mkexpr(t2)); + break; case 2: /* call Ev */ vassert(sz == 4); t2 = newTemp(Ity_I32);