Changeset 104155 in vbox for trunk/src/VBox/VMM/VMMAll/IEMAllN8veRecompFuncs.h
- Timestamp:
- Apr 4, 2024 10:47:23 AM (10 months ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/VMM/VMMAll/IEMAllN8veRecompFuncs.h
r104150 r104155 4144 4144 } 4145 4145 4146 4147 typedef enum IEMNATIVEMITEFLOP 4148 { 4149 kIemNativeEmitEflOp_Invalid = 0, 4150 kIemNativeEmitEflOp_Set, 4151 kIemNativeEmitEflOp_Clear, 4152 kIemNativeEmitEflOp_Flip 4153 } IEMNATIVEMITEFLOP; 4154 4155 #define IEM_MC_SET_EFL_BIT(a_fBit) \ 4156 off = iemNativeEmitModifyEFlagsBit(pReNative, off, a_fBit, kIemNativeEmitEflOp_Set); 4157 4158 #define IEM_MC_CLEAR_EFL_BIT(a_fBit) \ 4159 off = iemNativeEmitModifyEFlagsBit(pReNative, off, a_fBit, kIemNativeEmitEflOp_Clear); 4160 4161 #define IEM_MC_FLIP_EFL_BIT(a_fBit) \ 4162 off = iemNativeEmitModifyEFlagsBit(pReNative, off, a_fBit, kIemNativeEmitEflOp_Flip); 4163 4164 /** Handles IEM_MC_SET_EFL_BIT/IEM_MC_CLEAR_EFL_BIT/IEM_MC_FLIP_EFL_BIT. */ 4165 DECL_INLINE_THROW(uint32_t) iemNativeEmitModifyEFlagsBit(PIEMRECOMPILERSTATE pReNative, uint32_t off, uint32_t fEflBit, IEMNATIVEMITEFLOP enmOp) 4166 { 4167 uint8_t const idxEflReg = iemNativeRegAllocTmpForGuestReg(pReNative, &off, kIemNativeGstReg_EFlags, 4168 kIemNativeGstRegUse_ForUpdate, false /*fNoVolatileRegs*/); 4169 4170 switch (enmOp) 4171 { 4172 case kIemNativeEmitEflOp_Set: 4173 off = iemNativeEmitOrGpr32ByImm(pReNative, off, idxEflReg, fEflBit); 4174 break; 4175 case kIemNativeEmitEflOp_Clear: 4176 off = iemNativeEmitAndGpr32ByImm(pReNative, off, idxEflReg, ~fEflBit); 4177 break; 4178 case kIemNativeEmitEflOp_Flip: 4179 off = iemNativeEmitXorGpr32ByImm(pReNative, off, idxEflReg, fEflBit); 4180 break; 4181 default: 4182 AssertFailed(); 4183 break; 4184 } 4185 4186 /** @todo No delayed writeback for EFLAGS right now. */ 4187 off = iemNativeEmitStoreGprToVCpuU32(pReNative, off, idxEflReg, RT_UOFFSETOF(VMCPU, cpum.GstCtx.eflags)); 4188 4189 /* Free but don't flush the EFLAGS register. */ 4190 iemNativeRegFreeTmp(pReNative, idxEflReg); 4191 4192 return off; 4193 } 4146 4194 4147 4195
Note:
See TracChangeset
for help on using the changeset viewer.