VirtualBox

Changeset 65608 in vbox


Ignore:
Timestamp:
Feb 3, 2017 8:11:09 PM (8 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
113279
Message:

IEM: 0x0f 0x13 split up.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/VMM/VMMAll/IEMAllInstructions.cpp.h

    r65607 r65608  
    17281728FNIEMOP_STUB(iemOp_vmovddup_Vx_Wx);  //NEXT
    17291729
    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 */
     1731FNIEMOP_STUB(iemOp_vmovlps_Mq_Vq);
     1732
     1733/** Opcode 0x66 0x0f 0x13 - vmovlpd Mq, Vq */
     1734FNIEMOP_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    {
    17411740#if 0
    1742             /*
    1743              * Register, register.
    1744              */
    1745             IEMOP_HLP_DONE_DECODING_NO_LOCK_REPZ_OR_REPNZ_PREFIXES();
    1746             IEM_MC_BEGIN(0, 1);
    1747             IEM_MC_LOCAL(uint64_t,                  uSrc);
    1748             IEM_MC_MAYBE_RAISE_SSE2_RELATED_XCPT();
    1749             IEM_MC_ACTUALIZE_SSE_STATE_FOR_CHANGE();
    1750             IEM_MC_FETCH_XREG_U64(uSrc, ((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | pVCpu->iem.s.uRexReg);
    1751             IEM_MC_STORE_XREG_U64((bRm & X86_MODRM_RM_MASK) | pVCpu->iem.s.uRexB, uSrc);
    1752             IEM_MC_ADVANCE_RIP();
    1753             IEM_MC_END();
     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();
    17541753#else
    1755             return IEMOP_RAISE_INVALID_OPCODE();
     1754        return IEMOP_RAISE_INVALID_OPCODE();
    17561755#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 */
    17851782
    17861783/** Opcode      0x0f 0x14 - vunpcklps Vx, Hx, Wx*/
     
    79077904    /* 0x11 */  iemOp_vmovups_Wps_Vps,      iemOp_vmovupd_Wpd_Vpd,      iemOp_vmovss_Wss_Hx_Vss,    iemOp_vmovsd_Wsd_Hx_Vsd,
    79087905    /* 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,
    79107907    /* 0x14 */  iemOp_vunpcklps_Vx_Hx_Wx,   iemOp_vunpcklpd_Vx_Hx_Wx,   iemOp_InvalidNeedRM,        iemOp_InvalidNeedRM,
    79117908    /* 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.

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette