- Timestamp:
- Feb 24, 2024 11:06:53 AM (7 months ago)
- Location:
- trunk/src/VBox/VMM
- Files:
-
- 5 edited
-
VMMAll/IEMAllAImpl.asm (modified) (2 diffs)
-
VMMAll/IEMAllAImplC.cpp (modified) (1 diff)
-
VMMAll/IEMAllInstVexMap2.cpp.h (modified) (1 diff)
-
VMMAll/IEMAllInstVexMap3.cpp.h (modified) (1 diff)
-
include/IEMInternal.h (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/VMM/VMMAll/IEMAllAImpl.asm
r103556 r103558 4427 4427 IEMIMPL_MEDIA_OPT_F3 vpaddsw 4428 4428 IEMIMPL_MEDIA_OPT_F3 vpermilps 4429 IEMIMPL_MEDIA_OPT_F3 vpermilpd 4429 4430 4430 4431 ;; … … 5588 5589 5589 5590 IEMIMPL_MEDIA_AVX_INSN_IMM8_2OP_6 vpermilps, 1, 1 5591 IEMIMPL_MEDIA_AVX_INSN_IMM8_2OP_6 vpermilpd, 1, 1 5590 5592 5591 5593 -
trunk/src/VBox/VMM/VMMAll/IEMAllAImplC.cpp
r103556 r103558 17111 17111 17112 17112 17113 /** 17114 * VPERMILPD 17115 */ 17116 #ifdef IEM_WITHOUT_ASSEMBLY 17117 IEM_DECL_IMPL_DEF(void, iemAImpl_vpermilpd_imm_u128,(PRTUINT128U puDst, PCRTUINT128U puSrc, uint8_t bEvil)) 17118 { 17119 RTUINT128U const uSrc = *puSrc; 17120 ASMCompilerBarrier(); 17121 17122 puDst->au64[0] = uSrc.au64[bEvil & 0x1]; 17123 puDst->au64[1] = uSrc.au64[(bEvil >> 1) & 0x1]; 17124 } 17125 17126 17127 IEM_DECL_IMPL_DEF(void, iemAImpl_vpermilpd_imm_u256,(PRTUINT256U puDst, PCRTUINT256U puSrc, uint8_t bEvil)) 17128 { 17129 RTUINT256U const uSrc = *puSrc; 17130 ASMCompilerBarrier(); 17131 17132 puDst->au64[0] = uSrc.au64[bEvil & 0x1]; 17133 puDst->au64[1] = uSrc.au64[(bEvil >> 1) & 0x1]; 17134 17135 puDst->au64[2] = uSrc.au64[2 + ((bEvil >> 2) & 0x1)]; 17136 puDst->au64[3] = uSrc.au64[2 + ((bEvil >> 3) & 0x1)]; 17137 } 17138 17139 IEM_DECL_IMPL_DEF(void, iemAImpl_vpermilpd_u128,(PRTUINT128U puDst, PCRTUINT128U puSrc1, PCRTUINT128U puSrc2)) 17140 { 17141 RTUINT128U const uSrc1 = *puSrc1; 17142 RTUINT128U const uSrc2 = *puSrc2; 17143 ASMCompilerBarrier(); 17144 17145 puDst->au64[0] = uSrc1.au64[(uSrc2.au8[0] & 0x2) >> 1]; 17146 puDst->au64[1] = uSrc1.au64[(uSrc2.au8[8] & 0x2) >> 1]; 17147 } 17148 17149 IEM_DECL_IMPL_DEF(void, iemAImpl_vpermilpd_u256,(PRTUINT256U puDst, PCRTUINT256U puSrc1, PCRTUINT256U puSrc2)) 17150 { 17151 RTUINT256U const uSrc1 = *puSrc1; 17152 RTUINT256U const uSrc2 = *puSrc2; 17153 ASMCompilerBarrier(); 17154 17155 puDst->au64[0] = uSrc1.au64[(uSrc2.au8[0] & 0x2) >> 1]; 17156 puDst->au64[1] = uSrc1.au64[(uSrc2.au8[8] & 0x2) >> 1]; 17157 17158 puDst->au64[2] = uSrc1.au64[2 + ((uSrc2.au8[16] & 0x2) >> 1)]; 17159 puDst->au64[3] = uSrc1.au64[2 + ((uSrc2.au8[24] & 0x2) >> 1)]; 17160 } 17161 #endif 17162 17163 17164 IEM_DECL_IMPL_DEF(void, iemAImpl_vpermilpd_imm_u128_fallback,(PRTUINT128U puDst, PCRTUINT128U puSrc, uint8_t bEvil)) 17165 { 17166 RTUINT128U const uSrc = *puSrc; 17167 ASMCompilerBarrier(); 17168 17169 puDst->au64[0] = uSrc.au64[bEvil & 0x1]; 17170 puDst->au64[1] = uSrc.au64[(bEvil >> 1) & 0x1]; 17171 } 17172 17173 17174 IEM_DECL_IMPL_DEF(void, iemAImpl_vpermilpd_imm_u256_fallback,(PRTUINT256U puDst, PCRTUINT256U puSrc, uint8_t bEvil)) 17175 { 17176 RTUINT256U const uSrc = *puSrc; 17177 ASMCompilerBarrier(); 17178 17179 puDst->au64[0] = uSrc.au64[bEvil & 0x1]; 17180 puDst->au64[1] = uSrc.au64[(bEvil >> 1) & 0x1]; 17181 17182 puDst->au64[2] = uSrc.au64[2 + ((bEvil >> 2) & 0x1)]; 17183 puDst->au64[3] = uSrc.au64[2 + ((bEvil >> 3) & 0x1)]; 17184 } 17185 17186 IEM_DECL_IMPL_DEF(void, iemAImpl_vpermilpd_u128_fallback,(PRTUINT128U puDst, PCRTUINT128U puSrc1, PCRTUINT128U puSrc2)) 17187 { 17188 RTUINT128U const uSrc1 = *puSrc1; 17189 RTUINT128U const uSrc2 = *puSrc2; 17190 ASMCompilerBarrier(); 17191 17192 puDst->au64[0] = uSrc1.au64[(uSrc2.au8[0] & 0x2) >> 1]; 17193 puDst->au64[1] = uSrc1.au64[(uSrc2.au8[8] & 0x2) >> 1]; 17194 } 17195 17196 IEM_DECL_IMPL_DEF(void, iemAImpl_vpermilpd_u256_fallback,(PRTUINT256U puDst, PCRTUINT256U puSrc1, PCRTUINT256U puSrc2)) 17197 { 17198 RTUINT256U const uSrc1 = *puSrc1; 17199 RTUINT256U const uSrc2 = *puSrc2; 17200 ASMCompilerBarrier(); 17201 17202 puDst->au64[0] = uSrc1.au64[(uSrc2.au8[0] & 0x2) >> 1]; 17203 puDst->au64[1] = uSrc1.au64[(uSrc2.au8[8] & 0x2) >> 1]; 17204 17205 puDst->au64[2] = uSrc1.au64[2 + ((uSrc2.au8[16] & 0x2) >> 1)]; 17206 puDst->au64[3] = uSrc1.au64[2 + ((uSrc2.au8[24] & 0x2) >> 1)]; 17207 } 17208 17209 17113 17210 /* 17114 17211 * [V]PBLENDVB -
trunk/src/VBox/VMM/VMMAll/IEMAllInstVexMap2.cpp.h
r103556 r103558 192 192 193 193 /* Opcode VEX.0F38 0x0d - invalid. */ 194 /** Opcode VEX.66.0F38 0x0d. */ 195 FNIEMOP_STUB(iemOp_vpermilpd_Vx_Hx_Wx); 194 195 196 /** Opcode VEX.66.0F38 0x0d. 197 * AVX,AVX */ 198 FNIEMOP_DEF(iemOp_vpermilpd_Vx_Hx_Wx) 199 { 200 IEMOP_MNEMONIC3(VEX_RVM, VPERMILPD, vpermilpd, Vx, Hx, Wx, DISOPTYPE_HARMLESS, 0); /* @todo */ 201 IEMOPMEDIAOPTF3_INIT_VARS(vpermilpd); 202 return FNIEMOP_CALL_1(iemOpCommonAvxAvx2_Vx_Hx_Wx_Opt, IEM_SELECT_HOST_OR_FALLBACK(fAvx2, &s_Host, &s_Fallback)); 203 } 204 205 196 206 /* Opcode VEX.0F38 0x0e - invalid. */ 197 207 /** Opcode VEX.66.0F38 0x0e. */ -
trunk/src/VBox/VMM/VMMAll/IEMAllInstVexMap3.cpp.h
r103556 r103558 395 395 396 396 397 /** Opcode VEX.66.0F3A 0x05. */ 398 FNIEMOP_STUB(iemOp_vpermilpd_Vx_Wx_Ib); 397 /** Opcode VEX.66.0F3A 0x05. 398 * AVX,AVX */ 399 FNIEMOP_DEF(iemOp_vpermilpd_Vx_Wx_Ib) 400 { 401 IEMOP_MNEMONIC3(VEX_RMI, VPERMILPD, vpermilpd, Vx, Wx, Ib, DISOPTYPE_HARMLESS, 0); /* @todo */ 402 IEMOPMEDIAOPTF2IMM8_INIT_VARS(vpermilpd); 403 return FNIEMOP_CALL_1(iemOpCommonAvxAvx_Vx_Wx_Ib_Opt, IEM_SELECT_HOST_OR_FALLBACK(fAvx, &s_Host, &s_Fallback)); 404 } 399 405 400 406 -
trunk/src/VBox/VMM/include/IEMInternal.h
r103556 r103558 3649 3649 FNIEMAIMPLMEDIAOPTF3U256 iemAImpl_vpermilps_u256, iemAImpl_vpermilps_u256_fallback; 3650 3650 FNIEMAIMPLMEDIAOPTF2U256IMM8 iemAImpl_vpermilps_imm_u256, iemAImpl_vpermilps_imm_u256_fallback; 3651 3652 FNIEMAIMPLMEDIAOPTF3U128 iemAImpl_vpermilpd_u128, iemAImpl_vpermilpd_u128_fallback; 3653 FNIEMAIMPLMEDIAOPTF2U128IMM8 iemAImpl_vpermilpd_imm_u128, iemAImpl_vpermilpd_imm_u128_fallback; 3654 FNIEMAIMPLMEDIAOPTF3U256 iemAImpl_vpermilpd_u256, iemAImpl_vpermilpd_u256_fallback; 3655 FNIEMAIMPLMEDIAOPTF2U256IMM8 iemAImpl_vpermilpd_imm_u256, iemAImpl_vpermilpd_imm_u256_fallback; 3651 3656 /** @} */ 3652 3657
Note:
See TracChangeset
for help on using the changeset viewer.

