VirtualBox

Changeset 72494 in vbox


Ignore:
Timestamp:
Jun 10, 2018 4:16:36 PM (6 years ago)
Author:
vboxsync
Message:

IEM: Dropped the IEMCPU::pCtxR3, IEMCPU::pCtxR0, and IEMCPU::pCtxRC members.

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

Legend:

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

    r72493 r72494  
    1103211032#define IEM_MC_MAYBE_RAISE_DEVICE_NOT_AVAILABLE()       \
    1103311033    do { \
    11034         if ((pVCpu)->iem.s.CTX_SUFF(pCtx)->cr0 & (X86_CR0_EM | X86_CR0_TS)) \
     11034        if (IEM_GET_CTX(pVCpu)->cr0 & (X86_CR0_EM | X86_CR0_TS)) \
    1103511035            return iemRaiseDeviceNotAvailable(pVCpu); \
    1103611036    } while (0)
    1103711037#define IEM_MC_MAYBE_RAISE_WAIT_DEVICE_NOT_AVAILABLE()  \
    1103811038    do { \
    11039         if (((pVCpu)->iem.s.CTX_SUFF(pCtx)->cr0 & (X86_CR0_MP | X86_CR0_TS)) == (X86_CR0_MP | X86_CR0_TS)) \
     11039        if ((IEM_GET_CTX(pVCpu)->cr0 & (X86_CR0_MP | X86_CR0_TS)) == (X86_CR0_MP | X86_CR0_TS)) \
    1104011040            return iemRaiseDeviceNotAvailable(pVCpu); \
    1104111041    } while (0)
    1104211042#define IEM_MC_MAYBE_RAISE_FPU_XCPT() \
    1104311043    do { \
    11044         if ((pVCpu)->iem.s.CTX_SUFF(pCtx)->CTX_SUFF(pXState)->x87.FSW & X86_FSW_ES) \
     11044        if (IEM_GET_CTX(pVCpu)->CTX_SUFF(pXState)->x87.FSW & X86_FSW_ES) \
    1104511045            return iemRaiseMathFault(pVCpu); \
    1104611046    } while (0)
     
    1110111101#define IEM_MC_MAYBE_RAISE_MMX_RELATED_XCPT() \
    1110211102    do { \
    11103         if (   ((pVCpu)->iem.s.CTX_SUFF(pCtx)->cr0 & X86_CR0_EM) \
     11103        if (   (IEM_GET_CTX(pVCpu)->cr0 & X86_CR0_EM) \
    1110411104            || !IEM_GET_GUEST_CPU_FEATURES(pVCpu)->fMmx) \
    1110511105            return iemRaiseUndefinedOpcode(pVCpu); \
     
    1110911109#define IEM_MC_MAYBE_RAISE_MMX_RELATED_XCPT_CHECK_SSE_OR_MMXEXT() \
    1111011110    do { \
    11111         if (   ((pVCpu)->iem.s.CTX_SUFF(pCtx)->cr0 & X86_CR0_EM) \
     11111        if (   (IEM_GET_CTX(pVCpu)->cr0 & X86_CR0_EM) \
    1111211112            || (   !IEM_GET_GUEST_CPU_FEATURES(pVCpu)->fSse \
    1111311113                && !IEM_GET_GUEST_CPU_FEATURES(pVCpu)->fAmdMmxExts) ) \
     
    1115011150    uint32_t *a_pName = &a_Name
    1115111151#define IEM_MC_COMMIT_EFLAGS(a_EFlags) \
    11152    do { (pVCpu)->iem.s.CTX_SUFF(pCtx)->eflags.u = (a_EFlags); Assert((pVCpu)->iem.s.CTX_SUFF(pCtx)->eflags.u & X86_EFL_1); } while (0)
     11152   do { IEM_GET_CTX(pVCpu)->eflags.u = (a_EFlags); Assert(IEM_GET_CTX(pVCpu)->eflags.u & X86_EFL_1); } while (0)
    1115311153
    1115411154#define IEM_MC_ASSIGN(a_VarOrArg, a_CVariableOrConst)   (a_VarOrArg) = (a_CVariableOrConst)
     
    1119311193        (a_u32Dst) = iemSRegBaseFetchU64(pVCpu, (a_iSReg)); \
    1119411194    } while (0)
    11195 #define IEM_MC_FETCH_CR0_U16(a_u16Dst)                  (a_u16Dst) = (uint16_t)(pVCpu)->iem.s.CTX_SUFF(pCtx)->cr0
    11196 #define IEM_MC_FETCH_CR0_U32(a_u32Dst)                  (a_u32Dst) = (uint32_t)(pVCpu)->iem.s.CTX_SUFF(pCtx)->cr0
    11197 #define IEM_MC_FETCH_CR0_U64(a_u64Dst)                  (a_u64Dst) = (pVCpu)->iem.s.CTX_SUFF(pCtx)->cr0
     11195#define IEM_MC_FETCH_CR0_U16(a_u16Dst)                  (a_u16Dst) = (uint16_t)IEM_GET_CTX(pVCpu)->cr0
     11196#define IEM_MC_FETCH_CR0_U32(a_u32Dst)                  (a_u32Dst) = (uint32_t)IEM_GET_CTX(pVCpu)->cr0
     11197#define IEM_MC_FETCH_CR0_U64(a_u64Dst)                  (a_u64Dst) = IEM_GET_CTX(pVCpu)->cr0
    1119811198/** @todo IEM_MC_FETCH_LDTR_U16, IEM_MC_FETCH_LDTR_U32, IEM_MC_FETCH_LDTR_U64, IEM_MC_FETCH_TR_U16, IEM_MC_FETCH_TR_U32, and IEM_MC_FETCH_TR_U64 aren't worth it... */
    1119911199#define IEM_MC_FETCH_LDTR_U16(a_u16Dst) do { \
    1120011200        IEM_CTX_IMPORT_NORET(pVCpu, IEM_GET_CTX(pVCpu), CPUMCTX_EXTRN_LDTR); \
    11201         (a_u16Dst) = (pVCpu)->iem.s.CTX_SUFF(pCtx)->ldtr.Sel; \
     11201        (a_u16Dst) = IEM_GET_CTX(pVCpu)->ldtr.Sel; \
    1120211202   } while (0)
    1120311203#define IEM_MC_FETCH_LDTR_U32(a_u32Dst) do { \
    1120411204        IEM_CTX_IMPORT_NORET(pVCpu, IEM_GET_CTX(pVCpu), CPUMCTX_EXTRN_LDTR); \
    11205         (a_u32Dst) = (pVCpu)->iem.s.CTX_SUFF(pCtx)->ldtr.Sel; \
     11205        (a_u32Dst) = IEM_GET_CTX(pVCpu)->ldtr.Sel; \
    1120611206    } while (0)
    1120711207#define IEM_MC_FETCH_LDTR_U64(a_u64Dst) do { \
    1120811208        IEM_CTX_IMPORT_NORET(pVCpu, IEM_GET_CTX(pVCpu), CPUMCTX_EXTRN_LDTR); \
    11209         (a_u64Dst) = (pVCpu)->iem.s.CTX_SUFF(pCtx)->ldtr.Sel; \
     11209        (a_u64Dst) = IEM_GET_CTX(pVCpu)->ldtr.Sel; \
    1121011210   } while (0)
    1121111211#define IEM_MC_FETCH_TR_U16(a_u16Dst) do { \
    1121211212        IEM_CTX_IMPORT_NORET(pVCpu, IEM_GET_CTX(pVCpu), CPUMCTX_EXTRN_TR); \
    11213         (a_u16Dst) = (pVCpu)->iem.s.CTX_SUFF(pCtx)->tr.Sel; \
     11213        (a_u16Dst) = IEM_GET_CTX(pVCpu)->tr.Sel; \
    1121411214   } while (0)
    1121511215#define IEM_MC_FETCH_TR_U32(a_u32Dst) do { \
    1121611216        IEM_CTX_IMPORT_NORET(pVCpu, IEM_GET_CTX(pVCpu), CPUMCTX_EXTRN_TR); \
    11217         (a_u32Dst) = (pVCpu)->iem.s.CTX_SUFF(pCtx)->tr.Sel; \
     11217        (a_u32Dst) = IEM_GET_CTX(pVCpu)->tr.Sel; \
    1121811218   } while (0)
    1121911219#define IEM_MC_FETCH_TR_U64(a_u64Dst) do { \
    1122011220        IEM_CTX_IMPORT_NORET(pVCpu, IEM_GET_CTX(pVCpu), CPUMCTX_EXTRN_TR); \
    11221         (a_u64Dst) = (pVCpu)->iem.s.CTX_SUFF(pCtx)->tr.Sel; \
     11221        (a_u64Dst) = IEM_GET_CTX(pVCpu)->tr.Sel; \
    1122211222   } while (0)
    1122311223/** @note Not for IOPL or IF testing or modification. */
    11224 #define IEM_MC_FETCH_EFLAGS(a_EFlags)                   (a_EFlags) = (pVCpu)->iem.s.CTX_SUFF(pCtx)->eflags.u
    11225 #define IEM_MC_FETCH_EFLAGS_U8(a_EFlags)                (a_EFlags) = (uint8_t)(pVCpu)->iem.s.CTX_SUFF(pCtx)->eflags.u
     11224#define IEM_MC_FETCH_EFLAGS(a_EFlags)                   (a_EFlags) = IEM_GET_CTX(pVCpu)->eflags.u
     11225#define IEM_MC_FETCH_EFLAGS_U8(a_EFlags)                (a_EFlags) = (uint8_t)IEM_GET_CTX(pVCpu)->eflags.u
    1122611226#define IEM_MC_FETCH_FSW(a_u16Fsw)                      (a_u16Fsw) = IEM_GET_CTX(pVCpu)->CTX_SUFF(pXState)->x87.FSW
    1122711227#define IEM_MC_FETCH_FCW(a_u16Fcw)                      (a_u16Fcw) = IEM_GET_CTX(pVCpu)->CTX_SUFF(pXState)->x87.FCW
     
    1125711257#define IEM_MC_REF_GREG_U64(a_pu64Dst, a_iGReg)         (a_pu64Dst) = iemGRegRefU64(pVCpu, (a_iGReg))
    1125811258/** @note Not for IOPL or IF testing or modification. */
    11259 #define IEM_MC_REF_EFLAGS(a_pEFlags)                    (a_pEFlags) = &(pVCpu)->iem.s.CTX_SUFF(pCtx)->eflags.u
     11259#define IEM_MC_REF_EFLAGS(a_pEFlags)                    (a_pEFlags) = &IEM_GET_CTX(pVCpu)->eflags.u
    1126011260
    1126111261#define IEM_MC_ADD_GREG_U8(a_iGReg, a_u8Value)          *iemGRegRefU8( pVCpu, (a_iGReg)) += (a_u8Value)
     
    1133511335
    1133611336/** @note Not for IOPL or IF modification. */
    11337 #define IEM_MC_SET_EFL_BIT(a_fBit)                      do { (pVCpu)->iem.s.CTX_SUFF(pCtx)->eflags.u |= (a_fBit); } while (0)
     11337#define IEM_MC_SET_EFL_BIT(a_fBit)                      do { IEM_GET_CTX(pVCpu)->eflags.u |= (a_fBit); } while (0)
    1133811338/** @note Not for IOPL or IF modification. */
    11339 #define IEM_MC_CLEAR_EFL_BIT(a_fBit)                    do { (pVCpu)->iem.s.CTX_SUFF(pCtx)->eflags.u &= ~(a_fBit); } while (0)
     11339#define IEM_MC_CLEAR_EFL_BIT(a_fBit)                    do { IEM_GET_CTX(pVCpu)->eflags.u &= ~(a_fBit); } while (0)
    1134011340/** @note Not for IOPL or IF modification. */
    11341 #define IEM_MC_FLIP_EFL_BIT(a_fBit)                     do { (pVCpu)->iem.s.CTX_SUFF(pCtx)->eflags.u ^= (a_fBit); } while (0)
    11342 
    11343 #define IEM_MC_CLEAR_FSW_EX()   do { (pVCpu)->iem.s.CTX_SUFF(pCtx)->CTX_SUFF(pXState)->x87.FSW &= X86_FSW_C_MASK | X86_FSW_TOP_MASK; } while (0)
     11341#define IEM_MC_FLIP_EFL_BIT(a_fBit)                     do { IEM_GET_CTX(pVCpu)->eflags.u ^= (a_fBit); } while (0)
     11342
     11343#define IEM_MC_CLEAR_FSW_EX()   do { IEM_GET_CTX(pVCpu)->CTX_SUFF(pXState)->x87.FSW &= X86_FSW_C_MASK | X86_FSW_TOP_MASK; } while (0)
    1134411344
    1134511345/** Switches the FPU state to MMX mode (FSW.TOS=0, FTW=0) if necessary. */
     
    1226912269 *  IEM_MC_CALL_AVX_AIMPL_3, IEM_MC_CALL_AVX_AIMPL_4, ... */
    1227012270#define IEM_MC_IMPLICIT_AVX_AIMPL_ARGS() \
    12271     IEM_MC_ARG_CONST(PX86XSAVEAREA, pXState, (pVCpu)->iem.s.CTX_SUFF(pCtx)->CTX_SUFF(pXState), 0)
     12271    IEM_MC_ARG_CONST(PX86XSAVEAREA, pXState, IEM_GET_CTX(pVCpu)->CTX_SUFF(pXState), 0)
    1227212272
    1227312273/**
  • trunk/src/VBox/VMM/VMMAll/IEMAllCImpl.cpp.h

    r72493 r72494  
    71267126        if (rcStrict == VINF_SUCCESS)
    71277127        {
    7128             PCPUMCTX pCtx = pVCpu->iem.s.CTX_SUFF(pCtx);
     7128            PCPUMCTX pCtx = IEM_GET_CTX(pVCpu);
    71297129            pCtx->eflags.u = *pEFlags; /* IEM_MC_COMMIT_EFLAGS */
    71307130            if (!(*pEFlags & X86_EFL_ZF))
  • trunk/src/VBox/VMM/VMMR3/IEMR3.cpp

    r69111 r72494  
    6767    {
    6868        PVMCPU pVCpu = &pVM->aCpus[idCpu];
    69         pVCpu->iem.s.pCtxR3 = CPUMQueryGuestCtxPtr(pVCpu);
    70         pVCpu->iem.s.pCtxR0 = VM_R0_ADDR(pVM, pVCpu->iem.s.pCtxR3);
    71         pVCpu->iem.s.pCtxRC = VM_RC_ADDR(pVM, pVCpu->iem.s.pCtxR3);
    7269
    7370        pVCpu->iem.s.CodeTlb.uTlbRevision = pVCpu->iem.s.DataTlb.uTlbRevision = uInitialTlbRevision;
     
    194191{
    195192    for (VMCPUID idCpu = 0; idCpu < pVM->cCpus; idCpu++)
    196     {
    197         pVM->aCpus[idCpu].iem.s.pCtxRC = VM_RC_ADDR(pVM, pVM->aCpus[idCpu].iem.s.pCtxR3);
    198193        if (pVM->aCpus[idCpu].iem.s.pStatsRC)
    199194            pVM->aCpus[idCpu].iem.s.pStatsRC = MMHyperR3ToRC(pVM, pVM->aCpus[idCpu].iem.s.pStatsCCR3);
    200     }
    201195}
    202196
  • trunk/src/VBox/VMM/include/IEMInternal.h

    r72493 r72494  
    607607    IEMTLB                  CodeTlb;
    608608
    609     /** Pointer to the CPU context - ring-3 context.
    610      * @todo put inside IEM_VERIFICATION_MODE_FULL++. */
    611     R3PTRTYPE(PCPUMCTX)     pCtxR3;
    612     /** Pointer to the CPU context - ring-0 context. */
    613     R0PTRTYPE(PCPUMCTX)     pCtxR0;
    614     /** Pointer to the CPU context - raw-mode context. */
    615     RCPTRTYPE(PCPUMCTX)     pCtxRC;
    616 
    617609    /** Pointer to instruction statistics for raw-mode context (same as R0). */
    618610    RCPTRTYPE(PIEMINSTRSTATS) pStatsRC;
  • trunk/src/VBox/VMM/testcase/tstIEMCheckMc.cpp

    r71092 r72494  
    2020*   Header Files                                                                                                                 *
    2121*********************************************************************************************************************************/
     22#define VMCPU_INCL_CPUM_GST_CTX
    2223#include <iprt/assert.h>
    2324#include <iprt/rand.h>
     
    708709#define IEM_MC_CALL_SSE_AIMPL_3(a_pfnAImpl, a0, a1, a2) \
    709710    do { (void)fSseHost; (void)fSseWrite; CHK_CALL_ARG(a0, 0); CHK_CALL_ARG(a1, 1); CHK_CALL_ARG(a2, 2);} while (0)
    710 #define IEM_MC_IMPLICIT_AVX_AIMPL_ARGS() IEM_MC_ARG_CONST(PX86XSAVEAREA, pXState, (pVCpu)->iem.s.CTX_SUFF(pCtx)->CTX_SUFF(pXState), 0)
     711#define IEM_MC_IMPLICIT_AVX_AIMPL_ARGS() IEM_MC_ARG_CONST(PX86XSAVEAREA, pXState, IEM_GET_CTX(pVCpu)->CTX_SUFF(pXState), 0)
    711712#define IEM_MC_CALL_AVX_AIMPL_2(a_pfnAImpl, a1, a2) \
    712713    do { (void)fAvxHost; (void)fAvxWrite; CHK_CALL_ARG(a1, 1); CHK_CALL_ARG(a2, 2); } while (0)
  • trunk/src/VBox/VMM/testcase/tstVMStruct.h

    r72490 r72494  
    296296
    297297    GEN_CHECK_SIZE(IEMCPU);
    298     GEN_CHECK_OFF(IEMCPU, pCtxR0);
    299     GEN_CHECK_OFF(IEMCPU, pCtxR3);
    300     GEN_CHECK_OFF(IEMCPU, pCtxRC);
    301298    GEN_CHECK_OFF(IEMCPU, enmCpuMode);
    302299    GEN_CHECK_OFF(IEMCPU, fPrefixes);
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