|
From: <sv...@va...> - 2005-10-05 10:40:05
|
Author: sewardj
Date: 2005-10-05 11:39:58 +0100 (Wed, 05 Oct 2005)
New Revision: 1412
Log:
Handle the redundant-encoding (Grp5) versions of {inc,dec}{b,w}.
Modified:
trunk/priv/guest-x86/toIR.c
Modified: trunk/priv/guest-x86/toIR.c
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- trunk/priv/guest-x86/toIR.c 2005-10-04 20:00:49 UTC (rev 1411)
+++ trunk/priv/guest-x86/toIR.c 2005-10-05 10:39:58 UTC (rev 1412)
@@ -2751,16 +2751,22 @@
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(mod=
rm));
-//-- break;
-//-- case 1: /* DEC */
-//-- uInstr1(cb, DEC, sz, TempReg, t1);
-//-- setFlagsFromUOpcode(cb, DEC);
-//-- uInstr2(cb, PUT, sz, TempReg, t1, ArchReg, eregOfRM(mod=
rm));
-//-- break;
+ case 0: /* INC */=20
+ vassert(sz =3D=3D 2 || sz =3D=3D 4);
+ t2 =3D 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 */=20
+ vassert(sz =3D=3D 2 || sz =3D=3D 4);
+ t2 =3D 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 =3D=3D 4);
t2 =3D newTemp(Ity_I32);
|