Changeset 106179 in vbox for trunk/src/VBox/VMM/VMMAll/IEMAllInstOneByte.cpp.h
- Timestamp:
- Sep 29, 2024 1:14:19 AM (5 months ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/VMM/VMMAll/IEMAllInstOneByte.cpp.h
r106061 r106179 14564 14564 IEM_MC_BEGIN(0, 0); \ 14565 14565 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); \ 14566 IEM_MC_ARG(uint8_t, u8Value, 1); \ 14567 IEM_MC_FETCH_GREG_U8(u8Value, IEM_GET_MODRM_RM(pVCpu, bRm)); \ 14566 14568 IEM_MC_ARG(uint16_t *, pu16AX, 0); \ 14567 IEM_MC_ARG(uint8_t, u8Value, 1); \ 14568 IEM_MC_ARG(uint32_t *, pEFlags, 2); \ 14569 IEM_MC_REF_GREG_U16(pu16AX, X86_GREG_xAX); \ 14570 IEM_MC_ARG_EFLAGS( fEFlagsIn, 2); \ 14571 IEM_MC_CALL_AIMPL_3(uint32_t, fEFlagsRet, pfnU8, pu16AX, u8Value, fEFlagsIn); \ 14569 14572 \ 14570 IEM_MC_FETCH_GREG_U8(u8Value, IEM_GET_MODRM_RM(pVCpu, bRm)); \ 14571 IEM_MC_REF_GREG_U16(pu16AX, X86_GREG_xAX); \ 14572 IEM_MC_REF_EFLAGS(pEFlags); \ 14573 IEM_MC_CALL_AIMPL_3(int32_t, rc, pfnU8, pu16AX, u8Value, pEFlags); \ 14574 IEM_MC_IF_LOCAL_IS_Z(rc) { \ 14575 IEM_MC_ADVANCE_RIP_AND_FINISH(); \ 14576 } IEM_MC_ELSE() { \ 14577 IEM_MC_RAISE_DIVIDE_ERROR(); \ 14578 } IEM_MC_ENDIF(); \ 14579 \ 14573 IEM_MC_RAISE_DIVIDE_ERROR_IF_LOCAL_IS_ZERO(fEFlagsRet); \ 14574 IEM_MC_COMMIT_EFLAGS(fEFlagsRet); \ 14575 IEM_MC_ADVANCE_RIP_AND_FINISH(); \ 14580 14576 IEM_MC_END(); \ 14581 14577 } \ … … 14584 14580 /* memory access. */ \ 14585 14581 IEM_MC_BEGIN(0, 0); \ 14586 IEM_MC_ARG(uint16_t *, pu16AX, 0); \14587 IEM_MC_ARG(uint8_t, u8Value, 1); \14588 IEM_MC_ARG(uint32_t *, pEFlags, 2); \14589 14582 IEM_MC_LOCAL(RTGCPTR, GCPtrEffDst); \ 14590 \14591 14583 IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffDst, bRm, 0); \ 14592 14584 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); \ 14585 \ 14586 IEM_MC_ARG(uint8_t, u8Value, 1); \ 14593 14587 IEM_MC_FETCH_MEM_U8(u8Value, pVCpu->iem.s.iEffSeg, GCPtrEffDst); \ 14588 IEM_MC_ARG(uint16_t *, pu16AX, 0); \ 14594 14589 IEM_MC_REF_GREG_U16(pu16AX, X86_GREG_xAX); \ 14595 IEM_MC_REF_EFLAGS(pEFlags); \ 14596 IEM_MC_CALL_AIMPL_3(int32_t, rc, pfnU8, pu16AX, u8Value, pEFlags); \ 14597 IEM_MC_IF_LOCAL_IS_Z(rc) { \ 14598 IEM_MC_ADVANCE_RIP_AND_FINISH(); \ 14599 } IEM_MC_ELSE() { \ 14600 IEM_MC_RAISE_DIVIDE_ERROR(); \ 14601 } IEM_MC_ENDIF(); \ 14590 IEM_MC_ARG_EFLAGS( fEFlagsIn, 2); \ 14591 IEM_MC_CALL_AIMPL_3(uint32_t, fEFlagsRet, pfnU8, pu16AX, u8Value, fEFlagsIn); \ 14602 14592 \ 14593 IEM_MC_RAISE_DIVIDE_ERROR_IF_LOCAL_IS_ZERO(fEFlagsRet); \ 14594 IEM_MC_COMMIT_EFLAGS(fEFlagsRet); \ 14595 IEM_MC_ADVANCE_RIP_AND_FINISH(); \ 14603 14596 IEM_MC_END(); \ 14604 14597 } (void)0 … … 14616 14609 IEM_MC_BEGIN(0, 0); \ 14617 14610 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); \ 14611 IEM_MC_ARG(uint16_t, u16Value, 2); \ 14612 IEM_MC_FETCH_GREG_U16(u16Value, IEM_GET_MODRM_RM(pVCpu, bRm)); \ 14618 14613 IEM_MC_ARG(uint16_t *, pu16AX, 0); \ 14614 IEM_MC_REF_GREG_U16(pu16AX, X86_GREG_xAX); \ 14619 14615 IEM_MC_ARG(uint16_t *, pu16DX, 1); \ 14620 IEM_MC_ARG(uint16_t, u16Value, 2); \ 14621 IEM_MC_ARG(uint32_t *, pEFlags, 3); \ 14616 IEM_MC_REF_GREG_U16(pu16DX, X86_GREG_xDX); \ 14617 IEM_MC_ARG_EFLAGS( fEFlagsIn, 3); \ 14618 IEM_MC_CALL_AIMPL_4(uint32_t, fEFlagsRet, pImpl->pfnU16, pu16AX, pu16DX, u16Value, fEFlagsIn); \ 14622 14619 \ 14623 IEM_MC_FETCH_GREG_U16(u16Value, IEM_GET_MODRM_RM(pVCpu, bRm)); \ 14624 IEM_MC_REF_GREG_U16(pu16AX, X86_GREG_xAX); \ 14625 IEM_MC_REF_GREG_U16(pu16DX, X86_GREG_xDX); \ 14626 IEM_MC_REF_EFLAGS(pEFlags); \ 14627 IEM_MC_CALL_AIMPL_4(int32_t, rc, pImpl->pfnU16, pu16AX, pu16DX, u16Value, pEFlags); \ 14628 IEM_MC_IF_LOCAL_IS_Z(rc) { \ 14629 IEM_MC_ADVANCE_RIP_AND_FINISH(); \ 14630 } IEM_MC_ELSE() { \ 14631 IEM_MC_RAISE_DIVIDE_ERROR(); \ 14632 } IEM_MC_ENDIF(); \ 14633 \ 14620 IEM_MC_RAISE_DIVIDE_ERROR_IF_LOCAL_IS_ZERO(fEFlagsRet); \ 14621 IEM_MC_COMMIT_EFLAGS(fEFlagsRet); \ 14622 IEM_MC_ADVANCE_RIP_AND_FINISH(); \ 14634 14623 IEM_MC_END(); \ 14635 14624 break; \ … … 14638 14627 IEM_MC_BEGIN(IEM_MC_F_MIN_386, 0); \ 14639 14628 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); \ 14629 IEM_MC_ARG(uint32_t, u32Value, 2); \ 14630 IEM_MC_FETCH_GREG_U32(u32Value, IEM_GET_MODRM_RM(pVCpu, bRm)); \ 14640 14631 IEM_MC_ARG(uint32_t *, pu32AX, 0); \ 14632 IEM_MC_REF_GREG_U32(pu32AX, X86_GREG_xAX); \ 14641 14633 IEM_MC_ARG(uint32_t *, pu32DX, 1); \ 14642 IEM_MC_ARG(uint32_t, u32Value, 2); \ 14643 IEM_MC_ARG(uint32_t *, pEFlags, 3); \ 14634 IEM_MC_REF_GREG_U32(pu32DX, X86_GREG_xDX); \ 14635 IEM_MC_ARG_EFLAGS( fEFlagsIn, 3); \ 14636 IEM_MC_CALL_AIMPL_4(uint32_t, fEFlagsRet, pImpl->pfnU32, pu32AX, pu32DX, u32Value, fEFlagsIn); \ 14644 14637 \ 14645 IEM_MC_FETCH_GREG_U32(u32Value, IEM_GET_MODRM_RM(pVCpu, bRm)); \ 14646 IEM_MC_REF_GREG_U32(pu32AX, X86_GREG_xAX); \ 14647 IEM_MC_REF_GREG_U32(pu32DX, X86_GREG_xDX); \ 14648 IEM_MC_REF_EFLAGS(pEFlags); \ 14649 IEM_MC_CALL_AIMPL_4(int32_t, rc, pImpl->pfnU32, pu32AX, pu32DX, u32Value, pEFlags); \ 14650 IEM_MC_IF_LOCAL_IS_Z(rc) { \ 14651 IEM_MC_CLEAR_HIGH_GREG_U64(X86_GREG_xAX); \ 14652 IEM_MC_CLEAR_HIGH_GREG_U64(X86_GREG_xDX); \ 14653 IEM_MC_ADVANCE_RIP_AND_FINISH(); \ 14654 } IEM_MC_ELSE() { \ 14655 IEM_MC_RAISE_DIVIDE_ERROR(); \ 14656 } IEM_MC_ENDIF(); \ 14657 \ 14638 IEM_MC_RAISE_DIVIDE_ERROR_IF_LOCAL_IS_ZERO(fEFlagsRet); \ 14639 IEM_MC_COMMIT_EFLAGS(fEFlagsRet); \ 14640 IEM_MC_CLEAR_HIGH_GREG_U64(X86_GREG_xAX); \ 14641 IEM_MC_CLEAR_HIGH_GREG_U64(X86_GREG_xDX); \ 14642 IEM_MC_ADVANCE_RIP_AND_FINISH(); \ 14658 14643 IEM_MC_END(); \ 14659 14644 break; \ … … 14662 14647 IEM_MC_BEGIN(IEM_MC_F_64BIT, 0); \ 14663 14648 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); \ 14649 IEM_MC_ARG(uint64_t, u64Value, 2); \ 14650 IEM_MC_FETCH_GREG_U64(u64Value, IEM_GET_MODRM_RM(pVCpu, bRm)); \ 14664 14651 IEM_MC_ARG(uint64_t *, pu64AX, 0); \ 14652 IEM_MC_REF_GREG_U64(pu64AX, X86_GREG_xAX); \ 14665 14653 IEM_MC_ARG(uint64_t *, pu64DX, 1); \ 14666 IEM_MC_ARG(uint64_t, u64Value, 2); \ 14667 IEM_MC_ARG(uint32_t *, pEFlags, 3); \ 14654 IEM_MC_REF_GREG_U64(pu64DX, X86_GREG_xDX); \ 14655 IEM_MC_ARG_EFLAGS( fEFlagsIn, 3); \ 14656 IEM_MC_CALL_AIMPL_4(uint32_t, fEFlagsRet, pImpl->pfnU64, pu64AX, pu64DX, u64Value, fEFlagsIn); \ 14668 14657 \ 14669 IEM_MC_FETCH_GREG_U64(u64Value, IEM_GET_MODRM_RM(pVCpu, bRm)); \ 14670 IEM_MC_REF_GREG_U64(pu64AX, X86_GREG_xAX); \ 14671 IEM_MC_REF_GREG_U64(pu64DX, X86_GREG_xDX); \ 14672 IEM_MC_REF_EFLAGS(pEFlags); \ 14673 IEM_MC_CALL_AIMPL_4(int32_t, rc, pImpl->pfnU64, pu64AX, pu64DX, u64Value, pEFlags); \ 14674 IEM_MC_IF_LOCAL_IS_Z(rc) { \ 14675 IEM_MC_ADVANCE_RIP_AND_FINISH(); \ 14676 } IEM_MC_ELSE() { \ 14677 IEM_MC_RAISE_DIVIDE_ERROR(); \ 14678 } IEM_MC_ENDIF(); \ 14679 \ 14658 IEM_MC_RAISE_DIVIDE_ERROR_IF_LOCAL_IS_ZERO(fEFlagsRet); \ 14659 IEM_MC_COMMIT_EFLAGS(fEFlagsRet); \ 14660 IEM_MC_ADVANCE_RIP_AND_FINISH(); \ 14680 14661 IEM_MC_END(); \ 14681 14662 break; \ … … 14691 14672 case IEMMODE_16BIT: \ 14692 14673 IEM_MC_BEGIN(0, 0); \ 14693 IEM_MC_ARG(uint16_t *, pu16AX, 0); \14694 IEM_MC_ARG(uint16_t *, pu16DX, 1); \14695 IEM_MC_ARG(uint16_t, u16Value, 2); \14696 IEM_MC_ARG(uint32_t *, pEFlags, 3); \14697 14674 IEM_MC_LOCAL(RTGCPTR, GCPtrEffDst); \ 14698 \14699 14675 IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffDst, bRm, 0); \ 14700 14676 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); \ 14677 \ 14678 IEM_MC_ARG(uint16_t, u16Value, 2); \ 14701 14679 IEM_MC_FETCH_MEM_U16(u16Value, pVCpu->iem.s.iEffSeg, GCPtrEffDst); \ 14680 IEM_MC_ARG(uint16_t *, pu16AX, 0); \ 14702 14681 IEM_MC_REF_GREG_U16(pu16AX, X86_GREG_xAX); \ 14682 IEM_MC_ARG(uint16_t *, pu16DX, 1); \ 14703 14683 IEM_MC_REF_GREG_U16(pu16DX, X86_GREG_xDX); \ 14704 IEM_MC_REF_EFLAGS(pEFlags); \ 14705 IEM_MC_CALL_AIMPL_4(int32_t, rc, pImpl->pfnU16, pu16AX, pu16DX, u16Value, pEFlags); \ 14706 IEM_MC_IF_LOCAL_IS_Z(rc) { \ 14707 IEM_MC_ADVANCE_RIP_AND_FINISH(); \ 14708 } IEM_MC_ELSE() { \ 14709 IEM_MC_RAISE_DIVIDE_ERROR(); \ 14710 } IEM_MC_ENDIF(); \ 14684 IEM_MC_ARG_EFLAGS( fEFlagsIn, 3); \ 14685 IEM_MC_CALL_AIMPL_4(uint32_t, fEFlagsRet, pImpl->pfnU16, pu16AX, pu16DX, u16Value, fEFlagsIn); \ 14711 14686 \ 14687 IEM_MC_RAISE_DIVIDE_ERROR_IF_LOCAL_IS_ZERO(fEFlagsRet); \ 14688 IEM_MC_COMMIT_EFLAGS(fEFlagsRet); \ 14689 IEM_MC_ADVANCE_RIP_AND_FINISH(); \ 14712 14690 IEM_MC_END(); \ 14713 14691 break; \ … … 14715 14693 case IEMMODE_32BIT: \ 14716 14694 IEM_MC_BEGIN(IEM_MC_F_MIN_386, 0); \ 14717 IEM_MC_ARG(uint32_t *, pu32AX, 0); \14718 IEM_MC_ARG(uint32_t *, pu32DX, 1); \14719 IEM_MC_ARG(uint32_t, u32Value, 2); \14720 IEM_MC_ARG(uint32_t *, pEFlags, 3); \14721 14695 IEM_MC_LOCAL(RTGCPTR, GCPtrEffDst); \ 14722 \14723 14696 IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffDst, bRm, 0); \ 14724 14697 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); \ 14698 \ 14699 IEM_MC_ARG(uint32_t, u32Value, 2); \ 14725 14700 IEM_MC_FETCH_MEM_U32(u32Value, pVCpu->iem.s.iEffSeg, GCPtrEffDst); \ 14701 IEM_MC_ARG(uint32_t *, pu32AX, 0); \ 14726 14702 IEM_MC_REF_GREG_U32(pu32AX, X86_GREG_xAX); \ 14703 IEM_MC_ARG(uint32_t *, pu32DX, 1); \ 14727 14704 IEM_MC_REF_GREG_U32(pu32DX, X86_GREG_xDX); \ 14728 IEM_MC_REF_EFLAGS(pEFlags); \ 14729 IEM_MC_CALL_AIMPL_4(int32_t, rc, pImpl->pfnU32, pu32AX, pu32DX, u32Value, pEFlags); \ 14730 IEM_MC_IF_LOCAL_IS_Z(rc) { \ 14731 IEM_MC_CLEAR_HIGH_GREG_U64(X86_GREG_xAX); \ 14732 IEM_MC_CLEAR_HIGH_GREG_U64(X86_GREG_xDX); \ 14733 IEM_MC_ADVANCE_RIP_AND_FINISH(); \ 14734 } IEM_MC_ELSE() { \ 14735 IEM_MC_RAISE_DIVIDE_ERROR(); \ 14736 } IEM_MC_ENDIF(); \ 14705 IEM_MC_ARG_EFLAGS( fEFlagsIn, 3); \ 14706 IEM_MC_CALL_AIMPL_4(uint32_t, fEFlagsRet, pImpl->pfnU32, pu32AX, pu32DX, u32Value, fEFlagsIn); \ 14737 14707 \ 14708 IEM_MC_RAISE_DIVIDE_ERROR_IF_LOCAL_IS_ZERO(fEFlagsRet); \ 14709 IEM_MC_CLEAR_HIGH_GREG_U64(X86_GREG_xAX); \ 14710 IEM_MC_CLEAR_HIGH_GREG_U64(X86_GREG_xDX); \ 14711 IEM_MC_COMMIT_EFLAGS(fEFlagsRet); \ 14712 IEM_MC_ADVANCE_RIP_AND_FINISH(); \ 14738 14713 IEM_MC_END(); \ 14739 14714 break; \ … … 14741 14716 case IEMMODE_64BIT: \ 14742 14717 IEM_MC_BEGIN(IEM_MC_F_64BIT, 0); \ 14743 IEM_MC_ARG(uint64_t *, pu64AX, 0); \14744 IEM_MC_ARG(uint64_t *, pu64DX, 1); \14745 IEM_MC_ARG(uint64_t, u64Value, 2); \14746 IEM_MC_ARG(uint32_t *, pEFlags, 3); \14747 14718 IEM_MC_LOCAL(RTGCPTR, GCPtrEffDst); \ 14748 \14749 14719 IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffDst, bRm, 0); \ 14750 14720 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); \ 14721 \ 14722 IEM_MC_ARG(uint64_t, u64Value, 2); \ 14751 14723 IEM_MC_FETCH_MEM_U64(u64Value, pVCpu->iem.s.iEffSeg, GCPtrEffDst); \ 14724 IEM_MC_ARG(uint64_t *, pu64AX, 0); \ 14752 14725 IEM_MC_REF_GREG_U64(pu64AX, X86_GREG_xAX); \ 14726 IEM_MC_ARG(uint64_t *, pu64DX, 1); \ 14753 14727 IEM_MC_REF_GREG_U64(pu64DX, X86_GREG_xDX); \ 14754 IEM_MC_REF_EFLAGS(pEFlags); \ 14755 IEM_MC_CALL_AIMPL_4(int32_t, rc, pImpl->pfnU64, pu64AX, pu64DX, u64Value, pEFlags); \ 14756 IEM_MC_IF_LOCAL_IS_Z(rc) { \ 14757 IEM_MC_ADVANCE_RIP_AND_FINISH(); \ 14758 } IEM_MC_ELSE() { \ 14759 IEM_MC_RAISE_DIVIDE_ERROR(); \ 14760 } IEM_MC_ENDIF(); \ 14728 IEM_MC_ARG_EFLAGS( fEFlagsIn, 3); \ 14729 IEM_MC_CALL_AIMPL_4(uint32_t, fEFlagsRet, pImpl->pfnU64, pu64AX, pu64DX, u64Value, fEFlagsIn); \ 14761 14730 \ 14731 IEM_MC_RAISE_DIVIDE_ERROR_IF_LOCAL_IS_ZERO(fEFlagsRet); \ 14732 IEM_MC_COMMIT_EFLAGS(fEFlagsRet); \ 14733 IEM_MC_ADVANCE_RIP_AND_FINISH(); \ 14762 14734 IEM_MC_END(); \ 14763 14735 break; \
Note:
See TracChangeset
for help on using the changeset viewer.