Changeset 102424 in vbox for trunk/src/VBox/VMM/VMMAll/IEMAllInstOneByte.cpp.h
- Timestamp:
- Dec 1, 2023 10:43:39 PM (12 months ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/VMM/VMMAll/IEMAllInstOneByte.cpp.h
r102397 r102424 9662 9662 { 9663 9663 IEMOP_MNEMONIC(fst_m32r, "fst m32r"); 9664 IEM_MC_BEGIN(3, 2, 0, 0);9664 IEM_MC_BEGIN(3, 3, 0, 0); 9665 9665 IEM_MC_LOCAL(RTGCPTR, GCPtrEffDst); 9666 IEM_MC_LOCAL(uint16_t, u16Fsw);9667 IEM_MC_ARG_LOCAL_REF(uint16_t *, pu16Fsw, u16Fsw, 0);9668 IEM_MC_ARG(PRTFLOAT32U, pr32Dst, 1);9669 IEM_MC_ARG(PCRTFLOAT80U, pr80Value, 2);9670 9671 9666 IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffDst, bRm, 0); 9667 9672 9668 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 9673 9669 IEM_MC_MAYBE_RAISE_DEVICE_NOT_AVAILABLE(); 9674 9670 IEM_MC_MAYBE_RAISE_FPU_XCPT(); 9675 9676 IEM_MC_MEM_MAP(pr32Dst, IEM_ACCESS_DATA_W, pVCpu->iem.s.iEffSeg, GCPtrEffDst, 1 /*arg*/);9677 9671 IEM_MC_PREPARE_FPU_USAGE(); 9672 9673 IEM_MC_LOCAL(uint8_t, bUnmapInfo); 9674 IEM_MC_ARG(PRTFLOAT32U, pr32Dst, 1); 9675 IEM_MC_MEM_MAP_R32_WO(pr32Dst, bUnmapInfo, pVCpu->iem.s.iEffSeg, GCPtrEffDst); 9676 9677 IEM_MC_ARG(PCRTFLOAT80U, pr80Value, 2); 9678 9678 IEM_MC_IF_FPUREG_NOT_EMPTY_REF_R80(pr80Value, 0) { 9679 IEM_MC_LOCAL(uint16_t, u16Fsw); 9680 IEM_MC_ARG_LOCAL_REF(uint16_t *,pu16Fsw, u16Fsw, 0); 9679 9681 IEM_MC_CALL_FPU_AIMPL_3(iemAImpl_fst_r80_to_r32, pu16Fsw, pr32Dst, pr80Value); 9680 IEM_MC_MEM_COMMIT_AND_UNMAP_FOR_FPU_STORE (pr32Dst, IEM_ACCESS_DATA_W, u16Fsw);9682 IEM_MC_MEM_COMMIT_AND_UNMAP_FOR_FPU_STORE_WO(pr32Dst, bUnmapInfo, u16Fsw); 9681 9683 IEM_MC_UPDATE_FSW_WITH_MEM_OP(u16Fsw, pVCpu->iem.s.iEffSeg, GCPtrEffDst, pVCpu->iem.s.uFpuOpcode); 9682 9684 } IEM_MC_ELSE() { 9683 9685 IEM_MC_IF_FCW_IM() { 9684 9686 IEM_MC_STORE_MEM_NEG_QNAN_R32_BY_REF(pr32Dst); 9685 IEM_MC_MEM_COMMIT_AND_UNMAP(pr32Dst, IEM_ACCESS_DATA_W); 9687 IEM_MC_MEM_COMMIT_AND_UNMAP_WO(pr32Dst, bUnmapInfo); 9688 } IEM_MC_ELSE() { 9689 IEM_MC_MEM_ROLLBACK_AND_UNMAP_WO(pr32Dst, bUnmapInfo); 9686 9690 } IEM_MC_ENDIF(); 9687 9691 IEM_MC_FPU_STACK_UNDERFLOW_MEM_OP(UINT8_MAX, pVCpu->iem.s.iEffSeg, GCPtrEffDst, pVCpu->iem.s.uFpuOpcode); … … 9697 9701 { 9698 9702 IEMOP_MNEMONIC(fstp_m32r, "fstp m32r"); 9699 IEM_MC_BEGIN(3, 2, 0, 0);9703 IEM_MC_BEGIN(3, 3, 0, 0); 9700 9704 IEM_MC_LOCAL(RTGCPTR, GCPtrEffDst); 9701 IEM_MC_LOCAL(uint16_t, u16Fsw);9702 IEM_MC_ARG_LOCAL_REF(uint16_t *, pu16Fsw, u16Fsw, 0);9703 IEM_MC_ARG(PRTFLOAT32U, pr32Dst, 1);9704 IEM_MC_ARG(PCRTFLOAT80U, pr80Value, 2);9705 9706 9705 IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffDst, bRm, 0); 9706 9707 9707 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 9708 9708 IEM_MC_MAYBE_RAISE_DEVICE_NOT_AVAILABLE(); 9709 9709 IEM_MC_MAYBE_RAISE_FPU_XCPT(); 9710 9711 IEM_MC_MEM_MAP(pr32Dst, IEM_ACCESS_DATA_W, pVCpu->iem.s.iEffSeg, GCPtrEffDst, 1 /*arg*/);9712 9710 IEM_MC_PREPARE_FPU_USAGE(); 9711 9712 IEM_MC_LOCAL(uint8_t, bUnmapInfo); 9713 IEM_MC_ARG(PRTFLOAT32U, pr32Dst, 1); 9714 IEM_MC_MEM_MAP_R32_WO(pr32Dst, bUnmapInfo, pVCpu->iem.s.iEffSeg, GCPtrEffDst); 9715 9716 IEM_MC_ARG(PCRTFLOAT80U, pr80Value, 2); 9713 9717 IEM_MC_IF_FPUREG_NOT_EMPTY_REF_R80(pr80Value, 0) { 9718 IEM_MC_LOCAL(uint16_t, u16Fsw); 9719 IEM_MC_ARG_LOCAL_REF(uint16_t *,pu16Fsw, u16Fsw, 0); 9714 9720 IEM_MC_CALL_FPU_AIMPL_3(iemAImpl_fst_r80_to_r32, pu16Fsw, pr32Dst, pr80Value); 9715 IEM_MC_MEM_COMMIT_AND_UNMAP_FOR_FPU_STORE (pr32Dst, IEM_ACCESS_DATA_W, u16Fsw);9721 IEM_MC_MEM_COMMIT_AND_UNMAP_FOR_FPU_STORE_WO(pr32Dst, bUnmapInfo, u16Fsw); 9716 9722 IEM_MC_UPDATE_FSW_WITH_MEM_OP_THEN_POP(u16Fsw, pVCpu->iem.s.iEffSeg, GCPtrEffDst, pVCpu->iem.s.uFpuOpcode); 9717 9723 } IEM_MC_ELSE() { 9718 9724 IEM_MC_IF_FCW_IM() { 9719 9725 IEM_MC_STORE_MEM_NEG_QNAN_R32_BY_REF(pr32Dst); 9720 IEM_MC_MEM_COMMIT_AND_UNMAP(pr32Dst, IEM_ACCESS_DATA_W); 9726 IEM_MC_MEM_COMMIT_AND_UNMAP_WO(pr32Dst, bUnmapInfo); 9727 } IEM_MC_ELSE() { 9728 IEM_MC_MEM_ROLLBACK_AND_UNMAP_WO(pr32Dst, bUnmapInfo); 9721 9729 } IEM_MC_ENDIF(); 9722 9730 IEM_MC_FPU_STACK_UNDERFLOW_MEM_OP_THEN_POP(UINT8_MAX, pVCpu->iem.s.iEffSeg, GCPtrEffDst, pVCpu->iem.s.uFpuOpcode); … … 10779 10787 { 10780 10788 IEMOP_MNEMONIC(fisttp_m32i, "fisttp m32i"); 10781 IEM_MC_BEGIN(3, 2, 0, 0);10789 IEM_MC_BEGIN(3, 3, 0, 0); 10782 10790 IEM_MC_LOCAL(RTGCPTR, GCPtrEffDst); 10783 IEM_MC_LOCAL(uint16_t, u16Fsw);10784 IEM_MC_ARG_LOCAL_REF(uint16_t *, pu16Fsw, u16Fsw, 0);10785 IEM_MC_ARG(int32_t *, pi32Dst, 1);10786 IEM_MC_ARG(PCRTFLOAT80U, pr80Value, 2);10787 10788 10791 IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffDst, bRm, 0); 10792 10789 10793 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 10790 10794 IEM_MC_MAYBE_RAISE_DEVICE_NOT_AVAILABLE(); 10791 10795 IEM_MC_MAYBE_RAISE_FPU_XCPT(); 10792 10793 IEM_MC_MEM_MAP(pi32Dst, IEM_ACCESS_DATA_W, pVCpu->iem.s.iEffSeg, GCPtrEffDst, 1 /*arg*/);10794 10796 IEM_MC_PREPARE_FPU_USAGE(); 10797 10798 IEM_MC_LOCAL(uint8_t, bUnmapInfo); 10799 IEM_MC_ARG(int32_t *, pi32Dst, 1); 10800 IEM_MC_MEM_MAP_I32_WO(pi32Dst, bUnmapInfo, pVCpu->iem.s.iEffSeg, GCPtrEffDst); 10801 10802 IEM_MC_ARG(PCRTFLOAT80U, pr80Value, 2); 10795 10803 IEM_MC_IF_FPUREG_NOT_EMPTY_REF_R80(pr80Value, 0) { 10804 IEM_MC_LOCAL(uint16_t, u16Fsw); 10805 IEM_MC_ARG_LOCAL_REF(uint16_t *,pu16Fsw, u16Fsw, 0); 10796 10806 IEM_MC_CALL_FPU_AIMPL_3(iemAImpl_fistt_r80_to_i32, pu16Fsw, pi32Dst, pr80Value); 10797 IEM_MC_MEM_COMMIT_AND_UNMAP_FOR_FPU_STORE (pi32Dst, IEM_ACCESS_DATA_W, u16Fsw);10807 IEM_MC_MEM_COMMIT_AND_UNMAP_FOR_FPU_STORE_WO(pi32Dst, bUnmapInfo, u16Fsw); 10798 10808 IEM_MC_UPDATE_FSW_WITH_MEM_OP_THEN_POP(u16Fsw, pVCpu->iem.s.iEffSeg, GCPtrEffDst, pVCpu->iem.s.uFpuOpcode); 10799 10809 } IEM_MC_ELSE() { 10800 10810 IEM_MC_IF_FCW_IM() { 10801 10811 IEM_MC_STORE_MEM_I32_CONST_BY_REF(pi32Dst, INT32_MIN /* (integer indefinite) */); 10802 IEM_MC_MEM_COMMIT_AND_UNMAP(pi32Dst, IEM_ACCESS_DATA_W); 10812 IEM_MC_MEM_COMMIT_AND_UNMAP_WO(pi32Dst, bUnmapInfo); 10813 } IEM_MC_ELSE() { 10814 IEM_MC_MEM_ROLLBACK_AND_UNMAP_WO(pi32Dst, bUnmapInfo); 10803 10815 } IEM_MC_ENDIF(); 10804 10816 IEM_MC_FPU_STACK_UNDERFLOW_MEM_OP_THEN_POP(UINT8_MAX, pVCpu->iem.s.iEffSeg, GCPtrEffDst, pVCpu->iem.s.uFpuOpcode); … … 10814 10826 { 10815 10827 IEMOP_MNEMONIC(fist_m32i, "fist m32i"); 10816 IEM_MC_BEGIN(3, 2, 0, 0);10828 IEM_MC_BEGIN(3, 3, 0, 0); 10817 10829 IEM_MC_LOCAL(RTGCPTR, GCPtrEffDst); 10818 IEM_MC_LOCAL(uint16_t, u16Fsw);10819 IEM_MC_ARG_LOCAL_REF(uint16_t *, pu16Fsw, u16Fsw, 0);10820 IEM_MC_ARG(int32_t *, pi32Dst, 1);10821 IEM_MC_ARG(PCRTFLOAT80U, pr80Value, 2);10822 10823 10830 IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffDst, bRm, 0); 10831 10824 10832 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 10825 10833 IEM_MC_MAYBE_RAISE_DEVICE_NOT_AVAILABLE(); 10826 10834 IEM_MC_MAYBE_RAISE_FPU_XCPT(); 10827 10828 IEM_MC_MEM_MAP(pi32Dst, IEM_ACCESS_DATA_W, pVCpu->iem.s.iEffSeg, GCPtrEffDst, 1 /*arg*/);10829 10835 IEM_MC_PREPARE_FPU_USAGE(); 10836 10837 IEM_MC_LOCAL(uint8_t, bUnmapInfo); 10838 IEM_MC_ARG(int32_t *, pi32Dst, 1); 10839 IEM_MC_MEM_MAP_I32_WO(pi32Dst, bUnmapInfo, pVCpu->iem.s.iEffSeg, GCPtrEffDst); 10840 10841 IEM_MC_ARG(PCRTFLOAT80U, pr80Value, 2); 10830 10842 IEM_MC_IF_FPUREG_NOT_EMPTY_REF_R80(pr80Value, 0) { 10843 IEM_MC_LOCAL(uint16_t, u16Fsw); 10844 IEM_MC_ARG_LOCAL_REF(uint16_t *,pu16Fsw, u16Fsw, 0); 10831 10845 IEM_MC_CALL_FPU_AIMPL_3(iemAImpl_fist_r80_to_i32, pu16Fsw, pi32Dst, pr80Value); 10832 IEM_MC_MEM_COMMIT_AND_UNMAP_FOR_FPU_STORE (pi32Dst, IEM_ACCESS_DATA_W, u16Fsw);10846 IEM_MC_MEM_COMMIT_AND_UNMAP_FOR_FPU_STORE_WO(pi32Dst, bUnmapInfo, u16Fsw); 10833 10847 IEM_MC_UPDATE_FSW_WITH_MEM_OP(u16Fsw, pVCpu->iem.s.iEffSeg, GCPtrEffDst, pVCpu->iem.s.uFpuOpcode); 10834 10848 } IEM_MC_ELSE() { 10835 10849 IEM_MC_IF_FCW_IM() { 10836 10850 IEM_MC_STORE_MEM_I32_CONST_BY_REF(pi32Dst, INT32_MIN /* (integer indefinite) */); 10837 IEM_MC_MEM_COMMIT_AND_UNMAP(pi32Dst, IEM_ACCESS_DATA_W); 10851 IEM_MC_MEM_COMMIT_AND_UNMAP_WO(pi32Dst, bUnmapInfo); 10852 } IEM_MC_ELSE() { 10853 IEM_MC_MEM_ROLLBACK_AND_UNMAP_WO(pi32Dst, bUnmapInfo); 10838 10854 } IEM_MC_ENDIF(); 10839 10855 IEM_MC_FPU_STACK_UNDERFLOW_MEM_OP(UINT8_MAX, pVCpu->iem.s.iEffSeg, GCPtrEffDst, pVCpu->iem.s.uFpuOpcode); … … 10851 10867 IEM_MC_BEGIN(3, 2, 0, 0); 10852 10868 IEM_MC_LOCAL(RTGCPTR, GCPtrEffDst); 10853 IEM_MC_LOCAL(uint16_t, u16Fsw);10854 IEM_MC_ARG_LOCAL_REF(uint16_t *, pu16Fsw, u16Fsw, 0);10855 IEM_MC_ARG(int32_t *, pi32Dst, 1);10856 IEM_MC_ARG(PCRTFLOAT80U, pr80Value, 2);10857 10858 10869 IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffDst, bRm, 0); 10870 10859 10871 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 10860 10872 IEM_MC_MAYBE_RAISE_DEVICE_NOT_AVAILABLE(); 10861 10873 IEM_MC_MAYBE_RAISE_FPU_XCPT(); 10862 10863 IEM_MC_MEM_MAP(pi32Dst, IEM_ACCESS_DATA_W, pVCpu->iem.s.iEffSeg, GCPtrEffDst, 1 /*arg*/);10864 10874 IEM_MC_PREPARE_FPU_USAGE(); 10875 10876 IEM_MC_LOCAL(uint8_t, bUnmapInfo); 10877 IEM_MC_ARG(int32_t *, pi32Dst, 1); 10878 IEM_MC_MEM_MAP_I32_WO(pi32Dst, bUnmapInfo, pVCpu->iem.s.iEffSeg, GCPtrEffDst); 10879 10880 IEM_MC_ARG(PCRTFLOAT80U, pr80Value, 2); 10865 10881 IEM_MC_IF_FPUREG_NOT_EMPTY_REF_R80(pr80Value, 0) { 10882 IEM_MC_LOCAL(uint16_t, u16Fsw); 10883 IEM_MC_ARG_LOCAL_REF(uint16_t *,pu16Fsw, u16Fsw, 0); 10866 10884 IEM_MC_CALL_FPU_AIMPL_3(iemAImpl_fist_r80_to_i32, pu16Fsw, pi32Dst, pr80Value); 10867 IEM_MC_MEM_COMMIT_AND_UNMAP_FOR_FPU_STORE (pi32Dst, IEM_ACCESS_DATA_W, u16Fsw);10885 IEM_MC_MEM_COMMIT_AND_UNMAP_FOR_FPU_STORE_WO(pi32Dst, bUnmapInfo, u16Fsw); 10868 10886 IEM_MC_UPDATE_FSW_WITH_MEM_OP_THEN_POP(u16Fsw, pVCpu->iem.s.iEffSeg, GCPtrEffDst, pVCpu->iem.s.uFpuOpcode); 10869 10887 } IEM_MC_ELSE() { 10870 10888 IEM_MC_IF_FCW_IM() { 10871 10889 IEM_MC_STORE_MEM_I32_CONST_BY_REF(pi32Dst, INT32_MIN /* (integer indefinite) */); 10872 IEM_MC_MEM_COMMIT_AND_UNMAP(pi32Dst, IEM_ACCESS_DATA_W); 10890 IEM_MC_MEM_COMMIT_AND_UNMAP_WO(pi32Dst, bUnmapInfo); 10891 } IEM_MC_ELSE() { 10892 IEM_MC_MEM_ROLLBACK_AND_UNMAP_WO(pi32Dst, bUnmapInfo); 10873 10893 } IEM_MC_ENDIF(); 10874 10894 IEM_MC_FPU_STACK_UNDERFLOW_MEM_OP_THEN_POP(UINT8_MAX, pVCpu->iem.s.iEffSeg, GCPtrEffDst, pVCpu->iem.s.uFpuOpcode); … … 10916 10936 { 10917 10937 IEMOP_MNEMONIC(fstp_m80r, "fstp m80r"); 10918 IEM_MC_BEGIN(3, 2, 0, 0);10938 IEM_MC_BEGIN(3, 3, 0, 0); 10919 10939 IEM_MC_LOCAL(RTGCPTR, GCPtrEffDst); 10920 IEM_MC_LOCAL(uint16_t, u16Fsw);10921 IEM_MC_ARG_LOCAL_REF(uint16_t *, pu16Fsw, u16Fsw, 0);10922 IEM_MC_ARG(PRTFLOAT80U, pr80Dst, 1);10923 IEM_MC_ARG(PCRTFLOAT80U, pr80Value, 2);10924 10925 10940 IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffDst, bRm, 0); 10941 10926 10942 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 10927 10943 IEM_MC_MAYBE_RAISE_DEVICE_NOT_AVAILABLE(); 10928 10944 IEM_MC_MAYBE_RAISE_FPU_XCPT(); 10929 10930 IEM_MC_MEM_MAP_EX(pr80Dst, IEM_ACCESS_DATA_W, sizeof(*pr80Dst), pVCpu->iem.s.iEffSeg, GCPtrEffDst, 7 /*cbAlign*/, 1 /*arg*/);10931 10945 IEM_MC_PREPARE_FPU_USAGE(); 10946 10947 IEM_MC_LOCAL(uint8_t, bUnmapInfo); 10948 IEM_MC_ARG(PRTFLOAT80U, pr80Dst, 1); 10949 IEM_MC_MEM_MAP_R80_WO(pr80Dst, bUnmapInfo, pVCpu->iem.s.iEffSeg, GCPtrEffDst); 10950 10951 IEM_MC_ARG(PCRTFLOAT80U, pr80Value, 2); 10932 10952 IEM_MC_IF_FPUREG_NOT_EMPTY_REF_R80(pr80Value, 0) { 10953 IEM_MC_LOCAL(uint16_t, u16Fsw); 10954 IEM_MC_ARG_LOCAL_REF(uint16_t *,pu16Fsw, u16Fsw, 0); 10933 10955 IEM_MC_CALL_FPU_AIMPL_3(iemAImpl_fst_r80_to_r80, pu16Fsw, pr80Dst, pr80Value); 10934 IEM_MC_MEM_COMMIT_AND_UNMAP_FOR_FPU_STORE (pr80Dst, IEM_ACCESS_DATA_W, u16Fsw);10956 IEM_MC_MEM_COMMIT_AND_UNMAP_FOR_FPU_STORE_WO(pr80Dst, bUnmapInfo, u16Fsw); 10935 10957 IEM_MC_UPDATE_FSW_WITH_MEM_OP_THEN_POP(u16Fsw, pVCpu->iem.s.iEffSeg, GCPtrEffDst, pVCpu->iem.s.uFpuOpcode); 10936 10958 } IEM_MC_ELSE() { 10937 10959 IEM_MC_IF_FCW_IM() { 10938 10960 IEM_MC_STORE_MEM_NEG_QNAN_R80_BY_REF(pr80Dst); 10939 IEM_MC_MEM_COMMIT_AND_UNMAP(pr80Dst, IEM_ACCESS_DATA_W); 10961 IEM_MC_MEM_COMMIT_AND_UNMAP_WO(pr80Dst, bUnmapInfo); 10962 } IEM_MC_ELSE() { 10963 IEM_MC_MEM_ROLLBACK_AND_UNMAP_WO(pr80Dst, bUnmapInfo); 10940 10964 } IEM_MC_ENDIF(); 10941 10965 IEM_MC_FPU_STACK_UNDERFLOW_MEM_OP_THEN_POP(UINT8_MAX, pVCpu->iem.s.iEffSeg, GCPtrEffDst, pVCpu->iem.s.uFpuOpcode);
Note:
See TracChangeset
for help on using the changeset viewer.