|
From: <sv...@va...> - 2006-03-06 13:42:11
|
Author: sewardj
Date: 2006-03-06 13:42:01 +0000 (Mon, 06 Mar 2006)
New Revision: 1584
Log:
Merge r1583 (fix for 8-bit xadd G,E)
Modified:
branches/VEX_3_1_BRANCH/priv/guest-x86/toIR.c
Modified: branches/VEX_3_1_BRANCH/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
--- branches/VEX_3_1_BRANCH/priv/guest-x86/toIR.c 2006-03-06 13:35:42 UTC=
(rev 1583)
+++ branches/VEX_3_1_BRANCH/priv/guest-x86/toIR.c 2006-03-06 13:42:01 UTC=
(rev 1584)
@@ -6202,7 +6202,7 @@
=20
=20
static
-UInt dis_xadd_G_E ( UChar sorb, Int sz, Int delta0 )
+UInt dis_xadd_G_E ( UChar sorb, Int sz, Int delta0, Bool* decodeOK )
{
Int len;
UChar rm =3D getIByte(delta0);
@@ -6217,7 +6217,9 @@
IRTemp tmpt1 =3D newTemp(ty);
=20
if (epartIsReg(rm)) {
- unimplemented("x86 xadd instruction with register operand");
+ *decodeOK =3D False;
+ return delta0;
+ /* Currently we don't handle xadd_G_E with register operand. */
#if 0
uInstr2(cb, GET, sz, ArchReg, eregOfRM(rm), TempReg, tmpd);
uInstr2(cb, GET, sz, ArchReg, gregOfRM(rm), TempReg, tmpt);
@@ -6239,6 +6241,7 @@
putIReg(sz, gregOfRM(rm), mkexpr(tmpd));
DIP("xadd%c %s, %s\n",
nameISize(sz), nameIReg(sz,gregOfRM(rm)), dis_buf);
+ *decodeOK =3D True;
return len+delta0;
}
}
@@ -12359,12 +12362,18 @@
=20
/* =3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D- XADD -=3D-=3D-=3D-=3D-=3D-=
=3D-=3D-=3D-=3D-=3D */
=20
-//-- case 0xC0: /* XADD Gb,Eb */
-//-- eip =3D dis_xadd_G_E ( cb, sorb, 1, eip );
-//-- break;
- case 0xC1: /* XADD Gv,Ev */
- delta =3D dis_xadd_G_E ( sorb, sz, delta );
+ case 0xC0: { /* XADD Gb,Eb */
+ Bool decodeOK;
+ delta =3D dis_xadd_G_E ( sorb, 1, delta, &decodeOK );
+ if (!decodeOK) goto decode_failure;
break;
+ }
+ case 0xC1: { /* XADD Gv,Ev */
+ Bool decodeOK;
+ delta =3D dis_xadd_G_E ( sorb, sz, delta, &decodeOK );
+ if (!decodeOK) goto decode_failure;
+ break;
+ }
=20
/* =3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D- MMXery =3D-=3D-=3D-=3D-=3D=
-=3D-=3D-=3D-=3D-=3D-=3D */
=20
|