Changeset 103267 in vbox for trunk/src/VBox
- Timestamp:
- Feb 8, 2024 6:34:32 AM (12 months ago)
- svn:sync-xref-src-repo-rev:
- 161558
- Location:
- trunk/src/VBox/VMM
- Files:
-
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/VMM/VMMAll/IEMAllAImpl.asm
r103265 r103267 4473 4473 IEMIMPL_SHIFT_OPT_F3 vpsraw 4474 4474 IEMIMPL_SHIFT_OPT_F3 vpsrad 4475 IEMIMPL_SHIFT_OPT_F3 vpsrlw 4476 IEMIMPL_SHIFT_OPT_F3 vpsrld 4477 IEMIMPL_SHIFT_OPT_F3 vpsrlq 4475 4478 4476 4479 -
trunk/src/VBox/VMM/VMMAll/IEMAllAImplC.cpp
r103265 r103267 10130 10130 #endif 10131 10131 10132 IEM_DECL_IMPL_DEF(void, iemAImpl_vpsrlw_imm_u128_fallback,(PRTUINT128U puDst, PCRTUINT128U puSrc1, uint8_t uShift)) 10133 { 10134 RTUINT128U uSrc1 = *puSrc1; 10135 10136 if (uShift <= 15) 10137 { 10138 puDst->au16[0] = uSrc1.au16[0] >> uShift; 10139 puDst->au16[1] = uSrc1.au16[1] >> uShift; 10140 puDst->au16[2] = uSrc1.au16[2] >> uShift; 10141 puDst->au16[3] = uSrc1.au16[3] >> uShift; 10142 puDst->au16[4] = uSrc1.au16[4] >> uShift; 10143 puDst->au16[5] = uSrc1.au16[5] >> uShift; 10144 puDst->au16[6] = uSrc1.au16[6] >> uShift; 10145 puDst->au16[7] = uSrc1.au16[7] >> uShift; 10146 } 10147 else 10148 { 10149 puDst->au64[0] = 0; 10150 puDst->au64[1] = 0; 10151 } 10152 } 10153 10154 IEM_DECL_IMPL_DEF(void, iemAImpl_vpsrlw_u128_fallback,(PRTUINT128U puDst, PCRTUINT128U puSrc1, PCRTUINT128U puSrc2)) 10155 { 10156 iemAImpl_vpsrlw_imm_u128_fallback(puDst, puSrc1, RT_MIN(15, puSrc2->au64[0])); 10157 } 10158 10159 IEM_DECL_IMPL_DEF(void, iemAImpl_vpsrlw_imm_u128,(PRTUINT128U puDst, PCRTUINT128U puSrc1, uint8_t uShift)) 10160 { 10161 iemAImpl_vpsrlw_imm_u128_fallback(puDst, puSrc1, uShift); 10162 } 10163 10164 IEM_DECL_IMPL_DEF(void, iemAImpl_vpsrlw_imm_u256_fallback,(PRTUINT256U puDst, PCRTUINT256U puSrc1, uint8_t uShift)) 10165 { 10166 RTUINT256U uSrc1 = *puSrc1; 10167 10168 if (uShift <= 15) 10169 { 10170 puDst->au16[0] = uSrc1.au16[0] >> uShift; 10171 puDst->au16[1] = uSrc1.au16[1] >> uShift; 10172 puDst->au16[2] = uSrc1.au16[2] >> uShift; 10173 puDst->au16[3] = uSrc1.au16[3] >> uShift; 10174 puDst->au16[4] = uSrc1.au16[4] >> uShift; 10175 puDst->au16[5] = uSrc1.au16[5] >> uShift; 10176 puDst->au16[6] = uSrc1.au16[6] >> uShift; 10177 puDst->au16[7] = uSrc1.au16[7] >> uShift; 10178 puDst->au16[8] = uSrc1.au16[8] >> uShift; 10179 puDst->au16[9] = uSrc1.au16[9] >> uShift; 10180 puDst->au16[10] = uSrc1.au16[10] >> uShift; 10181 puDst->au16[11] = uSrc1.au16[11] >> uShift; 10182 puDst->au16[12] = uSrc1.au16[12] >> uShift; 10183 puDst->au16[13] = uSrc1.au16[13] >> uShift; 10184 puDst->au16[14] = uSrc1.au16[14] >> uShift; 10185 puDst->au16[15] = uSrc1.au16[15] >> uShift; 10186 } 10187 else 10188 { 10189 puDst->au64[0] = 0; 10190 puDst->au64[1] = 0; 10191 puDst->au64[2] = 0; 10192 puDst->au64[3] = 0; 10193 } 10194 } 10195 10196 IEM_DECL_IMPL_DEF(void, iemAImpl_vpsrlw_imm_u256,(PRTUINT256U puDst, PCRTUINT256U puSrc1, uint8_t uShift)) 10197 { 10198 iemAImpl_vpsrlw_imm_u256_fallback(puDst, puSrc1, uShift); 10199 } 10200 10201 IEM_DECL_IMPL_DEF(void, iemAImpl_vpsrlw_u256_fallback,(PRTUINT256U puDst, PCRTUINT256U puSrc1, PCRTUINT256U puSrc2)) 10202 { 10203 iemAImpl_vpsrlw_imm_u256_fallback(puDst, puSrc1, RT_MIN(15, puSrc2->au64[0])); 10204 } 10205 10132 10206 10133 10207 /* … … 10512 10586 #endif 10513 10587 10588 IEM_DECL_IMPL_DEF(void, iemAImpl_vpsrld_imm_u128_fallback,(PRTUINT128U puDst, PCRTUINT128U puSrc1, uint8_t uShift)) 10589 { 10590 RTUINT128U uSrc1 = *puSrc1; 10591 10592 if (uShift <= 31) 10593 { 10594 puDst->au32[0] = uSrc1.au32[0] >> uShift; 10595 puDst->au32[1] = uSrc1.au32[1] >> uShift; 10596 puDst->au32[2] = uSrc1.au32[2] >> uShift; 10597 puDst->au32[3] = uSrc1.au32[3] >> uShift; 10598 } 10599 else 10600 { 10601 puDst->au64[0] = 0; 10602 puDst->au64[1] = 0; 10603 } 10604 } 10605 10606 IEM_DECL_IMPL_DEF(void, iemAImpl_vpsrld_imm_u128,(PRTUINT128U puDst, PCRTUINT128U puSrc1, uint8_t uShift)) 10607 { 10608 iemAImpl_vpsrld_imm_u128_fallback(puDst, puSrc1, uShift); 10609 } 10610 10611 IEM_DECL_IMPL_DEF(void, iemAImpl_vpsrld_u128_fallback,(PRTUINT128U puDst, PCRTUINT128U puSrc1, PCRTUINT128U puSrc2)) 10612 { 10613 iemAImpl_vpsrld_imm_u128_fallback(puDst, puSrc1, RT_MIN(31, puSrc2->au64[0])); 10614 } 10615 10616 IEM_DECL_IMPL_DEF(void, iemAImpl_vpsrld_imm_u256_fallback,(PRTUINT256U puDst, PCRTUINT256U puSrc1, uint8_t uShift)) 10617 { 10618 RTUINT256U uSrc1 = *puSrc1; 10619 10620 if (uShift <= 31) 10621 { 10622 puDst->au32[0] = uSrc1.au32[0] >> uShift; 10623 puDst->au32[1] = uSrc1.au32[1] >> uShift; 10624 puDst->au32[2] = uSrc1.au32[2] >> uShift; 10625 puDst->au32[3] = uSrc1.au32[3] >> uShift; 10626 puDst->au32[4] = uSrc1.au32[4] >> uShift; 10627 puDst->au32[5] = uSrc1.au32[5] >> uShift; 10628 puDst->au32[6] = uSrc1.au32[6] >> uShift; 10629 puDst->au32[7] = uSrc1.au32[7] >> uShift; 10630 } 10631 else 10632 { 10633 puDst->au64[0] = 0; 10634 puDst->au64[1] = 0; 10635 puDst->au64[2] = 0; 10636 puDst->au64[3] = 0; 10637 } 10638 } 10639 10640 IEM_DECL_IMPL_DEF(void, iemAImpl_vpsrld_u256_fallback,(PRTUINT256U puDst, PCRTUINT256U puSrc1, PCRTUINT256U puSrc2)) 10641 { 10642 iemAImpl_vpsrld_imm_u256_fallback(puDst, puSrc1, RT_MIN(31, puSrc2->au64[0])); 10643 } 10644 10645 IEM_DECL_IMPL_DEF(void, iemAImpl_vpsrld_imm_u256,(PRTUINT256U puDst, PCRTUINT256U puSrc1, uint8_t uShift)) 10646 { 10647 iemAImpl_vpsrld_imm_u256_fallback(puDst, puSrc1, uShift); 10648 } 10649 10514 10650 10515 10651 /* … … 10840 10976 10841 10977 #endif 10978 10979 IEM_DECL_IMPL_DEF(void, iemAImpl_vpsrlq_imm_u128_fallback,(PRTUINT128U puDst, PCRTUINT128U puSrc1, uint8_t uShift)) 10980 { 10981 RTUINT128U uSrc1 = *puSrc1; 10982 10983 if (uShift <= 63) 10984 { 10985 puDst->au64[0] = uSrc1.au64[0] >> uShift; 10986 puDst->au64[1] = uSrc1.au64[1] >> uShift; 10987 } 10988 else 10989 { 10990 puDst->au64[0] = 0; 10991 puDst->au64[1] = 0; 10992 } 10993 } 10994 10995 IEM_DECL_IMPL_DEF(void, iemAImpl_vpsrlq_imm_u128,(PRTUINT128U puDst, PCRTUINT128U puSrc1, uint8_t uShift)) 10996 { 10997 iemAImpl_vpsrlq_imm_u128_fallback(puDst, puSrc1, uShift); 10998 } 10999 11000 IEM_DECL_IMPL_DEF(void, iemAImpl_vpsrlq_u128_fallback,(PRTUINT128U puDst, PCRTUINT128U puSrc1, PCRTUINT128U puSrc2)) 11001 { 11002 iemAImpl_vpsrlq_imm_u128_fallback(puDst, puSrc1, RT_MIN(31, puSrc2->au64[0])); 11003 } 11004 11005 IEM_DECL_IMPL_DEF(void, iemAImpl_vpsrlq_imm_u256_fallback,(PRTUINT256U puDst, PCRTUINT256U puSrc1, uint8_t uShift)) 11006 { 11007 RTUINT256U uSrc1 = *puSrc1; 11008 11009 if (uShift <= 63) 11010 { 11011 puDst->au64[0] = uSrc1.au64[0] >> uShift; 11012 puDst->au64[1] = uSrc1.au64[1] >> uShift; 11013 puDst->au64[2] = uSrc1.au64[2] >> uShift; 11014 puDst->au64[3] = uSrc1.au64[3] >> uShift; 11015 } 11016 else 11017 { 11018 puDst->au64[0] = 0; 11019 puDst->au64[1] = 0; 11020 puDst->au64[2] = 0; 11021 puDst->au64[3] = 0; 11022 } 11023 } 11024 11025 IEM_DECL_IMPL_DEF(void, iemAImpl_vpsrlq_u256_fallback,(PRTUINT256U puDst, PCRTUINT256U puSrc1, PCRTUINT256U puSrc2)) 11026 { 11027 iemAImpl_vpsrlq_imm_u256_fallback(puDst, puSrc1, RT_MIN(31, puSrc2->au64[0])); 11028 } 11029 11030 IEM_DECL_IMPL_DEF(void, iemAImpl_vpsrlq_imm_u256,(PRTUINT256U puDst, PCRTUINT256U puSrc1, uint8_t uShift)) 11031 { 11032 iemAImpl_vpsrlq_imm_u256_fallback(puDst, puSrc1, uShift); 11033 } 10842 11034 10843 11035 -
trunk/src/VBox/VMM/VMMAll/IEMAllInstVexMap1.cpp.h
r103265 r103267 3637 3637 /* Opcode VEX.0F 0x71 11/2 - invalid. */ 3638 3638 /** Opcode VEX.66.0F 0x71 11/2. */ 3639 FNIEMOP_STUB_1(iemOp_VGrp12_vpsrlw_Hx_Ux_Ib, uint8_t, bRm); 3639 FNIEMOP_DEF_1(iemOp_VGrp12_vpsrlw_Hx_Ux_Ib, uint8_t, bRm) 3640 { 3641 IEMOP_MNEMONIC3(VEX_VMI_REG, VPSRLW, vpsrlw, Hx, Ux, Ib, DISOPTYPE_HARMLESS | DISOPTYPE_X86_AVX, 0); 3642 if (pVCpu->iem.s.uVexLength) 3643 { 3644 return FNIEMOP_CALL_2(iemOpCommonAvxAvx2_Hx_Ux_Ib_u256, bRm, 3645 IEM_SELECT_HOST_OR_FALLBACK(fAvx2, iemAImpl_vpsrlw_imm_u256, iemAImpl_vpsrlw_imm_u256_fallback)); 3646 } 3647 else 3648 { 3649 return FNIEMOP_CALL_2(iemOpCommonAvxAvx2_Hx_Ux_Ib_u128, bRm, 3650 IEM_SELECT_HOST_OR_FALLBACK(fAvx2, iemAImpl_vpsrlw_imm_u128, iemAImpl_vpsrlw_imm_u128_fallback)); 3651 } 3652 } 3653 3640 3654 3641 3655 /* Opcode VEX.0F 0x71 11/4 - invalid */ … … 3706 3720 /* Opcode VEX.0F 0x72 11/2 - invalid. */ 3707 3721 /** Opcode VEX.66.0F 0x72 11/2. */ 3708 FNIEMOP_STUB_1(iemOp_VGrp13_vpsrld_Hx_Ux_Ib, uint8_t, bRm); 3722 FNIEMOP_DEF_1(iemOp_VGrp13_vpsrld_Hx_Ux_Ib, uint8_t, bRm) 3723 { 3724 IEMOP_MNEMONIC3(VEX_VMI_REG, VPSRLD, vpsrld, Hx, Ux, Ib, DISOPTYPE_HARMLESS | DISOPTYPE_X86_AVX, 0); 3725 if (pVCpu->iem.s.uVexLength) 3726 { 3727 return FNIEMOP_CALL_2(iemOpCommonAvxAvx2_Hx_Ux_Ib_u256, bRm, 3728 IEM_SELECT_HOST_OR_FALLBACK(fAvx2, iemAImpl_vpsrld_imm_u256, iemAImpl_vpsrld_imm_u256_fallback)); 3729 } 3730 else 3731 { 3732 return FNIEMOP_CALL_2(iemOpCommonAvxAvx2_Hx_Ux_Ib_u128, bRm, 3733 IEM_SELECT_HOST_OR_FALLBACK(fAvx2, iemAImpl_vpsrld_imm_u128, iemAImpl_vpsrld_imm_u128_fallback)); 3734 } 3735 } 3736 3709 3737 3710 3738 /* Opcode VEX.0F 0x72 11/4 - invalid. */ … … 3774 3802 /* Opcode VEX.0F 0x73 11/2 - invalid. */ 3775 3803 /** Opcode VEX.66.0F 0x73 11/2. */ 3776 FNIEMOP_STUB_1(iemOp_VGrp14_vpsrlq_Hx_Ux_Ib, uint8_t, bRm); 3804 FNIEMOP_DEF_1(iemOp_VGrp14_vpsrlq_Hx_Ux_Ib, uint8_t, bRm) 3805 { 3806 IEMOP_MNEMONIC3(VEX_VMI_REG, VPSRLQ, vpsrlq, Hx, Ux, Ib, DISOPTYPE_HARMLESS | DISOPTYPE_X86_AVX, 0); 3807 if (pVCpu->iem.s.uVexLength) 3808 { 3809 return FNIEMOP_CALL_2(iemOpCommonAvxAvx2_Hx_Ux_Ib_u256, bRm, 3810 IEM_SELECT_HOST_OR_FALLBACK(fAvx2, iemAImpl_vpsrlq_imm_u256, iemAImpl_vpsrlq_imm_u256_fallback)); 3811 } 3812 else 3813 { 3814 return FNIEMOP_CALL_2(iemOpCommonAvxAvx2_Hx_Ux_Ib_u128, bRm, 3815 IEM_SELECT_HOST_OR_FALLBACK(fAvx2, iemAImpl_vpsrlq_imm_u128, iemAImpl_vpsrlq_imm_u128_fallback)); 3816 } 3817 } 3818 3777 3819 3778 3820 /** Opcode VEX.66.0F 0x73 11/3. */ … … 4790 4832 /* Opcode VEX.0F 0xd1 - invalid */ 4791 4833 /** Opcode VEX.66.0F 0xd1 - vpsrlw Vx, Hx, W */ 4792 FNIEMOP_STUB(iemOp_vpsrlw_Vx_Hx_W); 4834 FNIEMOP_DEF(iemOp_vpsrlw_Vx_Hx_W) 4835 { 4836 IEMOP_MNEMONIC3(VEX_RVM, VPSRLW, vpsrlw, Vx, Hx, Wx, DISOPTYPE_HARMLESS | DISOPTYPE_X86_AVX, 0); 4837 IEMOPMEDIAOPTF3_INIT_VARS(vpsrlw); 4838 return FNIEMOP_CALL_1(iemOpCommonAvxAvx2_Vx_Hx_Wx_Opt, IEM_SELECT_HOST_OR_FALLBACK(fAvx2, &s_Host, &s_Fallback)); 4839 } 4840 4793 4841 /* Opcode VEX.F3.0F 0xd1 - invalid */ 4794 4842 /* Opcode VEX.F2.0F 0xd1 - invalid */ … … 4796 4844 /* Opcode VEX.0F 0xd2 - invalid */ 4797 4845 /** Opcode VEX.66.0F 0xd2 - vpsrld Vx, Hx, Wx */ 4798 FNIEMOP_STUB(iemOp_vpsrld_Vx_Hx_Wx); 4846 FNIEMOP_DEF(iemOp_vpsrld_Vx_Hx_Wx) 4847 { 4848 IEMOP_MNEMONIC3(VEX_RVM, VPSRLD, vpsrld, Vx, Hx, Wx, DISOPTYPE_HARMLESS | DISOPTYPE_X86_AVX, 0); 4849 IEMOPMEDIAOPTF3_INIT_VARS(vpsrld); 4850 return FNIEMOP_CALL_1(iemOpCommonAvxAvx2_Vx_Hx_Wx_Opt, IEM_SELECT_HOST_OR_FALLBACK(fAvx2, &s_Host, &s_Fallback)); 4851 } 4852 4799 4853 /* Opcode VEX.F3.0F 0xd2 - invalid */ 4800 4854 /* Opcode VEX.F2.0F 0xd2 - invalid */ … … 4802 4856 /* Opcode VEX.0F 0xd3 - invalid */ 4803 4857 /** Opcode VEX.66.0F 0xd3 - vpsrlq Vx, Hx, Wx */ 4804 FNIEMOP_STUB(iemOp_vpsrlq_Vx_Hx_Wx); 4858 FNIEMOP_DEF(iemOp_vpsrlq_Vx_Hx_Wx) 4859 { 4860 IEMOP_MNEMONIC3(VEX_RVM, VPSRLQ, vpsrlq, Vx, Hx, Wx, DISOPTYPE_HARMLESS | DISOPTYPE_X86_AVX, 0); 4861 IEMOPMEDIAOPTF3_INIT_VARS(vpsrlq); 4862 return FNIEMOP_CALL_1(iemOpCommonAvxAvx2_Vx_Hx_Wx_Opt, IEM_SELECT_HOST_OR_FALLBACK(fAvx2, &s_Host, &s_Fallback)); 4863 } 4864 4805 4865 /* Opcode VEX.F3.0F 0xd3 - invalid */ 4806 4866 /* Opcode VEX.F2.0F 0xd3 - invalid */ -
trunk/src/VBox/VMM/include/IEMInternal.h
r103265 r103267 3153 3153 FNIEMAIMPLMEDIAOPTF3U128 iemAImpl_vpsraw_u128, iemAImpl_vpsraw_u128_fallback; 3154 3154 FNIEMAIMPLMEDIAOPTF3U128 iemAImpl_vpsrad_u128, iemAImpl_vpsrad_u128_fallback; 3155 FNIEMAIMPLMEDIAOPTF3U128 iemAImpl_vpsrlw_u128, iemAImpl_vpsrlw_u128_fallback; 3156 FNIEMAIMPLMEDIAOPTF3U128 iemAImpl_vpsrld_u128, iemAImpl_vpsrld_u128_fallback; 3157 FNIEMAIMPLMEDIAOPTF3U128 iemAImpl_vpsrlq_u128, iemAImpl_vpsrlq_u128_fallback; 3155 3158 3156 3159 FNIEMAIMPLMEDIAOPTF2U128 iemAImpl_vpabsb_u128, iemAImpl_vpabsb_u128_fallback; … … 3229 3232 FNIEMAIMPLMEDIAOPTF3U256 iemAImpl_vpsraw_u256, iemAImpl_vpsraw_u256_fallback; 3230 3233 FNIEMAIMPLMEDIAOPTF3U256 iemAImpl_vpsrad_u256, iemAImpl_vpsrad_u256_fallback; 3234 FNIEMAIMPLMEDIAOPTF3U256 iemAImpl_vpsrlw_u256, iemAImpl_vpsrlw_u256_fallback; 3235 FNIEMAIMPLMEDIAOPTF3U256 iemAImpl_vpsrld_u256, iemAImpl_vpsrld_u256_fallback; 3236 FNIEMAIMPLMEDIAOPTF3U256 iemAImpl_vpsrlq_u256, iemAImpl_vpsrlq_u256_fallback; 3231 3237 3232 3238 FNIEMAIMPLMEDIAOPTF2U256 iemAImpl_vpabsb_u256, iemAImpl_vpabsb_u256_fallback; … … 3564 3570 FNIEMAIMPLMEDIAPSHUFU128 iemAImpl_vpsrad_imm_u128, iemAImpl_vpsrad_imm_u128_fallback; 3565 3571 FNIEMAIMPLMEDIAPSHUFU256 iemAImpl_vpsrad_imm_u256, iemAImpl_vpsrad_imm_u256_fallback; 3572 3573 FNIEMAIMPLMEDIAPSHUFU128 iemAImpl_vpsrlw_imm_u128, iemAImpl_vpsrlw_imm_u128_fallback; 3574 FNIEMAIMPLMEDIAPSHUFU256 iemAImpl_vpsrlw_imm_u256, iemAImpl_vpsrlw_imm_u256_fallback; 3575 FNIEMAIMPLMEDIAPSHUFU128 iemAImpl_vpsrld_imm_u128, iemAImpl_vpsrld_imm_u128_fallback; 3576 FNIEMAIMPLMEDIAPSHUFU256 iemAImpl_vpsrld_imm_u256, iemAImpl_vpsrld_imm_u256_fallback; 3577 FNIEMAIMPLMEDIAPSHUFU128 iemAImpl_vpsrlq_imm_u128, iemAImpl_vpsrlq_imm_u128_fallback; 3578 FNIEMAIMPLMEDIAPSHUFU256 iemAImpl_vpsrlq_imm_u256, iemAImpl_vpsrlq_imm_u256_fallback; 3566 3579 /** @} */ 3567 3580
Note:
See TracChangeset
for help on using the changeset viewer.