Changeset 99984 in vbox for trunk/src/VBox/VMM/include
- Timestamp:
- May 26, 2023 1:20:46 AM (21 months ago)
- Location:
- trunk/src/VBox/VMM/include
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/VMM/include/IEMInline.h
r99983 r99984 2368 2368 2369 2369 2370 #ifndef IEM_WITH_OPAQUE_DECODER_STATE 2371 /** 2372 * Updates the FOP, FPU.CS and FPUIP registers. 2370 /** 2371 * Updates the FOP, FPU.CS and FPUIP registers, extended version. 2373 2372 * 2374 2373 * @param pVCpu The cross context virtual CPU structure of the calling thread. 2375 2374 * @param pFpuCtx The FPU context. 2376 */ 2377 DECLINLINE(void) iemFpuUpdateOpcodeAndIpWorker(PVMCPUCC pVCpu, PX86FXSTATE pFpuCtx) RT_NOEXCEPT 2378 { 2379 Assert(pVCpu->iem.s.uFpuOpcode != UINT16_MAX); 2380 pFpuCtx->FOP = pVCpu->iem.s.uFpuOpcode; 2375 * @param uFpuOpcode The FPU opcode value (see IEMCPU::uFpuOpcode). 2376 */ 2377 DECLINLINE(void) iemFpuUpdateOpcodeAndIpWorkerEx(PVMCPUCC pVCpu, PX86FXSTATE pFpuCtx, uint16_t uFpuOpcode) RT_NOEXCEPT 2378 { 2379 Assert(uFpuOpcode != UINT16_MAX); 2380 pFpuCtx->FOP = uFpuOpcode; 2381 2381 /** @todo x87.CS and FPUIP needs to be kept seperately. */ 2382 2382 if (IEM_IS_REAL_OR_V86_MODE(pVCpu)) … … 2395 2395 *(uint64_t *)&pFpuCtx->FPUIP = pVCpu->cpum.GstCtx.rip; 2396 2396 } 2397 2398 2399 #ifndef IEM_WITH_OPAQUE_DECODER_STATE 2400 /** 2401 * Updates the FOP, FPU.CS and FPUIP registers. 2402 * 2403 * @param pVCpu The cross context virtual CPU structure of the calling thread. 2404 * @param pFpuCtx The FPU context. 2405 */ 2406 DECLINLINE(void) iemFpuUpdateOpcodeAndIpWorker(PVMCPUCC pVCpu, PX86FXSTATE pFpuCtx) RT_NOEXCEPT 2407 { 2408 Assert(pVCpu->iem.s.uFpuOpcode != UINT16_MAX); 2409 iemFpuUpdateOpcodeAndIpWorkerEx(pVCpu, pFpuCtx, pVCpu->iem.s.uFpuOpcode); 2410 } 2397 2411 #endif /* !IEM_WITH_OPAQUE_DECODER_STATE */ 2398 2399 2400 2412 2401 2413 -
trunk/src/VBox/VMM/include/IEMInternal.h
r99982 r99984 3816 3816 * NRIP if needed. 3817 3817 */ 3818 # define IEM_SVM_CHECK_INSTR_INTERCEPT(a_pVCpu, a_Intercept, a_uExitCode, a_uExitInfo1, a_uExitInfo2 ) \3818 # define IEM_SVM_CHECK_INSTR_INTERCEPT(a_pVCpu, a_Intercept, a_uExitCode, a_uExitInfo1, a_uExitInfo2, a_cbInstr) \ 3819 3819 do \ 3820 3820 { \ 3821 3821 if (IEM_SVM_IS_CTRL_INTERCEPT_SET(a_pVCpu, a_Intercept)) \ 3822 3822 { \ 3823 IEM_SVM_UPDATE_NRIP(a_pVCpu ); \3823 IEM_SVM_UPDATE_NRIP(a_pVCpu, a_cbInstr); \ 3824 3824 IEM_SVM_VMEXIT_RET(a_pVCpu, a_uExitCode, a_uExitInfo1, a_uExitInfo2); \ 3825 3825 } \ … … 3827 3827 3828 3828 /** Checks and handles SVM nested-guest CR0 read intercept. */ 3829 # define IEM_SVM_CHECK_READ_CR0_INTERCEPT(a_pVCpu, a_uExitInfo1, a_uExitInfo2 ) \3829 # define IEM_SVM_CHECK_READ_CR0_INTERCEPT(a_pVCpu, a_uExitInfo1, a_uExitInfo2, a_cbInstr) \ 3830 3830 do \ 3831 3831 { \ … … 3834 3834 else \ 3835 3835 { \ 3836 IEM_SVM_UPDATE_NRIP(a_pVCpu ); \3836 IEM_SVM_UPDATE_NRIP(a_pVCpu, a_cbInstr); \ 3837 3837 IEM_SVM_VMEXIT_RET(a_pVCpu, SVM_EXIT_READ_CR0, a_uExitInfo1, a_uExitInfo2); \ 3838 3838 } \ … … 3842 3842 * Updates the NextRIP (NRI) field in the nested-guest VMCB. 3843 3843 */ 3844 # define IEM_SVM_UPDATE_NRIP(a_pVCpu ) \3844 # define IEM_SVM_UPDATE_NRIP(a_pVCpu, a_cbInstr) \ 3845 3845 do { \ 3846 3846 if (IEM_GET_GUEST_CPU_FEATURES(a_pVCpu)->fSvmNextRipSave) \ 3847 CPUMGuestSvmUpdateNRip(a_pVCpu, IEM_GET_CTX(a_pVCpu), IEM_GET_INSTR_LEN(a_pVCpu)); \3847 CPUMGuestSvmUpdateNRip(a_pVCpu, IEM_GET_CTX(a_pVCpu), (a_cbInstr)); \ 3848 3848 } while (0) 3849 3849 3850 3850 #else 3851 # define IEM_SVM_IS_CTRL_INTERCEPT_SET(a_pVCpu, a_Intercept) (false) 3852 # define IEM_SVM_IS_READ_CR_INTERCEPT_SET(a_pVCpu, a_uCr) (false) 3853 # define IEM_SVM_IS_WRITE_CR_INTERCEPT_SET(a_pVCpu, a_uCr) (false) 3854 # define IEM_SVM_IS_READ_DR_INTERCEPT_SET(a_pVCpu, a_uDr) (false) 3855 # define IEM_SVM_IS_WRITE_DR_INTERCEPT_SET(a_pVCpu, a_uDr) (false) 3856 # define IEM_SVM_IS_XCPT_INTERCEPT_SET(a_pVCpu, a_uVector) (false) 3857 # define IEM_SVM_VMEXIT_RET(a_pVCpu, a_uExitCode, a_uExitInfo1, a_uExitInfo2) do { return VERR_SVM_IPE_1; } while (0) 3858 # define IEM_SVM_CRX_VMEXIT_RET(a_pVCpu, a_uExitCode, a_enmAccessCrX, a_iGReg) do { return VERR_SVM_IPE_1; } while (0) 3859 # define IEM_SVM_CHECK_INSTR_INTERCEPT(a_pVCpu, a_Intercept, a_uExitCode, a_uExitInfo1, a_uExitInfo2) do { } while (0) 3860 # define IEM_SVM_CHECK_READ_CR0_INTERCEPT(a_pVCpu, a_uExitInfo1, a_uExitInfo2) do { } while (0) 3861 # define IEM_SVM_UPDATE_NRIP(a_pVCpu) do { } while (0) 3851 # define IEM_SVM_IS_CTRL_INTERCEPT_SET(a_pVCpu, a_Intercept) (false) 3852 # define IEM_SVM_IS_READ_CR_INTERCEPT_SET(a_pVCpu, a_uCr) (false) 3853 # define IEM_SVM_IS_WRITE_CR_INTERCEPT_SET(a_pVCpu, a_uCr) (false) 3854 # define IEM_SVM_IS_READ_DR_INTERCEPT_SET(a_pVCpu, a_uDr) (false) 3855 # define IEM_SVM_IS_WRITE_DR_INTERCEPT_SET(a_pVCpu, a_uDr) (false) 3856 # define IEM_SVM_IS_XCPT_INTERCEPT_SET(a_pVCpu, a_uVector) (false) 3857 # define IEM_SVM_VMEXIT_RET(a_pVCpu, a_uExitCode, a_uExitInfo1, a_uExitInfo2) do { return VERR_SVM_IPE_1; } while (0) 3858 # define IEM_SVM_CRX_VMEXIT_RET(a_pVCpu, a_uExitCode, a_enmAccessCrX, a_iGReg) do { return VERR_SVM_IPE_1; } while (0) 3859 # define IEM_SVM_CHECK_INSTR_INTERCEPT(a_pVCpu, a_Intercept, a_uExitCode, \ 3860 a_uExitInfo1, a_uExitInfo2, a_cbInstr) do { } while (0) 3861 # define IEM_SVM_CHECK_READ_CR0_INTERCEPT(a_pVCpu, a_uExitInfo1, a_uExitInfo2, a_cbInstr) do { } while (0) 3862 # define IEM_SVM_UPDATE_NRIP(a_pVCpu, a_cbInstr) do { } while (0) 3862 3863 3863 3864 #endif … … 4178 4179 IEM_CIMPL_PROTO_0(iemCImpl_loadall286); 4179 4180 IEM_CIMPL_PROTO_0(iemCImpl_syscall); 4180 IEM_CIMPL_PROTO_ 0(iemCImpl_sysret);4181 IEM_CIMPL_PROTO_1(iemCImpl_sysret, IEMMODE, enmEffOpSize); 4181 4182 IEM_CIMPL_PROTO_0(iemCImpl_sysenter); 4182 4183 IEM_CIMPL_PROTO_1(iemCImpl_sysexit, IEMMODE, enmEffOpSize); … … 4219 4220 IEM_CIMPL_PROTO_0(iemCImpl_rdmsr); 4220 4221 IEM_CIMPL_PROTO_0(iemCImpl_wrmsr); 4221 IEM_CIMPL_PROTO_3(iemCImpl_in, uint16_t, u16Port, bool, fImm, uint8_t, cbReg);4222 IEM_CIMPL_PROTO_ 1(iemCImpl_in_eAX_DX, uint8_t, cbReg);4223 IEM_CIMPL_PROTO_3(iemCImpl_out, uint16_t, u16Port, bool, fImm, uint8_t, cbReg);4224 IEM_CIMPL_PROTO_ 1(iemCImpl_out_DX_eAX, uint8_t, cbReg);4222 IEM_CIMPL_PROTO_3(iemCImpl_in, uint16_t, u16Port, uint8_t, cbReg, uint8_t, bImmAndEffAddrMode); 4223 IEM_CIMPL_PROTO_2(iemCImpl_in_eAX_DX, uint8_t, cbReg, IEMMODE, enmEffAddrMode); 4224 IEM_CIMPL_PROTO_3(iemCImpl_out, uint16_t, u16Port, uint8_t, cbReg, uint8_t, bImmAndEffAddrMode); 4225 IEM_CIMPL_PROTO_2(iemCImpl_out_DX_eAX, uint8_t, cbReg, IEMMODE, enmEffAddrMode); 4225 4226 IEM_CIMPL_PROTO_0(iemCImpl_cli); 4226 4227 IEM_CIMPL_PROTO_0(iemCImpl_sti); … … 4256 4257 IEM_CIMPL_PROTO_3(iemCImpl_frstor, IEMMODE, enmEffOpSize, uint8_t, iEffSeg, RTGCPTR, GCPtrEffSrc); 4257 4258 IEM_CIMPL_PROTO_1(iemCImpl_fldcw, uint16_t, u16Fcw); 4258 IEM_CIMPL_PROTO_ 1(iemCImpl_fxch_underflow, uint8_t, iStReg);4259 IEM_CIMPL_PROTO_3(iemCImpl_fcomi_fucomi, uint8_t, iStReg, PFNIEMAIMPLFPUR80EFL, pfnAImpl, bool, fPop);4259 IEM_CIMPL_PROTO_2(iemCImpl_fxch_underflow, uint8_t, iStReg, uint16_t, uFpuOpcode); 4260 IEM_CIMPL_PROTO_3(iemCImpl_fcomi_fucomi, uint8_t, iStReg, PFNIEMAIMPLFPUR80EFL, pfnAImpl, uint32_t, uPopAndFpuOpcode); 4260 4261 /** @} */ 4261 4262 … … 4450 4451 #ifdef VBOX_WITH_NESTED_HWVIRT_SVM 4451 4452 VBOXSTRICTRC iemSvmVmexit(PVMCPUCC pVCpu, uint64_t uExitCode, uint64_t uExitInfo1, uint64_t uExitInfo2) RT_NOEXCEPT; 4452 VBOXSTRICTRC iemHandleSvmEventIntercept(PVMCPUCC pVCpu, uint8_t u8Vector, uint32_t fFlags, uint32_t uErr, uint64_t uCr2) RT_NOEXCEPT;4453 VBOXSTRICTRC iemHandleSvmEventIntercept(PVMCPUCC pVCpu, uint8_t cbInstr, uint8_t u8Vector, uint32_t fFlags, uint32_t uErr, uint64_t uCr2) RT_NOEXCEPT; 4453 4454 VBOXSTRICTRC iemSvmHandleIOIntercept(PVMCPUCC pVCpu, uint16_t u16Port, SVMIOIOTYPE enmIoType, uint8_t cbReg, 4454 4455 uint8_t cAddrSizeBits, uint8_t iEffSeg, bool fRep, bool fStrIo, uint8_t cbInstr) RT_NOEXCEPT; 4455 VBOXSTRICTRC iemSvmHandleMsrIntercept(PVMCPUCC pVCpu, uint32_t idMsr, bool fWrite ) RT_NOEXCEPT;4456 VBOXSTRICTRC iemSvmHandleMsrIntercept(PVMCPUCC pVCpu, uint32_t idMsr, bool fWrite, uint8_t cbInstr) RT_NOEXCEPT; 4456 4457 IEM_CIMPL_PROTO_0(iemCImpl_vmrun); 4457 4458 IEM_CIMPL_PROTO_0(iemCImpl_vmload);
Note:
See TracChangeset
for help on using the changeset viewer.