Changeset 102583 in vbox for trunk/src/VBox/VMM
- Timestamp:
- Dec 12, 2023 9:23:50 AM (14 months ago)
- Location:
- trunk/src/VBox/VMM/VMMAll
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/VMM/VMMAll/IEMAllInstPython.py
r102579 r102583 2944 2944 'IEM_MC_FETCH_SREG_BASE_U32': (McBlock.parseMcGeneric, False, False, ), 2945 2945 'IEM_MC_FETCH_SREG_BASE_U64': (McBlock.parseMcGeneric, False, False, ), 2946 'IEM_MC_FETCH_SREG_U16': (McBlock.parseMcGeneric, False, False,),2947 'IEM_MC_FETCH_SREG_ZX_U32': (McBlock.parseMcGeneric, False, False,),2948 'IEM_MC_FETCH_SREG_ZX_U64': (McBlock.parseMcGeneric, False, False,),2946 'IEM_MC_FETCH_SREG_U16': (McBlock.parseMcGeneric, False, True, ), 2947 'IEM_MC_FETCH_SREG_ZX_U32': (McBlock.parseMcGeneric, False, True, ), 2948 'IEM_MC_FETCH_SREG_ZX_U64': (McBlock.parseMcGeneric, False, True, ), 2949 2949 'IEM_MC_FETCH_XREG_U128': (McBlock.parseMcGeneric, False, False, ), 2950 2950 'IEM_MC_FETCH_XREG_U16': (McBlock.parseMcGeneric, False, False, ), -
trunk/src/VBox/VMM/VMMAll/IEMAllN8veRecompiler.cpp
r102581 r102583 7614 7614 iemNativeEmitFetchGregU8(PIEMRECOMPILERSTATE pReNative, uint32_t off, uint8_t idxDstVar, uint8_t iGRegEx, int8_t cbZeroExtended) 7615 7615 { 7616 Assert(idxDstVar < RT_ELEMENTS(pReNative->Core.aVars) && (pReNative->Core.bmVars & RT_BIT_32(idxDstVar)));7616 IEMNATIVE_ASSERT_VAR_IDX(pReNative, idxDstVar); 7617 7617 Assert(pReNative->Core.aVars[idxDstVar].cbVar == cbZeroExtended); RT_NOREF(cbZeroExtended); 7618 7618 Assert(iGRegEx < 20); … … 7650 7650 iemNativeEmitFetchGregU8Sx(PIEMRECOMPILERSTATE pReNative, uint32_t off, uint8_t idxDstVar, uint8_t iGRegEx, uint8_t cbSignExtended) 7651 7651 { 7652 Assert(idxDstVar < RT_ELEMENTS(pReNative->Core.aVars) && (pReNative->Core.bmVars & RT_BIT_32(idxDstVar)));7652 IEMNATIVE_ASSERT_VAR_IDX(pReNative, idxDstVar); 7653 7653 Assert(pReNative->Core.aVars[idxDstVar].cbVar == cbSignExtended); 7654 7654 Assert(iGRegEx < 20); … … 7715 7715 iemNativeEmitFetchGregU16(PIEMRECOMPILERSTATE pReNative, uint32_t off, uint8_t idxDstVar, uint8_t iGReg, uint8_t cbZeroExtended) 7716 7716 { 7717 Assert(idxDstVar < RT_ELEMENTS(pReNative->Core.aVars) && (pReNative->Core.bmVars & RT_BIT_32(idxDstVar)));7717 IEMNATIVE_ASSERT_VAR_IDX(pReNative, idxDstVar); 7718 7718 Assert(pReNative->Core.aVars[idxDstVar].cbVar == cbZeroExtended); RT_NOREF(cbZeroExtended); 7719 7719 Assert(iGReg < 16); … … 7749 7749 iemNativeEmitFetchGregU16Sx(PIEMRECOMPILERSTATE pReNative, uint32_t off, uint8_t idxDstVar, uint8_t iGReg, uint8_t cbSignExtended) 7750 7750 { 7751 Assert(idxDstVar < RT_ELEMENTS(pReNative->Core.aVars) && (pReNative->Core.bmVars & RT_BIT_32(idxDstVar)));7751 IEMNATIVE_ASSERT_VAR_IDX(pReNative, idxDstVar); 7752 7752 Assert(pReNative->Core.aVars[idxDstVar].cbVar == cbSignExtended); 7753 7753 Assert(iGReg < 16); … … 7789 7789 iemNativeEmitFetchGregU32(PIEMRECOMPILERSTATE pReNative, uint32_t off, uint8_t idxDstVar, uint8_t iGReg, uint8_t cbZeroExtended) 7790 7790 { 7791 Assert(idxDstVar < RT_ELEMENTS(pReNative->Core.aVars) && (pReNative->Core.bmVars & RT_BIT_32(idxDstVar)));7791 IEMNATIVE_ASSERT_VAR_IDX(pReNative, idxDstVar); 7792 7792 Assert(pReNative->Core.aVars[idxDstVar].cbVar == cbZeroExtended); RT_NOREF_PV(cbZeroExtended); 7793 7793 Assert(iGReg < 16); … … 7820 7820 iemNativeEmitFetchGregU32SxU64(PIEMRECOMPILERSTATE pReNative, uint32_t off, uint8_t idxDstVar, uint8_t iGReg) 7821 7821 { 7822 Assert(idxDstVar < RT_ELEMENTS(pReNative->Core.aVars) && (pReNative->Core.bmVars & RT_BIT_32(idxDstVar)));7822 IEMNATIVE_ASSERT_VAR_IDX(pReNative, idxDstVar); 7823 7823 Assert(pReNative->Core.aVars[idxDstVar].cbVar == sizeof(uint64_t)); 7824 7824 Assert(iGReg < 16); … … 7855 7855 iemNativeEmitFetchGregU64(PIEMRECOMPILERSTATE pReNative, uint32_t off, uint8_t idxDstVar, uint8_t iGReg) 7856 7856 { 7857 Assert(idxDstVar < RT_ELEMENTS(pReNative->Core.aVars) && (pReNative->Core.bmVars & RT_BIT_32(idxDstVar)));7857 IEMNATIVE_ASSERT_VAR_IDX(pReNative, idxDstVar); 7858 7858 Assert(pReNative->Core.aVars[idxDstVar].cbVar == sizeof(uint64_t)); 7859 7859 Assert(iGReg < 16); … … 8435 8435 off = iemNativeEmitStoreGprToVCpuU32(pReNative, off, idxReg, RT_UOFFSETOF_DYN(VMCPUCC, cpum.GstCtx.eflags)); 8436 8436 iemNativeVarRegisterRelease(pReNative, idxVarEFlags); 8437 return off; 8438 } 8439 8440 8441 8442 /********************************************************************************************************************************* 8443 * Emitters for segment register fetches (IEM_MC_FETCH_SREG_XXX). 8444 *********************************************************************************************************************************/ 8445 8446 #define IEM_MC_FETCH_SREG_U16(a_u16Dst, a_iSReg) \ 8447 off = iemNativeEmitFetchSReg(pReNative, off, a_u16Dst, a_iSReg, sizeof(uint16_t)) 8448 8449 #define IEM_MC_FETCH_SREG_ZX_U32(a_u32Dst, a_iSReg) \ 8450 off = iemNativeEmitFetchSReg(pReNative, off, a_u32Dst, a_iSReg, sizeof(uint32_t)) 8451 8452 #define IEM_MC_FETCH_SREG_ZX_U64(a_u64Dst, a_iSReg) \ 8453 off = iemNativeEmitFetchSReg(pReNative, off, a_u64Dst, a_iSReg, sizeof(uint64_t)) 8454 8455 8456 /** Emits code for IEM_MC_FETCH_SREG_U16, IEM_MC_FETCH_SREG_ZX_U32 and 8457 * IEM_MC_FETCH_SREG_ZX_U64. */ 8458 DECL_INLINE_THROW(uint32_t) 8459 iemNativeEmitFetchSReg(PIEMRECOMPILERSTATE pReNative, uint32_t off, uint8_t idxDstVar, uint8_t iSReg, int8_t cbVar) 8460 { 8461 IEMNATIVE_ASSERT_VAR_IDX(pReNative, idxDstVar); 8462 Assert(pReNative->Core.aVars[idxDstVar].cbVar == cbVar); RT_NOREF(cbVar); 8463 Assert(iSReg < X86_SREG_COUNT); 8464 8465 /* 8466 * For now, we will not create a shadow copy of a selector. The rational 8467 * is that since we do not recompile the popping and loading of segment 8468 * registers and that the the IEM_MC_FETCH_SREG_U* MCs are only used for 8469 * pushing and moving to registers, there is only a small chance that the 8470 * shadow copy will be accessed again before the register is reloaded. One 8471 * scenario would be nested called in 16-bit code, but I doubt it's worth 8472 * the extra register pressure atm. 8473 * 8474 * What we really need first, though, is to combine iemNativeRegAllocTmpForGuestReg 8475 * and iemNativeVarRegisterAcquire for a load scenario. We only got the 8476 * store scencario covered at present (r160730). 8477 */ 8478 iemNativeVarSetKindToStack(pReNative, idxDstVar); 8479 uint8_t const idxVarReg = iemNativeVarRegisterAcquire(pReNative, idxDstVar, &off); 8480 off = iemNativeEmitLoadGprFromVCpuU16(pReNative, off, idxVarReg, RT_UOFFSETOF_DYN(VMCPU, cpum.GstCtx.aSRegs[iSReg].Sel)); 8481 iemNativeVarRegisterRelease(pReNative, idxDstVar); 8437 8482 return off; 8438 8483 }
Note:
See TracChangeset
for help on using the changeset viewer.