Changeset 102846 in vbox for trunk/src/VBox/VMM/VMMAll
- Timestamp:
- Jan 11, 2024 2:23:53 PM (11 months ago)
- Location:
- trunk/src/VBox/VMM/VMMAll
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/VMM/VMMAll/IEMAllN8veRecompBltIn.cpp
r102841 r102846 1187 1187 1188 1188 /* 1189 * Move/spill/flush stuff out of call-volatile registers.1190 * This is the easy way out. We could contain this to the tlb-miss branch1191 * by saving and restoring active stuff here.1192 */1193 /** @todo save+restore active registers and maybe guest shadows in tlb-miss. */1194 off = iemNativeRegMoveAndFreeAndFlushAtCall(pReNative, off, 0 /* vacate all non-volatile regs */);1195 1196 /*1197 1189 * Define labels and allocate the register for holding the GCPhys of the new page. 1198 1190 */ … … 1212 1204 iemNativeLabelDefine(pReNative, idxLabelTlbMiss, off); 1213 1205 1206 /* Save variables in volatile registers. */ 1207 uint32_t const fHstRegsNotToSave = /*TlbState.getRegsNotToSave() | */ RT_BIT_32(idxRegGCPhys); 1208 off = iemNativeVarSaveVolatileRegsPreHlpCall(pReNative, off, fHstRegsNotToSave); 1209 1214 1210 /* IEMNATIVE_CALL_ARG1_GREG = offInstr */ 1215 1211 off = iemNativeEmitLoadGpr8Imm(pReNative, off, IEMNATIVE_CALL_ARG1_GREG, offInstr); … … 1224 1220 if (idxRegGCPhys != IEMNATIVE_CALL_RET_GREG) 1225 1221 off = iemNativeEmitLoadGprFromGpr(pReNative, off, idxRegGCPhys, IEMNATIVE_CALL_RET_GREG); 1222 1223 /* Restore variables and guest shadow registers to volatile registers. */ 1224 off = iemNativeVarRestoreVolatileRegsPostHlpCall(pReNative, off, fHstRegsNotToSave); 1225 off = iemNativeRegRestoreGuestShadowsInVolatileRegs(pReNative, off, 0 /*TlbState.getActiveRegsWithShadows()*/); 1226 1226 1227 1227 iemNativeLabelDefine(pReNative, idxLabelTlbDone, off); … … 1505 1505 iemNativeLabelDefine(pReNative, idxLabelTlbMiss, off); 1506 1506 1507 /* Save variables in volatile registers. */ 1508 uint32_t const fHstRegsNotToSave = /*TlbState.getRegsNotToSave() | */ RT_BIT_32(idxRegTmp) | RT_BIT_32(idxRegTmp); 1509 off = iemNativeVarSaveVolatileRegsPreHlpCall(pReNative, off, fHstRegsNotToSave); 1510 1507 1511 /* IEMNATIVE_CALL_ARG0_GREG = pVCpu */ 1508 1512 off = iemNativeEmitLoadGprFromGpr(pReNative, off, IEMNATIVE_CALL_ARG0_GREG, IEMNATIVE_REG_FIXED_PVMCPU); … … 1510 1514 /* Done setting up parameters, make the call. */ 1511 1515 off = iemNativeEmitCallImm(pReNative, off, (uintptr_t)iemNativeHlpMemCodeNewPageTlbMiss); 1516 1517 /* Restore variables and guest shadow registers to volatile registers. */ 1518 off = iemNativeVarRestoreVolatileRegsPostHlpCall(pReNative, off, fHstRegsNotToSave); 1519 off = iemNativeRegRestoreGuestShadowsInVolatileRegs(pReNative, off, 0 /*TlbState.getActiveRegsWithShadows()*/); 1512 1520 1513 1521 /* Jmp back to the start and redo the checks. */ -
trunk/src/VBox/VMM/VMMAll/IEMAllN8veRecompiler.cpp
r102801 r102846 7448 7448 * @param fHstRegsNotToSave Set of registers not to save & restore. 7449 7449 */ 7450 DECL_ INLINE_THROW(uint32_t)7450 DECL_HIDDEN_THROW(uint32_t) 7451 7451 iemNativeVarSaveVolatileRegsPreHlpCall(PIEMRECOMPILERSTATE pReNative, uint32_t off, uint32_t fHstRegsNotToSave) 7452 7452 { … … 7521 7521 * iemNativeRegRestoreGuestShadowsInVolatileRegs() 7522 7522 */ 7523 DECL_ INLINE_THROW(uint32_t)7523 DECL_HIDDEN_THROW(uint32_t) 7524 7524 iemNativeVarRestoreVolatileRegsPostHlpCall(PIEMRECOMPILERSTATE pReNative, uint32_t off, uint32_t fHstRegsNotToSave) 7525 7525 {
Note:
See TracChangeset
for help on using the changeset viewer.