Changeset 96087 in vbox
- Timestamp:
- Aug 6, 2022 7:41:19 PM (3 years ago)
- svn:sync-xref-src-repo-rev:
- 152886
- Location:
- trunk/src/VBox/VMM
- Files:
-
- 5 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/VMM/VMMAll/IEMAllAImpl.asm
r96064 r96087 3659 3659 IEMIMPL_MEDIA_F2 phsubsw, 1 3660 3660 IEMIMPL_MEDIA_F2 pmaddubsw, 1 3661 IEMIMPL_MEDIA_F2 pmulhrsw, 1 3661 3662 3662 3663 … … 4205 4206 IEMIMPL_MEDIA_OPT_F3 vphsubsw 4206 4207 IEMIMPL_MEDIA_OPT_F3 vpmaddubsw 4208 IEMIMPL_MEDIA_OPT_F3 vpmulhrsw 4207 4209 4208 4210 -
trunk/src/VBox/VMM/VMMAll/IEMAllAImplC.cpp
r96064 r96087 12946 12946 12947 12947 /* 12948 * PMULHRSW / VPMULHRSW 12949 */ 12950 #define DO_PMULHRSW(a_Src1, a_Src2) \ 12951 (uint16_t)(((((int32_t)(a_Src1) * (a_Src2)) >> 14 ) + 1) >> 1) 12952 12953 IEM_DECL_IMPL_DEF(void, iemAImpl_pmulhrsw_u64_fallback,(PCX86FXSTATE pFpuState, uint64_t *puDst, uint64_t const *puSrc)) 12954 { 12955 RTUINT64U uSrc1 = { *puDst }; 12956 RTUINT64U uSrc2 = { *puSrc }; 12957 RTUINT64U uDst; 12958 12959 uDst.au16[0] = DO_PMULHRSW(uSrc1.ai16[0], uSrc2.ai16[0]); 12960 uDst.au16[1] = DO_PMULHRSW(uSrc1.ai16[1], uSrc2.ai16[1]); 12961 uDst.au16[2] = DO_PMULHRSW(uSrc1.ai16[2], uSrc2.ai16[2]); 12962 uDst.au16[3] = DO_PMULHRSW(uSrc1.ai16[3], uSrc2.ai16[3]); 12963 *puDst = uDst.u; 12964 RT_NOREF(pFpuState); 12965 } 12966 12967 12968 IEM_DECL_IMPL_DEF(void, iemAImpl_pmulhrsw_u128_fallback,(PCX86FXSTATE pFpuState, PRTUINT128U puDst, PCRTUINT128U puSrc)) 12969 { 12970 RTUINT128U uSrc1 = *puDst; 12971 12972 puDst->ai16[0] = DO_PMULHRSW(uSrc1.ai16[0], puSrc->ai16[0]); 12973 puDst->ai16[1] = DO_PMULHRSW(uSrc1.ai16[1], puSrc->ai16[1]); 12974 puDst->ai16[2] = DO_PMULHRSW(uSrc1.ai16[2], puSrc->ai16[2]); 12975 puDst->ai16[3] = DO_PMULHRSW(uSrc1.ai16[3], puSrc->ai16[3]); 12976 puDst->ai16[4] = DO_PMULHRSW(uSrc1.ai16[4], puSrc->ai16[4]); 12977 puDst->ai16[5] = DO_PMULHRSW(uSrc1.ai16[5], puSrc->ai16[5]); 12978 puDst->ai16[6] = DO_PMULHRSW(uSrc1.ai16[6], puSrc->ai16[6]); 12979 puDst->ai16[7] = DO_PMULHRSW(uSrc1.ai16[7], puSrc->ai16[7]); 12980 RT_NOREF(pFpuState); 12981 } 12982 12983 12984 IEM_DECL_IMPL_DEF(void, iemAImpl_vpmulhrsw_u128_fallback,(PRTUINT128U puDst, PCRTUINT128U puSrc1, PCRTUINT128U puSrc2)) 12985 { 12986 RTUINT128U uDst; /* puDst can be the same as one of the source operands. */ 12987 12988 uDst.ai16[0] = DO_PMULHRSW(puSrc1->ai16[0], puSrc2->ai16[0]); 12989 uDst.ai16[1] = DO_PMULHRSW(puSrc1->ai16[1], puSrc2->ai16[1]); 12990 uDst.ai16[2] = DO_PMULHRSW(puSrc1->ai16[2], puSrc2->ai16[2]); 12991 uDst.ai16[3] = DO_PMULHRSW(puSrc1->ai16[3], puSrc2->ai16[3]); 12992 uDst.ai16[4] = DO_PMULHRSW(puSrc1->ai16[4], puSrc2->ai16[4]); 12993 uDst.ai16[5] = DO_PMULHRSW(puSrc1->ai16[5], puSrc2->ai16[5]); 12994 uDst.ai16[6] = DO_PMULHRSW(puSrc1->ai16[6], puSrc2->ai16[6]); 12995 uDst.ai16[7] = DO_PMULHRSW(puSrc1->ai16[7], puSrc2->ai16[7]); 12996 12997 puDst->au64[0] = uDst.au64[0]; 12998 puDst->au64[1] = uDst.au64[1]; 12999 } 13000 13001 13002 IEM_DECL_IMPL_DEF(void, iemAImpl_vpmulhrsw_u256_fallback,(PRTUINT256U puDst, PCRTUINT256U puSrc1, PCRTUINT256U puSrc2)) 13003 { 13004 RTUINT256U uDst; /* puDst can be the same as one of the source operands. */ 13005 13006 uDst.ai16[ 0] = DO_PMULHRSW(puSrc1->ai16[ 0], puSrc2->ai16[ 0]); 13007 uDst.ai16[ 1] = DO_PMULHRSW(puSrc1->ai16[ 1], puSrc2->ai16[ 1]); 13008 uDst.ai16[ 2] = DO_PMULHRSW(puSrc1->ai16[ 2], puSrc2->ai16[ 2]); 13009 uDst.ai16[ 3] = DO_PMULHRSW(puSrc1->ai16[ 3], puSrc2->ai16[ 3]); 13010 uDst.ai16[ 4] = DO_PMULHRSW(puSrc1->ai16[ 4], puSrc2->ai16[ 4]); 13011 uDst.ai16[ 5] = DO_PMULHRSW(puSrc1->ai16[ 5], puSrc2->ai16[ 5]); 13012 uDst.ai16[ 6] = DO_PMULHRSW(puSrc1->ai16[ 6], puSrc2->ai16[ 6]); 13013 uDst.ai16[ 7] = DO_PMULHRSW(puSrc1->ai16[ 7], puSrc2->ai16[ 7]); 13014 uDst.ai16[ 8] = DO_PMULHRSW(puSrc1->ai16[ 8], puSrc2->ai16[ 8]); 13015 uDst.ai16[ 9] = DO_PMULHRSW(puSrc1->ai16[ 9], puSrc2->ai16[ 9]); 13016 uDst.ai16[10] = DO_PMULHRSW(puSrc1->ai16[10], puSrc2->ai16[10]); 13017 uDst.ai16[11] = DO_PMULHRSW(puSrc1->ai16[11], puSrc2->ai16[11]); 13018 uDst.ai16[12] = DO_PMULHRSW(puSrc1->ai16[12], puSrc2->ai16[12]); 13019 uDst.ai16[13] = DO_PMULHRSW(puSrc1->ai16[13], puSrc2->ai16[13]); 13020 uDst.ai16[14] = DO_PMULHRSW(puSrc1->ai16[14], puSrc2->ai16[14]); 13021 uDst.ai16[15] = DO_PMULHRSW(puSrc1->ai16[15], puSrc2->ai16[15]); 13022 13023 puDst->au64[0] = uDst.au64[0]; 13024 puDst->au64[1] = uDst.au64[1]; 13025 puDst->au64[2] = uDst.au64[2]; 13026 puDst->au64[3] = uDst.au64[3]; 13027 } 13028 13029 13030 /* 12948 13031 * CRC32 (SEE 4.2). 12949 13032 */ -
trunk/src/VBox/VMM/VMMAll/IEMAllInstructionsThree0f38.cpp.h
r96064 r96087 479 479 480 480 /** Opcode 0x0f 0x38 0x0b. */ 481 FNIEMOP_STUB(iemOp_pmulhrsw_Pq_Qq); 481 FNIEMOP_DEF(iemOp_pmulhrsw_Pq_Qq) 482 { 483 IEMOP_MNEMONIC2(RM, PMULHRSW, pmulhrsw, Pq, Qq, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OP_SIZES); 484 return FNIEMOP_CALL_2(iemOpCommonMmx_FullFull_To_Full_Ex, 485 IEM_SELECT_HOST_OR_FALLBACK(fSsse3, iemAImpl_pmulhrsw_u64, &iemAImpl_pmulhrsw_u64_fallback), 486 IEM_GET_GUEST_CPU_FEATURES(pVCpu)->fSsse3); 487 } 488 489 482 490 /** Opcode 0x66 0x0f 0x38 0x0b. */ 483 FNIEMOP_STUB(iemOp_pmulhrsw_Vx_Wx); 491 FNIEMOP_DEF(iemOp_pmulhrsw_Vx_Wx) 492 { 493 IEMOP_MNEMONIC2(RM, PMULHRSW, pmulhrsw, Vx, Wx, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OP_SIZES); 494 return FNIEMOP_CALL_1(iemOpCommonSsse3_FullFull_To_Full, 495 IEM_SELECT_HOST_OR_FALLBACK(fSsse3, iemAImpl_pmulhrsw_u128, iemAImpl_pmulhrsw_u128_fallback)); 496 497 } 498 499 484 500 /* Opcode 0x0f 0x38 0x0c - invalid. */ 485 501 /* Opcode 0x66 0x0f 0x38 0x0c - invalid (vex only). */ -
trunk/src/VBox/VMM/VMMAll/IEMAllInstructionsVexMap2.cpp.h
r96064 r96087 157 157 158 158 /* Opcode VEX.0F38 0x0b - invalid. */ 159 160 159 161 /** Opcode VEX.66.0F38 0x0b. */ 160 FNIEMOP_STUB(iemOp_vpmulhrsw_Vx_Hx_Wx); 162 FNIEMOP_DEF(iemOp_vpmulhrsw_Vx_Hx_Wx) 163 { 164 IEMOP_MNEMONIC3(VEX_RVM, VPMULHRSW, vpmulhrsw, Vx, Hx, Wx, DISOPTYPE_HARMLESS, 0); 165 IEMOPMEDIAOPTF3_INIT_VARS(vpmulhrsw); 166 return FNIEMOP_CALL_1(iemOpCommonAvxAvx2_Vx_Hx_Wx_Opt, IEM_SELECT_HOST_OR_FALLBACK(fAvx2, &s_Host, &s_Fallback)); 167 } 168 169 161 170 /* Opcode VEX.0F38 0x0c - invalid. */ 162 171 /** Opcode VEX.66.0F38 0x0c. */ -
trunk/src/VBox/VMM/include/IEMInternal.h
r96064 r96087 1794 1794 FNIEMAIMPLMEDIAF2U64 iemAImpl_phsubsw_u64, iemAImpl_phsubsw_u64_fallback; 1795 1795 FNIEMAIMPLMEDIAF2U64 iemAImpl_pmaddubsw_u64, iemAImpl_pmaddubsw_u64_fallback; 1796 FNIEMAIMPLMEDIAF2U64 iemAImpl_pmulhrsw_u64, iemAImpl_pmulhrsw_u64_fallback; 1796 1797 FNIEMAIMPLMEDIAOPTF2U64 iemAImpl_psllw_u64, iemAImpl_psrlw_u64, iemAImpl_psraw_u64; 1797 1798 FNIEMAIMPLMEDIAOPTF2U64 iemAImpl_pslld_u64, iemAImpl_psrld_u64, iemAImpl_psrad_u64; … … 1845 1846 FNIEMAIMPLMEDIAF2U128 iemAImpl_phsubsw_u128, iemAImpl_phsubsw_u128_fallback; 1846 1847 FNIEMAIMPLMEDIAF2U128 iemAImpl_pmaddubsw_u128, iemAImpl_pmaddubsw_u128_fallback; 1848 FNIEMAIMPLMEDIAF2U128 iemAImpl_pmulhrsw_u128, iemAImpl_pmulhrsw_u128_fallback; 1847 1849 FNIEMAIMPLMEDIAOPTF2U128 iemAImpl_packsswb_u128, iemAImpl_packuswb_u128; 1848 1850 FNIEMAIMPLMEDIAOPTF2U128 iemAImpl_packssdw_u128, iemAImpl_packusdw_u128; … … 1906 1908 FNIEMAIMPLMEDIAOPTF3U128 iemAImpl_vphsubsw_u128, iemAImpl_vphsubsw_u128_fallback; 1907 1909 FNIEMAIMPLMEDIAOPTF3U128 iemAImpl_vpmaddubsw_u128, iemAImpl_vpmaddubsw_u128_fallback; 1910 FNIEMAIMPLMEDIAOPTF3U128 iemAImpl_vpmulhrsw_u128, iemAImpl_vpmulhrsw_u128_fallback; 1908 1911 1909 1912 FNIEMAIMPLMEDIAOPTF2U128 iemAImpl_vpabsb_u128, iemAImpl_vpabsb_u128_fallback; … … 1964 1967 FNIEMAIMPLMEDIAOPTF3U256 iemAImpl_vphsubsw_u256, iemAImpl_vphsubsw_u256_fallback; 1965 1968 FNIEMAIMPLMEDIAOPTF3U256 iemAImpl_vpmaddubsw_u256, iemAImpl_vpmaddubsw_u256_fallback; 1969 FNIEMAIMPLMEDIAOPTF3U256 iemAImpl_vpmulhrsw_u256, iemAImpl_vpmulhrsw_u256_fallback; 1966 1970 1967 1971 FNIEMAIMPLMEDIAOPTF2U256 iemAImpl_vpabsb_u256, iemAImpl_vpabsb_u256_fallback;
Note:
See TracChangeset
for help on using the changeset viewer.