]> git.ipfire.org Git - thirdparty/valgrind.git/commitdiff
Merge r1585 (3DNow! prefetch insn (prefetch, prefetchw))
authorJulian Seward <jseward@acm.org>
Mon, 6 Mar 2006 14:32:00 +0000 (14:32 +0000)
committerJulian Seward <jseward@acm.org>
Mon, 6 Mar 2006 14:32:00 +0000 (14:32 +0000)
git-svn-id: svn://svn.valgrind.org/vex/branches/VEX_3_1_BRANCH@1586

VEX/priv/guest-x86/toIR.c

index 183e7ce4247c1d0b136533f65da9750c413e243b..8f759ccd909351ef39d4305fbd1da9706c0835f8 100644 (file)
@@ -7970,6 +7970,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) {