|
From: <sv...@va...> - 2005-11-01 18:59:44
|
Author: sewardj
Date: 2005-11-01 18:59:38 +0000 (Tue, 01 Nov 2005)
New Revision: 1427
Log:
Implement 66 0F 11 =3D MOVUPD (untested)
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-10-29 22:30:47 UTC (rev 1426)
+++ trunk/priv/guest-amd64/toIR.c 2005-11-01 18:59:38 UTC (rev 1427)
@@ -9777,15 +9777,17 @@
}
=20
/* 66 0F 29 =3D MOVAPD -- move from G (xmm) to E (mem or xmm). */
- if (have66noF2noF3(pfx) && insn[0] =3D=3D 0x0F && insn[1] =3D=3D 0x29=
) {
+ /* 66 0F 11 =3D MOVUPD -- move from G (xmm) to E (mem or xmm). */
+ if (have66noF2noF3(pfx) && insn[0] =3D=3D 0x0F=20
+ && (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("movapd %s,%s\n", nameXMMReg(gregOfRexRM(pfx,modrm)),
- dis_buf );
+ DIP("mov[ua]pd %s,%s\n", nameXMMReg(gregOfRexRM(pfx,modrm)),
+ dis_buf );
delta +=3D 2+alen;
goto decode_success;
}
|