|
From: <sv...@va...> - 2006-03-06 14:32:11
|
Author: sewardj
Date: 2006-03-06 14:32:00 +0000 (Mon, 06 Mar 2006)
New Revision: 1586
Log:
Merge r1585 (3DNow! prefetch insn (prefetch, prefetchw))
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 14:07:58 UTC=
(rev 1585)
+++ branches/VEX_3_1_BRANCH/priv/guest-x86/toIR.c 2006-03-06 14:32:00 UTC=
(rev 1586)
@@ -7970,6 +7970,29 @@
goto decode_success;
}
=20
+ /* 0F 0D /0 =3D PREFETCH m8 -- 3DNow! prefetch */
+ /* 0F 0D /1 =3D PREFETCHW m8 -- ditto, with some other hint */
+ if (insn[0] =3D=3D 0x0F && insn[1] =3D=3D 0x0D
+ && !epartIsReg(insn[2])=20
+ && gregOfRM(insn[2]) >=3D 0 && gregOfRM(insn[2]) <=3D 1) {
+ HChar* hintstr =3D "??";
+
+ modrm =3D getIByte(delta+2);
+ vassert(!epartIsReg(modrm));
+
+ addr =3D disAMode ( &alen, sorb, delta+2, dis_buf );
+ delta +=3D 2+alen;
+
+ switch (gregOfRM(modrm)) {
+ case 0: hintstr =3D ""; break;
+ case 1: hintstr =3D "w"; break;
+ default: vassert(0); /*NOTREACHED*/
+ }
+
+ DIP("prefetch%s %s\n", hintstr, dis_buf);
+ goto decode_success;
+ }
+
/* ***--- this is an MMX class insn introduced in SSE1 ---*** */
/* 0F F6 =3D PSADBW -- sum of 8Ux8 absolute differences */
if (sz =3D=3D 4 && insn[0] =3D=3D 0x0F && insn[1] =3D=3D 0xF6) {
|