|
From: <sv...@va...> - 2006-11-18 22:56:53
|
Author: sewardj
Date: 2006-11-18 22:56:46 +0000 (Sat, 18 Nov 2006)
New Revision: 1679
Log:
Handle long-form encoding of 'push{l,w} %reg'.
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 2006-11-16 10:42:02 UTC (rev 1678)
+++ trunk/priv/guest-x86/toIR.c 2006-11-18 22:56:46 UTC (rev 1679)
@@ -2815,6 +2815,13 @@
jmp_treg(Ijk_Boring,t1);
dres->whatNext =3D Dis_StopHere;
break;
+ case 6: /* PUSH Ev */
+ vassert(sz =3D=3D 4 || sz =3D=3D 2);
+ t2 =3D newTemp(Ity_I32);
+ assign( t2, binop(Iop_Sub32,getIReg(4,R_ESP),mkU32(sz)) );
+ putIReg(4, R_ESP, mkexpr(t2) );
+ storeLE( mkexpr(t2), mkexpr(t1) );
+ break;
default:=20
vex_printf(
"unhandled Grp5(R) case %d\n", (Int)gregOfRM(modrm));
|