Changeset 103719 in vbox for trunk/src/VBox/VMM/VMMAll/IEMAllInstOneByte.cpp.h
- Timestamp:
- Mar 7, 2024 9:34:26 AM (12 months ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/VMM/VMMAll/IEMAllInstOneByte.cpp.h
r103718 r103719 296 296 IEM_MC_NATIVE_EMIT_4(RT_CONCAT3(iemNativeEmit_,a_InsNm,_r_r_efl), u8Dst, u8Src, uEFlags, 8); \ 297 297 IEM_MC_STORE_GREG_U8(IEM_GET_MODRM_REG(pVCpu, a_bRm), u8Dst); \ 298 IEM_MC_COMMIT_EFLAGS(uEFlags); \ 299 } IEM_MC_NATIVE_ELSE() { \ 300 IEM_MC_ARG(uint8_t *, pu8Dst, 0); \ 301 IEM_MC_REF_GREG_U8(pu8Dst, IEM_GET_MODRM_REG(pVCpu, a_bRm)); \ 302 IEM_MC_ARG(uint32_t *, pEFlags, 2); \ 303 IEM_MC_REF_EFLAGS(pEFlags); \ 304 IEM_MC_CALL_VOID_AIMPL_3(RT_CONCAT3(iemAImpl_,a_InsNm,_u8), pu8Dst, u8Src, pEFlags); \ 305 } IEM_MC_NATIVE_ENDIF(); \ 306 IEM_MC_ADVANCE_RIP_AND_FINISH(); \ 307 IEM_MC_END(); \ 308 } \ 309 (void)0 310 311 /** 312 * Body for byte instruction CMP with a register as the destination. 313 */ 314 #define IEMOP_BODY_BINARY_r8_rm_RO(a_bRm, a_InsNm, a_fNativeArchs) \ 315 /* \ 316 * If rm is denoting a register, no more instruction bytes. \ 317 */ \ 318 if (IEM_IS_MODRM_REG_MODE(a_bRm)) \ 319 { \ 320 IEM_MC_BEGIN(3, 0, 0, 0); \ 321 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); \ 322 IEM_MC_ARG(uint8_t, u8Src, 1); \ 323 IEM_MC_FETCH_GREG_U8(u8Src, IEM_GET_MODRM_RM(pVCpu, a_bRm)); \ 324 IEM_MC_NATIVE_IF(a_fNativeArchs) { \ 325 IEM_MC_LOCAL(uint8_t, u8Dst); \ 326 IEM_MC_FETCH_GREG_U8(u8Dst, IEM_GET_MODRM_REG(pVCpu, a_bRm)); \ 327 /** @todo IEM_MC_LOCAL_EFLAGS(uEFlags); */ \ 328 IEM_MC_LOCAL(uint32_t, uEFlags); \ 329 IEM_MC_FETCH_EFLAGS(uEFlags); \ 330 IEM_MC_NATIVE_EMIT_4(RT_CONCAT3(iemNativeEmit_,a_InsNm,_r_r_efl), u8Dst, u8Src, uEFlags, 8); \ 331 IEM_MC_COMMIT_EFLAGS(uEFlags); \ 332 } IEM_MC_NATIVE_ELSE() { \ 333 IEM_MC_ARG(uint8_t *, pu8Dst, 0); \ 334 IEM_MC_REF_GREG_U8(pu8Dst, IEM_GET_MODRM_REG(pVCpu, a_bRm)); \ 335 IEM_MC_ARG(uint32_t *, pEFlags, 2); \ 336 IEM_MC_REF_EFLAGS(pEFlags); \ 337 IEM_MC_CALL_VOID_AIMPL_3(RT_CONCAT3(iemAImpl_,a_InsNm,_u8), pu8Dst, u8Src, pEFlags); \ 338 } IEM_MC_NATIVE_ENDIF(); \ 339 IEM_MC_ADVANCE_RIP_AND_FINISH(); \ 340 IEM_MC_END(); \ 341 } \ 342 else \ 343 { \ 344 /* \ 345 * We're accessing memory. \ 346 */ \ 347 IEM_MC_BEGIN(3, 1, 0, 0); \ 348 IEM_MC_LOCAL(RTGCPTR, GCPtrEffDst); \ 349 IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffDst, a_bRm, 0); \ 350 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); \ 351 IEM_MC_ARG(uint8_t, u8Src, 1); \ 352 IEM_MC_FETCH_MEM_U8(u8Src, pVCpu->iem.s.iEffSeg, GCPtrEffDst); \ 353 IEM_MC_NATIVE_IF(a_fNativeArchs) { \ 354 IEM_MC_LOCAL(uint8_t, u8Dst); \ 355 IEM_MC_FETCH_GREG_U8(u8Dst, IEM_GET_MODRM_REG(pVCpu, a_bRm)); \ 356 /** @todo IEM_MC_LOCAL_EFLAGS(uEFlags); */ \ 357 IEM_MC_LOCAL(uint32_t, uEFlags); \ 358 IEM_MC_FETCH_EFLAGS(uEFlags); \ 359 IEM_MC_NATIVE_EMIT_4(RT_CONCAT3(iemNativeEmit_,a_InsNm,_r_r_efl), u8Dst, u8Src, uEFlags, 8); \ 298 360 IEM_MC_COMMIT_EFLAGS(uEFlags); \ 299 361 } IEM_MC_NATIVE_ELSE() { \ … … 1792 1854 IEMOP_MNEMONIC(cmp_Gb_Eb, "cmp Gb,Eb"); 1793 1855 uint8_t bRm; IEM_OPCODE_GET_NEXT_U8(&bRm); 1794 IEMOP_BODY_BINARY_r8_rm (bRm, cmp, RT_ARCH_VAL_AMD64 | RT_ARCH_VAL_ARM64);1856 IEMOP_BODY_BINARY_r8_rm_RO(bRm, cmp, RT_ARCH_VAL_AMD64 | RT_ARCH_VAL_ARM64); 1795 1857 } 1796 1858
Note:
See TracChangeset
for help on using the changeset viewer.