Changeset 104407 in vbox
- Timestamp:
- Apr 23, 2024 11:16:04 PM (12 months ago)
- svn:sync-xref-src-repo-rev:
- 162902
- Location:
- trunk
- Files:
-
- 7 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/include/VBox/err.h
r104099 r104407 2507 2507 /** Recompiled execution: Break out of current TB execution. */ 2508 2508 #define VINF_IEM_REEXEC_BREAK (5310) 2509 /** Recompiled execution: Breaking out because of FFs or/and IRQs. */ 2510 #define VINF_IEM_REEXEC_BREAK_FF (5311) 2509 2511 /** Recompiled execution: Debug related (hidden) EFLAGS are set and needs 2510 2512 * handling. */ 2511 #define VINF_IEM_REEXEC_FINISH_WITH_FLAGS (531 1)2513 #define VINF_IEM_REEXEC_FINISH_WITH_FLAGS (5312) 2512 2514 2513 2515 /** Recompilation: End translation block. */ -
trunk/src/VBox/VMM/VMMAll/IEMAllN8veRecompBltIn.cpp
r104030 r104407 215 215 UINT32_MAX, pReNative->uCheckIrqSeqNo++); 216 216 217 uint32_t const idxLabelReturnBreak = iemNativeLabelCreate(pReNative, kIemNativeLabelType_ReturnBreak);217 uint32_t const idxLabelReturnBreakFF = iemNativeLabelCreate(pReNative, kIemNativeLabelType_ReturnBreakFF); 218 218 219 219 /* Again, we need to load the extended EFLAGS before we actually need them … … 250 250 ~(VMCPU_FF_INTERRUPT_APIC | VMCPU_FF_INTERRUPT_PIC), true /*fSetFlags*/); 251 251 /* Return VINF_IEM_REEXEC_BREAK if other FFs are set. */ 252 off = iemNativeEmitJnzToLabel(pReNative, off, idxLabelReturnBreak );252 off = iemNativeEmitJnzToLabel(pReNative, off, idxLabelReturnBreakFF); 253 253 254 254 /* So, it's only interrupt releated FFs and we need to see if IRQs are being … … 256 256 off = iemNativeEmitTestBitInGprAndJmpToLabelIfNotSet(pReNative, off, idxEflReg, X86_EFL_IF_BIT, idxLabelVmCheck); 257 257 off = iemNativeEmitTestAnyBitsInGprAndJmpToLabelIfNoneSet(pReNative, off, idxEflReg, CPUMCTX_INHIBIT_SHADOW, 258 idxLabelReturnBreak );258 idxLabelReturnBreakFF); 259 259 260 260 /* We've got shadow flags set, so we must check that the PC they are valid … … 263 263 * a register. */ 264 264 off = iemNativeEmitLoadGprFromVCpuU64(pReNative, off, idxTmpReg, RT_UOFFSETOF(VMCPUCC, cpum.GstCtx.uRipInhibitInt)); 265 off = iemNativeEmitTestIfGprNotEqualGprAndJmpToLabel(pReNative, off, idxTmpReg, idxPcReg, idxLabelReturnBreak );265 off = iemNativeEmitTestIfGprNotEqualGprAndJmpToLabel(pReNative, off, idxTmpReg, idxPcReg, idxLabelReturnBreakFF); 266 266 267 267 /* … … 273 273 off = iemNativeEmitLoadGprByGprU32(pReNative, off, idxTmpReg, idxTmpReg, RT_UOFFSETOF(VMCC, fGlobalForcedActions)); 274 274 off = iemNativeEmitAndGpr32ByImm(pReNative, off, idxTmpReg, VM_FF_ALL_MASK, true /*fSetFlags*/); 275 off = iemNativeEmitJnzToLabel(pReNative, off, idxLabelReturnBreak );275 off = iemNativeEmitJnzToLabel(pReNative, off, idxLabelReturnBreakFF); 276 276 277 277 /** @todo STAM_REL_COUNTER_INC(&pVCpu->iem.s.StatCheckIrqBreaks); */ -
trunk/src/VBox/VMM/VMMAll/IEMAllN8veRecompiler.cpp
r104361 r104407 1827 1827 pReNative->Core.u64ArgVars = UINT64_MAX; 1828 1828 1829 AssertCompile(RT_ELEMENTS(pReNative->aidxUniqueLabels) == 1 7);1829 AssertCompile(RT_ELEMENTS(pReNative->aidxUniqueLabels) == 18); 1830 1830 pReNative->aidxUniqueLabels[0] = UINT32_MAX; 1831 1831 pReNative->aidxUniqueLabels[1] = UINT32_MAX; … … 1845 1845 pReNative->aidxUniqueLabels[15] = UINT32_MAX; 1846 1846 pReNative->aidxUniqueLabels[16] = UINT32_MAX; 1847 pReNative->aidxUniqueLabels[17] = UINT32_MAX; 1847 1848 1848 1849 /* Full host register reinit: */ … … 6226 6227 6227 6228 /** 6228 * Emits the code at the ReturnWithFlags label (returns 6229 * VINF_IEM_REEXEC_FINISH_WITH_FLAGS). 6229 * Emits the code at the ReturnWithFlags label (returns VINF_IEM_REEXEC_FINISH_WITH_FLAGS). 6230 6230 */ 6231 6231 static uint32_t iemNativeEmitReturnWithFlags(PIEMRECOMPILERSTATE pReNative, uint32_t off, uint32_t idxReturnLabel) … … 6235 6235 { 6236 6236 iemNativeLabelDefine(pReNative, idxLabel, off); 6237 6238 #ifdef VBOX_WITH_STATISTICS 6239 off = iemNativeEmitNativeTbExitStats(pReNative, off, RT_UOFFSETOF(VMCPUCC, iem.s.StatNativeTbExitReturnWithFlags)); 6240 #endif 6241 6237 /* set the return status */ 6242 6238 off = iemNativeEmitLoadGprImm64(pReNative, off, IEMNATIVE_CALL_RET_GREG, VINF_IEM_REEXEC_FINISH_WITH_FLAGS); 6243 6244 6239 /* jump back to the return sequence. */ 6245 6240 off = iemNativeEmitJmpToLabel(pReNative, off, idxReturnLabel); … … 6250 6245 6251 6246 /** 6247 * Emits the code at the ReturnBreakFF label (returns VINF_IEM_REEXEC_BREAK_FF). 6248 */ 6249 static uint32_t iemNativeEmitReturnBreakFF(PIEMRECOMPILERSTATE pReNative, uint32_t off, uint32_t idxReturnLabel) 6250 { 6251 uint32_t const idxLabel = iemNativeLabelFind(pReNative, kIemNativeLabelType_ReturnBreakFF); 6252 if (idxLabel != UINT32_MAX) 6253 { 6254 iemNativeLabelDefine(pReNative, idxLabel, off); 6255 /* set the return status */ 6256 off = iemNativeEmitLoadGprImm64(pReNative, off, IEMNATIVE_CALL_RET_GREG, VINF_IEM_REEXEC_BREAK_FF); 6257 /* jump back to the return sequence. */ 6258 off = iemNativeEmitJmpToLabel(pReNative, off, idxReturnLabel); 6259 } 6260 return off; 6261 } 6262 6263 6264 /** 6252 6265 * Emits the code at the ReturnBreak label (returns VINF_IEM_REEXEC_BREAK). 6253 6266 */ … … 6258 6271 { 6259 6272 iemNativeLabelDefine(pReNative, idxLabel, off); 6260 6261 #ifdef VBOX_WITH_STATISTICS 6262 off = iemNativeEmitNativeTbExitStats(pReNative, off, RT_UOFFSETOF(VMCPUCC, iem.s.StatNativeTbExitReturnBreak)); 6263 #endif 6264 6273 /* set the return status */ 6265 6274 off = iemNativeEmitLoadGprImm64(pReNative, off, IEMNATIVE_CALL_RET_GREG, VINF_IEM_REEXEC_BREAK); 6266 6267 6275 /* jump back to the return sequence. */ 6268 6276 off = iemNativeEmitJmpToLabel(pReNative, off, idxReturnLabel); … … 8645 8653 case kIemNativeLabelType_Return: pszName = "Return"; break; 8646 8654 case kIemNativeLabelType_ReturnBreak: pszName = "ReturnBreak"; break; 8655 case kIemNativeLabelType_ReturnBreakFF: pszName = "ReturnBreakFF"; break; 8647 8656 case kIemNativeLabelType_ReturnWithFlags: pszName = "ReturnWithFlags"; break; 8648 8657 case kIemNativeLabelType_NonZeroRetOrPassUp: pszName = "NonZeroRetOrPassUp"; break; … … 9273 9282 if (pReNative->bmLabelTypes & RT_BIT_64(kIemNativeLabelType_ReturnBreak)) 9274 9283 off = iemNativeEmitReturnBreak(pReNative, off, idxReturnLabel); 9284 if (pReNative->bmLabelTypes & RT_BIT_64(kIemNativeLabelType_ReturnBreakFF)) 9285 off = iemNativeEmitReturnBreakFF(pReNative, off, idxReturnLabel); 9275 9286 if (pReNative->bmLabelTypes & RT_BIT_64(kIemNativeLabelType_ReturnWithFlags)) 9276 9287 off = iemNativeEmitReturnWithFlags(pReNative, off, idxReturnLabel); -
trunk/src/VBox/VMM/VMMAll/IEMAllThrdRecompiler.cpp
r104406 r104407 2873 2873 /* pVCpu->iem.s.cInstructions is incremented by iemNativeHlpExecStatusCodeFiddling. */ 2874 2874 pVCpu->iem.s.pCurTbR3 = NULL; 2875 STAM_REL_COUNTER_INC(&pVCpu->iem.s.StatTbExecBreaks);2876 2875 2877 2876 /* VINF_IEM_REEXEC_BREAK should be treated as VINF_SUCCESS as it's 2878 2877 only to break out of TB execution early. */ 2879 2878 if (rcStrict == VINF_IEM_REEXEC_BREAK) 2879 { 2880 STAM_REL_COUNTER_INC(&pVCpu->iem.s.StatNativeTbExitReturnBreak); 2880 2881 return iemExecStatusCodeFiddling(pVCpu, VINF_SUCCESS); 2882 } 2883 2884 /* VINF_IEM_REEXEC_BREAK_FF should be treated as VINF_SUCCESS as it's 2885 only to break out of TB execution early due to pending FFs. */ 2886 if (rcStrict == VINF_IEM_REEXEC_BREAK_FF) 2887 { 2888 STAM_REL_COUNTER_INC(&pVCpu->iem.s.StatNativeTbExitReturnBreakFF); 2889 return iemExecStatusCodeFiddling(pVCpu, VINF_SUCCESS); 2890 } 2881 2891 2882 2892 /* VINF_IEM_REEXEC_WITH_FLAGS needs to receive special treatment 2883 2893 and converted to VINF_SUCCESS or whatever is appropriate. */ 2884 2894 if (rcStrict == VINF_IEM_REEXEC_FINISH_WITH_FLAGS) 2895 { 2896 STAM_REL_COUNTER_INC(&pVCpu->iem.s.StatNativeTbExitReturnWithFlags); 2885 2897 return iemExecStatusCodeFiddling(pVCpu, iemFinishInstructionWithFlagsSet(pVCpu, VINF_SUCCESS)); 2886 2898 } 2899 2900 STAM_REL_COUNTER_INC(&pVCpu->iem.s.StatNativeTbExitReturnOtherStatus); 2887 2901 return iemExecStatusCodeFiddling(pVCpu, rcStrict); 2888 2902 } … … 2927 2941 pVCpu->iem.s.cInstructions += pCallEntry->idxInstr; /* This may be one short, but better than zero. */ 2928 2942 pVCpu->iem.s.pCurTbR3 = NULL; 2929 STAM_REL_COUNTER_INC(&pVCpu->iem.s.StatTb ExecBreaks);2943 STAM_REL_COUNTER_INC(&pVCpu->iem.s.StatTbThreadedExecBreaks); 2930 2944 pVCpu->iem.s.ppTbLookupEntryR3 = iemTbGetTbLookupEntryWithRip(pTb, pCallEntry->uTbLookup, pVCpu->cpum.GstCtx.rip); 2931 2945 … … 3086 3100 for (;;) 3087 3101 { 3088 PIEMTB pTb = NULL;3089 3102 VBOXSTRICTRC rcStrict; 3090 3103 IEM_TRY_SETJMP(pVCpu, rcStrict) … … 3098 3111 { 3099 3112 uint32_t const fExtraFlags = iemGetTbFlagsForCurrentPc(pVCpu); 3100 pTb= iemTbCacheLookup(pVCpu, pTbCache, GCPhysPc, fExtraFlags);3113 PIEMTB const pTb = iemTbCacheLookup(pVCpu, pTbCache, GCPhysPc, fExtraFlags); 3101 3114 if (pTb) 3102 3115 rcStrict = iemTbExec(pVCpu, pTb); … … 3133 3146 if (RT_LIKELY( (iIterations & cPollRate) != 0 3134 3147 || !TMTimerPollBoolWith32BitMilliTS(pVM, pVCpu, &pVCpu->iem.s.msRecompilerPollNow))) 3135 pTb = NULL; /* Clear it before looping so iemTbCacheLookup can safely do native recompilation. */3148 { /* likely */ } 3136 3149 else 3137 3150 return VINF_SUCCESS; … … 3153 3166 iemMemRollback(pVCpu); 3154 3167 3155 #ifdef IEMNATIVE_WITH_INSTRUCTION_COUNTING 3168 #ifdef VBOX_WITH_IEM_NATIVE_RECOMPILER 3169 PIEMTB const pTb = pVCpu->iem.s.pCurTbR3; 3156 3170 if (pTb && (pTb->fFlags & IEMTB_F_TYPE_MASK) == IEMTB_F_TYPE_NATIVE) 3157 3171 { 3172 STAM_REL_COUNTER_INC(&pVCpu->iem.s.StatNativeTbExitLongJump); 3173 # ifdef IEMNATIVE_WITH_INSTRUCTION_COUNTING 3158 3174 Assert(pVCpu->iem.s.idxTbCurInstr < pTb->cInstructions); 3159 3175 pVCpu->iem.s.cInstructions += pVCpu->iem.s.idxTbCurInstr; 3176 # endif 3160 3177 } 3161 3178 #endif -
trunk/src/VBox/VMM/VMMR3/IEMR3.cpp
r104362 r104407 383 383 STAMR3RegisterF(pVM, (void *)&pVCpu->iem.s.cTbExecThreaded, STAMTYPE_U64_RESET, STAMVISIBILITY_ALWAYS, STAMUNIT_COUNT, 384 384 "Executed threaded translation block", "/IEM/CPU%u/re/cTbExecThreaded", idCpu); 385 STAMR3RegisterF(pVM, (void *)&pVCpu->iem.s.StatTb ExecBreaks,STAMTYPE_COUNTER, STAMVISIBILITY_ALWAYS, STAMUNIT_OCCURENCES,386 "Times TB execution was interrupted/broken off", "/IEM/CPU%u/re/cTbExecBreaks", idCpu);385 STAMR3RegisterF(pVM, (void *)&pVCpu->iem.s.StatTbThreadedExecBreaks, STAMTYPE_COUNTER, STAMVISIBILITY_ALWAYS, STAMUNIT_OCCURENCES, 386 "Times threaded TB execution was interrupted/broken off", "/IEM/CPU%u/re/cTbExecThreadedBreaks", idCpu); 387 387 # ifdef VBOX_WITH_STATISTICS 388 388 STAMR3RegisterF(pVM, (void *)&pVCpu->iem.s.StatTbThreadedExecBreaksWithLookup, STAMTYPE_COUNTER, STAMVISIBILITY_ALWAYS, STAMUNIT_OCCURENCES, 389 "Times threaded TB execution was interrupted/broken off on a call with lookup entries", "/IEM/CPU%u/re/cTbExec BreaksWithLookup", idCpu);389 "Times threaded TB execution was interrupted/broken off on a call with lookup entries", "/IEM/CPU%u/re/cTbExecThreadedBreaksWithLookup", idCpu); 390 390 STAMR3RegisterF(pVM, (void *)&pVCpu->iem.s.StatTbThreadedExecBreaksWithoutLookup, STAMTYPE_COUNTER, STAMVISIBILITY_ALWAYS, STAMUNIT_OCCURENCES, 391 "Times threaded TB execution was interrupted/broken off on a call without lookup entries", "/IEM/CPU%u/re/cTbExec BreaksWithoutLookup", idCpu);391 "Times threaded TB execution was interrupted/broken off on a call without lookup entries", "/IEM/CPU%u/re/cTbExecThreadedBreaksWithoutLookup", idCpu); 392 392 # endif 393 393 … … 617 617 618 618 STAMR3RegisterF(pVM, &pVCpu->iem.s.StatNativeTbFinished, STAMTYPE_COUNTER, STAMVISIBILITY_ALWAYS, STAMUNIT_COUNT, 619 "Number of times the TB finishes execution completely", "/IEM/CPU%u/re/NativeTbFinished", idCpu); 619 "Number of times the TB finishes execution completely", 620 "/IEM/CPU%u/re/NativeTbFinished", idCpu); 621 # endif /* VBOX_WITH_STATISTICS */ 620 622 STAMR3RegisterF(pVM, &pVCpu->iem.s.StatNativeTbExitReturnBreak, STAMTYPE_COUNTER, STAMVISIBILITY_ALWAYS, STAMUNIT_COUNT, 621 "Number of times the TB finished through the ReturnBreak label", "/IEM/CPU%u/re/NativeTbExitReturnBreak", idCpu); 623 "Number of times the TB finished through the ReturnBreak label", 624 "/IEM/CPU%u/re/NativeTbExit/ReturnBreak", idCpu); 625 STAMR3RegisterF(pVM, &pVCpu->iem.s.StatNativeTbExitReturnBreakFF, STAMTYPE_COUNTER, STAMVISIBILITY_ALWAYS, STAMUNIT_COUNT, 626 "Number of times the TB finished through the ReturnBreak label", 627 "/IEM/CPU%u/re/NativeTbExit/ReturnBreakFF", idCpu); 622 628 STAMR3RegisterF(pVM, &pVCpu->iem.s.StatNativeTbExitReturnWithFlags, STAMTYPE_COUNTER, STAMVISIBILITY_ALWAYS, STAMUNIT_COUNT, 623 "Number of times the TB finished through the ReturnWithFlags label", "/IEM/CPU%u/re/NativeTbExitReturnWithFlags", idCpu); 624 # endif /* VBOX_WITH_STATISTICS */ 629 "Number of times the TB finished through the ReturnWithFlags label", 630 "/IEM/CPU%u/re/NativeTbExit/ReturnWithFlags", idCpu); 631 STAMR3RegisterF(pVM, &pVCpu->iem.s.StatNativeTbExitReturnOtherStatus, STAMTYPE_COUNTER, STAMVISIBILITY_ALWAYS, STAMUNIT_COUNT, 632 "Number of times the TB finished with some other status value", 633 "/IEM/CPU%u/re/NativeTbExit/ReturnOtherStatus", idCpu); 634 STAMR3RegisterF(pVM, &pVCpu->iem.s.StatNativeTbExitLongJump, STAMTYPE_COUNTER, STAMVISIBILITY_ALWAYS, STAMUNIT_COUNT, 635 "Number of times the TB finished via long jump / throw", 636 "/IEM/CPU%u/re/NativeTbExit/LongJumps", idCpu); 637 /* These end up returning VINF_IEM_REEXEC_BREAK and are thus already counted under NativeTbExit/ReturnBreak: */ 625 638 STAMR3RegisterF(pVM, &pVCpu->iem.s.StatNativeTbExitObsoleteTb, STAMTYPE_COUNTER, STAMVISIBILITY_ALWAYS, STAMUNIT_COUNT, 626 "Number of times the TB finished through the ObsoleteTb label", "/IEM/CPU%u/re/NativeTbExitObsoleteTb", idCpu); 639 "Number of times the TB finished through the ObsoleteTb label", 640 "/IEM/CPU%u/re/NativeTbExit/ReturnBreak/ObsoleteTb", idCpu); 627 641 STAMR3RegisterF(pVM, &pVCpu->iem.s.StatCheckNeedCsLimChecking, STAMTYPE_COUNTER, STAMVISIBILITY_ALWAYS, STAMUNIT_COUNT, 628 "Number of times the TB finished through the NeedCsLimChecking label", "/IEM/CPU%u/re/NativeTbExitNeedCsLimChecking", idCpu); 642 "Number of times the TB finished through the NeedCsLimChecking label", 643 "/IEM/CPU%u/re/NativeTbExit/ReturnBreak/NeedCsLimChecking", idCpu); 629 644 STAMR3RegisterF(pVM, &pVCpu->iem.s.StatCheckBranchMisses, STAMTYPE_COUNTER, STAMVISIBILITY_ALWAYS, STAMUNIT_COUNT, 630 "Number of times the TB finished through the CheckBranchMiss label", "/IEM/CPU%u/re/NativeTbExitCheckBranchMiss", idCpu); 645 "Number of times the TB finished through the CheckBranchMiss label", 646 "/IEM/CPU%u/re/NativeTbExit/ReturnBreak/CheckBranchMiss", idCpu); 647 /* Raising stuff will either increment NativeTbExit/LongJumps or NativeTbExit/ReturnOtherStatus 648 depending on whether VBOX_WITH_IEM_NATIVE_RECOMPILER_LONGJMP is defined: */ 649 # ifdef VBOX_WITH_IEM_NATIVE_RECOMPILER_LONGJMP 650 # define RAISE_PREFIX "/IEM/CPU%u/re/NativeTbExit/ReturnOtherStatus/" 651 # else 652 # define RAISE_PREFIX "/IEM/CPU%u/re/NativeTbExit/LongJumps/" 653 # endif 631 654 STAMR3RegisterF(pVM, &pVCpu->iem.s.StatNativeTbExitRaiseDe, STAMTYPE_COUNTER, STAMVISIBILITY_ALWAYS, STAMUNIT_COUNT, 632 "Number of times the TB finished raising a #DE exception", "/IEM/CPU%u/re/NativeTbExitRaiseDe", idCpu); 655 "Number of times the TB finished raising a #DE exception", 656 RAISE_PREFIX "RaiseDe", idCpu); 633 657 STAMR3RegisterF(pVM, &pVCpu->iem.s.StatNativeTbExitRaiseUd, STAMTYPE_COUNTER, STAMVISIBILITY_ALWAYS, STAMUNIT_COUNT, 634 "Number of times the TB finished raising a #UD exception", "/IEM/CPU%u/re/NativeTbExitRaiseUd", idCpu); 658 "Number of times the TB finished raising a #UD exception", 659 RAISE_PREFIX "RaiseUd", idCpu); 635 660 STAMR3RegisterF(pVM, &pVCpu->iem.s.StatNativeTbExitRaiseSseRelated, STAMTYPE_COUNTER, STAMVISIBILITY_ALWAYS, STAMUNIT_COUNT, 636 "Number of times the TB finished raising a SSE related exception", "/IEM/CPU%u/re/NativeTbExitRaiseSseRelated", idCpu); 661 "Number of times the TB finished raising a SSE related exception", 662 RAISE_PREFIX "RaiseSseRelated", idCpu); 637 663 STAMR3RegisterF(pVM, &pVCpu->iem.s.StatNativeTbExitRaiseAvxRelated, STAMTYPE_COUNTER, STAMVISIBILITY_ALWAYS, STAMUNIT_COUNT, 638 "Number of times the TB finished raising a AVX related exception", "/IEM/CPU%u/re/NativeTbExitRaiseAvxRelated", idCpu); 664 "Number of times the TB finished raising a AVX related exception", 665 RAISE_PREFIX "RaiseAvxRelated", idCpu); 639 666 STAMR3RegisterF(pVM, &pVCpu->iem.s.StatNativeTbExitRaiseSseAvxFpRelated, STAMTYPE_COUNTER, STAMVISIBILITY_ALWAYS, STAMUNIT_COUNT, 640 "Number of times the TB finished raising a SSE/AVX floating point related exception", "/IEM/CPU%u/re/NativeTbExitRaiseSseAvxFpRelated", idCpu); 667 "Number of times the TB finished raising a SSE/AVX floating point related exception", 668 RAISE_PREFIX "RaiseSseAvxFpRelated", idCpu); 641 669 STAMR3RegisterF(pVM, &pVCpu->iem.s.StatNativeTbExitRaiseNm, STAMTYPE_COUNTER, STAMVISIBILITY_ALWAYS, STAMUNIT_COUNT, 642 "Number of times the TB finished raising a #NM exception", "/IEM/CPU%u/re/NativeTbExitRaiseNm", idCpu); 670 "Number of times the TB finished raising a #NM exception", 671 RAISE_PREFIX "RaiseNm", idCpu); 643 672 STAMR3RegisterF(pVM, &pVCpu->iem.s.StatNativeTbExitRaiseGp0, STAMTYPE_COUNTER, STAMVISIBILITY_ALWAYS, STAMUNIT_COUNT, 644 "Number of times the TB finished raising a #GP(0) exception", "/IEM/CPU%u/re/NativeTbExitRaiseGp0", idCpu); 673 "Number of times the TB finished raising a #GP(0) exception", 674 RAISE_PREFIX "RaiseGp0", idCpu); 645 675 STAMR3RegisterF(pVM, &pVCpu->iem.s.StatNativeTbExitRaiseMf, STAMTYPE_COUNTER, STAMVISIBILITY_ALWAYS, STAMUNIT_COUNT, 646 "Number of times the TB finished raising a #MF exception", "/IEM/CPU%u/re/NativeTbExitRaiseMf", idCpu); 676 "Number of times the TB finished raising a #MF exception", 677 RAISE_PREFIX "RaiseMf", idCpu); 647 678 STAMR3RegisterF(pVM, &pVCpu->iem.s.StatNativeTbExitRaiseXf, STAMTYPE_COUNTER, STAMVISIBILITY_ALWAYS, STAMUNIT_COUNT, 648 "Number of times the TB finished raising a #XF exception", "/IEM/CPU%u/re/NativeTbExitRaiseXf", idCpu); 679 "Number of times the TB finished raising a #XF exception", 680 RAISE_PREFIX "RaiseXf", idCpu); 681 682 RTStrPrintf(szPat, sizeof(szPat), "/IEM/CPU%u/re/NativeTbExit/*", idCpu); /* only immediate children, no sub folders */ 683 STAMR3RegisterSum(pVM->pUVM, STAMVISIBILITY_ALWAYS, szPat, 684 "Number of times native TB execution finished before the end (not counting thrown memory++ exceptions)", 685 "/IEM/CPU%u/re/NativeTbExit", idCpu); 686 649 687 650 688 # endif /* VBOX_WITH_IEM_NATIVE_RECOMPILER */ -
trunk/src/VBox/VMM/include/IEMInternal.h
r104383 r104407 1902 1902 R3PTRTYPE(PIEMTB) pTbLookupEntryDummyR3; 1903 1903 1904 /** Statistics: Times TB execution was broken off before reaching the end. */1905 STAMCOUNTER StatTb ExecBreaks;1904 /** Threaded TB statistics: Times TB execution was broken off before reaching the end. */ 1905 STAMCOUNTER StatTbThreadedExecBreaks; 1906 1906 /** Statistics: Times BltIn_CheckIrq breaks out of the TB. */ 1907 1907 STAMCOUNTER StatCheckIrqBreaks; … … 2054 2054 /** Native recompiler: The TB finished executing jumping to the ReturnBreak label. */ 2055 2055 STAMCOUNTER StatNativeTbExitReturnBreak; 2056 /** Native recompiler: The TB finished executing jumping to the ReturnBreakFF label. */ 2057 STAMCOUNTER StatNativeTbExitReturnBreakFF; 2056 2058 /** Native recompiler: The TB finished executing jumping to the ReturnWithFlags label. */ 2057 2059 STAMCOUNTER StatNativeTbExitReturnWithFlags; 2060 /** Native recompiler: The TB finished executing with other non-zero status. */ 2061 STAMCOUNTER StatNativeTbExitReturnOtherStatus; 2062 /** Native recompiler: The TB finished executing via throw / long jump. */ 2063 STAMCOUNTER StatNativeTbExitLongJump; 2058 2064 2059 2065 /** Native recompiler: The TB finished executing jumping to the RaiseDe label. */ … … 2078 2084 STAMCOUNTER StatNativeTbExitObsoleteTb; 2079 2085 2080 uint64_t au64Padding[ 4];2086 uint64_t au64Padding[1]; 2081 2087 /** @} */ 2082 2088 -
trunk/src/VBox/VMM/include/IEMN8veRecompiler.h
r104383 r104407 472 472 kIemNativeLabelType_Return, 473 473 kIemNativeLabelType_ReturnBreak, 474 kIemNativeLabelType_ReturnBreakFF, 474 475 kIemNativeLabelType_ReturnWithFlags, 475 476 kIemNativeLabelType_NonZeroRetOrPassUp,
Note:
See TracChangeset
for help on using the changeset viewer.