Changeset 100761 in vbox for trunk/src/VBox/VMM/VMMAll
- Timestamp:
- Aug 1, 2023 2:24:11 AM (18 months ago)
- Location:
- trunk/src/VBox/VMM/VMMAll
- Files:
-
- 5 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/VMM/VMMAll/IEMAllInstOneByte.cpp.h
r100740 r100761 2312 2312 IEMOP_HLP_NO_64BIT(); 2313 2313 if (pVCpu->iem.s.enmEffOpSize == IEMMODE_16BIT) 2314 IEM_MC_DEFER_TO_CIMPL_0_RET( IEM_CIMPL_F_RFLAGS, iemCImpl_popa_16);2314 IEM_MC_DEFER_TO_CIMPL_0_RET(0, iemCImpl_popa_16); 2315 2315 Assert(pVCpu->iem.s.enmEffOpSize == IEMMODE_32BIT); 2316 IEM_MC_DEFER_TO_CIMPL_0_RET( IEM_CIMPL_F_RFLAGS, iemCImpl_popa_32);2316 IEM_MC_DEFER_TO_CIMPL_0_RET(0, iemCImpl_popa_32); 2317 2317 } 2318 2318 IEMOP_MNEMONIC(mvex, "mvex"); … … 5723 5723 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 5724 5724 IEMOP_HLP_DEFAULT_64BIT_OP_SIZE(); 5725 IEM_MC_DEFER_TO_CIMPL_1_RET(IEM_CIMPL_F_VMEXIT | IEM_CIMPL_F_RFLAGS, iemCImpl_popf, pVCpu->iem.s.enmEffOpSize); 5725 IEM_MC_DEFER_TO_CIMPL_1_RET(IEM_CIMPL_F_VMEXIT | IEM_CIMPL_F_RFLAGS | IEM_CIMPL_F_CHECK_IRQ, 5726 iemCImpl_popf, pVCpu->iem.s.enmEffOpSize); 5726 5727 } 5727 5728 … … 7584 7585 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 7585 7586 IEM_MC_DEFER_TO_CIMPL_1_RET(IEM_CIMPL_F_BRANCH_INDIRECT | IEM_CIMPL_F_BRANCH_FAR 7586 | IEM_CIMPL_F_MODE | IEM_CIMPL_F_RFLAGS | IEM_CIMPL_F_ VMEXIT,7587 | IEM_CIMPL_F_MODE | IEM_CIMPL_F_RFLAGS | IEM_CIMPL_F_CHECK_IRQ | IEM_CIMPL_F_VMEXIT, 7587 7588 iemCImpl_iret, pVCpu->iem.s.enmEffOpSize); 7588 7589 } … … 12543 12544 IEMOP_MNEMONIC(sti, "sti"); 12544 12545 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 12545 IEM_MC_DEFER_TO_CIMPL_0_RET(IEM_CIMPL_F_RFLAGS | IEM_CIMPL_F_ VMEXIT, iemCImpl_sti);12546 IEM_MC_DEFER_TO_CIMPL_0_RET(IEM_CIMPL_F_RFLAGS | IEM_CIMPL_F_CHECK_IRQ_DELAYED | IEM_CIMPL_F_VMEXIT, iemCImpl_sti); 12546 12547 } 12547 12548 -
trunk/src/VBox/VMM/VMMAll/IEMAllThrdFuncsBltIn.cpp
r100752 r100761 88 88 return pfnCImpl(pVCpu, cbInstr); 89 89 } 90 91 92 /** 93 * Built-in function that checks for pending interrupts that can be delivered. 94 * 95 * This triggers after the completion of an instruction, so EIP is already at 96 * the next instruction. If an IRQ or important FF is pending, this will return 97 * a non-zero status that stops TB execution. 98 */ 99 IEM_DECL_IEMTHREADEDFUNC_DEF(iemThreadedFunc_BltIn_CheckIrq) 100 { 101 RT_NOREF(uParam0, uParam1, uParam2); 102 103 /* 104 * Check for IRQs and other FFs that needs servicing. 105 */ 106 uint64_t fCpu = pVCpu->fLocalForcedActions; 107 fCpu &= VMCPU_FF_ALL_MASK & ~( VMCPU_FF_PGM_SYNC_CR3 108 | VMCPU_FF_PGM_SYNC_CR3_NON_GLOBAL 109 | VMCPU_FF_TLB_FLUSH 110 | VMCPU_FF_UNHALT ); 111 if (RT_LIKELY( ( !fCpu 112 || ( !(fCpu & ~(VMCPU_FF_INTERRUPT_APIC | VMCPU_FF_INTERRUPT_PIC)) 113 && !pVCpu->cpum.GstCtx.rflags.Bits.u1IF) ) 114 && !VM_FF_IS_ANY_SET(pVCpu->CTX_SUFF(pVM), VM_FF_ALL_MASK) )) 115 return VINF_SUCCESS; 116 117 Log(("%04x:%08RX32: Pending IRQ and/or FF: fCpu=%#RX64 fVm=%#RX32 IF=%d\n", 118 pVCpu->cpum.GstCtx.cs.Sel, pVCpu->cpum.GstCtx.eip, fCpu, 119 pVCpu->CTX_SUFF(pVM)->fGlobalForcedActions & VM_FF_ALL_MASK, pVCpu->cpum.GstCtx.rflags.Bits.u1IF)); 120 return VINF_IEM_REEXEC_MODE_CHANGED; 121 } 122 90 123 91 124 -
trunk/src/VBox/VMM/VMMAll/IEMAllThrdPython.py
r100752 r100761 209 209 'IEM_CIMPL_F_BRANCH_CONDITIONAL': False, 210 210 'IEM_CIMPL_F_RFLAGS': False, 211 'IEM_CIMPL_F_CHECK_IRQ': False, 212 'IEM_CIMPL_F_CHECK_IRQ_DELAYED': False, 211 213 'IEM_CIMPL_F_STATUS_FLAGS': False, 212 214 'IEM_CIMPL_F_VMEXIT': True, … … 909 911 # mask and maybe emit additional checks. 910 912 if 'IEM_CIMPL_F_MODE' in self.dsCImplFlags or 'IEM_CIMPL_F_XCPT' in self.dsCImplFlags: 911 aoStmts.append(iai.McCppCall('IEM_MC2_EMIT_CALL_1', ( 'kIemThreadedFunc_ CheckMode', 'pVCpu->iem.s.fExec', ),913 aoStmts.append(iai.McCppCall('IEM_MC2_EMIT_CALL_1', ( 'kIemThreadedFunc_BltIn_CheckMode', 'pVCpu->iem.s.fExec', ), 912 914 cchIndent = cchIndent)); 913 915 … … 931 933 aoStmts.append(iai.McCppGeneric('pVCpu->iem.s.fEndTb = true; /* %s */' % (','.join(asEndTbFlags),), 932 934 cchIndent = cchIndent)); 935 936 if 'IEM_CIMPL_F_CHECK_IRQ' in self.dsCImplFlags: 937 aoStmts.append(iai.McCppGeneric('pVCpu->iem.s.cInstrTillIrqCheck = 0;', cchIndent = cchIndent)); 938 elif 'IEM_CIMPL_F_CHECK_IRQ_DELAYED' in self.dsCImplFlags: 939 aoStmts.append(iai.McCppGeneric('pVCpu->iem.s.cInstrTillIrqCheck = 1;', cchIndent = cchIndent)); 933 940 934 941 return aoStmts; … … 1366 1373 ]; 1367 1374 1375 ## List of built-in threaded functions. 1376 kasBltIns = ( 1377 'DeferToCImpl0', 1378 'CheckIrq', 1379 'CheckMode', 1380 'CheckCsLim', 1381 'CheckCsLimAndOpcodes', 1382 'CheckOpcodes', 1383 'CheckCsLimAndPcAndOpcodes', 1384 'CheckPcAndOpcodes', 1385 'CheckCsLimAndOpcodesAcrossPageLoadingTlb', 1386 'CheckOpcodesAcrossPageLoadingTlb', 1387 'CheckCsLimAndOpcodesLoadingTlb', 1388 'CheckOpcodesLoadingTlb', 1389 'CheckCsLimAndOpcodesOnNextPageLoadingTlb', 1390 'CheckOpcodesOnNextPageLoadingTlb', 1391 'CheckCsLimAndOpcodesOnNewPageLoadingTlb', 1392 'CheckOpcodesOnNewPageLoadingTlb', 1393 ); 1368 1394 1369 1395 def generateThreadedFunctionsHeader(self, oOut): … … 1384 1410 ' * Predefined', 1385 1411 ' */', 1386 ' kIemThreadedFunc_DeferToCImpl0,',1387 ' kIemThreadedFunc_CheckMode,',1388 ' kIemThreadedFunc_CheckCsLim,',1389 ' kIemThreadedFunc_CheckCsLimAndOpcodes,',1390 ' kIemThreadedFunc_CheckOpcodes,',1391 ' kIemThreadedFunc_CheckCsLimAndPcAndOpcodes,',1392 ' kIemThreadedFunc_CheckPcAndOpcodes,',1393 ' kIemThreadedFunc_CheckCsLimAndOpcodesAcrossPageLoadingTlb,',1394 ' kIemThreadedFunc_CheckOpcodesAcrossPageLoadingTlb,',1395 ' kIemThreadedFunc_CheckCsLimAndOpcodesLoadingTlb,',1396 ' kIemThreadedFunc_CheckOpcodesLoadingTlb,',1397 ' kIemThreadedFunc_CheckCsLimAndOpcodesOnNextPageLoadingTlb,',1398 ' kIemThreadedFunc_CheckOpcodesOnNextPageLoadingTlb,',1399 ' kIemThreadedFunc_CheckCsLimAndOpcodesOnNewPageLoadingTlb,',1400 ' kIemThreadedFunc_CheckOpcodesOnNewPageLoadingTlb,',1401 1412 ]; 1413 asLines += [' kIemThreadedFunc_BltIn_%s,' % (sFuncNm,) for sFuncNm in self.kasBltIns]; 1414 1402 1415 iThreadedFunction = 1; 1403 1416 for sVariation in ThreadedFunctionVariation.kasVariationsEmitOrder: … … 1540 1553 + ' /*\n' 1541 1554 + ' * Predefined.\n' 1542 + ' */' 1543 + ' iemThreadedFunc_BltIn_DeferToCImpl0,\n' 1544 + ' iemThreadedFunc_BltIn_CheckMode,\n' 1545 + ' iemThreadedFunc_BltIn_CheckCsLim,\n' 1546 + ' iemThreadedFunc_BltIn_CheckCsLimAndOpcodes,\n' 1547 + ' iemThreadedFunc_BltIn_CheckOpcodes,\n' 1548 + ' iemThreadedFunc_BltIn_CheckCsLimAndPcAndOpcodes,\n' 1549 + ' iemThreadedFunc_BltIn_CheckPcAndOpcodes,\n' 1550 + ' iemThreadedFunc_BltIn_CheckCsLimAndOpcodesAcrossPageLoadingTlb,\n' 1551 + ' iemThreadedFunc_BltIn_CheckOpcodesAcrossPageLoadingTlb,\n' 1552 + ' iemThreadedFunc_BltIn_CheckCsLimAndOpcodesLoadingTlb,\n' 1553 + ' iemThreadedFunc_BltIn_CheckOpcodesLoadingTlb,\n' 1554 + ' iemThreadedFunc_BltIn_CheckCsLimAndOpcodesOnNextPageLoadingTlb,\n' 1555 + ' iemThreadedFunc_BltIn_CheckOpcodesOnNextPageLoadingTlb,\n' 1556 + ' iemThreadedFunc_BltIn_CheckCsLimAndOpcodesOnNewPageLoadingTlb,\n' 1557 + ' iemThreadedFunc_BltIn_CheckOpcodesOnNewPageLoadingTlb,\n' 1558 ); 1555 + ' */\n'); 1556 for sFuncNm in self.kasBltIns: 1557 oOut.write(' iemThreadedFunc_BltIn_%s,\n' % (sFuncNm,)); 1558 1559 1559 iThreadedFunction = 1; 1560 1560 for sVariation in ThreadedFunctionVariation.kasVariationsEmitOrder: … … 1586 1586 + ' /*\n' 1587 1587 + ' * Predefined.\n' 1588 + ' */' 1589 + ' "BltIn_DeferToCImpl0",\n' 1590 + ' "BltIn_CheckMode",\n' 1591 + ' "BltIn_CheckCsLim",\n' 1592 + ' "BltIn_CheckCsLimAndOpcodes",\n' 1593 + ' "BltIn_CheckOpcodes",\n' 1594 + ' "BltIn_CheckCsLimAndPcAndOpcodes",\n' 1595 + ' "BltIn_CheckPcAndOpcodes",\n' 1596 + ' "BltIn_CheckCsLimAndOpcodesAcrossPageLoadingTlb",\n' 1597 + ' "BltIn_CheckOpcodesAcrossPageLoadingTlb",\n' 1598 + ' "BltIn_CheckCsLimAndOpcodesLoadingTlb",\n' 1599 + ' "BltIn_CheckOpcodesLoadingTlb",\n' 1600 + ' "BltIn_CheckCsLimAndOpcodesOnNextPageLoadingTlb",\n' 1601 + ' "BltIn_CheckOpcodesOnNextPageLoadingTlb",\n' 1602 + ' "BltIn_CheckCsLimAndOpcodesOnNewPageLoadingTlb",\n' 1603 + ' "BltIn_CheckOpcodesOnNewPageLoadingTlb",\n' 1604 ); 1588 + ' */\n'); 1589 for sFuncNm in self.kasBltIns: 1590 oOut.write(' "BltIn_%s",\n' % (sFuncNm,)); 1591 1605 1592 iThreadedFunction = 1; 1606 1593 for sVariation in ThreadedFunctionVariation.kasVariationsEmitOrder: -
trunk/src/VBox/VMM/VMMAll/IEMAllThrdRecompiler.cpp
r100752 r100761 446 446 uint32_t cHash; 447 447 uint32_t uHashMask; 448 PIEMTB apHash[_ 64K];448 PIEMTB apHash[_1M]; 449 449 } IEMTBCACHE; 450 450 451 static IEMTBCACHE g_TbCache = { _ 64K, 0xffff, }; /**< Quick and dirty. */451 static IEMTBCACHE g_TbCache = { _1M, _1M - 1, }; /**< Quick and dirty. */ 452 452 453 453 #define IEMTBCACHE_HASH(a_paCache, a_fTbFlags, a_GCPhysPc) \ … … 735 735 pVCpu->iem.s.fTbBranched = IEMBRANCHED_F_NO; 736 736 pVCpu->iem.s.fTbCrossedPage = false; 737 pVCpu->iem.s.cInstrTillIrqCheck = 32; 737 738 } 738 739 else … … 868 869 { 869 870 Assert((pVCpu->iem.s.GCPhysInstrBuf & GUEST_PAGE_OFFSET_MASK) == 0); 871 #if 0 870 872 if (pVCpu->cpum.GstCtx.rip >= 0xc0000000 && !LogIsEnabled()) 871 873 RTLogChangeFlags(NULL, 0, RTLOGFLAGS_DISABLED); 874 #endif 872 875 873 876 /* … … 992 995 || pVCpu->iem.s.fTbCrossedPage) 993 996 pCall->enmFunction = pTb->fFlags & IEMTB_F_CS_LIM_CHECKS 994 ? kIemThreadedFunc_ CheckCsLimAndOpcodesLoadingTlb995 : kIemThreadedFunc_ CheckOpcodesLoadingTlb;997 ? kIemThreadedFunc_BltIn_CheckCsLimAndOpcodesLoadingTlb 998 : kIemThreadedFunc_BltIn_CheckOpcodesLoadingTlb; 996 999 else if (pVCpu->iem.s.fTbBranched & (IEMBRANCHED_F_CONDITIONAL | /* paranoia: */ IEMBRANCHED_F_DIRECT)) 997 1000 pCall->enmFunction = pTb->fFlags & IEMTB_F_CS_LIM_CHECKS 998 ? kIemThreadedFunc_ CheckCsLimAndPcAndOpcodes999 : kIemThreadedFunc_ CheckPcAndOpcodes;1001 ? kIemThreadedFunc_BltIn_CheckCsLimAndPcAndOpcodes 1002 : kIemThreadedFunc_BltIn_CheckPcAndOpcodes; 1000 1003 else 1001 1004 { 1002 1005 Assert(pVCpu->iem.s.fTbBranched & IEMBRANCHED_F_RELATIVE); 1003 1006 pCall->enmFunction = pTb->fFlags & IEMTB_F_CS_LIM_CHECKS 1004 ? kIemThreadedFunc_ CheckCsLimAndOpcodes1005 : kIemThreadedFunc_ CheckOpcodes;1007 ? kIemThreadedFunc_BltIn_CheckCsLimAndOpcodes 1008 : kIemThreadedFunc_BltIn_CheckOpcodes; 1006 1009 } 1007 1010 } … … 1104 1107 /* Determin which function we need to load & check. */ 1105 1108 pCall->enmFunction = pTb->fFlags & IEMTB_F_CS_LIM_CHECKS 1106 ? kIemThreadedFunc_ CheckCsLimAndOpcodesOnNewPageLoadingTlb1107 : kIemThreadedFunc_ CheckOpcodesOnNewPageLoadingTlb;1109 ? kIemThreadedFunc_BltIn_CheckCsLimAndOpcodesOnNewPageLoadingTlb 1110 : kIemThreadedFunc_BltIn_CheckOpcodesOnNewPageLoadingTlb; 1108 1111 } 1109 1112 else … … 1126 1129 if (pVCpu->iem.s.fTbCheckOpcodes) 1127 1130 pCall->enmFunction = pTb->fFlags & IEMTB_F_CS_LIM_CHECKS 1128 ? kIemThreadedFunc_ CheckCsLimAndOpcodesAcrossPageLoadingTlb1129 : kIemThreadedFunc_ CheckOpcodesAcrossPageLoadingTlb;1131 ? kIemThreadedFunc_BltIn_CheckCsLimAndOpcodesAcrossPageLoadingTlb 1132 : kIemThreadedFunc_BltIn_CheckOpcodesAcrossPageLoadingTlb; 1130 1133 else 1131 1134 pCall->enmFunction = pTb->fFlags & IEMTB_F_CS_LIM_CHECKS 1132 ? kIemThreadedFunc_ CheckCsLimAndOpcodesOnNextPageLoadingTlb1133 : kIemThreadedFunc_ CheckOpcodesOnNextPageLoadingTlb;1135 ? kIemThreadedFunc_BltIn_CheckCsLimAndOpcodesOnNextPageLoadingTlb 1136 : kIemThreadedFunc_BltIn_CheckOpcodesOnNextPageLoadingTlb; 1134 1137 } 1135 1138 } … … 1143 1146 if (pVCpu->iem.s.fTbCheckOpcodes) 1144 1147 pCall->enmFunction = pTb->fFlags & IEMTB_F_CS_LIM_CHECKS 1145 ? kIemThreadedFunc_ CheckCsLimAndOpcodes1146 : kIemThreadedFunc_ CheckOpcodes;1148 ? kIemThreadedFunc_BltIn_CheckCsLimAndOpcodes 1149 : kIemThreadedFunc_BltIn_CheckOpcodes; 1147 1150 else 1148 pCall->enmFunction = kIemThreadedFunc_ CheckCsLim;1151 pCall->enmFunction = kIemThreadedFunc_BltIn_CheckCsLim; 1149 1152 1150 1153 iemThreadedCopyOpcodeBytesInline(pVCpu, &pTb->pabOpcodes[offOpcode], cbInstr); … … 1176 1179 } 1177 1180 1181 1182 /** 1183 * Emits an IRQ check call and checks for pending IRQs. 1184 * 1185 * @returns true if IRQs are pending and can be dispatched, false if not. 1186 * @param pVCpu The cross context virtual CPU structure of the calling 1187 * thread. 1188 * @param pTb The transation block. 1189 */ 1190 static bool iemThreadedCompileCheckIrq(PVMCPUCC pVCpu, PIEMTB pTb) 1191 { 1192 pVCpu->iem.s.cInstrTillIrqCheck = 32; 1193 1194 /* 1195 * Emit the call first. 1196 */ 1197 AssertReturn(pTb->Thrd.cCalls < pTb->Thrd.cAllocated, true); 1198 PIEMTHRDEDCALLENTRY pCall = &pTb->Thrd.paCalls[pTb->Thrd.cCalls++]; 1199 pCall->enmFunction = kIemThreadedFunc_BltIn_CheckIrq; 1200 pCall->uUnused0 = 0; 1201 pCall->offOpcode = 0; 1202 pCall->cbOpcode = 0; 1203 pCall->idxRange = 0; 1204 pCall->auParams[0] = 0; 1205 pCall->auParams[1] = 0; 1206 pCall->auParams[2] = 0; 1207 1208 1209 /* 1210 * Check for IRQs. 1211 */ 1212 uint64_t fCpu = pVCpu->fLocalForcedActions; 1213 fCpu &= VMCPU_FF_INTERRUPT_APIC | VMCPU_FF_INTERRUPT_PIC | VMCPU_FF_INTERRUPT_NMI | VMCPU_FF_INTERRUPT_SMI; 1214 if (RT_LIKELY( !fCpu 1215 || ( !(fCpu & ~(VMCPU_FF_INTERRUPT_APIC | VMCPU_FF_INTERRUPT_PIC)) 1216 && !pVCpu->cpum.GstCtx.rflags.Bits.u1IF))) 1217 return false; 1218 return true; 1219 } 1178 1220 1179 1221 … … 1251 1293 return iemExecStatusCodeFiddling(pVCpu, rcStrict); 1252 1294 } 1295 1296 /* Check for IRQs? */ 1297 if (pVCpu->iem.s.cInstrTillIrqCheck-- > 0) 1298 { /* likely */ } 1299 else if (iemThreadedCompileCheckIrq(pVCpu, pTb)) 1300 break; 1253 1301 1254 1302 /* Still space in the TB? */ -
trunk/src/VBox/VMM/VMMAll/IEMAllThrdTables.h
r100742 r100761 275 275 276 276 IEM_MC2_BEGIN_EMIT_CALLS(); 277 IEM_MC2_EMIT_CALL_2(kIemThreadedFunc_ DeferToCImpl0, (uintptr_t)pfnCImpl, IEM_GET_INSTR_LEN(pVCpu));277 IEM_MC2_EMIT_CALL_2(kIemThreadedFunc_BltIn_DeferToCImpl0, (uintptr_t)pfnCImpl, IEM_GET_INSTR_LEN(pVCpu)); 278 278 IEM_MC2_END_EMIT_CALLS(fFlags); 279 279 280 /* We have to repeat work normally done by kdCImplFlags and 281 ThreadedFunctionVariation.emitThreadedCallStmts here. */ 282 if (fFlags & (IEM_CIMPL_F_END_TB | IEM_CIMPL_F_MODE | IEM_CIMPL_F_VMEXIT | IEM_CIMPL_F_BRANCH_FAR | IEM_CIMPL_F_REP)) 283 pVCpu->iem.s.fEndTb = true; 284 280 /* 281 * We have to repeat work normally done by kdCImplFlags and 282 * ThreadedFunctionVariation.emitThreadedCallStmts here. 283 */ 285 284 AssertCompile(IEM_CIMPL_F_BRANCH_DIRECT == IEMBRANCHED_F_DIRECT); 286 285 AssertCompile(IEM_CIMPL_F_BRANCH_INDIRECT == IEMBRANCHED_F_INDIRECT); … … 288 287 AssertCompile(IEM_CIMPL_F_BRANCH_CONDITIONAL == IEMBRANCHED_F_CONDITIONAL); 289 288 AssertCompile(IEM_CIMPL_F_BRANCH_FAR == IEMBRANCHED_F_FAR); 290 if (fFlags & IEM_CIMPL_F_BRANCH_ANY) 289 290 if (fFlags & (IEM_CIMPL_F_END_TB | IEM_CIMPL_F_MODE | IEM_CIMPL_F_VMEXIT | IEM_CIMPL_F_BRANCH_FAR | IEM_CIMPL_F_REP)) 291 pVCpu->iem.s.fEndTb = true; 292 else if (fFlags & IEM_CIMPL_F_BRANCH_ANY) 291 293 pVCpu->iem.s.fTbBranched = fFlags & (IEM_CIMPL_F_BRANCH_ANY | IEM_CIMPL_F_BRANCH_FAR | IEM_CIMPL_F_BRANCH_CONDITIONAL); 294 295 if (fFlags & IEM_CIMPL_F_CHECK_IRQ) 296 pVCpu->iem.s.cInstrTillIrqCheck = 0; 297 else if (fFlags & IEM_CIMPL_F_CHECK_IRQ_DELAYED) 298 pVCpu->iem.s.cInstrTillIrqCheck = 1; 292 299 293 300 return pfnCImpl(pVCpu, IEM_GET_INSTR_LEN(pVCpu));
Note:
See TracChangeset
for help on using the changeset viewer.