VirtualBox

Changeset 96010 in vbox


Ignore:
Timestamp:
Aug 3, 2022 8:15:46 PM (2 years ago)
Author:
vboxsync
Message:

VMM/IEM: Implement [v]pmaxs{b,w,d} instructions, bugref:9898

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

Legend:

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

    r96007 r96010  
    36423642IEMIMPL_MEDIA_F2 pmaxuw,  0
    36433643IEMIMPL_MEDIA_F2 pmaxud,  0
     3644IEMIMPL_MEDIA_F2 pmaxsb,  0
     3645IEMIMPL_MEDIA_F2 pmaxsw,  1
     3646IEMIMPL_MEDIA_F2 pmaxsd,  0
    36443647
    36453648;;
     
    41024105IEMIMPL_MEDIA_F3 vpmaxuw
    41034106IEMIMPL_MEDIA_F3 vpmaxud
     4107IEMIMPL_MEDIA_F3 vpmaxsb
     4108IEMIMPL_MEDIA_F3 vpmaxsw
     4109IEMIMPL_MEDIA_F3 vpmaxsd
    41044110IEMIMPL_MEDIA_F3 vpandn
    41054111IEMIMPL_MEDIA_F3 vpor
  • trunk/src/VBox/VMM/VMMAll/IEMAllAImplC.cpp

    r96009 r96010  
    97119711
    97129712/*
     9713 * PMAXSB / VPMAXSB / PMAXSW / VPMAXSW / PMAXSD / VPMAXSD
     9714 */
     9715#ifdef IEM_WITHOUT_ASSEMBLY
     9716
     9717IEM_DECL_IMPL_DEF(void, iemAImpl_pmaxsw_u64,(PCX86FXSTATE pFpuState, uint64_t *puDst, uint64_t const *puSrc))
     9718{
     9719    RTUINT64U uSrc1 = { *puDst };
     9720    RTUINT64U uSrc2 = { *puSrc };
     9721    RTUINT64U uDst;
     9722
     9723    uDst.ai16[0] = RT_MAX(uSrc1.ai16[0], uSrc2.ai16[0]);
     9724    uDst.ai16[1] = RT_MAX(uSrc1.ai16[1], uSrc2.ai16[1]);
     9725    uDst.ai16[2] = RT_MAX(uSrc1.ai16[2], uSrc2.ai16[2]);
     9726    uDst.ai16[3] = RT_MAX(uSrc1.ai16[3], uSrc2.ai16[3]);
     9727    *puDst = uDst.u;
     9728    RT_NOREF(pFpuState);
     9729}
     9730
     9731
     9732IEM_DECL_IMPL_DEF(void, iemAImpl_pmaxsw_u128,(PCX86FXSTATE pFpuState, PRTUINT128U puDst, PCRTUINT128U puSrc))
     9733{
     9734    RTUINT128U uSrc1 = *puDst;
     9735
     9736    puDst->ai16[ 0] = RT_MAX(uSrc1.ai16[ 0], puSrc->ai16[ 0]);
     9737    puDst->ai16[ 1] = RT_MAX(uSrc1.ai16[ 1], puSrc->ai16[ 1]);
     9738    puDst->ai16[ 2] = RT_MAX(uSrc1.ai16[ 2], puSrc->ai16[ 2]);
     9739    puDst->ai16[ 3] = RT_MAX(uSrc1.ai16[ 3], puSrc->ai16[ 3]);
     9740    puDst->ai16[ 4] = RT_MAX(uSrc1.ai16[ 4], puSrc->ai16[ 4]);
     9741    puDst->ai16[ 5] = RT_MAX(uSrc1.ai16[ 5], puSrc->ai16[ 5]);
     9742    puDst->ai16[ 6] = RT_MAX(uSrc1.ai16[ 6], puSrc->ai16[ 6]);
     9743    puDst->ai16[ 7] = RT_MAX(uSrc1.ai16[ 7], puSrc->ai16[ 7]);
     9744    RT_NOREF(pFpuState);
     9745}
     9746
     9747#endif
     9748
     9749IEM_DECL_IMPL_DEF(void, iemAImpl_pmaxsb_u128_fallback,(PCX86FXSTATE pFpuState, PRTUINT128U puDst, PCRTUINT128U puSrc))
     9750{
     9751    RTUINT128U uSrc1 = *puDst;
     9752
     9753    puDst->ai8[ 0] = RT_MAX(uSrc1.ai8[ 0], puSrc->ai8[ 0]);
     9754    puDst->ai8[ 1] = RT_MAX(uSrc1.ai8[ 1], puSrc->ai8[ 1]);
     9755    puDst->ai8[ 2] = RT_MAX(uSrc1.ai8[ 2], puSrc->ai8[ 2]);
     9756    puDst->ai8[ 3] = RT_MAX(uSrc1.ai8[ 3], puSrc->ai8[ 3]);
     9757    puDst->ai8[ 4] = RT_MAX(uSrc1.ai8[ 4], puSrc->ai8[ 4]);
     9758    puDst->ai8[ 5] = RT_MAX(uSrc1.ai8[ 5], puSrc->ai8[ 5]);
     9759    puDst->ai8[ 6] = RT_MAX(uSrc1.ai8[ 6], puSrc->ai8[ 6]);
     9760    puDst->ai8[ 7] = RT_MAX(uSrc1.ai8[ 7], puSrc->ai8[ 7]);
     9761    puDst->ai8[ 8] = RT_MAX(uSrc1.ai8[ 8], puSrc->ai8[ 8]);
     9762    puDst->ai8[ 9] = RT_MAX(uSrc1.ai8[ 9], puSrc->ai8[ 9]);
     9763    puDst->ai8[10] = RT_MAX(uSrc1.ai8[10], puSrc->ai8[10]);
     9764    puDst->ai8[11] = RT_MAX(uSrc1.ai8[11], puSrc->ai8[11]);
     9765    puDst->ai8[12] = RT_MAX(uSrc1.ai8[12], puSrc->ai8[12]);
     9766    puDst->ai8[13] = RT_MAX(uSrc1.ai8[13], puSrc->ai8[13]);
     9767    puDst->ai8[14] = RT_MAX(uSrc1.ai8[14], puSrc->ai8[14]);
     9768    puDst->ai8[15] = RT_MAX(uSrc1.ai8[15], puSrc->ai8[15]);
     9769    RT_NOREF(pFpuState);
     9770}
     9771
     9772
     9773IEM_DECL_IMPL_DEF(void, iemAImpl_pmaxsd_u128_fallback,(PCX86FXSTATE pFpuState, PRTUINT128U puDst, PCRTUINT128U puSrc))
     9774{
     9775    RTUINT128U uSrc1 = *puDst;
     9776
     9777    puDst->ai32[ 0] = RT_MAX(uSrc1.ai32[ 0], puSrc->ai32[ 0]);
     9778    puDst->ai32[ 1] = RT_MAX(uSrc1.ai32[ 1], puSrc->ai32[ 1]);
     9779    puDst->ai32[ 2] = RT_MAX(uSrc1.ai32[ 2], puSrc->ai32[ 2]);
     9780    puDst->ai32[ 3] = RT_MAX(uSrc1.ai32[ 3], puSrc->ai32[ 3]);
     9781    RT_NOREF(pFpuState);
     9782}
     9783
     9784
     9785IEM_DECL_IMPL_DEF(void, iemAImpl_vpmaxsb_u128_fallback,(PX86XSAVEAREA pExtState, PRTUINT128U puDst,
     9786                                                        PCRTUINT128U puSrc1, PCRTUINT128U puSrc2))
     9787{
     9788    puDst->ai8[ 0] = RT_MAX(puSrc1->ai8[ 0], puSrc2->ai8[ 0]);
     9789    puDst->ai8[ 1] = RT_MAX(puSrc1->ai8[ 1], puSrc2->ai8[ 1]);
     9790    puDst->ai8[ 2] = RT_MAX(puSrc1->ai8[ 2], puSrc2->ai8[ 2]);
     9791    puDst->ai8[ 3] = RT_MAX(puSrc1->ai8[ 3], puSrc2->ai8[ 3]);
     9792    puDst->ai8[ 4] = RT_MAX(puSrc1->ai8[ 4], puSrc2->ai8[ 4]);
     9793    puDst->ai8[ 5] = RT_MAX(puSrc1->ai8[ 5], puSrc2->ai8[ 5]);
     9794    puDst->ai8[ 6] = RT_MAX(puSrc1->ai8[ 6], puSrc2->ai8[ 6]);
     9795    puDst->ai8[ 7] = RT_MAX(puSrc1->ai8[ 7], puSrc2->ai8[ 7]);
     9796    puDst->ai8[ 8] = RT_MAX(puSrc1->ai8[ 8], puSrc2->ai8[ 8]);
     9797    puDst->ai8[ 9] = RT_MAX(puSrc1->ai8[ 9], puSrc2->ai8[ 9]);
     9798    puDst->ai8[10] = RT_MAX(puSrc1->ai8[10], puSrc2->ai8[10]);
     9799    puDst->ai8[11] = RT_MAX(puSrc1->ai8[11], puSrc2->ai8[11]);
     9800    puDst->ai8[12] = RT_MAX(puSrc1->ai8[12], puSrc2->ai8[12]);
     9801    puDst->ai8[13] = RT_MAX(puSrc1->ai8[13], puSrc2->ai8[13]);
     9802    puDst->ai8[14] = RT_MAX(puSrc1->ai8[14], puSrc2->ai8[14]);
     9803    puDst->ai8[15] = RT_MAX(puSrc1->ai8[15], puSrc2->ai8[15]);
     9804    RT_NOREF(pExtState);
     9805}
     9806
     9807
     9808IEM_DECL_IMPL_DEF(void, iemAImpl_vpmaxsb_u256_fallback,(PX86XSAVEAREA pExtState, PRTUINT256U puDst,
     9809                                                        PCRTUINT256U puSrc1, PCRTUINT256U puSrc2))
     9810{
     9811    puDst->ai8[ 0] = RT_MAX(puSrc1->ai8[ 0], puSrc2->ai8[ 0]);
     9812    puDst->ai8[ 1] = RT_MAX(puSrc1->ai8[ 1], puSrc2->ai8[ 1]);
     9813    puDst->ai8[ 2] = RT_MAX(puSrc1->ai8[ 2], puSrc2->ai8[ 2]);
     9814    puDst->ai8[ 3] = RT_MAX(puSrc1->ai8[ 3], puSrc2->ai8[ 3]);
     9815    puDst->ai8[ 4] = RT_MAX(puSrc1->ai8[ 4], puSrc2->ai8[ 4]);
     9816    puDst->ai8[ 5] = RT_MAX(puSrc1->ai8[ 5], puSrc2->ai8[ 5]);
     9817    puDst->ai8[ 6] = RT_MAX(puSrc1->ai8[ 6], puSrc2->ai8[ 6]);
     9818    puDst->ai8[ 7] = RT_MAX(puSrc1->ai8[ 7], puSrc2->ai8[ 7]);
     9819    puDst->ai8[ 8] = RT_MAX(puSrc1->ai8[ 8], puSrc2->ai8[ 8]);
     9820    puDst->ai8[ 9] = RT_MAX(puSrc1->ai8[ 9], puSrc2->ai8[ 9]);
     9821    puDst->ai8[10] = RT_MAX(puSrc1->ai8[10], puSrc2->ai8[10]);
     9822    puDst->ai8[11] = RT_MAX(puSrc1->ai8[11], puSrc2->ai8[11]);
     9823    puDst->ai8[12] = RT_MAX(puSrc1->ai8[12], puSrc2->ai8[12]);
     9824    puDst->ai8[13] = RT_MAX(puSrc1->ai8[13], puSrc2->ai8[13]);
     9825    puDst->ai8[14] = RT_MAX(puSrc1->ai8[14], puSrc2->ai8[14]);
     9826    puDst->ai8[15] = RT_MAX(puSrc1->ai8[15], puSrc2->ai8[15]);
     9827    puDst->ai8[16] = RT_MAX(puSrc1->ai8[16], puSrc2->ai8[16]);
     9828    puDst->ai8[17] = RT_MAX(puSrc1->ai8[17], puSrc2->ai8[17]);
     9829    puDst->ai8[18] = RT_MAX(puSrc1->ai8[18], puSrc2->ai8[18]);
     9830    puDst->ai8[19] = RT_MAX(puSrc1->ai8[19], puSrc2->ai8[19]);
     9831    puDst->ai8[20] = RT_MAX(puSrc1->ai8[20], puSrc2->ai8[20]);
     9832    puDst->ai8[21] = RT_MAX(puSrc1->ai8[21], puSrc2->ai8[21]);
     9833    puDst->ai8[22] = RT_MAX(puSrc1->ai8[22], puSrc2->ai8[22]);
     9834    puDst->ai8[23] = RT_MAX(puSrc1->ai8[23], puSrc2->ai8[23]);
     9835    puDst->ai8[24] = RT_MAX(puSrc1->ai8[24], puSrc2->ai8[24]);
     9836    puDst->ai8[25] = RT_MAX(puSrc1->ai8[25], puSrc2->ai8[25]);
     9837    puDst->ai8[26] = RT_MAX(puSrc1->ai8[26], puSrc2->ai8[26]);
     9838    puDst->ai8[27] = RT_MAX(puSrc1->ai8[27], puSrc2->ai8[27]);
     9839    puDst->ai8[28] = RT_MAX(puSrc1->ai8[28], puSrc2->ai8[28]);
     9840    puDst->ai8[29] = RT_MAX(puSrc1->ai8[29], puSrc2->ai8[29]);
     9841    puDst->ai8[30] = RT_MAX(puSrc1->ai8[30], puSrc2->ai8[30]);
     9842    puDst->ai8[31] = RT_MAX(puSrc1->ai8[31], puSrc2->ai8[31]);
     9843    RT_NOREF(pExtState);
     9844}
     9845
     9846
     9847IEM_DECL_IMPL_DEF(void, iemAImpl_vpmaxsw_u128_fallback,(PX86XSAVEAREA pExtState, PRTUINT128U puDst,
     9848                                                        PCRTUINT128U puSrc1, PCRTUINT128U puSrc2))
     9849{
     9850    puDst->ai16[ 0] = RT_MAX(puSrc1->ai16[ 0], puSrc2->ai16[ 0]);
     9851    puDst->ai16[ 1] = RT_MAX(puSrc1->ai16[ 1], puSrc2->ai16[ 1]);
     9852    puDst->ai16[ 2] = RT_MAX(puSrc1->ai16[ 2], puSrc2->ai16[ 2]);
     9853    puDst->ai16[ 3] = RT_MAX(puSrc1->ai16[ 3], puSrc2->ai16[ 3]);
     9854    puDst->ai16[ 4] = RT_MAX(puSrc1->ai16[ 4], puSrc2->ai16[ 4]);
     9855    puDst->ai16[ 5] = RT_MAX(puSrc1->ai16[ 5], puSrc2->ai16[ 5]);
     9856    puDst->ai16[ 6] = RT_MAX(puSrc1->ai16[ 6], puSrc2->ai16[ 6]);
     9857    puDst->ai16[ 7] = RT_MAX(puSrc1->ai16[ 7], puSrc2->ai16[ 7]);
     9858    RT_NOREF(pExtState);
     9859}
     9860
     9861
     9862IEM_DECL_IMPL_DEF(void, iemAImpl_vpmaxsw_u256_fallback,(PX86XSAVEAREA pExtState, PRTUINT256U puDst,
     9863                                                        PCRTUINT256U puSrc1, PCRTUINT256U puSrc2))
     9864{
     9865    puDst->ai16[ 0] = RT_MAX(puSrc1->ai16[ 0], puSrc2->ai16[ 0]);
     9866    puDst->ai16[ 1] = RT_MAX(puSrc1->ai16[ 1], puSrc2->ai16[ 1]);
     9867    puDst->ai16[ 2] = RT_MAX(puSrc1->ai16[ 2], puSrc2->ai16[ 2]);
     9868    puDst->ai16[ 3] = RT_MAX(puSrc1->ai16[ 3], puSrc2->ai16[ 3]);
     9869    puDst->ai16[ 4] = RT_MAX(puSrc1->ai16[ 4], puSrc2->ai16[ 4]);
     9870    puDst->ai16[ 5] = RT_MAX(puSrc1->ai16[ 5], puSrc2->ai16[ 5]);
     9871    puDst->ai16[ 6] = RT_MAX(puSrc1->ai16[ 6], puSrc2->ai16[ 6]);
     9872    puDst->ai16[ 7] = RT_MAX(puSrc1->ai16[ 7], puSrc2->ai16[ 7]);
     9873    puDst->ai16[ 8] = RT_MAX(puSrc1->ai16[ 8], puSrc2->ai16[ 8]);
     9874    puDst->ai16[ 9] = RT_MAX(puSrc1->ai16[ 9], puSrc2->ai16[ 9]);
     9875    puDst->ai16[10] = RT_MAX(puSrc1->ai16[10], puSrc2->ai16[10]);
     9876    puDst->ai16[11] = RT_MAX(puSrc1->ai16[11], puSrc2->ai16[11]);
     9877    puDst->ai16[12] = RT_MAX(puSrc1->ai16[12], puSrc2->ai16[12]);
     9878    puDst->ai16[13] = RT_MAX(puSrc1->ai16[13], puSrc2->ai16[13]);
     9879    puDst->ai16[14] = RT_MAX(puSrc1->ai16[14], puSrc2->ai16[14]);
     9880    puDst->ai16[15] = RT_MAX(puSrc1->ai16[15], puSrc2->ai16[15]);
     9881    RT_NOREF(pExtState);
     9882}
     9883
     9884
     9885IEM_DECL_IMPL_DEF(void, iemAImpl_vpmaxsd_u128_fallback,(PX86XSAVEAREA pExtState, PRTUINT128U puDst,
     9886                                                        PCRTUINT128U puSrc1, PCRTUINT128U puSrc2))
     9887{
     9888    puDst->ai32[ 0] = RT_MAX(puSrc1->ai32[ 0], puSrc2->ai32[ 0]);
     9889    puDst->ai32[ 1] = RT_MAX(puSrc1->ai32[ 1], puSrc2->ai32[ 1]);
     9890    puDst->ai32[ 2] = RT_MAX(puSrc1->ai32[ 2], puSrc2->ai32[ 2]);
     9891    puDst->ai32[ 3] = RT_MAX(puSrc1->ai32[ 3], puSrc2->ai32[ 3]);
     9892    RT_NOREF(pExtState);
     9893}
     9894
     9895
     9896IEM_DECL_IMPL_DEF(void, iemAImpl_vpmaxsd_u256_fallback,(PX86XSAVEAREA pExtState, PRTUINT256U puDst,
     9897                                                        PCRTUINT256U puSrc1, PCRTUINT256U puSrc2))
     9898{
     9899    puDst->ai32[ 0] = RT_MAX(puSrc1->ai32[ 0], puSrc2->ai32[ 0]);
     9900    puDst->ai32[ 1] = RT_MAX(puSrc1->ai32[ 1], puSrc2->ai32[ 1]);
     9901    puDst->ai32[ 2] = RT_MAX(puSrc1->ai32[ 2], puSrc2->ai32[ 2]);
     9902    puDst->ai32[ 3] = RT_MAX(puSrc1->ai32[ 3], puSrc2->ai32[ 3]);
     9903    puDst->ai32[ 4] = RT_MAX(puSrc1->ai32[ 4], puSrc2->ai32[ 4]);
     9904    puDst->ai32[ 5] = RT_MAX(puSrc1->ai32[ 5], puSrc2->ai32[ 5]);
     9905    puDst->ai32[ 6] = RT_MAX(puSrc1->ai32[ 6], puSrc2->ai32[ 6]);
     9906    puDst->ai32[ 7] = RT_MAX(puSrc1->ai32[ 7], puSrc2->ai32[ 7]);
     9907    RT_NOREF(pExtState);
     9908}
     9909
     9910
     9911/*
    97139912 * PMINUB / VPMINUB / PMINUW / VPMINUW / PMINUD / VPMINUD
    97149913 */
  • trunk/src/VBox/VMM/VMMAll/IEMAllInstructionsThree0f38.cpp.h

    r96007 r96010  
    577577
    578578/** Opcode 0x66 0x0f 0x38 0x3c. */
    579 FNIEMOP_STUB(iemOp_pmaxsb_Vx_Wx);
     579FNIEMOP_DEF(iemOp_pmaxsb_Vx_Wx)
     580{
     581    IEMOP_MNEMONIC2(RM, PMAXSB, pmaxsb, Vx, Wx, DISOPTYPE_HARMLESS | DISOPTYPE_SSE, IEMOPHINT_IGNORES_OP_SIZES);
     582    return FNIEMOP_CALL_1(iemOpCommonSse41_FullFull_To_Full,
     583                          IEM_SELECT_HOST_OR_FALLBACK(fSse41, iemAImpl_pmaxsb_u128, iemAImpl_pmaxsb_u128_fallback));
     584}
     585
     586
    580587/** Opcode 0x66 0x0f 0x38 0x3d. */
    581 FNIEMOP_STUB(iemOp_pmaxsd_Vx_Wx);
     588FNIEMOP_DEF(iemOp_pmaxsd_Vx_Wx)
     589{
     590    IEMOP_MNEMONIC2(RM, PMAXSD, pmaxsd, Vx, Wx, DISOPTYPE_HARMLESS | DISOPTYPE_SSE, IEMOPHINT_IGNORES_OP_SIZES);
     591    return FNIEMOP_CALL_1(iemOpCommonSse41_FullFull_To_Full,
     592                          IEM_SELECT_HOST_OR_FALLBACK(fSse41, iemAImpl_pmaxsd_u128, iemAImpl_pmaxsd_u128_fallback));
     593}
    582594
    583595
  • trunk/src/VBox/VMM/VMMAll/IEMAllInstructionsTwoByte0f.cpp.h

    r96007 r96010  
    1036610366/*  Opcode 0xf2 0x0f 0xed - invalid */
    1036710367
     10368
    1036810369/** Opcode      0x0f 0xee - pmaxsw Pq, Qq */
    10369 FNIEMOP_STUB(iemOp_pmaxsw_Pq_Qq);
     10370FNIEMOP_DEF(iemOp_pmaxsw_Pq_Qq)
     10371{
     10372    IEMOP_MNEMONIC2(RM, PMAXSW, pmaxsw, Pq, Qq, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OP_SIZES);
     10373    return FNIEMOP_CALL_1(iemOpCommonMmxSse_FullFull_To_Full, iemAImpl_pmaxsw_u64);
     10374}
     10375
     10376
    1037010377/** Opcode 0x66 0x0f 0xee - pmaxsw Vx, Wx */
    10371 FNIEMOP_STUB(iemOp_pmaxsw_Vx_Wx);
     10378FNIEMOP_DEF(iemOp_pmaxsw_Vx_Wx)
     10379{
     10380    IEMOP_MNEMONIC2(RM, PMAXSW, pmaxsw, Vx, Wx, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OP_SIZES);
     10381    return FNIEMOP_CALL_1(iemOpCommonSse2_FullFull_To_Full, iemAImpl_pmaxsw_u128);
     10382}
     10383
     10384
    1037210385/*  Opcode 0xf3 0x0f 0xee - invalid */
    1037310386/*  Opcode 0xf2 0x0f 0xee - invalid */
  • trunk/src/VBox/VMM/VMMAll/IEMAllInstructionsVexMap1.cpp.h

    r96007 r96010  
    42794279
    42804280/*  Opcode VEX.0F 0xee - invalid */
    4281 /** Opcode VEX.66.0F 0xee - vpmaxsw Vx, Hx, W */
    4282 FNIEMOP_STUB(iemOp_vpmaxsw_Vx_Hx_W);
     4281
     4282
     4283/** Opcode VEX.66.0F 0xee - vpmaxsw Vx, Hx, Wx */
     4284FNIEMOP_DEF(iemOp_vpmaxsw_Vx_Hx_Wx)
     4285{
     4286    IEMOP_MNEMONIC3(VEX_RVM, VPMAXSW, vpmaxsw, Vx, Hx, Wx, DISOPTYPE_HARMLESS, 0);
     4287    IEMOPMEDIAF3_INIT_VARS(vpmaxsw);
     4288    return FNIEMOP_CALL_1(iemOpCommonAvxAvx2_Vx_Hx_Wx, IEM_SELECT_HOST_OR_FALLBACK(fAvx2, &s_Host, &s_Fallback));
     4289}
     4290
     4291
    42834292/*  Opcode VEX.F3.0F 0xee - invalid */
    42844293/*  Opcode VEX.F2.0F 0xee - invalid */
     
    47194728    /* 0xec */  iemOp_InvalidNeedRM,        iemOp_vpaddsb_Vx_Hx_Wx,     iemOp_InvalidNeedRM,        iemOp_InvalidNeedRM,
    47204729    /* 0xed */  iemOp_InvalidNeedRM,        iemOp_vpaddsw_Vx_Hx_Wx,     iemOp_InvalidNeedRM,        iemOp_InvalidNeedRM,
    4721     /* 0xee */  iemOp_InvalidNeedRM,        iemOp_vpmaxsw_Vx_Hx_W,      iemOp_InvalidNeedRM,        iemOp_InvalidNeedRM,
     4730    /* 0xee */  iemOp_InvalidNeedRM,        iemOp_vpmaxsw_Vx_Hx_Wx,      iemOp_InvalidNeedRM,        iemOp_InvalidNeedRM,
    47224731    /* 0xef */  iemOp_InvalidNeedRM,        iemOp_vpxor_Vx_Hx_Wx,       iemOp_InvalidNeedRM,        iemOp_InvalidNeedRM,
    47234732
  • trunk/src/VBox/VMM/VMMAll/IEMAllInstructionsVexMap2.cpp.h

    r96007 r96010  
    418418
    419419/** Opcode VEX.66.0F38 0x3c. */
    420 FNIEMOP_STUB(iemOp_vpmaxsb_Vx_Hx_Wx);
     420FNIEMOP_DEF(iemOp_vpmaxsb_Vx_Hx_Wx)
     421{
     422    IEMOP_MNEMONIC3(VEX_RVM, VPMAXSB, vpmaxsb, Vx, Hx, Wx, DISOPTYPE_HARMLESS, 0);
     423    IEMOPMEDIAF3_INIT_VARS(vpmaxsb);
     424    return FNIEMOP_CALL_1(iemOpCommonAvxAvx2_Vx_Hx_Wx, IEM_SELECT_HOST_OR_FALLBACK(fAvx2, &s_Host, &s_Fallback));
     425}
     426
     427
    421428/** Opcode VEX.66.0F38 0x3d. */
    422 FNIEMOP_STUB(iemOp_vpmaxsd_Vx_Hx_Wx);
     429FNIEMOP_DEF(iemOp_vpmaxsd_Vx_Hx_Wx)
     430{
     431    IEMOP_MNEMONIC3(VEX_RVM, VPMAXSD, vpmaxsd, Vx, Hx, Wx, DISOPTYPE_HARMLESS, 0);
     432    IEMOPMEDIAF3_INIT_VARS(vpmaxsd);
     433    return FNIEMOP_CALL_1(iemOpCommonAvxAvx2_Vx_Hx_Wx, IEM_SELECT_HOST_OR_FALLBACK(fAvx2, &s_Host, &s_Fallback));
     434}
    423435
    424436
  • trunk/src/VBox/VMM/include/IEMInternal.h

    r96007 r96010  
    17781778FNIEMAIMPLMEDIAF2U64     iemAImpl_pmullw_u64, iemAImpl_pmulhw_u64;
    17791779FNIEMAIMPLMEDIAF2U64     iemAImpl_pminub_u64, iemAImpl_pmaxub_u64;
    1780 FNIEMAIMPLMEDIAF2U64     iemAImpl_pminsw_u64;
     1780FNIEMAIMPLMEDIAF2U64     iemAImpl_pminsw_u64, iemAImpl_pmaxsw_u64;
    17811781FNIEMAIMPLMEDIAOPTF2U64  iemAImpl_psllw_u64, iemAImpl_psrlw_u64, iemAImpl_psraw_u64;
    17821782FNIEMAIMPLMEDIAOPTF2U64  iemAImpl_pslld_u64, iemAImpl_psrld_u64, iemAImpl_psrad_u64;
     
    18101810FNIEMAIMPLMEDIAF2U128    iemAImpl_pmaxud_u128, iemAImpl_pmaxud_u128_fallback;
    18111811FNIEMAIMPLMEDIAF2U128    iemAImpl_pmaxuw_u128, iemAImpl_pmaxuw_u128_fallback;
     1812FNIEMAIMPLMEDIAF2U128    iemAImpl_pmaxsb_u128, iemAImpl_pmaxsb_u128_fallback;
     1813FNIEMAIMPLMEDIAF2U128    iemAImpl_pmaxsw_u128;
     1814FNIEMAIMPLMEDIAF2U128    iemAImpl_pmaxsd_u128, iemAImpl_pmaxsd_u128_fallback;
    18121815FNIEMAIMPLMEDIAOPTF2U128 iemAImpl_packsswb_u128, iemAImpl_packuswb_u128;
    18131816FNIEMAIMPLMEDIAOPTF2U128 iemAImpl_packssdw_u128, iemAImpl_packusdw_u128;
     
    18461849FNIEMAIMPLMEDIAF3U128    iemAImpl_vpmaxuw_u128,    iemAImpl_vpmaxuw_u128_fallback;
    18471850FNIEMAIMPLMEDIAF3U128    iemAImpl_vpmaxud_u128,    iemAImpl_vpmaxud_u128_fallback;
     1851FNIEMAIMPLMEDIAF3U128    iemAImpl_vpmaxsb_u128,    iemAImpl_vpmaxsb_u128_fallback;
     1852FNIEMAIMPLMEDIAF3U128    iemAImpl_vpmaxsw_u128,    iemAImpl_vpmaxsw_u128_fallback;
     1853FNIEMAIMPLMEDIAF3U128    iemAImpl_vpmaxsd_u128,    iemAImpl_vpmaxsd_u128_fallback;
    18481854FNIEMAIMPLMEDIAOPTF3U128 iemAImpl_vpacksswb_u128,  iemAImpl_vpacksswb_u128_fallback;
    18491855FNIEMAIMPLMEDIAOPTF3U128 iemAImpl_vpackssdw_u128,  iemAImpl_vpackssdw_u128_fallback;
     
    18811887FNIEMAIMPLMEDIAF3U256    iemAImpl_vpmaxuw_u256,    iemAImpl_vpmaxuw_u256_fallback;
    18821888FNIEMAIMPLMEDIAF3U256    iemAImpl_vpmaxud_u256,    iemAImpl_vpmaxud_u256_fallback;
     1889FNIEMAIMPLMEDIAF3U256    iemAImpl_vpmaxsb_u256,    iemAImpl_vpmaxsb_u256_fallback;
     1890FNIEMAIMPLMEDIAF3U256    iemAImpl_vpmaxsw_u256,    iemAImpl_vpmaxsw_u256_fallback;
     1891FNIEMAIMPLMEDIAF3U256    iemAImpl_vpmaxsd_u256,    iemAImpl_vpmaxsd_u256_fallback;
    18831892FNIEMAIMPLMEDIAOPTF3U256 iemAImpl_vpacksswb_u256,  iemAImpl_vpacksswb_u256_fallback;
    18841893FNIEMAIMPLMEDIAOPTF3U256 iemAImpl_vpackssdw_u256,  iemAImpl_vpackssdw_u256_fallback;
  • trunk/src/VBox/VMM/testcase/tstIEMCheckMc.cpp

    r96007 r96010  
    439439
    440440#define iemAImpl_pmaxub_u64             NULL
     441#define iemAImpl_pmaxsw_u64             NULL
    441442#define iemAImpl_pminub_u64             NULL
    442443#define iemAImpl_pminsw_u64             NULL
    443444
    444445#define iemAImpl_pmaxub_u128            NULL
     446#define iemAImpl_pmaxsw_u128            NULL
    445447#define iemAImpl_pminub_u128            NULL
    446448#define iemAImpl_pminsw_u128            NULL
Note: See TracChangeset for help on using the changeset viewer.

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