VirtualBox

Changeset 61651 in vbox


Ignore:
Timestamp:
Jun 10, 2016 11:24:37 AM (9 years ago)
Author:
vboxsync
Message:

IEM: quick movsd Wsd,Vsd impl for tindermac6.

Location:
trunk/src/VBox/VMM
Files:
3 edited

Legend:

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

    r61640 r61651  
    89088908#define IEM_MC_STORE_XREG_U128(a_iXReg, a_u128Value) \
    89098909    do { pIemCpu->CTX_SUFF(pCtx)->CTX_SUFF(pXState)->x87.aXMM[(a_iXReg)].xmm = (a_u128Value); } while (0)
     8910#define IEM_MC_STORE_XREG_U64(a_iXReg, a_u64Value) \
     8911    do { pIemCpu->CTX_SUFF(pCtx)->CTX_SUFF(pXState)->x87.aXMM[(a_iXReg)].au64[0] = (a_u64Value); } while (0)
    89108912#define IEM_MC_STORE_XREG_U64_ZX_U128(a_iXReg, a_u64Value) \
    89118913    do { pIemCpu->CTX_SUFF(pCtx)->CTX_SUFF(pXState)->x87.aXMM[(a_iXReg)].au64[0] = (a_u64Value); \
  • trunk/src/VBox/VMM/VMMAll/IEMAllInstructions.cpp.h

    r61650 r61651  
    15491549            IEM_MC_END();
    15501550        }
    1551         return VINF_SUCCESS;
    1552     }
    1553 
    1554     IEMOP_BITCH_ABOUT_STUB();
    1555     return VERR_IEM_INSTR_NOT_IMPLEMENTED;
     1551    }
     1552    else if (pIemCpu->fPrefixes == IEM_OP_PRF_REPNZ)
     1553    {
     1554        IEMOP_MNEMONIC("movsd Wsd,Vsd");
     1555        uint8_t bRm; IEM_OPCODE_GET_NEXT_U8(&bRm);
     1556        if ((bRm & X86_MODRM_MOD_MASK) == (3 << X86_MODRM_MOD_SHIFT))
     1557        {
     1558            /*
     1559             * Register, register.
     1560             */
     1561            IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
     1562            IEM_MC_BEGIN(0, 1);
     1563            IEM_MC_LOCAL(uint64_t,                  uSrc);
     1564
     1565            IEM_MC_MAYBE_RAISE_SSE2_RELATED_XCPT();
     1566            IEM_MC_ACTUALIZE_SSE_STATE_FOR_CHANGE();
     1567            IEM_MC_FETCH_XREG_U64(uSrc, ((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | pIemCpu->uRexReg);
     1568            IEM_MC_STORE_XREG_U64((bRm & X86_MODRM_RM_MASK) | pIemCpu->uRexB, uSrc);
     1569
     1570            IEM_MC_ADVANCE_RIP();
     1571            IEM_MC_END();
     1572        }
     1573        else
     1574        {
     1575            /*
     1576             * Memory, register.
     1577             */
     1578            IEM_MC_BEGIN(0, 2);
     1579            IEM_MC_LOCAL(uint64_t,                  uSrc);
     1580            IEM_MC_LOCAL(RTGCPTR,                   GCPtrEffSrc);
     1581
     1582            IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffSrc, bRm, 0);
     1583            IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
     1584            IEM_MC_MAYBE_RAISE_SSE2_RELATED_XCPT();
     1585            IEM_MC_ACTUALIZE_SSE_STATE_FOR_READ();
     1586
     1587            IEM_MC_FETCH_XREG_U64(uSrc, ((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | pIemCpu->uRexReg);
     1588            IEM_MC_STORE_MEM_U64(pIemCpu->iEffSeg, GCPtrEffSrc, uSrc);
     1589
     1590            IEM_MC_ADVANCE_RIP();
     1591            IEM_MC_END();
     1592        }
     1593    }
     1594    else
     1595    {
     1596        IEMOP_BITCH_ABOUT_STUB();
     1597        return VERR_IEM_INSTR_NOT_IMPLEMENTED;
     1598    }
     1599    return VINF_SUCCESS;
    15561600}
    15571601
  • trunk/src/VBox/VMM/testcase/tstIEMCheckMc.cpp

    r61064 r61651  
    482482#define IEM_MC_FETCH_XREG_U32(a_u32Value, a_iXReg)          do { (a_u32Value) = 0; CHK_TYPE(uint32_t, a_u32Value); (void)fSseRead; } while (0)
    483483#define IEM_MC_STORE_XREG_U128(a_iXReg, a_u128Value)        do { CHK_TYPE(uint128_t, a_u128Value); (void)fSseWrite; } while (0)
     484#define IEM_MC_STORE_XREG_U64(a_iXReg, a_u64Value)          do { CHK_TYPE(uint64_t,  a_u64alue);   (void)fSseWrite; } while (0)
    484485#define IEM_MC_STORE_XREG_U64_ZX_U128(a_iXReg, a_u64Value)  do { CHK_TYPE(uint64_t,  a_u64Value);  (void)fSseWrite; } while (0)
    485486#define IEM_MC_STORE_XREG_U32_ZX_U128(a_iXReg, a_u32Value)  do { CHK_TYPE(uint32_t,  a_u32Value);  (void)fSseWrite; } while (0)
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