From: Julian Seward Date: Sun, 3 Jun 2012 23:12:33 +0000 (+0000) Subject: Implement X-Git-Tag: svn/VALGRIND_3_8_1^2~108 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=4ce2ff052b891e63017168fd77307e7f982bc4bc;p=thirdparty%2Fvalgrind.git Implement VMOVUPD ymm2/m256, ymm1 = VEX.256.66.0F.WIG 10 /r VMOVUPD ymm1, ymm2/m256 = VEX.256.66.0F.WIG 11 /r git-svn-id: svn://svn.valgrind.org/vex/trunk@2370 --- diff --git a/VEX/priv/guest_amd64_toIR.c b/VEX/priv/guest_amd64_toIR.c index 5444ae3fc3..99cd15e758 100644 --- a/VEX/priv/guest_amd64_toIR.c +++ b/VEX/priv/guest_amd64_toIR.c @@ -19831,6 +19831,23 @@ Long dis_ESC_0F__VEX ( delta += alen; goto decode_success; } + /* VMOVUPD ymm2/m256, ymm1 = VEX.256.66.0F.WIG 10 /r */ + if (have66noF2noF3(pfx) && 1==getVexL(pfx)/*256*/) { + UChar modrm = getUChar(delta); + UInt rG = gregOfRexRM(pfx, modrm); + if (epartIsReg(modrm)) { + UInt rE = eregOfRexRM(pfx,modrm); + putYMMReg( rG, getYMMReg( rE )); + DIP("vmovupd %s,%s\n", nameYMMReg(rE), nameYMMReg(rG)); + delta += 1; + } else { + addr = disAMode ( &alen, vbi, pfx, delta, dis_buf, 0 ); + putYMMReg( rG, loadLE(Ity_V256, mkexpr(addr)) ); + DIP("vmovupd %s,%s\n", dis_buf, nameYMMReg(rG)); + delta += alen; + } + goto decode_success; + } break; case 0x11: @@ -19892,6 +19909,23 @@ Long dis_ESC_0F__VEX ( } goto decode_success; } + /* VMOVUPD ymm1, ymm2/m256 = VEX.256.66.0F.WIG 11 /r */ + if (have66noF2noF3(pfx) && 1==getVexL(pfx)/*256*/) { + UChar modrm = getUChar(delta); + UInt rG = gregOfRexRM(pfx,modrm); + if (epartIsReg(modrm)) { + UInt rE = eregOfRexRM(pfx,modrm); + putYMMReg( rE, getYMMReg(rG) ); + DIP("vmovupd %s,%s\n", nameYMMReg(rG), nameYMMReg(rE)); + delta += 1; + } else { + addr = disAMode ( &alen, vbi, pfx, delta, dis_buf, 0 ); + storeLE( mkexpr(addr), getYMMReg(rG) ); + DIP("vmovupd %s,%s\n", nameYMMReg(rG), dis_buf); + delta += alen; + } + goto decode_success; + } break; case 0x12: