- Timestamp:
- Aug 9, 2023 2:49:39 PM (19 months ago)
- svn:sync-xref-src-repo-rev:
- 158734
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/VMM/VMMAll/IEMAllInstOneByte.cpp.h
r100833 r100834 5272 5272 switch (pVCpu->iem.s.enmEffOpSize) 5273 5273 { 5274 /** @todo the register must be committed separately! */5275 5274 case IEMMODE_16BIT: 5276 IEM_MC_BEGIN(2, 2); 5277 IEM_MC_ARG(uint16_t *, pu16Mem, 0); 5278 IEM_MC_ARG(uint16_t *, pu16Reg, 1); 5279 IEM_MC_LOCAL(RTGCPTR, GCPtrEffDst); 5275 IEM_MC_BEGIN(2, 4); 5276 IEM_MC_LOCAL(RTGCPTR, GCPtrEffDst); 5277 IEM_MC_LOCAL(uint8_t, bUnmapInfo); 5278 IEM_MC_LOCAL(uint16_t, uTmpReg); 5279 IEM_MC_ARG(uint16_t *, pu16Mem, 0); 5280 IEM_MC_ARG_LOCAL_REF(uint16_t *, pu16Reg, uTmpReg, 1); 5280 5281 5281 5282 IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffDst, bRm, 0); 5282 5283 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 5283 IEM_MC_MEM_MAP (pu16Mem, IEM_ACCESS_DATA_RW, pVCpu->iem.s.iEffSeg, GCPtrEffDst, 0 /*arg*/);5284 IEM_MC_ REF_GREG_U16(pu16Reg, IEM_GET_MODRM_REG(pVCpu, bRm));5284 IEM_MC_MEM_MAP_U16_RW(pu16Mem, bUnmapInfo, pVCpu->iem.s.iEffSeg, GCPtrEffDst); 5285 IEM_MC_FETCH_GREG_U16(uTmpReg, IEM_GET_MODRM_REG(pVCpu, bRm)); 5285 5286 if (!(pVCpu->iem.s.fExec & IEM_F_X86_DISREGARD_LOCK)) 5286 5287 IEM_MC_CALL_VOID_AIMPL_2(iemAImpl_xchg_u16_locked, pu16Mem, pu16Reg); 5287 5288 else 5288 5289 IEM_MC_CALL_VOID_AIMPL_2(iemAImpl_xchg_u16_unlocked, pu16Mem, pu16Reg); 5289 IEM_MC_MEM_COMMIT_AND_UNMAP(pu16Mem, IEM_ACCESS_DATA_RW); 5290 IEM_MC_MEM_COMMIT_AND_UNMAP_RW(pu16Mem, bUnmapInfo); 5291 IEM_MC_STORE_GREG_U16(IEM_GET_MODRM_REG(pVCpu, bRm), uTmpReg); 5290 5292 5291 5293 IEM_MC_ADVANCE_RIP_AND_FINISH(); … … 5294 5296 5295 5297 case IEMMODE_32BIT: 5296 IEM_MC_BEGIN(2, 2); 5297 IEM_MC_ARG(uint32_t *, pu32Mem, 0); 5298 IEM_MC_ARG(uint32_t *, pu32Reg, 1); 5299 IEM_MC_LOCAL(RTGCPTR, GCPtrEffDst); 5298 IEM_MC_BEGIN(2, 4); 5299 IEM_MC_LOCAL(RTGCPTR, GCPtrEffDst); 5300 IEM_MC_LOCAL(uint8_t, bUnmapInfo); 5301 IEM_MC_LOCAL(uint32_t, uTmpReg); 5302 IEM_MC_ARG(uint32_t *, pu32Mem, 0); 5303 IEM_MC_ARG_LOCAL_REF(uint32_t *, pu32Reg, uTmpReg, 1); 5300 5304 5301 5305 IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffDst, bRm, 0); 5302 5306 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 5303 IEM_MC_MEM_MAP (pu32Mem, IEM_ACCESS_DATA_RW, pVCpu->iem.s.iEffSeg, GCPtrEffDst, 0 /*arg*/);5304 IEM_MC_ REF_GREG_U32(pu32Reg, IEM_GET_MODRM_REG(pVCpu, bRm));5307 IEM_MC_MEM_MAP_U32_RW(pu32Mem, bUnmapInfo, pVCpu->iem.s.iEffSeg, GCPtrEffDst); 5308 IEM_MC_FETCH_GREG_U32(uTmpReg, IEM_GET_MODRM_REG(pVCpu, bRm)); 5305 5309 if (!(pVCpu->iem.s.fExec & IEM_F_X86_DISREGARD_LOCK)) 5306 5310 IEM_MC_CALL_VOID_AIMPL_2(iemAImpl_xchg_u32_locked, pu32Mem, pu32Reg); 5307 5311 else 5308 5312 IEM_MC_CALL_VOID_AIMPL_2(iemAImpl_xchg_u32_unlocked, pu32Mem, pu32Reg); 5309 IEM_MC_MEM_COMMIT_AND_UNMAP(pu32Mem, IEM_ACCESS_DATA_RW); 5313 IEM_MC_MEM_COMMIT_AND_UNMAP_RW(pu32Mem, bUnmapInfo); 5314 IEM_MC_STORE_GREG_U32(IEM_GET_MODRM_REG(pVCpu, bRm), uTmpReg); 5310 5315 5311 5316 IEM_MC_CLEAR_HIGH_GREG_U64_BY_REF(pu32Reg); … … 5315 5320 5316 5321 case IEMMODE_64BIT: 5317 IEM_MC_BEGIN(2, 2); 5318 IEM_MC_ARG(uint64_t *, pu64Mem, 0); 5319 IEM_MC_ARG(uint64_t *, pu64Reg, 1); 5320 IEM_MC_LOCAL(RTGCPTR, GCPtrEffDst); 5322 IEM_MC_BEGIN(2, 4); 5323 IEM_MC_LOCAL(RTGCPTR, GCPtrEffDst); 5324 IEM_MC_LOCAL(uint8_t, bUnmapInfo); 5325 IEM_MC_LOCAL(uint64_t, uTmpReg); 5326 IEM_MC_ARG(uint64_t *, pu64Mem, 0); 5327 IEM_MC_ARG_LOCAL_REF(uint64_t *, pu64Reg, uTmpReg, 1); 5321 5328 5322 5329 IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffDst, bRm, 0); 5323 5330 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 5324 IEM_MC_MEM_MAP (pu64Mem, IEM_ACCESS_DATA_RW, pVCpu->iem.s.iEffSeg, GCPtrEffDst, 0 /*arg*/);5325 IEM_MC_ REF_GREG_U64(pu64Reg, IEM_GET_MODRM_REG(pVCpu, bRm));5331 IEM_MC_MEM_MAP_U64_RW(pu64Mem, bUnmapInfo, pVCpu->iem.s.iEffSeg, GCPtrEffDst); 5332 IEM_MC_FETCH_GREG_U64(uTmpReg, IEM_GET_MODRM_REG(pVCpu, bRm)); 5326 5333 if (!(pVCpu->iem.s.fExec & IEM_F_X86_DISREGARD_LOCK)) 5327 5334 IEM_MC_CALL_VOID_AIMPL_2(iemAImpl_xchg_u64_locked, pu64Mem, pu64Reg); 5328 5335 else 5329 5336 IEM_MC_CALL_VOID_AIMPL_2(iemAImpl_xchg_u64_unlocked, pu64Mem, pu64Reg); 5330 IEM_MC_MEM_COMMIT_AND_UNMAP(pu64Mem, IEM_ACCESS_DATA_RW); 5337 IEM_MC_MEM_COMMIT_AND_UNMAP_RW(pu64Mem, bUnmapInfo); 5338 IEM_MC_STORE_GREG_U64(IEM_GET_MODRM_REG(pVCpu, bRm), uTmpReg); 5331 5339 5332 5340 IEM_MC_ADVANCE_RIP_AND_FINISH();
Note:
See TracChangeset
for help on using the changeset viewer.