commit 6c07dca0af0527226ec9784fbb703526887f09c0 Author: sewardj Date: Tue Mar 26 10:27:39 2013 +0000 Implement SSE4 MOVNTDQA insn. Fixes #316503. (Patrick J. LoPresti, lopresti@gmail.com) git-svn-id: svn://svn.valgrind.org/vex/trunk@2700 8f6e269a-dfd6-0310-a8e1-e2731360e62c diff --git a/VEX/priv/guest_amd64_toIR.c b/VEX/priv/guest_amd64_toIR.c index 1034971..7e98e76 100644 --- a/VEX/priv/guest_amd64_toIR.c +++ b/VEX/priv/guest_amd64_toIR.c @@ -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 */