VirtualBox

Changeset 65609 in vbox


Ignore:
Timestamp:
Feb 3, 2017 8:21:16 PM (8 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
113280
Message:

IEM: 0x0f 0x28 split up.

File:
1 edited

Legend:

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

    r65608 r65609  
    19851985
    19861986
    1987 /** Opcode 0x0f 0x28. */
    1988 FNIEMOP_DEF(iemOp_movaps_Vps_Wps__movapd_Vpd_Wpd)
    1989 {
    1990     if (!(pVCpu->iem.s.fPrefixes & IEM_OP_PRF_SIZE_OP))
    1991         IEMOP_MNEMONIC(movaps_r_mr, "movaps r,mr");
    1992     else
    1993         IEMOP_MNEMONIC(movapd_r_mr, "movapd r,mr");
     1987/** Opcode      0x0f 0x28 - vmovaps Vps, Wps */
     1988FNIEMOP_DEF(iemOp_vmovaps_Vps_Wps)
     1989{
     1990    IEMOP_MNEMONIC(movaps_r_mr, "movaps r,mr");
    19941991    uint8_t bRm; IEM_OPCODE_GET_NEXT_U8(&bRm);
    19951992    if ((bRm & X86_MODRM_MOD_MASK) == (3 << X86_MODRM_MOD_SHIFT))
     
    19981995         * Register, register.
    19991996         */
    2000         IEMOP_HLP_DONE_DECODING_NO_LOCK_REPZ_OR_REPNZ_PREFIXES();
     1997        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    20011998        IEM_MC_BEGIN(0, 0);
    2002         if (!(pVCpu->iem.s.fPrefixes & IEM_OP_PRF_SIZE_OP))
    2003             IEM_MC_MAYBE_RAISE_SSE_RELATED_XCPT();
    2004         else
    2005             IEM_MC_MAYBE_RAISE_SSE2_RELATED_XCPT();
     1999        IEM_MC_MAYBE_RAISE_SSE_RELATED_XCPT();
    20062000        IEM_MC_ACTUALIZE_SSE_STATE_FOR_CHANGE();
    20072001        IEM_MC_COPY_XREG_U128(((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | pVCpu->iem.s.uRexReg,
     
    20202014
    20212015        IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffSrc, bRm, 0);
    2022         IEMOP_HLP_DONE_DECODING_NO_LOCK_REPZ_OR_REPNZ_PREFIXES(); /** @todo check if this is delayed this long for REPZ/NZ */
    2023         if (!(pVCpu->iem.s.fPrefixes & IEM_OP_PRF_SIZE_OP))
    2024             IEM_MC_MAYBE_RAISE_SSE_RELATED_XCPT();
    2025         else
    2026             IEM_MC_MAYBE_RAISE_SSE2_RELATED_XCPT();
     2016        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
     2017        IEM_MC_MAYBE_RAISE_SSE_RELATED_XCPT();
    20272018        IEM_MC_ACTUALIZE_SSE_STATE_FOR_CHANGE();
    20282019
     
    20362027}
    20372028
     2029/** Opcode 0x66 0x0f 0x28 - vmovapd Vpd, Wpd */
     2030FNIEMOP_DEF(iemOp_vmovapd_Vpd_Wpd)
     2031{
     2032    IEMOP_MNEMONIC(movapd_r_mr, "movapd r,mr");
     2033    uint8_t bRm; IEM_OPCODE_GET_NEXT_U8(&bRm);
     2034    if ((bRm & X86_MODRM_MOD_MASK) == (3 << X86_MODRM_MOD_SHIFT))
     2035    {
     2036        /*
     2037         * Register, register.
     2038         */
     2039        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
     2040        IEM_MC_BEGIN(0, 0);
     2041        IEM_MC_MAYBE_RAISE_SSE2_RELATED_XCPT();
     2042        IEM_MC_ACTUALIZE_SSE_STATE_FOR_CHANGE();
     2043        IEM_MC_COPY_XREG_U128(((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | pVCpu->iem.s.uRexReg,
     2044                              (bRm & X86_MODRM_RM_MASK) | pVCpu->iem.s.uRexB);
     2045        IEM_MC_ADVANCE_RIP();
     2046        IEM_MC_END();
     2047    }
     2048    else
     2049    {
     2050        /*
     2051         * Register, memory.
     2052         */
     2053        IEM_MC_BEGIN(0, 2);
     2054        IEM_MC_LOCAL(uint128_t,                 uSrc); /** @todo optimize this one day... */
     2055        IEM_MC_LOCAL(RTGCPTR,                   GCPtrEffSrc);
     2056
     2057        IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffSrc, bRm, 0);
     2058        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
     2059        IEM_MC_MAYBE_RAISE_SSE2_RELATED_XCPT();
     2060        IEM_MC_ACTUALIZE_SSE_STATE_FOR_CHANGE();
     2061
     2062        IEM_MC_FETCH_MEM_U128_ALIGN_SSE(uSrc, pVCpu->iem.s.iEffSeg, GCPtrEffSrc);
     2063        IEM_MC_STORE_XREG_U128(((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | pVCpu->iem.s.uRexReg, uSrc);
     2064
     2065        IEM_MC_ADVANCE_RIP();
     2066        IEM_MC_END();
     2067    }
     2068    return VINF_SUCCESS;
     2069}
     2070
     2071/*  Opcode 0xf3 0x0f 0x28 - invalid */
     2072/*  Opcode 0xf2 0x0f 0x28 - invalid */
    20382073
    20392074/** Opcode 0x0f 0x29. */
     
    79267961    /* 0x26 */  iemOp_mov_Td_Rd,            iemOp_mov_Td_Rd,            iemOp_mov_Td_Rd,            iemOp_mov_Td_Rd,
    79277962    /* 0x27 */  iemOp_Invalid,              iemOp_Invalid,              iemOp_Invalid,              iemOp_Invalid,
    7928     /* 0x28 */  iemOp_movaps_Vps_Wps__movapd_Vpd_Wpd, iemOp_movaps_Vps_Wps__movapd_Vpd_Wpd, iemOp_InvalidNeedRM, iemOp_InvalidNeedRM,
     7963    /* 0x28 */  iemOp_vmovaps_Vps_Wps,      iemOp_vmovapd_Vpd_Wpd,      iemOp_InvalidNeedRM,        iemOp_InvalidNeedRM,
    79297964    /* 0x29 */  iemOp_movaps_Wps_Vps__movapd_Wpd_Vpd, iemOp_movaps_Wps_Vps__movapd_Wpd_Vpd, iemOp_movntps_Mps_Vps__movntpd_Mpd_Vpd, iemOp_InvalidNeedRM,
    79307965    /* 0x2a */  iemOp_cvtpi2ps_Vps_Qpi,     iemOp_cvtpi2pd_Vpd_Qpi,     iemOp_vcvtsi2ss_Vss_Hss_Ey, iemOp_vcvtsi2sd_Vsd_Hsd_Ey,
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