Changeset 106123 in vbox for trunk/src/VBox/VMM/VMMAll
- Timestamp:
- Sep 23, 2024 10:04:30 PM (8 months ago)
- svn:sync-xref-src-repo-rev:
- 164901
- Location:
- trunk/src/VBox/VMM/VMMAll
- Files:
-
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/VMM/VMMAll/IEMAllN8vePython.py
r106061 r106123 595 595 oNewStmt = copy.deepcopy(oStmt); 596 596 oNewStmt.sName = 'IEM_MC_BEGIN_EX'; 597 fWith outFlags = ( self.oVariation.isWithFlagsCheckingAndClearingVariation()598 and self.oVariation.oParent.hasWithFlagsCheckingAndClearingVariation());599 if fWith outFlags or self.oVariation.oParent.dsCImplFlags:597 fWithFlags = self.oVariation.isWithFlagsCheckingAndClearingVariation(); 598 fWithoutFlags = not fWithFlags and self.oVariation.oParent.hasWithFlagsCheckingAndClearingVariation(); 599 if fWithFlags or fWithoutFlags or self.oVariation.oParent.dsCImplFlags: 600 600 if fWithoutFlags: 601 601 oNewStmt.asParams[0] = ' | '.join(sorted( list(self.oVariation.oParent.oMcBlock.dsMcFlags.keys()) 602 602 + ['IEM_MC_F_WITHOUT_FLAGS',] )); 603 else: 604 oNewStmt.asParams[0] = ' | '.join(sorted( list(self.oVariation.oParent.oMcBlock.dsMcFlags.keys()) 605 + ['IEM_MC_F_WITH_FLAGS',] )); 603 606 if self.oVariation.oParent.dsCImplFlags: 604 607 oNewStmt.asParams[1] = ' | '.join(sorted(self.oVariation.oParent.dsCImplFlags.keys())); -
trunk/src/VBox/VMM/VMMAll/IEMAllN8veRecompFuncs.h
r106117 r106123 3401 3401 iemNativeEmitIfEflagAnysBitsSet(PIEMRECOMPILERSTATE pReNative, uint32_t off, uint32_t fBitsInEfl, uint64_t fLivenessEflBits) 3402 3402 { 3403 IEMNATIVE_ASSERT_EFLAGS_SKIPPING_AND_POSTPONING(pReNative, fBitsInEfl); 3403 3404 IEMNATIVE_STRICT_EFLAGS_SKIPPING_EMIT_CHECK(pReNative, off, fBitsInEfl); 3404 3405 PIEMNATIVECOND const pEntry = iemNativeCondPushIf(pReNative); … … 3428 3429 iemNativeEmitIfEflagNoBitsSet(PIEMRECOMPILERSTATE pReNative, uint32_t off, uint32_t fBitsInEfl, uint64_t fLivenessEflBits) 3429 3430 { 3431 IEMNATIVE_ASSERT_EFLAGS_SKIPPING_AND_POSTPONING(pReNative, fBitsInEfl); 3430 3432 IEMNATIVE_STRICT_EFLAGS_SKIPPING_EMIT_CHECK(pReNative, off, fBitsInEfl); 3431 3433 PIEMNATIVECOND const pEntry = iemNativeCondPushIf(pReNative); … … 3456 3458 iemNativeEmitIfEflagsBitSet(PIEMRECOMPILERSTATE pReNative, uint32_t off, unsigned iBitNo, uint64_t fLivenessEflBit) 3457 3459 { 3460 IEMNATIVE_ASSERT_EFLAGS_SKIPPING_AND_POSTPONING(pReNative, RT_BIT_32(iBitNo)); 3458 3461 IEMNATIVE_STRICT_EFLAGS_SKIPPING_EMIT_CHECK(pReNative, off, RT_BIT_32(iBitNo)); 3459 3462 PIEMNATIVECOND const pEntry = iemNativeCondPushIf(pReNative); … … 3484 3487 iemNativeEmitIfEflagsBitNotSet(PIEMRECOMPILERSTATE pReNative, uint32_t off, unsigned iBitNo, uint64_t fLivenessEflBit) 3485 3488 { 3489 IEMNATIVE_ASSERT_EFLAGS_SKIPPING_AND_POSTPONING(pReNative, RT_BIT_32(iBitNo)); 3486 3490 IEMNATIVE_STRICT_EFLAGS_SKIPPING_EMIT_CHECK(pReNative, off, RT_BIT_32(iBitNo)); 3487 3491 PIEMNATIVECOND const pEntry = iemNativeCondPushIf(pReNative); … … 3523 3527 { 3524 3528 Assert(iBitNo1 != iBitNo2); 3529 IEMNATIVE_ASSERT_EFLAGS_SKIPPING_AND_POSTPONING(pReNative, RT_BIT_32(iBitNo1) | RT_BIT_32(iBitNo2)); 3525 3530 IEMNATIVE_STRICT_EFLAGS_SKIPPING_EMIT_CHECK(pReNative, off, RT_BIT_32(iBitNo1) | RT_BIT_32(iBitNo2)); 3526 3531 PIEMNATIVECOND const pEntry = iemNativeCondPushIf(pReNative); … … 3600 3605 Assert(iBitNo2 != iBitNo); 3601 3606 Assert(iBitNo2 != iBitNo1); 3607 IEMNATIVE_ASSERT_EFLAGS_SKIPPING_AND_POSTPONING(pReNative, RT_BIT_32(iBitNo) | RT_BIT_32(iBitNo1) | RT_BIT_32(iBitNo2)); 3602 3608 IEMNATIVE_STRICT_EFLAGS_SKIPPING_EMIT_CHECK(pReNative, off, RT_BIT_32(iBitNo) | RT_BIT_32(iBitNo1) | RT_BIT_32(iBitNo2)); 3603 3609 PIEMNATIVECOND const pEntry = iemNativeCondPushIf(pReNative); … … 3777 3783 bool fCheckIfSet, unsigned iBitNo, uint64_t fLivenessEflBit) 3778 3784 { 3785 IEMNATIVE_ASSERT_EFLAGS_SKIPPING_AND_POSTPONING(pReNative, RT_BIT_32(iBitNo)); 3779 3786 IEMNATIVE_STRICT_EFLAGS_SKIPPING_EMIT_CHECK(pReNative, off, RT_BIT_32(iBitNo)); 3780 3787 PIEMNATIVECOND const pEntry = iemNativeCondPushIf(pReNative); … … 3845 3852 3846 3853 { 3854 IEMNATIVE_ASSERT_EFLAGS_SKIPPING_AND_POSTPONING(pReNative, RT_BIT_32(iBitNo)); 3847 3855 IEMNATIVE_STRICT_EFLAGS_SKIPPING_EMIT_CHECK(pReNative, off, RT_BIT_32(iBitNo)); 3848 3856 PIEMNATIVECOND const pEntry = iemNativeCondPushIf(pReNative); … … 4119 4127 4120 4128 { 4129 IEMNATIVE_ASSERT_EFLAGS_SKIPPING_AND_POSTPONING(pReNative, X86_EFL_STATUS_BITS); 4121 4130 IEMNATIVE_STRICT_EFLAGS_SKIPPING_EMIT_CHECK(pReNative, off, X86_EFL_STATUS_BITS); 4122 4131 … … 5930 5939 #endif 5931 5940 5941 IEMNATIVE_ASSERT_EFLAGS_SKIPPING_AND_POSTPONING(pReNative, a_fEflInput); 5932 5942 IEMNATIVE_STRICT_EFLAGS_SKIPPING_EMIT_CHECK(pReNative, off, a_fEflInput); 5933 5943 … … 6246 6256 6247 6257 #ifdef IEMNATIVE_WITH_EFLAGS_SKIPPING 6248 Assert(!(pReNative->fSkippingEFlags & fEflInput)); 6258 IEMNATIVE_ASSERT_EFLAGS_SKIPPING_AND_POSTPONING(pReNative, fEflInput); 6259 IEMNATIVE_STRICT_EFLAGS_SKIPPING_EMIT_CHECK(pReNative, off, fEflInput); 6249 6260 pReNative->fSkippingEFlags &= ~fEflOutput; 6250 IEMNATIVE_STRICT_EFLAGS_SKIPPING_EMIT_CHECK(pReNative, off, fEflInput);6251 6261 # ifdef IEMNATIVE_STRICT_EFLAGS_SKIPPING 6252 6262 -
trunk/src/VBox/VMM/VMMAll/IEMAllN8veRecompiler.cpp
r106117 r106123 6563 6563 iemNativeEmitThreadedCall(PIEMRECOMPILERSTATE pReNative, uint32_t off, PCIEMTHRDEDCALLENTRY pCallEntry) 6564 6564 { 6565 IEMNATIVE_ASSERT_EFLAGS_SKIPPING_AND_POSTPONING(pReNative, X86_EFL_STATUS_BITS); 6565 6566 IEMNATIVE_STRICT_EFLAGS_SKIPPING_EMIT_CHECK(pReNative, off, X86_EFL_STATUS_BITS); 6566 6567 … … 6922 6923 pReNative->Core.bmHstRegs |= RT_BIT_32(IEMNATIVE_CALL_RET_GREG); /* HACK: For IEMNATIVE_STRICT_EFLAGS_SKIPPING_EMIT_CHECK (return register is already set to status code). */ 6923 6924 6925 IEMNATIVE_ASSERT_EFLAGS_SKIPPING_AND_POSTPONING(pReNative, X86_EFL_STATUS_BITS); 6924 6926 IEMNATIVE_STRICT_EFLAGS_SKIPPING_EMIT_CHECK(pReNative, off, X86_EFL_STATUS_BITS); 6925 6927 … … 10307 10309 STAM_REL_COUNTER_INC(&pVCpu->iem.s.StatNativeFullyRecompiledTbs); 10308 10310 10309 #ifdef IEMNATIVE_WITH_EFLAGS_SKIPPING 10310 Assert(pReNative->fSkippingEFlags == 0); 10311 #endif 10312 #ifdef IEMNATIVE_WITH_EFLAGS_POSTPONING 10313 Assert(pReNative->fPostponingEFlags == 0); 10314 #endif 10311 IEMNATIVE_ASSERT_EFLAGS_SKIPPING_AND_POSTPONING(pReNative, UINT32_MAX); 10315 10312 10316 10313 #ifdef VBOX_WITH_STATISTICS -
trunk/src/VBox/VMM/VMMAll/target-x86/IEMAllN8veEmit-x86.h
r106117 r106123 214 214 */ 215 215 PCIEMLIVENESSENTRY const pLivenessEntry = &pReNative->paLivenessEntries[pReNative->idxCurCall]; 216 if (IEMLIVENESS_STATE_ARE_STATUS_EFL_TO_BE_CLOBBERED(pLivenessEntry)) 216 if ( IEMLIVENESS_STATE_ARE_STATUS_EFL_TO_BE_CLOBBERED(pLivenessEntry) 217 && !(pReNative->fMc & IEM_MC_F_WITH_FLAGS)) 217 218 { 218 219 STAM_COUNTER_INC(&pReNative->pVCpu->iem.s.StatNativeEflSkippedLogical); … … 322 323 */ 323 324 PCIEMLIVENESSENTRY const pLivenessEntry = &pReNative->paLivenessEntries[pReNative->idxCurCall]; 324 if (IEMLIVENESS_STATE_ARE_STATUS_EFL_TO_BE_CLOBBERED(pLivenessEntry)) 325 if ( IEMLIVENESS_STATE_ARE_STATUS_EFL_TO_BE_CLOBBERED(pLivenessEntry) 326 && !(pReNative->fMc & IEM_MC_F_WITH_FLAGS)) 325 327 { 326 328 STAM_COUNTER_INC(&pReNative->pVCpu->iem.s.StatNativeEflSkippedArithmetic); … … 1577 1579 */ 1578 1580 PCIEMLIVENESSENTRY const pLivenessEntry = &pReNative->paLivenessEntries[pReNative->idxCurCall]; 1579 if (IEMLIVENESS_STATE_ARE_STATUS_EFL_TO_BE_CLOBBERED(pLivenessEntry)) 1581 if ( IEMLIVENESS_STATE_ARE_STATUS_EFL_TO_BE_CLOBBERED(pLivenessEntry) 1582 && !(pReNative->fMc & IEM_MC_F_WITH_FLAGS)) 1580 1583 { 1581 1584 STAM_COUNTER_INC(&pReNative->pVCpu->iem.s.StatNativeEflSkippedShift);
Note:
See TracChangeset
for help on using the changeset viewer.