VirtualBox

Changeset 65770 in vbox for trunk/src/VBox


Ignore:
Timestamp:
Feb 13, 2017 3:09:30 PM (8 years ago)
Author:
vboxsync
Message:

IEM: 0x0f 0x2c split up.

File:
1 edited

Legend:

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

    r65769 r65770  
    15601560
    15611561
    1562 /** Opcode 0x0f 0x2b. */
    1563 FNIEMOP_DEF(iemOp_movntps_Mps_Vps__movntpd_Mpd_Vpd) /** @todo split me */
    1564 {
    1565     if (!(pVCpu->iem.s.fPrefixes & IEM_OP_PRF_SIZE_OP))
    1566         IEMOP_MNEMONIC(movntps_mr_r, "movntps Mps,Vps");
    1567     else
    1568         IEMOP_MNEMONIC(movntpd_mr_r, "movntpd Mdq,Vpd");
     1562/** Opcode      0x0f 0x2b - vmovntps Mps, Vps */
     1563FNIEMOP_DEF(iemOp_vmovntps_Mps_Vps)
     1564{
     1565    IEMOP_MNEMONIC(movntps_mr_r, "movntps Mps,Vps");
    15691566    uint8_t bRm; IEM_OPCODE_GET_NEXT_U8(&bRm);
    15701567    if ((bRm & X86_MODRM_MOD_MASK) != (3 << X86_MODRM_MOD_SHIFT))
     
    15791576        IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffSrc, bRm, 0);
    15801577        IEMOP_HLP_DONE_DECODING_NO_LOCK_REPZ_OR_REPNZ_PREFIXES(); /** @todo check if this is delayed this long for REPZ/NZ */
    1581         if (!(pVCpu->iem.s.fPrefixes & IEM_OP_PRF_SIZE_OP))
    1582             IEM_MC_MAYBE_RAISE_SSE_RELATED_XCPT();
    1583         else
    1584             IEM_MC_MAYBE_RAISE_SSE2_RELATED_XCPT();
     1578        IEM_MC_MAYBE_RAISE_SSE_RELATED_XCPT();
    15851579        IEM_MC_ACTUALIZE_SSE_STATE_FOR_CHANGE();
    15861580
     
    15961590    return VINF_SUCCESS;
    15971591}
     1592
     1593/** Opcode 0x66 0x0f 0x2b - vmovntpd Mpd, Vpd */
     1594FNIEMOP_DEF(iemOp_vmovntpd_Mpd_Vpd)
     1595{
     1596    IEMOP_MNEMONIC(movntpd_mr_r, "movntpd Mdq,Vpd");
     1597    uint8_t bRm; IEM_OPCODE_GET_NEXT_U8(&bRm);
     1598    if ((bRm & X86_MODRM_MOD_MASK) != (3 << X86_MODRM_MOD_SHIFT))
     1599    {
     1600        /*
     1601         * memory, register.
     1602         */
     1603        IEM_MC_BEGIN(0, 2);
     1604        IEM_MC_LOCAL(uint128_t,                 uSrc); /** @todo optimize this one day... */
     1605        IEM_MC_LOCAL(RTGCPTR,                   GCPtrEffSrc);
     1606
     1607        IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffSrc, bRm, 0);
     1608        IEMOP_HLP_DONE_DECODING_NO_LOCK_REPZ_OR_REPNZ_PREFIXES(); /** @todo check if this is delayed this long for REPZ/NZ */
     1609        IEM_MC_MAYBE_RAISE_SSE2_RELATED_XCPT();
     1610        IEM_MC_ACTUALIZE_SSE_STATE_FOR_CHANGE();
     1611
     1612        IEM_MC_FETCH_XREG_U128(uSrc, ((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | pVCpu->iem.s.uRexReg);
     1613        IEM_MC_STORE_MEM_U128_ALIGN_SSE(pVCpu->iem.s.iEffSeg, GCPtrEffSrc, uSrc);
     1614
     1615        IEM_MC_ADVANCE_RIP();
     1616        IEM_MC_END();
     1617    }
     1618    /* The register, register encoding is invalid. */
     1619    else
     1620        return IEMOP_RAISE_INVALID_OPCODE();
     1621    return VINF_SUCCESS;
     1622}
     1623/*  Opcode 0xf3 0x0f 0x2b - invalid */
     1624/*  Opcode 0xf2 0x0f 0x2b - invalid */
    15981625
    15991626
     
    76657692    /* 0x29 */  iemOp_vmovaps_Wps_Vps,      iemOp_vmovapd_Wpd_Vpd,      iemOp_InvalidNeedRM,        iemOp_InvalidNeedRM,
    76667693    /* 0x2a */  iemOp_cvtpi2ps_Vps_Qpi,     iemOp_cvtpi2pd_Vpd_Qpi,     iemOp_vcvtsi2ss_Vss_Hss_Ey, iemOp_vcvtsi2sd_Vsd_Hsd_Ey,
    7667     /* 0x2b */  iemOp_movntps_Mps_Vps__movntpd_Mpd_Vpd, iemOp_movntps_Mps_Vps__movntpd_Mpd_Vpd,     iemOp_InvalidNeedRM, iemOp_InvalidNeedRM, /** @todo split me */
     7694    /* 0x2b */  iemOp_vmovntps_Mps_Vps,     iemOp_vmovntpd_Mpd_Vpd,     iemOp_InvalidNeedRM,        iemOp_InvalidNeedRM,
    76687695    /* 0x2c */  iemOp_cvttps2pi_Ppi_Wps,    iemOp_cvttpd2pi_Ppi_Wpd,    iemOp_vcvttss2si_Gy_Wss,    iemOp_vcvttsd2si_Gy_Wsd,
    76697696    /* 0x2d */  iemOp_cvtps2pi_Ppi_Wps,     iemOp_cvtpd2pi_Qpi_Wpd,     iemOp_vcvtss2si_Gy_Wss,     iemOp_vcvtsd2si_Gy_Wsd,
     
    79507977    /* 0x29 */  iemOp_vmovaps_Wps_Vps,      iemOp_vmovapd_Wpd_Vpd,      iemOp_InvalidNeedRM,        iemOp_InvalidNeedRM,
    79517978    /* 0x2a */  iemOp_InvalidNeedRM,        iemOp_InvalidNeedRM,        iemOp_vcvtsi2ss_Vss_Hss_Ey, iemOp_vcvtsi2sd_Vsd_Hsd_Ey,
    7952     /* 0x2b */  iemOp_movntps_Mps_Vps__movntpd_Mpd_Vpd, iemOp_movntps_Mps_Vps__movntpd_Mpd_Vpd,     iemOp_InvalidNeedRM, iemOp_InvalidNeedRM, /** @todo split me */
     7979    /* 0x2b */  iemOp_vmovntps_Mps_Vps,     iemOp_vmovntpd_Mpd_Vpd,     iemOp_InvalidNeedRM,        iemOp_InvalidNeedRM,
    79537980    /* 0x2c */  iemOp_InvalidNeedRM,        iemOp_InvalidNeedRM,        iemOp_vcvttss2si_Gy_Wss,    iemOp_vcvttsd2si_Gy_Wsd,
    79547981    /* 0x2d */  iemOp_InvalidNeedRM,        iemOp_InvalidNeedRM,        iemOp_vcvtss2si_Gy_Wss,     iemOp_vcvtsd2si_Gy_Wsd,
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