VirtualBox

Changeset 95986 in vbox


Ignore:
Timestamp:
Aug 2, 2022 1:19:54 PM (3 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
152746
Message:

VMM/IEM: Add implementation for vpmaxub instruction, bugref:9898

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

Legend:

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

    r95951 r95986  
    40864086IEMIMPL_MEDIA_F3 vpshufb
    40874087IEMIMPL_MEDIA_F3 vpand
     4088IEMIMPL_MEDIA_F3 vpmaxub
    40884089IEMIMPL_MEDIA_F3 vpandn
    40894090IEMIMPL_MEDIA_F3 vpor
  • trunk/src/VBox/VMM/VMMAll/IEMAllAImplC.cpp

    r95951 r95986  
    95559555#endif
    95569556
     9557IEM_DECL_IMPL_DEF(void, iemAImpl_vpmaxub_u128_fallback,(PX86XSAVEAREA pExtState, PRTUINT128U puDst,
     9558                                                        PCRTUINT128U puSrc1, PCRTUINT128U puSrc2))
     9559{
     9560    puDst->au8[ 0] = RT_MAX(puSrc1->au8[ 0], puSrc2->au8[ 0]);
     9561    puDst->au8[ 1] = RT_MAX(puSrc1->au8[ 1], puSrc2->au8[ 1]);
     9562    puDst->au8[ 2] = RT_MAX(puSrc1->au8[ 2], puSrc2->au8[ 2]);
     9563    puDst->au8[ 3] = RT_MAX(puSrc1->au8[ 3], puSrc2->au8[ 3]);
     9564    puDst->au8[ 4] = RT_MAX(puSrc1->au8[ 4], puSrc2->au8[ 4]);
     9565    puDst->au8[ 5] = RT_MAX(puSrc1->au8[ 5], puSrc2->au8[ 5]);
     9566    puDst->au8[ 6] = RT_MAX(puSrc1->au8[ 6], puSrc2->au8[ 6]);
     9567    puDst->au8[ 7] = RT_MAX(puSrc1->au8[ 7], puSrc2->au8[ 7]);
     9568    puDst->au8[ 8] = RT_MAX(puSrc1->au8[ 8], puSrc2->au8[ 8]);
     9569    puDst->au8[ 9] = RT_MAX(puSrc1->au8[ 9], puSrc2->au8[ 9]);
     9570    puDst->au8[10] = RT_MAX(puSrc1->au8[10], puSrc2->au8[10]);
     9571    puDst->au8[11] = RT_MAX(puSrc1->au8[11], puSrc2->au8[11]);
     9572    puDst->au8[12] = RT_MAX(puSrc1->au8[12], puSrc2->au8[12]);
     9573    puDst->au8[13] = RT_MAX(puSrc1->au8[13], puSrc2->au8[13]);
     9574    puDst->au8[14] = RT_MAX(puSrc1->au8[14], puSrc2->au8[14]);
     9575    puDst->au8[15] = RT_MAX(puSrc1->au8[15], puSrc2->au8[15]);
     9576    RT_NOREF(pExtState);
     9577}
     9578
     9579
     9580IEM_DECL_IMPL_DEF(void, iemAImpl_vpmaxub_u256_fallback,(PX86XSAVEAREA pExtState, PRTUINT256U puDst,
     9581                                                        PCRTUINT256U puSrc1, PCRTUINT256U puSrc2))
     9582{
     9583    puDst->au8[ 0] = RT_MAX(puSrc1->au8[ 0], puSrc2->au8[ 0]);
     9584    puDst->au8[ 1] = RT_MAX(puSrc1->au8[ 1], puSrc2->au8[ 1]);
     9585    puDst->au8[ 2] = RT_MAX(puSrc1->au8[ 2], puSrc2->au8[ 2]);
     9586    puDst->au8[ 3] = RT_MAX(puSrc1->au8[ 3], puSrc2->au8[ 3]);
     9587    puDst->au8[ 4] = RT_MAX(puSrc1->au8[ 4], puSrc2->au8[ 4]);
     9588    puDst->au8[ 5] = RT_MAX(puSrc1->au8[ 5], puSrc2->au8[ 5]);
     9589    puDst->au8[ 6] = RT_MAX(puSrc1->au8[ 6], puSrc2->au8[ 6]);
     9590    puDst->au8[ 7] = RT_MAX(puSrc1->au8[ 7], puSrc2->au8[ 7]);
     9591    puDst->au8[ 8] = RT_MAX(puSrc1->au8[ 8], puSrc2->au8[ 8]);
     9592    puDst->au8[ 9] = RT_MAX(puSrc1->au8[ 9], puSrc2->au8[ 9]);
     9593    puDst->au8[10] = RT_MAX(puSrc1->au8[10], puSrc2->au8[10]);
     9594    puDst->au8[11] = RT_MAX(puSrc1->au8[11], puSrc2->au8[11]);
     9595    puDst->au8[12] = RT_MAX(puSrc1->au8[12], puSrc2->au8[12]);
     9596    puDst->au8[13] = RT_MAX(puSrc1->au8[13], puSrc2->au8[13]);
     9597    puDst->au8[14] = RT_MAX(puSrc1->au8[14], puSrc2->au8[14]);
     9598    puDst->au8[15] = RT_MAX(puSrc1->au8[15], puSrc2->au8[15]);
     9599    puDst->au8[16] = RT_MAX(puSrc1->au8[16], puSrc2->au8[16]);
     9600    puDst->au8[17] = RT_MAX(puSrc1->au8[17], puSrc2->au8[17]);
     9601    puDst->au8[18] = RT_MAX(puSrc1->au8[18], puSrc2->au8[18]);
     9602    puDst->au8[19] = RT_MAX(puSrc1->au8[19], puSrc2->au8[19]);
     9603    puDst->au8[20] = RT_MAX(puSrc1->au8[20], puSrc2->au8[20]);
     9604    puDst->au8[21] = RT_MAX(puSrc1->au8[21], puSrc2->au8[21]);
     9605    puDst->au8[22] = RT_MAX(puSrc1->au8[22], puSrc2->au8[22]);
     9606    puDst->au8[23] = RT_MAX(puSrc1->au8[23], puSrc2->au8[23]);
     9607    puDst->au8[24] = RT_MAX(puSrc1->au8[24], puSrc2->au8[24]);
     9608    puDst->au8[25] = RT_MAX(puSrc1->au8[25], puSrc2->au8[25]);
     9609    puDst->au8[26] = RT_MAX(puSrc1->au8[26], puSrc2->au8[26]);
     9610    puDst->au8[27] = RT_MAX(puSrc1->au8[27], puSrc2->au8[27]);
     9611    puDst->au8[28] = RT_MAX(puSrc1->au8[28], puSrc2->au8[28]);
     9612    puDst->au8[29] = RT_MAX(puSrc1->au8[29], puSrc2->au8[29]);
     9613    puDst->au8[30] = RT_MAX(puSrc1->au8[30], puSrc2->au8[30]);
     9614    puDst->au8[31] = RT_MAX(puSrc1->au8[31], puSrc2->au8[31]);
     9615    RT_NOREF(pExtState);
     9616}
     9617
    95579618
    95589619/*
  • trunk/src/VBox/VMM/VMMAll/IEMAllInstructionsVexMap1.cpp.h

    r95554 r95986  
    40624062
    40634063/*  Opcode VEX.0F 0xde - invalid */
    4064 /** Opcode VEX.66.0F 0xde - vpmaxub Vx, Hx, W */
    4065 FNIEMOP_STUB(iemOp_vpmaxub_Vx_Hx_W);
     4064
     4065
     4066/** Opcode VEX.66.0F 0xde - vpmaxub Vx, Hx, Wx */
     4067FNIEMOP_DEF(iemOp_vpmaxub_Vx_Hx_Wx)
     4068{
     4069    IEMOP_MNEMONIC3(VEX_RVM, VPMAXUB, vpmaxub, Vx, Hx, Wx, DISOPTYPE_HARMLESS, 0);
     4070    IEMOPMEDIAF3_INIT_VARS(vpmaxub);
     4071    return FNIEMOP_CALL_1(iemOpCommonAvxAvx2_Vx_Hx_Wx, IEM_SELECT_HOST_OR_FALLBACK(fAvx2, &s_Host, &s_Fallback));
     4072}
     4073
     4074
    40664075/*  Opcode VEX.F3.0F 0xde - invalid */
    40674076/*  Opcode VEX.F2.0F 0xde - invalid */
     
    46754684    /* 0xdc */  iemOp_InvalidNeedRM,        iemOp_vpaddusb_Vx_Hx_Wx,    iemOp_InvalidNeedRM,        iemOp_InvalidNeedRM,
    46764685    /* 0xdd */  iemOp_InvalidNeedRM,        iemOp_vpaddusw_Vx_Hx_Wx,    iemOp_InvalidNeedRM,        iemOp_InvalidNeedRM,
    4677     /* 0xde */  iemOp_InvalidNeedRM,        iemOp_vpmaxub_Vx_Hx_W,      iemOp_InvalidNeedRM,        iemOp_InvalidNeedRM,
     4686    /* 0xde */  iemOp_InvalidNeedRM,        iemOp_vpmaxub_Vx_Hx_Wx,     iemOp_InvalidNeedRM,        iemOp_InvalidNeedRM,
    46784687    /* 0xdf */  iemOp_InvalidNeedRM,        iemOp_vpandn_Vx_Hx_Wx,      iemOp_InvalidNeedRM,        iemOp_InvalidNeedRM,
    46794688
  • trunk/src/VBox/VMM/include/IEMInternal.h

    r95951 r95986  
    18281828FNIEMAIMPLMEDIAF3U128    iemAImpl_vpsubd_u128,     iemAImpl_vpsubd_u128_fallback;
    18291829FNIEMAIMPLMEDIAF3U128    iemAImpl_vpsubq_u128,     iemAImpl_vpsubq_u128_fallback;
     1830FNIEMAIMPLMEDIAF3U128    iemAImpl_vpmaxub_u128,    iemAImpl_vpmaxub_u128_fallback;
    18301831FNIEMAIMPLMEDIAOPTF3U128 iemAImpl_vpacksswb_u128,  iemAImpl_vpacksswb_u128_fallback;
    18311832FNIEMAIMPLMEDIAOPTF3U128 iemAImpl_vpackssdw_u128,  iemAImpl_vpackssdw_u128_fallback;
     
    18541855FNIEMAIMPLMEDIAF3U256    iemAImpl_vpsubd_u256,     iemAImpl_vpsubd_u256_fallback;
    18551856FNIEMAIMPLMEDIAF3U256    iemAImpl_vpsubq_u256,     iemAImpl_vpsubq_u256_fallback;
     1857FNIEMAIMPLMEDIAF3U256    iemAImpl_vpmaxub_u256,    iemAImpl_vpmaxub_u256_fallback;
    18561858FNIEMAIMPLMEDIAOPTF3U256 iemAImpl_vpacksswb_u256,  iemAImpl_vpacksswb_u256_fallback;
    18571859FNIEMAIMPLMEDIAOPTF3U256 iemAImpl_vpackssdw_u256,  iemAImpl_vpackssdw_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