Changeset 47327 in vbox
- Timestamp:
- Jul 22, 2013 10:11:09 PM (12 years ago)
- svn:sync-xref-src-repo-rev:
- 87470
- Location:
- trunk/src/VBox/VMM
- Files:
-
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/VMM/VMMAll/IEMAll.cpp
r47326 r47327 7394 7394 { \ 7395 7395 if (pIemCpu->enmCpuMode == IEMMODE_64BIT) \ 7396 return IEMOP_RAISE_INVALID_OPCODE(); \ 7397 } while (0) 7398 7399 /** The instruction is only available in 64-bit mode, throw #UD if we're not in 7400 * 64-bit mode. */ 7401 #define IEMOP_HLP_ONLY_64BIT() \ 7402 do \ 7403 { \ 7404 if (pIemCpu->enmCpuMode != IEMMODE_64BIT) \ 7396 7405 return IEMOP_RAISE_INVALID_OPCODE(); \ 7397 7406 } while (0) -
trunk/src/VBox/VMM/VMMAll/IEMAllCImpl.cpp.h
r47326 r47327 4418 4418 4419 4419 /** 4420 * Implements 'SWAPGS'. 4421 */ 4422 IEM_CIMPL_DEF_0(iemCImpl_swapgs) 4423 { 4424 Assert(pIemCpu->enmCpuMode == IEMMODE_64BIT); /* Caller checks this. */ 4425 4426 /* 4427 * Permission checks. 4428 */ 4429 if (pIemCpu->uCpl != 0) 4430 { 4431 Log2(("swapgs: CPL != 0\n")); 4432 return iemRaiseUndefinedOpcode(pIemCpu); 4433 } 4434 4435 /* 4436 * Do the job. 4437 */ 4438 PCPUMCTX pCtx = pIemCpu->CTX_SUFF(pCtx); 4439 uint64_t uOtherGsBase = pCtx->msrKERNELGSBASE; 4440 pCtx->msrKERNELGSBASE = pCtx->gs.u64Base; 4441 pCtx->gs.u64Base = uOtherGsBase; 4442 4443 iemRegAddToRip(pIemCpu, cbInstr); 4444 return VINF_SUCCESS; 4445 } 4446 4447 4448 /** 4420 4449 * Implements 'CPUID'. 4421 4450 */ -
trunk/src/VBox/VMM/VMMAll/IEMAllInstructions.cpp.h
r47326 r47327 811 811 { 812 812 IEMOP_MNEMONIC("monitor"); 813 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 813 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); /** @todo Verify that monitor is allergic to lock prefixes. */ 814 814 return IEM_MC_DEFER_TO_CIMPL_1(iemCImpl_monitor, pIemCpu->iEffSeg); 815 815 } … … 819 819 FNIEMOP_DEF(iemOp_Grp7_mwait) 820 820 { 821 IEMOP_MNEMONIC("mwait"); 821 IEMOP_MNEMONIC("mwait"); /** @todo Verify that mwait is allergic to lock prefixes. */ 822 822 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 823 823 return IEM_MC_DEFER_TO_CIMPL_0(iemCImpl_mwait); … … 828 828 FNIEMOP_DEF_1(iemOp_Grp7_lgdt, uint8_t, bRm) 829 829 { 830 IEMOP_MNEMONIC("lgdt"); 830 831 IEMOP_HLP_NO_LOCK_PREFIX(); 831 832 … … 904 905 FNIEMOP_DEF_1(iemOp_Grp7_smsw, uint8_t, bRm) 905 906 { 907 IEMOP_MNEMONIC("smsw"); 906 908 IEMOP_HLP_NO_LOCK_PREFIX(); 907 909 if ((bRm & X86_MODRM_MOD_MASK) == (3 << X86_MODRM_MOD_SHIFT)) … … 960 962 /* The operand size is effectively ignored, all is 16-bit and only the 961 963 lower 3-bits are used. */ 964 IEMOP_MNEMONIC("lmsw"); 962 965 IEMOP_HLP_NO_LOCK_PREFIX(); 963 966 if ((bRm & X86_MODRM_MOD_MASK) == (3 << X86_MODRM_MOD_SHIFT)) … … 986 989 FNIEMOP_DEF_1(iemOp_Grp7_invlpg, uint8_t, bRm) 987 990 { 991 IEMOP_MNEMONIC("invlpg"); 988 992 IEMOP_HLP_NO_LOCK_PREFIX(); 989 993 IEM_MC_BEGIN(1, 1); … … 999 1003 FNIEMOP_DEF(iemOp_Grp7_swapgs) 1000 1004 { 1001 NOREF(pIemCpu); 1002 IEMOP_BITCH_ABOUT_STUB(); 1003 return VERR_IEM_INSTR_NOT_IMPLEMENTED; 1005 IEMOP_MNEMONIC("swapgs"); 1006 IEMOP_HLP_NO_LOCK_PREFIX(); 1007 IEMOP_HLP_ONLY_64BIT(); 1008 return IEM_MC_DEFER_TO_CIMPL_0(iemCImpl_swapgs); 1004 1009 } 1005 1010 -
trunk/src/VBox/VMM/testcase/tstIEMCheckMc.cpp
r47326 r47327 98 98 #define IEMOP_HLP_NO_LOCK_PREFIX() do { } while (0) 99 99 #define IEMOP_HLP_NO_64BIT() do { } while (0) 100 #define IEMOP_HLP_ONLY_64BIT() do { } while (0) 100 101 #define IEMOP_HLP_64BIT_OP_SIZE() do { } while (0) 101 102 #define IEMOP_HLP_DEFAULT_64BIT_OP_SIZE() do { } while (0)
Note:
See TracChangeset
for help on using the changeset viewer.