Changeset 103642 in vbox
- Timestamp:
- Mar 2, 2024 1:01:44 AM (13 months ago)
- svn:sync-xref-src-repo-rev:
- 162002
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/VMM/VMMAll/IEMAllInstCommonBodyMacros.h
r103640 r103642 136 136 case IEMMODE_16BIT: \ 137 137 IEM_MC_BEGIN(3, 1, a_f16BitMcFlag, 0); \ 138 IEM_MC_ARG(uint16_t *, pu16Dst, 0); \ 138 IEM_MC_LOCAL(RTGCPTR, GCPtrEffDst); \ 139 IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffDst, a_bRm, 0); \ 140 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); \ 139 141 IEM_MC_ARG(uint16_t, u16Src, 1); \ 140 IEM_MC_ARG(uint32_t *, pEFlags, 2); \141 IEM_MC_LOCAL(RTGCPTR, GCPtrEffDst); \142 \143 IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffDst, a_bRm, 0); \144 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); \145 142 IEM_MC_FETCH_MEM_U16(u16Src, pVCpu->iem.s.iEffSeg, GCPtrEffDst); \ 146 IEM_MC_REF_GREG_U16(pu16Dst, IEM_GET_MODRM_REG(pVCpu, a_bRm)); \ 147 IEM_MC_REF_EFLAGS(pEFlags); \ 148 IEM_MC_CALL_VOID_AIMPL_3(a_fnNormalU16, pu16Dst, u16Src, pEFlags); \ 149 \ 143 IEM_MC_NATIVE_IF(a_fNativeArchs) { \ 144 IEM_MC_LOCAL(uint16_t, u16Dst); \ 145 IEM_MC_FETCH_GREG_U16(u16Dst, IEM_GET_MODRM_REG(pVCpu, bRm)); \ 146 /** @todo IEM_MC_LOCAL_EFLAGS(uEFlags); */ \ 147 IEM_MC_LOCAL(uint32_t, uEFlags); \ 148 IEM_MC_FETCH_EFLAGS(uEFlags); \ 149 IEM_MC_NATIVE_EMIT_4(RT_CONCAT3(iemNativeEmit_,a_EmitterBasename,_r_r_efl), u16Dst, u16Src, uEFlags, 16); \ 150 IEM_MC_STORE_GREG_U16(IEM_GET_MODRM_REG(pVCpu, bRm), u16Dst); \ 151 IEM_MC_COMMIT_EFLAGS(uEFlags); \ 152 } IEM_MC_NATIVE_ELSE() { \ 153 IEM_MC_ARG(uint16_t *, pu16Dst, 0); \ 154 IEM_MC_REF_GREG_U16(pu16Dst, IEM_GET_MODRM_REG(pVCpu, a_bRm)); \ 155 IEM_MC_ARG(uint32_t *, pEFlags, 2); \ 156 IEM_MC_REF_EFLAGS(pEFlags); \ 157 IEM_MC_CALL_VOID_AIMPL_3(a_fnNormalU16, pu16Dst, u16Src, pEFlags); \ 158 } IEM_MC_NATIVE_ENDIF(); \ 150 159 IEM_MC_ADVANCE_RIP_AND_FINISH(); \ 151 160 IEM_MC_END(); \ … … 154 163 case IEMMODE_32BIT: \ 155 164 IEM_MC_BEGIN(3, 1, IEM_MC_F_MIN_386, 0); \ 156 IEM_MC_ARG(uint32_t *, pu32Dst, 0); \ 165 IEM_MC_LOCAL(RTGCPTR, GCPtrEffDst); \ 166 IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffDst, a_bRm, 0); \ 167 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); \ 157 168 IEM_MC_ARG(uint32_t, u32Src, 1); \ 158 IEM_MC_ARG(uint32_t *, pEFlags, 2); \159 IEM_MC_LOCAL(RTGCPTR, GCPtrEffDst); \160 \161 IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffDst, a_bRm, 0); \162 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); \163 169 IEM_MC_FETCH_MEM_U32(u32Src, pVCpu->iem.s.iEffSeg, GCPtrEffDst); \ 164 IEM_MC_REF_GREG_U32(pu32Dst, IEM_GET_MODRM_REG(pVCpu, a_bRm)); \ 165 IEM_MC_REF_EFLAGS(pEFlags); \ 166 IEM_MC_CALL_VOID_AIMPL_3(a_fnNormalU32, pu32Dst, u32Src, pEFlags); \ 167 \ 168 if (a_fModifiesDstReg) \ 169 IEM_MC_CLEAR_HIGH_GREG_U64(IEM_GET_MODRM_REG(pVCpu, a_bRm)); \ 170 IEM_MC_NATIVE_IF(a_fNativeArchs) { \ 171 IEM_MC_LOCAL(uint32_t, u32Dst); \ 172 IEM_MC_FETCH_GREG_U32(u32Dst, IEM_GET_MODRM_REG(pVCpu, bRm)); \ 173 /** @todo IEM_MC_LOCAL_EFLAGS(uEFlags); */ \ 174 IEM_MC_LOCAL(uint32_t, uEFlags); \ 175 IEM_MC_FETCH_EFLAGS(uEFlags); \ 176 IEM_MC_NATIVE_EMIT_4(RT_CONCAT3(iemNativeEmit_,a_EmitterBasename,_r_r_efl), u32Dst, u32Src, uEFlags, 32); \ 177 IEM_MC_STORE_GREG_U32(IEM_GET_MODRM_REG(pVCpu, bRm), u32Dst); \ 178 IEM_MC_COMMIT_EFLAGS(uEFlags); \ 179 } IEM_MC_NATIVE_ELSE() { \ 180 IEM_MC_ARG(uint32_t *, pu32Dst, 0); \ 181 IEM_MC_ARG(uint32_t *, pEFlags, 2); \ 182 IEM_MC_REF_GREG_U32(pu32Dst, IEM_GET_MODRM_REG(pVCpu, a_bRm)); \ 183 IEM_MC_REF_EFLAGS(pEFlags); \ 184 IEM_MC_CALL_VOID_AIMPL_3(a_fnNormalU32, pu32Dst, u32Src, pEFlags); \ 185 if (a_fModifiesDstReg) \ 186 IEM_MC_CLEAR_HIGH_GREG_U64(IEM_GET_MODRM_REG(pVCpu, a_bRm)); \ 187 } IEM_MC_NATIVE_ENDIF(); \ 170 188 IEM_MC_ADVANCE_RIP_AND_FINISH(); \ 171 189 IEM_MC_END(); \ … … 174 192 case IEMMODE_64BIT: \ 175 193 IEM_MC_BEGIN(3, 1, IEM_MC_F_64BIT, 0); \ 176 IEM_MC_ARG(uint64_t *, pu64Dst, 0); \ 194 IEM_MC_LOCAL(RTGCPTR, GCPtrEffDst); \ 195 IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffDst, a_bRm, 0); \ 196 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); \ 177 197 IEM_MC_ARG(uint64_t, u64Src, 1); \ 178 IEM_MC_ARG(uint32_t *, pEFlags, 2); \179 IEM_MC_LOCAL(RTGCPTR, GCPtrEffDst); \180 \181 IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffDst, a_bRm, 0); \182 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); \183 198 IEM_MC_FETCH_MEM_U64(u64Src, pVCpu->iem.s.iEffSeg, GCPtrEffDst); \ 184 IEM_MC_REF_GREG_U64(pu64Dst, IEM_GET_MODRM_REG(pVCpu, a_bRm)); \ 185 IEM_MC_REF_EFLAGS(pEFlags); \ 186 IEM_MC_CALL_VOID_AIMPL_3(a_fnNormalU64, pu64Dst, u64Src, pEFlags); \ 187 \ 199 IEM_MC_NATIVE_IF(a_fNativeArchs) { \ 200 IEM_MC_LOCAL(uint64_t, u64Dst); \ 201 IEM_MC_FETCH_GREG_U64(u64Dst, IEM_GET_MODRM_REG(pVCpu, bRm)); \ 202 /** @todo IEM_MC_LOCAL_EFLAGS(uEFlags); */ \ 203 IEM_MC_LOCAL(uint32_t, uEFlags); \ 204 IEM_MC_FETCH_EFLAGS(uEFlags); \ 205 IEM_MC_NATIVE_EMIT_4(RT_CONCAT3(iemNativeEmit_,a_EmitterBasename,_r_r_efl), u64Dst, u64Src, uEFlags, 64); \ 206 IEM_MC_STORE_GREG_U64(IEM_GET_MODRM_REG(pVCpu, bRm), u64Dst); \ 207 IEM_MC_COMMIT_EFLAGS(uEFlags); \ 208 } IEM_MC_NATIVE_ELSE() { \ 209 IEM_MC_ARG(uint64_t *, pu64Dst, 0); \ 210 IEM_MC_ARG(uint32_t *, pEFlags, 2); \ 211 IEM_MC_REF_GREG_U64(pu64Dst, IEM_GET_MODRM_REG(pVCpu, a_bRm)); \ 212 IEM_MC_REF_EFLAGS(pEFlags); \ 213 IEM_MC_CALL_VOID_AIMPL_3(a_fnNormalU64, pu64Dst, u64Src, pEFlags); \ 214 } IEM_MC_NATIVE_ENDIF(); \ 188 215 IEM_MC_ADVANCE_RIP_AND_FINISH(); \ 189 216 IEM_MC_END(); \
Note:
See TracChangeset
for help on using the changeset viewer.