]> git.ipfire.org Git - thirdparty/valgrind.git/commitdiff
Implement 3DNow! prefetch insn (prefetch, prefetchw). Fixes #120410.
authorJulian Seward <jseward@acm.org>
Mon, 6 Mar 2006 14:07:58 +0000 (14:07 +0000)
committerJulian Seward <jseward@acm.org>
Mon, 6 Mar 2006 14:07:58 +0000 (14:07 +0000)
git-svn-id: svn://svn.valgrind.org/vex/trunk@1585

VEX/priv/guest-x86/toIR.c

index 2c89f650f106f90c748d8a51246479e164f644bb..a098ae3e5518b7dbf2e529bd0623dc2924a78b56 100644 (file)
@@ -8101,6 +8101,29 @@ DisResult disInstr_X86_WRK (
       goto decode_success;
    }
 
+   /* 0F 0D /0 = PREFETCH  m8 -- 3DNow! prefetch */
+   /* 0F 0D /1 = PREFETCHW m8 -- ditto, with some other hint */
+   if (insn[0] == 0x0F && insn[1] == 0x0D
+       && !epartIsReg(insn[2]) 
+       && gregOfRM(insn[2]) >= 0 && gregOfRM(insn[2]) <= 1) {
+      HChar* hintstr = "??";
+
+      modrm = getIByte(delta+2);
+      vassert(!epartIsReg(modrm));
+
+      addr = disAMode ( &alen, sorb, delta+2, dis_buf );
+      delta += 2+alen;
+
+      switch (gregOfRM(modrm)) {
+         case 0: hintstr = ""; break;
+         case 1: hintstr = "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 = PSADBW -- sum of 8Ux8 absolute differences */
    if (sz == 4 && insn[0] == 0x0F && insn[1] == 0xF6) {