Changeset 106443 in vbox for trunk/src/VBox/VMM/VMMAll
- Timestamp:
- Oct 17, 2024 12:02:12 PM (4 months ago)
- svn:sync-xref-src-repo-rev:
- 165262
- Location:
- trunk/src/VBox/VMM/VMMAll
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/VMM/VMMAll/IEMAllN8veRecompBltIn.cpp
r106315 r106443 1473 1473 * TlbLookup: 1474 1474 */ 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); 1479 1479 1480 1480 # ifdef IEM_WITH_TLB_STATISTICS … … 1771 1771 * TlbLookup: 1772 1772 */ 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); 1776 1776 1777 1777 # ifdef IEM_WITH_TLB_STATISTICS -
trunk/src/VBox/VMM/VMMAll/IEMAllN8veRecompFuncs.h
r106432 r106443 1779 1779 * TlbLookup: 1780 1780 */ 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); 1783 1784 1784 1785 /* … … 2455 2456 * TlbLookup: 2456 2457 */ 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); 2459 2461 2460 2462 /* … … 7608 7610 * TlbLookup: 7609 7611 */ 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); 7613 7616 7614 7617 /* … … 8263 8266 * Assert sanity. 8264 8267 */ 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); 8265 8271 IEMNATIVE_ASSERT_VAR_IDX(pReNative, idxVarValue); 8266 8272 PIEMNATIVEVAR const pVarValue = &pReNative->Core.aVars[IEMNATIVE_VAR_IDX_UNPACK(idxVarValue)]; … … 8310 8316 * (Code structure is very similar to that of PUSH) 8311 8317 */ 8318 RT_CONSTEXPR 8312 8319 uint8_t const cbMem = a_cBitsVar / 8; 8313 8320 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_16BIT8321 uint8_t const cbMemAccess = !a_fIsSegReg || !fIsIntelSeg || (pReNative->fExec & IEM_F_MODE_MASK) == IEM_F_MODE_X86_16BIT 8315 8322 ? cbMem : sizeof(uint16_t); 8316 8323 uint8_t const idxRegRsp = iemNativeRegAllocTmpForGuestReg(pReNative, &off, IEMNATIVEGSTREG_GPR(X86_GREG_xSP), … … 8473 8480 * TlbLookup: 8474 8481 */ 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 } 8477 8496 8478 8497 /* … … 8492 8511 break; 8493 8512 case 4: 8494 if (! fIsIntelSeg)8513 if (!a_fIsSegReg || !fIsIntelSeg) 8495 8514 off = iemNativeEmitStoreGpr32ByGprEx(pCodeBuf, off, idxRegValue, idxRegMemResult); 8496 8515 else … … 8816 8835 * TlbLookup: 8817 8836 */ 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); 8820 8840 8821 8841 /* … … 9414 9434 * TlbLookup: 9415 9435 */ 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); 9418 9439 # ifdef IEM_WITH_TLB_STATISTICS 9419 9440 off = iemNativeEmitIncStamCounterInVCpu(pReNative, off, TlbState.idxReg1, TlbState.idxReg2,
Note:
See TracChangeset
for help on using the changeset viewer.