Changeset 96394 in vbox
- Timestamp:
- Aug 22, 2022 11:00:24 AM (2 years ago)
- Location:
- trunk/src/VBox/VMM
- Files:
-
- 5 edited
-
VMMAll/IEMAllAImpl.asm (modified) (1 diff)
-
VMMAll/IEMAllAImplC.cpp (modified) (1 diff)
-
VMMAll/IEMAllInstructionsTwoByte0f.cpp.h (modified) (1 diff)
-
include/IEMInternal.h (modified) (3 diffs)
-
testcase/tstIEMCheckMc.cpp (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/VMM/VMMAll/IEMAllAImpl.asm
r96392 r96394 4749 4749 IEMIMPL_FP_F2_R64 cvtsd2ss 4750 4750 IEMIMPL_FP_F2_R64 sqrtsd 4751 4752 4753 ;; 4754 ; cvtpd2ps instruction. 4755 ; 4756 ; @param A0 FPU context (FXSTATE or XSAVEAREA). 4757 ; @param A1 Where to return the result including the MXCSR value. 4758 ; @param A2 Pointer to the first media register size operand (input/output). 4759 ; @param A3 Pointer to the second media register size operand (input). 4760 ; 4761 BEGINPROC_FASTCALL iemAImpl_cvtpd2ps_u128, 12 4762 PROLOGUE_4_ARGS 4763 IEMIMPL_SSE_PROLOGUE 4764 SSE_LD_FXSTATE_MXCSR A0 4765 4766 movdqu xmm0, [A2] 4767 movdqu xmm1, [A3] 4768 cvtpd2ps xmm0, xmm1 4769 movdqu [A1 + IEMSSERESULT.uResult], xmm0 4770 4771 SSE_ST_FXSTATE_MXCSR A1, A0 4772 IEMIMPL_SSE_PROLOGUE 4773 EPILOGUE_4_ARGS 4774 ENDPROC iemAImpl_cvtpd2ps_u128 4775 4776 BEGINPROC_FASTCALL iemAImpl_vcvtpd2ps_u128, 12 4777 PROLOGUE_4_ARGS 4778 IEMIMPL_AVX_PROLOGUE 4779 AVX_LD_XSAVEAREA_MXCSR A0 4780 4781 vmovdqu xmm0, [A2] 4782 vmovdqu xmm1, [A3] 4783 vcvtpd2ps xmm0, xmm1 4784 vmovdqu [A1 + IEMAVX128RESULT.uResult], xmm0 4785 4786 AVX128_ST_XSAVEAREA_MXCSR A1 4787 IEMIMPL_AVX_PROLOGUE 4788 EPILOGUE_4_ARGS 4789 ENDPROC iemAImpl_vcvtpd2ps_u128 4790 4791 BEGINPROC_FASTCALL iemAImpl_vcvtpd2ps_u256, 12 4792 PROLOGUE_4_ARGS 4793 IEMIMPL_AVX_PROLOGUE 4794 AVX_LD_XSAVEAREA_MXCSR A0 4795 4796 vmovdqu ymm0, [A2] 4797 vmovdqu ymm1, [A3] 4798 vcvtpd2ps xmm0, ymm1 4799 vmovdqu [A1 + IEMAVX256RESULT.uResult], ymm0 4800 4801 AVX256_ST_XSAVEAREA_MXCSR A1 4802 IEMIMPL_AVX_PROLOGUE 4803 EPILOGUE_4_ARGS 4804 ENDPROC iemAImpl_vcvtpd2ps_u256 -
trunk/src/VBox/VMM/VMMAll/IEMAllAImplC.cpp
r96392 r96394 15005 15005 } 15006 15006 #endif 15007 15008 15009 /** 15010 * CVTPD2PS 15011 */ 15012 #ifdef IEM_WITHOUT_ASSEMBLY 15013 static uint32_t iemAImpl_cvtpd2ps_u128_worker(PRTFLOAT32U pr32Res, uint32_t fMxcsr, PCRTFLOAT64U pr64Val1) 15014 { 15015 RTFLOAT64U r64Src1; 15016 fMxcsr |= iemSsePrepareValueR64(&r64Src1, fMxcsr, pr64Val1); 15017 15018 softfloat_state_t SoftState = IEM_SOFTFLOAT_STATE_INITIALIZER_FROM_MXCSR(fMxcsr); 15019 float32_t r32Result = f64_to_f32(iemFpSoftF64FromIprt(&r64Src1), &SoftState); 15020 return iemSseSoftStateAndR32ToMxcsrAndIprtResult(&SoftState, r32Result, pr32Res, fMxcsr); 15021 } 15022 15023 15024 IEM_DECL_IMPL_DEF(void, iemAImpl_cvtpd2ps_u128,(PX86FXSTATE pFpuState, PIEMSSERESULT pResult, PCX86XMMREG puSrc1, PCX86XMMREG puSrc2)) 15025 { 15026 RT_NOREF(puSrc1); 15027 15028 pResult->MXCSR = iemAImpl_cvtpd2ps_u128_worker(&pResult->uResult.ar32[0], pFpuState->MXCSR, &puSrc2->ar64[0]); 15029 pResult->MXCSR |= iemAImpl_cvtpd2ps_u128_worker(&pResult->uResult.ar32[1], pFpuState->MXCSR, &puSrc2->ar64[1]); 15030 pResult->uResult.au32[2] = 0; 15031 pResult->uResult.au32[3] = 0; 15032 } 15033 #endif -
trunk/src/VBox/VMM/VMMAll/IEMAllInstructionsTwoByte0f.cpp.h
r96392 r96394 4208 4208 /** Opcode 0x0f 0x5a - cvtps2pd Vpd, Wps */ 4209 4209 FNIEMOP_STUB(iemOp_cvtps2pd_Vpd_Wps); 4210 4211 4210 4212 /** Opcode 0x66 0x0f 0x5a - cvtpd2ps Vps, Wpd */ 4211 FNIEMOP_STUB(iemOp_cvtpd2ps_Vps_Wpd); 4213 FNIEMOP_DEF(iemOp_cvtpd2ps_Vps_Wpd) 4214 { 4215 IEMOP_MNEMONIC2(RM, CVTPD2PS, cvtpd2ps, Vps, Wpd, DISOPTYPE_HARMLESS, 0); 4216 return FNIEMOP_CALL_1(iemOpCommonSse2Fp_FullFull_To_Full, iemAImpl_cvtpd2ps_u128); 4217 } 4212 4218 4213 4219 -
trunk/src/VBox/VMM/include/IEMInternal.h
r96392 r96394 2446 2446 FNIEMAIMPLFPSSEF2U128 iemAImpl_addsubps_u128; 2447 2447 FNIEMAIMPLFPSSEF2U128 iemAImpl_addsubpd_u128; 2448 FNIEMAIMPLFPSSEF2U128 iemAImpl_cvtpd2ps_u128; 2448 2449 2449 2450 FNIEMAIMPLFPSSEF2U128R32 iemAImpl_addss_u128_r32; … … 2484 2485 FNIEMAIMPLFPAVXF3U128 iemAImpl_vaddsubps_u128, iemAImpl_vaddsubps_u128_fallback; 2485 2486 FNIEMAIMPLFPAVXF3U128 iemAImpl_vaddsubpd_u128, iemAImpl_vaddsubpd_u128_fallback; 2487 FNIEMAIMPLFPAVXF3U128 iemAImpl_vcvtpd2ps_u128, iemAImpl_vcvtpd2ps_u128_fallback; 2486 2488 2487 2489 FNIEMAIMPLFPAVXF3U128R32 iemAImpl_vaddss_u128_r32, iemAImpl_vaddss_u128_r32_fallback; … … 2518 2520 FNIEMAIMPLFPAVXF3U256 iemAImpl_vhaddsubps_u256, iemAImpl_vhaddsubps_u256_fallback; 2519 2521 FNIEMAIMPLFPAVXF3U256 iemAImpl_vhaddsubpd_u256, iemAImpl_vhaddsubpd_u256_fallback; 2522 FNIEMAIMPLFPAVXF3U256 iemAImpl_vcvtpd2ps_u256, iemAImpl_vcvtpd2ps_u256_fallback; 2520 2523 /** @} */ 2521 2524 -
trunk/src/VBox/VMM/testcase/tstIEMCheckMc.cpp
r96392 r96394 482 482 #define iemAImpl_addsubps_u128 NULL 483 483 #define iemAImpl_addsubpd_u128 NULL 484 #define iemAImpl_cvtpd2ps_u128 NULL 484 485 485 486 #define iemAImpl_addss_u128_r32 NULL
Note:
See TracChangeset
for help on using the changeset viewer.

