VirtualBox

忽略:
時間撮記:
2021-12-9 上午11:08:31 (3 年 以前)
作者:
vboxsync
svn:sync-xref-src-repo-rev:
148771
訊息:

VMM/IEM: Nested VMX: bugref:10092 INVEPT instruction support.

檔案:
修改 1 筆資料

圖例:

未更動
新增
刪除
  • trunk/src/VBox/VMM/VMMAll/IEMAllInstructionsThree0f38.cpp.h

    r82968 r92844  
    303303
    304304/** Opcode 0x66 0x0f 0x38 0x80. */
     305#ifdef VBOX_WITH_NESTED_HWVIRT_VMX_EPT
     306FNIEMOP_DEF(iemOp_invept_Gy_Mdq)
     307{
     308    IEMOP_MNEMONIC(invept, "invept Gy,Mdq");
     309    IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
     310    IEMOP_HLP_IN_VMX_OPERATION("invept", kVmxVDiag_Invept);
     311    IEMOP_HLP_VMX_INSTR("invept", kVmxVDiag_Invept);
     312    uint8_t bRm; IEM_OPCODE_GET_NEXT_U8(&bRm);
     313    if ((bRm & X86_MODRM_MOD_MASK) != (3 << X86_MODRM_MOD_SHIFT))
     314    {
     315        /* Register, memory. */
     316        if (pVCpu->iem.s.enmEffOpSize == IEMMODE_64BIT)
     317        {
     318            IEM_MC_BEGIN(3, 0);
     319            IEM_MC_ARG(uint8_t,  iEffSeg,         0);
     320            IEM_MC_ARG(RTGCPTR,  GCPtrInveptDesc, 1);
     321            IEM_MC_ARG(uint64_t, uInveptType,     2);
     322            IEM_MC_FETCH_GREG_U64(uInveptType, ((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | pVCpu->iem.s.uRexReg);
     323            IEM_MC_CALC_RM_EFF_ADDR(GCPtrInveptDesc, bRm, 0);
     324            IEM_MC_ASSIGN(iEffSeg, pVCpu->iem.s.iEffSeg);
     325            IEM_MC_CALL_CIMPL_3(iemCImpl_invept, iEffSeg, GCPtrInveptDesc, uInveptType);
     326            IEM_MC_END();
     327        }
     328        else
     329        {
     330            IEM_MC_BEGIN(3, 0);
     331            IEM_MC_ARG(uint8_t,  iEffSeg,         0);
     332            IEM_MC_ARG(RTGCPTR,  GCPtrInveptDesc, 1);
     333            IEM_MC_ARG(uint32_t, uInveptType,     2);
     334            IEM_MC_FETCH_GREG_U32(uInveptType, ((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | pVCpu->iem.s.uRexReg);
     335            IEM_MC_CALC_RM_EFF_ADDR(GCPtrInveptDesc, bRm, 0);
     336            IEM_MC_ASSIGN(iEffSeg, pVCpu->iem.s.iEffSeg);
     337            IEM_MC_CALL_CIMPL_3(iemCImpl_invept, iEffSeg, GCPtrInveptDesc, uInveptType);
     338            IEM_MC_END();
     339        }
     340    }
     341    Log(("iemOp_invept_Gy_Mdq: invalid encoding -> #UD\n"));
     342    return IEMOP_RAISE_INVALID_OPCODE();
     343}
     344#else
    305345FNIEMOP_STUB(iemOp_invept_Gy_Mdq);
     346#endif
    306347
    307348/** Opcode 0x66 0x0f 0x38 0x81. */
注意: 瀏覽 TracChangeset 來幫助您使用更動檢視器

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