VirtualBox

Changeset 106445 in vbox for trunk


Ignore:
Timestamp:
Oct 17, 2024 12:31:32 PM (4 months ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
165264
Message:

VMM/IEM: Pass down a_fFlat to the IEMNATIVEEMITTLBSTATE constructor used for memory read/write/map. bugref:10720

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

Legend:

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

    r106443 r106445  
    73907390                                     : iemNativeVarRegisterAcquire(pReNative, idxVarValue, &off);
    73917391#endif
    7392     IEMNATIVEEMITTLBSTATE const TlbState(pReNative, &off, idxVarGCPtrMem, iSegReg, a_cbMem, offDisp);
     7392    IEMNATIVEEMITTLBSTATE const TlbState(pReNative, &off, idxVarGCPtrMem, iSegReg, a_fFlat, a_cbMem, offDisp);
    73937393
    73947394#ifdef IEMNATIVE_WITH_SIMD_REG_ALLOCATOR
     
    85228522                        if (idxRegEfl != UINT8_MAX)
    85238523                        {
    8524 #ifdef ARCH_AMD64
     8524# ifdef ARCH_AMD64
    85258525                            off = iemNativeEmitLoadGprFromGpr32(pReNative, off, TlbState.idxReg1, idxRegEfl);
    85268526                            off = iemNativeEmitAndGpr32ByImm(pReNative, off, TlbState.idxReg1,
    85278527                                                             UINT32_C(0xffff0000) & ~X86_EFL_RAZ_MASK);
    8528 #else
     8528# else
    85298529                            off = iemNativeEmitGpr32EqGprAndImmEx(iemNativeInstrBufEnsure(pReNative, off, 3),
    85308530                                                                  off, TlbState.idxReg1, idxRegEfl,
    85318531                                                                  UINT32_C(0xffff0000) & ~X86_EFL_RAZ_MASK);
    8532 #endif
     8532# endif
    85338533                            iemNativeRegFreeTmp(pReNative, idxRegEfl);
    85348534                        }
     
    93419341                                     ? iemNativeVarRegisterSetAndAcquire(pReNative, idxVarMem, IEMNATIVE_CALL_RET_GREG, &off)
    93429342                                     : iemNativeVarRegisterAcquire(pReNative, idxVarMem, &off);
    9343     IEMNATIVEEMITTLBSTATE const TlbState(pReNative, &off, idxVarGCPtrMem, iSegReg, a_cbMem);
     9343    IEMNATIVEEMITTLBSTATE const TlbState(pReNative, &off, idxVarGCPtrMem, iSegReg, a_fFlat, a_cbMem);
    93449344    uint32_t const idxLabelTlbLookup = !TlbState.fSkip
    93459345                                     ? iemNativeLabelCreate(pReNative, kIemNativeLabelType_TlbLookup, UINT32_MAX, uTlbSeqNo)
  • trunk/src/VBox/VMM/include/IEMN8veRecompilerTlbLookup.h

    r106443 r106445  
    9595
    9696    IEMNATIVEEMITTLBSTATE(PIEMRECOMPILERSTATE a_pReNative, uint32_t *a_poff, uint8_t a_idxVarGCPtrMem,
    97                           uint8_t a_iSegReg, uint8_t a_cbMem, uint8_t a_offDisp = 0)
     97                          uint8_t const a_iSegReg, bool const a_fFlat, uint8_t const a_cbMem, uint8_t const a_offDisp = 0)
    9898#ifdef IEMNATIVE_WITH_TLB_LOOKUP
    9999        /* 32-bit and 64-bit wraparound will require special handling, so skip these for absolute addresses. */
     
    123123                                                                      IEMNATIVE_CALL_ARG2_GREG)
    124124                          : idxRegPtrHlp)
    125         ,   idxRegSegBase(a_iSegReg == UINT8_MAX || fSkip
     125        ,   idxRegSegBase(a_fFlat || a_iSegReg == UINT8_MAX || fSkip
    126126                          ? UINT8_MAX
    127127                          : iemNativeRegAllocTmpForGuestReg(a_pReNative, a_poff, IEMNATIVEGSTREG_SEG_BASE(a_iSegReg)))
    128         ,  idxRegSegLimit((a_iSegReg == UINT8_MAX || (a_pReNative->fExec & IEM_F_MODE_CPUMODE_MASK) == IEMMODE_64BIT) || fSkip
     128        ,  idxRegSegLimit(a_fFlat || a_iSegReg == UINT8_MAX || (a_pReNative->fExec & IEM_F_MODE_CPUMODE_MASK) == IEMMODE_64BIT || fSkip
    129129                          ? UINT8_MAX
    130130                          : iemNativeRegAllocTmpForGuestReg(a_pReNative, a_poff, IEMNATIVEGSTREG_SEG_LIMIT(a_iSegReg)))
    131         , idxRegSegAttrib((a_iSegReg == UINT8_MAX || (a_pReNative->fExec & IEM_F_MODE_CPUMODE_MASK) == IEMMODE_64BIT) || fSkip
     131        , idxRegSegAttrib(a_fFlat || a_iSegReg == UINT8_MAX || (a_pReNative->fExec & IEM_F_MODE_CPUMODE_MASK) == IEMMODE_64BIT || fSkip
    132132                          ? UINT8_MAX
    133133                          : iemNativeRegAllocTmpForGuestReg(a_pReNative, a_poff, IEMNATIVEGSTREG_SEG_ATTRIB(a_iSegReg)))
     
    148148
    149149    {
    150         RT_NOREF(a_cbMem, a_offDisp);
     150        Assert(a_fFlat ? a_iSegReg == UINT8_MAX : a_iSegReg != UINT8_MAX);
     151        RT_NOREF(a_offDisp);
    151152    }
    152153
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