VirtualBox

Changeset 99325 in vbox for trunk/src


Ignore:
Timestamp:
Apr 6, 2023 11:45:39 PM (22 months ago)
Author:
vboxsync
Message:

VMM/IEM: Use IEMOP_HLP_DONE_VEX_DECODING_*() rather than IEM_MC_MAYBE_RAISE_SSE4*_RELATED_XCPT to do the CPUID check. bugref:10369

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

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/VMM/VMMAll/IEMAllInstructionsThree0f38.cpp.h

    r99220 r99325  
    110110         * Register, register.
    111111         */
    112         IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
     112        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fSse41);
    113113        IEM_MC_BEGIN(2, 0);
    114114        IEM_MC_ARG(PRTUINT128U,                 puDst, 0);
     
    134134
    135135        IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffSrc, bRm, 0);
    136         IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
     136        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fSse41);
    137137        IEM_MC_MAYBE_RAISE_SSE41_RELATED_XCPT();
    138138        IEM_MC_FETCH_MEM_U128_ALIGN_SSE(uSrc, pVCpu->iem.s.iEffSeg, GCPtrEffSrc);
     
    169169         * Register, register.
    170170         */
    171         IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
     171        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fSse41);
    172172        IEM_MC_BEGIN(2, 0);
    173173        IEM_MC_ARG(PRTUINT128U,                 puDst, 0);
     
    193193
    194194        IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffSrc, bRm, 0);
    195         IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
     195        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fSse41);
    196196        IEM_MC_MAYBE_RAISE_SSE41_RELATED_XCPT();
    197197        IEM_MC_FETCH_MEM_U128_ALIGN_SSE(uSrc, pVCpu->iem.s.iEffSeg, GCPtrEffSrc);
     
    225225         * Register, register.
    226226         */
    227         IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
     227        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fSse42);
    228228        IEM_MC_BEGIN(2, 0);
    229229        IEM_MC_ARG(PRTUINT128U,                 puDst, 0);
     
    249249
    250250        IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffSrc, bRm, 0);
    251         IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
     251        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fSse42);
    252252        IEM_MC_MAYBE_RAISE_SSE42_RELATED_XCPT();
    253253        IEM_MC_FETCH_MEM_U128_ALIGN_SSE(uSrc, pVCpu->iem.s.iEffSeg, GCPtrEffSrc);
     
    285285         * Register, register.
    286286         */
    287         IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
     287        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fAesNi);
    288288        IEM_MC_BEGIN(2, 0);
    289289        IEM_MC_ARG(PRTUINT128U,                 puDst, 0);
     
    309309
    310310        IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffSrc, bRm, 0);
    311         IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
     311        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fAesNi);
    312312        IEM_MC_MAYBE_RAISE_AESNI_RELATED_XCPT();
    313313        IEM_MC_FETCH_MEM_U128_ALIGN_SSE(uSrc, pVCpu->iem.s.iEffSeg, GCPtrEffSrc);
     
    345345         * Register, register.
    346346         */
    347         IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
     347        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fSha);
    348348        IEM_MC_BEGIN(2, 0);
    349349        IEM_MC_ARG(PRTUINT128U,                 puDst, 0);
     
    369369
    370370        IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffSrc, bRm, 0);
    371         IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
     371        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fSha);
    372372        IEM_MC_MAYBE_RAISE_SHA_RELATED_XCPT();
    373373        IEM_MC_FETCH_MEM_U128_ALIGN_SSE(uSrc, pVCpu->iem.s.iEffSeg, GCPtrEffSrc);
     
    645645         * Register, register. \
    646646         */ \
    647         IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); \
     647        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fSse41); \
    648648        IEM_MC_BEGIN(3, 0); \
    649649        IEM_MC_ARG(PRTUINT128U,  puDst,  0); \
     
    674674        IEM_MC_ARG(PCRTUINT128U,           puMask,      2); \
    675675        IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffSrc, bRm, 0); \
    676         IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); \
     676        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fSse41); \
    677677        IEM_MC_MAYBE_RAISE_SSE41_RELATED_XCPT(); \
    678678        IEM_MC_PREPARE_SSE_USAGE(); \
     
    740740         * Register, register.
    741741         */
    742         IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
     742        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fSse41);
    743743        IEM_MC_BEGIN(3, 0);
    744744        IEM_MC_ARG(PCRTUINT128U,                puSrc1,  0);
     
    767767
    768768        IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffSrc, bRm, 0);
    769         IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
     769        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fSse41);
    770770        IEM_MC_MAYBE_RAISE_SSE41_RELATED_XCPT();
    771771        IEM_MC_FETCH_MEM_U128_ALIGN_SSE(uSrc2, pVCpu->iem.s.iEffSeg, GCPtrEffSrc);
     
    864864         * Register, register. \
    865865         */ \
    866         IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); \
     866        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fSse41); \
    867867        IEM_MC_BEGIN(2, 0); \
    868868        IEM_MC_ARG(PRTUINT128U,                 puDst, 0); \
     
    889889        IEM_MC_ARG(uint ## a_SrcWidth ## _t,    uSrc, 1); \
    890890        IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffSrc, bRm, 0); \
    891         IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); \
     891        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fSse41); \
    892892        IEM_MC_MAYBE_RAISE_SSE41_RELATED_XCPT(); \
    893893        IEM_MC_PREPARE_SSE_USAGE(); \
     
    10021002
    10031003        IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffSrc, bRm, 0);
    1004         IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
     1004        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fSse41);
    10051005        IEM_MC_MAYBE_RAISE_SSE41_RELATED_XCPT();
    10061006        IEM_MC_ACTUALIZE_SSE_STATE_FOR_CHANGE();
     
    15191519         * Register, register.
    15201520         */
    1521         IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
     1521        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fSha);
    15221522        IEM_MC_BEGIN(3, 0);
    15231523        IEM_MC_ARG(PRTUINT128U,                 puDst, 0);
     
    15471547
    15481548        IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffSrc, bRm, 0);
    1549         IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
     1549        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fSha);
    15501550        IEM_MC_MAYBE_RAISE_SHA_RELATED_XCPT();
    15511551        IEM_MC_FETCH_MEM_U128_ALIGN_SSE(uSrc, pVCpu->iem.s.iEffSeg, GCPtrEffSrc);
  • trunk/src/VBox/VMM/VMMAll/IEMAllInstructionsThree0f3a.cpp.h

    r99289 r99325  
    111111         */
    112112        uint8_t bImm; IEM_OPCODE_GET_NEXT_U8(&bImm);
    113         IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
     113        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fSse41);
    114114        IEM_MC_BEGIN(3, 0);
    115115        IEM_MC_ARG(PRTUINT128U,                 puDst,               0);
     
    138138        uint8_t bImm; IEM_OPCODE_GET_NEXT_U8(&bImm);
    139139        IEM_MC_ARG_CONST(uint8_t,               bImmArg, /*=*/ bImm, 2);
    140         IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
     140        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fSse41);
    141141        IEM_MC_MAYBE_RAISE_SSE41_RELATED_XCPT();
    142142        IEM_MC_FETCH_MEM_U128_ALIGN_SSE(uSrc, pVCpu->iem.s.iEffSeg, GCPtrEffSrc);
     
    171171         */
    172172        uint8_t bImm; IEM_OPCODE_GET_NEXT_U8(&bImm);
    173         IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
     173        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fSse41);
    174174        IEM_MC_BEGIN(4, 2);
    175175        IEM_MC_LOCAL(IEMMEDIAF2XMMSRC,              Src);
     
    207207        uint8_t bImm; IEM_OPCODE_GET_NEXT_U8(&bImm);
    208208        IEM_MC_ARG_CONST(uint8_t,                   bImmArg, /*=*/ bImm,    3);
    209         IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
     209        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fSse41);
    210210        IEM_MC_MAYBE_RAISE_SSE41_RELATED_XCPT();
    211211        IEM_MC_FETCH_MEM_XMM_ALIGN_SSE(Src.uSrc2, pVCpu->iem.s.iEffSeg, GCPtrEffSrc);
     
    243243         */
    244244        uint8_t bImm; IEM_OPCODE_GET_NEXT_U8(&bImm);
    245         IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
     245        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fAesNi);
    246246        IEM_MC_BEGIN(3, 0);
    247247        IEM_MC_ARG(PRTUINT128U,                 puDst,               0);
     
    270270        uint8_t bImm; IEM_OPCODE_GET_NEXT_U8(&bImm);
    271271        IEM_MC_ARG_CONST(uint8_t,               bImmArg, /*=*/ bImm, 2);
    272         IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
     272        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fAesNi);
    273273        IEM_MC_MAYBE_RAISE_AESNI_RELATED_XCPT();
    274274        IEM_MC_FETCH_MEM_U128_ALIGN_SSE(uSrc, pVCpu->iem.s.iEffSeg, GCPtrEffSrc);
     
    323323         */
    324324        uint8_t bImm; IEM_OPCODE_GET_NEXT_U8(&bImm);
    325         IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
     325        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fSse41);
    326326        IEM_MC_BEGIN(4, 2);
    327327        IEM_MC_LOCAL(IEMMEDIAF2XMMSRC,              Src);
     
    359359        uint8_t bImm; IEM_OPCODE_GET_NEXT_U8(&bImm);
    360360        IEM_MC_ARG_CONST(uint8_t,                   bImmArg, /*=*/ bImm,    3);
    361         IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
     361        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fSse41);
    362362        IEM_MC_MAYBE_RAISE_SSE41_RELATED_XCPT();
    363363        IEM_MC_FETCH_MEM_XMM_U32(Src.uSrc2, 0 /*a_iDword */, pVCpu->iem.s.iEffSeg, GCPtrEffSrc);
     
    388388         */
    389389        uint8_t bImm; IEM_OPCODE_GET_NEXT_U8(&bImm);
    390         IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
     390        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fSse41);
    391391        IEM_MC_BEGIN(4, 2);
    392392        IEM_MC_LOCAL(IEMMEDIAF2XMMSRC,              Src);
     
    424424        uint8_t bImm; IEM_OPCODE_GET_NEXT_U8(&bImm);
    425425        IEM_MC_ARG_CONST(uint8_t,                   bImmArg, /*=*/ bImm,    3);
    426         IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
     426        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fSse41);
    427427        IEM_MC_MAYBE_RAISE_SSE41_RELATED_XCPT();
    428428        IEM_MC_FETCH_MEM_XMM_U64(Src.uSrc2, 0 /*a_iQword */, pVCpu->iem.s.iEffSeg, GCPtrEffSrc);
     
    553553         */
    554554        uint8_t bImm; IEM_OPCODE_GET_NEXT_U8(&bImm);
    555         IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
     555        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fSse41);
    556556        IEM_MC_BEGIN(0, 1);
    557557        IEM_MC_LOCAL(uint8_t,   uValue);
     
    574574        IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffSrc, bRm, 1);
    575575        uint8_t bImm; IEM_OPCODE_GET_NEXT_U8(&bImm);
    576         IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
     576        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fSse41);
    577577        IEM_MC_MAYBE_RAISE_SSE41_RELATED_XCPT();
    578578        IEM_MC_PREPARE_SSE_USAGE();
     
    597597         */
    598598        uint8_t bImm; IEM_OPCODE_GET_NEXT_U8(&bImm);
    599         IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
     599        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fSse41);
    600600        IEM_MC_BEGIN(0, 1);
    601601        IEM_MC_LOCAL(uint16_t,  uValue);
     
    618618        IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffSrc, bRm, 1);
    619619        uint8_t bImm; IEM_OPCODE_GET_NEXT_U8(&bImm);
    620         IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
     620        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fSse41);
    621621        IEM_MC_MAYBE_RAISE_SSE41_RELATED_XCPT();
    622622        IEM_MC_PREPARE_SSE_USAGE();
     
    648648             */
    649649            uint8_t bImm; IEM_OPCODE_GET_NEXT_U8(&bImm);
    650             IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
     650            IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fSse41);
    651651            IEM_MC_BEGIN(0, 1);
    652652            IEM_MC_LOCAL(uint64_t,  uSrc);
     
    669669            IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffSrc, bRm, 1);
    670670            uint8_t bImm; IEM_OPCODE_GET_NEXT_U8(&bImm);
    671             IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
     671            IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fSse41);
    672672            IEM_MC_MAYBE_RAISE_SSE41_RELATED_XCPT();
    673673            IEM_MC_PREPARE_SSE_USAGE();
     
    695695             */
    696696            uint8_t bImm; IEM_OPCODE_GET_NEXT_U8(&bImm);
    697             IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
     697            IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fSse41);
    698698            IEM_MC_BEGIN(0, 1);
    699699            IEM_MC_LOCAL(uint32_t,  uSrc);
     
    716716            IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffSrc, bRm, 1);
    717717            uint8_t bImm; IEM_OPCODE_GET_NEXT_U8(&bImm);
    718             IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
     718            IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fSse41);
    719719            IEM_MC_MAYBE_RAISE_SSE41_RELATED_XCPT();
    720720            IEM_MC_PREPARE_SSE_USAGE();
     
    739739         */
    740740        uint8_t bImm; IEM_OPCODE_GET_NEXT_U8(&bImm);
    741         IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
     741        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fSse41);
    742742        IEM_MC_BEGIN(0, 1);
    743743        IEM_MC_LOCAL(uint32_t,  uSrc);
     
    760760        IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffSrc, bRm, 1);
    761761        uint8_t bImm; IEM_OPCODE_GET_NEXT_U8(&bImm);
    762         IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
     762        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fSse41);
    763763        IEM_MC_MAYBE_RAISE_SSE41_RELATED_XCPT();
    764764        IEM_MC_PREPARE_SSE_USAGE();
     
    792792         */
    793793        uint8_t bImm; IEM_OPCODE_GET_NEXT_U8(&bImm);
    794         IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
     794        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fSse41);
    795795        IEM_MC_BEGIN(0, 1);
    796796        IEM_MC_LOCAL(uint8_t,   uSrc);
     
    813813        IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffSrc, bRm, 1);
    814814        uint8_t bImm; IEM_OPCODE_GET_NEXT_U8(&bImm);
    815         IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
     815        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fSse41);
    816816        IEM_MC_MAYBE_RAISE_SSE41_RELATED_XCPT();
    817817        IEM_MC_PREPARE_SSE_USAGE();
     
    835835         */
    836836        uint8_t bImm; IEM_OPCODE_GET_NEXT_U8(&bImm);
    837         IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
     837        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fSse41);
    838838        IEM_MC_BEGIN(0, 3);
    839839        IEM_MC_LOCAL(uint32_t,  uSrc);
     
    866866        IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffSrc, bRm, 1);
    867867        uint8_t bImm; IEM_OPCODE_GET_NEXT_U8(&bImm);
    868         IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
     868        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fSse41);
    869869        IEM_MC_MAYBE_RAISE_SSE41_RELATED_XCPT();
    870870        IEM_MC_PREPARE_SSE_USAGE();
     
    899899             */
    900900            uint8_t bImm; IEM_OPCODE_GET_NEXT_U8(&bImm);
    901             IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
     901            IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fSse41);
    902902            IEM_MC_BEGIN(0, 1);
    903903            IEM_MC_LOCAL(uint64_t,  uSrc);
     
    920920            IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffSrc, bRm, 1);
    921921            uint8_t bImm; IEM_OPCODE_GET_NEXT_U8(&bImm);
    922             IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
     922            IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fSse41);
    923923            IEM_MC_MAYBE_RAISE_SSE41_RELATED_XCPT();
    924924            IEM_MC_PREPARE_SSE_USAGE();
     
    946946             */
    947947            uint8_t bImm; IEM_OPCODE_GET_NEXT_U8(&bImm);
    948             IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
     948            IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fSse41);
    949949            IEM_MC_BEGIN(0, 1);
    950950            IEM_MC_LOCAL(uint32_t,  uSrc);
     
    967967            IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffSrc, bRm, 1);
    968968            uint8_t bImm; IEM_OPCODE_GET_NEXT_U8(&bImm);
    969             IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
     969            IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fSse41);
    970970            IEM_MC_MAYBE_RAISE_SSE41_RELATED_XCPT();
    971971            IEM_MC_PREPARE_SSE_USAGE();
     
    11471147             */
    11481148            uint8_t bImm; IEM_OPCODE_GET_NEXT_U8(&bImm);
    1149             IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
     1149            IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fSse42);
    11501150            IEM_MC_BEGIN(4, 1);
    11511151            IEM_MC_ARG(PRTUINT128U,                puDst,             0);
     
    11841184            uint8_t bImm; IEM_OPCODE_GET_NEXT_U8(&bImm);
    11851185            IEM_MC_ARG_CONST(uint8_t,               bImmArg, /*=*/ bImm, 3);
    1186             IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
     1186            IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fSse42);
    11871187            IEM_MC_MAYBE_RAISE_SSE42_RELATED_XCPT();
    11881188            IEM_MC_FETCH_MEM_U128(Src.uSrc2, pVCpu->iem.s.iEffSeg, GCPtrEffSrc);
     
    12111211             */
    12121212            uint8_t bImm; IEM_OPCODE_GET_NEXT_U8(&bImm);
    1213             IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
     1213            IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fSse42);
    12141214            IEM_MC_BEGIN(4, 1);
    12151215            IEM_MC_ARG(PRTUINT128U,                puDst,             0);
     
    12481248            uint8_t bImm; IEM_OPCODE_GET_NEXT_U8(&bImm);
    12491249            IEM_MC_ARG_CONST(uint8_t,               bImmArg, /*=*/ bImm, 3);
    1250             IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
     1250            IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fSse42);
    12511251            IEM_MC_MAYBE_RAISE_SSE42_RELATED_XCPT();
    12521252            IEM_MC_FETCH_MEM_U128(Src.uSrc2, pVCpu->iem.s.iEffSeg, GCPtrEffSrc);
     
    12831283             */
    12841284            uint8_t bImm; IEM_OPCODE_GET_NEXT_U8(&bImm);
    1285             IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
     1285            IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fSse42);
    12861286            IEM_MC_BEGIN(4, 1);
    12871287            IEM_MC_ARG(uint32_t *,                 pu32Ecx,             0);
     
    13211321            uint8_t bImm; IEM_OPCODE_GET_NEXT_U8(&bImm);
    13221322            IEM_MC_ARG_CONST(uint8_t,               bImmArg, /*=*/ bImm, 3);
    1323             IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
     1323            IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fSse42);
    13241324            IEM_MC_MAYBE_RAISE_SSE42_RELATED_XCPT();
    13251325            IEM_MC_FETCH_MEM_U128(Src.uSrc2, pVCpu->iem.s.iEffSeg, GCPtrEffSrc);
     
    13481348             */
    13491349            uint8_t bImm; IEM_OPCODE_GET_NEXT_U8(&bImm);
    1350             IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
     1350            IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fSse42);
    13511351            IEM_MC_BEGIN(4, 1);
    13521352            IEM_MC_ARG(uint32_t *,                 pu32Ecx,             0);
     
    13861386            uint8_t bImm; IEM_OPCODE_GET_NEXT_U8(&bImm);
    13871387            IEM_MC_ARG_CONST(uint8_t,               bImmArg, /*=*/ bImm, 3);
    1388             IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
     1388            IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fSse42);
    13891389            IEM_MC_MAYBE_RAISE_SSE42_RELATED_XCPT();
    13901390            IEM_MC_FETCH_MEM_U128(Src.uSrc2, pVCpu->iem.s.iEffSeg, GCPtrEffSrc);
     
    14201420         */
    14211421        uint8_t bImm; IEM_OPCODE_GET_NEXT_U8(&bImm);
    1422         IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
     1422        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fSse42);
    14231423        IEM_MC_BEGIN(4, 1);
    14241424        IEM_MC_ARG(PRTUINT128U,                puDst,             0);
     
    14551455        uint8_t bImm; IEM_OPCODE_GET_NEXT_U8(&bImm);
    14561456        IEM_MC_ARG_CONST(uint8_t,               bImmArg, /*=*/ bImm, 3);
    1457         IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
     1457        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fSse42);
    14581458        IEM_MC_MAYBE_RAISE_SSE42_RELATED_XCPT();
    14591459        IEM_MC_FETCH_MEM_U128(Src.uSrc2, pVCpu->iem.s.iEffSeg, GCPtrEffSrc);
     
    14851485         */
    14861486        uint8_t bImm; IEM_OPCODE_GET_NEXT_U8(&bImm);
    1487         IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
     1487        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fSse42);
    14881488        IEM_MC_BEGIN(4, 1);
    14891489        IEM_MC_ARG(uint32_t *,                 pu32Ecx,             0);
     
    15211521        uint8_t bImm; IEM_OPCODE_GET_NEXT_U8(&bImm);
    15221522        IEM_MC_ARG_CONST(uint8_t,               bImmArg, /*=*/ bImm, 3);
    1523         IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
     1523        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fSse42);
    15241524        IEM_MC_MAYBE_RAISE_SSE42_RELATED_XCPT();
    15251525        IEM_MC_FETCH_MEM_U128(Src.uSrc2, pVCpu->iem.s.iEffSeg, GCPtrEffSrc);
     
    15821582         */
    15831583        uint8_t bImm; IEM_OPCODE_GET_NEXT_U8(&bImm);
    1584         IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
     1584        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fSha);
    15851585        IEM_MC_BEGIN(3, 0);
    15861586        IEM_MC_ARG(PRTUINT128U,                 puDst,               0);
     
    16121612        uint8_t bImm; IEM_OPCODE_GET_NEXT_U8(&bImm);
    16131613        IEM_MC_ARG_CONST(uint8_t,               bImmArg, /*=*/ bImm, 2);
    1614         IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
     1614        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fSha);
    16151615        IEM_MC_MAYBE_RAISE_SHA_RELATED_XCPT();
    16161616        IEM_MC_FETCH_MEM_U128_ALIGN_SSE(uSrc, pVCpu->iem.s.iEffSeg, GCPtrEffSrc);
  • trunk/src/VBox/VMM/include/IEMOpHlp.h

    r99324 r99325  
    421421    } while (0)
    422422
     423/**
     424 * Done decoding, raise \#UD exception if lock prefix present, or if the
     425 * a_fFeature is present in the guest CPU.
     426 */
     427#define IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(a_fFeature) \
     428    do \
     429    { \
     430        if (RT_LIKELY(   !(pVCpu->iem.s.fPrefixes & IEM_OP_PRF_LOCK) \
     431                      && IEM_GET_GUEST_CPU_FEATURES(pVCpu)->a_fFeature)) \
     432        { /* likely */ } \
     433        else \
     434            return IEMOP_RAISE_INVALID_LOCK_PREFIX(); \
     435    } while (0)
     436
    423437
    424438/**
     
    509523 * repnz or size prefixes are present, or if the VEX.VVVV field doesn't indicate
    510524 * register 0, if in real or v8086 mode, or if the a_fFeature is not present in
    511  * the guest CPU. 
     525 * the guest CPU.
    512526 */
    513527#define IEMOP_HLP_DONE_VEX_DECODING_NO_VVVV_EX(a_fFeature) \
     
    546560 * Raises \#UD exception if rex, rep, opsize or lock prefixes are present, if
    547561 * we're in real or v8086 mode, if VEX.V!=0xf, if VEX.L!=0, or if the a_fFeature
    548  * is not present in the guest CPU. 
     562 * is not present in the guest CPU.
    549563 */
    550564#define IEMOP_HLP_DONE_VEX_DECODING_L0_AND_NO_VVVV_EX(a_fFeature) \
  • trunk/src/VBox/VMM/testcase/tstIEMCheckMc.cpp

    r99324 r99325  
    160160#define IEMOP_HLP_CLEAR_REX_NOT_BEFORE_OPCODE(a_szPrf)      do { } while (0)
    161161#define IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX()            do { } while (0)
     162#define IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(a_fFeature)                                       do { } while (0)
    162163#define IEMOP_HLP_DONE_VEX_DECODING()                       do { } while (0)
    163164#define IEMOP_HLP_DONE_VEX_DECODING_EX(a_fFeature)          do { } while (0)
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