Changeset 96326 in vbox
- Timestamp:
- Aug 19, 2022 8:51:02 AM (2 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/VMM/VMMAll/IEMAllInstructionsTwoByte0f.cpp.h
r96294 r96326 738 738 /** 739 739 * Common worker for SSE instructions on the forms: 740 * pxx {s,d}xmm1, xmm2/mem128740 * pxxs xmm1, xmm2/mem128 741 741 * 742 742 * Proper alignment of the 128-bit operand is enforced. … … 786 786 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 787 787 IEM_MC_MAYBE_RAISE_SSE_RELATED_XCPT(); 788 IEM_MC_FETCH_MEM_XMM_ALIGN_SSE(uSrc2, pVCpu->iem.s.iEffSeg, GCPtrEffSrc); 789 790 IEM_MC_PREPARE_SSE_USAGE(); 791 IEM_MC_REF_XREG_XMM_CONST(pSrc1, IEM_GET_MODRM_REG(pVCpu, bRm)); 792 IEM_MC_CALL_SSE_AIMPL_3(pfnU128, pSseRes, pSrc1, pSrc2); 793 IEM_MC_STORE_SSE_RESULT(SseRes, IEM_GET_MODRM_REG(pVCpu, bRm)); 794 IEM_MC_MAYBE_RAISE_SSE_AVX_SIMD_FP_OR_UD_XCPT(); 795 796 IEM_MC_ADVANCE_RIP(); 797 IEM_MC_END(); 798 } 799 return VINF_SUCCESS; 800 } 801 802 803 /** 804 * Common worker for SSE2 instructions on the forms: 805 * pxxd xmm1, xmm2/mem128 806 * 807 * Proper alignment of the 128-bit operand is enforced. 808 * Exceptions type 2. SSE cpuid checks. 809 * 810 * @sa iemOpCommonSseFp_FullFull_To_Full 811 */ 812 FNIEMOP_DEF_1(iemOpCommonSse2Fp_FullFull_To_Full, PFNIEMAIMPLFPSSEF2U128, pfnU128) 813 { 814 uint8_t bRm; IEM_OPCODE_GET_NEXT_U8(&bRm); 815 if (IEM_IS_MODRM_REG_MODE(bRm)) 816 { 817 /* 818 * Register, register. 819 */ 820 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 821 IEM_MC_BEGIN(3, 1); 822 IEM_MC_LOCAL(IEMSSERESULT, SseRes); 823 IEM_MC_ARG_LOCAL_REF(PIEMSSERESULT, pSseRes, SseRes, 0); 824 IEM_MC_ARG(PCX86XMMREG, pSrc1, 1); 825 IEM_MC_ARG(PCX86XMMREG, pSrc2, 2); 826 IEM_MC_MAYBE_RAISE_SSE2_RELATED_XCPT(); 827 IEM_MC_PREPARE_SSE_USAGE(); 828 IEM_MC_REF_XREG_XMM_CONST(pSrc1, IEM_GET_MODRM_REG(pVCpu, bRm)); 829 IEM_MC_REF_XREG_XMM_CONST(pSrc2, IEM_GET_MODRM_RM(pVCpu, bRm)); 830 IEM_MC_CALL_SSE_AIMPL_3(pfnU128, pSseRes, pSrc1, pSrc2); 831 IEM_MC_STORE_SSE_RESULT(SseRes, IEM_GET_MODRM_REG(pVCpu, bRm)); 832 IEM_MC_MAYBE_RAISE_SSE_AVX_SIMD_FP_OR_UD_XCPT(); 833 834 IEM_MC_ADVANCE_RIP(); 835 IEM_MC_END(); 836 } 837 else 838 { 839 /* 840 * Register, memory. 841 */ 842 IEM_MC_BEGIN(3, 2); 843 IEM_MC_LOCAL(IEMSSERESULT, SseRes); 844 IEM_MC_LOCAL(X86XMMREG, uSrc2); 845 IEM_MC_ARG_LOCAL_REF(PIEMSSERESULT, pSseRes, SseRes, 0); 846 IEM_MC_ARG(PCX86XMMREG, pSrc1, 1); 847 IEM_MC_ARG_LOCAL_REF(PCX86XMMREG, pSrc2, uSrc2, 2); 848 IEM_MC_LOCAL(RTGCPTR, GCPtrEffSrc); 849 850 IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffSrc, bRm, 0); 851 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 852 IEM_MC_MAYBE_RAISE_SSE2_RELATED_XCPT(); 788 853 IEM_MC_FETCH_MEM_XMM_ALIGN_SSE(uSrc2, pVCpu->iem.s.iEffSeg, GCPtrEffSrc); 789 854 … … 3870 3935 { 3871 3936 IEMOP_MNEMONIC2(RM, ADDPD, addpd, Vpd, Wpd, DISOPTYPE_HARMLESS, 0); 3872 return FNIEMOP_CALL_1(iemOpCommonSse Fp_FullFull_To_Full, iemAImpl_addpd_u128);3937 return FNIEMOP_CALL_1(iemOpCommonSse2Fp_FullFull_To_Full, iemAImpl_addpd_u128); 3873 3938 } 3874 3939 … … 3892 3957 { 3893 3958 IEMOP_MNEMONIC2(RM, MULPD, mulpd, Vpd, Wpd, DISOPTYPE_HARMLESS, 0); 3894 return FNIEMOP_CALL_1(iemOpCommonSse Fp_FullFull_To_Full, iemAImpl_mulpd_u128);3959 return FNIEMOP_CALL_1(iemOpCommonSse2Fp_FullFull_To_Full, iemAImpl_mulpd_u128); 3895 3960 } 3896 3961 … … 3931 3996 { 3932 3997 IEMOP_MNEMONIC2(RM, SUBPD, subpd, Vpd, Wpd, DISOPTYPE_HARMLESS, 0); 3933 return FNIEMOP_CALL_1(iemOpCommonSse Fp_FullFull_To_Full, iemAImpl_subpd_u128);3998 return FNIEMOP_CALL_1(iemOpCommonSse2Fp_FullFull_To_Full, iemAImpl_subpd_u128); 3934 3999 } 3935 4000
Note:
See TracChangeset
for help on using the changeset viewer.