VirtualBox

Changeset 65769 in vbox


Ignore:
Timestamp:
Feb 13, 2017 3:07:12 PM (8 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
113492
Message:

IEM: 0x0f 0x29 split up.

File:
1 edited

Legend:

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

    r65766 r65769  
    14621462/*  Opcode 0xf2 0x0f 0x28 - invalid */
    14631463
    1464 /** Opcode 0x0f 0x29. */
    1465 FNIEMOP_DEF(iemOp_movaps_Wps_Vps__movapd_Wpd_Vpd) /** @todo split me */
    1466 {
    1467     if (!(pVCpu->iem.s.fPrefixes & IEM_OP_PRF_SIZE_OP))
    1468         IEMOP_MNEMONIC(movaps_mr_r, "movaps Wps,Vps");
    1469     else
    1470         IEMOP_MNEMONIC(movapd_mr_r, "movapd Wpd,Vpd");
     1464/** Opcode      0x0f 0x29 - vmovaps Wps, Vps */
     1465FNIEMOP_DEF(iemOp_vmovaps_Wps_Vps)
     1466{
     1467    IEMOP_MNEMONIC(movaps_mr_r, "movaps Wps,Vps");
    14711468    uint8_t bRm; IEM_OPCODE_GET_NEXT_U8(&bRm);
    14721469    if ((bRm & X86_MODRM_MOD_MASK) == (3 << X86_MODRM_MOD_SHIFT))
     
    14771474        IEMOP_HLP_DONE_DECODING_NO_LOCK_REPZ_OR_REPNZ_PREFIXES();
    14781475        IEM_MC_BEGIN(0, 0);
    1479         if (!(pVCpu->iem.s.fPrefixes & IEM_OP_PRF_SIZE_OP))
    1480             IEM_MC_MAYBE_RAISE_SSE_RELATED_XCPT();
    1481         else
    1482             IEM_MC_MAYBE_RAISE_SSE2_RELATED_XCPT();
     1476        IEM_MC_MAYBE_RAISE_SSE_RELATED_XCPT();
    14831477        IEM_MC_ACTUALIZE_SSE_STATE_FOR_CHANGE();
    14841478        IEM_MC_COPY_XREG_U128((bRm & X86_MODRM_RM_MASK) | pVCpu->iem.s.uRexB,
     
    14981492        IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffSrc, bRm, 0);
    14991493        IEMOP_HLP_DONE_DECODING_NO_LOCK_REPZ_OR_REPNZ_PREFIXES(); /** @todo check if this is delayed this long for REPZ/NZ */
    1500         if (!(pVCpu->iem.s.fPrefixes & IEM_OP_PRF_SIZE_OP))
    1501             IEM_MC_MAYBE_RAISE_SSE_RELATED_XCPT();
    1502         else
    1503             IEM_MC_MAYBE_RAISE_SSE2_RELATED_XCPT();
     1494        IEM_MC_MAYBE_RAISE_SSE_RELATED_XCPT();
    15041495        IEM_MC_ACTUALIZE_SSE_STATE_FOR_READ();
    15051496
     
    15121503    return VINF_SUCCESS;
    15131504}
     1505
     1506/** Opcode 0x66 0x0f 0x29 - vmovapd Wpd,Vpd */
     1507FNIEMOP_DEF(iemOp_vmovapd_Wpd_Vpd)
     1508{
     1509    IEMOP_MNEMONIC(movapd_mr_r, "movapd Wpd,Vpd");
     1510    uint8_t bRm; IEM_OPCODE_GET_NEXT_U8(&bRm);
     1511    if ((bRm & X86_MODRM_MOD_MASK) == (3 << X86_MODRM_MOD_SHIFT))
     1512    {
     1513        /*
     1514         * Register, register.
     1515         */
     1516        IEMOP_HLP_DONE_DECODING_NO_LOCK_REPZ_OR_REPNZ_PREFIXES();
     1517        IEM_MC_BEGIN(0, 0);
     1518        IEM_MC_MAYBE_RAISE_SSE2_RELATED_XCPT();
     1519        IEM_MC_ACTUALIZE_SSE_STATE_FOR_CHANGE();
     1520        IEM_MC_COPY_XREG_U128((bRm & X86_MODRM_RM_MASK) | pVCpu->iem.s.uRexB,
     1521                              ((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | pVCpu->iem.s.uRexReg);
     1522        IEM_MC_ADVANCE_RIP();
     1523        IEM_MC_END();
     1524    }
     1525    else
     1526    {
     1527        /*
     1528         * Memory, register.
     1529         */
     1530        IEM_MC_BEGIN(0, 2);
     1531        IEM_MC_LOCAL(uint128_t,                 uSrc); /** @todo optimize this one day... */
     1532        IEM_MC_LOCAL(RTGCPTR,                   GCPtrEffSrc);
     1533
     1534        IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffSrc, bRm, 0);
     1535        IEMOP_HLP_DONE_DECODING_NO_LOCK_REPZ_OR_REPNZ_PREFIXES(); /** @todo check if this is delayed this long for REPZ/NZ */
     1536        IEM_MC_MAYBE_RAISE_SSE2_RELATED_XCPT();
     1537        IEM_MC_ACTUALIZE_SSE_STATE_FOR_READ();
     1538
     1539        IEM_MC_FETCH_XREG_U128(uSrc, ((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | pVCpu->iem.s.uRexReg);
     1540        IEM_MC_STORE_MEM_U128_ALIGN_SSE(pVCpu->iem.s.iEffSeg, GCPtrEffSrc, uSrc);
     1541
     1542        IEM_MC_ADVANCE_RIP();
     1543        IEM_MC_END();
     1544    }
     1545    return VINF_SUCCESS;
     1546}
     1547
     1548/*  Opcode 0xf3 0x0f 0x29 - invalid */
     1549/*  Opcode 0xf2 0x0f 0x29 - invalid */
    15141550
    15151551
     
    76277663    /* 0x27 */  iemOp_Invalid,              iemOp_Invalid,              iemOp_Invalid,              iemOp_Invalid,
    76287664    /* 0x28 */  iemOp_vmovaps_Vps_Wps,      iemOp_vmovapd_Vpd_Wpd,      iemOp_InvalidNeedRM,        iemOp_InvalidNeedRM,
    7629     /* 0x29 */  iemOp_movaps_Wps_Vps__movapd_Wpd_Vpd, iemOp_movaps_Wps_Vps__movapd_Wpd_Vpd, iemOp_InvalidNeedRM, iemOp_InvalidNeedRM,  /** @todo split me */
     7665    /* 0x29 */  iemOp_vmovaps_Wps_Vps,      iemOp_vmovapd_Wpd_Vpd,      iemOp_InvalidNeedRM,        iemOp_InvalidNeedRM,
    76307666    /* 0x2a */  iemOp_cvtpi2ps_Vps_Qpi,     iemOp_cvtpi2pd_Vpd_Qpi,     iemOp_vcvtsi2ss_Vss_Hss_Ey, iemOp_vcvtsi2sd_Vsd_Hsd_Ey,
    76317667    /* 0x2b */  iemOp_movntps_Mps_Vps__movntpd_Mpd_Vpd, iemOp_movntps_Mps_Vps__movntpd_Mpd_Vpd,     iemOp_InvalidNeedRM, iemOp_InvalidNeedRM, /** @todo split me */
     
    79127948    /* 0x27 */  IEMOP_X4(iemOp_InvalidNeedRM),
    79137949    /* 0x28 */  iemOp_vmovaps_Vps_Wps,      iemOp_vmovapd_Vpd_Wpd,      iemOp_InvalidNeedRM,        iemOp_InvalidNeedRM,
    7914     /* 0x29 */  iemOp_movaps_Wps_Vps__movapd_Wpd_Vpd, iemOp_movaps_Wps_Vps__movapd_Wpd_Vpd, iemOp_InvalidNeedRM, iemOp_InvalidNeedRM,  /** @todo split me */
     7950    /* 0x29 */  iemOp_vmovaps_Wps_Vps,      iemOp_vmovapd_Wpd_Vpd,      iemOp_InvalidNeedRM,        iemOp_InvalidNeedRM,
    79157951    /* 0x2a */  iemOp_InvalidNeedRM,        iemOp_InvalidNeedRM,        iemOp_vcvtsi2ss_Vss_Hss_Ey, iemOp_vcvtsi2sd_Vsd_Hsd_Ey,
    79167952    /* 0x2b */  iemOp_movntps_Mps_Vps__movntpd_Mpd_Vpd, iemOp_movntps_Mps_Vps__movntpd_Mpd_Vpd,     iemOp_InvalidNeedRM, iemOp_InvalidNeedRM, /** @todo split me */
Note: See TracChangeset for help on using the changeset viewer.

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