|
From: <sv...@va...> - 2006-05-03 17:57:24
|
Author: sewardj
Date: 2006-05-03 18:57:15 +0100 (Wed, 03 May 2006)
New Revision: 1607
Log:
Fix incorrect behaviour of mov{s,z}bw (#126253).
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-05-01 02:14:17 UTC (rev 1606)
+++ trunk/priv/guest-x86/toIR.c 2006-05-03 17:57:15 UTC (rev 1607)
@@ -12340,16 +12340,26 @@
/* =3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D- MOVZX, MOVSX =3D-=3D-=3D-=3D=
-=3D-=3D-=3D-=3D */
=20
case 0xB6: /* MOVZXb Eb,Gv */
- delta =3D dis_movx_E_G ( sorb, delta, 1, 4, False );
+ if (sz !=3D 2 && sz !=3D 4)
+ goto decode_failure;
+ delta =3D dis_movx_E_G ( sorb, delta, 1, sz, False );
break;
+
case 0xB7: /* MOVZXw Ew,Gv */
+ if (sz !=3D 4)
+ goto decode_failure;
delta =3D dis_movx_E_G ( sorb, delta, 2, 4, False );
break;
=20
case 0xBE: /* MOVSXb Eb,Gv */
- delta =3D dis_movx_E_G ( sorb, delta, 1, 4, True );
+ if (sz !=3D 2 && sz !=3D 4)
+ goto decode_failure;
+ delta =3D dis_movx_E_G ( sorb, delta, 1, sz, True );
break;
+
case 0xBF: /* MOVSXw Ew,Gv */
+ if (sz !=3D 4)
+ goto decode_failure;
delta =3D dis_movx_E_G ( sorb, delta, 2, 4, True );
break;
=20
|