|
From: <sv...@va...> - 2013-03-26 10:27:45
|
sewardj 2013-03-26 10:27:39 +0000 (Tue, 26 Mar 2013)
New Revision: 2700
Log:
Implement SSE4 MOVNTDQA insn. Fixes #316503.
(Patrick J. LoPresti, lop...@gm...)
Modified files:
trunk/priv/guest_amd64_toIR.c
Modified: trunk/priv/guest_amd64_toIR.c (+19 -0)
===================================================================
--- trunk/priv/guest_amd64_toIR.c 2013-03-25 17:13:12 +00:00 (rev 2699)
+++ trunk/priv/guest_amd64_toIR.c 2013-03-26 10:27:39 +00:00 (rev 2700)
@@ -16378,6 +16378,25 @@
}
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 */
|