From: Julian Seward Date: Tue, 22 May 2012 23:34:06 +0000 (+0000) Subject: Implement X-Git-Tag: svn/VALGRIND_3_8_1^2~138 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=36181d405f3fb3f96aa21f088dc230b8bb98b987;p=thirdparty%2Fvalgrind.git Implement VMOVHLPS xmm3, xmm2, xmm1 = VEX.NDS.128.0F.WIG 12 /r git-svn-id: svn://svn.valgrind.org/vex/trunk@2340 --- diff --git a/VEX/priv/guest_amd64_toIR.c b/VEX/priv/guest_amd64_toIR.c index d765fce3ef..2a210f5045 100644 --- a/VEX/priv/guest_amd64_toIR.c +++ b/VEX/priv/guest_amd64_toIR.c @@ -19734,11 +19734,30 @@ Long dis_ESC_0F__VEX ( break; case 0x12: - /* MOVDDUP xmm2/m64, xmm1 = VEX.128.F2.0F.WIG /12 r */ + /* VMOVDDUP xmm2/m64, xmm1 = VEX.128.F2.0F.WIG /12 r */ if (haveF2no66noF3(pfx) && 0==getVexL(pfx)/*128*/) { delta = dis_MOVDDUP_128( vbi, pfx, delta, True/*isAvx*/ ); goto decode_success; } + /* VMOVHLPS xmm3, xmm2, xmm1 = VEX.NDS.128.0F.WIG 12 /r */ + /* Insn only exists in reg form */ + if (haveNo66noF2noF3(pfx) && 0==getVexL(pfx)/*128*/ + && epartIsReg(getUChar(delta))) { + UChar modrm = getUChar(delta); + UInt rG = gregOfRexRM(pfx, modrm); + UInt rE = eregOfRexRM(pfx, modrm); + UInt rV = getVexNvvvv(pfx); + delta++; + DIP("vmovhlps %s,%s,%s\n", + nameXMMReg(rE), nameXMMReg(rV), nameXMMReg(rG)); + IRTemp res = newTemp(Ity_V128); + assign(res, binop(Iop_64HLtoV128, + getXMMRegLane64(rV, 1), + getXMMRegLane64(rE, 1))); + putYMMRegLoAndZU(rG, mkexpr(res)); + *uses_vvvv = True; + goto decode_success; + } break; case 0x14: