VirtualBox

Changeset 96099 in vbox


Ignore:
Timestamp:
Aug 7, 2022 7:22:43 PM (3 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
152898
Message:

VMM/IEM: Implement [v]pmuldq instructions, bugref:9898

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

Legend:

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

    r96094 r96099  
    37173717IEMIMPL_MEDIA_OPT_F2 pavgw,    1
    37183718IEMIMPL_MEDIA_OPT_F2 psadbw,   1
     3719IEMIMPL_MEDIA_OPT_F2 pmuldq,   0
    37193720
    37203721
     
    42094210IEMIMPL_MEDIA_OPT_F3 vpmulhrsw
    42104211IEMIMPL_MEDIA_OPT_F3 vpsadbw
     4212IEMIMPL_MEDIA_OPT_F3 vpmuldq
    42114213
    42124214
  • trunk/src/VBox/VMM/VMMAll/IEMAllAImplC.cpp

    r96094 r96099  
    1316513165
    1316613166/*
     13167 * PMULDQ / VPMULDQ
     13168 */
     13169IEM_DECL_IMPL_DEF(void, iemAImpl_pmuldq_u128_fallback,(PRTUINT128U puDst, PCRTUINT128U puSrc))
     13170{
     13171    RTUINT128U uSrc1 = *puDst;
     13172
     13173    puDst->au64[0] = (int64_t)uSrc1.ai32[0] * puSrc->ai32[0];
     13174    puDst->au64[1] = (int64_t)uSrc1.ai32[2] * puSrc->ai32[2];
     13175}
     13176
     13177IEM_DECL_IMPL_DEF(void, iemAImpl_vpmuldq_u128_fallback,(PRTUINT128U puDst, PCRTUINT128U puSrc1, PCRTUINT128U puSrc2))
     13178{
     13179    RTUINT128U uSrc1 = *puSrc1;
     13180    RTUINT128U uSrc2 = *puSrc2;
     13181
     13182    puDst->au64[0] = (int64_t)uSrc1.ai32[0] * uSrc2.ai32[0];
     13183    puDst->au64[1] = (int64_t)uSrc1.ai32[2] * uSrc2.ai32[2];
     13184}
     13185
     13186IEM_DECL_IMPL_DEF(void, iemAImpl_vpmuldq_u256_fallback,(PRTUINT256U puDst, PCRTUINT256U puSrc1, PCRTUINT256U puSrc2))
     13187{
     13188    RTUINT256U uSrc1 = *puSrc1;
     13189    RTUINT256U uSrc2 = *puSrc2;
     13190
     13191    puDst->au64[0] = (int64_t)uSrc1.ai32[0] * uSrc2.ai32[0];
     13192    puDst->au64[1] = (int64_t)uSrc1.ai32[2] * uSrc2.ai32[2];
     13193    puDst->au64[2] = (int64_t)uSrc1.ai32[4] * uSrc2.ai32[4];
     13194    puDst->au64[3] = (int64_t)uSrc1.ai32[6] * uSrc2.ai32[6];
     13195}
     13196
     13197
     13198/*
    1316713199 * CRC32 (SEE 4.2).
    1316813200 */
  • trunk/src/VBox/VMM/VMMAll/IEMAllInstructionsThree0f38.cpp.h

    r96087 r96099  
    669669/*  Opcode 0x66 0x0f 0x38 0x26 - invalid */
    670670/*  Opcode 0x66 0x0f 0x38 0x27 - invalid */
     671
     672
    671673/** Opcode 0x66 0x0f 0x38 0x28. */
    672 FNIEMOP_STUB(iemOp_pmuldq_Vx_Wx);
     674FNIEMOP_DEF(iemOp_pmuldq_Vx_Wx)
     675{
     676    IEMOP_MNEMONIC2(RM, PMULDQ, pmuldq, Vx, Wx, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OP_SIZES);
     677    return FNIEMOP_CALL_1(iemOpCommonSse41Opt_FullFull_To_Full,
     678                          IEM_SELECT_HOST_OR_FALLBACK(fSse41, iemAImpl_pmuldq_u128, iemAImpl_pmuldq_u128_fallback));
     679}
    673680
    674681
  • trunk/src/VBox/VMM/VMMAll/IEMAllInstructionsVexMap2.cpp.h

    r96087 r96099  
    366366/*  Opcode VEX.66.0F38 0x26 - invalid */
    367367/*  Opcode VEX.66.0F38 0x27 - invalid */
     368
     369
    368370/** Opcode VEX.66.0F38 0x28. */
    369 FNIEMOP_STUB(iemOp_vpmuldq_Vx_Hx_Wx);
     371FNIEMOP_DEF(iemOp_vpmuldq_Vx_Hx_Wx)
     372{
     373    IEMOP_MNEMONIC3(VEX_RVM, VPMULDQ, vpmuldq, Vx, Hx, Wx, DISOPTYPE_HARMLESS, 0);
     374    IEMOPMEDIAOPTF3_INIT_VARS(vpmuldq);
     375    return FNIEMOP_CALL_1(iemOpCommonAvxAvx2_Vx_Hx_Wx_Opt, IEM_SELECT_HOST_OR_FALLBACK(fAvx2, &s_Host, &s_Fallback));
     376}
    370377
    371378
  • trunk/src/VBox/VMM/include/IEMInternal.h

    r96094 r96099  
    18561856FNIEMAIMPLMEDIAOPTF2U128 iemAImpl_pavgb_u128, iemAImpl_pavgw_u128;
    18571857FNIEMAIMPLMEDIAOPTF2U128 iemAImpl_psadbw_u128;
     1858FNIEMAIMPLMEDIAOPTF2U128 iemAImpl_pmuldq_u128, iemAImpl_pmuldq_u128_fallback;
    18581859
    18591860FNIEMAIMPLMEDIAF3U128    iemAImpl_vpshufb_u128,    iemAImpl_vpshufb_u128_fallback;
     
    19121913FNIEMAIMPLMEDIAOPTF3U128 iemAImpl_vpmulhrsw_u128,  iemAImpl_vpmulhrsw_u128_fallback;
    19131914FNIEMAIMPLMEDIAOPTF3U128 iemAImpl_vpsadbw_u128,    iemAImpl_vpsadbw_u128_fallback;
     1915FNIEMAIMPLMEDIAOPTF3U128 iemAImpl_vpmuldq_u128,    iemAImpl_vpmuldq_u128_fallback;
    19141916
    19151917FNIEMAIMPLMEDIAOPTF2U128 iemAImpl_vpabsb_u128,     iemAImpl_vpabsb_u128_fallback;
     
    19721974FNIEMAIMPLMEDIAOPTF3U256 iemAImpl_vpmulhrsw_u256,  iemAImpl_vpmulhrsw_u256_fallback;
    19731975FNIEMAIMPLMEDIAOPTF3U256 iemAImpl_vpsadbw_u256,    iemAImpl_vpsadbw_u256_fallback;
     1976FNIEMAIMPLMEDIAOPTF3U256 iemAImpl_vpmuldq_u256,    iemAImpl_vpmuldq_u256_fallback;
    19741977
    19751978FNIEMAIMPLMEDIAOPTF2U256 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