VirtualBox

Changeset 95449 in vbox for trunk/src/VBox


Ignore:
Timestamp:
Jun 30, 2022 8:24:25 AM (3 years ago)
Author:
vboxsync
Message:

VMM/IEM: [v]pcmpeq[bwd] and [v]pcmpgt[bwd]. bugref:9898

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

Legend:

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

    r95441 r95449  
    36043604IEMIMPL_MEDIA_F2 pcmpeqw
    36053605IEMIMPL_MEDIA_F2 pcmpeqd
     3606IEMIMPL_MEDIA_F2 pcmpgtb
     3607IEMIMPL_MEDIA_F2 pcmpgtw
     3608IEMIMPL_MEDIA_F2 pcmpgtd
    36063609
    36073610
     
    38403843IEMIMPL_MEDIA_F3 vpor
    38413844IEMIMPL_MEDIA_F3 vpxor
    3842 
     3845IEMIMPL_MEDIA_F3 vpcmpeqb
     3846IEMIMPL_MEDIA_F3 vpcmpeqw
     3847IEMIMPL_MEDIA_F3 vpcmpeqd
     3848IEMIMPL_MEDIA_F3 vpcmpgtb
     3849IEMIMPL_MEDIA_F3 vpcmpgtw
     3850IEMIMPL_MEDIA_F3 vpcmpgtd
     3851
  • trunk/src/VBox/VMM/VMMAll/IEMAllAImplC.cpp

    r95441 r95449  
    70287028#endif /* IEM_WITH_VEX */
    70297029
    7030 #ifdef  IEM_WITHOUT_ASSEMBLY
    7031 
    7032 IEM_DECL_IMPL_DEF(void, iemAImpl_pcmpeqb_u64,(PCX86FXSTATE pFpuState, uint64_t *pu64Dst, uint64_t const *pu64Src))
    7033 {
    7034     RT_NOREF(pFpuState, pu64Dst, pu64Src);
    7035     AssertReleaseFailed();
    7036 }
    7037 
    7038 
    7039 IEM_DECL_IMPL_DEF(void, iemAImpl_pcmpeqb_u128,(PCX86FXSTATE pFpuState, PRTUINT128U pu128Dst, PCRTUINT128U pu128Src))
    7040 {
    7041     RT_NOREF(pFpuState, pu128Dst, pu128Src);
    7042     AssertReleaseFailed();
    7043 }
    7044 
    7045 
    7046 IEM_DECL_IMPL_DEF(void, iemAImpl_pcmpeqw_u64,(PCX86FXSTATE pFpuState, uint64_t *pu64Dst, uint64_t const *pu64Src))
    7047 {
    7048     RT_NOREF(pFpuState, pu64Dst, pu64Src);
    7049     AssertReleaseFailed();
    7050 }
    7051 
    7052 
    7053 IEM_DECL_IMPL_DEF(void, iemAImpl_pcmpeqw_u128,(PCX86FXSTATE pFpuState, PRTUINT128U pu128Dst, PCRTUINT128U pu128Src))
    7054 {
    7055     RT_NOREF(pFpuState, pu128Dst, pu128Src);
    7056     AssertReleaseFailed();
    7057 }
    7058 
    7059 
    7060 IEM_DECL_IMPL_DEF(void, iemAImpl_pcmpeqd_u64,(PCX86FXSTATE pFpuState, uint64_t *pu64Dst, uint64_t const *pu64Src))
    7061 {
    7062     RT_NOREF(pFpuState, pu64Dst, pu64Src);
    7063     AssertReleaseFailed();
    7064 }
    7065 
    7066 
    7067 IEM_DECL_IMPL_DEF(void, iemAImpl_pcmpeqd_u128,(PCX86FXSTATE pFpuState, PRTUINT128U pu128Dst, PCRTUINT128U pu128Src))
    7068 {
    7069     RT_NOREF(pFpuState, pu128Dst, pu128Src);
    7070     AssertReleaseFailed();
    7071 }
    7072 
    7073 #endif /* IEM_WITHOUT_ASSEMBLY */
    7074 
    70757030
    70767031/*
     
    72397194
    72407195/*
     7196 * PCMPEQB / VPCMPEQB
     7197 */
     7198#ifdef IEM_WITHOUT_ASSEMBLY
     7199
     7200IEM_DECL_IMPL_DEF(void, iemAImpl_pcmpeqb_u64,(PCX86FXSTATE pFpuState, uint64_t *puDst, uint64_t const *puSrc))
     7201{
     7202    RT_NOREF(pFpuState);
     7203    RTUINT64U uSrc1 = { *puDst };
     7204    RTUINT64U uSrc2 = { *puSrc };
     7205    RTUINT64U uDst;
     7206    uDst.au8[0] = uSrc1.au8[0] == uSrc2.au8[0] ? 0xff : 0;
     7207    uDst.au8[1] = uSrc1.au8[1] == uSrc2.au8[1] ? 0xff : 0;
     7208    uDst.au8[2] = uSrc1.au8[2] == uSrc2.au8[2] ? 0xff : 0;
     7209    uDst.au8[3] = uSrc1.au8[3] == uSrc2.au8[3] ? 0xff : 0;
     7210    uDst.au8[4] = uSrc1.au8[4] == uSrc2.au8[4] ? 0xff : 0;
     7211    uDst.au8[5] = uSrc1.au8[5] == uSrc2.au8[5] ? 0xff : 0;
     7212    uDst.au8[6] = uSrc1.au8[6] == uSrc2.au8[6] ? 0xff : 0;
     7213    uDst.au8[7] = uSrc1.au8[7] == uSrc2.au8[7] ? 0xff : 0;
     7214    *puDst = uDst.u;
     7215}
     7216
     7217
     7218IEM_DECL_IMPL_DEF(void, iemAImpl_pcmpeqb_u128,(PCX86FXSTATE pFpuState, PRTUINT128U puDst, PCRTUINT128U puSrc))
     7219{
     7220    RT_NOREF(pFpuState);
     7221    RTUINT128U uSrc1 = *puDst;
     7222    puDst->au8[0]  = uSrc1.au8[0]  == puSrc->au8[0]  ? UINT8_MAX : 0;
     7223    puDst->au8[1]  = uSrc1.au8[1]  == puSrc->au8[1]  ? UINT8_MAX : 0;
     7224    puDst->au8[2]  = uSrc1.au8[2]  == puSrc->au8[2]  ? UINT8_MAX : 0;
     7225    puDst->au8[3]  = uSrc1.au8[3]  == puSrc->au8[3]  ? UINT8_MAX : 0;
     7226    puDst->au8[4]  = uSrc1.au8[4]  == puSrc->au8[4]  ? UINT8_MAX : 0;
     7227    puDst->au8[5]  = uSrc1.au8[5]  == puSrc->au8[5]  ? UINT8_MAX : 0;
     7228    puDst->au8[6]  = uSrc1.au8[6]  == puSrc->au8[6]  ? UINT8_MAX : 0;
     7229    puDst->au8[7]  = uSrc1.au8[7]  == puSrc->au8[7]  ? UINT8_MAX : 0;
     7230    puDst->au8[8]  = uSrc1.au8[8]  == puSrc->au8[8]  ? UINT8_MAX : 0;
     7231    puDst->au8[9]  = uSrc1.au8[9]  == puSrc->au8[9]  ? UINT8_MAX : 0;
     7232    puDst->au8[10] = uSrc1.au8[10] == puSrc->au8[10] ? UINT8_MAX : 0;
     7233    puDst->au8[11] = uSrc1.au8[11] == puSrc->au8[11] ? UINT8_MAX : 0;
     7234    puDst->au8[12] = uSrc1.au8[12] == puSrc->au8[12] ? UINT8_MAX : 0;
     7235    puDst->au8[13] = uSrc1.au8[13] == puSrc->au8[13] ? UINT8_MAX : 0;
     7236    puDst->au8[14] = uSrc1.au8[14] == puSrc->au8[14] ? UINT8_MAX : 0;
     7237    puDst->au8[15] = uSrc1.au8[15] == puSrc->au8[15] ? UINT8_MAX : 0;
     7238}
     7239
     7240#endif
     7241
     7242IEM_DECL_IMPL_DEF(void, iemAImpl_vpcmpeqb_u128_fallback,(PX86XSAVEAREA pExtState, PRTUINT128U puDst,
     7243                                                         PCRTUINT128U puSrc1, PCRTUINT128U puSrc2))
     7244{
     7245    RT_NOREF(pExtState);
     7246    puDst->au8[0]  = puSrc1->au8[0]  == puSrc2->au8[0]  ? UINT8_MAX : 0;
     7247    puDst->au8[1]  = puSrc1->au8[1]  == puSrc2->au8[1]  ? UINT8_MAX : 0;
     7248    puDst->au8[2]  = puSrc1->au8[2]  == puSrc2->au8[2]  ? UINT8_MAX : 0;
     7249    puDst->au8[3]  = puSrc1->au8[3]  == puSrc2->au8[3]  ? UINT8_MAX : 0;
     7250    puDst->au8[4]  = puSrc1->au8[4]  == puSrc2->au8[4]  ? UINT8_MAX : 0;
     7251    puDst->au8[5]  = puSrc1->au8[5]  == puSrc2->au8[5]  ? UINT8_MAX : 0;
     7252    puDst->au8[6]  = puSrc1->au8[6]  == puSrc2->au8[6]  ? UINT8_MAX : 0;
     7253    puDst->au8[7]  = puSrc1->au8[7]  == puSrc2->au8[7]  ? UINT8_MAX : 0;
     7254    puDst->au8[8]  = puSrc1->au8[8]  == puSrc2->au8[8]  ? UINT8_MAX : 0;
     7255    puDst->au8[9]  = puSrc1->au8[9]  == puSrc2->au8[9]  ? UINT8_MAX : 0;
     7256    puDst->au8[10] = puSrc1->au8[10] == puSrc2->au8[10] ? UINT8_MAX : 0;
     7257    puDst->au8[11] = puSrc1->au8[11] == puSrc2->au8[11] ? UINT8_MAX : 0;
     7258    puDst->au8[12] = puSrc1->au8[12] == puSrc2->au8[12] ? UINT8_MAX : 0;
     7259    puDst->au8[13] = puSrc1->au8[13] == puSrc2->au8[13] ? UINT8_MAX : 0;
     7260    puDst->au8[14] = puSrc1->au8[14] == puSrc2->au8[14] ? UINT8_MAX : 0;
     7261    puDst->au8[15] = puSrc1->au8[15] == puSrc2->au8[15] ? UINT8_MAX : 0;
     7262}
     7263
     7264IEM_DECL_IMPL_DEF(void, iemAImpl_vpcmpeqb_u256_fallback,(PX86XSAVEAREA pExtState, PRTUINT256U puDst,
     7265                                                         PCRTUINT256U puSrc1, PCRTUINT256U puSrc2))
     7266{
     7267    RT_NOREF(pExtState);
     7268    puDst->au8[0]  = puSrc1->au8[0]  == puSrc2->au8[0]  ? UINT8_MAX : 0;
     7269    puDst->au8[1]  = puSrc1->au8[1]  == puSrc2->au8[1]  ? UINT8_MAX : 0;
     7270    puDst->au8[2]  = puSrc1->au8[2]  == puSrc2->au8[2]  ? UINT8_MAX : 0;
     7271    puDst->au8[3]  = puSrc1->au8[3]  == puSrc2->au8[3]  ? UINT8_MAX : 0;
     7272    puDst->au8[4]  = puSrc1->au8[4]  == puSrc2->au8[4]  ? UINT8_MAX : 0;
     7273    puDst->au8[5]  = puSrc1->au8[5]  == puSrc2->au8[5]  ? UINT8_MAX : 0;
     7274    puDst->au8[6]  = puSrc1->au8[6]  == puSrc2->au8[6]  ? UINT8_MAX : 0;
     7275    puDst->au8[7]  = puSrc1->au8[7]  == puSrc2->au8[7]  ? UINT8_MAX : 0;
     7276    puDst->au8[8]  = puSrc1->au8[8]  == puSrc2->au8[8]  ? UINT8_MAX : 0;
     7277    puDst->au8[9]  = puSrc1->au8[9]  == puSrc2->au8[9]  ? UINT8_MAX : 0;
     7278    puDst->au8[10] = puSrc1->au8[10] == puSrc2->au8[10] ? UINT8_MAX : 0;
     7279    puDst->au8[11] = puSrc1->au8[11] == puSrc2->au8[11] ? UINT8_MAX : 0;
     7280    puDst->au8[12] = puSrc1->au8[12] == puSrc2->au8[12] ? UINT8_MAX : 0;
     7281    puDst->au8[13] = puSrc1->au8[13] == puSrc2->au8[13] ? UINT8_MAX : 0;
     7282    puDst->au8[14] = puSrc1->au8[14] == puSrc2->au8[14] ? UINT8_MAX : 0;
     7283    puDst->au8[15] = puSrc1->au8[15] == puSrc2->au8[15] ? UINT8_MAX : 0;
     7284    puDst->au8[16] = puSrc1->au8[16] == puSrc2->au8[16] ? UINT8_MAX : 0;
     7285    puDst->au8[17] = puSrc1->au8[17] == puSrc2->au8[17] ? UINT8_MAX : 0;
     7286    puDst->au8[18] = puSrc1->au8[18] == puSrc2->au8[18] ? UINT8_MAX : 0;
     7287    puDst->au8[19] = puSrc1->au8[19] == puSrc2->au8[19] ? UINT8_MAX : 0;
     7288    puDst->au8[20] = puSrc1->au8[20] == puSrc2->au8[20] ? UINT8_MAX : 0;
     7289    puDst->au8[21] = puSrc1->au8[21] == puSrc2->au8[21] ? UINT8_MAX : 0;
     7290    puDst->au8[22] = puSrc1->au8[22] == puSrc2->au8[22] ? UINT8_MAX : 0;
     7291    puDst->au8[23] = puSrc1->au8[23] == puSrc2->au8[23] ? UINT8_MAX : 0;
     7292    puDst->au8[24] = puSrc1->au8[24] == puSrc2->au8[24] ? UINT8_MAX : 0;
     7293    puDst->au8[25] = puSrc1->au8[25] == puSrc2->au8[25] ? UINT8_MAX : 0;
     7294    puDst->au8[26] = puSrc1->au8[26] == puSrc2->au8[26] ? UINT8_MAX : 0;
     7295    puDst->au8[27] = puSrc1->au8[27] == puSrc2->au8[27] ? UINT8_MAX : 0;
     7296    puDst->au8[28] = puSrc1->au8[28] == puSrc2->au8[28] ? UINT8_MAX : 0;
     7297    puDst->au8[29] = puSrc1->au8[29] == puSrc2->au8[29] ? UINT8_MAX : 0;
     7298    puDst->au8[30] = puSrc1->au8[30] == puSrc2->au8[30] ? UINT8_MAX : 0;
     7299    puDst->au8[31] = puSrc1->au8[31] == puSrc2->au8[31] ? UINT8_MAX : 0;
     7300}
     7301
     7302
     7303/*
     7304 * PCMPEQW / VPCMPEQW
     7305 */
     7306#ifdef IEM_WITHOUT_ASSEMBLY
     7307
     7308IEM_DECL_IMPL_DEF(void, iemAImpl_pcmpeqw_u64,(PCX86FXSTATE pFpuState, uint64_t *puDst, uint64_t const *puSrc))
     7309{
     7310    RT_NOREF(pFpuState);
     7311    RTUINT64U uSrc1 = { *puDst };
     7312    RTUINT64U uSrc2 = { *puSrc };
     7313    RTUINT64U uDst;
     7314    uDst.au16[0] = uSrc1.au16[0] == uSrc2.au16[0] ? UINT16_MAX : 0;
     7315    uDst.au16[1] = uSrc1.au16[1] == uSrc2.au16[1] ? UINT16_MAX : 0;
     7316    uDst.au16[2] = uSrc1.au16[2] == uSrc2.au16[2] ? UINT16_MAX : 0;
     7317    uDst.au16[3] = uSrc1.au16[3] == uSrc2.au16[3] ? UINT16_MAX : 0;
     7318    *puDst = uDst.u;
     7319}
     7320
     7321
     7322IEM_DECL_IMPL_DEF(void, iemAImpl_pcmpeqw_u128,(PCX86FXSTATE pFpuState, PRTUINT128U puDst, PCRTUINT128U puSrc))
     7323{
     7324    RT_NOREF(pFpuState);
     7325    RTUINT128U uSrc1 = *puDst;
     7326    puDst->au16[0] = uSrc1.au16[0] == puSrc->au16[0] ? UINT16_MAX : 0;
     7327    puDst->au16[1] = uSrc1.au16[1] == puSrc->au16[1] ? UINT16_MAX : 0;
     7328    puDst->au16[2] = uSrc1.au16[2] == puSrc->au16[2] ? UINT16_MAX : 0;
     7329    puDst->au16[3] = uSrc1.au16[3] == puSrc->au16[3] ? UINT16_MAX : 0;
     7330    puDst->au16[4] = uSrc1.au16[4] == puSrc->au16[4] ? UINT16_MAX : 0;
     7331    puDst->au16[5] = uSrc1.au16[5] == puSrc->au16[5] ? UINT16_MAX : 0;
     7332    puDst->au16[6] = uSrc1.au16[6] == puSrc->au16[6] ? UINT16_MAX : 0;
     7333    puDst->au16[7] = uSrc1.au16[7] == puSrc->au16[7] ? UINT16_MAX : 0;
     7334}
     7335
     7336#endif
     7337
     7338IEM_DECL_IMPL_DEF(void, iemAImpl_vpcmpeqw_u128_fallback,(PX86XSAVEAREA pExtState, PRTUINT128U puDst,
     7339                                                         PCRTUINT128U puSrc1, PCRTUINT128U puSrc2))
     7340{
     7341    RT_NOREF(pExtState);
     7342    puDst->au16[0] = puSrc1->au16[0] == puSrc2->au16[0] ? UINT16_MAX : 0;
     7343    puDst->au16[1] = puSrc1->au16[1] == puSrc2->au16[1] ? UINT16_MAX : 0;
     7344    puDst->au16[2] = puSrc1->au16[2] == puSrc2->au16[2] ? UINT16_MAX : 0;
     7345    puDst->au16[3] = puSrc1->au16[3] == puSrc2->au16[3] ? UINT16_MAX : 0;
     7346    puDst->au16[4] = puSrc1->au16[4] == puSrc2->au16[4] ? UINT16_MAX : 0;
     7347    puDst->au16[5] = puSrc1->au16[5] == puSrc2->au16[5] ? UINT16_MAX : 0;
     7348    puDst->au16[6] = puSrc1->au16[6] == puSrc2->au16[6] ? UINT16_MAX : 0;
     7349    puDst->au16[7] = puSrc1->au16[7] == puSrc2->au16[7] ? UINT16_MAX : 0;
     7350}
     7351
     7352IEM_DECL_IMPL_DEF(void, iemAImpl_vpcmpeqw_u256_fallback,(PX86XSAVEAREA pExtState, PRTUINT256U puDst,
     7353                                                         PCRTUINT256U puSrc1, PCRTUINT256U puSrc2))
     7354{
     7355    RT_NOREF(pExtState);
     7356    puDst->au16[0]  = puSrc1->au16[0]  == puSrc2->au16[0]  ? UINT16_MAX : 0;
     7357    puDst->au16[1]  = puSrc1->au16[1]  == puSrc2->au16[1]  ? UINT16_MAX : 0;
     7358    puDst->au16[2]  = puSrc1->au16[2]  == puSrc2->au16[2]  ? UINT16_MAX : 0;
     7359    puDst->au16[3]  = puSrc1->au16[3]  == puSrc2->au16[3]  ? UINT16_MAX : 0;
     7360    puDst->au16[4]  = puSrc1->au16[4]  == puSrc2->au16[4]  ? UINT16_MAX : 0;
     7361    puDst->au16[5]  = puSrc1->au16[5]  == puSrc2->au16[5]  ? UINT16_MAX : 0;
     7362    puDst->au16[6]  = puSrc1->au16[6]  == puSrc2->au16[6]  ? UINT16_MAX : 0;
     7363    puDst->au16[7]  = puSrc1->au16[7]  == puSrc2->au16[7]  ? UINT16_MAX : 0;
     7364    puDst->au16[8]  = puSrc1->au16[8]  == puSrc2->au16[8]  ? UINT16_MAX : 0;
     7365    puDst->au16[9]  = puSrc1->au16[9]  == puSrc2->au16[9]  ? UINT16_MAX : 0;
     7366    puDst->au16[10] = puSrc1->au16[10] == puSrc2->au16[10] ? UINT16_MAX : 0;
     7367    puDst->au16[11] = puSrc1->au16[11] == puSrc2->au16[11] ? UINT16_MAX : 0;
     7368    puDst->au16[12] = puSrc1->au16[12] == puSrc2->au16[12] ? UINT16_MAX : 0;
     7369    puDst->au16[13] = puSrc1->au16[13] == puSrc2->au16[13] ? UINT16_MAX : 0;
     7370    puDst->au16[14] = puSrc1->au16[14] == puSrc2->au16[14] ? UINT16_MAX : 0;
     7371    puDst->au16[15] = puSrc1->au16[15] == puSrc2->au16[15] ? UINT16_MAX : 0;
     7372}
     7373
     7374
     7375/*
     7376 * PCMPEQD / VPCMPEQD.
     7377 */
     7378#ifdef IEM_WITHOUT_ASSEMBLY
     7379
     7380IEM_DECL_IMPL_DEF(void, iemAImpl_pcmpeqd_u64,(PCX86FXSTATE pFpuState, uint64_t *puDst, uint64_t const *puSrc))
     7381{
     7382    RT_NOREF(pFpuState);
     7383    RTUINT64U uSrc1 = { *puDst };
     7384    RTUINT64U uSrc2 = { *puSrc };
     7385    RTUINT64U uDst;
     7386    uDst.au32[0] = uSrc1.au32[0] == uSrc2.au32[0] ? UINT32_MAX : 0;
     7387    uDst.au32[1] = uSrc1.au32[1] == uSrc2.au32[1] ? UINT32_MAX : 0;
     7388    *puDst = uDst.u;
     7389}
     7390
     7391
     7392IEM_DECL_IMPL_DEF(void, iemAImpl_pcmpeqd_u128,(PCX86FXSTATE pFpuState, PRTUINT128U puDst, PCRTUINT128U puSrc))
     7393{
     7394    RT_NOREF(pFpuState);
     7395    RTUINT128U uSrc1 = *puDst;
     7396    puDst->au32[0] = uSrc1.au32[0] == puSrc->au32[0] ? UINT32_MAX : 0;
     7397    puDst->au32[1] = uSrc1.au32[1] == puSrc->au32[1] ? UINT32_MAX : 0;
     7398    puDst->au32[2] = uSrc1.au32[2] == puSrc->au32[2] ? UINT32_MAX : 0;
     7399    puDst->au32[3] = uSrc1.au32[3] == puSrc->au32[3] ? UINT32_MAX : 0;
     7400}
     7401
     7402#endif /* IEM_WITHOUT_ASSEMBLY */
     7403
     7404IEM_DECL_IMPL_DEF(void, iemAImpl_vpcmpeqd_u128_fallback,(PX86XSAVEAREA pExtState, PRTUINT128U puDst,
     7405                                                         PCRTUINT128U puSrc1, PCRTUINT128U puSrc2))
     7406{
     7407    RT_NOREF(pExtState);
     7408    puDst->au32[0] = puSrc1->au32[0] == puSrc2->au32[0] ? UINT32_MAX : 0;
     7409    puDst->au32[1] = puSrc1->au32[1] == puSrc2->au32[1] ? UINT32_MAX : 0;
     7410    puDst->au32[2] = puSrc1->au32[2] == puSrc2->au32[2] ? UINT32_MAX : 0;
     7411    puDst->au32[3] = puSrc1->au32[3] == puSrc2->au32[3] ? UINT32_MAX : 0;
     7412}
     7413
     7414IEM_DECL_IMPL_DEF(void, iemAImpl_vpcmpeqd_u256_fallback,(PX86XSAVEAREA pExtState, PRTUINT256U puDst,
     7415                                                         PCRTUINT256U puSrc1, PCRTUINT256U puSrc2))
     7416{
     7417    RT_NOREF(pExtState);
     7418    puDst->au32[0] = puSrc1->au32[0] == puSrc2->au32[0] ? UINT32_MAX : 0;
     7419    puDst->au32[1] = puSrc1->au32[1] == puSrc2->au32[1] ? UINT32_MAX : 0;
     7420    puDst->au32[2] = puSrc1->au32[2] == puSrc2->au32[2] ? UINT32_MAX : 0;
     7421    puDst->au32[3] = puSrc1->au32[3] == puSrc2->au32[3] ? UINT32_MAX : 0;
     7422    puDst->au32[4] = puSrc1->au32[4] == puSrc2->au32[4] ? UINT32_MAX : 0;
     7423    puDst->au32[5] = puSrc1->au32[5] == puSrc2->au32[5] ? UINT32_MAX : 0;
     7424    puDst->au32[6] = puSrc1->au32[6] == puSrc2->au32[6] ? UINT32_MAX : 0;
     7425    puDst->au32[7] = puSrc1->au32[7] == puSrc2->au32[7] ? UINT32_MAX : 0;
     7426}
     7427
     7428
     7429/*
     7430 * PCMPGTB / VPCMPGTB
     7431 */
     7432#ifdef IEM_WITHOUT_ASSEMBLY
     7433
     7434IEM_DECL_IMPL_DEF(void, iemAImpl_pcmpgtb_u64,(PCX86FXSTATE pFpuState, uint64_t *puDst, uint64_t const *puSrc))
     7435{
     7436    RT_NOREF(pFpuState);
     7437    RTUINT64U uSrc1 = { *puDst };
     7438    RTUINT64U uSrc2 = { *puSrc };
     7439    RTUINT64U uDst;
     7440    uDst.au8[0] = uSrc1.ai8[0] > uSrc2.ai8[0] ? UINT8_MAX : 0;
     7441    uDst.au8[1] = uSrc1.ai8[1] > uSrc2.ai8[1] ? UINT8_MAX : 0;
     7442    uDst.au8[2] = uSrc1.ai8[2] > uSrc2.ai8[2] ? UINT8_MAX : 0;
     7443    uDst.au8[3] = uSrc1.ai8[3] > uSrc2.ai8[3] ? UINT8_MAX : 0;
     7444    uDst.au8[4] = uSrc1.ai8[4] > uSrc2.ai8[4] ? UINT8_MAX : 0;
     7445    uDst.au8[5] = uSrc1.ai8[5] > uSrc2.ai8[5] ? UINT8_MAX : 0;
     7446    uDst.au8[6] = uSrc1.ai8[6] > uSrc2.ai8[6] ? UINT8_MAX : 0;
     7447    uDst.au8[7] = uSrc1.ai8[7] > uSrc2.ai8[7] ? UINT8_MAX : 0;
     7448    *puDst = uDst.u;
     7449}
     7450
     7451
     7452IEM_DECL_IMPL_DEF(void, iemAImpl_pcmpgtb_u128,(PCX86FXSTATE pFpuState, PRTUINT128U puDst, PCRTUINT128U puSrc))
     7453{
     7454    RT_NOREF(pFpuState);
     7455    RTUINT128U uSrc1 = *puDst;
     7456    puDst->au8[0]  = uSrc1.ai8[0]  > puSrc->ai8[0]  ? UINT8_MAX : 0;
     7457    puDst->au8[1]  = uSrc1.ai8[1]  > puSrc->ai8[1]  ? UINT8_MAX : 0;
     7458    puDst->au8[2]  = uSrc1.ai8[2]  > puSrc->ai8[2]  ? UINT8_MAX : 0;
     7459    puDst->au8[3]  = uSrc1.ai8[3]  > puSrc->ai8[3]  ? UINT8_MAX : 0;
     7460    puDst->au8[4]  = uSrc1.ai8[4]  > puSrc->ai8[4]  ? UINT8_MAX : 0;
     7461    puDst->au8[5]  = uSrc1.ai8[5]  > puSrc->ai8[5]  ? UINT8_MAX : 0;
     7462    puDst->au8[6]  = uSrc1.ai8[6]  > puSrc->ai8[6]  ? UINT8_MAX : 0;
     7463    puDst->au8[7]  = uSrc1.ai8[7]  > puSrc->ai8[7]  ? UINT8_MAX : 0;
     7464    puDst->au8[8]  = uSrc1.ai8[8]  > puSrc->ai8[8]  ? UINT8_MAX : 0;
     7465    puDst->au8[9]  = uSrc1.ai8[9]  > puSrc->ai8[9]  ? UINT8_MAX : 0;
     7466    puDst->au8[10] = uSrc1.ai8[10] > puSrc->ai8[10] ? UINT8_MAX : 0;
     7467    puDst->au8[11] = uSrc1.ai8[11] > puSrc->ai8[11] ? UINT8_MAX : 0;
     7468    puDst->au8[12] = uSrc1.ai8[12] > puSrc->ai8[12] ? UINT8_MAX : 0;
     7469    puDst->au8[13] = uSrc1.ai8[13] > puSrc->ai8[13] ? UINT8_MAX : 0;
     7470    puDst->au8[14] = uSrc1.ai8[14] > puSrc->ai8[14] ? UINT8_MAX : 0;
     7471    puDst->au8[15] = uSrc1.ai8[15] > puSrc->ai8[15] ? UINT8_MAX : 0;
     7472}
     7473
     7474#endif
     7475
     7476IEM_DECL_IMPL_DEF(void, iemAImpl_vpcmpgtb_u128_fallback,(PX86XSAVEAREA pExtState, PRTUINT128U puDst,
     7477                                                         PCRTUINT128U puSrc1, PCRTUINT128U puSrc2))
     7478{
     7479    RT_NOREF(pExtState);
     7480    puDst->au8[0]  = puSrc1->ai8[0]  > puSrc2->ai8[0]  ? UINT8_MAX : 0;
     7481    puDst->au8[1]  = puSrc1->ai8[1]  > puSrc2->ai8[1]  ? UINT8_MAX : 0;
     7482    puDst->au8[2]  = puSrc1->ai8[2]  > puSrc2->ai8[2]  ? UINT8_MAX : 0;
     7483    puDst->au8[3]  = puSrc1->ai8[3]  > puSrc2->ai8[3]  ? UINT8_MAX : 0;
     7484    puDst->au8[4]  = puSrc1->ai8[4]  > puSrc2->ai8[4]  ? UINT8_MAX : 0;
     7485    puDst->au8[5]  = puSrc1->ai8[5]  > puSrc2->ai8[5]  ? UINT8_MAX : 0;
     7486    puDst->au8[6]  = puSrc1->ai8[6]  > puSrc2->ai8[6]  ? UINT8_MAX : 0;
     7487    puDst->au8[7]  = puSrc1->ai8[7]  > puSrc2->ai8[7]  ? UINT8_MAX : 0;
     7488    puDst->au8[8]  = puSrc1->ai8[8]  > puSrc2->ai8[8]  ? UINT8_MAX : 0;
     7489    puDst->au8[9]  = puSrc1->ai8[9]  > puSrc2->ai8[9]  ? UINT8_MAX : 0;
     7490    puDst->au8[10] = puSrc1->ai8[10] > puSrc2->ai8[10] ? UINT8_MAX : 0;
     7491    puDst->au8[11] = puSrc1->ai8[11] > puSrc2->ai8[11] ? UINT8_MAX : 0;
     7492    puDst->au8[12] = puSrc1->ai8[12] > puSrc2->ai8[12] ? UINT8_MAX : 0;
     7493    puDst->au8[13] = puSrc1->ai8[13] > puSrc2->ai8[13] ? UINT8_MAX : 0;
     7494    puDst->au8[14] = puSrc1->ai8[14] > puSrc2->ai8[14] ? UINT8_MAX : 0;
     7495    puDst->au8[15] = puSrc1->ai8[15] > puSrc2->ai8[15] ? UINT8_MAX : 0;
     7496}
     7497
     7498IEM_DECL_IMPL_DEF(void, iemAImpl_vpcmpgtb_u256_fallback,(PX86XSAVEAREA pExtState, PRTUINT256U puDst,
     7499                                                         PCRTUINT256U puSrc1, PCRTUINT256U puSrc2))
     7500{
     7501    RT_NOREF(pExtState);
     7502    puDst->au8[0]  = puSrc1->ai8[0]  > puSrc2->ai8[0]  ? UINT8_MAX : 0;
     7503    puDst->au8[1]  = puSrc1->ai8[1]  > puSrc2->ai8[1]  ? UINT8_MAX : 0;
     7504    puDst->au8[2]  = puSrc1->ai8[2]  > puSrc2->ai8[2]  ? UINT8_MAX : 0;
     7505    puDst->au8[3]  = puSrc1->ai8[3]  > puSrc2->ai8[3]  ? UINT8_MAX : 0;
     7506    puDst->au8[4]  = puSrc1->ai8[4]  > puSrc2->ai8[4]  ? UINT8_MAX : 0;
     7507    puDst->au8[5]  = puSrc1->ai8[5]  > puSrc2->ai8[5]  ? UINT8_MAX : 0;
     7508    puDst->au8[6]  = puSrc1->ai8[6]  > puSrc2->ai8[6]  ? UINT8_MAX : 0;
     7509    puDst->au8[7]  = puSrc1->ai8[7]  > puSrc2->ai8[7]  ? UINT8_MAX : 0;
     7510    puDst->au8[8]  = puSrc1->ai8[8]  > puSrc2->ai8[8]  ? UINT8_MAX : 0;
     7511    puDst->au8[9]  = puSrc1->ai8[9]  > puSrc2->ai8[9]  ? UINT8_MAX : 0;
     7512    puDst->au8[10] = puSrc1->ai8[10] > puSrc2->ai8[10] ? UINT8_MAX : 0;
     7513    puDst->au8[11] = puSrc1->ai8[11] > puSrc2->ai8[11] ? UINT8_MAX : 0;
     7514    puDst->au8[12] = puSrc1->ai8[12] > puSrc2->ai8[12] ? UINT8_MAX : 0;
     7515    puDst->au8[13] = puSrc1->ai8[13] > puSrc2->ai8[13] ? UINT8_MAX : 0;
     7516    puDst->au8[14] = puSrc1->ai8[14] > puSrc2->ai8[14] ? UINT8_MAX : 0;
     7517    puDst->au8[15] = puSrc1->ai8[15] > puSrc2->ai8[15] ? UINT8_MAX : 0;
     7518    puDst->au8[16] = puSrc1->ai8[16] > puSrc2->ai8[16] ? UINT8_MAX : 0;
     7519    puDst->au8[17] = puSrc1->ai8[17] > puSrc2->ai8[17] ? UINT8_MAX : 0;
     7520    puDst->au8[18] = puSrc1->ai8[18] > puSrc2->ai8[18] ? UINT8_MAX : 0;
     7521    puDst->au8[19] = puSrc1->ai8[19] > puSrc2->ai8[19] ? UINT8_MAX : 0;
     7522    puDst->au8[20] = puSrc1->ai8[20] > puSrc2->ai8[20] ? UINT8_MAX : 0;
     7523    puDst->au8[21] = puSrc1->ai8[21] > puSrc2->ai8[21] ? UINT8_MAX : 0;
     7524    puDst->au8[22] = puSrc1->ai8[22] > puSrc2->ai8[22] ? UINT8_MAX : 0;
     7525    puDst->au8[23] = puSrc1->ai8[23] > puSrc2->ai8[23] ? UINT8_MAX : 0;
     7526    puDst->au8[24] = puSrc1->ai8[24] > puSrc2->ai8[24] ? UINT8_MAX : 0;
     7527    puDst->au8[25] = puSrc1->ai8[25] > puSrc2->ai8[25] ? UINT8_MAX : 0;
     7528    puDst->au8[26] = puSrc1->ai8[26] > puSrc2->ai8[26] ? UINT8_MAX : 0;
     7529    puDst->au8[27] = puSrc1->ai8[27] > puSrc2->ai8[27] ? UINT8_MAX : 0;
     7530    puDst->au8[28] = puSrc1->ai8[28] > puSrc2->ai8[28] ? UINT8_MAX : 0;
     7531    puDst->au8[29] = puSrc1->ai8[29] > puSrc2->ai8[29] ? UINT8_MAX : 0;
     7532    puDst->au8[30] = puSrc1->ai8[30] > puSrc2->ai8[30] ? UINT8_MAX : 0;
     7533    puDst->au8[31] = puSrc1->ai8[31] > puSrc2->ai8[31] ? UINT8_MAX : 0;
     7534}
     7535
     7536
     7537/*
     7538 * PCMPGTW / VPCMPGTW
     7539 */
     7540#ifdef IEM_WITHOUT_ASSEMBLY
     7541
     7542IEM_DECL_IMPL_DEF(void, iemAImpl_pcmpgtw_u64,(PCX86FXSTATE pFpuState, uint64_t *puDst, uint64_t const *puSrc))
     7543{
     7544    RT_NOREF(pFpuState);
     7545    RTUINT64U uSrc1 = { *puDst };
     7546    RTUINT64U uSrc2 = { *puSrc };
     7547    RTUINT64U uDst;
     7548    uDst.au16[0] = uSrc1.ai16[0] > uSrc2.ai16[0] ? UINT16_MAX : 0;
     7549    uDst.au16[1] = uSrc1.ai16[1] > uSrc2.ai16[1] ? UINT16_MAX : 0;
     7550    uDst.au16[2] = uSrc1.ai16[2] > uSrc2.ai16[2] ? UINT16_MAX : 0;
     7551    uDst.au16[3] = uSrc1.ai16[3] > uSrc2.ai16[3] ? UINT16_MAX : 0;
     7552    *puDst = uDst.u;
     7553}
     7554
     7555
     7556IEM_DECL_IMPL_DEF(void, iemAImpl_pcmpgtw_u128,(PCX86FXSTATE pFpuState, PRTUINT128U puDst, PCRTUINT128U puSrc))
     7557{
     7558    RT_NOREF(pFpuState);
     7559    RTUINT128U uSrc1 = *puDst;
     7560    puDst->au16[0] = uSrc1.ai16[0] > puSrc->ai16[0] ? UINT16_MAX : 0;
     7561    puDst->au16[1] = uSrc1.ai16[1] > puSrc->ai16[1] ? UINT16_MAX : 0;
     7562    puDst->au16[2] = uSrc1.ai16[2] > puSrc->ai16[2] ? UINT16_MAX : 0;
     7563    puDst->au16[3] = uSrc1.ai16[3] > puSrc->ai16[3] ? UINT16_MAX : 0;
     7564    puDst->au16[4] = uSrc1.ai16[4] > puSrc->ai16[4] ? UINT16_MAX : 0;
     7565    puDst->au16[5] = uSrc1.ai16[5] > puSrc->ai16[5] ? UINT16_MAX : 0;
     7566    puDst->au16[6] = uSrc1.ai16[6] > puSrc->ai16[6] ? UINT16_MAX : 0;
     7567    puDst->au16[7] = uSrc1.ai16[7] > puSrc->ai16[7] ? UINT16_MAX : 0;
     7568}
     7569
     7570#endif
     7571
     7572IEM_DECL_IMPL_DEF(void, iemAImpl_vpcmpgtw_u128_fallback,(PX86XSAVEAREA pExtState, PRTUINT128U puDst,
     7573                                                         PCRTUINT128U puSrc1, PCRTUINT128U puSrc2))
     7574{
     7575    RT_NOREF(pExtState);
     7576    puDst->au16[0] = puSrc1->ai16[0] > puSrc2->ai16[0] ? UINT16_MAX : 0;
     7577    puDst->au16[1] = puSrc1->ai16[1] > puSrc2->ai16[1] ? UINT16_MAX : 0;
     7578    puDst->au16[2] = puSrc1->ai16[2] > puSrc2->ai16[2] ? UINT16_MAX : 0;
     7579    puDst->au16[3] = puSrc1->ai16[3] > puSrc2->ai16[3] ? UINT16_MAX : 0;
     7580    puDst->au16[4] = puSrc1->ai16[4] > puSrc2->ai16[4] ? UINT16_MAX : 0;
     7581    puDst->au16[5] = puSrc1->ai16[5] > puSrc2->ai16[5] ? UINT16_MAX : 0;
     7582    puDst->au16[6] = puSrc1->ai16[6] > puSrc2->ai16[6] ? UINT16_MAX : 0;
     7583    puDst->au16[7] = puSrc1->ai16[7] > puSrc2->ai16[7] ? UINT16_MAX : 0;
     7584}
     7585
     7586IEM_DECL_IMPL_DEF(void, iemAImpl_vpcmpgtw_u256_fallback,(PX86XSAVEAREA pExtState, PRTUINT256U puDst,
     7587                                                         PCRTUINT256U puSrc1, PCRTUINT256U puSrc2))
     7588{
     7589    RT_NOREF(pExtState);
     7590    puDst->au16[0]  = puSrc1->ai16[0]  > puSrc2->ai16[0]  ? UINT16_MAX : 0;
     7591    puDst->au16[1]  = puSrc1->ai16[1]  > puSrc2->ai16[1]  ? UINT16_MAX : 0;
     7592    puDst->au16[2]  = puSrc1->ai16[2]  > puSrc2->ai16[2]  ? UINT16_MAX : 0;
     7593    puDst->au16[3]  = puSrc1->ai16[3]  > puSrc2->ai16[3]  ? UINT16_MAX : 0;
     7594    puDst->au16[4]  = puSrc1->ai16[4]  > puSrc2->ai16[4]  ? UINT16_MAX : 0;
     7595    puDst->au16[5]  = puSrc1->ai16[5]  > puSrc2->ai16[5]  ? UINT16_MAX : 0;
     7596    puDst->au16[6]  = puSrc1->ai16[6]  > puSrc2->ai16[6]  ? UINT16_MAX : 0;
     7597    puDst->au16[7]  = puSrc1->ai16[7]  > puSrc2->ai16[7]  ? UINT16_MAX : 0;
     7598    puDst->au16[8]  = puSrc1->ai16[8]  > puSrc2->ai16[8]  ? UINT16_MAX : 0;
     7599    puDst->au16[9]  = puSrc1->ai16[9]  > puSrc2->ai16[9]  ? UINT16_MAX : 0;
     7600    puDst->au16[10] = puSrc1->ai16[10] > puSrc2->ai16[10] ? UINT16_MAX : 0;
     7601    puDst->au16[11] = puSrc1->ai16[11] > puSrc2->ai16[11] ? UINT16_MAX : 0;
     7602    puDst->au16[12] = puSrc1->ai16[12] > puSrc2->ai16[12] ? UINT16_MAX : 0;
     7603    puDst->au16[13] = puSrc1->ai16[13] > puSrc2->ai16[13] ? UINT16_MAX : 0;
     7604    puDst->au16[14] = puSrc1->ai16[14] > puSrc2->ai16[14] ? UINT16_MAX : 0;
     7605    puDst->au16[15] = puSrc1->ai16[15] > puSrc2->ai16[15] ? UINT16_MAX : 0;
     7606}
     7607
     7608
     7609/*
     7610 * PCMPGTD / VPCMPGTD.
     7611 */
     7612#ifdef IEM_WITHOUT_ASSEMBLY
     7613
     7614IEM_DECL_IMPL_DEF(void, iemAImpl_pcmpgtd_u64,(PCX86FXSTATE pFpuState, uint64_t *puDst, uint64_t const *puSrc))
     7615{
     7616    RT_NOREF(pFpuState);
     7617    RTUINT64U uSrc1 = { *puDst };
     7618    RTUINT64U uSrc2 = { *puSrc };
     7619    RTUINT64U uDst;
     7620    uDst.au32[0] = uSrc1.ai32[0] > uSrc2.ai32[0] ? UINT32_MAX : 0;
     7621    uDst.au32[1] = uSrc1.ai32[1] > uSrc2.ai32[1] ? UINT32_MAX : 0;
     7622    *puDst = uDst.u;
     7623}
     7624
     7625
     7626IEM_DECL_IMPL_DEF(void, iemAImpl_pcmpgtd_u128,(PCX86FXSTATE pFpuState, PRTUINT128U puDst, PCRTUINT128U puSrc))
     7627{
     7628    RT_NOREF(pFpuState);
     7629    RTUINT128U uSrc1 = *puDst;
     7630    puDst->au32[0] = uSrc1.ai32[0] > puSrc->ai32[0] ? UINT32_MAX : 0;
     7631    puDst->au32[1] = uSrc1.ai32[1] > puSrc->ai32[1] ? UINT32_MAX : 0;
     7632    puDst->au32[2] = uSrc1.ai32[2] > puSrc->ai32[2] ? UINT32_MAX : 0;
     7633    puDst->au32[3] = uSrc1.ai32[3] > puSrc->ai32[3] ? UINT32_MAX : 0;
     7634}
     7635
     7636#endif /* IEM_WITHOUT_ASSEMBLY */
     7637
     7638IEM_DECL_IMPL_DEF(void, iemAImpl_vpcmpgtd_u128_fallback,(PX86XSAVEAREA pExtState, PRTUINT128U puDst,
     7639                                                         PCRTUINT128U puSrc1, PCRTUINT128U puSrc2))
     7640{
     7641    RT_NOREF(pExtState);
     7642    puDst->au32[0] = puSrc1->ai32[0] > puSrc2->ai32[0] ? UINT32_MAX : 0;
     7643    puDst->au32[1] = puSrc1->ai32[1] > puSrc2->ai32[1] ? UINT32_MAX : 0;
     7644    puDst->au32[2] = puSrc1->ai32[2] > puSrc2->ai32[2] ? UINT32_MAX : 0;
     7645    puDst->au32[3] = puSrc1->ai32[3] > puSrc2->ai32[3] ? UINT32_MAX : 0;
     7646}
     7647
     7648IEM_DECL_IMPL_DEF(void, iemAImpl_vpcmpgtd_u256_fallback,(PX86XSAVEAREA pExtState, PRTUINT256U puDst,
     7649                                                         PCRTUINT256U puSrc1, PCRTUINT256U puSrc2))
     7650{
     7651    RT_NOREF(pExtState);
     7652    puDst->au32[0] = puSrc1->ai32[0] > puSrc2->ai32[0] ? UINT32_MAX : 0;
     7653    puDst->au32[1] = puSrc1->ai32[1] > puSrc2->ai32[1] ? UINT32_MAX : 0;
     7654    puDst->au32[2] = puSrc1->ai32[2] > puSrc2->ai32[2] ? UINT32_MAX : 0;
     7655    puDst->au32[3] = puSrc1->ai32[3] > puSrc2->ai32[3] ? UINT32_MAX : 0;
     7656    puDst->au32[4] = puSrc1->ai32[4] > puSrc2->ai32[4] ? UINT32_MAX : 0;
     7657    puDst->au32[5] = puSrc1->ai32[5] > puSrc2->ai32[5] ? UINT32_MAX : 0;
     7658    puDst->au32[6] = puSrc1->ai32[6] > puSrc2->ai32[6] ? UINT32_MAX : 0;
     7659    puDst->au32[7] = puSrc1->ai32[7] > puSrc2->ai32[7] ? UINT32_MAX : 0;
     7660}
     7661
     7662
     7663/*
    72417664 *
    72427665 */
  • trunk/src/VBox/VMM/VMMAll/IEMAllInstructionsInterpretOnly.cpp

    r95441 r95449  
    924924/** Function table for the PCMPEQD instruction */
    925925IEM_STATIC const IEMOPMEDIAF2 g_iemAImpl_pcmpeqd      = { iemAImpl_pcmpeqd_u64,    iemAImpl_pcmpeqd_u128 };
     926/** Function table for the PCMPGTB instruction */
     927IEM_STATIC const IEMOPMEDIAF2 g_iemAImpl_pcmpgtb      = { iemAImpl_pcmpgtb_u64,    iemAImpl_pcmpgtb_u128 };
     928/** Function table for the PCMPGTW instruction */
     929IEM_STATIC const IEMOPMEDIAF2 g_iemAImpl_pcmpgtw      = { iemAImpl_pcmpgtw_u64,    iemAImpl_pcmpgtw_u128 };
     930/** Function table for the PCMPGTD instruction */
     931IEM_STATIC const IEMOPMEDIAF2 g_iemAImpl_pcmpgtd      = { iemAImpl_pcmpgtd_u64,    iemAImpl_pcmpgtd_u128 };
    926932
    927933# ifndef IEM_WITHOUT_ASSEMBLY
     
    934940/** Function table for the VPXOR instruction */
    935941IEM_STATIC const IEMOPMEDIAF3 g_iemAImpl_vpxor          = { iemAImpl_vpxor_u128,   iemAImpl_vpxor_u256 };
     942/** Function table for the VPCMPEQB instruction */
     943IEM_STATIC const IEMOPMEDIAF3 g_iemAImpl_vpcmpeqb       = { iemAImpl_vpcmpeqb_u128, iemAImpl_vpcmpeqb_u256 };
     944/** Function table for the VPCMPEQW instruction */
     945IEM_STATIC const IEMOPMEDIAF3 g_iemAImpl_vpcmpeqw       = { iemAImpl_vpcmpeqw_u128, iemAImpl_vpcmpeqw_u256 };
     946/** Function table for the VPCMPEQD instruction */
     947IEM_STATIC const IEMOPMEDIAF3 g_iemAImpl_vpcmpeqd       = { iemAImpl_vpcmpeqd_u128, iemAImpl_vpcmpeqd_u256 };
     948/** Function table for the VPCMPGTB instruction */
     949IEM_STATIC const IEMOPMEDIAF3 g_iemAImpl_vpcmpgtb       = { iemAImpl_vpcmpgtb_u128, iemAImpl_vpcmpgtb_u256 };
     950/** Function table for the VPCMPGTW instruction */
     951IEM_STATIC const IEMOPMEDIAF3 g_iemAImpl_vpcmpgtw       = { iemAImpl_vpcmpgtw_u128, iemAImpl_vpcmpgtw_u256 };
     952/** Function table for the VPCMPGTD instruction */
     953IEM_STATIC const IEMOPMEDIAF3 g_iemAImpl_vpcmpgtd       = { iemAImpl_vpcmpgtd_u128, iemAImpl_vpcmpgtd_u256 };
    936954# endif
     955
    937956/** Function table for the VPAND instruction, software fallback. */
    938957IEM_STATIC const IEMOPMEDIAF3 g_iemAImpl_vpand_fallback = { iemAImpl_vpand_u128_fallback,  iemAImpl_vpand_u256_fallback };
     
    943962/** Function table for the VPXOR instruction, software fallback. */
    944963IEM_STATIC const IEMOPMEDIAF3 g_iemAImpl_vpxor_fallback = { iemAImpl_vpxor_u128_fallback,  iemAImpl_vpxor_u256_fallback };
     964/** Function table for the VPCMPEQB instruction, software fallback. */
     965IEM_STATIC const IEMOPMEDIAF3 g_iemAImpl_vpcmpeqb_fallback = { iemAImpl_vpcmpeqb_u128_fallback, iemAImpl_vpcmpeqb_u256_fallback };
     966/** Function table for the VPCMPEQW instruction, software fallback. */
     967IEM_STATIC const IEMOPMEDIAF3 g_iemAImpl_vpcmpeqw_fallback = { iemAImpl_vpcmpeqw_u128_fallback, iemAImpl_vpcmpeqw_u256_fallback };
     968/** Function table for the VPCMPEQD instruction, software fallback. */
     969IEM_STATIC const IEMOPMEDIAF3 g_iemAImpl_vpcmpeqd_fallback = { iemAImpl_vpcmpeqd_u128_fallback, iemAImpl_vpcmpeqd_u256_fallback };
     970/** Function table for the VPCMPGTB instruction, software fallback. */
     971IEM_STATIC const IEMOPMEDIAF3 g_iemAImpl_vpcmpgtb_fallback = { iemAImpl_vpcmpgtb_u128_fallback, iemAImpl_vpcmpgtb_u256_fallback };
     972/** Function table for the VPCMPGTW instruction, software fallback. */
     973IEM_STATIC const IEMOPMEDIAF3 g_iemAImpl_vpcmpgtw_fallback = { iemAImpl_vpcmpgtw_u128_fallback, iemAImpl_vpcmpgtw_u256_fallback };
     974/** Function table for the VPCMPGTD instruction, software fallback. */
     975IEM_STATIC const IEMOPMEDIAF3 g_iemAImpl_vpcmpgtd_fallback = { iemAImpl_vpcmpgtd_u128_fallback, iemAImpl_vpcmpgtd_u256_fallback };
    945976
    946977#endif /* !TST_IEM_CHECK_MC */
  • trunk/src/VBox/VMM/VMMAll/IEMAllInstructionsTwoByte0f.cpp.h

    r95445 r95449  
    33553355/*  Opcode 0xf3 0x0f 0x63 - invalid */
    33563356
     3357
    33573358/** Opcode      0x0f 0x64 - pcmpgtb Pq, Qq */
    3358 FNIEMOP_STUB(iemOp_pcmpgtb_Pq_Qq);
     3359FNIEMOP_DEF(iemOp_pcmpgtb_Pq_Qq)
     3360{
     3361    IEMOP_MNEMONIC2(RM, PCMPGTB, pcmpgtb, Pq, Qq, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OP_SIZES);
     3362    return FNIEMOP_CALL_1(iemOpCommonMmx_FullFull_To_Full, &g_iemAImpl_pcmpgtb);
     3363}
     3364
     3365
    33593366/** Opcode 0x66 0x0f 0x64 - pcmpgtb Vx, Wx */
    3360 FNIEMOP_STUB(iemOp_pcmpgtb_Vx_Wx);
     3367FNIEMOP_DEF(iemOp_pcmpgtb_Vx_Wx)
     3368{
     3369    IEMOP_MNEMONIC2(RM, PCMPGTB, pcmpgtb, Vx, Wx, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OP_SIZES);
     3370    return FNIEMOP_CALL_1(iemOpCommonSse2_FullFull_To_Full, &g_iemAImpl_pcmpgtb);
     3371}
     3372
     3373
    33613374/*  Opcode 0xf3 0x0f 0x64 - invalid */
    33623375
     3376
    33633377/** Opcode      0x0f 0x65 - pcmpgtw Pq, Qq */
    3364 FNIEMOP_STUB(iemOp_pcmpgtw_Pq_Qq);
     3378FNIEMOP_DEF(iemOp_pcmpgtw_Pq_Qq)
     3379{
     3380    IEMOP_MNEMONIC2(RM, PCMPGTW, pcmpgtw, Pq, Qq, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OP_SIZES);
     3381    return FNIEMOP_CALL_1(iemOpCommonMmx_FullFull_To_Full, &g_iemAImpl_pcmpgtw);
     3382}
     3383
     3384
    33653385/** Opcode 0x66 0x0f 0x65 - pcmpgtw Vx, Wx */
    3366 FNIEMOP_STUB(iemOp_pcmpgtw_Vx_Wx);
     3386FNIEMOP_DEF(iemOp_pcmpgtw_Vx_Wx)
     3387{
     3388    IEMOP_MNEMONIC2(RM, PCMPGTW, pcmpgtw, Vx, Wx, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OP_SIZES);
     3389    return FNIEMOP_CALL_1(iemOpCommonSse2_FullFull_To_Full, &g_iemAImpl_pcmpgtw);
     3390}
     3391
     3392
    33673393/*  Opcode 0xf3 0x0f 0x65 - invalid */
    33683394
     3395
    33693396/** Opcode      0x0f 0x66 - pcmpgtd Pq, Qq */
    3370 FNIEMOP_STUB(iemOp_pcmpgtd_Pq_Qq);
     3397FNIEMOP_DEF(iemOp_pcmpgtd_Pq_Qq)
     3398{
     3399    IEMOP_MNEMONIC2(RM, PCMPGTD, pcmpgtd, Pq, Qq, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OP_SIZES);
     3400    return FNIEMOP_CALL_1(iemOpCommonMmx_FullFull_To_Full, &g_iemAImpl_pcmpgtd);
     3401}
     3402
     3403
    33713404/** Opcode 0x66 0x0f 0x66 - pcmpgtd Vx, Wx */
    3372 FNIEMOP_STUB(iemOp_pcmpgtd_Vx_Wx);
     3405FNIEMOP_DEF(iemOp_pcmpgtd_Vx_Wx)
     3406{
     3407    IEMOP_MNEMONIC2(RM, PCMPGTD, pcmpgtd, Vx, Wx, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OP_SIZES);
     3408    return FNIEMOP_CALL_1(iemOpCommonSse2_FullFull_To_Full, &g_iemAImpl_pcmpgtd);
     3409}
     3410
     3411
    33733412/*  Opcode 0xf3 0x0f 0x66 - invalid */
    33743413
     
    43134352}
    43144353
     4354
    43154355/** Opcode 0x66 0x0f 0x74 - pcmpeqb Vx, Wx */
    43164356FNIEMOP_DEF(iemOp_pcmpeqb_Vx_Wx)
     
    43204360}
    43214361
     4362
    43224363/*  Opcode 0xf3 0x0f 0x74 - invalid */
    43234364/*  Opcode 0xf2 0x0f 0x74 - invalid */
     
    43314372}
    43324373
     4374
    43334375/** Opcode 0x66 0x0f 0x75 - pcmpeqw Vx, Wx */
    43344376FNIEMOP_DEF(iemOp_pcmpeqw_Vx_Wx)
     
    43384380}
    43394381
     4382
    43404383/*  Opcode 0xf3 0x0f 0x75 - invalid */
    43414384/*  Opcode 0xf2 0x0f 0x75 - invalid */
     
    43494392}
    43504393
     4394
    43514395/** Opcode 0x66 0x0f 0x76 - pcmpeqd Vx, Wx */
    43524396FNIEMOP_DEF(iemOp_pcmpeqd_Vx_Wx)
     
    43554399    return FNIEMOP_CALL_1(iemOpCommonSse2_FullFull_To_Full, &g_iemAImpl_pcmpeqd);
    43564400}
     4401
    43574402
    43584403/*  Opcode 0xf3 0x0f 0x76 - invalid */
  • trunk/src/VBox/VMM/VMMAll/IEMAllInstructionsVexMap1.cpp.h

    r95441 r95449  
    20652065
    20662066/*  Opcode VEX.0F 0x64 - invalid */
     2067
     2068
    20672069/** Opcode VEX.66.0F 0x64 - vpcmpgtb Vx, Hx, Wx */
    2068 FNIEMOP_STUB(iemOp_vpcmpgtb_Vx_Hx_Wx);
     2070FNIEMOP_DEF(iemOp_vpcmpgtb_Vx_Hx_Wx)
     2071{
     2072    IEMOP_MNEMONIC3(VEX_RVM, VPCMPGTB, vpcmpgtb, Vx, Hx, Wx, DISOPTYPE_HARMLESS, 0);
     2073    return FNIEMOP_CALL_1(iemOpCommonAvxAvx2_Vx_Hx_Wx,
     2074                          IEM_SELECT_HOST_OR_FALLBACK(fAvx2, &g_iemAImpl_vpcmpgtb, &g_iemAImpl_vpcmpgtb_fallback));
     2075}
     2076
     2077
    20692078/*  Opcode VEX.F3.0F 0x64 - invalid */
    20702079
    20712080/*  Opcode VEX.0F 0x65 - invalid */
     2081
     2082
    20722083/** Opcode VEX.66.0F 0x65 - vpcmpgtw Vx, Hx, Wx */
    2073 FNIEMOP_STUB(iemOp_vpcmpgtw_Vx_Hx_Wx);
     2084FNIEMOP_DEF(iemOp_vpcmpgtw_Vx_Hx_Wx)
     2085{
     2086    IEMOP_MNEMONIC3(VEX_RVM, VPCMPGTW, vpcmpgtw, Vx, Hx, Wx, DISOPTYPE_HARMLESS, 0);
     2087    return FNIEMOP_CALL_1(iemOpCommonAvxAvx2_Vx_Hx_Wx,
     2088                          IEM_SELECT_HOST_OR_FALLBACK(fAvx2, &g_iemAImpl_vpcmpgtw, &g_iemAImpl_vpcmpgtw_fallback));
     2089}
     2090
     2091
    20742092/*  Opcode VEX.F3.0F 0x65 - invalid */
    20752093
    20762094/*  Opcode VEX.0F 0x66 - invalid */
     2095
     2096
    20772097/** Opcode VEX.66.0F 0x66 - vpcmpgtd Vx, Hx, Wx */
    2078 FNIEMOP_STUB(iemOp_vpcmpgtd_Vx_Hx_Wx);
     2098FNIEMOP_DEF(iemOp_vpcmpgtd_Vx_Hx_Wx)
     2099{
     2100    IEMOP_MNEMONIC3(VEX_RVM, VPCMPGTD, vpcmpgtd, Vx, Hx, Wx, DISOPTYPE_HARMLESS, 0);
     2101    return FNIEMOP_CALL_1(iemOpCommonAvxAvx2_Vx_Hx_Wx,
     2102                          IEM_SELECT_HOST_OR_FALLBACK(fAvx2, &g_iemAImpl_vpcmpgtd, &g_iemAImpl_vpcmpgtd_fallback));
     2103}
     2104
     2105
    20792106/*  Opcode VEX.F3.0F 0x66 - invalid */
    20802107
     
    27702797/*  Opcode VEX.0F 0x74 - invalid */
    27712798
     2799
    27722800/** Opcode VEX.66.0F 0x74 - vpcmpeqb Vx, Hx, Wx */
    2773 FNIEMOP_STUB(iemOp_vpcmpeqb_Vx_Hx_Wx);
    2774 //FNIEMOP_DEF(iemOp_vpcmpeqb_Vx_Hx_Wx)
    2775 //{
    2776 //    IEMOP_MNEMONIC(vpcmpeqb, "vpcmpeqb");
    2777 //    return FNIEMOP_CALL_1(iemOpCommonSse2_FullFull_To_Full, &g_iemAImpl_pcmpeqb);
    2778 //}
     2801FNIEMOP_DEF(iemOp_vpcmpeqb_Vx_Hx_Wx)
     2802{
     2803    IEMOP_MNEMONIC3(VEX_RVM, VPCMPEQB, vpcmpeqb, Vx, Hx, Wx, DISOPTYPE_HARMLESS, 0);
     2804    return FNIEMOP_CALL_1(iemOpCommonAvxAvx2_Vx_Hx_Wx,
     2805                          IEM_SELECT_HOST_OR_FALLBACK(fAvx2, &g_iemAImpl_vpcmpeqb, &g_iemAImpl_vpcmpeqb_fallback));
     2806}
    27792807
    27802808/*  Opcode VEX.F3.0F 0x74 - invalid */
     
    27842812/*  Opcode VEX.0F 0x75 - invalid */
    27852813
     2814
    27862815/** Opcode VEX.66.0F 0x75 - vpcmpeqw Vx, Hx, Wx */
    2787 FNIEMOP_STUB(iemOp_vpcmpeqw_Vx_Hx_Wx);
    2788 //FNIEMOP_DEF(iemOp_vpcmpeqw_Vx_Hx_Wx)
    2789 //{
    2790 //    IEMOP_MNEMONIC(vpcmpeqw, "vpcmpeqw");
    2791 //    return FNIEMOP_CALL_1(iemOpCommonSse2_FullFull_To_Full, &g_iemAImpl_pcmpeqw);
    2792 //}
     2816FNIEMOP_DEF(iemOp_vpcmpeqw_Vx_Hx_Wx)
     2817{
     2818    IEMOP_MNEMONIC3(VEX_RVM, VPCMPEQW, vpcmpeqw, Vx, Hx, Wx, DISOPTYPE_HARMLESS, 0);
     2819    return FNIEMOP_CALL_1(iemOpCommonAvxAvx2_Vx_Hx_Wx,
     2820                          IEM_SELECT_HOST_OR_FALLBACK(fAvx2, &g_iemAImpl_vpcmpeqw, &g_iemAImpl_vpcmpeqw_fallback));
     2821}
     2822
    27932823
    27942824/*  Opcode VEX.F3.0F 0x75 - invalid */
     
    27982828/*  Opcode VEX.0F 0x76 - invalid */
    27992829
     2830
    28002831/** Opcode VEX.66.0F 0x76 - vpcmpeqd Vx, Hx, Wx */
    2801 FNIEMOP_STUB(iemOp_vpcmpeqd_Vx_Hx_Wx);
    2802 //FNIEMOP_DEF(iemOp_vpcmpeqd_Vx_Hx_Wx)
    2803 //{
    2804 //    IEMOP_MNEMONIC(vpcmpeqd, "vpcmpeqd");
    2805 //    return FNIEMOP_CALL_1(iemOpCommonSse2_FullFull_To_Full, &g_iemAImpl_pcmpeqd);
    2806 //}
     2832FNIEMOP_DEF(iemOp_vpcmpeqd_Vx_Hx_Wx)
     2833{
     2834    IEMOP_MNEMONIC3(VEX_RVM, VPCMPEQD, vpcmpeqd, Vx, Hx, Wx, DISOPTYPE_HARMLESS, 0);
     2835    return FNIEMOP_CALL_1(iemOpCommonAvxAvx2_Vx_Hx_Wx,
     2836                          IEM_SELECT_HOST_OR_FALLBACK(fAvx2, &g_iemAImpl_vpcmpeqd, &g_iemAImpl_vpcmpeqd_fallback));
     2837}
     2838
    28072839
    28082840/*  Opcode VEX.F3.0F 0x76 - invalid */
  • trunk/src/VBox/VMM/include/IEMInternal.h

    r95441 r95449  
    17461746FNIEMAIMPLMEDIAF2U64  iemAImpl_pand_u64, iemAImpl_pandn_u64, iemAImpl_por_u64, iemAImpl_pxor_u64;
    17471747FNIEMAIMPLMEDIAF2U64  iemAImpl_pcmpeqb_u64,  iemAImpl_pcmpeqw_u64,  iemAImpl_pcmpeqd_u64;
     1748FNIEMAIMPLMEDIAF2U64  iemAImpl_pcmpgtb_u64,  iemAImpl_pcmpgtw_u64,  iemAImpl_pcmpgtd_u64;
     1749
    17481750FNIEMAIMPLMEDIAF2U128 iemAImpl_pand_u128, iemAImpl_pandn_u128, iemAImpl_por_u128, iemAImpl_pxor_u128;
    17491751FNIEMAIMPLMEDIAF2U128 iemAImpl_pcmpeqb_u128, iemAImpl_pcmpeqw_u128, iemAImpl_pcmpeqd_u128;
    1750 FNIEMAIMPLMEDIAF3U128 iemAImpl_vpand_u128,  iemAImpl_vpand_u128_fallback;
    1751 FNIEMAIMPLMEDIAF3U128 iemAImpl_vpandn_u128, iemAImpl_vpandn_u128_fallback;
    1752 FNIEMAIMPLMEDIAF3U128 iemAImpl_vpor_u128,   iemAImpl_vpor_u128_fallback;
    1753 FNIEMAIMPLMEDIAF3U128 iemAImpl_vpxor_u128,  iemAImpl_vpxor_u128_fallback;
    1754 FNIEMAIMPLMEDIAF3U256 iemAImpl_vpand_u256,  iemAImpl_vpand_u256_fallback;
    1755 FNIEMAIMPLMEDIAF3U256 iemAImpl_vpandn_u256, iemAImpl_vpandn_u256_fallback;
    1756 FNIEMAIMPLMEDIAF3U256 iemAImpl_vpor_u256,   iemAImpl_vpor_u256_fallback;
    1757 FNIEMAIMPLMEDIAF3U256 iemAImpl_vpxor_u256,  iemAImpl_vpxor_u256_fallback;
     1752FNIEMAIMPLMEDIAF2U128 iemAImpl_pcmpgtb_u128, iemAImpl_pcmpgtw_u128, iemAImpl_pcmpgtd_u128;
     1753
     1754FNIEMAIMPLMEDIAF3U128 iemAImpl_vpand_u128,      iemAImpl_vpand_u128_fallback;
     1755FNIEMAIMPLMEDIAF3U128 iemAImpl_vpandn_u128,     iemAImpl_vpandn_u128_fallback;
     1756FNIEMAIMPLMEDIAF3U128 iemAImpl_vpor_u128,       iemAImpl_vpor_u128_fallback;
     1757FNIEMAIMPLMEDIAF3U128 iemAImpl_vpxor_u128,      iemAImpl_vpxor_u128_fallback;
     1758FNIEMAIMPLMEDIAF3U128 iemAImpl_vpcmpeqb_u128,   iemAImpl_vpcmpeqb_u128_fallback;
     1759FNIEMAIMPLMEDIAF3U128 iemAImpl_vpcmpeqw_u128,   iemAImpl_vpcmpeqw_u128_fallback;
     1760FNIEMAIMPLMEDIAF3U128 iemAImpl_vpcmpeqd_u128,   iemAImpl_vpcmpeqd_u128_fallback;
     1761FNIEMAIMPLMEDIAF3U128 iemAImpl_vpcmpgtb_u128,   iemAImpl_vpcmpgtb_u128_fallback;
     1762FNIEMAIMPLMEDIAF3U128 iemAImpl_vpcmpgtw_u128,   iemAImpl_vpcmpgtw_u128_fallback;
     1763FNIEMAIMPLMEDIAF3U128 iemAImpl_vpcmpgtd_u128,   iemAImpl_vpcmpgtd_u128_fallback;
     1764
     1765FNIEMAIMPLMEDIAF3U256 iemAImpl_vpand_u256,      iemAImpl_vpand_u256_fallback;
     1766FNIEMAIMPLMEDIAF3U256 iemAImpl_vpandn_u256,     iemAImpl_vpandn_u256_fallback;
     1767FNIEMAIMPLMEDIAF3U256 iemAImpl_vpor_u256,       iemAImpl_vpor_u256_fallback;
     1768FNIEMAIMPLMEDIAF3U256 iemAImpl_vpxor_u256,      iemAImpl_vpxor_u256_fallback;
     1769FNIEMAIMPLMEDIAF3U256 iemAImpl_vpcmpeqb_u256,   iemAImpl_vpcmpeqb_u256_fallback;
     1770FNIEMAIMPLMEDIAF3U256 iemAImpl_vpcmpeqw_u256,   iemAImpl_vpcmpeqw_u256_fallback;
     1771FNIEMAIMPLMEDIAF3U256 iemAImpl_vpcmpeqd_u256,   iemAImpl_vpcmpeqd_u256_fallback;
     1772FNIEMAIMPLMEDIAF3U256 iemAImpl_vpcmpgtb_u256,   iemAImpl_vpcmpgtb_u256_fallback;
     1773FNIEMAIMPLMEDIAF3U256 iemAImpl_vpcmpgtw_u256,   iemAImpl_vpcmpgtw_u256_fallback;
     1774FNIEMAIMPLMEDIAF3U256 iemAImpl_vpcmpgtd_u256,   iemAImpl_vpcmpgtd_u256_fallback;
    17581775/** @} */
    17591776
  • trunk/src/VBox/VMM/testcase/tstIEMCheckMc.cpp

    r95441 r95449  
    235235IEMOPMEDIAF2 g_iemAImpl_pcmpeqw;
    236236IEMOPMEDIAF2 g_iemAImpl_pcmpeqd;
     237IEMOPMEDIAF2 g_iemAImpl_pcmpgtb;
     238IEMOPMEDIAF2 g_iemAImpl_pcmpgtw;
     239IEMOPMEDIAF2 g_iemAImpl_pcmpgtd;
    237240
    238241#undef  IEMTARGETCPU_EFL_BEHAVIOR_SELECT
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