|
From: <sv...@va...> - 2005-08-25 21:34:29
|
Author: sewardj
Date: 2005-08-25 22:34:24 +0100 (Thu, 25 Aug 2005)
New Revision: 1362
Log:
Implement MOVUPS -- move from G (xmm) to E (mem or xmm) [UNVERIFIED]
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-08-25 21:20:18 UTC (rev 1361)
+++ trunk/priv/guest-x86/toIR.c 2005-08-25 21:34:24 UTC (rev 1362)
@@ -7501,15 +7501,17 @@
}
=20
/* 0F 29 =3D MOVAPS -- move from G (xmm) to E (mem or xmm). */
- if (sz =3D=3D 4 && insn[0] =3D=3D 0x0F && insn[1] =3D=3D 0x29) {
+ /* 0F 11 =3D MOVUPS -- move from G (xmm) to E (mem or xmm). */
+ if (sz =3D=3D 4 && insn[0] =3D=3D 0x0F=20
+ && (insn[1] =3D=3D 0x29 || insn[1] =3D=3D 0x11)) {
modrm =3D getIByte(delta+2);
if (epartIsReg(modrm)) {
/* fall through; awaiting test case */
} else {
addr =3D disAMode ( &alen, sorb, delta+2, dis_buf );
storeLE( mkexpr(addr), getXMMReg(gregOfRM(modrm)) );
- DIP("movaps %s,%s\n", nameXMMReg(gregOfRM(modrm)),
- dis_buf );
+ DIP("mov[ua]ps %s,%s\n", nameXMMReg(gregOfRM(modrm)),
+ dis_buf );
delta +=3D 2+alen;
goto decode_success;
}
|