Changeset 65608 in vbox
- Timestamp:
- Feb 3, 2017 8:11:09 PM (8 years ago)
- svn:sync-xref-src-repo-rev:
- 113279
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/VMM/VMMAll/IEMAllInstructions.cpp.h
r65607 r65608 1728 1728 FNIEMOP_STUB(iemOp_vmovddup_Vx_Wx); //NEXT 1729 1729 1730 1731 /** Opcode 0x0f 0x13. */ 1732 FNIEMOP_DEF(iemOp_movlps_Mq_Vq__movlpd_Mq_Vq) 1733 { 1734 /* Quick hack. Need to restructure all of this later some time. */ 1735 if (pVCpu->iem.s.fPrefixes == IEM_OP_PRF_SIZE_OP) 1736 { 1737 IEMOP_MNEMONIC(movlpd_Mq_Vq, "movlpd Mq,Vq"); 1738 uint8_t bRm; IEM_OPCODE_GET_NEXT_U8(&bRm); 1739 if ((bRm & X86_MODRM_MOD_MASK) == (3 << X86_MODRM_MOD_SHIFT)) 1740 { 1730 /** Opcode 0x0f 0x13 - vmovlps Mq, Vq */ 1731 FNIEMOP_STUB(iemOp_vmovlps_Mq_Vq); 1732 1733 /** Opcode 0x66 0x0f 0x13 - vmovlpd Mq, Vq */ 1734 FNIEMOP_DEF(iemOp_vmovlpd_Mq_Vq) 1735 { 1736 IEMOP_MNEMONIC(movlpd_Mq_Vq, "movlpd Mq,Vq"); 1737 uint8_t bRm; IEM_OPCODE_GET_NEXT_U8(&bRm); 1738 if ((bRm & X86_MODRM_MOD_MASK) == (3 << X86_MODRM_MOD_SHIFT)) 1739 { 1741 1740 #if 0 1742 1743 1744 1745 1746 1747 1748 1749 1750 1751 1752 1753 1741 /* 1742 * Register, register. 1743 */ 1744 IEMOP_HLP_DONE_DECODING_NO_LOCK_REPZ_OR_REPNZ_PREFIXES(); 1745 IEM_MC_BEGIN(0, 1); 1746 IEM_MC_LOCAL(uint64_t, uSrc); 1747 IEM_MC_MAYBE_RAISE_SSE2_RELATED_XCPT(); 1748 IEM_MC_ACTUALIZE_SSE_STATE_FOR_CHANGE(); 1749 IEM_MC_FETCH_XREG_U64(uSrc, ((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | pVCpu->iem.s.uRexReg); 1750 IEM_MC_STORE_XREG_U64((bRm & X86_MODRM_RM_MASK) | pVCpu->iem.s.uRexB, uSrc); 1751 IEM_MC_ADVANCE_RIP(); 1752 IEM_MC_END(); 1754 1753 #else 1755 1754 return IEMOP_RAISE_INVALID_OPCODE(); 1756 1755 #endif 1757 } 1758 else 1759 { 1760 /* 1761 * Memory, register. 1762 */ 1763 IEM_MC_BEGIN(0, 2); 1764 IEM_MC_LOCAL(uint64_t, uSrc); 1765 IEM_MC_LOCAL(RTGCPTR, GCPtrEffSrc); 1766 1767 IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffSrc, bRm, 0); 1768 IEMOP_HLP_DONE_DECODING_NO_LOCK_REPZ_OR_REPNZ_PREFIXES(); /** @todo check if this is delayed this long for REPZ/NZ - yes it generally is! */ 1769 IEM_MC_MAYBE_RAISE_SSE2_RELATED_XCPT(); 1770 IEM_MC_ACTUALIZE_SSE_STATE_FOR_READ(); 1771 1772 IEM_MC_FETCH_XREG_U64(uSrc, ((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | pVCpu->iem.s.uRexReg); 1773 IEM_MC_STORE_MEM_U64(pVCpu->iem.s.iEffSeg, GCPtrEffSrc, uSrc); 1774 1775 IEM_MC_ADVANCE_RIP(); 1776 IEM_MC_END(); 1777 } 1778 return VINF_SUCCESS; 1779 } 1780 1781 IEMOP_BITCH_ABOUT_STUB(); 1782 return VERR_IEM_INSTR_NOT_IMPLEMENTED; 1783 } 1784 1756 } 1757 else 1758 { 1759 /* 1760 * Memory, register. 1761 */ 1762 IEM_MC_BEGIN(0, 2); 1763 IEM_MC_LOCAL(uint64_t, uSrc); 1764 IEM_MC_LOCAL(RTGCPTR, GCPtrEffSrc); 1765 1766 IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffSrc, bRm, 0); 1767 IEMOP_HLP_DONE_DECODING_NO_LOCK_REPZ_OR_REPNZ_PREFIXES(); /** @todo check if this is delayed this long for REPZ/NZ - yes it generally is! */ 1768 IEM_MC_MAYBE_RAISE_SSE2_RELATED_XCPT(); 1769 IEM_MC_ACTUALIZE_SSE_STATE_FOR_READ(); 1770 1771 IEM_MC_FETCH_XREG_U64(uSrc, ((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | pVCpu->iem.s.uRexReg); 1772 IEM_MC_STORE_MEM_U64(pVCpu->iem.s.iEffSeg, GCPtrEffSrc, uSrc); 1773 1774 IEM_MC_ADVANCE_RIP(); 1775 IEM_MC_END(); 1776 } 1777 return VINF_SUCCESS; 1778 } 1779 1780 /* Opcode 0xf3 0x0f 0x13 - invalid */ 1781 /* Opcode 0xf2 0x0f 0x13 - invalid */ 1785 1782 1786 1783 /** Opcode 0x0f 0x14 - vunpcklps Vx, Hx, Wx*/ … … 7907 7904 /* 0x11 */ iemOp_vmovups_Wps_Vps, iemOp_vmovupd_Wpd_Vpd, iemOp_vmovss_Wss_Hx_Vss, iemOp_vmovsd_Wsd_Hx_Vsd, 7908 7905 /* 0x12 */ iemOp_vmovlps_Vq_Hq_Mq__vmovhlps, iemOp_vmovlpd_Vq_Hq_Mq, iemOp_vmovsldup_Vx_Wx, iemOp_vmovddup_Vx_Wx, 7909 /* 0x13 */ iemOp_ movlps_Mq_Vq__movlpd_Mq_Vq, iemOp_movlps_Mq_Vq__movlpd_Mq_Vq, iemOp_InvalidNeedRM,iemOp_InvalidNeedRM,7906 /* 0x13 */ iemOp_vmovlps_Mq_Vq, iemOp_vmovlpd_Mq_Vq, iemOp_InvalidNeedRM, iemOp_InvalidNeedRM, 7910 7907 /* 0x14 */ iemOp_vunpcklps_Vx_Hx_Wx, iemOp_vunpcklpd_Vx_Hx_Wx, iemOp_InvalidNeedRM, iemOp_InvalidNeedRM, 7911 7908 /* 0x15 */ iemOp_vunpckhps_Vx_Hx_Wx, iemOp_vunpckhpd_Vx_Hx_Wx, iemOp_InvalidNeedRM, iemOp_InvalidNeedRM,
Note:
See TracChangeset
for help on using the changeset viewer.