|
From: <sv...@va...> - 2005-06-10 11:04:56
|
Author: sewardj
Date: 2005-06-10 12:04:52 +0100 (Fri, 10 Jun 2005)
New Revision: 1205
Log:
amd64: handle MOVUPS G to E
Modified:
trunk/priv/guest-amd64/toIR.c
Modified: trunk/priv/guest-amd64/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-amd64/toIR.c 2005-05-30 11:19:54 UTC (rev 1204)
+++ trunk/priv/guest-amd64/toIR.c 2005-06-10 11:04:52 UTC (rev 1205)
@@ -8571,16 +8571,17 @@
}
=20
/* 0F 29 =3D MOVAPS -- move from G (xmm) to E (mem or xmm). */
+ /* 0F 11 =3D MOVUPS -- move from G (xmm) to E (mem or xmm). */
if (haveNo66noF2noF3(pfx) && sz =3D=3D 4
- && insn[0] =3D=3D 0x0F && insn[1] =3D=3D 0x29) {
+ && insn[0] =3D=3D 0x0F && (insn[1] =3D=3D 0x29 || insn[1] =3D=3D =
0x11)) {
modrm =3D getUChar(delta+2);
if (epartIsReg(modrm)) {
/* fall through; awaiting test case */
} else {
addr =3D disAMode ( &alen, pfx, delta+2, dis_buf, 0 );
storeLE( mkexpr(addr), getXMMReg(gregOfRexRM(pfx,modrm)) );
- DIP("movaps %s,%s\n", nameXMMReg(gregOfRexRM(pfx,modrm)),
- dis_buf );
+ DIP("mov[ua]ps %s,%s\n", nameXMMReg(gregOfRexRM(pfx,modrm)),
+ dis_buf );
delta +=3D 2+alen;
goto decode_success;
}
|