VirtualBox

Changeset 106443 in vbox for trunk/src/VBox/VMM/VMMAll


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

VMM/IEM: Reduced the number of arguments for iemNativeEmitTlbLookup. bugref:10720

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

Legend:

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

    r106315 r106443  
    14731473         * TlbLookup:
    14741474         */
    1475         off = iemNativeEmitTlbLookup<false>(pReNative, off, &TlbState,
    1476                                             IEM_F_MODE_X86_IS_FLAT(pReNative->fExec) ? UINT8_MAX : X86_SREG_CS,
    1477                                             1 /*cbMem*/, 0 /*fAlignMask*/, IEM_ACCESS_TYPE_EXEC,
    1478                                             idxLabelTlbLookup, idxLabelTlbMiss, idxRegGCPhys, offInstr);
     1475        off = iemNativeEmitTlbLookup<false, 1 /*cbMem*/, 0 /*fAlignMask*/,
     1476                                     IEM_ACCESS_TYPE_EXEC>(pReNative, off, &TlbState,
     1477                                                           IEM_F_MODE_X86_IS_FLAT(pReNative->fExec) ? UINT8_MAX : X86_SREG_CS,
     1478                                                           idxLabelTlbLookup, idxLabelTlbMiss, idxRegGCPhys, offInstr);
    14791479
    14801480# ifdef IEM_WITH_TLB_STATISTICS
     
    17711771         * TlbLookup:
    17721772         */
    1773         off = iemNativeEmitTlbLookup<false, true>(pReNative, off, &TlbState, fIsFlat ? UINT8_MAX : X86_SREG_CS,
    1774                                                   1 /*cbMem*/, 0 /*fAlignMask*/, IEM_ACCESS_TYPE_EXEC,
    1775                                                   idxLabelTlbLookup, idxLabelTlbMiss, idxRegDummy);
     1773        off = iemNativeEmitTlbLookup<false, 1 /*cbMem*/, 0 /*fAlignMask*/,
     1774                                     IEM_ACCESS_TYPE_EXEC, true>(pReNative, off, &TlbState, fIsFlat ? UINT8_MAX : X86_SREG_CS,
     1775                                                                 idxLabelTlbLookup, idxLabelTlbMiss, idxRegDummy);
    17761776
    17771777# ifdef IEM_WITH_TLB_STATISTICS
  • trunk/src/VBox/VMM/VMMAll/IEMAllN8veRecompFuncs.h

    r106432 r106443  
    17791779         * TlbLookup:
    17801780         */
    1781         off = iemNativeEmitTlbLookup<true>(pReNative, off, &TlbState, iSegReg, cbMem, cbMem - 1,
    1782                                            IEM_ACCESS_TYPE_WRITE, idxLabelTlbLookup, idxLabelTlbMiss, idxRegMemResult);
     1781        off = iemNativeEmitTlbLookup<true, cbMem, cbMem - 1, IEM_ACCESS_TYPE_WRITE>(pReNative, off, &TlbState, iSegReg,
     1782                                                                                    idxLabelTlbLookup, idxLabelTlbMiss,
     1783                                                                                    idxRegMemResult);
    17831784
    17841785        /*
     
    24552456         * TlbLookup:
    24562457         */
    2457         off = iemNativeEmitTlbLookup<true>(pReNative, off, &TlbState, iSegReg, cbMem, cbMem - 1, IEM_ACCESS_TYPE_READ,
    2458                                            idxLabelTlbLookup, idxLabelTlbMiss, idxRegMemResult);
     2458        off = iemNativeEmitTlbLookup<true, cbMem, cbMem - 1, IEM_ACCESS_TYPE_READ>(pReNative, off, &TlbState, iSegReg,
     2459                                                                                   idxLabelTlbLookup, idxLabelTlbMiss,
     2460                                                                                   idxRegMemResult);
    24592461
    24602462        /*
     
    76087610         * TlbLookup:
    76097611         */
    7610         off = iemNativeEmitTlbLookup<true>(pReNative, off, &TlbState, iSegReg, a_cbMem, a_fAlignMaskAndCtl,
    7611                                            a_enmOp == kIemNativeEmitMemOp_Store ? IEM_ACCESS_TYPE_WRITE : IEM_ACCESS_TYPE_READ,
    7612                                            idxLabelTlbLookup, idxLabelTlbMiss, idxRegMemResult, offDisp);
     7612        off = iemNativeEmitTlbLookup<true, a_cbMem, a_fAlignMaskAndCtl,
     7613                                     a_enmOp == kIemNativeEmitMemOp_Store ? IEM_ACCESS_TYPE_WRITE : IEM_ACCESS_TYPE_READ
     7614                                    >(pReNative, off, &TlbState, iSegReg, idxLabelTlbLookup, idxLabelTlbMiss,
     7615                                      idxRegMemResult, offDisp);
    76137616
    76147617        /*
     
    82638266     * Assert sanity.
    82648267     */
     8268    AssertCompile(a_cBitsVar == 16 || a_cBitsVar  == 32 || a_cBitsVar  == 64);
     8269    AssertCompile(a_cBitsFlat == 0 || a_cBitsFlat == 32 || a_cBitsFlat == 64);
     8270    AssertCompile(!a_fIsSegReg || a_cBitsVar < 64);
    82658271    IEMNATIVE_ASSERT_VAR_IDX(pReNative, idxVarValue);
    82668272    PIEMNATIVEVAR const pVarValue = &pReNative->Core.aVars[IEMNATIVE_VAR_IDX_UNPACK(idxVarValue)];
     
    83108316     * (Code structure is very similar to that of PUSH)
    83118317     */
     8318    RT_CONSTEXPR
    83128319    uint8_t const cbMem       = a_cBitsVar / 8;
    83138320    bool const    fIsIntelSeg = a_fIsSegReg && IEM_IS_GUEST_CPU_INTEL(pReNative->pVCpu);
    8314     uint8_t const cbMemAccess = !fIsIntelSeg || (pReNative->fExec & IEM_F_MODE_MASK) == IEM_F_MODE_X86_16BIT
     8321    uint8_t const cbMemAccess = !a_fIsSegReg || !fIsIntelSeg || (pReNative->fExec & IEM_F_MODE_MASK) == IEM_F_MODE_X86_16BIT
    83158322                              ? cbMem : sizeof(uint16_t);
    83168323    uint8_t const idxRegRsp   = iemNativeRegAllocTmpForGuestReg(pReNative, &off, IEMNATIVEGSTREG_GPR(X86_GREG_xSP),
     
    84738480         * TlbLookup:
    84748481         */
    8475         off = iemNativeEmitTlbLookup<true>(pReNative, off, &TlbState, iSegReg, cbMemAccess, cbMemAccess - 1,
    8476                                            IEM_ACCESS_TYPE_WRITE, idxLabelTlbLookup, idxLabelTlbMiss, idxRegMemResult);
     8482        if (!a_fIsSegReg || cbMemAccess == cbMem)
     8483        {
     8484            Assert(cbMemAccess == cbMem);
     8485            off = iemNativeEmitTlbLookup<true, cbMem, cbMem - 1, IEM_ACCESS_TYPE_WRITE>(pReNative, off, &TlbState,
     8486                                                                                        iSegReg, idxLabelTlbLookup,
     8487                                                                                        idxLabelTlbMiss, idxRegMemResult);
     8488        }
     8489        else
     8490        {
     8491            Assert(cbMemAccess == sizeof(uint16_t));
     8492            off = iemNativeEmitTlbLookup<true, sizeof(uint16_t), sizeof(uint16_t) - 1,
     8493                                         IEM_ACCESS_TYPE_WRITE>(pReNative, off, &TlbState, iSegReg,
     8494                                                                idxLabelTlbLookup, idxLabelTlbMiss, idxRegMemResult);
     8495        }
    84778496
    84788497        /*
     
    84928511                    break;
    84938512                case 4:
    8494                     if (!fIsIntelSeg)
     8513                    if (!a_fIsSegReg || !fIsIntelSeg)
    84958514                        off = iemNativeEmitStoreGpr32ByGprEx(pCodeBuf, off, idxRegValue, idxRegMemResult);
    84968515                    else
     
    88168835         * TlbLookup:
    88178836         */
    8818         off = iemNativeEmitTlbLookup<true>(pReNative, off, &TlbState, iSegReg, cbMem, cbMem - 1, IEM_ACCESS_TYPE_READ,
    8819                                            idxLabelTlbLookup, idxLabelTlbMiss, idxRegMemResult);
     8837        off = iemNativeEmitTlbLookup<true, cbMem, cbMem - 1, IEM_ACCESS_TYPE_READ>(pReNative, off, &TlbState, iSegReg,
     8838                                                                                   idxLabelTlbLookup, idxLabelTlbMiss,
     8839                                                                                   idxRegMemResult);
    88208840
    88218841        /*
     
    94149434         * TlbLookup:
    94159435         */
    9416         off = iemNativeEmitTlbLookup<true>(pReNative, off, &TlbState, iSegReg, a_cbMem, a_fAlignMaskAndCtl, a_fAccess,
    9417                                            idxLabelTlbLookup, idxLabelTlbMiss, idxRegMemResult);
     9436        off = iemNativeEmitTlbLookup<true, a_cbMem, a_fAlignMaskAndCtl, a_fAccess>(pReNative, off, &TlbState, iSegReg,
     9437                                                                                   idxLabelTlbLookup, idxLabelTlbMiss,
     9438                                                                                   idxRegMemResult);
    94189439# ifdef IEM_WITH_TLB_STATISTICS
    94199440        off = iemNativeEmitIncStamCounterInVCpu(pReNative, off, TlbState.idxReg1, TlbState.idxReg2,
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