]> git.ipfire.org Git - thirdparty/valgrind.git/commitdiff
Implement SSE4 MOVNTDQA insn. Fixes #316503.
authorJulian Seward <jseward@acm.org>
Tue, 26 Mar 2013 10:27:39 +0000 (10:27 +0000)
committerJulian Seward <jseward@acm.org>
Tue, 26 Mar 2013 10:27:39 +0000 (10:27 +0000)
(Patrick J. LoPresti, lopresti@gmail.com)

git-svn-id: svn://svn.valgrind.org/vex/trunk@2700

VEX/priv/guest_amd64_toIR.c

index 103497183669fc2e6e2fc2fcfa605ebfc6ae84ed..7e98e761e641f695bbe23da4c95d58ce4d63bba9 100644 (file)
@@ -16378,6 +16378,25 @@ Long dis_ESC_0F38__SSE4 ( Bool* decode_OK,
       }
       break;
 
+   case 0x2A:
+      /* 66 0F 38 2A = MOVNTDQA
+         "non-temporal" "streaming" load
+         Handle like MOVDQA but only memory operand is allowed */
+      if (have66noF2noF3(pfx) && sz == 2) {
+         modrm = getUChar(delta);
+         if (!epartIsReg(modrm)) {
+            addr = disAMode ( &alen, vbi, pfx, delta, dis_buf, 0 );
+            gen_SEGV_if_not_16_aligned( addr );
+            putXMMReg( gregOfRexRM(pfx,modrm),
+                       loadLE(Ity_V128, mkexpr(addr)) );
+            DIP("movntdqa %s,%s\n", dis_buf,
+                                    nameXMMReg(gregOfRexRM(pfx,modrm)));
+            delta += alen;
+            goto decode_success;
+         }
+      }
+      break;
+
    case 0x2B:
       /* 66 0f 38 2B /r = PACKUSDW xmm1, xmm2/m128
          2x 32x4 S->U saturating narrow from xmm2/m128 to xmm1 */