Changeset 99231 in vbox for trunk/src/VBox
- Timestamp:
- Mar 30, 2023 1:28:07 PM (22 months ago)
- Location:
- trunk/src/VBox/VMM/VMMAll
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/VMM/VMMAll/PGMAllPhys.cpp
r99208 r99231 227 227 if ( RT_SUCCESS(rc) 228 228 && pDis->uCpuMode == DISCPUMODE_32BIT /** @todo why does this matter? */ 229 && !(pDis-> fPrefix & (DISPREFIX_REPNE | DISPREFIX_REP | DISPREFIX_SEG)))229 && !(pDis->arch.x86.fPrefix & (DISPREFIX_REPNE | DISPREFIX_REP | DISPREFIX_SEG))) 230 230 { 231 switch (pDis-> bOpCode)231 switch (pDis->arch.x86.bOpCode) 232 232 { 233 233 /** @todo Find other instructions we can safely skip, possibly -
trunk/src/VBox/VMM/VMMAll/PGMAllPool.cpp
r99220 r99231 790 790 } 791 791 792 LogFlow(("Reused instr %RGv %d at %RGv param1.fUse=%llx param1.reg=%d\n", pCtx->rip, pDis->pCurInstr->uOpcode, pvFault, pDis->Param1.fUse, pDis->Param1. Base.idxGenReg));792 LogFlow(("Reused instr %RGv %d at %RGv param1.fUse=%llx param1.reg=%d\n", pCtx->rip, pDis->pCurInstr->uOpcode, pvFault, pDis->Param1.fUse, pDis->Param1.arch.x86.Base.idxGenReg)); 793 793 794 794 /* Non-supervisor mode write means it's used for something else. */ … … 822 822 case OP_MOVSWD: 823 823 case OP_STOSWD: 824 if ( pDis-> fPrefix == (DISPREFIX_REP|DISPREFIX_REX)824 if ( pDis->arch.x86.fPrefix == (DISPREFIX_REP|DISPREFIX_REX) 825 825 && pCtx->rcx >= 0x40 826 826 ) … … 839 839 if ( ( (pDis->Param1.fUse & DISUSE_REG_GEN32) 840 840 || (pDis->Param1.fUse & DISUSE_REG_GEN64)) 841 && (pDis->Param1. Base.idxGenReg == DISGREG_ESP))841 && (pDis->Param1.arch.x86.Base.idxGenReg == DISGREG_ESP)) 842 842 { 843 843 Log4(("pgmRZPoolMonitorIsReused: ESP\n")); … … 939 939 PCPUMCTX pCtx, RTGCPHYS GCPhysFault, RTGCPTR pvFault) 940 940 { 941 unsigned uIncrement = pDis->Param1. cb;941 unsigned uIncrement = pDis->Param1.arch.x86.cb; 942 942 NOREF(pVM); 943 943 … … 946 946 947 947 # ifdef VBOX_STRICT 948 if (pDis-> uOpMode == DISCPUMODE_32BIT)948 if (pDis->arch.x86.uOpMode == DISCPUMODE_32BIT) 949 949 Assert(uIncrement == 4); 950 950 else … … 1184 1184 if ( pPage->GCPtrLastAccessHandlerRip >= pCtx->rip - 0x40 /* observed loops in Windows 7 x64 */ 1185 1185 && pPage->GCPtrLastAccessHandlerRip < pCtx->rip + 0x40 1186 && pvFault == (pPage->GCPtrLastAccessHandlerFault + pDis->Param1. cb)1186 && pvFault == (pPage->GCPtrLastAccessHandlerFault + pDis->Param1.arch.x86.cb) 1187 1187 && pVCpu->pgm.s.cPoolAccessHandler == pPage->cLastAccessHandler + 1) 1188 1188 { … … 1216 1216 * Simple instructions, no REP prefix. 1217 1217 */ 1218 if (!(pDis-> fPrefix & (DISPREFIX_REP | DISPREFIX_REPNE)))1218 if (!(pDis->arch.x86.fPrefix & (DISPREFIX_REP | DISPREFIX_REPNE))) 1219 1219 { 1220 1220 rc = pgmRZPoolAccessPfHandlerSimple(pVM, pVCpu, pPool, pPage, pDis, pCtx, GCPhysFault, &fReused); … … 1259 1259 if ( pDis->pCurInstr->uOpcode == OP_STOSWD 1260 1260 && !pCtx->eflags.Bits.u1DF 1261 && pDis-> uOpMode == pDis->uCpuMode1262 && pDis-> uAddrMode == pDis->uCpuMode)1261 && pDis->arch.x86.uOpMode == pDis->uCpuMode 1262 && pDis->arch.x86.uAddrMode == pDis->uCpuMode) 1263 1263 { 1264 1264 bool fValidStosd = false; 1265 1265 1266 1266 if ( pDis->uCpuMode == DISCPUMODE_32BIT 1267 && pDis-> fPrefix == DISPREFIX_REP1267 && pDis->arch.x86.fPrefix == DISPREFIX_REP 1268 1268 && pCtx->ecx <= 0x20 1269 1269 && pCtx->ecx * 4 <= GUEST_PAGE_SIZE - ((uintptr_t)pvFault & GUEST_PAGE_OFFSET_MASK) … … 1277 1277 else 1278 1278 if ( pDis->uCpuMode == DISCPUMODE_64BIT 1279 && pDis-> fPrefix == (DISPREFIX_REP | DISPREFIX_REX)1279 && pDis->arch.x86.fPrefix == (DISPREFIX_REP | DISPREFIX_REX) 1280 1280 && pCtx->rcx <= 0x20 1281 1281 && pCtx->rcx * 8 <= GUEST_PAGE_SIZE - ((uintptr_t)pvFault & GUEST_PAGE_OFFSET_MASK) … … 1299 1299 STAM_COUNTER_INC(&pPool->StatMonitorPfRZRepPrefix); 1300 1300 Log4(("pgmRZPoolAccessPfHandler: eax=%#x ecx=%#x edi=%#x esi=%#x rip=%RGv opcode=%d prefix=%#x\n", 1301 pCtx->eax, pCtx->ecx, pCtx->edi, pCtx->esi, (RTGCPTR)pCtx->rip, pDis->pCurInstr->uOpcode, pDis-> fPrefix));1301 pCtx->eax, pCtx->ecx, pCtx->edi, pCtx->esi, (RTGCPTR)pCtx->rip, pDis->pCurInstr->uOpcode, pDis->arch.x86.fPrefix)); 1302 1302 fNotReusedNotForking = true; 1303 1303 }
Note:
See TracChangeset
for help on using the changeset viewer.