VirtualBox

Changeset 99330 in vbox for trunk/src/VBox/VMM/VMMAll


Ignore:
Timestamp:
Apr 7, 2023 12:23:11 AM (21 months ago)
Author:
vboxsync
Message:

VMM/IEM: Use IEMOP_HLP_DONE_DECODING_*EX*() rather than IEM_MC_MAYBE_RAISE_SSE_RELATED_XCPT and firends to do the CPUID check. bugref:10369

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

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/VMM/VMMAll/IEMAllInstructionsPython.py

    r99304 r99330  
    26572657    'IEM_MC_MAYBE_RAISE_FSGSBASE_XCPT':                          McBlock.parseMcGeneric,
    26582658    'IEM_MC_MAYBE_RAISE_MMX_RELATED_XCPT':                       McBlock.parseMcGeneric,
    2659     'IEM_MC_MAYBE_RAISE_MMX_RELATED_XCPT_CHECK_SSE_OR_MMXEXT':   McBlock.parseMcGeneric,
    2660     'IEM_MC_MAYBE_RAISE_MMX_RELATED_XCPT_EX':                    McBlock.parseMcGeneric,
    26612659    'IEM_MC_MAYBE_RAISE_NON_CANONICAL_ADDR_GP0':                 McBlock.parseMcGeneric,
    26622660    'IEM_MC_MAYBE_RAISE_PCLMUL_RELATED_XCPT':                    McBlock.parseMcGeneric,
  • trunk/src/VBox/VMM/VMMAll/IEMAllInstructionsThree0f38.cpp.h

    r99326 r99330  
    3434 */
    3535
    36 FNIEMOP_DEF_2(iemOpCommonMmx_FullFull_To_Full_Ex, PFNIEMAIMPLMEDIAF2U64, pfnU64, bool, fSupported); /* in IEMAllInstructionsTwoByteOf.cpp.h */
     36/**
     37 * Common worker for MMX instructions on the form:
     38 *      pxxx    mm1, mm2/mem64
     39 * that was introduced with SSE3.
     40 */
     41FNIEMOP_DEF_1(iemOpCommonMmx_FullFull_To_Full_Ssse3, PFNIEMAIMPLMEDIAF2U64, pfnU64)
     42{
     43    uint8_t bRm; IEM_OPCODE_GET_NEXT_U8(&bRm);
     44    if (IEM_IS_MODRM_REG_MODE(bRm))
     45    {
     46        /*
     47         * MMX, MMX.
     48         */
     49        /** @todo testcase: REX.B / REX.R and MMX register indexing. Ignored? */
     50        /** @todo testcase: REX.B / REX.R and segment register indexing. Ignored? */
     51        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fSsse3);
     52        IEM_MC_BEGIN(2, 0);
     53        IEM_MC_ARG(uint64_t *,          pDst, 0);
     54        IEM_MC_ARG(uint64_t const *,    pSrc, 1);
     55        IEM_MC_MAYBE_RAISE_MMX_RELATED_XCPT();
     56        IEM_MC_PREPARE_FPU_USAGE();
     57        IEM_MC_FPU_TO_MMX_MODE();
     58
     59        IEM_MC_REF_MREG_U64(pDst, IEM_GET_MODRM_REG_8(bRm));
     60        IEM_MC_REF_MREG_U64_CONST(pSrc, IEM_GET_MODRM_RM_8(bRm));
     61        IEM_MC_CALL_MMX_AIMPL_2(pfnU64, pDst, pSrc);
     62        IEM_MC_MODIFIED_MREG_BY_REF(pDst);
     63
     64        IEM_MC_ADVANCE_RIP_AND_FINISH();
     65        IEM_MC_END();
     66    }
     67    else
     68    {
     69        /*
     70         * MMX, [mem64].
     71         */
     72        IEM_MC_BEGIN(2, 2);
     73        IEM_MC_ARG(uint64_t *,                  pDst,       0);
     74        IEM_MC_LOCAL(uint64_t,                  uSrc);
     75        IEM_MC_ARG_LOCAL_REF(uint64_t const *,  pSrc, uSrc, 1);
     76        IEM_MC_LOCAL(RTGCPTR,                   GCPtrEffSrc);
     77
     78        IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffSrc, bRm, 0);
     79        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fSsse3);
     80        IEM_MC_MAYBE_RAISE_MMX_RELATED_XCPT();
     81        IEM_MC_FETCH_MEM_U64(uSrc, pVCpu->iem.s.iEffSeg, GCPtrEffSrc);
     82
     83        IEM_MC_PREPARE_FPU_USAGE();
     84        IEM_MC_FPU_TO_MMX_MODE();
     85
     86        IEM_MC_REF_MREG_U64(pDst, IEM_GET_MODRM_REG_8(bRm));
     87        IEM_MC_CALL_MMX_AIMPL_2(pfnU64, pDst, pSrc);
     88        IEM_MC_MODIFIED_MREG_BY_REF(pDst);
     89
     90        IEM_MC_ADVANCE_RIP_AND_FINISH();
     91        IEM_MC_END();
     92    }
     93}
    3794
    3895
     
    387444{
    388445    IEMOP_MNEMONIC2(RM, PSHUFB, pshufb, Pq, Qq, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OP_SIZES);
    389     return FNIEMOP_CALL_2(iemOpCommonMmx_FullFull_To_Full_Ex,
    390                           IEM_SELECT_HOST_OR_FALLBACK(fSsse3, iemAImpl_pshufb_u64,&iemAImpl_pshufb_u64_fallback),
    391                           IEM_GET_GUEST_CPU_FEATURES(pVCpu)->fSsse3);
     446    return FNIEMOP_CALL_1(iemOpCommonMmx_FullFull_To_Full_Ssse3,
     447                          IEM_SELECT_HOST_OR_FALLBACK(fSsse3, iemAImpl_pshufb_u64,&iemAImpl_pshufb_u64_fallback));
    392448}
    393449
     
    407463{
    408464    IEMOP_MNEMONIC2(RM, PHADDW, phaddw, Pq, Qq, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OP_SIZES);
    409     return FNIEMOP_CALL_2(iemOpCommonMmx_FullFull_To_Full_Ex,
    410                           IEM_SELECT_HOST_OR_FALLBACK(fSsse3, iemAImpl_phaddw_u64,&iemAImpl_phaddw_u64_fallback),
    411                           IEM_GET_GUEST_CPU_FEATURES(pVCpu)->fSsse3);
     465    return FNIEMOP_CALL_1(iemOpCommonMmx_FullFull_To_Full_Ssse3,
     466                          IEM_SELECT_HOST_OR_FALLBACK(fSsse3, iemAImpl_phaddw_u64,&iemAImpl_phaddw_u64_fallback));
    412467}
    413468
     
    427482{
    428483    IEMOP_MNEMONIC2(RM, PHADDD, phaddd, Pq, Qq, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OP_SIZES);
    429     return FNIEMOP_CALL_2(iemOpCommonMmx_FullFull_To_Full_Ex,
    430                           IEM_SELECT_HOST_OR_FALLBACK(fSsse3, iemAImpl_phaddd_u64,&iemAImpl_phaddd_u64_fallback),
    431                           IEM_GET_GUEST_CPU_FEATURES(pVCpu)->fSsse3);
     484    return FNIEMOP_CALL_1(iemOpCommonMmx_FullFull_To_Full_Ssse3,
     485                          IEM_SELECT_HOST_OR_FALLBACK(fSsse3, iemAImpl_phaddd_u64,&iemAImpl_phaddd_u64_fallback));
    432486}
    433487
     
    447501{
    448502    IEMOP_MNEMONIC2(RM, PHADDSW, phaddsw, Pq, Qq, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OP_SIZES);
    449     return FNIEMOP_CALL_2(iemOpCommonMmx_FullFull_To_Full_Ex,
    450                           IEM_SELECT_HOST_OR_FALLBACK(fSsse3, iemAImpl_phaddsw_u64,&iemAImpl_phaddsw_u64_fallback),
    451                           IEM_GET_GUEST_CPU_FEATURES(pVCpu)->fSsse3);
     503    return FNIEMOP_CALL_1(iemOpCommonMmx_FullFull_To_Full_Ssse3,
     504                          IEM_SELECT_HOST_OR_FALLBACK(fSsse3, iemAImpl_phaddsw_u64,&iemAImpl_phaddsw_u64_fallback));
    452505}
    453506
     
    467520{
    468521    IEMOP_MNEMONIC2(RM, PMADDUBSW, pmaddubsw, Pq, Qq, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OP_SIZES);
    469     return FNIEMOP_CALL_2(iemOpCommonMmx_FullFull_To_Full_Ex,
    470                           IEM_SELECT_HOST_OR_FALLBACK(fSsse3, iemAImpl_pmaddubsw_u64, &iemAImpl_pmaddubsw_u64_fallback),
    471                           IEM_GET_GUEST_CPU_FEATURES(pVCpu)->fSsse3);
     522    return FNIEMOP_CALL_1(iemOpCommonMmx_FullFull_To_Full_Ssse3,
     523                          IEM_SELECT_HOST_OR_FALLBACK(fSsse3, iemAImpl_pmaddubsw_u64, &iemAImpl_pmaddubsw_u64_fallback));
    472524}
    473525
     
    487539{
    488540    IEMOP_MNEMONIC2(RM, PHSUBW, phsubw, Pq, Qq, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OP_SIZES);
    489     return FNIEMOP_CALL_2(iemOpCommonMmx_FullFull_To_Full_Ex,
    490                           IEM_SELECT_HOST_OR_FALLBACK(fSsse3, iemAImpl_phsubw_u64,&iemAImpl_phsubw_u64_fallback),
    491                           IEM_GET_GUEST_CPU_FEATURES(pVCpu)->fSsse3);
     541    return FNIEMOP_CALL_1(iemOpCommonMmx_FullFull_To_Full_Ssse3,
     542                          IEM_SELECT_HOST_OR_FALLBACK(fSsse3, iemAImpl_phsubw_u64,&iemAImpl_phsubw_u64_fallback));
    492543}
    493544
     
    507558{
    508559    IEMOP_MNEMONIC2(RM, PHSUBD, phsubd, Pq, Qq, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OP_SIZES);
    509     return FNIEMOP_CALL_2(iemOpCommonMmx_FullFull_To_Full_Ex,
    510                           IEM_SELECT_HOST_OR_FALLBACK(fSsse3, iemAImpl_phsubd_u64,&iemAImpl_phsubd_u64_fallback),
    511                           IEM_GET_GUEST_CPU_FEATURES(pVCpu)->fSsse3);
     560    return FNIEMOP_CALL_1(iemOpCommonMmx_FullFull_To_Full_Ssse3,
     561                          IEM_SELECT_HOST_OR_FALLBACK(fSsse3, iemAImpl_phsubd_u64,&iemAImpl_phsubd_u64_fallback));
    512562}
    513563
     
    528578{
    529579    IEMOP_MNEMONIC2(RM, PHSUBSW, phsubsw, Pq, Qq, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OP_SIZES);
    530     return FNIEMOP_CALL_2(iemOpCommonMmx_FullFull_To_Full_Ex,
    531                           IEM_SELECT_HOST_OR_FALLBACK(fSsse3, iemAImpl_phsubsw_u64,&iemAImpl_phsubsw_u64_fallback),
    532                           IEM_GET_GUEST_CPU_FEATURES(pVCpu)->fSsse3);
     580    return FNIEMOP_CALL_1(iemOpCommonMmx_FullFull_To_Full_Ssse3,
     581                          IEM_SELECT_HOST_OR_FALLBACK(fSsse3, iemAImpl_phsubsw_u64,&iemAImpl_phsubsw_u64_fallback));
    533582}
    534583
     
    548597{
    549598    IEMOP_MNEMONIC2(RM, PSIGNB, psignb, Pq, Qq, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OP_SIZES);
    550     return FNIEMOP_CALL_2(iemOpCommonMmx_FullFull_To_Full_Ex,
    551                           IEM_SELECT_HOST_OR_FALLBACK(fSsse3, iemAImpl_psignb_u64, &iemAImpl_psignb_u64_fallback),
    552                           IEM_GET_GUEST_CPU_FEATURES(pVCpu)->fSsse3);
     599    return FNIEMOP_CALL_1(iemOpCommonMmx_FullFull_To_Full_Ssse3,
     600                          IEM_SELECT_HOST_OR_FALLBACK(fSsse3, iemAImpl_psignb_u64, &iemAImpl_psignb_u64_fallback));
    553601}
    554602
     
    568616{
    569617    IEMOP_MNEMONIC2(RM, PSIGNW, psignw, Pq, Qq, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OP_SIZES);
    570     return FNIEMOP_CALL_2(iemOpCommonMmx_FullFull_To_Full_Ex,
    571                           IEM_SELECT_HOST_OR_FALLBACK(fSsse3, iemAImpl_psignw_u64, &iemAImpl_psignw_u64_fallback),
    572                           IEM_GET_GUEST_CPU_FEATURES(pVCpu)->fSsse3);
     618    return FNIEMOP_CALL_1(iemOpCommonMmx_FullFull_To_Full_Ssse3,
     619                          IEM_SELECT_HOST_OR_FALLBACK(fSsse3, iemAImpl_psignw_u64, &iemAImpl_psignw_u64_fallback));
    573620}
    574621
     
    588635{
    589636    IEMOP_MNEMONIC2(RM, PSIGND, psignd, Pq, Qq, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OP_SIZES);
    590     return FNIEMOP_CALL_2(iemOpCommonMmx_FullFull_To_Full_Ex,
    591                           IEM_SELECT_HOST_OR_FALLBACK(fSsse3, iemAImpl_psignd_u64, &iemAImpl_psignd_u64_fallback),
    592                           IEM_GET_GUEST_CPU_FEATURES(pVCpu)->fSsse3);
     637    return FNIEMOP_CALL_1(iemOpCommonMmx_FullFull_To_Full_Ssse3,
     638                          IEM_SELECT_HOST_OR_FALLBACK(fSsse3, iemAImpl_psignd_u64, &iemAImpl_psignd_u64_fallback));
    593639}
    594640
     
    608654{
    609655    IEMOP_MNEMONIC2(RM, PMULHRSW, pmulhrsw, Pq, Qq, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OP_SIZES);
    610     return FNIEMOP_CALL_2(iemOpCommonMmx_FullFull_To_Full_Ex,
    611                           IEM_SELECT_HOST_OR_FALLBACK(fSsse3, iemAImpl_pmulhrsw_u64, &iemAImpl_pmulhrsw_u64_fallback),
    612                           IEM_GET_GUEST_CPU_FEATURES(pVCpu)->fSsse3);
     656    return FNIEMOP_CALL_1(iemOpCommonMmx_FullFull_To_Full_Ssse3,
     657                          IEM_SELECT_HOST_OR_FALLBACK(fSsse3, iemAImpl_pmulhrsw_u64, &iemAImpl_pmulhrsw_u64_fallback));
    613658}
    614659
     
    796841{
    797842    IEMOP_MNEMONIC2(RM, PABSB, pabsb, Pq, Qq, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OP_SIZES);
    798     return FNIEMOP_CALL_2(iemOpCommonMmx_FullFull_To_Full_Ex,
    799                           IEM_SELECT_HOST_OR_FALLBACK(fSsse3, iemAImpl_pabsb_u64, &iemAImpl_pabsb_u64_fallback),
    800                           IEM_GET_GUEST_CPU_FEATURES(pVCpu)->fSsse3);
     843    return FNIEMOP_CALL_1(iemOpCommonMmx_FullFull_To_Full_Ssse3,
     844                          IEM_SELECT_HOST_OR_FALLBACK(fSsse3, iemAImpl_pabsb_u64, &iemAImpl_pabsb_u64_fallback));
    801845}
    802846
     
    816860{
    817861    IEMOP_MNEMONIC2(RM, PABSW, pabsw, Pq, Qq, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OP_SIZES);
    818     return FNIEMOP_CALL_2(iemOpCommonMmx_FullFull_To_Full_Ex,
    819                           IEM_SELECT_HOST_OR_FALLBACK(fSsse3, iemAImpl_pabsw_u64, &iemAImpl_pabsw_u64_fallback),
    820                           IEM_GET_GUEST_CPU_FEATURES(pVCpu)->fSsse3);
     862    return FNIEMOP_CALL_1(iemOpCommonMmx_FullFull_To_Full_Ssse3,
     863                          IEM_SELECT_HOST_OR_FALLBACK(fSsse3, iemAImpl_pabsw_u64, &iemAImpl_pabsw_u64_fallback));
    821864}
    822865
     
    836879{
    837880    IEMOP_MNEMONIC2(RM, PABSD, pabsd, Pq, Qq, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OP_SIZES);
    838     return FNIEMOP_CALL_2(iemOpCommonMmx_FullFull_To_Full_Ex,
    839                           IEM_SELECT_HOST_OR_FALLBACK(fSsse3, iemAImpl_pabsd_u64, &iemAImpl_pabsd_u64_fallback),
    840                           IEM_GET_GUEST_CPU_FEATURES(pVCpu)->fSsse3);
     881    return FNIEMOP_CALL_1(iemOpCommonMmx_FullFull_To_Full_Ssse3,
     882                          IEM_SELECT_HOST_OR_FALLBACK(fSsse3, iemAImpl_pabsd_u64, &iemAImpl_pabsd_u64_fallback));
    841883}
    842884
  • trunk/src/VBox/VMM/VMMAll/IEMAllInstructionsThree0f3a.cpp.h

    r99326 r99330  
    481481        /** @todo testcase: REX.B / REX.R and segment register indexing. Ignored? */
    482482        uint8_t bImm; IEM_OPCODE_GET_NEXT_U8(&bImm);
    483         IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
     483        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fSsse3);
    484484        IEM_MC_BEGIN(3, 0);
    485485        IEM_MC_ARG(uint64_t *,          pDst, 0);
    486486        IEM_MC_ARG(uint64_t,            uSrc, 1);
    487487        IEM_MC_ARG_CONST(uint8_t,       bImmArg, /*=*/ bImm, 2);
    488         IEM_MC_MAYBE_RAISE_MMX_RELATED_XCPT_EX(IEM_GET_GUEST_CPU_FEATURES(pVCpu)->fSsse3);
     488        IEM_MC_MAYBE_RAISE_MMX_RELATED_XCPT();
    489489        IEM_MC_PREPARE_FPU_USAGE();
    490490        IEM_MC_FPU_TO_MMX_MODE();
     
    510510        uint8_t bImm; IEM_OPCODE_GET_NEXT_U8(&bImm);
    511511        IEM_MC_ARG_CONST(uint8_t,               bImmArg, /*=*/ bImm, 2);
    512         IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    513         IEM_MC_MAYBE_RAISE_MMX_RELATED_XCPT_EX(IEM_GET_GUEST_CPU_FEATURES(pVCpu)->fSsse3);
     512        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fSsse3);
     513        IEM_MC_MAYBE_RAISE_MMX_RELATED_XCPT();
    514514        IEM_MC_FETCH_MEM_U64(uSrc, pVCpu->iem.s.iEffSeg, GCPtrEffSrc);
    515515
  • trunk/src/VBox/VMM/VMMAll/IEMAllInstructionsTwoByte0f.cpp.h

    r99329 r99330  
    172172        /** @todo testcase: REX.B / REX.R and MMX register indexing. Ignored? */
    173173        /** @todo testcase: REX.B / REX.R and segment register indexing. Ignored? */
    174         IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
     174        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX_2_OR(fSse, fAmdMmxExts);
    175175        IEM_MC_BEGIN(2, 0);
    176176        IEM_MC_ARG(uint64_t *,          pDst, 0);
    177177        IEM_MC_ARG(uint64_t const *,    pSrc, 1);
    178         IEM_MC_MAYBE_RAISE_MMX_RELATED_XCPT_CHECK_SSE_OR_MMXEXT();
     178        IEM_MC_MAYBE_RAISE_MMX_RELATED_XCPT();
    179179        IEM_MC_PREPARE_FPU_USAGE();
    180180        IEM_MC_FPU_TO_MMX_MODE();
     
    200200
    201201        IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffSrc, bRm, 0);
    202         IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    203         IEM_MC_MAYBE_RAISE_MMX_RELATED_XCPT_CHECK_SSE_OR_MMXEXT();
     202        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX_2_OR(fSse, fAmdMmxExts);
     203        IEM_MC_MAYBE_RAISE_MMX_RELATED_XCPT();
    204204        IEM_MC_FETCH_MEM_U64(uSrc, pVCpu->iem.s.iEffSeg, GCPtrEffSrc);
    205205
     
    235235        /** @todo testcase: REX.B / REX.R and MMX register indexing. Ignored? */
    236236        /** @todo testcase: REX.B / REX.R and segment register indexing. Ignored? */
    237         IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
     237        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX_2_OR(fSse, fAmdMmxExts);
    238238        IEM_MC_BEGIN(2, 0);
    239239        IEM_MC_ARG(uint64_t *,          pDst, 0);
    240240        IEM_MC_ARG(uint64_t const *,    pSrc, 1);
    241         IEM_MC_MAYBE_RAISE_MMX_RELATED_XCPT_CHECK_SSE_OR_MMXEXT();
     241        IEM_MC_MAYBE_RAISE_MMX_RELATED_XCPT();
    242242        IEM_MC_PREPARE_FPU_USAGE();
    243243        IEM_MC_FPU_TO_MMX_MODE();
     
    263263
    264264        IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffSrc, bRm, 0);
    265         IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    266         IEM_MC_MAYBE_RAISE_MMX_RELATED_XCPT_CHECK_SSE_OR_MMXEXT();
     265        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX_2_OR(fSse, fAmdMmxExts);
     266        IEM_MC_MAYBE_RAISE_MMX_RELATED_XCPT();
    267267        IEM_MC_FETCH_MEM_U64(uSrc, pVCpu->iem.s.iEffSeg, GCPtrEffSrc);
    268268
     
    285285 * that was introduced with SSE2.
    286286 */
    287 FNIEMOP_DEF_2(iemOpCommonMmx_FullFull_To_Full_Ex, PFNIEMAIMPLMEDIAF2U64, pfnU64, bool, fSupported)
     287FNIEMOP_DEF_1(iemOpCommonMmx_FullFull_To_Full_Sse2, PFNIEMAIMPLMEDIAF2U64, pfnU64)
    288288{
    289289    uint8_t bRm; IEM_OPCODE_GET_NEXT_U8(&bRm);
     
    295295        /** @todo testcase: REX.B / REX.R and MMX register indexing. Ignored? */
    296296        /** @todo testcase: REX.B / REX.R and segment register indexing. Ignored? */
    297         IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
     297        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fSse2);
    298298        IEM_MC_BEGIN(2, 0);
    299299        IEM_MC_ARG(uint64_t *,          pDst, 0);
    300300        IEM_MC_ARG(uint64_t const *,    pSrc, 1);
    301         IEM_MC_MAYBE_RAISE_MMX_RELATED_XCPT_EX(fSupported);
     301        IEM_MC_MAYBE_RAISE_MMX_RELATED_XCPT();
    302302        IEM_MC_PREPARE_FPU_USAGE();
    303303        IEM_MC_FPU_TO_MMX_MODE();
     
    323323
    324324        IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffSrc, bRm, 0);
    325         IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    326         IEM_MC_MAYBE_RAISE_MMX_RELATED_XCPT_EX(fSupported);
     325        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fSse2);
     326        IEM_MC_MAYBE_RAISE_MMX_RELATED_XCPT();
    327327        IEM_MC_FETCH_MEM_U64(uSrc, pVCpu->iem.s.iEffSeg, GCPtrEffSrc);
    328328
     
    65496549         */
    65506550        uint8_t bImm; IEM_OPCODE_GET_NEXT_U8(&bImm);
    6551         IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
     6551        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX_2_OR(fSse, fAmdMmxExts);
    65526552
    65536553        IEM_MC_BEGIN(3, 0);
     
    65556555        IEM_MC_ARG(uint64_t const *,    pSrc, 1);
    65566556        IEM_MC_ARG_CONST(uint8_t,       bImmArg, /*=*/ bImm, 2);
    6557         IEM_MC_MAYBE_RAISE_MMX_RELATED_XCPT_CHECK_SSE_OR_MMXEXT();
     6557        IEM_MC_MAYBE_RAISE_MMX_RELATED_XCPT();
    65586558        IEM_MC_PREPARE_FPU_USAGE();
    65596559        IEM_MC_FPU_TO_MMX_MODE();
     
    65816581        uint8_t bImm; IEM_OPCODE_GET_NEXT_U8(&bImm);
    65826582        IEM_MC_ARG_CONST(uint8_t,               bImmArg, /*=*/ bImm, 2);
    6583         IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    6584         IEM_MC_MAYBE_RAISE_MMX_RELATED_XCPT_CHECK_SSE_OR_MMXEXT();
     6583        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX_2_OR(fSse, fAmdMmxExts);
     6584        IEM_MC_MAYBE_RAISE_MMX_RELATED_XCPT();
    65856585        IEM_MC_FETCH_MEM_U64(uSrc, pVCpu->iem.s.iEffSeg, GCPtrEffSrc);
    65866586
     
    1188211882         */
    1188311883        uint8_t bImm; IEM_OPCODE_GET_NEXT_U8(&bImm);
    11884         IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
     11884        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX_2_OR(fSse, fAmdMmxExts);
    1188511885        IEM_MC_BEGIN(3, 0);
    1188611886        IEM_MC_ARG(uint64_t *,           pu64Dst,               0);
    1188711887        IEM_MC_ARG(uint16_t,             u16Src,                1);
    1188811888        IEM_MC_ARG_CONST(uint8_t,        bImmArg, /*=*/ bImm,   2);
    11889         IEM_MC_MAYBE_RAISE_MMX_RELATED_XCPT_CHECK_SSE_OR_MMXEXT();
     11889        IEM_MC_MAYBE_RAISE_MMX_RELATED_XCPT();
    1189011890        IEM_MC_PREPARE_FPU_USAGE();
    1189111891        IEM_MC_FPU_TO_MMX_MODE();
     
    1191011910        uint8_t bImm; IEM_OPCODE_GET_NEXT_U8(&bImm);
    1191111911        IEM_MC_ARG_CONST(uint8_t, bImmArg, /*=*/ bImm,   2);
    11912         IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    11913         IEM_MC_MAYBE_RAISE_MMX_RELATED_XCPT_CHECK_SSE_OR_MMXEXT();
     11912        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX_2_OR(fSse, fAmdMmxExts);
     11913        IEM_MC_MAYBE_RAISE_MMX_RELATED_XCPT();
    1191411914        IEM_MC_PREPARE_FPU_USAGE();
    1191511915        IEM_MC_FPU_TO_MMX_MODE();
     
    1199011990         */
    1199111991        uint8_t bImm; IEM_OPCODE_GET_NEXT_U8(&bImm);
    11992         IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
     11992        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX_2_OR(fSse, fAmdMmxExts);
    1199311993        IEM_MC_BEGIN(3, 1);
    1199411994        IEM_MC_LOCAL(uint16_t,              u16Dst);
     
    1199611996        IEM_MC_ARG(uint64_t,                u64Src,                1);
    1199711997        IEM_MC_ARG_CONST(uint8_t,           bImmArg, /*=*/ bImm,   2);
    11998         IEM_MC_MAYBE_RAISE_MMX_RELATED_XCPT_CHECK_SSE_OR_MMXEXT();
     11998        IEM_MC_MAYBE_RAISE_MMX_RELATED_XCPT();
    1199911999        IEM_MC_PREPARE_FPU_USAGE();
    1200012000        IEM_MC_FPU_TO_MMX_MODE();
     
    1273912739{
    1274012740    IEMOP_MNEMONIC2(RM, PADDQ, paddq, Pq, Qq, DISOPTYPE_HARMLESS | DISOPTYPE_X86_MMX, IEMOPHINT_IGNORES_OP_SIZES);
    12741     return FNIEMOP_CALL_2(iemOpCommonMmx_FullFull_To_Full_Ex, iemAImpl_paddq_u64, IEM_GET_GUEST_CPU_FEATURES(pVCpu)->fSse2);
     12741    return FNIEMOP_CALL_1(iemOpCommonMmx_FullFull_To_Full_Sse2, iemAImpl_paddq_u64);
    1274212742}
    1274312743
     
    1293712937        /* Note! Taking the lazy approch here wrt the high 32-bits of the GREG. */
    1293812938        IEMOP_MNEMONIC2(RM_REG, PMOVMSKB, pmovmskb, Gd, Nq, DISOPTYPE_X86_MMX | DISOPTYPE_HARMLESS, 0);
    12939         IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
     12939        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX_2_OR(fSse, fAmdMmxExts);
    1294012940        IEM_MC_BEGIN(2, 0);
    1294112941        IEM_MC_ARG(uint64_t *,              puDst, 0);
    1294212942        IEM_MC_ARG(uint64_t const *,        puSrc, 1);
    12943         IEM_MC_MAYBE_RAISE_MMX_RELATED_XCPT_CHECK_SSE_OR_MMXEXT();
     12943        IEM_MC_MAYBE_RAISE_MMX_RELATED_XCPT();
    1294412944        IEM_MC_PREPARE_FPU_USAGE();
    1294512945        IEM_MC_FPU_TO_MMX_MODE();
     
    1374413744{
    1374513745    IEMOP_MNEMONIC2(RM, PSUBQ, psubq, Pq, Qq, DISOPTYPE_HARMLESS | DISOPTYPE_X86_MMX, IEMOPHINT_IGNORES_OP_SIZES);
    13746     return FNIEMOP_CALL_2(iemOpCommonMmx_FullFull_To_Full_Ex, iemAImpl_psubq_u64, IEM_GET_GUEST_CPU_FEATURES(pVCpu)->fSse2);
     13746    return FNIEMOP_CALL_1(iemOpCommonMmx_FullFull_To_Full_Sse2, iemAImpl_psubq_u64);
    1374713747}
    1374813748
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