Changeset 104151 in vbox
- Timestamp:
- Apr 4, 2024 9:29:59 AM (11 months ago)
- svn:sync-xref-src-repo-rev:
- 162573
- Location:
- trunk/src/VBox/VMM
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/VMM/VMMAll/IEMAllN8veRecompiler.cpp
r104147 r104151 2391 2391 DECL_HIDDEN_THROW(void) iemNativeDbgInfoAddGuestRegWriteback(PIEMRECOMPILERSTATE pReNative, bool fSimdReg, uint64_t fGstReg) 2392 2392 { 2393 unsigned const cBitsGstRegMask = 25; 2394 uint32_t const fGstRegMask = RT_BIT_32(cBitsGstRegMask) - 1U; 2395 2396 /* The first block of 25 bits: */ 2397 if (fGstReg & fGstRegMask) 2398 { 2399 PIEMTBDBGENTRY const pEntry = iemNativeDbgInfoAddNewEntry(pReNative, pReNative->pDbgInfo); 2400 pEntry->GuestRegWriteback.uType = kIemTbDbgEntryType_GuestRegWriteback; 2401 pEntry->GuestRegWriteback.fSimdReg = fSimdReg ? 1 : 0; 2402 pEntry->GuestRegWriteback.cShift = 0; 2403 pEntry->GuestRegWriteback.fGstReg = (uint32_t)(fGstReg & fGstRegMask); 2404 fGstReg &= ~(uint64_t)fGstRegMask; 2405 if (!fGstReg) 2406 return; 2407 } 2408 2409 /* The second block of 25 bits: */ 2410 fGstReg >>= cBitsGstRegMask; 2411 if (fGstReg & fGstRegMask) 2412 { 2413 PIEMTBDBGENTRY const pEntry = iemNativeDbgInfoAddNewEntry(pReNative, pReNative->pDbgInfo); 2414 pEntry->GuestRegWriteback.uType = kIemTbDbgEntryType_GuestRegWriteback; 2415 pEntry->GuestRegWriteback.fSimdReg = fSimdReg ? 1 : 0; 2416 pEntry->GuestRegWriteback.cShift = 0; 2417 pEntry->GuestRegWriteback.fGstReg = (uint32_t)(fGstReg & fGstRegMask); 2418 fGstReg &= ~(uint64_t)fGstRegMask; 2419 if (!fGstReg) 2420 return; 2421 } 2422 2423 /* The last block with 14 bits: */ 2424 fGstReg >>= cBitsGstRegMask; 2425 Assert(fGstReg & fGstRegMask); 2426 Assert((fGstReg & ~(uint64_t)fGstRegMask) == 0); 2393 2427 PIEMTBDBGENTRY const pEntry = iemNativeDbgInfoAddNewEntry(pReNative, pReNative->pDbgInfo); 2394 pEntry->GuestRegWriteback.uType = kIemTbDbgEntryType_GuestRegWriteback; 2395 pEntry->GuestRegWriteback.fSimdReg = fSimdReg ? 1 : 0; 2396 pEntry->GuestRegWriteback.fGstReg = (uint32_t)fGstReg; 2397 /** @todo r=aeichner Can't fit the whole register mask in the debug info entry, deal with it when it becomes necessary. */ 2398 Assert((uint64_t)pEntry->GuestRegWriteback.fGstReg == fGstReg); 2428 pEntry->GuestRegWriteback.uType = kIemTbDbgEntryType_GuestRegWriteback; 2429 pEntry->GuestRegWriteback.fSimdReg = fSimdReg ? 1 : 0; 2430 pEntry->GuestRegWriteback.cShift = 2; 2431 pEntry->GuestRegWriteback.fGstReg = (uint32_t)(fGstReg & fGstRegMask); 2399 2432 } 2400 2433 … … 8639 8672 pHlp->pfnPrintf(pHlp, " Writing dirty %s registers (gst %#RX32)\n", 8640 8673 pDbgInfo->aEntries[iDbgEntry].GuestRegWriteback.fSimdReg ? "SIMD" : "general", 8641 pDbgInfo->aEntries[iDbgEntry].GuestRegWriteback.fGstReg); 8674 (uint64_t)pDbgInfo->aEntries[iDbgEntry].GuestRegWriteback.fGstReg 8675 << (pDbgInfo->aEntries[iDbgEntry].GuestRegWriteback.cShift * 25)); 8642 8676 continue; 8643 8677 #endif -
trunk/src/VBox/VMM/include/IEMInternal.h
r104150 r104151 1119 1119 /** Flag whether this is about a SIMD (true) or general (false) register flush. */ 1120 1120 uint32_t fSimdReg : 1; 1121 /** The mask shift. */ 1122 uint32_t cShift : 2; 1121 1123 /** The guest register mask being written back. */ 1122 uint32_t fGstReg : 2 7;1124 uint32_t fGstReg : 25; 1123 1125 } GuestRegWriteback; 1124 1126 #endif
Note:
See TracChangeset
for help on using the changeset viewer.