Changeset 100790 in vbox
- Timestamp:
- Aug 4, 2023 8:53:14 AM (16 months ago)
- Location:
- trunk/src/VBox/VMM/VMMAll
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/VMM/VMMAll/IEMAllThrdFuncsBltIn.cpp
r100788 r100790 109 109 | VMCPU_FF_TLB_FLUSH 110 110 | VMCPU_FF_UNHALT ); 111 /** @todo this isn't even close to the NMI and interrupt conditions in EM! */ 111 112 if (RT_LIKELY( ( !fCpu 112 113 || ( !(fCpu & ~(VMCPU_FF_INTERRUPT_APIC | VMCPU_FF_INTERRUPT_PIC)) -
trunk/src/VBox/VMM/VMMAll/IEMAllThrdRecompiler.cpp
r100789 r100790 1194 1194 fCpu &= VMCPU_FF_INTERRUPT_APIC | VMCPU_FF_INTERRUPT_PIC | VMCPU_FF_INTERRUPT_NMI | VMCPU_FF_INTERRUPT_SMI; 1195 1195 #if 1 1196 /** @todo this isn't even close to the NMI/IRQ conditions in EM. */ 1196 1197 if (RT_LIKELY( !fCpu 1197 1198 || ( !(fCpu & ~(VMCPU_FF_INTERRUPT_APIC | VMCPU_FF_INTERRUPT_PIC)) … … 1221 1222 { 1222 1223 /* 1223 * Skip this we've already emitted a call after the previous instruction. 1224 * Skip this we've already emitted a call after the previous instruction 1225 * or if it's the first call, as we're always checking FFs between blocks. 1224 1226 */ 1225 1227 uint32_t const idxCall = pTb->Thrd.cCalls; 1226 if ( idxCall ==01227 ||pTb->Thrd.paCalls[idxCall - 1].enmFunction != kIemThreadedFunc_BltIn_CheckIrq)1228 if ( idxCall > 0 1229 && pTb->Thrd.paCalls[idxCall - 1].enmFunction != kIemThreadedFunc_BltIn_CheckIrq) 1228 1230 { 1229 1231 /* Emit the call. */ … … 1328 1330 pVCpu->iem.s.pCurTbR3 = pTb; 1329 1331 1332 #if 0 1333 /* Make sure the CheckIrq condition matches the one in EM. */ 1334 iemThreadedCompileCheckIrqAfter(pVCpu, pTb); 1335 const uint32_t cZeroCalls = 1; 1336 #else 1337 const uint32_t cZeroCalls = 0; 1338 #endif 1339 1330 1340 /* 1331 1341 * Now for the recomplication. (This mimicks IEMExecLots in many ways.) … … 1362 1372 rcStrict = VINF_SUCCESS; 1363 1373 1364 if (pTb->Thrd.cCalls > 0)1374 if (pTb->Thrd.cCalls > cZeroCalls) 1365 1375 { 1366 1376 if (cCallsPrev != pTb->Thrd.cCalls) … … 1456 1466 pCallEntry->auParams[1], 1457 1467 pCallEntry->auParams[2]); 1458 1459 1468 if (RT_LIKELY( rcStrict == VINF_SUCCESS 1460 1469 && pVCpu->iem.s.rcPassUp == VINF_SUCCESS /** @todo this isn't great. */)) … … 1472 1481 } 1473 1482 1483 pVCpu->iem.s.cInstructions += pTb->cInstructions; 1474 1484 pVCpu->iem.s.pCurTbR3 = NULL; 1475 1485 return VINF_SUCCESS; … … 1606 1616 | VMCPU_FF_TLB_FLUSH 1607 1617 | VMCPU_FF_UNHALT ); 1618 /** @todo this isn't even close to the NMI/IRQ conditions in EM. */ 1608 1619 if (RT_LIKELY( ( !fCpu 1609 1620 || ( !(fCpu & ~(VMCPU_FF_INTERRUPT_APIC | VMCPU_FF_INTERRUPT_PIC)) 1610 && !pVCpu->cpum.GstCtx.rflags.Bits.u1IF) ) 1621 && ( !pVCpu->cpum.GstCtx.rflags.Bits.u1IF 1622 || CPUMIsInInterruptShadow(&pVCpu->cpum.GstCtx) )) ) 1611 1623 && !VM_FF_IS_ANY_SET(pVM, VM_FF_ALL_MASK) )) 1612 1624 {
Note:
See TracChangeset
for help on using the changeset viewer.