VirtualBox

Changeset 103696 in vbox


Ignore:
Timestamp:
Mar 6, 2024 7:13:30 AM (13 months ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
162063
Message:

VMM/IEM: Implement vpmaddwd instruction dispatch & emulation, bugref:9898

Location:
trunk/src/VBox/VMM
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/VMM/VMMAll/IEMAllAImpl.asm

    r103558 r103696  
    44284428IEMIMPL_MEDIA_OPT_F3 vpermilps
    44294429IEMIMPL_MEDIA_OPT_F3 vpermilpd
     4430IEMIMPL_MEDIA_OPT_F3 vpmaddwd
    44304431
    44314432;;
  • trunk/src/VBox/VMM/VMMAll/IEMAllAImplC.cpp

    r103691 r103696  
    1125311253
    1125411254
     11255IEM_DECL_IMPL_DEF(void, iemAImpl_pmaddwd_u64_fallback,(PCX86FXSTATE pFpuState, uint64_t *puDst, uint64_t const *puSrc))
     11256{
     11257    RTUINT64U uSrc1 = { *puDst };
     11258    RTUINT64U uSrc2 = { *puSrc };
     11259    RTUINT64U uDst;
     11260
     11261    uDst.ai32[0] = (int32_t)uSrc1.ai16[0] * uSrc2.ai16[0] + (int32_t)uSrc1.ai16[1] * uSrc2.ai16[1];
     11262    uDst.ai32[1] = (int32_t)uSrc1.ai16[2] * uSrc2.ai16[2] + (int32_t)uSrc1.ai16[3] * uSrc2.ai16[3];
     11263    *puDst = uDst.u;
     11264    RT_NOREF(pFpuState);
     11265}
     11266
     11267
     11268IEM_DECL_IMPL_DEF(void, iemAImpl_pmaddwd_u128_fallback,(PCX86FXSTATE pFpuState, PRTUINT128U puDst, PCRTUINT128U puSrc))
     11269{
     11270    RTUINT128U uSrc1 = *puDst;
     11271
     11272    puDst->ai32[0] = (int32_t)uSrc1.ai16[0] * puSrc->ai16[0] + (int32_t)uSrc1.ai16[1] * puSrc->ai16[1];
     11273    puDst->ai32[1] = (int32_t)uSrc1.ai16[2] * puSrc->ai16[2] + (int32_t)uSrc1.ai16[3] * puSrc->ai16[3];
     11274    puDst->ai32[2] = (int32_t)uSrc1.ai16[4] * puSrc->ai16[4] + (int32_t)uSrc1.ai16[5] * puSrc->ai16[5];
     11275    puDst->ai32[3] = (int32_t)uSrc1.ai16[6] * puSrc->ai16[6] + (int32_t)uSrc1.ai16[7] * puSrc->ai16[7];
     11276    RT_NOREF(pFpuState);
     11277}
     11278
     11279
     11280IEM_DECL_IMPL_DEF(void, iemAImpl_vpmaddwd_u128_fallback,(PRTUINT128U puDst, PCRTUINT128U puSrc1, PCRTUINT128U puSrc2))
     11281{
     11282    puDst->ai32[0] = (int32_t)puSrc1->ai16[0] * puSrc2->ai16[0] + (int32_t)puSrc1->ai16[1] * puSrc2->ai16[1];
     11283    puDst->ai32[1] = (int32_t)puSrc1->ai16[2] * puSrc2->ai16[2] + (int32_t)puSrc1->ai16[3] * puSrc2->ai16[3];
     11284    puDst->ai32[2] = (int32_t)puSrc1->ai16[4] * puSrc2->ai16[4] + (int32_t)puSrc1->ai16[5] * puSrc2->ai16[5];
     11285    puDst->ai32[3] = (int32_t)puSrc1->ai16[6] * puSrc2->ai16[6] + (int32_t)puSrc1->ai16[7] * puSrc2->ai16[7];
     11286}
     11287
     11288
     11289IEM_DECL_IMPL_DEF(void, iemAImpl_vpmaddwd_u256_fallback,(PRTUINT256U puDst, PCRTUINT256U puSrc1, PCRTUINT256U puSrc2))
     11290{
     11291    puDst->ai32[0] = (int32_t)puSrc1->ai16[0] * puSrc2->ai16[0] + (int32_t)puSrc1->ai16[1] * puSrc2->ai16[1];
     11292    puDst->ai32[1] = (int32_t)puSrc1->ai16[2] * puSrc2->ai16[2] + (int32_t)puSrc1->ai16[3] * puSrc2->ai16[3];
     11293    puDst->ai32[2] = (int32_t)puSrc1->ai16[4] * puSrc2->ai16[4] + (int32_t)puSrc1->ai16[5] * puSrc2->ai16[5];
     11294    puDst->ai32[3] = (int32_t)puSrc1->ai16[6] * puSrc2->ai16[6] + (int32_t)puSrc1->ai16[7] * puSrc2->ai16[7];
     11295    puDst->ai32[4] = (int32_t)puSrc1->ai16[8] * puSrc2->ai16[8] + (int32_t)puSrc1->ai16[9] * puSrc2->ai16[9];
     11296    puDst->ai32[5] = (int32_t)puSrc1->ai16[10] * puSrc2->ai16[10] + (int32_t)puSrc1->ai16[11] * puSrc2->ai16[11];
     11297    puDst->ai32[6] = (int32_t)puSrc1->ai16[12] * puSrc2->ai16[12] + (int32_t)puSrc1->ai16[13] * puSrc2->ai16[13];
     11298    puDst->ai32[7] = (int32_t)puSrc1->ai16[14] * puSrc2->ai16[14] + (int32_t)puSrc1->ai16[15] * puSrc2->ai16[15];
     11299}
     11300
     11301
    1125511302/*
    1125611303 * PMAXUB / VPMAXUB / PMAXUW / VPMAXUW / PMAXUD / VPMAXUD
  • trunk/src/VBox/VMM/VMMAll/IEMAllInstVexMap1.cpp.h

    r103267 r103696  
    55225522
    55235523/*  Opcode VEX.0F 0xf5 - invalid */
     5524
     5525
    55245526/** Opcode VEX.66.0F 0xf5 - vpmaddwd Vx, Hx, Wx */
    5525 FNIEMOP_STUB(iemOp_vpmaddwd_Vx_Hx_Wx);
     5527FNIEMOP_DEF(iemOp_vpmaddwd_Vx_Hx_Wx)
     5528{
     5529    IEMOP_MNEMONIC3(VEX_RVM, VPMADDWD, vpmaddwd, Vx, Hx, Wx, DISOPTYPE_HARMLESS, 0);
     5530    IEMOPMEDIAOPTF3_INIT_VARS(vpmaddwd);
     5531    return FNIEMOP_CALL_1(iemOpCommonAvxAvx2_Vx_Hx_Wx_Opt, IEM_SELECT_HOST_OR_FALLBACK(fAvx2, &s_Host, &s_Fallback));
     5532}
     5533
     5534
    55265535/*  Opcode VEX.F2.0F 0xf5 - invalid */
    55275536
  • trunk/src/VBox/VMM/include/IEMInternal.h

    r103671 r103696  
    30923092FNIEMAIMPLMEDIAF2U64     iemAImpl_psubd_u64;
    30933093FNIEMAIMPLMEDIAF2U64     iemAImpl_psubq_u64;
    3094 FNIEMAIMPLMEDIAF2U64     iemAImpl_pmaddwd_u64;
     3094FNIEMAIMPLMEDIAF2U64     iemAImpl_pmaddwd_u64, iemAImpl_pmaddwd_u64_fallback;
    30953095FNIEMAIMPLMEDIAF2U64     iemAImpl_pmullw_u64, iemAImpl_pmulhw_u64;
    30963096FNIEMAIMPLMEDIAF2U64     iemAImpl_pminub_u64, iemAImpl_pmaxub_u64;
     
    31373137FNIEMAIMPLMEDIAF2U128    iemAImpl_pmulhw_u128;
    31383138FNIEMAIMPLMEDIAF2U128    iemAImpl_pmulld_u128, iemAImpl_pmulld_u128_fallback;
    3139 FNIEMAIMPLMEDIAF2U128    iemAImpl_pmaddwd_u128;
     3139FNIEMAIMPLMEDIAF2U128    iemAImpl_pmaddwd_u128, iemAImpl_pmaddwd_u128_fallback;
    31403140FNIEMAIMPLMEDIAF2U128    iemAImpl_pminub_u128;
    31413141FNIEMAIMPLMEDIAF2U128    iemAImpl_pminud_u128, iemAImpl_pminud_u128_fallback;
     
    31653165FNIEMAIMPLMEDIAF2U128    iemAImpl_pmulhrsw_u128, iemAImpl_pmulhrsw_u128_fallback;
    31663166FNIEMAIMPLMEDIAF2U128    iemAImpl_pmuludq_u128;
     3167FNIEMAIMPLMEDIAF2U128    iemAImpl_pmaddwd_u128, iemAImpl_pmaddwd_u128_fallback;
    31673168FNIEMAIMPLMEDIAOPTF2U128 iemAImpl_packsswb_u128, iemAImpl_packuswb_u128;
    31683169FNIEMAIMPLMEDIAOPTF2U128 iemAImpl_packssdw_u128, iemAImpl_packusdw_u128;
     
    32513252FNIEMAIMPLMEDIAOPTF3U128 iemAImpl_vpsrld_u128,     iemAImpl_vpsrld_u128_fallback;
    32523253FNIEMAIMPLMEDIAOPTF3U128 iemAImpl_vpsrlq_u128,     iemAImpl_vpsrlq_u128_fallback;
     3254FNIEMAIMPLMEDIAOPTF3U128 iemAImpl_vpmaddwd_u128, iemAImpl_vpmaddwd_u128_fallback;
    32533255
    32543256FNIEMAIMPLMEDIAOPTF2U128 iemAImpl_vpabsb_u128,     iemAImpl_vpabsb_u128_fallback;
     
    33303332FNIEMAIMPLMEDIAOPTF3U256 iemAImpl_vpsrld_u256,     iemAImpl_vpsrld_u256_fallback;
    33313333FNIEMAIMPLMEDIAOPTF3U256 iemAImpl_vpsrlq_u256,     iemAImpl_vpsrlq_u256_fallback;
     3334FNIEMAIMPLMEDIAOPTF3U256 iemAImpl_vpmaddwd_u256, iemAImpl_vpmaddwd_u256_fallback;
    33323335
    33333336FNIEMAIMPLMEDIAOPTF2U256 iemAImpl_vpabsb_u256,     iemAImpl_vpabsb_u256_fallback;
Note: See TracChangeset for help on using the changeset viewer.

© 2025 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette