VirtualBox

Changeset 61059 in vbox


Ignore:
Timestamp:
May 19, 2016 7:14:25 PM (9 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
107326
Message:

IEM: a couple of new SSE instrs - currently disabled.

File:
1 edited

Legend:

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

    r61020 r61059  
    64366436FNIEMOP_STUB(iemOp_cmpps_Vps_Wps_Ib__cmppd_Vpd_Wpd_Ib__cmpss_Vss_Wss_Ib__cmpsd_Vsd_Wsd_Ib);
    64376437
     6438
    64386439/** Opcode 0x0f 0xc3. */
     6440#if 0 //ndef VBOX_WITH_REM
     6441FNIEMOP_DEF(iemOp_movnti_My_Gy)
     6442{
     6443    IEMOP_MNEMONIC("mov Ev,Gv");
     6444
     6445    uint8_t bRm; IEM_OPCODE_GET_NEXT_U8(&bRm);
     6446
     6447    /* Only the register -> memory form makes sense, assuming #UD for the other form. */
     6448    if ((bRm & X86_MODRM_MOD_MASK) != (3 << X86_MODRM_MOD_SHIFT))
     6449    {
     6450        switch (pIemCpu->enmEffOpSize)
     6451        {
     6452            case IEMMODE_32BIT:
     6453                IEM_MC_BEGIN(0, 2);
     6454                IEM_MC_LOCAL(uint32_t, u32Value);
     6455                IEM_MC_LOCAL(RTGCPTR, GCPtrEffDst);
     6456
     6457                IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffDst, bRm, 0);
     6458                IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
     6459                if (!IEM_GET_GUEST_CPU_FEATURES(pIemCpu)->fSse2)
     6460                    return IEMOP_RAISE_INVALID_OPCODE();
     6461
     6462                IEM_MC_FETCH_GREG_U32(u32Value, ((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | pIemCpu->uRexReg);
     6463                IEM_MC_STORE_MEM_U32(pIemCpu->iEffSeg, GCPtrEffDst, u32Value);
     6464                IEM_MC_ADVANCE_RIP();
     6465                IEM_MC_END();
     6466                break;
     6467
     6468            case IEMMODE_64BIT:
     6469                IEM_MC_BEGIN(0, 2);
     6470                IEM_MC_LOCAL(uint64_t, u64Value);
     6471                IEM_MC_LOCAL(RTGCPTR, GCPtrEffDst);
     6472
     6473                IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffDst, bRm, 0);
     6474                IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
     6475                if (!IEM_GET_GUEST_CPU_FEATURES(pIemCpu)->fSse2)
     6476                    return IEMOP_RAISE_INVALID_OPCODE();
     6477
     6478                IEM_MC_FETCH_GREG_U64(u64Value, ((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | pIemCpu->uRexReg);
     6479                IEM_MC_STORE_MEM_U64(pIemCpu->iEffSeg, GCPtrEffDst, u64Value);
     6480                IEM_MC_ADVANCE_RIP();
     6481                IEM_MC_END();
     6482                break;
     6483
     6484            case IEMMODE_16BIT:
     6485                /** @todo check this form.   */
     6486                return IEMOP_RAISE_INVALID_OPCODE();
     6487        }
     6488    }
     6489    else
     6490        return IEMOP_RAISE_INVALID_OPCODE();
     6491    return VINF_SUCCESS;
     6492}
     6493#else
    64396494FNIEMOP_STUB(iemOp_movnti_My_Gy); // solaris 10 uses this in hat_pte_zero().
     6495#endif
     6496
    64406497
    64416498/** Opcode 0x0f 0xc4. */
     
    67716828/** Opcode 0x0f 0xe6. */
    67726829FNIEMOP_STUB(iemOp_cvttpd2dq_Vdq_Wdp__cvtdq2pd_Vdq_Wpd__cvtpd2dq_Vdq_Wpd);
     6830
     6831
    67736832/** Opcode 0x0f 0xe7. */
     6833#if 0 //ndef VBOX_WITH_REM
     6834FNIEMOP_DEF(iemOp_movntq_Mq_Pq__movntdq_Mdq_Vdq)
     6835{
     6836    IEMOP_MNEMONIC(!(pIemCpu->fPrefixes & IEM_OP_PRF_SIZE_OP) ? "movntq mr,r" : "movntdq mr,r");
     6837    uint8_t bRm; IEM_OPCODE_GET_NEXT_U8(&bRm);
     6838    if ((bRm & X86_MODRM_MOD_MASK) != (3 << X86_MODRM_MOD_SHIFT))
     6839    {
     6840        /*
     6841         * Register, memory.
     6842         */
     6843/** @todo check when the REPNZ/Z bits kick in. Same as lock, probably... */
     6844        switch (pIemCpu->fPrefixes & (IEM_OP_PRF_SIZE_OP | IEM_OP_PRF_REPNZ | IEM_OP_PRF_REPZ))
     6845        {
     6846
     6847            case IEM_OP_PRF_SIZE_OP: /* SSE */
     6848                IEM_MC_BEGIN(0, 2);
     6849                IEM_MC_LOCAL(uint128_t,                 uSrc);
     6850                IEM_MC_LOCAL(RTGCPTR,                   GCPtrEffSrc);
     6851
     6852                IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffSrc, bRm, 0);
     6853                IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
     6854                IEM_MC_MAYBE_RAISE_SSE2_RELATED_XCPT();
     6855
     6856                IEM_MC_FETCH_XREG_U128(uSrc, ((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | pIemCpu->uRexReg);
     6857                IEM_MC_STORE_MEM_U128_ALIGN_SSE(pIemCpu->iEffSeg, GCPtrEffSrc, uSrc);
     6858
     6859                IEM_MC_ADVANCE_RIP();
     6860                IEM_MC_END();
     6861                break;
     6862
     6863            case 0: /* MMX */
     6864                IEM_MC_BEGIN(0, 2);
     6865                IEM_MC_LOCAL(uint64_t,                  uSrc);
     6866                IEM_MC_LOCAL(RTGCPTR,                   GCPtrEffSrc);
     6867
     6868                IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffSrc, bRm, 0);
     6869                IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
     6870                IEM_MC_MAYBE_RAISE_MMX_RELATED_XCPT();
     6871
     6872                IEM_MC_FETCH_MREG_U64(uSrc, (bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK);
     6873                IEM_MC_STORE_MEM_U64(pIemCpu->iEffSeg, GCPtrEffSrc, uSrc);
     6874
     6875                IEM_MC_ADVANCE_RIP();
     6876                IEM_MC_END();
     6877                break;
     6878
     6879            default:
     6880                return IEMOP_RAISE_INVALID_OPCODE();
     6881        }
     6882    }
     6883    /* The register, register encoding is invalid. */
     6884    else
     6885        return IEMOP_RAISE_INVALID_OPCODE();
     6886    return VINF_SUCCESS;
     6887}
     6888#else
    67746889FNIEMOP_STUB(iemOp_movntq_Mq_Pq__movntdq_Mdq_Vdq);
     6890#endif
     6891
     6892
    67756893/** Opcode 0x0f 0xe8. */
    67766894FNIEMOP_STUB(iemOp_psubsb_Pq_Qq__psubsb_Vdq_Wdq);
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