Changeset 103667 in vbox
- Timestamp:
- Mar 4, 2024 1:46:36 PM (13 months ago)
- svn:sync-xref-src-repo-rev:
- 162027
- Location:
- trunk/src/VBox/VMM
- Files:
-
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/VMM/VMMAll/IEMAllInstPython.py
r103665 r103667 3226 3226 'IEM_MC_REF_MREG_U64': (McBlock.parseMcGeneric, False, False, False, ), 3227 3227 'IEM_MC_REF_MREG_U64_CONST': (McBlock.parseMcGeneric, False, False, False, ), 3228 'IEM_MC_REF_MXCSR': (McBlock.parseMcGeneric, False, False, False,),3228 'IEM_MC_REF_MXCSR': (McBlock.parseMcGeneric, False, False, True, ), 3229 3229 'IEM_MC_REF_XREG_R32_CONST': (McBlock.parseMcGeneric, False, False, False, ), 3230 3230 'IEM_MC_REF_XREG_R64_CONST': (McBlock.parseMcGeneric, False, False, False, ), -
trunk/src/VBox/VMM/VMMAll/IEMAllN8veLiveness.cpp
r103660 r103667 178 178 179 179 180 #define IEM_LIVENESS_CR0_INPUT() IEM_LIVENESS_BITMAP_MEMBER_INPUT( fCr0, 0)181 #define IEM_LIVENESS_CR4_INPUT() IEM_LIVENESS_BITMAP_MEMBER_INPUT( fCr4, 0)182 #define IEM_LIVENESS_XCR0_INPUT() IEM_LIVENESS_BITMAP_MEMBER_INPUT( fXcr0, 0)180 #define IEM_LIVENESS_CR0_INPUT() IEM_LIVENESS_BITMAP_MEMBER_INPUT( fCr0, 0) 181 #define IEM_LIVENESS_CR4_INPUT() IEM_LIVENESS_BITMAP_MEMBER_INPUT( fCr4, 0) 182 #define IEM_LIVENESS_XCR0_INPUT() IEM_LIVENESS_BITMAP_MEMBER_INPUT( fXcr0, 0) 183 183 184 184 … … 191 191 #define IEM_LIVENESS_FSW_CLOBBER() IEM_LIVENESS_BITMAP_MEMBER_CLOBBER(fFsw, 0) 192 192 #define IEM_LIVENESS_FSW_MODIFY() IEM_LIVENESS_BITMAP_MEMBER_MODIFY( fFsw, 0) 193 194 195 #define IEM_LIVENESS_MXCSR_INPUT() IEM_LIVENESS_BITMAP_MEMBER_INPUT( fMxCsr, 0) 196 #define IEM_LIVENESS_MXCSR_CLOBBER() IEM_LIVENESS_BITMAP_MEMBER_CLOBBER(fMxCsr, 0) 197 #define IEM_LIVENESS_MXCSR_MODIFY() IEM_LIVENESS_BITMAP_MEMBER_MODIFY( fMxCsr, 0) 193 198 194 199 … … 576 581 } while (0) 577 582 #define IEM_MC_ASSERT_EFLAGS(a_fEflInput, a_fEflOutput) NOP() 578 #define IEM_MC_REF_MXCSR(a_pfMxcsr) NOP()583 #define IEM_MC_REF_MXCSR(a_pfMxcsr) IEM_LIVENESS_MXCSR_MODIFY() 579 584 580 585 … … 1063 1068 #define IEM_MC_ACTUALIZE_FPU_STATE_FOR_CHANGE() NOP() 1064 1069 1065 #define IEM_MC_STORE_SSE_RESULT(a_SseData, a_iXmmReg) NOP()1066 #define IEM_MC_SSE_UPDATE_MXCSR(a_fMxcsr) NOP()1070 #define IEM_MC_STORE_SSE_RESULT(a_SseData, a_iXmmReg) IEM_LIVENESS_MXCSR_MODIFY() //; IEM_LIVENESS_XREG_CLOBBER(a_iXmmReg) 1071 #define IEM_MC_SSE_UPDATE_MXCSR(a_fMxcsr) IEM_LIVENESS_MXCSR_MODIFY() 1067 1072 1068 1073 #define IEM_MC_PREPARE_SSE_USAGE() NOP() -
trunk/src/VBox/VMM/VMMAll/IEMAllN8veRecompiler.cpp
r103666 r103667 3583 3583 /* [kIemNativeGstReg_Cr4] = */ { CPUMCTX_OFF_AND_SIZE(cr4), "cr4", }, 3584 3584 /* [kIemNativeGstReg_Xcr0] = */ { CPUMCTX_OFF_AND_SIZE(aXcr[0]), "xcr0", }, 3585 /* [kIemNativeGstReg_MxCsr] = */ { CPUMCTX_OFF_AND_SIZE(XState.x87.MXCSR), "mxcsr", }, 3585 3586 /* [kIemNativeGstReg_EFlags] = */ { CPUMCTX_OFF_AND_SIZE(eflags), "eflags", }, 3586 3587 #undef CPUMCTX_OFF_AND_SIZE … … 10900 10901 RT_NOREF(fConst); 10901 10902 #endif 10903 10904 return off; 10905 } 10906 10907 10908 #define IEM_MC_REF_MXCSR(a_pfMxcsr) \ 10909 off = iemNativeEmitRefMxcsr(pReNative, off, a_pfMxcsr) 10910 10911 /** Handles IEM_MC_REF_MXCSR. */ 10912 DECL_INLINE_THROW(uint32_t) 10913 iemNativeEmitRefMxcsr(PIEMRECOMPILERSTATE pReNative, uint32_t off, uint8_t idxVarRef) 10914 { 10915 iemNativeVarSetKindToGstRegRef(pReNative, idxVarRef, kIemNativeGstRegRef_MxCsr, 0); 10916 IEMNATIVE_ASSERT_VAR_SIZE(pReNative, idxVarRef, sizeof(void *)); 10917 10918 /* If we've delayed writing back the register value, flush it now. */ 10919 off = iemNativeRegFlushPendingSpecificWrite(pReNative, off, kIemNativeGstRegRef_MxCsr, 0); 10920 10921 /* If there is a shadow copy of guest MXCSR, flush it now. */ 10922 iemNativeRegFlushGuestShadows(pReNative, RT_BIT_64(kIemNativeGstReg_MxCsr)); 10902 10923 10903 10924 return off; -
trunk/src/VBox/VMM/include/IEMN8veRecompiler.h
r103665 r103667 418 418 uint64_t fCr4 : 1; /**< 0x2c / 44: */ 419 419 uint64_t fXcr0 : 1; /**< 0x2d / 45: */ 420 uint64_t fEflOther : 1; /**< 0x2e / 46: Other EFLAGS bits (~X86_EFL_STATUS_BITS & X86_EFL_LIVE_MASK). First! */ 421 uint64_t fEflCf : 1; /**< 0x2f / 47: Carry flag (X86_EFL_CF / 0). */ 422 uint64_t fEflPf : 1; /**< 0x30 / 48: Parity flag (X86_EFL_PF / 2). */ 423 uint64_t fEflAf : 1; /**< 0x31 / 49: Auxilary carry flag (X86_EFL_AF / 4). */ 424 uint64_t fEflZf : 1; /**< 0x32 / 50: Zero flag (X86_EFL_ZF / 6). */ 425 uint64_t fEflSf : 1; /**< 0x33 / 51: Signed flag (X86_EFL_SF / 7). */ 426 uint64_t fEflOf : 1; /**< 0x34 / 52: Overflow flag (X86_EFL_OF / 12). */ 427 uint64_t uUnused : 11; /* 0x35 / 53 -> 0x40/64 */ 420 uint64_t fMxCsr : 1; /**< 0x2e / 46: */ 421 uint64_t fEflOther : 1; /**< 0x2f / 47: Other EFLAGS bits (~X86_EFL_STATUS_BITS & X86_EFL_LIVE_MASK). First! */ 422 uint64_t fEflCf : 1; /**< 0x30 / 48: Carry flag (X86_EFL_CF / 0). */ 423 uint64_t fEflPf : 1; /**< 0x31 / 49: Parity flag (X86_EFL_PF / 2). */ 424 uint64_t fEflAf : 1; /**< 0x32 / 50: Auxilary carry flag (X86_EFL_AF / 4). */ 425 uint64_t fEflZf : 1; /**< 0x33 / 51: Zero flag (X86_EFL_ZF / 6). */ 426 uint64_t fEflSf : 1; /**< 0x34 / 52: Signed flag (X86_EFL_SF / 7). */ 427 uint64_t fEflOf : 1; /**< 0x35 / 53: Overflow flag (X86_EFL_OF / 12). */ 428 uint64_t uUnused : 10; /* 0x36 / 54 -> 0x40/64 */ 428 429 }; 429 430 } IEMLIVENESSBIT; … … 487 488 /** @name 64-bit value masks for IEMLIVENESSENTRY. 488 489 * @{ */ /* 0xzzzzyyyyxxxxwwww */ 489 #define IEMLIVENESSBIT_MASK UINT64_C(0x00 1ffffffffeffff)490 #define IEMLIVENESSBIT_MASK UINT64_C(0x003ffffffffeffff) 490 491 491 492 #ifndef IEMLIVENESS_EXTENDED_LAYOUT … … 497 498 #endif 498 499 499 #define IEMLIVENESSBIT_ALL_EFL_MASK UINT64_C(0x00 1fc00000000000)500 #define IEMLIVENESSBIT_ALL_EFL_MASK UINT64_C(0x003f800000000000) 500 501 501 502 #ifndef IEMLIVENESS_EXTENDED_LAYOUT … … 717 718 kIemNativeGstReg_Cr4, 718 719 kIemNativeGstReg_Xcr0, 720 kIemNativeGstReg_MxCsr, 719 721 kIemNativeGstReg_EFlags, /**< 32-bit, includes internal flags - last! */ 720 722 kIemNativeGstReg_End
Note:
See TracChangeset
for help on using the changeset viewer.