VirtualBox

Changeset 100714 in vbox


Ignore:
Timestamp:
Jul 27, 2023 10:12:09 AM (16 months ago)
Author:
vboxsync
Message:

VMM/IEM: Require a IEMOP_HLP_DONE_DECODING in all MC blocks so we know exacly when the recompiler starts emitting code (calls) and we can make sure it's still safe to restart insturction decoding. Also made the python script check this and that nothing that smells like decoding happens after IEMOP_HLP_DONE_DECODING and its friends. bugref:10369

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

Legend:

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

    r98916 r100714  
    4747    if (IEM_IS_MODRM_REG_MODE(bRm)) \
    4848    { \
    49         IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); \
    5049        switch (pVCpu->iem.s.enmEffOpSize) \
    5150        { \
    5251            case IEMMODE_16BIT: \
    5352                IEM_MC_BEGIN(3, 0); \
     53                IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); \
    5454                IEM_MC_ARG(uint16_t *, pu16Dst, 0); \
    5555                IEM_MC_ARG(uint16_t,   u16Src,  1); \
     
    6767            case IEMMODE_32BIT: \
    6868                IEM_MC_BEGIN(3, 0); \
     69                IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); \
    6970                IEM_MC_ARG(uint32_t *, pu32Dst, 0); \
    7071                IEM_MC_ARG(uint32_t,   u32Src,  1); \
     
    8485            case IEMMODE_64BIT: \
    8586                IEM_MC_BEGIN(3, 0); \
     87                IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); \
    8688                IEM_MC_ARG(uint64_t *, pu64Dst, 0); \
    8789                IEM_MC_ARG(uint64_t,   u64Src,  1); \
  • trunk/src/VBox/VMM/VMMAll/IEMAllInstructionsOneByte.cpp.h

    r100701 r100714  
    7171    if (IEM_IS_MODRM_REG_MODE(bRm)) \
    7272    { \
    73         IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); \
    74         \
    7573        IEM_MC_BEGIN(3, 0); \
    7674        IEM_MC_ARG(uint8_t *,  pu8Dst,  0); \
     
    7876        IEM_MC_ARG(uint32_t *, pEFlags, 2); \
    7977         \
     78        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); \
    8079        IEM_MC_FETCH_GREG_U8(u8Src, IEM_GET_MODRM_REG(pVCpu, bRm)); \
    8180        IEM_MC_REF_GREG_U8(pu8Dst, IEM_GET_MODRM_RM(pVCpu, bRm)); \
     
    158157    if (IEM_IS_MODRM_REG_MODE(bRm)) \
    159158    { \
     159        IEM_MC_BEGIN(3, 0); \
    160160        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); \
    161         IEM_MC_BEGIN(3, 0); \
    162161        IEM_MC_ARG(uint8_t *,  pu8Dst,  0); \
    163162        IEM_MC_ARG(uint8_t,    u8Src,   1); \
     
    208207    if (IEM_IS_MODRM_REG_MODE(bRm)) \
    209208    { \
    210         IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); \
    211209        switch (pVCpu->iem.s.enmEffOpSize) \
    212210        { \
    213211            case IEMMODE_16BIT: \
    214212                IEM_MC_BEGIN(3, 0); \
     213                IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); \
    215214                IEM_MC_ARG(uint16_t *, pu16Dst, 0); \
    216215                IEM_MC_ARG(uint16_t,   u16Src,  1); \
     
    228227            case IEMMODE_32BIT: \
    229228                IEM_MC_BEGIN(3, 0); \
     229                IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); \
    230230                IEM_MC_ARG(uint32_t *, pu32Dst, 0); \
    231231                IEM_MC_ARG(uint32_t,   u32Src,  1); \
     
    245245            case IEMMODE_64BIT: \
    246246                IEM_MC_BEGIN(3, 0); \
     247                IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); \
    247248                IEM_MC_ARG(uint64_t *, pu64Dst, 0); \
    248249                IEM_MC_ARG(uint64_t,   u64Src,  1); \
     
    422423#define IEMOP_BODY_BINARY_AL_Ib(a_fnNormalU8) \
    423424    uint8_t u8Imm; IEM_OPCODE_GET_NEXT_U8(&u8Imm); \
    424     IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); \
    425425    \
    426426    IEM_MC_BEGIN(3, 0); \
     427    IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); \
    427428    IEM_MC_ARG(uint8_t *,       pu8Dst,             0); \
    428429    IEM_MC_ARG_CONST(uint8_t,   u8Src,/*=*/ u8Imm,  1); \
     
    446447        { \
    447448            uint16_t u16Imm; IEM_OPCODE_GET_NEXT_U16(&u16Imm); \
    448             IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); \
    449449            \
    450450            IEM_MC_BEGIN(3, 0); \
     451            IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); \
    451452            IEM_MC_ARG(uint16_t *,      pu16Dst,                0); \
    452453            IEM_MC_ARG_CONST(uint16_t,  u16Src,/*=*/ u16Imm,    1); \
     
    464465        { \
    465466            uint32_t u32Imm; IEM_OPCODE_GET_NEXT_U32(&u32Imm); \
    466             IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); \
    467467            \
    468468            IEM_MC_BEGIN(3, 0); \
     469            IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); \
    469470            IEM_MC_ARG(uint32_t *,      pu32Dst,                0); \
    470471            IEM_MC_ARG_CONST(uint32_t,  u32Src,/*=*/ u32Imm,    1); \
     
    484485        { \
    485486            uint64_t u64Imm; IEM_OPCODE_GET_NEXT_S32_SX_U64(&u64Imm); \
    486             IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); \
    487487            \
    488488            IEM_MC_BEGIN(3, 0); \
     489            IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); \
    489490            IEM_MC_ARG(uint64_t *,      pu64Dst,                0); \
    490491            IEM_MC_ARG_CONST(uint64_t,  u64Src,/*=*/ u64Imm,    1); \
     
    15541555 */
    15551556#define IEMOP_BODY_UNARY_GReg(a_fnNormalU16, a_fnNormalU32, a_iReg) \
    1556     IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); \
    15571557    switch (pVCpu->iem.s.enmEffOpSize) \
    15581558    { \
    15591559        case IEMMODE_16BIT: \
    15601560            IEM_MC_BEGIN(2, 0); \
     1561            IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); \
    15611562            IEM_MC_ARG(uint16_t *,  pu16Dst, 0); \
    15621563            IEM_MC_ARG(uint32_t *,  pEFlags, 1); \
     
    15701571        case IEMMODE_32BIT: \
    15711572            IEM_MC_BEGIN(2, 0); \
     1573            IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); \
    15721574            IEM_MC_ARG(uint32_t *,  pu32Dst, 0); \
    15731575            IEM_MC_ARG(uint32_t *,  pEFlags, 1); \
     
    19731975FNIEMOP_DEF_1(iemOpCommonPushGReg, uint8_t, iReg)
    19741976{
    1975     IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    19761977    if (IEM_IS_64BIT_CODE(pVCpu))
    19771978    {
     
    19851986        case IEMMODE_16BIT:
    19861987            IEM_MC_BEGIN(0, 1);
     1988            IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    19871989            IEM_MC_LOCAL(uint16_t, u16Value);
    19881990            IEM_MC_FETCH_GREG_U16(u16Value, iReg);
     
    19941996        case IEMMODE_32BIT:
    19951997            IEM_MC_BEGIN(0, 1);
     1998            IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    19961999            IEM_MC_LOCAL(uint32_t, u32Value);
    19972000            IEM_MC_FETCH_GREG_U32(u32Value, iReg);
     
    20032006        case IEMMODE_64BIT:
    20042007            IEM_MC_BEGIN(0, 1);
     2008            IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    20052009            IEM_MC_LOCAL(uint64_t, u64Value);
    20062010            IEM_MC_FETCH_GREG_U64(u64Value, iReg);
     
    20642068    {
    20652069        IEM_MC_BEGIN(0, 1);
     2070        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    20662071        IEM_MC_LOCAL(uint16_t, u16Value);
    20672072        IEM_MC_FETCH_GREG_U16(u16Value, X86_GREG_xSP);
     
    21102115FNIEMOP_DEF_1(iemOpCommonPopGReg, uint8_t, iReg)
    21112116{
    2112     IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    21132117    if (IEM_IS_64BIT_CODE(pVCpu))
    21142118    {
     
    21222126        case IEMMODE_16BIT:
    21232127            IEM_MC_BEGIN(0, 1);
     2128            IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    21242129            IEM_MC_LOCAL(uint16_t *, pu16Dst);
    21252130            IEM_MC_REF_GREG_U16(pu16Dst, iReg);
     
    21312136        case IEMMODE_32BIT:
    21322137            IEM_MC_BEGIN(0, 1);
     2138            IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    21332139            IEM_MC_LOCAL(uint32_t *, pu32Dst);
    21342140            IEM_MC_REF_GREG_U32(pu32Dst, iReg);
     
    21412147        case IEMMODE_64BIT:
    21422148            IEM_MC_BEGIN(0, 1);
     2149            IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    21432150            IEM_MC_LOCAL(uint64_t *, pu64Dst);
    21442151            IEM_MC_REF_GREG_U64(pu64Dst, iReg);
     
    22072214    }
    22082215
    2209     IEMOP_HLP_DECODED_NL_1(OP_POP, IEMOPFORM_FIXED, OP_PARM_REG_ESP,
    2210                            DISOPTYPE_HARMLESS | DISOPTYPE_X86_DEFAULT_64_OP_SIZE | DISOPTYPE_X86_REXB_EXTENDS_OPREG);
    22112216    /** @todo add testcase for this instruction. */
    22122217    switch (pVCpu->iem.s.enmEffOpSize)
     
    22142219        case IEMMODE_16BIT:
    22152220            IEM_MC_BEGIN(0, 1);
     2221            IEMOP_HLP_DECODED_NL_1(OP_POP, IEMOPFORM_FIXED, OP_PARM_REG_ESP,
     2222                                   DISOPTYPE_HARMLESS | DISOPTYPE_X86_DEFAULT_64_OP_SIZE | DISOPTYPE_X86_REXB_EXTENDS_OPREG);
    22162223            IEM_MC_LOCAL(uint16_t, u16Dst);
    22172224            IEM_MC_POP_U16(&u16Dst); /** @todo not correct MC, fix later. */
     
    22232230        case IEMMODE_32BIT:
    22242231            IEM_MC_BEGIN(0, 1);
     2232            IEMOP_HLP_DECODED_NL_1(OP_POP, IEMOPFORM_FIXED, OP_PARM_REG_ESP,
     2233                                   DISOPTYPE_HARMLESS | DISOPTYPE_X86_DEFAULT_64_OP_SIZE | DISOPTYPE_X86_REXB_EXTENDS_OPREG);
    22252234            IEM_MC_LOCAL(uint32_t, u32Dst);
    22262235            IEM_MC_POP_U32(&u32Dst);
     
    22322241        case IEMMODE_64BIT:
    22332242            IEM_MC_BEGIN(0, 1);
     2243            IEMOP_HLP_DECODED_NL_1(OP_POP, IEMOPFORM_FIXED, OP_PARM_REG_ESP,
     2244                                   DISOPTYPE_HARMLESS | DISOPTYPE_X86_DEFAULT_64_OP_SIZE | DISOPTYPE_X86_REXB_EXTENDS_OPREG);
    22342245            IEM_MC_LOCAL(uint64_t, u64Dst);
    22352246            IEM_MC_POP_U64(&u64Dst);
     
    24622473    {
    24632474        /* Register */
     2475        IEM_MC_BEGIN(3, 0);
    24642476        IEMOP_HLP_DECODED_NL_2(OP_ARPL, IEMOPFORM_MR_REG, OP_PARM_Ew, OP_PARM_Gw, DISOPTYPE_HARMLESS);
    2465         IEM_MC_BEGIN(3, 0);
    24662477        IEM_MC_ARG(uint16_t *,      pu16Dst,    0);
    24672478        IEM_MC_ARG(uint16_t,        u16Src,     1);
     
    25202531             * Register to register.
    25212532             */
     2533            IEM_MC_BEGIN(0, 1);
    25222534            IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    2523             IEM_MC_BEGIN(0, 1);
    25242535            IEM_MC_LOCAL(uint64_t, u64Value);
    25252536            IEM_MC_FETCH_GREG_U32_SX_U64(u64Value, IEM_GET_MODRM_RM(pVCpu, bRm));
     
    26532664        {
    26542665            uint16_t u16Imm; IEM_OPCODE_GET_NEXT_U16(&u16Imm);
     2666            IEM_MC_BEGIN(0,0);
    26552667            IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    2656             IEM_MC_BEGIN(0,0);
    26572668            IEM_MC_PUSH_U16(u16Imm);
    26582669            IEM_MC_ADVANCE_RIP_AND_FINISH();
     
    26642675        {
    26652676            uint32_t u32Imm; IEM_OPCODE_GET_NEXT_U32(&u32Imm);
     2677            IEM_MC_BEGIN(0,0);
    26662678            IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    2667             IEM_MC_BEGIN(0,0);
    26682679            IEM_MC_PUSH_U32(u32Imm);
    26692680            IEM_MC_ADVANCE_RIP_AND_FINISH();
     
    26752686        {
    26762687            uint64_t u64Imm; IEM_OPCODE_GET_NEXT_S32_SX_U64(&u64Imm);
     2688            IEM_MC_BEGIN(0,0);
    26772689            IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    2678             IEM_MC_BEGIN(0,0);
    26792690            IEM_MC_PUSH_U64(u64Imm);
    26802691            IEM_MC_ADVANCE_RIP_AND_FINISH();
     
    27072718                /* register operand */
    27082719                uint16_t u16Imm; IEM_OPCODE_GET_NEXT_U16(&u16Imm);
     2720                IEM_MC_BEGIN(3, 1);
    27092721                IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    2710 
    2711                 IEM_MC_BEGIN(3, 1);
    27122722                IEM_MC_ARG(uint16_t *,      pu16Dst,            0);
    27132723                IEM_MC_ARG_CONST(uint16_t,  u16Src,/*=*/ u16Imm,1);
     
    27572767                /* register operand */
    27582768                uint32_t u32Imm; IEM_OPCODE_GET_NEXT_U32(&u32Imm);
     2769                IEM_MC_BEGIN(3, 1);
    27592770                IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    2760 
    2761                 IEM_MC_BEGIN(3, 1);
    27622771                IEM_MC_ARG(uint32_t *,      pu32Dst,            0);
    27632772                IEM_MC_ARG_CONST(uint32_t,  u32Src,/*=*/ u32Imm,1);
     
    28072816                /* register operand */
    28082817                uint64_t u64Imm; IEM_OPCODE_GET_NEXT_S32_SX_U64(&u64Imm);
     2818                IEM_MC_BEGIN(3, 1);
    28092819                IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    2810 
    2811                 IEM_MC_BEGIN(3, 1);
    28122820                IEM_MC_ARG(uint64_t *,      pu64Dst,            0);
    28132821                IEM_MC_ARG_CONST(uint64_t,  u64Src,/*=*/ u64Imm,1);
     
    28632871    IEMOP_HLP_MIN_186();
    28642872    int8_t i8Imm; IEM_OPCODE_GET_NEXT_S8(&i8Imm);
    2865     IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    28662873    IEMOP_HLP_DEFAULT_64BIT_OP_SIZE();
    28672874
     
    28702877        case IEMMODE_16BIT:
    28712878            IEM_MC_BEGIN(0,0);
     2879            IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    28722880            IEM_MC_PUSH_U16(i8Imm);
    28732881            IEM_MC_ADVANCE_RIP_AND_FINISH();
     
    28762884        case IEMMODE_32BIT:
    28772885            IEM_MC_BEGIN(0,0);
     2886            IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    28782887            IEM_MC_PUSH_U32(i8Imm);
    28792888            IEM_MC_ADVANCE_RIP_AND_FINISH();
     
    28822891        case IEMMODE_64BIT:
    28832892            IEM_MC_BEGIN(0,0);
     2893            IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    28842894            IEM_MC_PUSH_U64(i8Imm);
    28852895            IEM_MC_ADVANCE_RIP_AND_FINISH();
     
    29102920                /* register operand */
    29112921                uint8_t u8Imm; IEM_OPCODE_GET_NEXT_U8(&u8Imm);
     2922                IEM_MC_BEGIN(3, 1);
    29122923                IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    2913 
    2914                 IEM_MC_BEGIN(3, 1);
    29152924                IEM_MC_ARG(uint16_t *,      pu16Dst,                    0);
    29162925                IEM_MC_ARG_CONST(uint16_t,  u16Src,/*=*/ (int8_t)u8Imm, 1);
     
    29602969                /* register operand */
    29612970                uint8_t u8Imm; IEM_OPCODE_GET_NEXT_U8(&u8Imm);
     2971                IEM_MC_BEGIN(3, 1);
    29622972                IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    2963 
    2964                 IEM_MC_BEGIN(3, 1);
    29652973                IEM_MC_ARG(uint32_t *,      pu32Dst,                    0);
    29662974                IEM_MC_ARG_CONST(uint32_t,  u32Src,/*=*/ (int8_t)u8Imm, 1);
     
    30103018                /* register operand */
    30113019                uint8_t u8Imm; IEM_OPCODE_GET_NEXT_U8(&u8Imm);
     3020                IEM_MC_BEGIN(3, 1);
    30123021                IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    3013 
    3014                 IEM_MC_BEGIN(3, 1);
    30153022                IEM_MC_ARG(uint64_t *,      pu64Dst,                    0);
    30163023                IEM_MC_ARG_CONST(uint64_t,  u64Src,/*=*/ (int8_t)u8Imm, 1);
     
    32573264    IEMOP_MNEMONIC(jo_Jb, "jo  Jb");
    32583265    int8_t i8Imm; IEM_OPCODE_GET_NEXT_S8(&i8Imm);
    3259     IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    32603266    IEMOP_HLP_DEFAULT_64BIT_OP_SIZE_AND_INTEL_IGNORES_OP_SIZE_PREFIX();
    32613267
    32623268    IEM_MC_BEGIN(0, 0);
     3269    IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    32633270    IEM_MC_IF_EFL_BIT_SET(X86_EFL_OF) {
    32643271        IEM_MC_REL_JMP_S8_AND_FINISH(i8Imm);
     
    32773284    IEMOP_MNEMONIC(jno_Jb, "jno Jb");
    32783285    int8_t i8Imm; IEM_OPCODE_GET_NEXT_S8(&i8Imm);
    3279     IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    32803286    IEMOP_HLP_DEFAULT_64BIT_OP_SIZE_AND_INTEL_IGNORES_OP_SIZE_PREFIX();
    32813287
    32823288    IEM_MC_BEGIN(0, 0);
     3289    IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    32833290    IEM_MC_IF_EFL_BIT_SET(X86_EFL_OF) {
    32843291        IEM_MC_ADVANCE_RIP_AND_FINISH();
     
    32963303    IEMOP_MNEMONIC(jc_Jb, "jc/jnae Jb");
    32973304    int8_t i8Imm; IEM_OPCODE_GET_NEXT_S8(&i8Imm);
    3298     IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    32993305    IEMOP_HLP_DEFAULT_64BIT_OP_SIZE_AND_INTEL_IGNORES_OP_SIZE_PREFIX();
    33003306
    33013307    IEM_MC_BEGIN(0, 0);
     3308    IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    33023309    IEM_MC_IF_EFL_BIT_SET(X86_EFL_CF) {
    33033310        IEM_MC_REL_JMP_S8_AND_FINISH(i8Imm);
     
    33163323    IEMOP_MNEMONIC(jnc_Jb, "jnc/jnb Jb");
    33173324    int8_t i8Imm; IEM_OPCODE_GET_NEXT_S8(&i8Imm);
    3318     IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    33193325    IEMOP_HLP_DEFAULT_64BIT_OP_SIZE_AND_INTEL_IGNORES_OP_SIZE_PREFIX();
    33203326
    33213327    IEM_MC_BEGIN(0, 0);
     3328    IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    33223329    IEM_MC_IF_EFL_BIT_SET(X86_EFL_CF) {
    33233330        IEM_MC_ADVANCE_RIP_AND_FINISH();
     
    33363343    IEMOP_MNEMONIC(je_Jb, "je/jz   Jb");
    33373344    int8_t i8Imm; IEM_OPCODE_GET_NEXT_S8(&i8Imm);
    3338     IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    33393345    IEMOP_HLP_DEFAULT_64BIT_OP_SIZE_AND_INTEL_IGNORES_OP_SIZE_PREFIX();
    33403346
    33413347    IEM_MC_BEGIN(0, 0);
     3348    IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    33423349    IEM_MC_IF_EFL_BIT_SET(X86_EFL_ZF) {
    33433350        IEM_MC_REL_JMP_S8_AND_FINISH(i8Imm);
     
    33563363    IEMOP_MNEMONIC(jne_Jb, "jne/jnz Jb");
    33573364    int8_t i8Imm; IEM_OPCODE_GET_NEXT_S8(&i8Imm);
    3358     IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    33593365    IEMOP_HLP_DEFAULT_64BIT_OP_SIZE_AND_INTEL_IGNORES_OP_SIZE_PREFIX();
    33603366
    33613367    IEM_MC_BEGIN(0, 0);
     3368    IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    33623369    IEM_MC_IF_EFL_BIT_SET(X86_EFL_ZF) {
    33633370        IEM_MC_ADVANCE_RIP_AND_FINISH();
     
    33763383    IEMOP_MNEMONIC(jbe_Jb, "jbe/jna Jb");
    33773384    int8_t i8Imm; IEM_OPCODE_GET_NEXT_S8(&i8Imm);
    3378     IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    33793385    IEMOP_HLP_DEFAULT_64BIT_OP_SIZE_AND_INTEL_IGNORES_OP_SIZE_PREFIX();
    33803386
    33813387    IEM_MC_BEGIN(0, 0);
     3388    IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    33823389    IEM_MC_IF_EFL_ANY_BITS_SET(X86_EFL_CF | X86_EFL_ZF) {
    33833390        IEM_MC_REL_JMP_S8_AND_FINISH(i8Imm);
     
    33963403    IEMOP_MNEMONIC(ja_Jb, "ja/jnbe Jb");
    33973404    int8_t i8Imm; IEM_OPCODE_GET_NEXT_S8(&i8Imm);
    3398     IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    33993405    IEMOP_HLP_DEFAULT_64BIT_OP_SIZE_AND_INTEL_IGNORES_OP_SIZE_PREFIX();
    34003406
    34013407    IEM_MC_BEGIN(0, 0);
     3408    IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    34023409    IEM_MC_IF_EFL_ANY_BITS_SET(X86_EFL_CF | X86_EFL_ZF) {
    34033410        IEM_MC_ADVANCE_RIP_AND_FINISH();
     
    34163423    IEMOP_MNEMONIC(js_Jb, "js  Jb");
    34173424    int8_t i8Imm; IEM_OPCODE_GET_NEXT_S8(&i8Imm);
    3418     IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    34193425    IEMOP_HLP_DEFAULT_64BIT_OP_SIZE_AND_INTEL_IGNORES_OP_SIZE_PREFIX();
    34203426
    34213427    IEM_MC_BEGIN(0, 0);
     3428    IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    34223429    IEM_MC_IF_EFL_BIT_SET(X86_EFL_SF) {
    34233430        IEM_MC_REL_JMP_S8_AND_FINISH(i8Imm);
     
    34363443    IEMOP_MNEMONIC(jns_Jb, "jns Jb");
    34373444    int8_t i8Imm; IEM_OPCODE_GET_NEXT_S8(&i8Imm);
    3438     IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    34393445    IEMOP_HLP_DEFAULT_64BIT_OP_SIZE_AND_INTEL_IGNORES_OP_SIZE_PREFIX();
    34403446
    34413447    IEM_MC_BEGIN(0, 0);
     3448    IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    34423449    IEM_MC_IF_EFL_BIT_SET(X86_EFL_SF) {
    34433450        IEM_MC_ADVANCE_RIP_AND_FINISH();
     
    34563463    IEMOP_MNEMONIC(jp_Jb, "jp  Jb");
    34573464    int8_t i8Imm; IEM_OPCODE_GET_NEXT_S8(&i8Imm);
    3458     IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    34593465    IEMOP_HLP_DEFAULT_64BIT_OP_SIZE_AND_INTEL_IGNORES_OP_SIZE_PREFIX();
    34603466
    34613467    IEM_MC_BEGIN(0, 0);
     3468    IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    34623469    IEM_MC_IF_EFL_BIT_SET(X86_EFL_PF) {
    34633470        IEM_MC_REL_JMP_S8_AND_FINISH(i8Imm);
     
    34763483    IEMOP_MNEMONIC(jnp_Jb, "jnp Jb");
    34773484    int8_t i8Imm; IEM_OPCODE_GET_NEXT_S8(&i8Imm);
    3478     IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    34793485    IEMOP_HLP_DEFAULT_64BIT_OP_SIZE_AND_INTEL_IGNORES_OP_SIZE_PREFIX();
    34803486
    34813487    IEM_MC_BEGIN(0, 0);
     3488    IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    34823489    IEM_MC_IF_EFL_BIT_SET(X86_EFL_PF) {
    34833490        IEM_MC_ADVANCE_RIP_AND_FINISH();
     
    34963503    IEMOP_MNEMONIC(jl_Jb, "jl/jnge Jb");
    34973504    int8_t i8Imm; IEM_OPCODE_GET_NEXT_S8(&i8Imm);
    3498     IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    34993505    IEMOP_HLP_DEFAULT_64BIT_OP_SIZE_AND_INTEL_IGNORES_OP_SIZE_PREFIX();
    35003506
    35013507    IEM_MC_BEGIN(0, 0);
     3508    IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    35023509    IEM_MC_IF_EFL_BITS_NE(X86_EFL_SF, X86_EFL_OF) {
    35033510        IEM_MC_REL_JMP_S8_AND_FINISH(i8Imm);
     
    35163523    IEMOP_MNEMONIC(jge_Jb, "jnl/jge Jb");
    35173524    int8_t i8Imm; IEM_OPCODE_GET_NEXT_S8(&i8Imm);
    3518     IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    35193525    IEMOP_HLP_DEFAULT_64BIT_OP_SIZE_AND_INTEL_IGNORES_OP_SIZE_PREFIX();
    35203526
    35213527    IEM_MC_BEGIN(0, 0);
     3528    IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    35223529    IEM_MC_IF_EFL_BITS_NE(X86_EFL_SF, X86_EFL_OF) {
    35233530        IEM_MC_ADVANCE_RIP_AND_FINISH();
     
    35363543    IEMOP_MNEMONIC(jle_Jb, "jle/jng Jb");
    35373544    int8_t i8Imm; IEM_OPCODE_GET_NEXT_S8(&i8Imm);
    3538     IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    35393545    IEMOP_HLP_DEFAULT_64BIT_OP_SIZE_AND_INTEL_IGNORES_OP_SIZE_PREFIX();
    35403546
    35413547    IEM_MC_BEGIN(0, 0);
     3548    IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    35423549    IEM_MC_IF_EFL_BIT_SET_OR_BITS_NE(X86_EFL_ZF, X86_EFL_SF, X86_EFL_OF) {
    35433550        IEM_MC_REL_JMP_S8_AND_FINISH(i8Imm);
     
    35563563    IEMOP_MNEMONIC(jg_Jb, "jnle/jg Jb");
    35573564    int8_t i8Imm; IEM_OPCODE_GET_NEXT_S8(&i8Imm);
    3558     IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    35593565    IEMOP_HLP_DEFAULT_64BIT_OP_SIZE_AND_INTEL_IGNORES_OP_SIZE_PREFIX();
    35603566
    35613567    IEM_MC_BEGIN(0, 0);
     3568    IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    35623569    IEM_MC_IF_EFL_BIT_SET_OR_BITS_NE(X86_EFL_ZF, X86_EFL_SF, X86_EFL_OF) {
    35633570        IEM_MC_ADVANCE_RIP_AND_FINISH();
     
    35783585        /* register target */ \
    35793586        uint8_t u8Imm; IEM_OPCODE_GET_NEXT_U8(&u8Imm); \
     3587        IEM_MC_BEGIN(3, 0); \
    35803588        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); \
    3581         IEM_MC_BEGIN(3, 0); \
    35823589        IEM_MC_ARG(uint8_t *,       pu8Dst,                 0); \
    35833590        IEM_MC_ARG_CONST(uint8_t,   u8Src, /*=*/ u8Imm,     1); \
     
    37793786            { \
    37803787                uint16_t u16Imm; IEM_OPCODE_GET_NEXT_U16(&u16Imm); \
     3788                IEM_MC_BEGIN(3, 0); \
    37813789                IEMOP_HLP_DONE_DECODING(); \
    3782                 IEM_MC_BEGIN(3, 0); \
    37833790                IEM_MC_ARG(uint16_t *,      pu16Dst,                0); \
    37843791                IEM_MC_ARG_CONST(uint16_t,  u16Src, /*=*/ u16Imm,   1); \
     
    37973804            { \
    37983805                uint32_t u32Imm; IEM_OPCODE_GET_NEXT_U32(&u32Imm); \
     3806                IEM_MC_BEGIN(3, 0); \
    37993807                IEMOP_HLP_DONE_DECODING(); \
    3800                 IEM_MC_BEGIN(3, 0); \
    38013808                IEM_MC_ARG(uint32_t *,      pu32Dst,                0); \
    38023809                IEM_MC_ARG_CONST(uint32_t,  u32Src, /*=*/ u32Imm,   1); \
     
    38173824            { \
    38183825                uint64_t u64Imm; IEM_OPCODE_GET_NEXT_S32_SX_U64(&u64Imm); \
     3826                IEM_MC_BEGIN(3, 0); \
    38193827                IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); \
    3820                 IEM_MC_BEGIN(3, 0); \
    38213828                IEM_MC_ARG(uint64_t *,      pu64Dst,                0); \
    38223829                IEM_MC_ARG_CONST(uint64_t,  u64Src, /*=*/ u64Imm,   1); \
     
    41434150         * Register target \
    41444151         */ \
    4145         IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); \
    41464152        uint8_t u8Imm; IEM_OPCODE_GET_NEXT_U8(&u8Imm); \
    41474153        switch (pVCpu->iem.s.enmEffOpSize) \
     
    41504156            { \
    41514157                IEM_MC_BEGIN(3, 0); \
     4158                IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); \
    41524159                IEM_MC_ARG(uint16_t *,      pu16Dst,                    0); \
    41534160                IEM_MC_ARG_CONST(uint16_t,  u16Src, /*=*/ (int8_t)u8Imm,1); \
     
    41664173            { \
    41674174                IEM_MC_BEGIN(3, 0); \
     4175                IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); \
    41684176                IEM_MC_ARG(uint32_t *,      pu32Dst,                    0); \
    41694177                IEM_MC_ARG_CONST(uint32_t,  u32Src, /*=*/ (int8_t)u8Imm,1); \
     
    41844192            { \
    41854193                IEM_MC_BEGIN(3, 0); \
     4194                IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); \
    41864195                IEM_MC_ARG(uint64_t *,      pu64Dst,                    0); \
    41874196                IEM_MC_ARG_CONST(uint64_t,  u64Src, /*=*/ (int8_t)u8Imm,1); \
     
    45274536    if (IEM_IS_MODRM_REG_MODE(bRm))
    45284537    {
     4538        IEM_MC_BEGIN(0, 2);
    45294539        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    4530 
    4531         IEM_MC_BEGIN(0, 2);
    45324540        IEM_MC_LOCAL(uint8_t, uTmp1);
    45334541        IEM_MC_LOCAL(uint8_t, uTmp2);
     
    45534561
    45544562        IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffDst, bRm, 0);
     4563        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    45554564        IEM_MC_MEM_MAP(pu8Mem, IEM_ACCESS_DATA_RW, pVCpu->iem.s.iEffSeg, GCPtrEffDst, 0 /*arg*/);
    45564565        IEM_MC_REF_GREG_U8(pu8Reg, IEM_GET_MODRM_REG(pVCpu, bRm));
     
    45804589    if (IEM_IS_MODRM_REG_MODE(bRm))
    45814590    {
    4582         IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    4583 
    45844591        switch (pVCpu->iem.s.enmEffOpSize)
    45854592        {
    45864593            case IEMMODE_16BIT:
    45874594                IEM_MC_BEGIN(0, 2);
     4595                IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    45884596                IEM_MC_LOCAL(uint16_t, uTmp1);
    45894597                IEM_MC_LOCAL(uint16_t, uTmp2);
     
    46004608            case IEMMODE_32BIT:
    46014609                IEM_MC_BEGIN(0, 2);
     4610                IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    46024611                IEM_MC_LOCAL(uint32_t, uTmp1);
    46034612                IEM_MC_LOCAL(uint32_t, uTmp2);
     
    46144623            case IEMMODE_64BIT:
    46154624                IEM_MC_BEGIN(0, 2);
     4625                IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    46164626                IEM_MC_LOCAL(uint64_t, uTmp1);
    46174627                IEM_MC_LOCAL(uint64_t, uTmp2);
     
    46444654
    46454655                IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffDst, bRm, 0);
     4656                IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    46464657                IEM_MC_MEM_MAP(pu16Mem, IEM_ACCESS_DATA_RW, pVCpu->iem.s.iEffSeg, GCPtrEffDst, 0 /*arg*/);
    46474658                IEM_MC_REF_GREG_U16(pu16Reg, IEM_GET_MODRM_REG(pVCpu, bRm));
     
    46634674
    46644675                IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffDst, bRm, 0);
     4676                IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    46654677                IEM_MC_MEM_MAP(pu32Mem, IEM_ACCESS_DATA_RW, pVCpu->iem.s.iEffSeg, GCPtrEffDst, 0 /*arg*/);
    46664678                IEM_MC_REF_GREG_U32(pu32Reg, IEM_GET_MODRM_REG(pVCpu, bRm));
     
    46834695
    46844696                IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffDst, bRm, 0);
     4697                IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    46854698                IEM_MC_MEM_MAP(pu64Mem, IEM_ACCESS_DATA_RW, pVCpu->iem.s.iEffSeg, GCPtrEffDst, 0 /*arg*/);
    46864699                IEM_MC_REF_GREG_U64(pu64Reg, IEM_GET_MODRM_REG(pVCpu, bRm));
     
    47164729    if (IEM_IS_MODRM_REG_MODE(bRm))
    47174730    {
     4731        IEM_MC_BEGIN(0, 1);
    47184732        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    4719         IEM_MC_BEGIN(0, 1);
    47204733        IEM_MC_LOCAL(uint8_t, u8Value);
    47214734        IEM_MC_FETCH_GREG_U8(u8Value, IEM_GET_MODRM_REG(pVCpu, bRm));
     
    47564769    if (IEM_IS_MODRM_REG_MODE(bRm))
    47574770    {
    4758         IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    47594771        switch (pVCpu->iem.s.enmEffOpSize)
    47604772        {
    47614773            case IEMMODE_16BIT:
    47624774                IEM_MC_BEGIN(0, 1);
     4775                IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    47634776                IEM_MC_LOCAL(uint16_t, u16Value);
    47644777                IEM_MC_FETCH_GREG_U16(u16Value, IEM_GET_MODRM_REG(pVCpu, bRm));
     
    47704783            case IEMMODE_32BIT:
    47714784                IEM_MC_BEGIN(0, 1);
     4785                IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    47724786                IEM_MC_LOCAL(uint32_t, u32Value);
    47734787                IEM_MC_FETCH_GREG_U32(u32Value, IEM_GET_MODRM_REG(pVCpu, bRm));
     
    47794793            case IEMMODE_64BIT:
    47804794                IEM_MC_BEGIN(0, 1);
     4795                IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    47814796                IEM_MC_LOCAL(uint64_t, u64Value);
    47824797                IEM_MC_FETCH_GREG_U64(u64Value, IEM_GET_MODRM_REG(pVCpu, bRm));
     
    48524867    if (IEM_IS_MODRM_REG_MODE(bRm))
    48534868    {
     4869        IEM_MC_BEGIN(0, 1);
    48544870        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    4855         IEM_MC_BEGIN(0, 1);
    48564871        IEM_MC_LOCAL(uint8_t, u8Value);
    48574872        IEM_MC_FETCH_GREG_U8(u8Value, IEM_GET_MODRM_RM(pVCpu, bRm));
     
    48924907    if (IEM_IS_MODRM_REG_MODE(bRm))
    48934908    {
    4894         IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    48954909        switch (pVCpu->iem.s.enmEffOpSize)
    48964910        {
    48974911            case IEMMODE_16BIT:
    48984912                IEM_MC_BEGIN(0, 1);
     4913                IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    48994914                IEM_MC_LOCAL(uint16_t, u16Value);
    49004915                IEM_MC_FETCH_GREG_U16(u16Value, IEM_GET_MODRM_RM(pVCpu, bRm));
     
    49064921            case IEMMODE_32BIT:
    49074922                IEM_MC_BEGIN(0, 1);
     4923                IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    49084924                IEM_MC_LOCAL(uint32_t, u32Value);
    49094925                IEM_MC_FETCH_GREG_U32(u32Value, IEM_GET_MODRM_RM(pVCpu, bRm));
     
    49154931            case IEMMODE_64BIT:
    49164932                IEM_MC_BEGIN(0, 1);
     4933                IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    49174934                IEM_MC_LOCAL(uint64_t, u64Value);
    49184935                IEM_MC_FETCH_GREG_U64(u64Value, IEM_GET_MODRM_RM(pVCpu, bRm));
     
    50115028    if (IEM_IS_MODRM_REG_MODE(bRm))
    50125029    {
    5013         IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    50145030        switch (pVCpu->iem.s.enmEffOpSize)
    50155031        {
    50165032            case IEMMODE_16BIT:
    50175033                IEM_MC_BEGIN(0, 1);
     5034                IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    50185035                IEM_MC_LOCAL(uint16_t, u16Value);
    50195036                IEM_MC_FETCH_SREG_U16(u16Value, iSegReg);
     
    50255042            case IEMMODE_32BIT:
    50265043                IEM_MC_BEGIN(0, 1);
     5044                IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    50275045                IEM_MC_LOCAL(uint32_t, u32Value);
    50285046                IEM_MC_FETCH_SREG_ZX_U32(u32Value, iSegReg);
     
    50345052            case IEMMODE_64BIT:
    50355053                IEM_MC_BEGIN(0, 1);
     5054                IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    50365055                IEM_MC_LOCAL(uint64_t, u64Value);
    50375056                IEM_MC_FETCH_SREG_ZX_U64(u64Value, iSegReg);
     
    51495168    if (IEM_IS_MODRM_REG_MODE(bRm))
    51505169    {
     5170        IEM_MC_BEGIN(2, 0);
    51515171        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    5152         IEM_MC_BEGIN(2, 0);
    51535172        IEM_MC_ARG_CONST(uint8_t, iSRegArg, iSegReg, 0);
    51545173        IEM_MC_ARG(uint16_t,      u16Value,          1);
     
    53905409FNIEMOP_DEF_1(iemOpCommonXchgGRegRax, uint8_t, iReg)
    53915410{
    5392     IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    5393 
    53945411    iReg |= pVCpu->iem.s.uRexB;
    53955412    switch (pVCpu->iem.s.enmEffOpSize)
     
    53975414        case IEMMODE_16BIT:
    53985415            IEM_MC_BEGIN(0, 2);
     5416            IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    53995417            IEM_MC_LOCAL(uint16_t, u16Tmp1);
    54005418            IEM_MC_LOCAL(uint16_t, u16Tmp2);
     
    54095427        case IEMMODE_32BIT:
    54105428            IEM_MC_BEGIN(0, 2);
     5429            IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    54115430            IEM_MC_LOCAL(uint32_t, u32Tmp1);
    54125431            IEM_MC_LOCAL(uint32_t, u32Tmp2);
     
    54215440        case IEMMODE_64BIT:
    54225441            IEM_MC_BEGIN(0, 2);
     5442            IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    54235443            IEM_MC_LOCAL(uint64_t, u64Tmp1);
    54245444            IEM_MC_LOCAL(uint64_t, u64Tmp2);
     
    54665486    else
    54675487        IEMOP_MNEMONIC(nop, "nop");
     5488    /** @todo testcase: lock nop; lock pause */
    54685489    IEM_MC_BEGIN(0, 0);
     5490    IEMOP_HLP_DONE_DECODING();
    54695491    IEM_MC_ADVANCE_RIP_AND_FINISH();
    54705492    IEM_MC_END();
     
    55475569FNIEMOP_DEF(iemOp_cbw)
    55485570{
    5549     IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    55505571    switch (pVCpu->iem.s.enmEffOpSize)
    55515572    {
     
    55535574            IEMOP_MNEMONIC(cbw, "cbw");
    55545575            IEM_MC_BEGIN(0, 1);
     5576            IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    55555577            IEM_MC_IF_GREG_BIT_SET(X86_GREG_xAX, 7) {
    55565578                IEM_MC_OR_GREG_U16(X86_GREG_xAX, UINT16_C(0xff00));
     
    55655587            IEMOP_MNEMONIC(cwde, "cwde");
    55665588            IEM_MC_BEGIN(0, 1);
     5589            IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    55675590            IEM_MC_IF_GREG_BIT_SET(X86_GREG_xAX, 15) {
    55685591                IEM_MC_OR_GREG_U32(X86_GREG_xAX, UINT32_C(0xffff0000));
     
    55775600            IEMOP_MNEMONIC(cdqe, "cdqe");
    55785601            IEM_MC_BEGIN(0, 1);
     5602            IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    55795603            IEM_MC_IF_GREG_BIT_SET(X86_GREG_xAX, 31) {
    55805604                IEM_MC_OR_GREG_U64(X86_GREG_xAX, UINT64_C(0xffffffff00000000));
     
    55965620FNIEMOP_DEF(iemOp_cwd)
    55975621{
    5598     IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    55995622    switch (pVCpu->iem.s.enmEffOpSize)
    56005623    {
     
    56025625            IEMOP_MNEMONIC(cwd, "cwd");
    56035626            IEM_MC_BEGIN(0, 1);
     5627            IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    56045628            IEM_MC_IF_GREG_BIT_SET(X86_GREG_xAX, 15) {
    56055629                IEM_MC_STORE_GREG_U16_CONST(X86_GREG_xDX, UINT16_C(0xffff));
     
    56145638            IEMOP_MNEMONIC(cdq, "cdq");
    56155639            IEM_MC_BEGIN(0, 1);
     5640            IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    56165641            IEM_MC_IF_GREG_BIT_SET(X86_GREG_xAX, 31) {
    56175642                IEM_MC_STORE_GREG_U32_CONST(X86_GREG_xDX, UINT32_C(0xffffffff));
     
    56265651            IEMOP_MNEMONIC(cqo, "cqo");
    56275652            IEM_MC_BEGIN(0, 1);
     5653            IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    56285654            IEM_MC_IF_GREG_BIT_SET(X86_GREG_xAX, 63) {
    56295655                IEM_MC_STORE_GREG_U64_CONST(X86_GREG_xDX, UINT64_C(0xffffffffffffffff));
     
    56655691{
    56665692    IEMOP_MNEMONIC(wait, "wait");
    5667     IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    5668 
    56695693    IEM_MC_BEGIN(0, 0);
     5694    IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    56705695    IEM_MC_MAYBE_RAISE_WAIT_DEVICE_NOT_AVAILABLE();
    56715696    IEM_MC_MAYBE_RAISE_FPU_XCPT();
     
    57055730{
    57065731    IEMOP_MNEMONIC(sahf, "sahf");
    5707     IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    57085732    if (   IEM_IS_64BIT_CODE(pVCpu)
    57095733        && !IEM_GET_GUEST_CPU_FEATURES(pVCpu)->fLahfSahf)
    57105734        IEMOP_RAISE_INVALID_OPCODE_RET();
    57115735    IEM_MC_BEGIN(0, 2);
     5736    IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    57125737    IEM_MC_LOCAL(uint32_t, u32Flags);
    57135738    IEM_MC_LOCAL(uint32_t, EFlags);
     
    57305755{
    57315756    IEMOP_MNEMONIC(lahf, "lahf");
    5732     IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    57335757    if (   IEM_IS_64BIT_CODE(pVCpu)
    57345758        && !IEM_GET_GUEST_CPU_FEATURES(pVCpu)->fLahfSahf)
    57355759        IEMOP_RAISE_INVALID_OPCODE_RET();
    57365760    IEM_MC_BEGIN(0, 1);
     5761    IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    57375762    IEM_MC_LOCAL(uint8_t, u8Flags);
    57385763    IEM_MC_FETCH_EFLAGS_U8(u8Flags);
     
    57455770/**
    57465771 * Macro used by iemOp_mov_AL_Ob, iemOp_mov_rAX_Ov, iemOp_mov_Ob_AL and
    5747  * iemOp_mov_Ov_rAX to fetch the moffsXX bit of the opcode and fend off lock
    5748  * prefixes.  Will return on failures.
     5772 * iemOp_mov_Ov_rAX to fetch the moffsXX bit of the opcode.
     5773 * Will return/throw on failures.
    57495774 * @param   a_GCPtrMemOff   The variable to store the offset in.
    57505775 */
     
    57655790            IEM_NOT_REACHED_DEFAULT_CASE_RET(); \
    57665791        } \
    5767         IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); \
    57685792    } while (0)
    57695793
     
    57745798{
    57755799    /*
    5776      * Get the offset and fend off lock prefixes.
     5800     * Get the offset.
    57775801     */
    57785802    IEMOP_MNEMONIC(mov_AL_Ob, "mov AL,Ob");
     
    57845808     */
    57855809    IEM_MC_BEGIN(0,1);
     5810    IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    57865811    IEM_MC_LOCAL(uint8_t, u8Tmp);
    57875812    IEM_MC_FETCH_MEM_U8(u8Tmp, pVCpu->iem.s.iEffSeg, GCPtrMemOff);
     
    57985823{
    57995824    /*
    5800      * Get the offset and fend off lock prefixes.
     5825     * Get the offset.
    58015826     */
    58025827    IEMOP_MNEMONIC(mov_rAX_Ov, "mov rAX,Ov");
     
    58115836        case IEMMODE_16BIT:
    58125837            IEM_MC_BEGIN(0,1);
     5838            IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    58135839            IEM_MC_LOCAL(uint16_t, u16Tmp);
    58145840            IEM_MC_FETCH_MEM_U16(u16Tmp, pVCpu->iem.s.iEffSeg, GCPtrMemOff);
     
    58205846        case IEMMODE_32BIT:
    58215847            IEM_MC_BEGIN(0,1);
     5848            IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    58225849            IEM_MC_LOCAL(uint32_t, u32Tmp);
    58235850            IEM_MC_FETCH_MEM_U32(u32Tmp, pVCpu->iem.s.iEffSeg, GCPtrMemOff);
     
    58295856        case IEMMODE_64BIT:
    58305857            IEM_MC_BEGIN(0,1);
     5858            IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    58315859            IEM_MC_LOCAL(uint64_t, u64Tmp);
    58325860            IEM_MC_FETCH_MEM_U64(u64Tmp, pVCpu->iem.s.iEffSeg, GCPtrMemOff);
     
    58475875{
    58485876    /*
    5849      * Get the offset and fend off lock prefixes.
     5877     * Get the offset.
    58505878     */
    58515879    IEMOP_MNEMONIC(mov_Ob_AL, "mov Ob,AL");
     
    58575885     */
    58585886    IEM_MC_BEGIN(0,1);
     5887    IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    58595888    IEM_MC_LOCAL(uint8_t, u8Tmp);
    58605889    IEM_MC_FETCH_GREG_U8(u8Tmp, X86_GREG_xAX);
     
    58715900{
    58725901    /*
    5873      * Get the offset and fend off lock prefixes.
     5902     * Get the offset.
    58745903     */
    58755904    IEMOP_MNEMONIC(mov_Ov_rAX, "mov Ov,rAX");
     
    58845913        case IEMMODE_16BIT:
    58855914            IEM_MC_BEGIN(0,1);
     5915            IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    58865916            IEM_MC_LOCAL(uint16_t, u16Tmp);
    58875917            IEM_MC_FETCH_GREG_U16(u16Tmp, X86_GREG_xAX);
     
    58935923        case IEMMODE_32BIT:
    58945924            IEM_MC_BEGIN(0,1);
     5925            IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    58955926            IEM_MC_LOCAL(uint32_t, u32Tmp);
    58965927            IEM_MC_FETCH_GREG_U32(u32Tmp, X86_GREG_xAX);
     
    59025933        case IEMMODE_64BIT:
    59035934            IEM_MC_BEGIN(0,1);
     5935            IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    59045936            IEM_MC_LOCAL(uint64_t, u64Tmp);
    59055937            IEM_MC_FETCH_GREG_U64(u64Tmp, X86_GREG_xAX);
     
    59165948#define IEM_MOVS_CASE(ValBits, AddrBits) \
    59175949        IEM_MC_BEGIN(0, 2); \
     5950        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); \
    59185951        IEM_MC_LOCAL(uint##ValBits##_t, uValue); \
    59195952        IEM_MC_LOCAL(RTGCPTR,           uAddr); \
     
    59375970FNIEMOP_DEF(iemOp_movsb_Xb_Yb)
    59385971{
    5939     IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    5940 
    59415972    /*
    59425973     * Use the C implementation if a repeat prefix is encountered.
     
    59455976    {
    59465977        IEMOP_MNEMONIC(rep_movsb_Xb_Yb, "rep movsb Xb,Yb");
     5978        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    59475979        switch (pVCpu->iem.s.enmEffAddrMode)
    59485980        {
     
    59535985        }
    59545986    }
    5955     IEMOP_MNEMONIC(movsb_Xb_Yb, "movsb Xb,Yb");
    59565987
    59575988    /*
    59585989     * Sharing case implementation with movs[wdq] below.
    59595990     */
     5991    IEMOP_MNEMONIC(movsb_Xb_Yb, "movsb Xb,Yb");
    59605992    switch (pVCpu->iem.s.enmEffAddrMode)
    59615993    {
     
    59736005FNIEMOP_DEF(iemOp_movswd_Xv_Yv)
    59746006{
    5975     IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    59766007
    59776008    /*
     
    59816012    {
    59826013        IEMOP_MNEMONIC(rep_movs_Xv_Yv, "rep movs Xv,Yv");
     6014        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    59836015        switch (pVCpu->iem.s.enmEffOpSize)
    59846016        {
     
    60116043        }
    60126044    }
    6013     IEMOP_MNEMONIC(movs_Xv_Yv, "movs Xv,Yv");
    60146045
    60156046    /*
     
    60176048     * Using ugly macro for implementing the cases, sharing it with movsb.
    60186049     */
     6050    IEMOP_MNEMONIC(movs_Xv_Yv, "movs Xv,Yv");
    60196051    switch (pVCpu->iem.s.enmEffOpSize)
    60206052    {
     
    60576089#define IEM_CMPS_CASE(ValBits, AddrBits) \
    60586090        IEM_MC_BEGIN(3, 3); \
     6091        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); \
    60596092        IEM_MC_ARG(uint##ValBits##_t *, puValue1, 0); \
    60606093        IEM_MC_ARG(uint##ValBits##_t,   uValue2,  1); \
     
    60866119FNIEMOP_DEF(iemOp_cmpsb_Xb_Yb)
    60876120{
    6088     IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    60896121
    60906122    /*
     
    60946126    {
    60956127        IEMOP_MNEMONIC(repz_cmps_Xb_Yb, "repz cmps Xb,Yb");
     6128        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    60966129        switch (pVCpu->iem.s.enmEffAddrMode)
    60976130        {
     
    61056138    {
    61066139        IEMOP_MNEMONIC(repnz_cmps_Xb_Yb, "repnz cmps Xb,Yb");
     6140        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    61076141        switch (pVCpu->iem.s.enmEffAddrMode)
    61086142        {
     
    61136147        }
    61146148    }
    6115     IEMOP_MNEMONIC(cmps_Xb_Yb, "cmps Xb,Yb");
    61166149
    61176150    /*
    61186151     * Sharing case implementation with cmps[wdq] below.
    61196152     */
     6153    IEMOP_MNEMONIC(cmps_Xb_Yb, "cmps Xb,Yb");
    61206154    switch (pVCpu->iem.s.enmEffAddrMode)
    61216155    {
     
    61336167FNIEMOP_DEF(iemOp_cmpswd_Xv_Yv)
    61346168{
    6135     IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    6136 
    61376169    /*
    61386170     * Use the C implementation if a repeat prefix is encountered.
     
    61416173    {
    61426174        IEMOP_MNEMONIC(repe_cmps_Xv_Yv, "repe cmps Xv,Yv");
     6175        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    61436176        switch (pVCpu->iem.s.enmEffOpSize)
    61446177        {
     
    61756208    {
    61766209        IEMOP_MNEMONIC(repne_cmps_Xv_Yv, "repne cmps Xv,Yv");
     6210        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    61776211        switch (pVCpu->iem.s.enmEffOpSize)
    61786212        {
     
    62066240    }
    62076241
    6208     IEMOP_MNEMONIC(cmps_Xv_Yv, "cmps Xv,Yv");
    6209 
    62106242    /*
    62116243     * Annoying double switch here.
    62126244     * Using ugly macro for implementing the cases, sharing it with cmpsb.
    62136245     */
     6246    IEMOP_MNEMONIC(cmps_Xv_Yv, "cmps Xv,Yv");
    62146247    switch (pVCpu->iem.s.enmEffOpSize)
    62156248    {
     
    62746307#define IEM_STOS_CASE(ValBits, AddrBits) \
    62756308        IEM_MC_BEGIN(0, 2); \
     6309        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); \
    62766310        IEM_MC_LOCAL(uint##ValBits##_t, uValue); \
    62776311        IEM_MC_LOCAL(RTGCPTR, uAddr); \
     
    62926326FNIEMOP_DEF(iemOp_stosb_Yb_AL)
    62936327{
    6294     IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    6295 
    62966328    /*
    62976329     * Use the C implementation if a repeat prefix is encountered.
     
    63006332    {
    63016333        IEMOP_MNEMONIC(rep_stos_Yb_al, "rep stos Yb,al");
     6334        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    63026335        switch (pVCpu->iem.s.enmEffAddrMode)
    63036336        {
     
    63086341        }
    63096342    }
    6310     IEMOP_MNEMONIC(stos_Yb_al, "stos Yb,al");
    63116343
    63126344    /*
    63136345     * Sharing case implementation with stos[wdq] below.
    63146346     */
     6347    IEMOP_MNEMONIC(stos_Yb_al, "stos Yb,al");
    63156348    switch (pVCpu->iem.s.enmEffAddrMode)
    63166349    {
     
    63286361FNIEMOP_DEF(iemOp_stoswd_Yv_eAX)
    63296362{
    6330     IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    6331 
    63326363    /*
    63336364     * Use the C implementation if a repeat prefix is encountered.
     
    63366367    {
    63376368        IEMOP_MNEMONIC(rep_stos_Yv_rAX, "rep stos Yv,rAX");
     6369        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    63386370        switch (pVCpu->iem.s.enmEffOpSize)
    63396371        {
     
    63666398        }
    63676399    }
    6368     IEMOP_MNEMONIC(stos_Yv_rAX, "stos Yv,rAX");
    63696400
    63706401    /*
     
    63726403     * Using ugly macro for implementing the cases, sharing it with stosb.
    63736404     */
     6405    IEMOP_MNEMONIC(stos_Yv_rAX, "stos Yv,rAX");
    63746406    switch (pVCpu->iem.s.enmEffOpSize)
    63756407    {
     
    64126444#define IEM_LODS_CASE(ValBits, AddrBits) \
    64136445        IEM_MC_BEGIN(0, 2); \
     6446        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); \
    64146447        IEM_MC_LOCAL(uint##ValBits##_t, uValue); \
    64156448        IEM_MC_LOCAL(RTGCPTR, uAddr); \
     
    64306463FNIEMOP_DEF(iemOp_lodsb_AL_Xb)
    64316464{
    6432     IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    6433 
    64346465    /*
    64356466     * Use the C implementation if a repeat prefix is encountered.
     
    64386469    {
    64396470        IEMOP_MNEMONIC(rep_lodsb_AL_Xb, "rep lodsb AL,Xb");
     6471        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    64406472        switch (pVCpu->iem.s.enmEffAddrMode)
    64416473        {
     
    64466478        }
    64476479    }
    6448     IEMOP_MNEMONIC(lodsb_AL_Xb, "lodsb AL,Xb");
    64496480
    64506481    /*
    64516482     * Sharing case implementation with stos[wdq] below.
    64526483     */
     6484    IEMOP_MNEMONIC(lodsb_AL_Xb, "lodsb AL,Xb");
    64536485    switch (pVCpu->iem.s.enmEffAddrMode)
    64546486    {
     
    64666498FNIEMOP_DEF(iemOp_lodswd_eAX_Xv)
    64676499{
    6468     IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    6469 
    64706500    /*
    64716501     * Use the C implementation if a repeat prefix is encountered.
     
    64746504    {
    64756505        IEMOP_MNEMONIC(rep_lods_rAX_Xv, "rep lods rAX,Xv");
     6506        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    64766507        switch (pVCpu->iem.s.enmEffOpSize)
    64776508        {
     
    65046535        }
    65056536    }
    6506     IEMOP_MNEMONIC(lods_rAX_Xv, "lods rAX,Xv");
    65076537
    65086538    /*
     
    65106540     * Using ugly macro for implementing the cases, sharing it with lodsb.
    65116541     */
     6542    IEMOP_MNEMONIC(lods_rAX_Xv, "lods rAX,Xv");
    65126543    switch (pVCpu->iem.s.enmEffOpSize)
    65136544    {
     
    65506581#define IEM_SCAS_CASE(ValBits, AddrBits) \
    65516582        IEM_MC_BEGIN(3, 2); \
     6583        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); \
    65526584        IEM_MC_ARG(uint##ValBits##_t *, puRax,   0); \
    65536585        IEM_MC_ARG(uint##ValBits##_t,   uValue,  1); \
     
    65746606FNIEMOP_DEF(iemOp_scasb_AL_Xb)
    65756607{
    6576     IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    6577 
    65786608    /*
    65796609     * Use the C implementation if a repeat prefix is encountered.
     
    65826612    {
    65836613        IEMOP_MNEMONIC(repe_scasb_AL_Xb, "repe scasb AL,Xb");
     6614        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    65846615        switch (pVCpu->iem.s.enmEffAddrMode)
    65856616        {
     
    65936624    {
    65946625        IEMOP_MNEMONIC(repone_scasb_AL_Xb, "repne scasb AL,Xb");
     6626        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    65956627        switch (pVCpu->iem.s.enmEffAddrMode)
    65966628        {
     
    66016633        }
    66026634    }
    6603     IEMOP_MNEMONIC(scasb_AL_Xb, "scasb AL,Xb");
    66046635
    66056636    /*
    66066637     * Sharing case implementation with stos[wdq] below.
    66076638     */
     6639    IEMOP_MNEMONIC(scasb_AL_Xb, "scasb AL,Xb");
    66086640    switch (pVCpu->iem.s.enmEffAddrMode)
    66096641    {
     
    66216653FNIEMOP_DEF(iemOp_scaswd_eAX_Xv)
    66226654{
    6623     IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    6624 
    66256655    /*
    66266656     * Use the C implementation if a repeat prefix is encountered.
     
    66296659    {
    66306660        IEMOP_MNEMONIC(repe_scas_rAX_Xv, "repe scas rAX,Xv");
     6661        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    66316662        switch (pVCpu->iem.s.enmEffOpSize)
    66326663        {
     
    66626693    {
    66636694        IEMOP_MNEMONIC(repne_scas_rAX_Xv, "repne scas rAX,Xv");
     6695        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    66646696        switch (pVCpu->iem.s.enmEffOpSize)
    66656697        {
     
    66926724        }
    66936725    }
    6694     IEMOP_MNEMONIC(scas_rAX_Xv, "scas rAX,Xv");
    66956726
    66966727    /*
     
    66986729     * Using ugly macro for implementing the cases, sharing it with scasb.
    66996730     */
     6731    IEMOP_MNEMONIC(scas_rAX_Xv, "scas rAX,Xv");
    67006732    switch (pVCpu->iem.s.enmEffOpSize)
    67016733    {
     
    67416773{
    67426774    uint8_t u8Imm; IEM_OPCODE_GET_NEXT_U8(&u8Imm);
    6743     IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    6744 
    67456775    IEM_MC_BEGIN(0, 1);
     6776    IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    67466777    IEM_MC_LOCAL_CONST(uint8_t, u8Value,/*=*/ u8Imm);
    67476778    IEM_MC_STORE_GREG_U8(iFixedReg, u8Value);
     
    68416872        {
    68426873            uint16_t u16Imm; IEM_OPCODE_GET_NEXT_U16(&u16Imm);
     6874            IEM_MC_BEGIN(0, 1);
    68436875            IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    6844 
    6845             IEM_MC_BEGIN(0, 1);
    68466876            IEM_MC_LOCAL_CONST(uint16_t, u16Value,/*=*/ u16Imm);
    68476877            IEM_MC_STORE_GREG_U16(iFixedReg, u16Value);
     
    68546884        {
    68556885            uint32_t u32Imm; IEM_OPCODE_GET_NEXT_U32(&u32Imm);
     6886            IEM_MC_BEGIN(0, 1);
    68566887            IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    6857 
    6858             IEM_MC_BEGIN(0, 1);
    68596888            IEM_MC_LOCAL_CONST(uint32_t, u32Value,/*=*/ u32Imm);
    68606889            IEM_MC_STORE_GREG_U32(iFixedReg, u32Value);
     
    68666895        {
    68676896            uint64_t u64Imm; IEM_OPCODE_GET_NEXT_U64(&u64Imm); /* 64-bit immediate! */
     6897            IEM_MC_BEGIN(0, 1);
    68686898            IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    6869 
    6870             IEM_MC_BEGIN(0, 1);
    68716899            IEM_MC_LOCAL_CONST(uint64_t, u64Value,/*=*/ u64Imm);
    68726900            IEM_MC_STORE_GREG_U64(iFixedReg, u64Value);
     
    69867014        /* register */
    69877015        uint8_t cShift; IEM_OPCODE_GET_NEXT_U8(&cShift);
     7016        IEM_MC_BEGIN(3, 0);
    69887017        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    6989         IEM_MC_BEGIN(3, 0);
    69907018        IEM_MC_ARG(uint8_t *,       pu8Dst,            0);
    69917019        IEM_MC_ARG_CONST(uint8_t,   cShiftArg, cShift, 1);
     
    70487076        /* register */
    70497077        uint8_t cShift; IEM_OPCODE_GET_NEXT_U8(&cShift);
    7050         IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    70517078        switch (pVCpu->iem.s.enmEffOpSize)
    70527079        {
    70537080            case IEMMODE_16BIT:
    70547081                IEM_MC_BEGIN(3, 0);
     7082                IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    70557083                IEM_MC_ARG(uint16_t *,      pu16Dst,           0);
    70567084                IEM_MC_ARG_CONST(uint8_t,   cShiftArg, cShift, 1);
     
    70657093            case IEMMODE_32BIT:
    70667094                IEM_MC_BEGIN(3, 0);
     7095                IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    70677096                IEM_MC_ARG(uint32_t *,      pu32Dst,           0);
    70687097                IEM_MC_ARG_CONST(uint8_t,   cShiftArg, cShift, 1);
     
    70787107            case IEMMODE_64BIT:
    70797108                IEM_MC_BEGIN(3, 0);
     7109                IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    70807110                IEM_MC_ARG(uint64_t *,      pu64Dst,           0);
    70817111                IEM_MC_ARG_CONST(uint8_t,   cShiftArg, cShift, 1);
     
    73387368        /* register access */
    73397369        uint8_t u8Imm; IEM_OPCODE_GET_NEXT_U8(&u8Imm);
     7370        IEM_MC_BEGIN(0, 0);
    73407371        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    7341         IEM_MC_BEGIN(0, 0);
    73427372        IEM_MC_STORE_GREG_U8(IEM_GET_MODRM_RM(pVCpu, bRm), u8Imm);
    73437373        IEM_MC_ADVANCE_RIP_AND_FINISH();
     
    75747604    {
    75757605        /* register */
     7606        IEM_MC_BEGIN(3, 0);
    75767607        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    7577         IEM_MC_BEGIN(3, 0);
    75787608        IEM_MC_ARG(uint8_t *,       pu8Dst,             0);
    75797609        IEM_MC_ARG_CONST(uint8_t,   cShiftArg,/*=*/1,   1);
     
    76337663    {
    76347664        /* register */
    7635         IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    76367665        switch (pVCpu->iem.s.enmEffOpSize)
    76377666        {
    76387667            case IEMMODE_16BIT:
    76397668                IEM_MC_BEGIN(3, 0);
     7669                IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    76407670                IEM_MC_ARG(uint16_t *,      pu16Dst,           0);
    76417671                IEM_MC_ARG_CONST(uint8_t,   cShiftArg,/*=1*/1, 1);
     
    76507680            case IEMMODE_32BIT:
    76517681                IEM_MC_BEGIN(3, 0);
     7682                IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    76527683                IEM_MC_ARG(uint32_t *,      pu32Dst,           0);
    76537684                IEM_MC_ARG_CONST(uint8_t,   cShiftArg,/*=1*/1, 1);
     
    76637694            case IEMMODE_64BIT:
    76647695                IEM_MC_BEGIN(3, 0);
     7696                IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    76657697                IEM_MC_ARG(uint64_t *,      pu64Dst,           0);
    76667698                IEM_MC_ARG_CONST(uint8_t,   cShiftArg,/*=1*/1, 1);
     
    77687800    {
    77697801        /* register */
     7802        IEM_MC_BEGIN(3, 0);
    77707803        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    7771         IEM_MC_BEGIN(3, 0);
    77727804        IEM_MC_ARG(uint8_t *,   pu8Dst,     0);
    77737805        IEM_MC_ARG(uint8_t,     cShiftArg,  1);
     
    78287860    {
    78297861        /* register */
    7830         IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    78317862        switch (pVCpu->iem.s.enmEffOpSize)
    78327863        {
    78337864            case IEMMODE_16BIT:
    78347865                IEM_MC_BEGIN(3, 0);
     7866                IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    78357867                IEM_MC_ARG(uint16_t *,      pu16Dst,    0);
    78367868                IEM_MC_ARG(uint8_t,         cShiftArg,  1);
     
    78467878            case IEMMODE_32BIT:
    78477879                IEM_MC_BEGIN(3, 0);
     7880                IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    78487881                IEM_MC_ARG(uint32_t *,      pu32Dst,    0);
    78497882                IEM_MC_ARG(uint8_t,         cShiftArg,  1);
     
    78607893            case IEMMODE_64BIT:
    78617894                IEM_MC_BEGIN(3, 0);
     7895                IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    78627896                IEM_MC_ARG(uint64_t *,      pu64Dst,    0);
    78637897                IEM_MC_ARG(uint8_t,         cShiftArg,  1);
     
    79788012{
    79798013    IEMOP_MNEMONIC(salc, "salc");
    7980     IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    79818014    IEMOP_HLP_NO_64BIT();
    79828015
    79838016    IEM_MC_BEGIN(0, 0);
     8017    IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    79848018    IEM_MC_IF_EFL_BIT_SET(X86_EFL_CF) {
    79858019        IEM_MC_STORE_GREG_U8_CONST(X86_GREG_xAX, 0xff);
     
    79988032{
    79998033    IEMOP_MNEMONIC(xlat, "xlat");
    8000     IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    80018034    switch (pVCpu->iem.s.enmEffAddrMode)
    80028035    {
    80038036        case IEMMODE_16BIT:
    80048037            IEM_MC_BEGIN(2, 0);
     8038            IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    80058039            IEM_MC_LOCAL(uint8_t,  u8Tmp);
    80068040            IEM_MC_LOCAL(uint16_t, u16Addr);
     
    80158049        case IEMMODE_32BIT:
    80168050            IEM_MC_BEGIN(2, 0);
     8051            IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    80178052            IEM_MC_LOCAL(uint8_t,  u8Tmp);
    80188053            IEM_MC_LOCAL(uint32_t, u32Addr);
     
    80278062        case IEMMODE_64BIT:
    80288063            IEM_MC_BEGIN(2, 0);
     8064            IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    80298065            IEM_MC_LOCAL(uint8_t,  u8Tmp);
    80308066            IEM_MC_LOCAL(uint64_t, u64Addr);
     
    80518087FNIEMOP_DEF_2(iemOpHlpFpu_st0_stN, uint8_t, bRm, PFNIEMAIMPLFPUR80, pfnAImpl)
    80528088{
    8053     IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    8054 
    80558089    IEM_MC_BEGIN(3, 1);
     8090    IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    80568091    IEM_MC_LOCAL(IEMFPURESULT,          FpuRes);
    80578092    IEM_MC_ARG_LOCAL_REF(PIEMFPURESULT, pFpuRes,        FpuRes,     0);
     
    80838118FNIEMOP_DEF_2(iemOpHlpFpuNoStore_st0_stN, uint8_t, bRm, PFNIEMAIMPLFPUR80FSW, pfnAImpl)
    80848119{
    8085     IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    8086 
    80878120    IEM_MC_BEGIN(3, 1);
     8121    IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    80888122    IEM_MC_LOCAL(uint16_t,              u16Fsw);
    80898123    IEM_MC_ARG_LOCAL_REF(uint16_t *,    pu16Fsw,        u16Fsw,     0);
     
    81158149FNIEMOP_DEF_2(iemOpHlpFpuNoStore_st0_stN_pop, uint8_t, bRm, PFNIEMAIMPLFPUR80FSW, pfnAImpl)
    81168150{
    8117     IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    8118 
    81198151    IEM_MC_BEGIN(3, 1);
     8152    IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    81208153    IEM_MC_LOCAL(uint16_t,              u16Fsw);
    81218154    IEM_MC_ARG_LOCAL_REF(uint16_t *,    pu16Fsw,        u16Fsw,     0);
     
    85718604{
    85728605    IEMOP_MNEMONIC(fnop, "fnop");
    8573     IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    8574 
    85758606    IEM_MC_BEGIN(0, 0);
     8607    IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    85768608    IEM_MC_MAYBE_RAISE_DEVICE_NOT_AVAILABLE();
    85778609    IEM_MC_MAYBE_RAISE_FPU_XCPT();
     
    85898621{
    85908622    IEMOP_MNEMONIC(fld_stN, "fld stN");
    8591     IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    8592 
    85938623    /** @todo Testcase: Check if this raises \#MF?  Intel mentioned it not. AMD
    85948624     *        indicates that it does. */
    85958625    IEM_MC_BEGIN(0, 2);
     8626    IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    85968627    IEM_MC_LOCAL(PCRTFLOAT80U,          pr80Value);
    85978628    IEM_MC_LOCAL(IEMFPURESULT,          FpuRes);
     
    86168647{
    86178648    IEMOP_MNEMONIC(fxch_stN, "fxch stN");
    8618     IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    8619 
    86208649    /** @todo Testcase: Check if this raises \#MF?  Intel mentioned it not. AMD
    86218650     *        indicates that it does. */
    86228651    IEM_MC_BEGIN(2, 3);
     8652    IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    86238653    IEM_MC_LOCAL(PCRTFLOAT80U,          pr80Value1);
    86248654    IEM_MC_LOCAL(PCRTFLOAT80U,          pr80Value2);
     
    86478677{
    86488678    IEMOP_MNEMONIC(fstp_st0_stN, "fstp st0,stN");
    8649     IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    86508679
    86518680    /* fstp st0, st0 is frequently used as an official 'ffreep st0' sequence. */
     
    86548683    {
    86558684        IEM_MC_BEGIN(0, 1);
     8685        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    86568686        IEM_MC_LOCAL_CONST(uint16_t,        u16Fsw, /*=*/ 0);
    86578687        IEM_MC_MAYBE_RAISE_DEVICE_NOT_AVAILABLE();
     
    86718701    {
    86728702        IEM_MC_BEGIN(0, 2);
     8703        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    86738704        IEM_MC_LOCAL(PCRTFLOAT80U,          pr80Value);
    86748705        IEM_MC_LOCAL(IEMFPURESULT,          FpuRes);
     
    86988729FNIEMOP_DEF_1(iemOpHlpFpu_st0, PFNIEMAIMPLFPUR80UNARY, pfnAImpl)
    86998730{
    8700     IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    8701 
    87028731    IEM_MC_BEGIN(2, 1);
     8732    IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    87038733    IEM_MC_LOCAL(IEMFPURESULT,          FpuRes);
    87048734    IEM_MC_ARG_LOCAL_REF(PIEMFPURESULT, pFpuRes,    FpuRes, 0);
     
    87408770{
    87418771    IEMOP_MNEMONIC(ftst_st0, "ftst st0");
    8742     IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    8743 
    87448772    IEM_MC_BEGIN(2, 1);
     8773    IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    87458774    IEM_MC_LOCAL(uint16_t,              u16Fsw);
    87468775    IEM_MC_ARG_LOCAL_REF(uint16_t *,    pu16Fsw,    u16Fsw, 0);
     
    87668795{
    87678796    IEMOP_MNEMONIC(fxam_st0, "fxam st0");
    8768     IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    8769 
    87708797    IEM_MC_BEGIN(2, 1);
     8798    IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    87718799    IEM_MC_LOCAL(uint16_t,              u16Fsw);
    87728800    IEM_MC_ARG_LOCAL_REF(uint16_t *,    pu16Fsw,    u16Fsw, 0);
     
    87928820FNIEMOP_DEF_1(iemOpHlpFpuPushConstant, PFNIEMAIMPLFPUR80LDCONST, pfnAImpl)
    87938821{
    8794     IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    8795 
    87968822    IEM_MC_BEGIN(1, 1);
     8823    IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    87978824    IEM_MC_LOCAL(IEMFPURESULT,          FpuRes);
    87988825    IEM_MC_ARG_LOCAL_REF(PIEMFPURESULT, pFpuRes,    FpuRes, 0);
     
    88918918FNIEMOP_DEF_2(iemOpHlpFpu_stN_st0_pop, uint8_t, bRm, PFNIEMAIMPLFPUR80, pfnAImpl)
    88928919{
    8893     IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    8894 
    88958920    IEM_MC_BEGIN(3, 1);
     8921    IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    88968922    IEM_MC_LOCAL(IEMFPURESULT,          FpuRes);
    88978923    IEM_MC_ARG_LOCAL_REF(PIEMFPURESULT, pFpuRes,        FpuRes,     0);
     
    89318957FNIEMOP_DEF_1(iemOpHlpFpuReplace_st0_push, PFNIEMAIMPLFPUR80UNARYTWO, pfnAImpl)
    89328958{
    8933     IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    8934 
    89358959    IEM_MC_BEGIN(2, 1);
     8960    IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    89368961    IEM_MC_LOCAL(IEMFPURESULTTWO,           FpuResTwo);
    89378962    IEM_MC_ARG_LOCAL_REF(PIEMFPURESULTTWO,  pFpuResTwo, FpuResTwo,  0);
     
    89899014{
    89909015    IEMOP_MNEMONIC(fdecstp, "fdecstp");
    8991     IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    89929016    /* Note! C0, C2 and C3 are documented as undefined, we clear them. */
    89939017    /** @todo Testcase: Check whether FOP, FPUIP and FPUCS are affected by
    89949018     *        FINCSTP and FDECSTP. */
    8995 
    89969019    IEM_MC_BEGIN(0,0);
     9020    IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    89979021
    89989022    IEM_MC_MAYBE_RAISE_DEVICE_NOT_AVAILABLE();
     
    90129036{
    90139037    IEMOP_MNEMONIC(fincstp, "fincstp");
    9014     IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    90159038    /* Note! C0, C2 and C3 are documented as undefined, we clear them. */
    90169039    /** @todo Testcase: Check whether FOP, FPUIP and FPUCS are affected by
    90179040     *        FINCSTP and FDECSTP. */
    9018 
    90199041    IEM_MC_BEGIN(0,0);
     9042    IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    90209043
    90219044    IEM_MC_MAYBE_RAISE_DEVICE_NOT_AVAILABLE();
     
    91839206{
    91849207    IEMOP_MNEMONIC(fcmovb_st0_stN, "fcmovb st0,stN");
    9185     IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    9186 
    91879208    IEM_MC_BEGIN(0, 1);
     9209    IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    91889210    IEM_MC_LOCAL(PCRTFLOAT80U,      pr80ValueN);
    91899211
     
    92109232{
    92119233    IEMOP_MNEMONIC(fcmove_st0_stN, "fcmove st0,stN");
    9212     IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    9213 
    92149234    IEM_MC_BEGIN(0, 1);
     9235    IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    92159236    IEM_MC_LOCAL(PCRTFLOAT80U,      pr80ValueN);
    92169237
     
    92379258{
    92389259    IEMOP_MNEMONIC(fcmovbe_st0_stN, "fcmovbe st0,stN");
    9239     IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    9240 
    92419260    IEM_MC_BEGIN(0, 1);
     9261    IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    92429262    IEM_MC_LOCAL(PCRTFLOAT80U,      pr80ValueN);
    92439263
     
    92649284{
    92659285    IEMOP_MNEMONIC(fcmovu_st0_stN, "fcmovu st0,stN");
    9266     IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    9267 
    92689286    IEM_MC_BEGIN(0, 1);
     9287    IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    92699288    IEM_MC_LOCAL(PCRTFLOAT80U,      pr80ValueN);
    92709289
     
    92959314FNIEMOP_DEF_1(iemOpHlpFpuNoStore_st0_st1_pop_pop, PFNIEMAIMPLFPUR80FSW, pfnAImpl)
    92969315{
    9297     IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    9298 
    92999316    IEM_MC_BEGIN(3, 1);
     9317    IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    93009318    IEM_MC_LOCAL(uint16_t,              u16Fsw);
    93019319    IEM_MC_ARG_LOCAL_REF(uint16_t *,    pu16Fsw,        u16Fsw,     0);
     
    97299747{
    97309748    IEMOP_MNEMONIC(fcmovnb_st0_stN, "fcmovnb st0,stN");
    9731     IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    9732 
    97339749    IEM_MC_BEGIN(0, 1);
     9750    IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    97349751    IEM_MC_LOCAL(PCRTFLOAT80U,      pr80ValueN);
    97359752
     
    97569773{
    97579774    IEMOP_MNEMONIC(fcmovne_st0_stN, "fcmovne st0,stN");
    9758     IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    9759 
    97609775    IEM_MC_BEGIN(0, 1);
     9776    IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    97619777    IEM_MC_LOCAL(PCRTFLOAT80U,      pr80ValueN);
    97629778
     
    97839799{
    97849800    IEMOP_MNEMONIC(fcmovnbe_st0_stN, "fcmovnbe st0,stN");
    9785     IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    9786 
    97879801    IEM_MC_BEGIN(0, 1);
     9802    IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    97889803    IEM_MC_LOCAL(PCRTFLOAT80U,      pr80ValueN);
    97899804
     
    98109825{
    98119826    IEMOP_MNEMONIC(fcmovnnu_st0_stN, "fcmovnnu st0,stN");
    9812     IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    9813 
    98149827    IEM_MC_BEGIN(0, 1);
     9828    IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    98159829    IEM_MC_LOCAL(PCRTFLOAT80U,      pr80ValueN);
    98169830
     
    98379851{
    98389852    IEMOP_MNEMONIC(fneni, "fneni (8087/ign)");
    9839     IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    98409853    IEM_MC_BEGIN(0,0);
     9854    IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    98419855    IEM_MC_MAYBE_RAISE_DEVICE_NOT_AVAILABLE();
    98429856    IEM_MC_ADVANCE_RIP_AND_FINISH();
     
    98499863{
    98509864    IEMOP_MNEMONIC(fndisi, "fndisi (8087/ign)");
    9851     IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    98529865    IEM_MC_BEGIN(0,0);
     9866    IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    98539867    IEM_MC_MAYBE_RAISE_DEVICE_NOT_AVAILABLE();
    98549868    IEM_MC_ADVANCE_RIP_AND_FINISH();
     
    98619875{
    98629876    IEMOP_MNEMONIC(fnclex, "fnclex");
    9863     IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    9864 
    98659877    IEM_MC_BEGIN(0,0);
     9878    IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    98669879    IEM_MC_MAYBE_RAISE_DEVICE_NOT_AVAILABLE();
    98679880    IEM_MC_ACTUALIZE_FPU_STATE_FOR_CHANGE();
     
    98859898{
    98869899    IEMOP_MNEMONIC(fnsetpm, "fnsetpm (80287/ign)");   /* set protected mode on fpu. */
    9887     IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    98889900    IEM_MC_BEGIN(0,0);
     9901    IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    98899902    IEM_MC_MAYBE_RAISE_DEVICE_NOT_AVAILABLE();
    98909903    IEM_MC_ADVANCE_RIP_AND_FINISH();
     
    98989911    IEMOP_MNEMONIC(frstpm, "frstpm (80287XL/ign)"); /* reset pm, back to real mode. */
    98999912#if 0 /* #UDs on newer CPUs */
    9900     IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    99019913    IEM_MC_BEGIN(0,0);
     9914    IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    99029915    IEM_MC_MAYBE_RAISE_DEVICE_NOT_AVAILABLE();
    99039916    IEM_MC_ADVANCE_RIP_AND_FINISH();
     
    999210005FNIEMOP_DEF_2(iemOpHlpFpu_stN_st0, uint8_t, bRm, PFNIEMAIMPLFPUR80, pfnAImpl)
    999310006{
    9994     IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    9995 
    999610007    IEM_MC_BEGIN(3, 1);
     10008    IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    999710009    IEM_MC_LOCAL(IEMFPURESULT,          FpuRes);
    999810010    IEM_MC_ARG_LOCAL_REF(PIEMFPURESULT, pFpuRes,        FpuRes,     0);
     
    1045710469{
    1045810470    IEMOP_MNEMONIC(ffree_stN, "ffree stN");
    10459     IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    1046010471    /* Note! C0, C1, C2 and C3 are documented as undefined, we leave the
    1046110472             unmodified. */
    10462 
    1046310473    IEM_MC_BEGIN(0, 0);
     10474    IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    1046410475
    1046510476    IEM_MC_MAYBE_RAISE_DEVICE_NOT_AVAILABLE();
     
    1047910490{
    1048010491    IEMOP_MNEMONIC(fst_st0_stN, "fst st0,stN");
    10481     IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    10482 
    1048310492    IEM_MC_BEGIN(0, 2);
     10493    IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    1048410494    IEM_MC_LOCAL(PCRTFLOAT80U,          pr80Value);
    1048510495    IEM_MC_LOCAL(IEMFPURESULT,          FpuRes);
     
    1081010820{
    1081110821    IEMOP_MNEMONIC(ffreep_stN, "ffreep stN");
    10812     IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    10813 
    1081410822    IEM_MC_BEGIN(0, 0);
     10823    IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    1081510824
    1081610825    IEM_MC_MAYBE_RAISE_DEVICE_NOT_AVAILABLE();
     
    1083110840{
    1083210841    IEMOP_MNEMONIC(fnstsw_ax, "fnstsw ax");
    10833     IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    10834 
    1083510842    IEM_MC_BEGIN(0, 1);
     10843    IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    1083610844    IEM_MC_LOCAL(uint16_t, u16Tmp);
    1083710845    IEM_MC_MAYBE_RAISE_DEVICE_NOT_AVAILABLE();
     
    1118411192    IEMOP_MNEMONIC(loopne_Jb, "loopne Jb");
    1118511193    int8_t i8Imm; IEM_OPCODE_GET_NEXT_S8(&i8Imm);
    11186     IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    1118711194    IEMOP_HLP_DEFAULT_64BIT_OP_SIZE();
    1118811195
     
    1119111198        case IEMMODE_16BIT:
    1119211199            IEM_MC_BEGIN(0,0);
     11200            IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    1119311201            IEM_MC_SUB_GREG_U16(X86_GREG_xCX, 1);
    1119411202            IEM_MC_IF_CX_IS_NZ_AND_EFL_BIT_NOT_SET(X86_EFL_ZF) {
     
    1120211210        case IEMMODE_32BIT:
    1120311211            IEM_MC_BEGIN(0,0);
     11212            IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    1120411213            IEM_MC_SUB_GREG_U32(X86_GREG_xCX, 1);
    1120511214            IEM_MC_IF_ECX_IS_NZ_AND_EFL_BIT_NOT_SET(X86_EFL_ZF) {
     
    1121311222        case IEMMODE_64BIT:
    1121411223            IEM_MC_BEGIN(0,0);
     11224            IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    1121511225            IEM_MC_SUB_GREG_U64(X86_GREG_xCX, 1);
    1121611226            IEM_MC_IF_RCX_IS_NZ_AND_EFL_BIT_NOT_SET(X86_EFL_ZF) {
     
    1123411244    IEMOP_MNEMONIC(loope_Jb, "loope Jb");
    1123511245    int8_t i8Imm; IEM_OPCODE_GET_NEXT_S8(&i8Imm);
    11236     IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    1123711246    IEMOP_HLP_DEFAULT_64BIT_OP_SIZE();
    1123811247
     
    1124111250        case IEMMODE_16BIT:
    1124211251            IEM_MC_BEGIN(0,0);
     11252            IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    1124311253            IEM_MC_SUB_GREG_U16(X86_GREG_xCX, 1);
    1124411254            IEM_MC_IF_CX_IS_NZ_AND_EFL_BIT_SET(X86_EFL_ZF) {
     
    1125211262        case IEMMODE_32BIT:
    1125311263            IEM_MC_BEGIN(0,0);
     11264            IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    1125411265            IEM_MC_SUB_GREG_U32(X86_GREG_xCX, 1);
    1125511266            IEM_MC_IF_ECX_IS_NZ_AND_EFL_BIT_SET(X86_EFL_ZF) {
     
    1126311274        case IEMMODE_64BIT:
    1126411275            IEM_MC_BEGIN(0,0);
     11276            IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    1126511277            IEM_MC_SUB_GREG_U64(X86_GREG_xCX, 1);
    1126611278            IEM_MC_IF_RCX_IS_NZ_AND_EFL_BIT_SET(X86_EFL_ZF) {
     
    1128411296    IEMOP_MNEMONIC(loop_Jb, "loop Jb");
    1128511297    int8_t i8Imm; IEM_OPCODE_GET_NEXT_S8(&i8Imm);
    11286     IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    1128711298    IEMOP_HLP_DEFAULT_64BIT_OP_SIZE();
    1128811299
     
    1130111312            case IEMMODE_16BIT:
    1130211313                IEM_MC_BEGIN(0,0);
     11314                IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    1130311315                IEM_MC_STORE_GREG_U16_CONST(X86_GREG_xCX, 0);
    1130411316                IEM_MC_ADVANCE_RIP_AND_FINISH();
     
    1130811320            case IEMMODE_32BIT:
    1130911321                IEM_MC_BEGIN(0,0);
     11322                IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    1131011323                IEM_MC_STORE_GREG_U32_CONST(X86_GREG_xCX, 0);
    1131111324                IEM_MC_ADVANCE_RIP_AND_FINISH();
     
    1131511328            case IEMMODE_64BIT:
    1131611329                IEM_MC_BEGIN(0,0);
     11330                IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    1131711331                IEM_MC_STORE_GREG_U64_CONST(X86_GREG_xCX, 0);
    1131811332                IEM_MC_ADVANCE_RIP_AND_FINISH();
     
    1132811342        case IEMMODE_16BIT:
    1132911343            IEM_MC_BEGIN(0,0);
    11330 
     11344            IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    1133111345            IEM_MC_SUB_GREG_U16(X86_GREG_xCX, 1);
    1133211346            IEM_MC_IF_CX_IS_NZ() {
     
    1134011354        case IEMMODE_32BIT:
    1134111355            IEM_MC_BEGIN(0,0);
     11356            IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    1134211357            IEM_MC_SUB_GREG_U32(X86_GREG_xCX, 1);
    1134311358            IEM_MC_IF_ECX_IS_NZ() {
     
    1135111366        case IEMMODE_64BIT:
    1135211367            IEM_MC_BEGIN(0,0);
     11368            IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    1135311369            IEM_MC_SUB_GREG_U64(X86_GREG_xCX, 1);
    1135411370            IEM_MC_IF_RCX_IS_NZ() {
     
    1137211388    IEMOP_MNEMONIC(jecxz_Jb, "jecxz Jb");
    1137311389    int8_t i8Imm; IEM_OPCODE_GET_NEXT_S8(&i8Imm);
    11374     IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    1137511390    IEMOP_HLP_DEFAULT_64BIT_OP_SIZE();
    1137611391
     
    1137911394        case IEMMODE_16BIT:
    1138011395            IEM_MC_BEGIN(0,0);
     11396            IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    1138111397            IEM_MC_IF_CX_IS_NZ() {
    1138211398                IEM_MC_ADVANCE_RIP_AND_FINISH();
     
    1138911405        case IEMMODE_32BIT:
    1139011406            IEM_MC_BEGIN(0,0);
     11407            IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    1139111408            IEM_MC_IF_ECX_IS_NZ() {
    1139211409                IEM_MC_ADVANCE_RIP_AND_FINISH();
     
    1139911416        case IEMMODE_64BIT:
    1140011417            IEM_MC_BEGIN(0,0);
     11418            IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    1140111419            IEM_MC_IF_RCX_IS_NZ() {
    1140211420                IEM_MC_ADVANCE_RIP_AND_FINISH();
     
    1149911517            int16_t i16Imm; IEM_OPCODE_GET_NEXT_S16(&i16Imm);
    1150011518            IEM_MC_BEGIN(0, 0);
     11519            IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    1150111520            IEM_MC_REL_JMP_S16_AND_FINISH(i16Imm);
    1150211521            IEM_MC_END();
     
    1150911528            int32_t i32Imm; IEM_OPCODE_GET_NEXT_S32(&i32Imm);
    1151011529            IEM_MC_BEGIN(0, 0);
     11530            IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    1151111531            IEM_MC_REL_JMP_S32_AND_FINISH(i32Imm);
    1151211532            IEM_MC_END();
     
    1154711567    IEMOP_MNEMONIC(jmp_Jb, "jmp Jb");
    1154811568    int8_t i8Imm; IEM_OPCODE_GET_NEXT_S8(&i8Imm);
    11549     IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    1155011569    IEMOP_HLP_DEFAULT_64BIT_OP_SIZE_AND_INTEL_IGNORES_OP_SIZE_PREFIX();
    1155111570
    1155211571    IEM_MC_BEGIN(0, 0);
     11572    IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    1155311573    IEM_MC_REL_JMP_S8_AND_FINISH(i8Imm);
    1155411574    IEM_MC_END();
     
    1168111701{
    1168211702    IEMOP_MNEMONIC(cmc, "cmc");
    11683     IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    1168411703    IEM_MC_BEGIN(0, 0);
     11704    IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    1168511705    IEM_MC_FLIP_EFL_BIT(X86_EFL_CF);
    1168611706    IEM_MC_ADVANCE_RIP_AND_FINISH();
     
    1169611716    { \
    1169711717        /* register access */ \
     11718        IEM_MC_BEGIN(2, 0); \
    1169811719        IEMOP_HLP_DONE_DECODING(); \
    11699         IEM_MC_BEGIN(2, 0); \
    1170011720        IEM_MC_ARG(uint8_t *,   pu8Dst, 0); \
    1170111721        IEM_MC_ARG(uint32_t *,  pEFlags, 1); \
     
    1175811778         * Register target \
    1175911779         */ \
    11760         IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); \
    1176111780        switch (pVCpu->iem.s.enmEffOpSize) \
    1176211781        { \
    1176311782            case IEMMODE_16BIT: \
    1176411783                IEM_MC_BEGIN(2, 0); \
     11784                IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); \
    1176511785                IEM_MC_ARG(uint16_t *,  pu16Dst, 0); \
    1176611786                IEM_MC_ARG(uint32_t *,  pEFlags, 1); \
     
    1177411794            case IEMMODE_32BIT: \
    1177511795                IEM_MC_BEGIN(2, 0); \
     11796                IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); \
    1177611797                IEM_MC_ARG(uint32_t *,  pu32Dst, 0); \
    1177711798                IEM_MC_ARG(uint32_t *,  pEFlags, 1); \
     
    1178611807            case IEMMODE_64BIT: \
    1178711808                IEM_MC_BEGIN(2, 0); \
     11809                IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); \
    1178811810                IEM_MC_ARG(uint64_t *,  pu64Dst, 0); \
    1178911811                IEM_MC_ARG(uint32_t *,  pEFlags, 1); \
     
    1181411836                    \
    1181511837                    IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffDst, bRm, 0); \
     11838                    IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); \
    1181611839                    IEM_MC_MEM_MAP(pu16Dst, IEM_ACCESS_DATA_RW, pVCpu->iem.s.iEffSeg, GCPtrEffDst, 0 /*arg*/); \
    1181711840                    IEM_MC_FETCH_EFLAGS(EFlags); \
     
    1183111854                    \
    1183211855                    IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffDst, bRm, 0); \
     11856                    IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); \
    1183311857                    IEM_MC_MEM_MAP(pu32Dst, IEM_ACCESS_DATA_RW, pVCpu->iem.s.iEffSeg, GCPtrEffDst, 0 /*arg*/); \
    1183411858                    IEM_MC_FETCH_EFLAGS(EFlags); \
     
    1184811872                    \
    1184911873                    IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffDst, bRm, 0); \
     11874                    IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); \
    1185011875                    IEM_MC_MEM_MAP(pu64Dst, IEM_ACCESS_DATA_RW, pVCpu->iem.s.iEffSeg, GCPtrEffDst, 0 /*arg*/); \
    1185111876                    IEM_MC_FETCH_EFLAGS(EFlags); \
     
    1187511900                    \
    1187611901                    IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffDst, bRm, 0); \
     11902                    IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); \
    1187711903                    IEM_MC_MEM_MAP(pu16Dst, IEM_ACCESS_DATA_RW, pVCpu->iem.s.iEffSeg, GCPtrEffDst, 0 /*arg*/); \
    1187811904                    IEM_MC_FETCH_EFLAGS(EFlags); \
     
    1189211918                    \
    1189311919                    IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffDst, bRm, 0); \
     11920                    IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); \
    1189411921                    IEM_MC_MEM_MAP(pu32Dst, IEM_ACCESS_DATA_RW, pVCpu->iem.s.iEffSeg, GCPtrEffDst, 0 /*arg*/); \
    1189511922                    IEM_MC_FETCH_EFLAGS(EFlags); \
     
    1190911936                    \
    1191011937                    IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffDst, bRm, 0); \
     11938                    IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); \
    1191111939                    IEM_MC_MEM_MAP(pu64Dst, IEM_ACCESS_DATA_RW, pVCpu->iem.s.iEffSeg, GCPtrEffDst, 0 /*arg*/); \
    1191211940                    IEM_MC_FETCH_EFLAGS(EFlags); \
     
    1194011968        /* register access */
    1194111969        uint8_t u8Imm; IEM_OPCODE_GET_NEXT_U8(&u8Imm);
     11970        IEM_MC_BEGIN(3, 0);
    1194211971        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    11943 
    11944         IEM_MC_BEGIN(3, 0);
    1194511972        IEM_MC_ARG(uint8_t *,       pu8Dst,             0);
    1194611973        IEM_MC_ARG_CONST(uint8_t,   u8Src,/*=*/u8Imm,   1);
     
    1198312010    {
    1198412011        /* register access */
     12012        IEM_MC_BEGIN(3, 1);
    1198512013        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    11986         IEM_MC_BEGIN(3, 1);
    1198712014        IEM_MC_ARG(uint16_t *,      pu16AX,     0);
    1198812015        IEM_MC_ARG(uint8_t,         u8Value,    1);
     
    1203712064    {
    1203812065        /* register access */
    12039         IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    1204012066        switch (pVCpu->iem.s.enmEffOpSize)
    1204112067        {
    1204212068            case IEMMODE_16BIT:
    1204312069            {
     12070                IEM_MC_BEGIN(4, 1);
    1204412071                IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    12045                 IEM_MC_BEGIN(4, 1);
    1204612072                IEM_MC_ARG(uint16_t *,      pu16AX,     0);
    1204712073                IEM_MC_ARG(uint16_t *,      pu16DX,     1);
     
    1206712093            case IEMMODE_32BIT:
    1206812094            {
     12095                IEM_MC_BEGIN(4, 1);
    1206912096                IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    12070                 IEM_MC_BEGIN(4, 1);
    1207112097                IEM_MC_ARG(uint32_t *,      pu32AX,     0);
    1207212098                IEM_MC_ARG(uint32_t *,      pu32DX,     1);
     
    1209412120            case IEMMODE_64BIT:
    1209512121            {
     12122                IEM_MC_BEGIN(4, 1);
    1209612123                IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    12097                 IEM_MC_BEGIN(4, 1);
    1209812124                IEM_MC_ARG(uint64_t *,      pu64AX,     0);
    1209912125                IEM_MC_ARG(uint64_t *,      pu64DX,     1);
     
    1227812304    {
    1227912305        /* register access */
    12280         IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    1228112306        switch (pVCpu->iem.s.enmEffOpSize)
    1228212307        {
     
    1228512310                uint16_t u16Imm; IEM_OPCODE_GET_NEXT_U16(&u16Imm);
    1228612311                IEM_MC_BEGIN(3, 0);
     12312                IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    1228712313                IEM_MC_ARG(uint16_t *,      pu16Dst,                0);
    1228812314                IEM_MC_ARG_CONST(uint16_t,  u16Src,/*=*/u16Imm,     1);
     
    1230012326                uint32_t u32Imm; IEM_OPCODE_GET_NEXT_U32(&u32Imm);
    1230112327                IEM_MC_BEGIN(3, 0);
     12328                IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    1230212329                IEM_MC_ARG(uint32_t *,      pu32Dst,                0);
    1230312330                IEM_MC_ARG_CONST(uint32_t,  u32Src,/*=*/u32Imm,     1);
     
    1231612343                uint64_t u64Imm; IEM_OPCODE_GET_NEXT_S32_SX_U64(&u64Imm);
    1231712344                IEM_MC_BEGIN(3, 0);
     12345                IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    1231812346                IEM_MC_ARG(uint64_t *,      pu64Dst,                0);
    1231912347                IEM_MC_ARG_CONST(uint64_t,  u64Src,/*=*/u64Imm,     1);
     
    1246712495{
    1246812496    IEMOP_MNEMONIC(clc, "clc");
    12469     IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    1247012497    IEM_MC_BEGIN(0, 0);
     12498    IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    1247112499    IEM_MC_CLEAR_EFL_BIT(X86_EFL_CF);
    1247212500    IEM_MC_ADVANCE_RIP_AND_FINISH();
     
    1248112509{
    1248212510    IEMOP_MNEMONIC(stc, "stc");
    12483     IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    1248412511    IEM_MC_BEGIN(0, 0);
     12512    IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    1248512513    IEM_MC_SET_EFL_BIT(X86_EFL_CF);
    1248612514    IEM_MC_ADVANCE_RIP_AND_FINISH();
     
    1251412542{
    1251512543    IEMOP_MNEMONIC(cld, "cld");
    12516     IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    1251712544    IEM_MC_BEGIN(0, 0);
     12545    IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    1251812546    IEM_MC_CLEAR_EFL_BIT(X86_EFL_DF);
    1251912547    IEM_MC_ADVANCE_RIP_AND_FINISH();
     
    1252812556{
    1252912557    IEMOP_MNEMONIC(std, "std");
    12530     IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    1253112558    IEM_MC_BEGIN(0, 0);
     12559    IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    1253212560    IEM_MC_SET_EFL_BIT(X86_EFL_DF);
    1253312561    IEM_MC_ADVANCE_RIP_AND_FINISH();
     
    1260512633    {
    1260612634        /* The new RIP is taken from a register. */
    12607         IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    1260812635        switch (pVCpu->iem.s.enmEffOpSize)
    1260912636        {
    1261012637            case IEMMODE_16BIT:
    1261112638                IEM_MC_BEGIN(1, 0);
     12639                IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    1261212640                IEM_MC_ARG(uint16_t, u16Target, 0);
    1261312641                IEM_MC_FETCH_GREG_U16(u16Target, IEM_GET_MODRM_RM(pVCpu, bRm));
     
    1261812646            case IEMMODE_32BIT:
    1261912647                IEM_MC_BEGIN(1, 0);
     12648                IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    1262012649                IEM_MC_ARG(uint32_t, u32Target, 0);
    1262112650                IEM_MC_FETCH_GREG_U32(u32Target, IEM_GET_MODRM_RM(pVCpu, bRm));
     
    1262612655            case IEMMODE_64BIT:
    1262712656                IEM_MC_BEGIN(1, 0);
     12657                IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    1262812658                IEM_MC_ARG(uint64_t, u64Target, 0);
    1262912659                IEM_MC_FETCH_GREG_U64(u64Target, IEM_GET_MODRM_RM(pVCpu, bRm));
     
    1276812798    {
    1276912799        /* The new RIP is taken from a register. */
    12770         IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    1277112800        switch (pVCpu->iem.s.enmEffOpSize)
    1277212801        {
    1277312802            case IEMMODE_16BIT:
    1277412803                IEM_MC_BEGIN(0, 1);
     12804                IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    1277512805                IEM_MC_LOCAL(uint16_t, u16Target);
    1277612806                IEM_MC_FETCH_GREG_U16(u16Target, IEM_GET_MODRM_RM(pVCpu, bRm));
     
    1278112811            case IEMMODE_32BIT:
    1278212812                IEM_MC_BEGIN(0, 1);
     12813                IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    1278312814                IEM_MC_LOCAL(uint32_t, u32Target);
    1278412815                IEM_MC_FETCH_GREG_U32(u32Target, IEM_GET_MODRM_RM(pVCpu, bRm));
     
    1278912820            case IEMMODE_64BIT:
    1279012821                IEM_MC_BEGIN(0, 1);
     12822                IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    1279112823                IEM_MC_LOCAL(uint64_t, u64Target);
    1279212824                IEM_MC_FETCH_GREG_U64(u64Target, IEM_GET_MODRM_RM(pVCpu, bRm));
  • trunk/src/VBox/VMM/VMMAll/IEMAllInstructionsPython.py

    r100633 r100714  
    22762276
    22772277                # Hand it to the handler.
    2278                 fnParser = g_dMcStmtParsers.get(sName);
     2278                fnParser = g_dMcStmtParsers.get(sName)[0];
    22792279                if not fnParser:
    22802280                    self.raiseDecodeError(sRawCode, off, 'Unknown MC statement: %s' % (sName,));
     
    23872387                              or sRawCode.find('IEMOP_HLP_DECODED_', off, offEnd) >= 0
    23882388                              or sRawCode.find('IEMOP_HLP_RAISE_UD_IF_MISSING_GUEST_FEATURE', off, offEnd) >= 0
     2389                              or sRawCode.find('IEMOP_HLP_VMX_INSTR', off, offEnd) >= 0
     2390                              or sRawCode.find('IEMOP_HLP_IN_VMX_OPERATION', off, offEnd) >= 0 ## @todo wrong
    23892391                           );
    23902392
     
    24742476        return None;
    24752477
     2478    koReCppFirstWord = re.compile(r'^\s*(\w+)[ (;]');
     2479    kdDecodeCppStmtOkayAfterDone = {
     2480        'IEMOP_HLP_IN_VMX_OPERATION': True,
     2481        'IEMOP_HLP_VMX_INSTR':        True,
     2482    };
     2483
     2484    def checkForDoneDecoding(self, aoStmts):
     2485        """
     2486        Checks that the block contains a IEMOP_HLP_DONE_*DECODING* macro
     2487        invocation.
     2488        Returns None on success, error string on failure.
     2489
     2490        This ensures safe instruction restarting in case the recompiler runs
     2491        out of TB resources during recompilation (e.g. aRanges or aGCPhysPages
     2492        entries).
     2493        """
     2494
     2495        # The IEMOP_HLP_DONE_ stuff is not allowed inside conditionals, so we
     2496        # don't need to look.
     2497        cIemOpHlpDone = 0;
     2498        for iStmt, oStmt in enumerate(aoStmts):
     2499            if oStmt.isCppStmt():
     2500                #print('dbg: #%u[%u]: %s %s (%s)'
     2501                #      % (iStmt + 1, cIemOpHlpDone, oStmt.sName, 'd' if oStmt.fDecode else 'r', oStmt.asParams[0],));
     2502
     2503                oMatch = self.koReCppFirstWord.match(oStmt.asParams[0]);
     2504                if oMatch:
     2505                    sFirstWord = oMatch.group(1);
     2506                    if (   sFirstWord.startswith('IEMOP_HLP_DONE_')
     2507                        or sFirstWord.startswith('IEMOP_HLP_DECODED_')):
     2508                        cIemOpHlpDone += 1;
     2509                    elif cIemOpHlpDone > 0 and oStmt.fDecode and sFirstWord not in self.kdDecodeCppStmtOkayAfterDone:
     2510                        return "statement #%u: Decoding statement following IEMOP_HLP_DONE_*DECODING*!" % (iStmt + 1,);
     2511                #else: print('dbg: #%u[%u]: %s' % (iStmt + 1, cIemOpHlpDone, oStmt.asParams[0]));
     2512            else:
     2513                #print('dbg: #%u[%u]: %s' % (iStmt + 1, cIemOpHlpDone, oStmt.sName));
     2514                if oStmt.sName.startswith('IEM_MC_DEFER_TO_CIMPL_') and iStmt == 0: # implicit
     2515                    cIemOpHlpDone += 1;
     2516                elif cIemOpHlpDone == 0 and g_dMcStmtParsers.get(oStmt.sName, (None, False))[1]:
     2517                    return "statement #%u: State modifying MC statement before IEMOP_HLP_DONE_*DECODING*!" % (iStmt + 1,);
     2518                elif cIemOpHlpDone > 0  and oStmt.sName in ('IEM_MC_CALC_RM_EFF_ADDR',):
     2519                    return "statement #%u: Decoding statement following IEMOP_HLP_DONE_*DECODING*!" % (iStmt + 1,);
     2520        if cIemOpHlpDone == 1:
     2521            return None;
     2522        if cIemOpHlpDone > 1:
     2523            return "Block has more than one IEMOP_HLP_DONE_*DECODING* invocation!";
     2524        return "Block is missing IEMOP_HLP_DONE_*DECODING* invocation!";
     2525
    24762526    def check(self):
    24772527        """
     
    24862536            asRet.append(sRet);
    24872537
     2538        sRet = self.checkForDoneDecoding(aoStmts);
     2539        if sRet:
     2540            asRet.append(sRet);
     2541
    24882542        return asRet;
    24892543
    24902544
    24912545
    2492 ## IEM_MC_XXX -> parser dictionary.
     2546## IEM_MC_XXX -> parser + info dictionary.
     2547#
     2548# The info is currently a single boolean entry indicating whether the
     2549# statement modifies state and must not be used before IEMOP_HL_DONE_*.
     2550#
    24932551# The raw table was generated via the following command
    24942552#       sed -n -e "s/^# *define *\(IEM_MC_[A-Z_0-9]*\)[ (].*$/        '\1': McBlock.parseMcGeneric,/p" include/IEMMc.h \
    2495 #       | sort | uniq | gawk "{printf """    %%-60s %%s\n""", $1, $2}"
     2553#       | sort | uniq | gawk "{printf """    %%-60s (%%s,        True)\n""", $1, $2}"
    24962554g_dMcStmtParsers = {
    2497     'IEM_MC_ACTUALIZE_AVX_STATE_FOR_CHANGE':                     McBlock.parseMcGeneric,
    2498     'IEM_MC_ACTUALIZE_AVX_STATE_FOR_READ':                       McBlock.parseMcGeneric,
    2499     'IEM_MC_ACTUALIZE_FPU_STATE_FOR_CHANGE':                     McBlock.parseMcGeneric,
    2500     'IEM_MC_ACTUALIZE_FPU_STATE_FOR_READ':                       McBlock.parseMcGeneric,
    2501     'IEM_MC_ACTUALIZE_SSE_STATE_FOR_CHANGE':                     McBlock.parseMcGeneric,
    2502     'IEM_MC_ACTUALIZE_SSE_STATE_FOR_READ':                       McBlock.parseMcGeneric,
    2503     'IEM_MC_ADD_GREG_U16':                                       McBlock.parseMcGeneric,
    2504     'IEM_MC_ADD_GREG_U16_TO_LOCAL':                              McBlock.parseMcGeneric,
    2505     'IEM_MC_ADD_GREG_U32':                                       McBlock.parseMcGeneric,
    2506     'IEM_MC_ADD_GREG_U32_TO_LOCAL':                              McBlock.parseMcGeneric,
    2507     'IEM_MC_ADD_GREG_U64':                                       McBlock.parseMcGeneric,
    2508     'IEM_MC_ADD_GREG_U64_TO_LOCAL':                              McBlock.parseMcGeneric,
    2509     'IEM_MC_ADD_GREG_U8':                                        McBlock.parseMcGeneric,
    2510     'IEM_MC_ADD_GREG_U8_TO_LOCAL':                               McBlock.parseMcGeneric,
    2511     'IEM_MC_ADD_LOCAL_S16_TO_EFF_ADDR':                          McBlock.parseMcGeneric,
    2512     'IEM_MC_ADD_LOCAL_S32_TO_EFF_ADDR':                          McBlock.parseMcGeneric,
    2513     'IEM_MC_ADD_LOCAL_S64_TO_EFF_ADDR':                          McBlock.parseMcGeneric,
    2514     'IEM_MC_ADVANCE_RIP_AND_FINISH':                             McBlock.parseMcGeneric,
    2515     'IEM_MC_AND_2LOCS_U32':                                      McBlock.parseMcGeneric,
    2516     'IEM_MC_AND_ARG_U16':                                        McBlock.parseMcGeneric,
    2517     'IEM_MC_AND_ARG_U32':                                        McBlock.parseMcGeneric,
    2518     'IEM_MC_AND_ARG_U64':                                        McBlock.parseMcGeneric,
    2519     'IEM_MC_AND_GREG_U16':                                       McBlock.parseMcGeneric,
    2520     'IEM_MC_AND_GREG_U32':                                       McBlock.parseMcGeneric,
    2521     'IEM_MC_AND_GREG_U64':                                       McBlock.parseMcGeneric,
    2522     'IEM_MC_AND_GREG_U8':                                        McBlock.parseMcGeneric,
    2523     'IEM_MC_AND_LOCAL_U16':                                      McBlock.parseMcGeneric,
    2524     'IEM_MC_AND_LOCAL_U32':                                      McBlock.parseMcGeneric,
    2525     'IEM_MC_AND_LOCAL_U64':                                      McBlock.parseMcGeneric,
    2526     'IEM_MC_AND_LOCAL_U8':                                       McBlock.parseMcGeneric,
    2527     'IEM_MC_ARG':                                                McBlock.parseMcArg,
    2528     'IEM_MC_ARG_CONST':                                          McBlock.parseMcArgConst,
    2529     'IEM_MC_ARG_LOCAL_EFLAGS':                                   McBlock.parseMcArgLocalEFlags,
    2530     'IEM_MC_ARG_LOCAL_REF':                                      McBlock.parseMcArgLocalRef,
    2531     'IEM_MC_ASSIGN':                                             McBlock.parseMcGeneric,
    2532     'IEM_MC_ASSIGN_TO_SMALLER':                                  McBlock.parseMcGeneric,
    2533     'IEM_MC_ASSIGN_U8_SX_U64':                                   McBlock.parseMcGeneric,
    2534     'IEM_MC_ASSIGN_U32_SX_U64':                                  McBlock.parseMcGeneric,
    2535     'IEM_MC_BEGIN':                                              McBlock.parseMcGeneric,
    2536     'IEM_MC_BROADCAST_XREG_U16_ZX_VLMAX':                        McBlock.parseMcGeneric,
    2537     'IEM_MC_BROADCAST_XREG_U32_ZX_VLMAX':                        McBlock.parseMcGeneric,
    2538     'IEM_MC_BROADCAST_XREG_U64_ZX_VLMAX':                        McBlock.parseMcGeneric,
    2539     'IEM_MC_BROADCAST_XREG_U8_ZX_VLMAX':                         McBlock.parseMcGeneric,
    2540     'IEM_MC_BROADCAST_YREG_U128_ZX_VLMAX':                       McBlock.parseMcGeneric,
    2541     'IEM_MC_BROADCAST_YREG_U16_ZX_VLMAX':                        McBlock.parseMcGeneric,
    2542     'IEM_MC_BROADCAST_YREG_U32_ZX_VLMAX':                        McBlock.parseMcGeneric,
    2543     'IEM_MC_BROADCAST_YREG_U64_ZX_VLMAX':                        McBlock.parseMcGeneric,
    2544     'IEM_MC_BROADCAST_YREG_U8_ZX_VLMAX':                         McBlock.parseMcGeneric,
    2545     'IEM_MC_BSWAP_LOCAL_U16':                                    McBlock.parseMcGeneric,
    2546     'IEM_MC_BSWAP_LOCAL_U32':                                    McBlock.parseMcGeneric,
    2547     'IEM_MC_BSWAP_LOCAL_U64':                                    McBlock.parseMcGeneric,
    2548     'IEM_MC_CALC_RM_EFF_ADDR':                                   McBlock.parseMcGeneric,
    2549     'IEM_MC_CALL_AIMPL_3':                                       McBlock.parseMcCallAImpl,
    2550     'IEM_MC_CALL_AIMPL_4':                                       McBlock.parseMcCallAImpl,
    2551     'IEM_MC_CALL_AVX_AIMPL_2':                                   McBlock.parseMcCallAvxAImpl,
    2552     'IEM_MC_CALL_AVX_AIMPL_3':                                   McBlock.parseMcCallAvxAImpl,
    2553     'IEM_MC_CALL_CIMPL_0':                                       McBlock.parseMcCallCImpl,
    2554     'IEM_MC_CALL_CIMPL_1':                                       McBlock.parseMcCallCImpl,
    2555     'IEM_MC_CALL_CIMPL_2':                                       McBlock.parseMcCallCImpl,
    2556     'IEM_MC_CALL_CIMPL_3':                                       McBlock.parseMcCallCImpl,
    2557     'IEM_MC_CALL_CIMPL_4':                                       McBlock.parseMcCallCImpl,
    2558     'IEM_MC_CALL_CIMPL_5':                                       McBlock.parseMcCallCImpl,
    2559     'IEM_MC_CALL_FPU_AIMPL_1':                                   McBlock.parseMcCallFpuAImpl,
    2560     'IEM_MC_CALL_FPU_AIMPL_2':                                   McBlock.parseMcCallFpuAImpl,
    2561     'IEM_MC_CALL_FPU_AIMPL_3':                                   McBlock.parseMcCallFpuAImpl,
    2562     'IEM_MC_CALL_MMX_AIMPL_2':                                   McBlock.parseMcCallMmxAImpl,
    2563     'IEM_MC_CALL_MMX_AIMPL_3':                                   McBlock.parseMcCallMmxAImpl,
    2564     'IEM_MC_CALL_SSE_AIMPL_2':                                   McBlock.parseMcCallSseAImpl,
    2565     'IEM_MC_CALL_SSE_AIMPL_3':                                   McBlock.parseMcCallSseAImpl,
    2566     'IEM_MC_CALL_VOID_AIMPL_0':                                  McBlock.parseMcCallVoidAImpl,
    2567     'IEM_MC_CALL_VOID_AIMPL_1':                                  McBlock.parseMcCallVoidAImpl,
    2568     'IEM_MC_CALL_VOID_AIMPL_2':                                  McBlock.parseMcCallVoidAImpl,
    2569     'IEM_MC_CALL_VOID_AIMPL_3':                                  McBlock.parseMcCallVoidAImpl,
    2570     'IEM_MC_CALL_VOID_AIMPL_4':                                  McBlock.parseMcCallVoidAImpl,
    2571     'IEM_MC_CLEAR_EFL_BIT':                                      McBlock.parseMcGeneric,
    2572     'IEM_MC_CLEAR_FSW_EX':                                       McBlock.parseMcGeneric,
    2573     'IEM_MC_CLEAR_HIGH_GREG_U64':                                McBlock.parseMcGeneric,
    2574     'IEM_MC_CLEAR_HIGH_GREG_U64_BY_REF':                         McBlock.parseMcGeneric,
    2575     'IEM_MC_CLEAR_XREG_U32_MASK':                                McBlock.parseMcGeneric,
    2576     'IEM_MC_CLEAR_YREG_128_UP':                                  McBlock.parseMcGeneric,
    2577     'IEM_MC_COMMIT_EFLAGS':                                      McBlock.parseMcGeneric,
    2578     'IEM_MC_COPY_XREG_U128':                                     McBlock.parseMcGeneric,
    2579     'IEM_MC_COPY_YREG_U128_ZX_VLMAX':                            McBlock.parseMcGeneric,
    2580     'IEM_MC_COPY_YREG_U256_ZX_VLMAX':                            McBlock.parseMcGeneric,
    2581     'IEM_MC_COPY_YREG_U64_ZX_VLMAX':                             McBlock.parseMcGeneric,
    2582     'IEM_MC_DEFER_TO_CIMPL_0_RET':                               McBlock.parseMcGeneric,
    2583     'IEM_MC_DEFER_TO_CIMPL_1_RET':                               McBlock.parseMcGeneric,
    2584     'IEM_MC_DEFER_TO_CIMPL_2_RET':                               McBlock.parseMcGeneric,
    2585     'IEM_MC_DEFER_TO_CIMPL_3_RET':                               McBlock.parseMcGeneric,
    2586     'IEM_MC_END':                                                McBlock.parseMcGeneric,
    2587     'IEM_MC_FETCH_EFLAGS':                                       McBlock.parseMcGeneric,
    2588     'IEM_MC_FETCH_EFLAGS_U8':                                    McBlock.parseMcGeneric,
    2589     'IEM_MC_FETCH_FCW':                                          McBlock.parseMcGeneric,
    2590     'IEM_MC_FETCH_FSW':                                          McBlock.parseMcGeneric,
    2591     'IEM_MC_FETCH_GREG_U16':                                     McBlock.parseMcGeneric,
    2592     'IEM_MC_FETCH_GREG_U16_SX_U32':                              McBlock.parseMcGeneric,
    2593     'IEM_MC_FETCH_GREG_U16_SX_U64':                              McBlock.parseMcGeneric,
    2594     'IEM_MC_FETCH_GREG_U16_ZX_U32':                              McBlock.parseMcGeneric,
    2595     'IEM_MC_FETCH_GREG_U16_ZX_U64':                              McBlock.parseMcGeneric,
    2596     'IEM_MC_FETCH_GREG_U32':                                     McBlock.parseMcGeneric,
    2597     'IEM_MC_FETCH_GREG_U32_SX_U64':                              McBlock.parseMcGeneric,
    2598     'IEM_MC_FETCH_GREG_U32_ZX_U64':                              McBlock.parseMcGeneric,
    2599     'IEM_MC_FETCH_GREG_U64':                                     McBlock.parseMcGeneric,
    2600     'IEM_MC_FETCH_GREG_U64_ZX_U64':                              McBlock.parseMcGeneric,
    2601     'IEM_MC_FETCH_GREG_U8':                                      McBlock.parseMcGeneric,
    2602     'IEM_MC_FETCH_GREG_U8_SX_U16':                               McBlock.parseMcGeneric,
    2603     'IEM_MC_FETCH_GREG_U8_SX_U32':                               McBlock.parseMcGeneric,
    2604     'IEM_MC_FETCH_GREG_U8_SX_U64':                               McBlock.parseMcGeneric,
    2605     'IEM_MC_FETCH_GREG_U8_ZX_U16':                               McBlock.parseMcGeneric,
    2606     'IEM_MC_FETCH_GREG_U8_ZX_U32':                               McBlock.parseMcGeneric,
    2607     'IEM_MC_FETCH_GREG_U8_ZX_U64':                               McBlock.parseMcGeneric,
    2608     'IEM_MC_FETCH_MEM_D80':                                      McBlock.parseMcGeneric,
    2609     'IEM_MC_FETCH_MEM_I16':                                      McBlock.parseMcGeneric,
    2610     'IEM_MC_FETCH_MEM_I32':                                      McBlock.parseMcGeneric,
    2611     'IEM_MC_FETCH_MEM_I64':                                      McBlock.parseMcGeneric,
    2612     'IEM_MC_FETCH_MEM_R32':                                      McBlock.parseMcGeneric,
    2613     'IEM_MC_FETCH_MEM_R64':                                      McBlock.parseMcGeneric,
    2614     'IEM_MC_FETCH_MEM_R80':                                      McBlock.parseMcGeneric,
    2615     'IEM_MC_FETCH_MEM_S32_SX_U64':                               McBlock.parseMcGeneric,
    2616     'IEM_MC_FETCH_MEM_U128':                                     McBlock.parseMcGeneric,
    2617     'IEM_MC_FETCH_MEM_U128_ALIGN_SSE':                           McBlock.parseMcGeneric,
    2618     'IEM_MC_FETCH_MEM_U128_NO_AC':                               McBlock.parseMcGeneric,
    2619     'IEM_MC_FETCH_MEM_U16':                                      McBlock.parseMcGeneric,
    2620     'IEM_MC_FETCH_MEM_U16_DISP':                                 McBlock.parseMcGeneric,
    2621     'IEM_MC_FETCH_MEM_U16_SX_U32':                               McBlock.parseMcGeneric,
    2622     'IEM_MC_FETCH_MEM_U16_SX_U64':                               McBlock.parseMcGeneric,
    2623     'IEM_MC_FETCH_MEM_U16_ZX_U32':                               McBlock.parseMcGeneric,
    2624     'IEM_MC_FETCH_MEM_U16_ZX_U64':                               McBlock.parseMcGeneric,
    2625     'IEM_MC_FETCH_MEM_U256':                                     McBlock.parseMcGeneric,
    2626     'IEM_MC_FETCH_MEM_U256_ALIGN_AVX':                           McBlock.parseMcGeneric,
    2627     'IEM_MC_FETCH_MEM_U256_NO_AC':                               McBlock.parseMcGeneric,
    2628     'IEM_MC_FETCH_MEM_U32':                                      McBlock.parseMcGeneric,
    2629     'IEM_MC_FETCH_MEM_U32_DISP':                                 McBlock.parseMcGeneric,
    2630     'IEM_MC_FETCH_MEM_U32_SX_U64':                               McBlock.parseMcGeneric,
    2631     'IEM_MC_FETCH_MEM_U32_ZX_U64':                               McBlock.parseMcGeneric,
    2632     'IEM_MC_FETCH_MEM_U64':                                      McBlock.parseMcGeneric,
    2633     'IEM_MC_FETCH_MEM_U64_ALIGN_U128':                           McBlock.parseMcGeneric,
    2634     'IEM_MC_FETCH_MEM_U64_DISP':                                 McBlock.parseMcGeneric,
    2635     'IEM_MC_FETCH_MEM_U8':                                       McBlock.parseMcGeneric,
    2636     'IEM_MC_FETCH_MEM_U8_SX_U16':                                McBlock.parseMcGeneric,
    2637     'IEM_MC_FETCH_MEM_U8_SX_U32':                                McBlock.parseMcGeneric,
    2638     'IEM_MC_FETCH_MEM_U8_SX_U64':                                McBlock.parseMcGeneric,
    2639     'IEM_MC_FETCH_MEM_U8_ZX_U16':                                McBlock.parseMcGeneric,
    2640     'IEM_MC_FETCH_MEM_U8_ZX_U32':                                McBlock.parseMcGeneric,
    2641     'IEM_MC_FETCH_MEM_U8_ZX_U64':                                McBlock.parseMcGeneric,
    2642     'IEM_MC_FETCH_MEM_XMM':                                      McBlock.parseMcGeneric,
    2643     'IEM_MC_FETCH_MEM_XMM_ALIGN_SSE':                            McBlock.parseMcGeneric,
    2644     'IEM_MC_FETCH_MEM_XMM_NO_AC':                                McBlock.parseMcGeneric,
    2645     'IEM_MC_FETCH_MEM_XMM_U32':                                  McBlock.parseMcGeneric,
    2646     'IEM_MC_FETCH_MEM_XMM_U64':                                  McBlock.parseMcGeneric,
    2647     'IEM_MC_FETCH_MEM_YMM':                                      McBlock.parseMcGeneric,
    2648     'IEM_MC_FETCH_MEM_YMM_ALIGN_AVX':                            McBlock.parseMcGeneric,
    2649     'IEM_MC_FETCH_MEM_YMM_NO_AC':                                McBlock.parseMcGeneric,
    2650     'IEM_MC_FETCH_MEM16_U8':                                     McBlock.parseMcGeneric,
    2651     'IEM_MC_FETCH_MEM32_U8':                                     McBlock.parseMcGeneric,
    2652     'IEM_MC_FETCH_MREG_U32':                                     McBlock.parseMcGeneric,
    2653     'IEM_MC_FETCH_MREG_U64':                                     McBlock.parseMcGeneric,
    2654     'IEM_MC_FETCH_SREG_BASE_U32':                                McBlock.parseMcGeneric,
    2655     'IEM_MC_FETCH_SREG_BASE_U64':                                McBlock.parseMcGeneric,
    2656     'IEM_MC_FETCH_SREG_U16':                                     McBlock.parseMcGeneric,
    2657     'IEM_MC_FETCH_SREG_ZX_U32':                                  McBlock.parseMcGeneric,
    2658     'IEM_MC_FETCH_SREG_ZX_U64':                                  McBlock.parseMcGeneric,
    2659     'IEM_MC_FETCH_XREG_U128':                                    McBlock.parseMcGeneric,
    2660     'IEM_MC_FETCH_XREG_U16':                                     McBlock.parseMcGeneric,
    2661     'IEM_MC_FETCH_XREG_U32':                                     McBlock.parseMcGeneric,
    2662     'IEM_MC_FETCH_XREG_U64':                                     McBlock.parseMcGeneric,
    2663     'IEM_MC_FETCH_XREG_U8':                                      McBlock.parseMcGeneric,
    2664     'IEM_MC_FETCH_XREG_XMM':                                     McBlock.parseMcGeneric,
    2665     'IEM_MC_FETCH_YREG_2ND_U64':                                 McBlock.parseMcGeneric,
    2666     'IEM_MC_FETCH_YREG_U128':                                    McBlock.parseMcGeneric,
    2667     'IEM_MC_FETCH_YREG_U256':                                    McBlock.parseMcGeneric,
    2668     'IEM_MC_FETCH_YREG_U32':                                     McBlock.parseMcGeneric,
    2669     'IEM_MC_FETCH_YREG_U64':                                     McBlock.parseMcGeneric,
    2670     'IEM_MC_FLIP_EFL_BIT':                                       McBlock.parseMcGeneric,
    2671     'IEM_MC_FPU_FROM_MMX_MODE':                                  McBlock.parseMcGeneric,
    2672     'IEM_MC_FPU_STACK_DEC_TOP':                                  McBlock.parseMcGeneric,
    2673     'IEM_MC_FPU_STACK_FREE':                                     McBlock.parseMcGeneric,
    2674     'IEM_MC_FPU_STACK_INC_TOP':                                  McBlock.parseMcGeneric,
    2675     'IEM_MC_FPU_STACK_PUSH_OVERFLOW':                            McBlock.parseMcGeneric,
    2676     'IEM_MC_FPU_STACK_PUSH_OVERFLOW_MEM_OP':                     McBlock.parseMcGeneric,
    2677     'IEM_MC_FPU_STACK_PUSH_UNDERFLOW':                           McBlock.parseMcGeneric,
    2678     'IEM_MC_FPU_STACK_PUSH_UNDERFLOW_TWO':                       McBlock.parseMcGeneric,
    2679     'IEM_MC_FPU_STACK_UNDERFLOW':                                McBlock.parseMcGeneric,
    2680     'IEM_MC_FPU_STACK_UNDERFLOW_MEM_OP':                         McBlock.parseMcGeneric,
    2681     'IEM_MC_FPU_STACK_UNDERFLOW_MEM_OP_THEN_POP':                McBlock.parseMcGeneric,
    2682     'IEM_MC_FPU_STACK_UNDERFLOW_THEN_POP':                       McBlock.parseMcGeneric,
    2683     'IEM_MC_FPU_STACK_UNDERFLOW_THEN_POP_POP':                   McBlock.parseMcGeneric,
    2684     'IEM_MC_FPU_TO_MMX_MODE':                                    McBlock.parseMcGeneric,
    2685     'IEM_MC_IF_CX_IS_NZ':                                        McBlock.parseMcGenericCond,
    2686     'IEM_MC_IF_CX_IS_NZ_AND_EFL_BIT_NOT_SET':                    McBlock.parseMcGenericCond,
    2687     'IEM_MC_IF_CX_IS_NZ_AND_EFL_BIT_SET':                        McBlock.parseMcGenericCond,
    2688     'IEM_MC_IF_ECX_IS_NZ':                                       McBlock.parseMcGenericCond,
    2689     'IEM_MC_IF_ECX_IS_NZ_AND_EFL_BIT_NOT_SET':                   McBlock.parseMcGenericCond,
    2690     'IEM_MC_IF_ECX_IS_NZ_AND_EFL_BIT_SET':                       McBlock.parseMcGenericCond,
    2691     'IEM_MC_IF_EFL_ANY_BITS_SET':                                McBlock.parseMcGenericCond,
    2692     'IEM_MC_IF_EFL_BIT_NOT_SET':                                 McBlock.parseMcGenericCond,
    2693     'IEM_MC_IF_EFL_BIT_NOT_SET_AND_BITS_EQ':                     McBlock.parseMcGenericCond,
    2694     'IEM_MC_IF_EFL_BIT_SET':                                     McBlock.parseMcGenericCond,
    2695     'IEM_MC_IF_EFL_BIT_SET_OR_BITS_NE':                          McBlock.parseMcGenericCond,
    2696     'IEM_MC_IF_EFL_BITS_EQ':                                     McBlock.parseMcGenericCond,
    2697     'IEM_MC_IF_EFL_BITS_NE':                                     McBlock.parseMcGenericCond,
    2698     'IEM_MC_IF_EFL_NO_BITS_SET':                                 McBlock.parseMcGenericCond,
    2699     'IEM_MC_IF_FCW_IM':                                          McBlock.parseMcGenericCond,
    2700     'IEM_MC_IF_FPUREG_IS_EMPTY':                                 McBlock.parseMcGenericCond,
    2701     'IEM_MC_IF_FPUREG_NOT_EMPTY':                                McBlock.parseMcGenericCond,
    2702     'IEM_MC_IF_FPUREG_NOT_EMPTY_REF_R80':                        McBlock.parseMcGenericCond,
    2703     'IEM_MC_IF_GREG_BIT_SET':                                    McBlock.parseMcGenericCond,
    2704     'IEM_MC_IF_LOCAL_IS_Z':                                      McBlock.parseMcGenericCond,
    2705     'IEM_MC_IF_MXCSR_XCPT_PENDING':                              McBlock.parseMcGenericCond,
    2706     'IEM_MC_IF_RCX_IS_NZ':                                       McBlock.parseMcGenericCond,
    2707     'IEM_MC_IF_RCX_IS_NZ_AND_EFL_BIT_NOT_SET':                   McBlock.parseMcGenericCond,
    2708     'IEM_MC_IF_RCX_IS_NZ_AND_EFL_BIT_SET':                       McBlock.parseMcGenericCond,
    2709     'IEM_MC_IF_TWO_FPUREGS_NOT_EMPTY_REF_R80':                   McBlock.parseMcGenericCond,
    2710     'IEM_MC_IF_TWO_FPUREGS_NOT_EMPTY_REF_R80_FIRST':             McBlock.parseMcGenericCond,
    2711     'IEM_MC_IMPLICIT_AVX_AIMPL_ARGS':                            McBlock.parseMcGeneric,
    2712     'IEM_MC_INT_CLEAR_ZMM_256_UP':                               McBlock.parseMcGeneric,
    2713     'IEM_MC_LOCAL':                                              McBlock.parseMcLocal,
    2714     'IEM_MC_LOCAL_CONST':                                        McBlock.parseMcLocalConst,
    2715     'IEM_MC_MAYBE_RAISE_AVX_RELATED_XCPT':                       McBlock.parseMcGeneric,
    2716     'IEM_MC_MAYBE_RAISE_DEVICE_NOT_AVAILABLE':                   McBlock.parseMcGeneric,
    2717     'IEM_MC_MAYBE_RAISE_FPU_XCPT':                               McBlock.parseMcGeneric,
    2718     'IEM_MC_MAYBE_RAISE_FSGSBASE_XCPT':                          McBlock.parseMcGeneric,
    2719     'IEM_MC_MAYBE_RAISE_MMX_RELATED_XCPT':                       McBlock.parseMcGeneric,
    2720     'IEM_MC_MAYBE_RAISE_NON_CANONICAL_ADDR_GP0':                 McBlock.parseMcGeneric,
    2721     'IEM_MC_MAYBE_RAISE_SSE_AVX_SIMD_FP_OR_UD_XCPT':             McBlock.parseMcGeneric,
    2722     'IEM_MC_MAYBE_RAISE_SSE_RELATED_XCPT':                       McBlock.parseMcGeneric,
    2723     'IEM_MC_MAYBE_RAISE_WAIT_DEVICE_NOT_AVAILABLE':              McBlock.parseMcGeneric,
    2724     'IEM_MC_MEM_COMMIT_AND_UNMAP':                               McBlock.parseMcGeneric,
    2725     'IEM_MC_MEM_COMMIT_AND_UNMAP_FOR_FPU_STORE':                 McBlock.parseMcGeneric,
    2726     'IEM_MC_MEM_MAP':                                            McBlock.parseMcGeneric,
    2727     'IEM_MC_MEM_MAP_EX':                                         McBlock.parseMcGeneric,
    2728     'IEM_MC_MERGE_YREG_U32_U96_ZX_VLMAX':                        McBlock.parseMcGeneric,
    2729     'IEM_MC_MERGE_YREG_U64_U64_ZX_VLMAX':                        McBlock.parseMcGeneric,
    2730     'IEM_MC_MERGE_YREG_U64HI_U64HI_ZX_VLMAX':                    McBlock.parseMcGeneric,
    2731     'IEM_MC_MERGE_YREG_U64LO_U64LO_ZX_VLMAX':                    McBlock.parseMcGeneric,
    2732     'IEM_MC_MERGE_YREG_U64LO_U64LOCAL_ZX_VLMAX':                 McBlock.parseMcGeneric,
    2733     'IEM_MC_MERGE_YREG_U64LOCAL_U64HI_ZX_VLMAX':                 McBlock.parseMcGeneric,
    2734     'IEM_MC_MODIFIED_MREG':                                      McBlock.parseMcGeneric,
    2735     'IEM_MC_MODIFIED_MREG_BY_REF':                               McBlock.parseMcGeneric,
    2736     'IEM_MC_OR_2LOCS_U32':                                       McBlock.parseMcGeneric,
    2737     'IEM_MC_OR_GREG_U16':                                        McBlock.parseMcGeneric,
    2738     'IEM_MC_OR_GREG_U32':                                        McBlock.parseMcGeneric,
    2739     'IEM_MC_OR_GREG_U64':                                        McBlock.parseMcGeneric,
    2740     'IEM_MC_OR_GREG_U8':                                         McBlock.parseMcGeneric,
    2741     'IEM_MC_OR_LOCAL_U16':                                       McBlock.parseMcGeneric,
    2742     'IEM_MC_OR_LOCAL_U32':                                       McBlock.parseMcGeneric,
    2743     'IEM_MC_OR_LOCAL_U8':                                        McBlock.parseMcGeneric,
    2744     'IEM_MC_POP_U16':                                            McBlock.parseMcGeneric,
    2745     'IEM_MC_POP_U32':                                            McBlock.parseMcGeneric,
    2746     'IEM_MC_POP_U64':                                            McBlock.parseMcGeneric,
    2747     'IEM_MC_PREPARE_AVX_USAGE':                                  McBlock.parseMcGeneric,
    2748     'IEM_MC_PREPARE_FPU_USAGE':                                  McBlock.parseMcGeneric,
    2749     'IEM_MC_PREPARE_SSE_USAGE':                                  McBlock.parseMcGeneric,
    2750     'IEM_MC_PUSH_FPU_RESULT':                                    McBlock.parseMcGeneric,
    2751     'IEM_MC_PUSH_FPU_RESULT_MEM_OP':                             McBlock.parseMcGeneric,
    2752     'IEM_MC_PUSH_FPU_RESULT_TWO':                                McBlock.parseMcGeneric,
    2753     'IEM_MC_PUSH_U16':                                           McBlock.parseMcGeneric,
    2754     'IEM_MC_PUSH_U32':                                           McBlock.parseMcGeneric,
    2755     'IEM_MC_PUSH_U32_SREG':                                      McBlock.parseMcGeneric,
    2756     'IEM_MC_PUSH_U64':                                           McBlock.parseMcGeneric,
    2757     'IEM_MC_RAISE_DIVIDE_ERROR':                                 McBlock.parseMcGeneric,
    2758     'IEM_MC_RAISE_GP0_IF_CPL_NOT_ZERO':                          McBlock.parseMcGeneric,
    2759     'IEM_MC_RAISE_GP0_IF_EFF_ADDR_UNALIGNED':                    McBlock.parseMcGeneric,
    2760     'IEM_MC_RAISE_SSE_AVX_SIMD_FP_OR_UD_XCPT':                   McBlock.parseMcGeneric,
    2761     'IEM_MC_REF_EFLAGS':                                         McBlock.parseMcGeneric,
    2762     'IEM_MC_REF_FPUREG':                                         McBlock.parseMcGeneric,
    2763     'IEM_MC_REF_GREG_I32':                                       McBlock.parseMcGeneric,
    2764     'IEM_MC_REF_GREG_I32_CONST':                                 McBlock.parseMcGeneric,
    2765     'IEM_MC_REF_GREG_I64':                                       McBlock.parseMcGeneric,
    2766     'IEM_MC_REF_GREG_I64_CONST':                                 McBlock.parseMcGeneric,
    2767     'IEM_MC_REF_GREG_U16':                                       McBlock.parseMcGeneric,
    2768     'IEM_MC_REF_GREG_U32':                                       McBlock.parseMcGeneric,
    2769     'IEM_MC_REF_GREG_U64':                                       McBlock.parseMcGeneric,
    2770     'IEM_MC_REF_GREG_U8':                                        McBlock.parseMcGeneric,
    2771     'IEM_MC_REF_LOCAL':                                          McBlock.parseMcGeneric,
    2772     'IEM_MC_REF_MREG_U32_CONST':                                 McBlock.parseMcGeneric,
    2773     'IEM_MC_REF_MREG_U64':                                       McBlock.parseMcGeneric,
    2774     'IEM_MC_REF_MREG_U64_CONST':                                 McBlock.parseMcGeneric,
    2775     'IEM_MC_REF_MXCSR':                                          McBlock.parseMcGeneric,
    2776     'IEM_MC_REF_XREG_R32_CONST':                                 McBlock.parseMcGeneric,
    2777     'IEM_MC_REF_XREG_R64_CONST':                                 McBlock.parseMcGeneric,
    2778     'IEM_MC_REF_XREG_U128':                                      McBlock.parseMcGeneric,
    2779     'IEM_MC_REF_XREG_U128_CONST':                                McBlock.parseMcGeneric,
    2780     'IEM_MC_REF_XREG_U32_CONST':                                 McBlock.parseMcGeneric,
    2781     'IEM_MC_REF_XREG_U64_CONST':                                 McBlock.parseMcGeneric,
    2782     'IEM_MC_REF_XREG_XMM_CONST':                                 McBlock.parseMcGeneric,
    2783     'IEM_MC_REF_YREG_U128':                                      McBlock.parseMcGeneric,
    2784     'IEM_MC_REF_YREG_U128_CONST':                                McBlock.parseMcGeneric,
    2785     'IEM_MC_REF_YREG_U64_CONST':                                 McBlock.parseMcGeneric,
    2786     'IEM_MC_REL_JMP_S16_AND_FINISH':                             McBlock.parseMcGeneric,
    2787     'IEM_MC_REL_JMP_S32_AND_FINISH':                             McBlock.parseMcGeneric,
    2788     'IEM_MC_REL_JMP_S8_AND_FINISH':                              McBlock.parseMcGeneric,
    2789     'IEM_MC_RETURN_ON_FAILURE':                                  McBlock.parseMcGeneric,
    2790     'IEM_MC_SAR_LOCAL_S16':                                      McBlock.parseMcGeneric,
    2791     'IEM_MC_SAR_LOCAL_S32':                                      McBlock.parseMcGeneric,
    2792     'IEM_MC_SAR_LOCAL_S64':                                      McBlock.parseMcGeneric,
    2793     'IEM_MC_SET_EFL_BIT':                                        McBlock.parseMcGeneric,
    2794     'IEM_MC_SET_FPU_RESULT':                                     McBlock.parseMcGeneric,
    2795     'IEM_MC_SET_RIP_U16_AND_FINISH':                             McBlock.parseMcGeneric,
    2796     'IEM_MC_SET_RIP_U32_AND_FINISH':                             McBlock.parseMcGeneric,
    2797     'IEM_MC_SET_RIP_U64_AND_FINISH':                             McBlock.parseMcGeneric,
    2798     'IEM_MC_SHL_LOCAL_S16':                                      McBlock.parseMcGeneric,
    2799     'IEM_MC_SHL_LOCAL_S32':                                      McBlock.parseMcGeneric,
    2800     'IEM_MC_SHL_LOCAL_S64':                                      McBlock.parseMcGeneric,
    2801     'IEM_MC_SHR_LOCAL_U8':                                       McBlock.parseMcGeneric,
    2802     'IEM_MC_SSE_UPDATE_MXCSR':                                   McBlock.parseMcGeneric,
    2803     'IEM_MC_STORE_FPU_RESULT':                                   McBlock.parseMcGeneric,
    2804     'IEM_MC_STORE_FPU_RESULT_MEM_OP':                            McBlock.parseMcGeneric,
    2805     'IEM_MC_STORE_FPU_RESULT_THEN_POP':                          McBlock.parseMcGeneric,
    2806     'IEM_MC_STORE_FPU_RESULT_WITH_MEM_OP_THEN_POP':              McBlock.parseMcGeneric,
    2807     'IEM_MC_STORE_FPUREG_R80_SRC_REF':                           McBlock.parseMcGeneric,
    2808     'IEM_MC_STORE_GREG_I64':                                     McBlock.parseMcGeneric,
    2809     'IEM_MC_STORE_GREG_U16':                                     McBlock.parseMcGeneric,
    2810     'IEM_MC_STORE_GREG_U16_CONST':                               McBlock.parseMcGeneric,
    2811     'IEM_MC_STORE_GREG_U32':                                     McBlock.parseMcGeneric,
    2812     'IEM_MC_STORE_GREG_U32_CONST':                               McBlock.parseMcGeneric,
    2813     'IEM_MC_STORE_GREG_U64':                                     McBlock.parseMcGeneric,
    2814     'IEM_MC_STORE_GREG_U64_CONST':                               McBlock.parseMcGeneric,
    2815     'IEM_MC_STORE_GREG_U8':                                      McBlock.parseMcGeneric,
    2816     'IEM_MC_STORE_GREG_U8_CONST':                                McBlock.parseMcGeneric,
    2817     'IEM_MC_STORE_MEM_I16_CONST_BY_REF':                         McBlock.parseMcGeneric,
    2818     'IEM_MC_STORE_MEM_I32_CONST_BY_REF':                         McBlock.parseMcGeneric,
    2819     'IEM_MC_STORE_MEM_I64_CONST_BY_REF':                         McBlock.parseMcGeneric,
    2820     'IEM_MC_STORE_MEM_I8_CONST_BY_REF':                          McBlock.parseMcGeneric,
    2821     'IEM_MC_STORE_MEM_INDEF_D80_BY_REF':                         McBlock.parseMcGeneric,
    2822     'IEM_MC_STORE_MEM_NEG_QNAN_R32_BY_REF':                      McBlock.parseMcGeneric,
    2823     'IEM_MC_STORE_MEM_NEG_QNAN_R64_BY_REF':                      McBlock.parseMcGeneric,
    2824     'IEM_MC_STORE_MEM_NEG_QNAN_R80_BY_REF':                      McBlock.parseMcGeneric,
    2825     'IEM_MC_STORE_MEM_U128':                                     McBlock.parseMcGeneric,
    2826     'IEM_MC_STORE_MEM_U128_ALIGN_SSE':                           McBlock.parseMcGeneric,
    2827     'IEM_MC_STORE_MEM_U16':                                      McBlock.parseMcGeneric,
    2828     'IEM_MC_STORE_MEM_U16_CONST':                                McBlock.parseMcGeneric,
    2829     'IEM_MC_STORE_MEM_U256':                                     McBlock.parseMcGeneric,
    2830     'IEM_MC_STORE_MEM_U256_ALIGN_AVX':                           McBlock.parseMcGeneric,
    2831     'IEM_MC_STORE_MEM_U32':                                      McBlock.parseMcGeneric,
    2832     'IEM_MC_STORE_MEM_U32_CONST':                                McBlock.parseMcGeneric,
    2833     'IEM_MC_STORE_MEM_U64':                                      McBlock.parseMcGeneric,
    2834     'IEM_MC_STORE_MEM_U64_CONST':                                McBlock.parseMcGeneric,
    2835     'IEM_MC_STORE_MEM_U8':                                       McBlock.parseMcGeneric,
    2836     'IEM_MC_STORE_MEM_U8_CONST':                                 McBlock.parseMcGeneric,
    2837     'IEM_MC_STORE_MREG_U32_ZX_U64':                              McBlock.parseMcGeneric,
    2838     'IEM_MC_STORE_MREG_U64':                                     McBlock.parseMcGeneric,
    2839     'IEM_MC_STORE_SREG_BASE_U32':                                McBlock.parseMcGeneric,
    2840     'IEM_MC_STORE_SREG_BASE_U64':                                McBlock.parseMcGeneric,
    2841     'IEM_MC_STORE_SSE_RESULT':                                   McBlock.parseMcGeneric,
    2842     'IEM_MC_STORE_XREG_HI_U64':                                  McBlock.parseMcGeneric,
    2843     'IEM_MC_STORE_XREG_R32':                                     McBlock.parseMcGeneric,
    2844     'IEM_MC_STORE_XREG_R64':                                     McBlock.parseMcGeneric,
    2845     'IEM_MC_STORE_XREG_U128':                                    McBlock.parseMcGeneric,
    2846     'IEM_MC_STORE_XREG_U16':                                     McBlock.parseMcGeneric,
    2847     'IEM_MC_STORE_XREG_U32':                                     McBlock.parseMcGeneric,
    2848     'IEM_MC_STORE_XREG_U32_U128':                                McBlock.parseMcGeneric,
    2849     'IEM_MC_STORE_XREG_U32_ZX_U128':                             McBlock.parseMcGeneric,
    2850     'IEM_MC_STORE_XREG_U64':                                     McBlock.parseMcGeneric,
    2851     'IEM_MC_STORE_XREG_U64_ZX_U128':                             McBlock.parseMcGeneric,
    2852     'IEM_MC_STORE_XREG_U8':                                      McBlock.parseMcGeneric,
    2853     'IEM_MC_STORE_XREG_XMM':                                     McBlock.parseMcGeneric,
    2854     'IEM_MC_STORE_XREG_XMM_U32':                                 McBlock.parseMcGeneric,
    2855     'IEM_MC_STORE_XREG_XMM_U64':                                 McBlock.parseMcGeneric,
    2856     'IEM_MC_STORE_YREG_U128':                                    McBlock.parseMcGeneric,
    2857     'IEM_MC_STORE_YREG_U128_ZX_VLMAX':                           McBlock.parseMcGeneric,
    2858     'IEM_MC_STORE_YREG_U256_ZX_VLMAX':                           McBlock.parseMcGeneric,
    2859     'IEM_MC_STORE_YREG_U32_ZX_VLMAX':                            McBlock.parseMcGeneric,
    2860     'IEM_MC_STORE_YREG_U64_ZX_VLMAX':                            McBlock.parseMcGeneric,
    2861     'IEM_MC_SUB_GREG_U16':                                       McBlock.parseMcGeneric,
    2862     'IEM_MC_SUB_GREG_U32':                                       McBlock.parseMcGeneric,
    2863     'IEM_MC_SUB_GREG_U64':                                       McBlock.parseMcGeneric,
    2864     'IEM_MC_SUB_GREG_U8':                                        McBlock.parseMcGeneric,
    2865     'IEM_MC_SUB_LOCAL_U16':                                      McBlock.parseMcGeneric,
    2866     'IEM_MC_UPDATE_FPU_OPCODE_IP':                               McBlock.parseMcGeneric,
    2867     'IEM_MC_UPDATE_FSW':                                         McBlock.parseMcGeneric,
    2868     'IEM_MC_UPDATE_FSW_CONST':                                   McBlock.parseMcGeneric,
    2869     'IEM_MC_UPDATE_FSW_THEN_POP':                                McBlock.parseMcGeneric,
    2870     'IEM_MC_UPDATE_FSW_THEN_POP_POP':                            McBlock.parseMcGeneric,
    2871     'IEM_MC_UPDATE_FSW_WITH_MEM_OP':                             McBlock.parseMcGeneric,
    2872     'IEM_MC_UPDATE_FSW_WITH_MEM_OP_THEN_POP':                    McBlock.parseMcGeneric,
     2555    'IEM_MC_ACTUALIZE_AVX_STATE_FOR_CHANGE':                     (McBlock.parseMcGeneric,           False),
     2556    'IEM_MC_ACTUALIZE_AVX_STATE_FOR_READ':                       (McBlock.parseMcGeneric,           False),
     2557    'IEM_MC_ACTUALIZE_FPU_STATE_FOR_CHANGE':                     (McBlock.parseMcGeneric,           False),
     2558    'IEM_MC_ACTUALIZE_FPU_STATE_FOR_READ':                       (McBlock.parseMcGeneric,           False),
     2559    'IEM_MC_ACTUALIZE_SSE_STATE_FOR_CHANGE':                     (McBlock.parseMcGeneric,           False),
     2560    'IEM_MC_ACTUALIZE_SSE_STATE_FOR_READ':                       (McBlock.parseMcGeneric,           False),
     2561    'IEM_MC_ADD_GREG_U16':                                       (McBlock.parseMcGeneric,           True),
     2562    'IEM_MC_ADD_GREG_U16_TO_LOCAL':                              (McBlock.parseMcGeneric,           False),
     2563    'IEM_MC_ADD_GREG_U32':                                       (McBlock.parseMcGeneric,           True),
     2564    'IEM_MC_ADD_GREG_U32_TO_LOCAL':                              (McBlock.parseMcGeneric,           False),
     2565    'IEM_MC_ADD_GREG_U64':                                       (McBlock.parseMcGeneric,           True),
     2566    'IEM_MC_ADD_GREG_U64_TO_LOCAL':                              (McBlock.parseMcGeneric,           False),
     2567    'IEM_MC_ADD_GREG_U8':                                        (McBlock.parseMcGeneric,           True),
     2568    'IEM_MC_ADD_GREG_U8_TO_LOCAL':                               (McBlock.parseMcGeneric,           False),
     2569    'IEM_MC_ADD_LOCAL_S16_TO_EFF_ADDR':                          (McBlock.parseMcGeneric,           True),
     2570    'IEM_MC_ADD_LOCAL_S32_TO_EFF_ADDR':                          (McBlock.parseMcGeneric,           True),
     2571    'IEM_MC_ADD_LOCAL_S64_TO_EFF_ADDR':                          (McBlock.parseMcGeneric,           True),
     2572    'IEM_MC_ADVANCE_RIP_AND_FINISH':                             (McBlock.parseMcGeneric,           True),
     2573    'IEM_MC_AND_2LOCS_U32':                                      (McBlock.parseMcGeneric,           False),
     2574    'IEM_MC_AND_ARG_U16':                                        (McBlock.parseMcGeneric,           False),
     2575    'IEM_MC_AND_ARG_U32':                                        (McBlock.parseMcGeneric,           False),
     2576    'IEM_MC_AND_ARG_U64':                                        (McBlock.parseMcGeneric,           False),
     2577    'IEM_MC_AND_GREG_U16':                                       (McBlock.parseMcGeneric,           True),
     2578    'IEM_MC_AND_GREG_U32':                                       (McBlock.parseMcGeneric,           True),
     2579    'IEM_MC_AND_GREG_U64':                                       (McBlock.parseMcGeneric,           True),
     2580    'IEM_MC_AND_GREG_U8':                                        (McBlock.parseMcGeneric,           True),
     2581    'IEM_MC_AND_LOCAL_U16':                                      (McBlock.parseMcGeneric,           False),
     2582    'IEM_MC_AND_LOCAL_U32':                                      (McBlock.parseMcGeneric,           False),
     2583    'IEM_MC_AND_LOCAL_U64':                                      (McBlock.parseMcGeneric,           False),
     2584    'IEM_MC_AND_LOCAL_U8':                                       (McBlock.parseMcGeneric,           False),
     2585    'IEM_MC_ARG':                                                (McBlock.parseMcArg,               False),
     2586    'IEM_MC_ARG_CONST':                                          (McBlock.parseMcArgConst,          False),
     2587    'IEM_MC_ARG_LOCAL_EFLAGS':                                   (McBlock.parseMcArgLocalEFlags,    False),
     2588    'IEM_MC_ARG_LOCAL_REF':                                      (McBlock.parseMcArgLocalRef,       False),
     2589    'IEM_MC_ASSIGN':                                             (McBlock.parseMcGeneric,           False),
     2590    'IEM_MC_ASSIGN_TO_SMALLER':                                  (McBlock.parseMcGeneric,           False),
     2591    'IEM_MC_ASSIGN_U8_SX_U64':                                   (McBlock.parseMcGeneric,           False),
     2592    'IEM_MC_ASSIGN_U32_SX_U64':                                  (McBlock.parseMcGeneric,           False),
     2593    'IEM_MC_BEGIN':                                              (McBlock.parseMcGeneric,           False),
     2594    'IEM_MC_BROADCAST_XREG_U16_ZX_VLMAX':                        (McBlock.parseMcGeneric,           True),
     2595    'IEM_MC_BROADCAST_XREG_U32_ZX_VLMAX':                        (McBlock.parseMcGeneric,           True),
     2596    'IEM_MC_BROADCAST_XREG_U64_ZX_VLMAX':                        (McBlock.parseMcGeneric,           True),
     2597    'IEM_MC_BROADCAST_XREG_U8_ZX_VLMAX':                         (McBlock.parseMcGeneric,           True),
     2598    'IEM_MC_BROADCAST_YREG_U128_ZX_VLMAX':                       (McBlock.parseMcGeneric,           True),
     2599    'IEM_MC_BROADCAST_YREG_U16_ZX_VLMAX':                        (McBlock.parseMcGeneric,           True),
     2600    'IEM_MC_BROADCAST_YREG_U32_ZX_VLMAX':                        (McBlock.parseMcGeneric,           True),
     2601    'IEM_MC_BROADCAST_YREG_U64_ZX_VLMAX':                        (McBlock.parseMcGeneric,           True),
     2602    'IEM_MC_BROADCAST_YREG_U8_ZX_VLMAX':                         (McBlock.parseMcGeneric,           True),
     2603    'IEM_MC_BSWAP_LOCAL_U16':                                    (McBlock.parseMcGeneric,           False),
     2604    'IEM_MC_BSWAP_LOCAL_U32':                                    (McBlock.parseMcGeneric,           False),
     2605    'IEM_MC_BSWAP_LOCAL_U64':                                    (McBlock.parseMcGeneric,           False),
     2606    'IEM_MC_CALC_RM_EFF_ADDR':                                   (McBlock.parseMcGeneric,           False),
     2607    'IEM_MC_CALL_AIMPL_3':                                       (McBlock.parseMcCallAImpl,         True),
     2608    'IEM_MC_CALL_AIMPL_4':                                       (McBlock.parseMcCallAImpl,         True),
     2609    'IEM_MC_CALL_AVX_AIMPL_2':                                   (McBlock.parseMcCallAvxAImpl,      True),
     2610    'IEM_MC_CALL_AVX_AIMPL_3':                                   (McBlock.parseMcCallAvxAImpl,      True),
     2611    'IEM_MC_CALL_CIMPL_0':                                       (McBlock.parseMcCallCImpl,         True),
     2612    'IEM_MC_CALL_CIMPL_1':                                       (McBlock.parseMcCallCImpl,         True),
     2613    'IEM_MC_CALL_CIMPL_2':                                       (McBlock.parseMcCallCImpl,         True),
     2614    'IEM_MC_CALL_CIMPL_3':                                       (McBlock.parseMcCallCImpl,         True),
     2615    'IEM_MC_CALL_CIMPL_4':                                       (McBlock.parseMcCallCImpl,         True),
     2616    'IEM_MC_CALL_CIMPL_5':                                       (McBlock.parseMcCallCImpl,         True),
     2617    'IEM_MC_CALL_FPU_AIMPL_1':                                   (McBlock.parseMcCallFpuAImpl,      True),
     2618    'IEM_MC_CALL_FPU_AIMPL_2':                                   (McBlock.parseMcCallFpuAImpl,      True),
     2619    'IEM_MC_CALL_FPU_AIMPL_3':                                   (McBlock.parseMcCallFpuAImpl,      True),
     2620    'IEM_MC_CALL_MMX_AIMPL_2':                                   (McBlock.parseMcCallMmxAImpl,      True),
     2621    'IEM_MC_CALL_MMX_AIMPL_3':                                   (McBlock.parseMcCallMmxAImpl,      True),
     2622    'IEM_MC_CALL_SSE_AIMPL_2':                                   (McBlock.parseMcCallSseAImpl,      True),
     2623    'IEM_MC_CALL_SSE_AIMPL_3':                                   (McBlock.parseMcCallSseAImpl,      True),
     2624    'IEM_MC_CALL_VOID_AIMPL_0':                                  (McBlock.parseMcCallVoidAImpl,     True),
     2625    'IEM_MC_CALL_VOID_AIMPL_1':                                  (McBlock.parseMcCallVoidAImpl,     True),
     2626    'IEM_MC_CALL_VOID_AIMPL_2':                                  (McBlock.parseMcCallVoidAImpl,     True),
     2627    'IEM_MC_CALL_VOID_AIMPL_3':                                  (McBlock.parseMcCallVoidAImpl,     True),
     2628    'IEM_MC_CALL_VOID_AIMPL_4':                                  (McBlock.parseMcCallVoidAImpl,     True),
     2629    'IEM_MC_CLEAR_EFL_BIT':                                      (McBlock.parseMcGeneric,           True),
     2630    'IEM_MC_CLEAR_FSW_EX':                                       (McBlock.parseMcGeneric,           True),
     2631    'IEM_MC_CLEAR_HIGH_GREG_U64':                                (McBlock.parseMcGeneric,           True),
     2632    'IEM_MC_CLEAR_HIGH_GREG_U64_BY_REF':                         (McBlock.parseMcGeneric,           True),
     2633    'IEM_MC_CLEAR_XREG_U32_MASK':                                (McBlock.parseMcGeneric,           True),
     2634    'IEM_MC_CLEAR_YREG_128_UP':                                  (McBlock.parseMcGeneric,           True),
     2635    'IEM_MC_COMMIT_EFLAGS':                                      (McBlock.parseMcGeneric,           True),
     2636    'IEM_MC_COPY_XREG_U128':                                     (McBlock.parseMcGeneric,           True),
     2637    'IEM_MC_COPY_YREG_U128_ZX_VLMAX':                            (McBlock.parseMcGeneric,           True),
     2638    'IEM_MC_COPY_YREG_U256_ZX_VLMAX':                            (McBlock.parseMcGeneric,           True),
     2639    'IEM_MC_COPY_YREG_U64_ZX_VLMAX':                             (McBlock.parseMcGeneric,           True),
     2640    'IEM_MC_DEFER_TO_CIMPL_0_RET':                               (McBlock.parseMcGeneric,           False),
     2641    'IEM_MC_DEFER_TO_CIMPL_1_RET':                               (McBlock.parseMcGeneric,           False),
     2642    'IEM_MC_DEFER_TO_CIMPL_2_RET':                               (McBlock.parseMcGeneric,           False),
     2643    'IEM_MC_DEFER_TO_CIMPL_3_RET':                               (McBlock.parseMcGeneric,           False),
     2644    'IEM_MC_END':                                                (McBlock.parseMcGeneric,           True),
     2645    'IEM_MC_FETCH_EFLAGS':                                       (McBlock.parseMcGeneric,           False),
     2646    'IEM_MC_FETCH_EFLAGS_U8':                                    (McBlock.parseMcGeneric,           False),
     2647    'IEM_MC_FETCH_FCW':                                          (McBlock.parseMcGeneric,           False),
     2648    'IEM_MC_FETCH_FSW':                                          (McBlock.parseMcGeneric,           False),
     2649    'IEM_MC_FETCH_GREG_U16':                                     (McBlock.parseMcGeneric,           False),
     2650    'IEM_MC_FETCH_GREG_U16_SX_U32':                              (McBlock.parseMcGeneric,           False),
     2651    'IEM_MC_FETCH_GREG_U16_SX_U64':                              (McBlock.parseMcGeneric,           False),
     2652    'IEM_MC_FETCH_GREG_U16_ZX_U32':                              (McBlock.parseMcGeneric,           False),
     2653    'IEM_MC_FETCH_GREG_U16_ZX_U64':                              (McBlock.parseMcGeneric,           False),
     2654    'IEM_MC_FETCH_GREG_U32':                                     (McBlock.parseMcGeneric,           False),
     2655    'IEM_MC_FETCH_GREG_U32_SX_U64':                              (McBlock.parseMcGeneric,           False),
     2656    'IEM_MC_FETCH_GREG_U32_ZX_U64':                              (McBlock.parseMcGeneric,           False),
     2657    'IEM_MC_FETCH_GREG_U64':                                     (McBlock.parseMcGeneric,           False),
     2658    'IEM_MC_FETCH_GREG_U64_ZX_U64':                              (McBlock.parseMcGeneric,           False),
     2659    'IEM_MC_FETCH_GREG_U8':                                      (McBlock.parseMcGeneric,           False),
     2660    'IEM_MC_FETCH_GREG_U8_SX_U16':                               (McBlock.parseMcGeneric,           False),
     2661    'IEM_MC_FETCH_GREG_U8_SX_U32':                               (McBlock.parseMcGeneric,           False),
     2662    'IEM_MC_FETCH_GREG_U8_SX_U64':                               (McBlock.parseMcGeneric,           False),
     2663    'IEM_MC_FETCH_GREG_U8_ZX_U16':                               (McBlock.parseMcGeneric,           False),
     2664    'IEM_MC_FETCH_GREG_U8_ZX_U32':                               (McBlock.parseMcGeneric,           False),
     2665    'IEM_MC_FETCH_GREG_U8_ZX_U64':                               (McBlock.parseMcGeneric,           False),
     2666    'IEM_MC_FETCH_MEM_D80':                                      (McBlock.parseMcGeneric,           True),
     2667    'IEM_MC_FETCH_MEM_I16':                                      (McBlock.parseMcGeneric,           True),
     2668    'IEM_MC_FETCH_MEM_I32':                                      (McBlock.parseMcGeneric,           True),
     2669    'IEM_MC_FETCH_MEM_I64':                                      (McBlock.parseMcGeneric,           True),
     2670    'IEM_MC_FETCH_MEM_R32':                                      (McBlock.parseMcGeneric,           True),
     2671    'IEM_MC_FETCH_MEM_R64':                                      (McBlock.parseMcGeneric,           True),
     2672    'IEM_MC_FETCH_MEM_R80':                                      (McBlock.parseMcGeneric,           True),
     2673    'IEM_MC_FETCH_MEM_S32_SX_U64':                               (McBlock.parseMcGeneric,           True),
     2674    'IEM_MC_FETCH_MEM_U128':                                     (McBlock.parseMcGeneric,           True),
     2675    'IEM_MC_FETCH_MEM_U128_ALIGN_SSE':                           (McBlock.parseMcGeneric,           True),
     2676    'IEM_MC_FETCH_MEM_U128_NO_AC':                               (McBlock.parseMcGeneric,           True),
     2677    'IEM_MC_FETCH_MEM_U16':                                      (McBlock.parseMcGeneric,           True),
     2678    'IEM_MC_FETCH_MEM_U16_DISP':                                 (McBlock.parseMcGeneric,           True),
     2679    'IEM_MC_FETCH_MEM_U16_SX_U32':                               (McBlock.parseMcGeneric,           True),
     2680    'IEM_MC_FETCH_MEM_U16_SX_U64':                               (McBlock.parseMcGeneric,           True),
     2681    'IEM_MC_FETCH_MEM_U16_ZX_U32':                               (McBlock.parseMcGeneric,           True),
     2682    'IEM_MC_FETCH_MEM_U16_ZX_U64':                               (McBlock.parseMcGeneric,           True),
     2683    'IEM_MC_FETCH_MEM_U256':                                     (McBlock.parseMcGeneric,           True),
     2684    'IEM_MC_FETCH_MEM_U256_ALIGN_AVX':                           (McBlock.parseMcGeneric,           True),
     2685    'IEM_MC_FETCH_MEM_U256_NO_AC':                               (McBlock.parseMcGeneric,           True),
     2686    'IEM_MC_FETCH_MEM_U32':                                      (McBlock.parseMcGeneric,           True),
     2687    'IEM_MC_FETCH_MEM_U32_DISP':                                 (McBlock.parseMcGeneric,           True),
     2688    'IEM_MC_FETCH_MEM_U32_SX_U64':                               (McBlock.parseMcGeneric,           True),
     2689    'IEM_MC_FETCH_MEM_U32_ZX_U64':                               (McBlock.parseMcGeneric,           True),
     2690    'IEM_MC_FETCH_MEM_U64':                                      (McBlock.parseMcGeneric,           True),
     2691    'IEM_MC_FETCH_MEM_U64_ALIGN_U128':                           (McBlock.parseMcGeneric,           True),
     2692    'IEM_MC_FETCH_MEM_U64_DISP':                                 (McBlock.parseMcGeneric,           True),
     2693    'IEM_MC_FETCH_MEM_U8':                                       (McBlock.parseMcGeneric,           True),
     2694    'IEM_MC_FETCH_MEM_U8_SX_U16':                                (McBlock.parseMcGeneric,           True),
     2695    'IEM_MC_FETCH_MEM_U8_SX_U32':                                (McBlock.parseMcGeneric,           True),
     2696    'IEM_MC_FETCH_MEM_U8_SX_U64':                                (McBlock.parseMcGeneric,           True),
     2697    'IEM_MC_FETCH_MEM_U8_ZX_U16':                                (McBlock.parseMcGeneric,           True),
     2698    'IEM_MC_FETCH_MEM_U8_ZX_U32':                                (McBlock.parseMcGeneric,           True),
     2699    'IEM_MC_FETCH_MEM_U8_ZX_U64':                                (McBlock.parseMcGeneric,           True),
     2700    'IEM_MC_FETCH_MEM_XMM':                                      (McBlock.parseMcGeneric,           True),
     2701    'IEM_MC_FETCH_MEM_XMM_ALIGN_SSE':                            (McBlock.parseMcGeneric,           True),
     2702    'IEM_MC_FETCH_MEM_XMM_NO_AC':                                (McBlock.parseMcGeneric,           True),
     2703    'IEM_MC_FETCH_MEM_XMM_U32':                                  (McBlock.parseMcGeneric,           True),
     2704    'IEM_MC_FETCH_MEM_XMM_U64':                                  (McBlock.parseMcGeneric,           True),
     2705    'IEM_MC_FETCH_MEM_YMM':                                      (McBlock.parseMcGeneric,           True),
     2706    'IEM_MC_FETCH_MEM_YMM_ALIGN_AVX':                            (McBlock.parseMcGeneric,           True),
     2707    'IEM_MC_FETCH_MEM_YMM_NO_AC':                                (McBlock.parseMcGeneric,           True),
     2708    'IEM_MC_FETCH_MEM16_U8':                                     (McBlock.parseMcGeneric,           True),
     2709    'IEM_MC_FETCH_MEM32_U8':                                     (McBlock.parseMcGeneric,           True),
     2710    'IEM_MC_FETCH_MREG_U32':                                     (McBlock.parseMcGeneric,           False),
     2711    'IEM_MC_FETCH_MREG_U64':                                     (McBlock.parseMcGeneric,           False),
     2712    'IEM_MC_FETCH_SREG_BASE_U32':                                (McBlock.parseMcGeneric,           False),
     2713    'IEM_MC_FETCH_SREG_BASE_U64':                                (McBlock.parseMcGeneric,           False),
     2714    'IEM_MC_FETCH_SREG_U16':                                     (McBlock.parseMcGeneric,           False),
     2715    'IEM_MC_FETCH_SREG_ZX_U32':                                  (McBlock.parseMcGeneric,           False),
     2716    'IEM_MC_FETCH_SREG_ZX_U64':                                  (McBlock.parseMcGeneric,           False),
     2717    'IEM_MC_FETCH_XREG_U128':                                    (McBlock.parseMcGeneric,           False),
     2718    'IEM_MC_FETCH_XREG_U16':                                     (McBlock.parseMcGeneric,           False),
     2719    'IEM_MC_FETCH_XREG_U32':                                     (McBlock.parseMcGeneric,           False),
     2720    'IEM_MC_FETCH_XREG_U64':                                     (McBlock.parseMcGeneric,           False),
     2721    'IEM_MC_FETCH_XREG_U8':                                      (McBlock.parseMcGeneric,           False),
     2722    'IEM_MC_FETCH_XREG_XMM':                                     (McBlock.parseMcGeneric,           False),
     2723    'IEM_MC_FETCH_YREG_2ND_U64':                                 (McBlock.parseMcGeneric,           False),
     2724    'IEM_MC_FETCH_YREG_U128':                                    (McBlock.parseMcGeneric,           False),
     2725    'IEM_MC_FETCH_YREG_U256':                                    (McBlock.parseMcGeneric,           False),
     2726    'IEM_MC_FETCH_YREG_U32':                                     (McBlock.parseMcGeneric,           False),
     2727    'IEM_MC_FETCH_YREG_U64':                                     (McBlock.parseMcGeneric,           False),
     2728    'IEM_MC_FLIP_EFL_BIT':                                       (McBlock.parseMcGeneric,           True),
     2729    'IEM_MC_FPU_FROM_MMX_MODE':                                  (McBlock.parseMcGeneric,           True),
     2730    'IEM_MC_FPU_STACK_DEC_TOP':                                  (McBlock.parseMcGeneric,           True),
     2731    'IEM_MC_FPU_STACK_FREE':                                     (McBlock.parseMcGeneric,           True),
     2732    'IEM_MC_FPU_STACK_INC_TOP':                                  (McBlock.parseMcGeneric,           True),
     2733    'IEM_MC_FPU_STACK_PUSH_OVERFLOW':                            (McBlock.parseMcGeneric,           True),
     2734    'IEM_MC_FPU_STACK_PUSH_OVERFLOW_MEM_OP':                     (McBlock.parseMcGeneric,           True),
     2735    'IEM_MC_FPU_STACK_PUSH_UNDERFLOW':                           (McBlock.parseMcGeneric,           True),
     2736    'IEM_MC_FPU_STACK_PUSH_UNDERFLOW_TWO':                       (McBlock.parseMcGeneric,           True),
     2737    'IEM_MC_FPU_STACK_UNDERFLOW':                                (McBlock.parseMcGeneric,           True),
     2738    'IEM_MC_FPU_STACK_UNDERFLOW_MEM_OP':                         (McBlock.parseMcGeneric,           True),
     2739    'IEM_MC_FPU_STACK_UNDERFLOW_MEM_OP_THEN_POP':                (McBlock.parseMcGeneric,           True),
     2740    'IEM_MC_FPU_STACK_UNDERFLOW_THEN_POP':                       (McBlock.parseMcGeneric,           True),
     2741    'IEM_MC_FPU_STACK_UNDERFLOW_THEN_POP_POP':                   (McBlock.parseMcGeneric,           True),
     2742    'IEM_MC_FPU_TO_MMX_MODE':                                    (McBlock.parseMcGeneric,           True),
     2743    'IEM_MC_IF_CX_IS_NZ':                                        (McBlock.parseMcGenericCond,       True),
     2744    'IEM_MC_IF_CX_IS_NZ_AND_EFL_BIT_NOT_SET':                    (McBlock.parseMcGenericCond,       True),
     2745    'IEM_MC_IF_CX_IS_NZ_AND_EFL_BIT_SET':                        (McBlock.parseMcGenericCond,       True),
     2746    'IEM_MC_IF_ECX_IS_NZ':                                       (McBlock.parseMcGenericCond,       True),
     2747    'IEM_MC_IF_ECX_IS_NZ_AND_EFL_BIT_NOT_SET':                   (McBlock.parseMcGenericCond,       True),
     2748    'IEM_MC_IF_ECX_IS_NZ_AND_EFL_BIT_SET':                       (McBlock.parseMcGenericCond,       True),
     2749    'IEM_MC_IF_EFL_ANY_BITS_SET':                                (McBlock.parseMcGenericCond,       True),
     2750    'IEM_MC_IF_EFL_BIT_NOT_SET':                                 (McBlock.parseMcGenericCond,       True),
     2751    'IEM_MC_IF_EFL_BIT_NOT_SET_AND_BITS_EQ':                     (McBlock.parseMcGenericCond,       True),
     2752    'IEM_MC_IF_EFL_BIT_SET':                                     (McBlock.parseMcGenericCond,       True),
     2753    'IEM_MC_IF_EFL_BIT_SET_OR_BITS_NE':                          (McBlock.parseMcGenericCond,       True),
     2754    'IEM_MC_IF_EFL_BITS_EQ':                                     (McBlock.parseMcGenericCond,       True),
     2755    'IEM_MC_IF_EFL_BITS_NE':                                     (McBlock.parseMcGenericCond,       True),
     2756    'IEM_MC_IF_EFL_NO_BITS_SET':                                 (McBlock.parseMcGenericCond,       True),
     2757    'IEM_MC_IF_FCW_IM':                                          (McBlock.parseMcGenericCond,       True),
     2758    'IEM_MC_IF_FPUREG_IS_EMPTY':                                 (McBlock.parseMcGenericCond,       True),
     2759    'IEM_MC_IF_FPUREG_NOT_EMPTY':                                (McBlock.parseMcGenericCond,       True),
     2760    'IEM_MC_IF_FPUREG_NOT_EMPTY_REF_R80':                        (McBlock.parseMcGenericCond,       True),
     2761    'IEM_MC_IF_GREG_BIT_SET':                                    (McBlock.parseMcGenericCond,       True),
     2762    'IEM_MC_IF_LOCAL_IS_Z':                                      (McBlock.parseMcGenericCond,       True),
     2763    'IEM_MC_IF_MXCSR_XCPT_PENDING':                              (McBlock.parseMcGenericCond,       True),
     2764    'IEM_MC_IF_RCX_IS_NZ':                                       (McBlock.parseMcGenericCond,       True),
     2765    'IEM_MC_IF_RCX_IS_NZ_AND_EFL_BIT_NOT_SET':                   (McBlock.parseMcGenericCond,       True),
     2766    'IEM_MC_IF_RCX_IS_NZ_AND_EFL_BIT_SET':                       (McBlock.parseMcGenericCond,       True),
     2767    'IEM_MC_IF_TWO_FPUREGS_NOT_EMPTY_REF_R80':                   (McBlock.parseMcGenericCond,       True),
     2768    'IEM_MC_IF_TWO_FPUREGS_NOT_EMPTY_REF_R80_FIRST':             (McBlock.parseMcGenericCond,       True),
     2769    'IEM_MC_IMPLICIT_AVX_AIMPL_ARGS':                            (McBlock.parseMcGeneric,           False),
     2770    'IEM_MC_INT_CLEAR_ZMM_256_UP':                               (McBlock.parseMcGeneric,           True),
     2771    'IEM_MC_LOCAL':                                              (McBlock.parseMcLocal,             False),
     2772    'IEM_MC_LOCAL_CONST':                                        (McBlock.parseMcLocalConst,        False),
     2773    'IEM_MC_MAYBE_RAISE_AVX_RELATED_XCPT':                       (McBlock.parseMcGeneric,           True),
     2774    'IEM_MC_MAYBE_RAISE_DEVICE_NOT_AVAILABLE':                   (McBlock.parseMcGeneric,           True),
     2775    'IEM_MC_MAYBE_RAISE_FPU_XCPT':                               (McBlock.parseMcGeneric,           True),
     2776    'IEM_MC_MAYBE_RAISE_FSGSBASE_XCPT':                          (McBlock.parseMcGeneric,           True),
     2777    'IEM_MC_MAYBE_RAISE_MMX_RELATED_XCPT':                       (McBlock.parseMcGeneric,           True),
     2778    'IEM_MC_MAYBE_RAISE_NON_CANONICAL_ADDR_GP0':                 (McBlock.parseMcGeneric,           True),
     2779    'IEM_MC_MAYBE_RAISE_SSE_AVX_SIMD_FP_OR_UD_XCPT':             (McBlock.parseMcGeneric,           True),
     2780    'IEM_MC_MAYBE_RAISE_SSE_RELATED_XCPT':                       (McBlock.parseMcGeneric,           True),
     2781    'IEM_MC_MAYBE_RAISE_WAIT_DEVICE_NOT_AVAILABLE':              (McBlock.parseMcGeneric,           True),
     2782    'IEM_MC_MEM_COMMIT_AND_UNMAP':                               (McBlock.parseMcGeneric,           True),
     2783    'IEM_MC_MEM_COMMIT_AND_UNMAP_FOR_FPU_STORE':                 (McBlock.parseMcGeneric,           True),
     2784    'IEM_MC_MEM_MAP':                                            (McBlock.parseMcGeneric,           True),
     2785    'IEM_MC_MEM_MAP_EX':                                         (McBlock.parseMcGeneric,           True),
     2786    'IEM_MC_MERGE_YREG_U32_U96_ZX_VLMAX':                        (McBlock.parseMcGeneric,           True),
     2787    'IEM_MC_MERGE_YREG_U64_U64_ZX_VLMAX':                        (McBlock.parseMcGeneric,           True),
     2788    'IEM_MC_MERGE_YREG_U64HI_U64HI_ZX_VLMAX':                    (McBlock.parseMcGeneric,           True),
     2789    'IEM_MC_MERGE_YREG_U64LO_U64LO_ZX_VLMAX':                    (McBlock.parseMcGeneric,           True),
     2790    'IEM_MC_MERGE_YREG_U64LO_U64LOCAL_ZX_VLMAX':                 (McBlock.parseMcGeneric,           True),
     2791    'IEM_MC_MERGE_YREG_U64LOCAL_U64HI_ZX_VLMAX':                 (McBlock.parseMcGeneric,           True),
     2792    'IEM_MC_MODIFIED_MREG':                                      (McBlock.parseMcGeneric,           True),
     2793    'IEM_MC_MODIFIED_MREG_BY_REF':                               (McBlock.parseMcGeneric,           True),
     2794    'IEM_MC_OR_2LOCS_U32':                                       (McBlock.parseMcGeneric,           False),
     2795    'IEM_MC_OR_GREG_U16':                                        (McBlock.parseMcGeneric,           True),
     2796    'IEM_MC_OR_GREG_U32':                                        (McBlock.parseMcGeneric,           True),
     2797    'IEM_MC_OR_GREG_U64':                                        (McBlock.parseMcGeneric,           True),
     2798    'IEM_MC_OR_GREG_U8':                                         (McBlock.parseMcGeneric,           True),
     2799    'IEM_MC_OR_LOCAL_U16':                                       (McBlock.parseMcGeneric,           False),
     2800    'IEM_MC_OR_LOCAL_U32':                                       (McBlock.parseMcGeneric,           False),
     2801    'IEM_MC_OR_LOCAL_U8':                                        (McBlock.parseMcGeneric,           False),
     2802    'IEM_MC_POP_U16':                                            (McBlock.parseMcGeneric,           True),
     2803    'IEM_MC_POP_U32':                                            (McBlock.parseMcGeneric,           True),
     2804    'IEM_MC_POP_U64':                                            (McBlock.parseMcGeneric,           True),
     2805    'IEM_MC_PREPARE_AVX_USAGE':                                  (McBlock.parseMcGeneric,           False),
     2806    'IEM_MC_PREPARE_FPU_USAGE':                                  (McBlock.parseMcGeneric,           False),
     2807    'IEM_MC_PREPARE_SSE_USAGE':                                  (McBlock.parseMcGeneric,           False),
     2808    'IEM_MC_PUSH_FPU_RESULT':                                    (McBlock.parseMcGeneric,           True),
     2809    'IEM_MC_PUSH_FPU_RESULT_MEM_OP':                             (McBlock.parseMcGeneric,           True),
     2810    'IEM_MC_PUSH_FPU_RESULT_TWO':                                (McBlock.parseMcGeneric,           True),
     2811    'IEM_MC_PUSH_U16':                                           (McBlock.parseMcGeneric,           True),
     2812    'IEM_MC_PUSH_U32':                                           (McBlock.parseMcGeneric,           True),
     2813    'IEM_MC_PUSH_U32_SREG':                                      (McBlock.parseMcGeneric,           True),
     2814    'IEM_MC_PUSH_U64':                                           (McBlock.parseMcGeneric,           True),
     2815    'IEM_MC_RAISE_DIVIDE_ERROR':                                 (McBlock.parseMcGeneric,           True),
     2816    'IEM_MC_RAISE_GP0_IF_CPL_NOT_ZERO':                          (McBlock.parseMcGeneric,           True),
     2817    'IEM_MC_RAISE_GP0_IF_EFF_ADDR_UNALIGNED':                    (McBlock.parseMcGeneric,           True),
     2818    'IEM_MC_RAISE_SSE_AVX_SIMD_FP_OR_UD_XCPT':                   (McBlock.parseMcGeneric,           True),
     2819    'IEM_MC_REF_EFLAGS':                                         (McBlock.parseMcGeneric,           False),
     2820    'IEM_MC_REF_FPUREG':                                         (McBlock.parseMcGeneric,           False),
     2821    'IEM_MC_REF_GREG_I32':                                       (McBlock.parseMcGeneric,           False),
     2822    'IEM_MC_REF_GREG_I32_CONST':                                 (McBlock.parseMcGeneric,           False),
     2823    'IEM_MC_REF_GREG_I64':                                       (McBlock.parseMcGeneric,           False),
     2824    'IEM_MC_REF_GREG_I64_CONST':                                 (McBlock.parseMcGeneric,           False),
     2825    'IEM_MC_REF_GREG_U16':                                       (McBlock.parseMcGeneric,           False),
     2826    'IEM_MC_REF_GREG_U32':                                       (McBlock.parseMcGeneric,           False),
     2827    'IEM_MC_REF_GREG_U64':                                       (McBlock.parseMcGeneric,           False),
     2828    'IEM_MC_REF_GREG_U8':                                        (McBlock.parseMcGeneric,           False),
     2829    'IEM_MC_REF_LOCAL':                                          (McBlock.parseMcGeneric,           False),
     2830    'IEM_MC_REF_MREG_U32_CONST':                                 (McBlock.parseMcGeneric,           False),
     2831    'IEM_MC_REF_MREG_U64':                                       (McBlock.parseMcGeneric,           False),
     2832    'IEM_MC_REF_MREG_U64_CONST':                                 (McBlock.parseMcGeneric,           False),
     2833    'IEM_MC_REF_MXCSR':                                          (McBlock.parseMcGeneric,           False),
     2834    'IEM_MC_REF_XREG_R32_CONST':                                 (McBlock.parseMcGeneric,           False),
     2835    'IEM_MC_REF_XREG_R64_CONST':                                 (McBlock.parseMcGeneric,           False),
     2836    'IEM_MC_REF_XREG_U128':                                      (McBlock.parseMcGeneric,           False),
     2837    'IEM_MC_REF_XREG_U128_CONST':                                (McBlock.parseMcGeneric,           False),
     2838    'IEM_MC_REF_XREG_U32_CONST':                                 (McBlock.parseMcGeneric,           False),
     2839    'IEM_MC_REF_XREG_U64_CONST':                                 (McBlock.parseMcGeneric,           False),
     2840    'IEM_MC_REF_XREG_XMM_CONST':                                 (McBlock.parseMcGeneric,           False),
     2841    'IEM_MC_REF_YREG_U128':                                      (McBlock.parseMcGeneric,           False),
     2842    'IEM_MC_REF_YREG_U128_CONST':                                (McBlock.parseMcGeneric,           False),
     2843    'IEM_MC_REF_YREG_U64_CONST':                                 (McBlock.parseMcGeneric,           False),
     2844    'IEM_MC_REL_JMP_S16_AND_FINISH':                             (McBlock.parseMcGeneric,           True),
     2845    'IEM_MC_REL_JMP_S32_AND_FINISH':                             (McBlock.parseMcGeneric,           True),
     2846    'IEM_MC_REL_JMP_S8_AND_FINISH':                              (McBlock.parseMcGeneric,           True),
     2847    'IEM_MC_RETURN_ON_FAILURE':                                  (McBlock.parseMcGeneric,           False),
     2848    'IEM_MC_SAR_LOCAL_S16':                                      (McBlock.parseMcGeneric,           False),
     2849    'IEM_MC_SAR_LOCAL_S32':                                      (McBlock.parseMcGeneric,           False),
     2850    'IEM_MC_SAR_LOCAL_S64':                                      (McBlock.parseMcGeneric,           False),
     2851    'IEM_MC_SET_EFL_BIT':                                        (McBlock.parseMcGeneric,           True),
     2852    'IEM_MC_SET_FPU_RESULT':                                     (McBlock.parseMcGeneric,           True),
     2853    'IEM_MC_SET_RIP_U16_AND_FINISH':                             (McBlock.parseMcGeneric,           True),
     2854    'IEM_MC_SET_RIP_U32_AND_FINISH':                             (McBlock.parseMcGeneric,           True),
     2855    'IEM_MC_SET_RIP_U64_AND_FINISH':                             (McBlock.parseMcGeneric,           True),
     2856    'IEM_MC_SHL_LOCAL_S16':                                      (McBlock.parseMcGeneric,           False),
     2857    'IEM_MC_SHL_LOCAL_S32':                                      (McBlock.parseMcGeneric,           False),
     2858    'IEM_MC_SHL_LOCAL_S64':                                      (McBlock.parseMcGeneric,           False),
     2859    'IEM_MC_SHR_LOCAL_U8':                                       (McBlock.parseMcGeneric,           False),
     2860    'IEM_MC_SSE_UPDATE_MXCSR':                                   (McBlock.parseMcGeneric,           True),
     2861    'IEM_MC_STORE_FPU_RESULT':                                   (McBlock.parseMcGeneric,           True),
     2862    'IEM_MC_STORE_FPU_RESULT_MEM_OP':                            (McBlock.parseMcGeneric,           True),
     2863    'IEM_MC_STORE_FPU_RESULT_THEN_POP':                          (McBlock.parseMcGeneric,           True),
     2864    'IEM_MC_STORE_FPU_RESULT_WITH_MEM_OP_THEN_POP':              (McBlock.parseMcGeneric,           True),
     2865    'IEM_MC_STORE_FPUREG_R80_SRC_REF':                           (McBlock.parseMcGeneric,           True),
     2866    'IEM_MC_STORE_GREG_I64':                                     (McBlock.parseMcGeneric,           True),
     2867    'IEM_MC_STORE_GREG_U16':                                     (McBlock.parseMcGeneric,           True),
     2868    'IEM_MC_STORE_GREG_U16_CONST':                               (McBlock.parseMcGeneric,           True),
     2869    'IEM_MC_STORE_GREG_U32':                                     (McBlock.parseMcGeneric,           True),
     2870    'IEM_MC_STORE_GREG_U32_CONST':                               (McBlock.parseMcGeneric,           True),
     2871    'IEM_MC_STORE_GREG_U64':                                     (McBlock.parseMcGeneric,           True),
     2872    'IEM_MC_STORE_GREG_U64_CONST':                               (McBlock.parseMcGeneric,           True),
     2873    'IEM_MC_STORE_GREG_U8':                                      (McBlock.parseMcGeneric,           True),
     2874    'IEM_MC_STORE_GREG_U8_CONST':                                (McBlock.parseMcGeneric,           True),
     2875    'IEM_MC_STORE_MEM_I16_CONST_BY_REF':                         (McBlock.parseMcGeneric,           True),
     2876    'IEM_MC_STORE_MEM_I32_CONST_BY_REF':                         (McBlock.parseMcGeneric,           True),
     2877    'IEM_MC_STORE_MEM_I64_CONST_BY_REF':                         (McBlock.parseMcGeneric,           True),
     2878    'IEM_MC_STORE_MEM_I8_CONST_BY_REF':                          (McBlock.parseMcGeneric,           True),
     2879    'IEM_MC_STORE_MEM_INDEF_D80_BY_REF':                         (McBlock.parseMcGeneric,           True),
     2880    'IEM_MC_STORE_MEM_NEG_QNAN_R32_BY_REF':                      (McBlock.parseMcGeneric,           True),
     2881    'IEM_MC_STORE_MEM_NEG_QNAN_R64_BY_REF':                      (McBlock.parseMcGeneric,           True),
     2882    'IEM_MC_STORE_MEM_NEG_QNAN_R80_BY_REF':                      (McBlock.parseMcGeneric,           True),
     2883    'IEM_MC_STORE_MEM_U128':                                     (McBlock.parseMcGeneric,           True),
     2884    'IEM_MC_STORE_MEM_U128_ALIGN_SSE':                           (McBlock.parseMcGeneric,           True),
     2885    'IEM_MC_STORE_MEM_U16':                                      (McBlock.parseMcGeneric,           True),
     2886    'IEM_MC_STORE_MEM_U16_CONST':                                (McBlock.parseMcGeneric,           True),
     2887    'IEM_MC_STORE_MEM_U256':                                     (McBlock.parseMcGeneric,           True),
     2888    'IEM_MC_STORE_MEM_U256_ALIGN_AVX':                           (McBlock.parseMcGeneric,           True),
     2889    'IEM_MC_STORE_MEM_U32':                                      (McBlock.parseMcGeneric,           True),
     2890    'IEM_MC_STORE_MEM_U32_CONST':                                (McBlock.parseMcGeneric,           True),
     2891    'IEM_MC_STORE_MEM_U64':                                      (McBlock.parseMcGeneric,           True),
     2892    'IEM_MC_STORE_MEM_U64_CONST':                                (McBlock.parseMcGeneric,           True),
     2893    'IEM_MC_STORE_MEM_U8':                                       (McBlock.parseMcGeneric,           True),
     2894    'IEM_MC_STORE_MEM_U8_CONST':                                 (McBlock.parseMcGeneric,           True),
     2895    'IEM_MC_STORE_MREG_U32_ZX_U64':                              (McBlock.parseMcGeneric,           True),
     2896    'IEM_MC_STORE_MREG_U64':                                     (McBlock.parseMcGeneric,           True),
     2897    'IEM_MC_STORE_SREG_BASE_U32':                                (McBlock.parseMcGeneric,           True),
     2898    'IEM_MC_STORE_SREG_BASE_U64':                                (McBlock.parseMcGeneric,           True),
     2899    'IEM_MC_STORE_SSE_RESULT':                                   (McBlock.parseMcGeneric,           True),
     2900    'IEM_MC_STORE_XREG_HI_U64':                                  (McBlock.parseMcGeneric,           True),
     2901    'IEM_MC_STORE_XREG_R32':                                     (McBlock.parseMcGeneric,           True),
     2902    'IEM_MC_STORE_XREG_R64':                                     (McBlock.parseMcGeneric,           True),
     2903    'IEM_MC_STORE_XREG_U128':                                    (McBlock.parseMcGeneric,           True),
     2904    'IEM_MC_STORE_XREG_U16':                                     (McBlock.parseMcGeneric,           True),
     2905    'IEM_MC_STORE_XREG_U32':                                     (McBlock.parseMcGeneric,           True),
     2906    'IEM_MC_STORE_XREG_U32_U128':                                (McBlock.parseMcGeneric,           True),
     2907    'IEM_MC_STORE_XREG_U32_ZX_U128':                             (McBlock.parseMcGeneric,           True),
     2908    'IEM_MC_STORE_XREG_U64':                                     (McBlock.parseMcGeneric,           True),
     2909    'IEM_MC_STORE_XREG_U64_ZX_U128':                             (McBlock.parseMcGeneric,           True),
     2910    'IEM_MC_STORE_XREG_U8':                                      (McBlock.parseMcGeneric,           True),
     2911    'IEM_MC_STORE_XREG_XMM':                                     (McBlock.parseMcGeneric,           True),
     2912    'IEM_MC_STORE_XREG_XMM_U32':                                 (McBlock.parseMcGeneric,           True),
     2913    'IEM_MC_STORE_XREG_XMM_U64':                                 (McBlock.parseMcGeneric,           True),
     2914    'IEM_MC_STORE_YREG_U128':                                    (McBlock.parseMcGeneric,           True),
     2915    'IEM_MC_STORE_YREG_U128_ZX_VLMAX':                           (McBlock.parseMcGeneric,           True),
     2916    'IEM_MC_STORE_YREG_U256_ZX_VLMAX':                           (McBlock.parseMcGeneric,           True),
     2917    'IEM_MC_STORE_YREG_U32_ZX_VLMAX':                            (McBlock.parseMcGeneric,           True),
     2918    'IEM_MC_STORE_YREG_U64_ZX_VLMAX':                            (McBlock.parseMcGeneric,           True),
     2919    'IEM_MC_SUB_GREG_U16':                                       (McBlock.parseMcGeneric,           True),
     2920    'IEM_MC_SUB_GREG_U32':                                       (McBlock.parseMcGeneric,           True),
     2921    'IEM_MC_SUB_GREG_U64':                                       (McBlock.parseMcGeneric,           True),
     2922    'IEM_MC_SUB_GREG_U8':                                        (McBlock.parseMcGeneric,           True),
     2923    'IEM_MC_SUB_LOCAL_U16':                                      (McBlock.parseMcGeneric,           False),
     2924    'IEM_MC_UPDATE_FPU_OPCODE_IP':                               (McBlock.parseMcGeneric,           True),
     2925    'IEM_MC_UPDATE_FSW':                                         (McBlock.parseMcGeneric,           True),
     2926    'IEM_MC_UPDATE_FSW_CONST':                                   (McBlock.parseMcGeneric,           True),
     2927    'IEM_MC_UPDATE_FSW_THEN_POP':                                (McBlock.parseMcGeneric,           True),
     2928    'IEM_MC_UPDATE_FSW_THEN_POP_POP':                            (McBlock.parseMcGeneric,           True),
     2929    'IEM_MC_UPDATE_FSW_WITH_MEM_OP':                             (McBlock.parseMcGeneric,           True),
     2930    'IEM_MC_UPDATE_FSW_WITH_MEM_OP_THEN_POP':                    (McBlock.parseMcGeneric,           True),
    28732931};
    28742932
  • trunk/src/VBox/VMM/VMMAll/IEMAllInstructionsThree0f38.cpp.h

    r100072 r100714  
    4949        /** @todo testcase: REX.B / REX.R and MMX register indexing. Ignored? */
    5050        /** @todo testcase: REX.B / REX.R and segment register indexing. Ignored? */
     51        IEM_MC_BEGIN(2, 0);
    5152        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fSsse3);
    52         IEM_MC_BEGIN(2, 0);
    5353        IEM_MC_ARG(uint64_t *,          pDst, 0);
    5454        IEM_MC_ARG(uint64_t const *,    pSrc, 1);
     
    111111         * Register, register.
    112112         */
     113        IEM_MC_BEGIN(2, 0);
    113114        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fSsse3);
    114         IEM_MC_BEGIN(2, 0);
    115115        IEM_MC_ARG(PRTUINT128U,                 puDst, 0);
    116116        IEM_MC_ARG(PCRTUINT128U,                puSrc, 1);
     
    167167         * Register, register.
    168168         */
     169        IEM_MC_BEGIN(2, 0);
    169170        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fSse41);
    170         IEM_MC_BEGIN(2, 0);
    171171        IEM_MC_ARG(PRTUINT128U,                 puDst, 0);
    172172        IEM_MC_ARG(PCRTUINT128U,                puSrc, 1);
     
    226226         * Register, register.
    227227         */
     228        IEM_MC_BEGIN(2, 0);
    228229        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fSse41);
    229         IEM_MC_BEGIN(2, 0);
    230230        IEM_MC_ARG(PRTUINT128U,                 puDst, 0);
    231231        IEM_MC_ARG(PCRTUINT128U,                puSrc, 1);
     
    282282         * Register, register.
    283283         */
     284        IEM_MC_BEGIN(2, 0);
    284285        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fSse42);
    285         IEM_MC_BEGIN(2, 0);
    286286        IEM_MC_ARG(PRTUINT128U,                 puDst, 0);
    287287        IEM_MC_ARG(PCRTUINT128U,                puSrc, 1);
     
    342342         * Register, register.
    343343         */
     344        IEM_MC_BEGIN(2, 0);
    344345        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fAesNi);
    345         IEM_MC_BEGIN(2, 0);
    346346        IEM_MC_ARG(PRTUINT128U,                 puDst, 0);
    347347        IEM_MC_ARG(PCRTUINT128U,                puSrc, 1);
     
    402402         * Register, register.
    403403         */
     404        IEM_MC_BEGIN(2, 0);
    404405        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fSha);
    405         IEM_MC_BEGIN(2, 0);
    406406        IEM_MC_ARG(PRTUINT128U,                 puDst, 0);
    407407        IEM_MC_ARG(PCRTUINT128U,                puSrc, 1);
     
    690690         * Register, register. \
    691691         */ \
     692        IEM_MC_BEGIN(3, 0); \
    692693        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fSse41); \
    693         IEM_MC_BEGIN(3, 0); \
    694694        IEM_MC_ARG(PRTUINT128U,  puDst,  0); \
    695695        IEM_MC_ARG(PCRTUINT128U, puSrc,  1); \
     
    785785         * Register, register.
    786786         */
     787        IEM_MC_BEGIN(3, 0);
    787788        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fSse41);
    788         IEM_MC_BEGIN(3, 0);
    789789        IEM_MC_ARG(PCRTUINT128U,                puSrc1,  0);
    790790        IEM_MC_ARG(PCRTUINT128U,                puSrc2,  1);
     
    906906         * Register, register. \
    907907         */ \
     908        IEM_MC_BEGIN(2, 0); \
    908909        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fSse41); \
    909         IEM_MC_BEGIN(2, 0); \
    910910        IEM_MC_ARG(PRTUINT128U,                 puDst, 0); \
    911911        IEM_MC_ARG(uint64_t,    uSrc, 1); \
     
    13101310{
    13111311    IEMOP_MNEMONIC(invept, "invept Gy,Mdq");
    1312     IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    1313     IEMOP_HLP_IN_VMX_OPERATION("invept", kVmxVDiag_Invept);
    1314     IEMOP_HLP_VMX_INSTR("invept", kVmxVDiag_Invept);
    13151312    uint8_t bRm; IEM_OPCODE_GET_NEXT_U8(&bRm);
    13161313    if (IEM_IS_MODRM_MEM_MODE(bRm))
     
    13251322            IEM_MC_FETCH_GREG_U64(uInveptType, IEM_GET_MODRM_REG(pVCpu, bRm));
    13261323            IEM_MC_CALC_RM_EFF_ADDR(GCPtrInveptDesc, bRm, 0);
     1324            IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
     1325            IEMOP_HLP_IN_VMX_OPERATION("invept", kVmxVDiag_Invept);
     1326            IEMOP_HLP_VMX_INSTR(       "invept", kVmxVDiag_Invept);
    13271327            IEM_MC_ASSIGN(iEffSeg, pVCpu->iem.s.iEffSeg);
    13281328            IEM_MC_CALL_CIMPL_3(IEM_CIMPL_F_VMEXIT | IEM_CIMPL_F_STATUS_FLAGS,
     
    13381338            IEM_MC_FETCH_GREG_U32(uInveptType, IEM_GET_MODRM_REG(pVCpu, bRm));
    13391339            IEM_MC_CALC_RM_EFF_ADDR(GCPtrInveptDesc, bRm, 0);
     1340            IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
     1341            IEMOP_HLP_IN_VMX_OPERATION("invept", kVmxVDiag_Invept);
     1342            IEMOP_HLP_VMX_INSTR(       "invept", kVmxVDiag_Invept);
    13401343            IEM_MC_ASSIGN(iEffSeg, pVCpu->iem.s.iEffSeg);
    13411344            IEM_MC_CALL_CIMPL_3(IEM_CIMPL_F_VMEXIT | IEM_CIMPL_F_STATUS_FLAGS,
     
    13451348    }
    13461349    Log(("iemOp_invept_Gy_Mdq: invalid encoding -> #UD\n"));
     1350    IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    13471351    IEMOP_RAISE_INVALID_OPCODE_RET();
    13481352}
     
    13561360{
    13571361    IEMOP_MNEMONIC(invvpid, "invvpid Gy,Mdq");
    1358     IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    1359     IEMOP_HLP_IN_VMX_OPERATION("invvpid", kVmxVDiag_Invvpid);
    1360     IEMOP_HLP_VMX_INSTR("invvpid", kVmxVDiag_Invvpid);
    13611362    uint8_t bRm; IEM_OPCODE_GET_NEXT_U8(&bRm);
    13621363    if (IEM_IS_MODRM_MEM_MODE(bRm))
     
    13711372            IEM_MC_FETCH_GREG_U64(uInvvpidType, IEM_GET_MODRM_REG(pVCpu, bRm));
    13721373            IEM_MC_CALC_RM_EFF_ADDR(GCPtrInvvpidDesc, bRm, 0);
     1374            IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
     1375            IEMOP_HLP_IN_VMX_OPERATION("invvpid", kVmxVDiag_Invvpid);
     1376            IEMOP_HLP_VMX_INSTR("invvpid", kVmxVDiag_Invvpid);
    13731377            IEM_MC_ASSIGN(iEffSeg, pVCpu->iem.s.iEffSeg);
    13741378            IEM_MC_CALL_CIMPL_3(IEM_CIMPL_F_VMEXIT | IEM_CIMPL_F_STATUS_FLAGS,
     
    13841388            IEM_MC_FETCH_GREG_U32(uInvvpidType, IEM_GET_MODRM_REG(pVCpu, bRm));
    13851389            IEM_MC_CALC_RM_EFF_ADDR(GCPtrInvvpidDesc, bRm, 0);
     1390            IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
     1391            IEMOP_HLP_IN_VMX_OPERATION("invvpid", kVmxVDiag_Invvpid);
     1392            IEMOP_HLP_VMX_INSTR("invvpid", kVmxVDiag_Invvpid);
    13861393            IEM_MC_ASSIGN(iEffSeg, pVCpu->iem.s.iEffSeg);
    13871394            IEM_MC_CALL_CIMPL_3(IEM_CIMPL_F_VMEXIT | IEM_CIMPL_F_STATUS_FLAGS,
     
    13911398    }
    13921399    Log(("iemOp_invvpid_Gy_Mdq: invalid encoding -> #UD\n"));
     1400    IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    13931401    IEMOP_RAISE_INVALID_OPCODE_RET();
    13941402}
     
    14011409{
    14021410    IEMOP_MNEMONIC(invpcid, "invpcid Gy,Mdq");
    1403     IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    14041411    uint8_t bRm; IEM_OPCODE_GET_NEXT_U8(&bRm);
    14051412    if (IEM_IS_MODRM_MEM_MODE(bRm))
     
    14141421            IEM_MC_FETCH_GREG_U64(uInvpcidType, IEM_GET_MODRM_REG(pVCpu, bRm));
    14151422            IEM_MC_CALC_RM_EFF_ADDR(GCPtrInvpcidDesc, bRm, 0);
     1423            IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    14161424            IEM_MC_ASSIGN(iEffSeg, pVCpu->iem.s.iEffSeg);
    14171425            IEM_MC_CALL_CIMPL_3(IEM_CIMPL_F_VMEXIT, iemCImpl_invpcid, iEffSeg, GCPtrInvpcidDesc, uInvpcidType);
     
    14261434            IEM_MC_FETCH_GREG_U32(uInvpcidType, IEM_GET_MODRM_REG(pVCpu, bRm));
    14271435            IEM_MC_CALC_RM_EFF_ADDR(GCPtrInvpcidDesc, bRm, 0);
     1436            IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    14281437            IEM_MC_ASSIGN(iEffSeg, pVCpu->iem.s.iEffSeg);
    14291438            IEM_MC_CALL_CIMPL_3(IEM_CIMPL_F_VMEXIT, iemCImpl_invpcid, iEffSeg, GCPtrInvpcidDesc, uInvpcidType);
     
    14321441    }
    14331442    Log(("iemOp_invpcid_Gy_Mdq: invalid encoding -> #UD\n"));
     1443    IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    14341444    IEMOP_RAISE_INVALID_OPCODE_RET();
    14351445}
     
    15651575         * Register, register.
    15661576         */
     1577        IEM_MC_BEGIN(3, 0);
    15671578        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fSha);
    1568         IEM_MC_BEGIN(3, 0);
    15691579        IEM_MC_ARG(PRTUINT128U,                 puDst, 0);
    15701580        IEM_MC_ARG(PCRTUINT128U,                puSrc, 1);
     
    18041814         * Register, register.
    18051815         */
     1816        IEM_MC_BEGIN(2, 0);
    18061817        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    1807         IEM_MC_BEGIN(2, 0);
    18081818        IEM_MC_ARG(uint32_t *,          puDst, 0);
    18091819        IEM_MC_ARG(uint8_t,             uSrc,  1);
     
    19201930         * Register, register.
    19211931         */
    1922         IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    19231932        switch (pVCpu->iem.s.enmEffOpSize)
    19241933        {
    19251934            case IEMMODE_16BIT:
    19261935                IEM_MC_BEGIN(2, 0);
     1936                IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    19271937                IEM_MC_ARG(uint32_t *,          puDst, 0);
    19281938                IEM_MC_ARG(uint16_t,            uSrc,  1);
     
    19381948            case IEMMODE_32BIT:
    19391949                IEM_MC_BEGIN(2, 0);
     1950                IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    19401951                IEM_MC_ARG(uint32_t *,          puDst, 0);
    19411952                IEM_MC_ARG(uint32_t,            uSrc,  1);
     
    19511962            case IEMMODE_64BIT:
    19521963                IEM_MC_BEGIN(2, 0);
     1964                IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    19531965                IEM_MC_ARG(uint32_t *,          puDst, 0);
    19541966                IEM_MC_ARG(uint64_t,            uSrc,  1);
     
    20672079            if (IEM_IS_MODRM_REG_MODE(bRm)) \
    20682080            { \
     2081                IEM_MC_BEGIN(3, 0); \
    20692082                IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); \
    2070                 IEM_MC_BEGIN(3, 0); \
    20712083                IEM_MC_ARG(uint64_t *,      pu64Dst,                0); \
    20722084                IEM_MC_ARG(uint32_t *,      pEFlags,                1); \
     
    21022114            if (IEM_IS_MODRM_REG_MODE(bRm)) \
    21032115            { \
     2116                IEM_MC_BEGIN(3, 0); \
    21042117                IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); \
    2105                 IEM_MC_BEGIN(3, 0); \
    21062118                IEM_MC_ARG(uint32_t *,      pu32Dst,                0); \
    21072119                IEM_MC_ARG(uint32_t *,      pEFlags,                1); \
  • trunk/src/VBox/VMM/VMMAll/IEMAllInstructionsThree0f3a.cpp.h

    r99343 r100714  
    5252         */
    5353        uint8_t bImm; IEM_OPCODE_GET_NEXT_U8(&bImm);
     54        IEM_MC_BEGIN(3, 0);
    5455        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fSsse3);
    55         IEM_MC_BEGIN(3, 0);
    5656        IEM_MC_ARG(PRTUINT128U,                 puDst,               0);
    5757        IEM_MC_ARG(PCRTUINT128U,                puSrc,               1);
     
    111111         */
    112112        uint8_t bImm; IEM_OPCODE_GET_NEXT_U8(&bImm);
     113        IEM_MC_BEGIN(3, 0);
    113114        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fSse41);
    114         IEM_MC_BEGIN(3, 0);
    115115        IEM_MC_ARG(PRTUINT128U,                 puDst,               0);
    116116        IEM_MC_ARG(PCRTUINT128U,                puSrc,               1);
     
    171171         */
    172172        uint8_t bImm; IEM_OPCODE_GET_NEXT_U8(&bImm);
     173        IEM_MC_BEGIN(4, 2);
    173174        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fSse41);
    174         IEM_MC_BEGIN(4, 2);
    175175        IEM_MC_LOCAL(IEMMEDIAF2XMMSRC,              Src);
    176176        IEM_MC_LOCAL(X86XMMREG,                     Dst);
     
    243243         */
    244244        uint8_t bImm; IEM_OPCODE_GET_NEXT_U8(&bImm);
     245        IEM_MC_BEGIN(3, 0);
    245246        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fAesNi);
    246         IEM_MC_BEGIN(3, 0);
    247247        IEM_MC_ARG(PRTUINT128U,                 puDst,               0);
    248248        IEM_MC_ARG(PCRTUINT128U,                puSrc,               1);
     
    323323         */
    324324        uint8_t bImm; IEM_OPCODE_GET_NEXT_U8(&bImm);
     325        IEM_MC_BEGIN(4, 2);
    325326        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fSse41);
    326         IEM_MC_BEGIN(4, 2);
    327327        IEM_MC_LOCAL(IEMMEDIAF2XMMSRC,              Src);
    328328        IEM_MC_LOCAL(X86XMMREG,                     Dst);
     
    388388         */
    389389        uint8_t bImm; IEM_OPCODE_GET_NEXT_U8(&bImm);
     390        IEM_MC_BEGIN(4, 2);
    390391        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fSse41);
    391         IEM_MC_BEGIN(4, 2);
    392392        IEM_MC_LOCAL(IEMMEDIAF2XMMSRC,              Src);
    393393        IEM_MC_LOCAL(X86XMMREG,                     Dst);
     
    481481        /** @todo testcase: REX.B / REX.R and segment register indexing. Ignored? */
    482482        uint8_t bImm; IEM_OPCODE_GET_NEXT_U8(&bImm);
     483        IEM_MC_BEGIN(3, 0);
    483484        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fSsse3);
    484         IEM_MC_BEGIN(3, 0);
    485485        IEM_MC_ARG(uint64_t *,          pDst, 0);
    486486        IEM_MC_ARG(uint64_t,            uSrc, 1);
     
    553553         */
    554554        uint8_t bImm; IEM_OPCODE_GET_NEXT_U8(&bImm);
     555        IEM_MC_BEGIN(0, 1);
    555556        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fSse41);
    556         IEM_MC_BEGIN(0, 1);
    557557        IEM_MC_LOCAL(uint8_t,   uValue);
    558558        IEM_MC_MAYBE_RAISE_SSE_RELATED_XCPT();
     
    597597         */
    598598        uint8_t bImm; IEM_OPCODE_GET_NEXT_U8(&bImm);
     599        IEM_MC_BEGIN(0, 1);
    599600        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fSse41);
    600         IEM_MC_BEGIN(0, 1);
    601601        IEM_MC_LOCAL(uint16_t,  uValue);
    602602        IEM_MC_MAYBE_RAISE_SSE_RELATED_XCPT();
     
    648648             */
    649649            uint8_t bImm; IEM_OPCODE_GET_NEXT_U8(&bImm);
     650            IEM_MC_BEGIN(0, 1);
    650651            IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fSse41);
    651             IEM_MC_BEGIN(0, 1);
    652652            IEM_MC_LOCAL(uint64_t,  uSrc);
    653653            IEM_MC_MAYBE_RAISE_SSE_RELATED_XCPT();
     
    695695             */
    696696            uint8_t bImm; IEM_OPCODE_GET_NEXT_U8(&bImm);
     697            IEM_MC_BEGIN(0, 1);
    697698            IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fSse41);
    698             IEM_MC_BEGIN(0, 1);
    699699            IEM_MC_LOCAL(uint32_t,  uSrc);
    700700            IEM_MC_MAYBE_RAISE_SSE_RELATED_XCPT();
     
    739739         */
    740740        uint8_t bImm; IEM_OPCODE_GET_NEXT_U8(&bImm);
     741        IEM_MC_BEGIN(0, 1);
    741742        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fSse41);
    742         IEM_MC_BEGIN(0, 1);
    743743        IEM_MC_LOCAL(uint32_t,  uSrc);
    744744        IEM_MC_MAYBE_RAISE_SSE_RELATED_XCPT();
     
    792792         */
    793793        uint8_t bImm; IEM_OPCODE_GET_NEXT_U8(&bImm);
     794        IEM_MC_BEGIN(0, 1);
    794795        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fSse41);
    795         IEM_MC_BEGIN(0, 1);
    796796        IEM_MC_LOCAL(uint8_t,   uSrc);
    797797        IEM_MC_MAYBE_RAISE_SSE_RELATED_XCPT();
     
    835835         */
    836836        uint8_t bImm; IEM_OPCODE_GET_NEXT_U8(&bImm);
     837        IEM_MC_BEGIN(0, 3);
    837838        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fSse41);
    838         IEM_MC_BEGIN(0, 3);
    839839        IEM_MC_LOCAL(uint32_t,  uSrc);
    840840        IEM_MC_LOCAL(uint8_t,   uSrcSel);
     
    899899             */
    900900            uint8_t bImm; IEM_OPCODE_GET_NEXT_U8(&bImm);
     901            IEM_MC_BEGIN(0, 1);
    901902            IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fSse41);
    902             IEM_MC_BEGIN(0, 1);
    903903            IEM_MC_LOCAL(uint64_t,  uSrc);
    904904            IEM_MC_MAYBE_RAISE_SSE_RELATED_XCPT();
     
    946946             */
    947947            uint8_t bImm; IEM_OPCODE_GET_NEXT_U8(&bImm);
     948            IEM_MC_BEGIN(0, 1);
    948949            IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fSse41);
    949             IEM_MC_BEGIN(0, 1);
    950950            IEM_MC_LOCAL(uint32_t,  uSrc);
    951951            IEM_MC_MAYBE_RAISE_SSE_RELATED_XCPT();
     
    10551055         */
    10561056        uint8_t bImm; IEM_OPCODE_GET_NEXT_U8(&bImm);
     1057        IEM_MC_BEGIN(3, 0);
    10571058        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fPclMul);
    1058         IEM_MC_BEGIN(3, 0);
    10591059        IEM_MC_ARG(PRTUINT128U,                 puDst,               0);
    10601060        IEM_MC_ARG(PCRTUINT128U,                puSrc,               1);
     
    11471147             */
    11481148            uint8_t bImm; IEM_OPCODE_GET_NEXT_U8(&bImm);
     1149            IEM_MC_BEGIN(4, 1);
    11491150            IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fSse42);
    1150             IEM_MC_BEGIN(4, 1);
    11511151            IEM_MC_ARG(PRTUINT128U,                puDst,             0);
    11521152            IEM_MC_ARG(uint32_t *,                 pEFlags,             1);
     
    12111211             */
    12121212            uint8_t bImm; IEM_OPCODE_GET_NEXT_U8(&bImm);
     1213            IEM_MC_BEGIN(4, 1);
    12131214            IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fSse42);
    1214             IEM_MC_BEGIN(4, 1);
    12151215            IEM_MC_ARG(PRTUINT128U,                puDst,             0);
    12161216            IEM_MC_ARG(uint32_t *,                 pEFlags,             1);
     
    12831283             */
    12841284            uint8_t bImm; IEM_OPCODE_GET_NEXT_U8(&bImm);
     1285            IEM_MC_BEGIN(4, 1);
    12851286            IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fSse42);
    1286             IEM_MC_BEGIN(4, 1);
    12871287            IEM_MC_ARG(uint32_t *,                 pu32Ecx,             0);
    12881288            IEM_MC_ARG(uint32_t *,                 pEFlags,             1);
     
    13481348             */
    13491349            uint8_t bImm; IEM_OPCODE_GET_NEXT_U8(&bImm);
     1350            IEM_MC_BEGIN(4, 1);
    13501351            IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fSse42);
    1351             IEM_MC_BEGIN(4, 1);
    13521352            IEM_MC_ARG(uint32_t *,                 pu32Ecx,             0);
    13531353            IEM_MC_ARG(uint32_t *,                 pEFlags,             1);
     
    14201420         */
    14211421        uint8_t bImm; IEM_OPCODE_GET_NEXT_U8(&bImm);
     1422        IEM_MC_BEGIN(4, 1);
    14221423        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fSse42);
    1423         IEM_MC_BEGIN(4, 1);
    14241424        IEM_MC_ARG(PRTUINT128U,                puDst,             0);
    14251425        IEM_MC_ARG(uint32_t *,                 pEFlags,             1);
     
    14851485         */
    14861486        uint8_t bImm; IEM_OPCODE_GET_NEXT_U8(&bImm);
     1487        IEM_MC_BEGIN(4, 1);
    14871488        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fSse42);
    1488         IEM_MC_BEGIN(4, 1);
    14891489        IEM_MC_ARG(uint32_t *,                 pu32Ecx,             0);
    14901490        IEM_MC_ARG(uint32_t *,                 pEFlags,             1);
     
    15821582         */
    15831583        uint8_t bImm; IEM_OPCODE_GET_NEXT_U8(&bImm);
     1584        IEM_MC_BEGIN(3, 0);
    15841585        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fSha);
    1585         IEM_MC_BEGIN(3, 0);
    15861586        IEM_MC_ARG(PRTUINT128U,                 puDst,               0);
    15871587        IEM_MC_ARG(PCRTUINT128U,                puSrc,               1);
  • trunk/src/VBox/VMM/VMMAll/IEMAllInstructionsTwoByte0f.cpp.h

    r100709 r100714  
    5050        /** @todo testcase: REX.B / REX.R and MMX register indexing. Ignored? */
    5151        /** @todo testcase: REX.B / REX.R and segment register indexing. Ignored? */
     52        IEM_MC_BEGIN(2, 0);
    5253        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fMmx);
    53         IEM_MC_BEGIN(2, 0);
    5454        IEM_MC_ARG(uint64_t *,          pDst, 0);
    5555        IEM_MC_ARG(uint64_t const *,    pSrc, 1);
     
    112112        /** @todo testcase: REX.B / REX.R and MMX register indexing. Ignored? */
    113113        /** @todo testcase: REX.B / REX.R and segment register indexing. Ignored? */
     114        IEM_MC_BEGIN(2, 0);
    114115        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fMmx);
    115         IEM_MC_BEGIN(2, 0);
    116116        IEM_MC_ARG(uint64_t *,          pDst, 0);
    117117        IEM_MC_ARG(uint64_t const *,    pSrc, 1);
     
    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        IEM_MC_BEGIN(2, 0);
    174175        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX_2_OR(fSse, fAmdMmxExts);
    175         IEM_MC_BEGIN(2, 0);
    176176        IEM_MC_ARG(uint64_t *,          pDst, 0);
    177177        IEM_MC_ARG(uint64_t const *,    pSrc, 1);
     
    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        IEM_MC_BEGIN(2, 0);
    237238        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX_2_OR(fSse, fAmdMmxExts);
    238         IEM_MC_BEGIN(2, 0);
    239239        IEM_MC_ARG(uint64_t *,          pDst, 0);
    240240        IEM_MC_ARG(uint64_t const *,    pSrc, 1);
     
    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        IEM_MC_BEGIN(2, 0);
    297298        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fSse2);
    298         IEM_MC_BEGIN(2, 0);
    299299        IEM_MC_ARG(uint64_t *,          pDst, 0);
    300300        IEM_MC_ARG(uint64_t const *,    pSrc, 1);
     
    357357         * XMM, XMM.
    358358         */
     359        IEM_MC_BEGIN(2, 0);
    359360        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fSse);
    360         IEM_MC_BEGIN(2, 0);
    361361        IEM_MC_ARG(PRTUINT128U,          pDst, 0);
    362362        IEM_MC_ARG(PCRTUINT128U,         pSrc, 1);
     
    412412         * XMM, XMM.
    413413         */
     414        IEM_MC_BEGIN(2, 0);
    414415        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fSse2);
    415         IEM_MC_BEGIN(2, 0);
    416416        IEM_MC_ARG(PRTUINT128U,          pDst, 0);
    417417        IEM_MC_ARG(PCRTUINT128U,         pSrc, 1);
     
    470470         * XMM, XMM.
    471471         */
     472        IEM_MC_BEGIN(2, 0);
    472473        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fSse2);
    473         IEM_MC_BEGIN(2, 0);
    474474        IEM_MC_ARG(PRTUINT128U,          pDst, 0);
    475475        IEM_MC_ARG(PCRTUINT128U,         pSrc, 1);
     
    523523         * MMX, MMX.
    524524         */
     525        IEM_MC_BEGIN(2, 0);
    525526        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fMmx);
    526         IEM_MC_BEGIN(2, 0);
    527527        IEM_MC_ARG(uint64_t *,              puDst, 0);
    528528        IEM_MC_ARG(uint64_t const *,        puSrc, 1);
     
    585585         * XMM, XMM.
    586586         */
     587        IEM_MC_BEGIN(2, 0);
    587588        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fSse);
    588         IEM_MC_BEGIN(2, 0);
    589589        IEM_MC_ARG(PRTUINT128U,             puDst, 0);
    590590        IEM_MC_ARG(PCRTUINT128U,            puSrc, 1);
     
    645645         * XMM, XMM.
    646646         */
     647        IEM_MC_BEGIN(2, 0);
    647648        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fSse2);
    648         IEM_MC_BEGIN(2, 0);
    649649        IEM_MC_ARG(PRTUINT128U,             puDst, 0);
    650650        IEM_MC_ARG(PCRTUINT128U,            puSrc, 1);
     
    705705        /** @todo testcase: REX.B / REX.R and MMX register indexing. Ignored? */
    706706        /** @todo testcase: REX.B / REX.R and segment register indexing. Ignored? */
     707        IEM_MC_BEGIN(2, 0);
    707708        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fMmx);
    708         IEM_MC_BEGIN(2, 0);
    709709        IEM_MC_ARG(uint64_t *,              puDst, 0);
    710710        IEM_MC_ARG(uint64_t const *,        puSrc, 1);
     
    767767         * XMM, XMM.
    768768         */
     769        IEM_MC_BEGIN(2, 0);
    769770        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fSse);
    770         IEM_MC_BEGIN(2, 0);
    771771        IEM_MC_ARG(PRTUINT128U,             puDst, 0);
    772772        IEM_MC_ARG(PCRTUINT128U,            puSrc, 1);
     
    827827         * XMM128, XMM128.
    828828         */
     829        IEM_MC_BEGIN(3, 1);
    829830        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fSse);
    830         IEM_MC_BEGIN(3, 1);
    831831        IEM_MC_LOCAL(IEMSSERESULT,          SseRes);
    832832        IEM_MC_ARG_LOCAL_REF(PIEMSSERESULT, pSseRes,        SseRes,     0);
     
    891891         * XMM128, XMM32.
    892892         */
     893        IEM_MC_BEGIN(3, 1);
    893894        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fSse);
    894         IEM_MC_BEGIN(3, 1);
    895895        IEM_MC_LOCAL(IEMSSERESULT,          SseRes);
    896896        IEM_MC_ARG_LOCAL_REF(PIEMSSERESULT, pSseRes,        SseRes,     0);
     
    955955         * XMM128, XMM128.
    956956         */
     957        IEM_MC_BEGIN(3, 1);
    957958        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fSse2);
    958         IEM_MC_BEGIN(3, 1);
    959959        IEM_MC_LOCAL(IEMSSERESULT,          SseRes);
    960960        IEM_MC_ARG_LOCAL_REF(PIEMSSERESULT, pSseRes,        SseRes,     0);
     
    10191019         * XMM, XMM.
    10201020         */
     1021        IEM_MC_BEGIN(3, 1);
    10211022        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fSse2);
    1022         IEM_MC_BEGIN(3, 1);
    10231023        IEM_MC_LOCAL(IEMSSERESULT,          SseRes);
    10241024        IEM_MC_ARG_LOCAL_REF(PIEMSSERESULT, pSseRes,        SseRes,     0);
     
    10831083         * XMM, XMM.
    10841084         */
     1085        IEM_MC_BEGIN(2, 0);
    10851086        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fSse2);
    1086         IEM_MC_BEGIN(2, 0);
    10871087        IEM_MC_ARG(PRTUINT128U,             puDst, 0);
    10881088        IEM_MC_ARG(PCRTUINT128U,            puSrc, 1);
     
    11431143         * XMM, XMM.
    11441144         */
     1145        IEM_MC_BEGIN(3, 1);
    11451146        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fSse3);
    1146         IEM_MC_BEGIN(3, 1);
    11471147        IEM_MC_LOCAL(IEMSSERESULT,          SseRes);
    11481148        IEM_MC_ARG_LOCAL_REF(PIEMSSERESULT, pSseRes,        SseRes,     0);
     
    12501250    if (IEM_IS_MODRM_REG_MODE(bRm))
    12511251    {
     1252        IEM_MC_BEGIN(1, 0);
    12521253        IEMOP_HLP_DECODED_NL_1(OP_LLDT, IEMOPFORM_M_REG, OP_PARM_Ew, DISOPTYPE_DANGEROUS);
    1253         IEM_MC_BEGIN(1, 0);
    12541254        IEM_MC_ARG(uint16_t, u16Sel, 0);
    12551255        IEM_MC_FETCH_GREG_U16(u16Sel, IEM_GET_MODRM_RM(pVCpu, bRm));
     
    12811281    if (IEM_IS_MODRM_REG_MODE(bRm))
    12821282    {
     1283        IEM_MC_BEGIN(1, 0);
    12831284        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    1284         IEM_MC_BEGIN(1, 0);
    12851285        IEM_MC_ARG(uint16_t, u16Sel, 0);
    12861286        IEM_MC_FETCH_GREG_U16(u16Sel, IEM_GET_MODRM_RM(pVCpu, bRm));
     
    13111311    if (IEM_IS_MODRM_REG_MODE(bRm))
    13121312    {
     1313        IEM_MC_BEGIN(2, 0);
    13131314        IEMOP_HLP_DECODED_NL_1(fWrite ? OP_VERW : OP_VERR, IEMOPFORM_M_MEM, OP_PARM_Ew, DISOPTYPE_DANGEROUS | DISOPTYPE_PRIVILEGED_NOTRAP);
    1314         IEM_MC_BEGIN(2, 0);
    13151315        IEM_MC_ARG(uint16_t,    u16Sel,            0);
    13161316        IEM_MC_ARG_CONST(bool,  fWriteArg, fWrite, 1);
     
    15261526         *        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX and
    15271527         *        IEMOP_HLP_DONE_DECODING_NO_SIZE_OP_REPZ_OR_REPNZ_PREFIXES here. */
     1528/** @todo testcase: test prefixes and exceptions. currently not checking for the
     1529 *        OPSIZE one ... */
    15281530        IEMOP_HLP_DONE_DECODING_NO_LOCK_REPZ_OR_REPNZ_PREFIXES();
    15291531        IEM_MC_DEFER_TO_CIMPL_0_RET(0, iemCImpl_xgetbv);
     
    15421544         *        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX and
    15431545         *        IEMOP_HLP_DONE_DECODING_NO_SIZE_OP_REPZ_OR_REPNZ_PREFIXES here. */
     1546/** @todo testcase: test prefixes and exceptions. currently not checking for the
     1547 *        OPSIZE one ... */
    15441548        IEMOP_HLP_DONE_DECODING_NO_LOCK_REPZ_OR_REPNZ_PREFIXES();
    15451549        IEM_MC_DEFER_TO_CIMPL_0_RET(IEM_CIMPL_F_VMEXIT, iemCImpl_xsetbv);
     
    15831587{
    15841588    IEMOP_MNEMONIC(vmmcall, "vmmcall");
     1589    /** @todo r=bird: Table A-8 on page 524 in vol 3 has VMGEXIT for this
     1590     *        opcode sequence when F3 or F2 is used as prefix. So, the assumtion
     1591     *        here cannot be right... */
    15851592    IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); /** @todo check prefix effect on the SVM instructions. ASSUMING no lock for now. */
    15861593
     
    17021709    if (IEM_IS_MODRM_REG_MODE(bRm))
    17031710    {
     1711        IEM_MC_BEGIN(2, 0);
    17041712        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    1705         IEM_MC_BEGIN(2, 0);
    17061713        IEM_MC_ARG(uint16_t, u16Tmp,                         0);
    17071714        IEM_MC_ARG_CONST(RTGCPTR,  GCPtrEffDst, NIL_RTGCPTR, 1);
     
    17291736    IEMOP_MNEMONIC(invlpg, "invlpg");
    17301737    IEMOP_HLP_MIN_486();
    1731     IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    17321738    IEM_MC_BEGIN(1, 1);
    17331739    IEM_MC_ARG(RTGCPTR, GCPtrEffDst, 0);
    17341740    IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffDst, bRm, 0);
     1741    IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    17351742    IEM_MC_CALL_CIMPL_1(IEM_CIMPL_F_VMEXIT, iemCImpl_invlpg, GCPtrEffDst);
    17361743    IEM_MC_END();
     
    18511858    if (IEM_IS_MODRM_REG_MODE(bRm))
    18521859    {
    1853         IEMOP_HLP_DECODED_NL_2(fIsLar ? OP_LAR : OP_LSL, IEMOPFORM_RM_REG, OP_PARM_Gv, OP_PARM_Ew, DISOPTYPE_DANGEROUS | DISOPTYPE_PRIVILEGED_NOTRAP);
    18541860        switch (pVCpu->iem.s.enmEffOpSize)
    18551861        {
     
    18571863            {
    18581864                IEM_MC_BEGIN(3, 0);
     1865                IEMOP_HLP_DECODED_NL_2(fIsLar ? OP_LAR : OP_LSL, IEMOPFORM_RM_REG, OP_PARM_Gv, OP_PARM_Ew, DISOPTYPE_DANGEROUS | DISOPTYPE_PRIVILEGED_NOTRAP);
    18591866                IEM_MC_ARG(uint16_t *,  pu16Dst,           0);
    18601867                IEM_MC_ARG(uint16_t,    u16Sel,            1);
     
    18721879            {
    18731880                IEM_MC_BEGIN(3, 0);
     1881                IEMOP_HLP_DECODED_NL_2(fIsLar ? OP_LAR : OP_LSL, IEMOPFORM_RM_REG, OP_PARM_Gv, OP_PARM_Ew, DISOPTYPE_DANGEROUS | DISOPTYPE_PRIVILEGED_NOTRAP);
    18741882                IEM_MC_ARG(uint64_t *,  pu64Dst,           0);
    18751883                IEM_MC_ARG(uint16_t,    u16Sel,            1);
     
    20522060{
    20532061    IEMOP_MNEMONIC(femms, "femms");
     2062
     2063    IEM_MC_BEGIN(0,0);
    20542064    IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    2055 
    2056     IEM_MC_BEGIN(0,0);
    20572065    IEM_MC_MAYBE_RAISE_DEVICE_NOT_AVAILABLE();
    20582066    IEM_MC_MAYBE_RAISE_FPU_XCPT();
     
    21022110         * XMM128, XMM128.
    21032111         */
     2112        IEM_MC_BEGIN(0, 0);
    21042113        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fSse);
    2105         IEM_MC_BEGIN(0, 0);
    21062114        IEM_MC_MAYBE_RAISE_SSE_RELATED_XCPT();
    21072115        IEM_MC_ACTUALIZE_SSE_STATE_FOR_CHANGE();
     
    21532161         * XMM128, XMM128.
    21542162         */
     2163        IEM_MC_BEGIN(0, 0);
    21552164        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fSse2);
    2156         IEM_MC_BEGIN(0, 0);
    21572165        IEM_MC_MAYBE_RAISE_SSE_RELATED_XCPT();
    21582166        IEM_MC_ACTUALIZE_SSE_STATE_FOR_CHANGE();
     
    22032211         * XMM32, XMM32.
    22042212         */
     2213        IEM_MC_BEGIN(0, 1);
    22052214        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fSse);
    2206         IEM_MC_BEGIN(0, 1);
    22072215        IEM_MC_LOCAL(uint32_t,                  uSrc);
    22082216
     
    22562264         * XMM64, XMM64.
    22572265         */
     2266        IEM_MC_BEGIN(0, 1);
    22582267        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fSse2);
    2259         IEM_MC_BEGIN(0, 1);
    22602268        IEM_MC_LOCAL(uint64_t,                  uSrc);
    22612269
     
    23092317         * XMM128, XMM128.
    23102318         */
     2319        IEM_MC_BEGIN(0, 0);
    23112320        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fSse);
    2312         IEM_MC_BEGIN(0, 0);
    23132321        IEM_MC_MAYBE_RAISE_SSE_RELATED_XCPT();
    23142322        IEM_MC_ACTUALIZE_SSE_STATE_FOR_CHANGE();
     
    23592367         * XMM128, XMM128.
    23602368         */
     2369        IEM_MC_BEGIN(0, 0);
    23612370        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fSse2);
    2362         IEM_MC_BEGIN(0, 0);
    23632371        IEM_MC_MAYBE_RAISE_SSE_RELATED_XCPT();
    23642372        IEM_MC_ACTUALIZE_SSE_STATE_FOR_CHANGE();
     
    24092417         * XMM32, XMM32.
    24102418         */
     2419        IEM_MC_BEGIN(0, 1);
    24112420        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fSse);
    2412         IEM_MC_BEGIN(0, 1);
    24132421        IEM_MC_LOCAL(uint32_t,                  uSrc);
    24142422
     
    24622470         * XMM64, XMM64.
    24632471         */
     2472        IEM_MC_BEGIN(0, 1);
    24642473        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fSse2);
    2465         IEM_MC_BEGIN(0, 1);
    24662474        IEM_MC_LOCAL(uint64_t,                  uSrc);
    24672475
     
    25142522        IEMOP_MNEMONIC2(RM_REG, MOVHLPS, movhlps, Vq_WO, UqHi, DISOPTYPE_HARMLESS | DISOPTYPE_X86_SSE, IEMOPHINT_IGNORES_OP_SIZES);
    25152523
     2524        IEM_MC_BEGIN(0, 1);
    25162525        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fSse);
    2517         IEM_MC_BEGIN(0, 1);
    25182526        IEM_MC_LOCAL(uint64_t,                  uSrc);
    25192527
     
    26262634         * XMM, XMM.
    26272635         */
     2636        IEM_MC_BEGIN(0, 1);
    26282637        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fSse3);
    2629         IEM_MC_BEGIN(0, 1);
    26302638        IEM_MC_LOCAL(RTUINT128U,                uSrc);
    26312639
     
    26862694         * XMM128, XMM64.
    26872695         */
     2696        IEM_MC_BEGIN(1, 0);
    26882697        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fSse3);
    2689         IEM_MC_BEGIN(1, 0);
    26902698        IEM_MC_ARG(uint64_t,                    uSrc, 0);
    26912699
     
    29332941        IEMOP_MNEMONIC2(RM_REG, MOVLHPS, movlhps, VqHi_WO, Uq, DISOPTYPE_HARMLESS | DISOPTYPE_X86_SSE, IEMOPHINT_IGNORES_OP_SIZES);
    29342942
     2943        IEM_MC_BEGIN(0, 1);
    29352944        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fSse);
    2936         IEM_MC_BEGIN(0, 1);
    29372945        IEM_MC_LOCAL(uint64_t,                  uSrc);
    29382946
     
    30443052         * XMM128, XMM128.
    30453053         */
     3054        IEM_MC_BEGIN(0, 1);
    30463055        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fSse3);
    3047         IEM_MC_BEGIN(0, 1);
    30483056        IEM_MC_LOCAL(RTUINT128U,                uSrc);
    30493057
     
    32553263    if (IEM_IS_MODRM_REG_MODE(bRm))
    32563264    {
     3265        IEM_MC_BEGIN(0, 0);
    32573266        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    3258         IEM_MC_BEGIN(0, 0);
    32593267        IEM_MC_ADVANCE_RIP_AND_FINISH();
    32603268        IEM_MC_END();
     
    34153423         * Register, register.
    34163424         */
     3425        IEM_MC_BEGIN(0, 0);
    34173426        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fSse);
    3418         IEM_MC_BEGIN(0, 0);
    34193427        IEM_MC_MAYBE_RAISE_SSE_RELATED_XCPT();
    34203428        IEM_MC_ACTUALIZE_SSE_STATE_FOR_CHANGE();
     
    34643472         * Register, register.
    34653473         */
     3474        IEM_MC_BEGIN(0, 0);
    34663475        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fSse2);
    3467         IEM_MC_BEGIN(0, 0);
    34683476        IEM_MC_MAYBE_RAISE_SSE_RELATED_XCPT();
    34693477        IEM_MC_ACTUALIZE_SSE_STATE_FOR_CHANGE();
     
    35163524         * Register, register.
    35173525         */
     3526        IEM_MC_BEGIN(0, 0);
    35183527        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fSse);
    3519         IEM_MC_BEGIN(0, 0);
    35203528        IEM_MC_MAYBE_RAISE_SSE_RELATED_XCPT();
    35213529        IEM_MC_ACTUALIZE_SSE_STATE_FOR_CHANGE();
     
    35653573         * Register, register.
    35663574         */
     3575        IEM_MC_BEGIN(0, 0);
    35673576        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fSse2);
    3568         IEM_MC_BEGIN(0, 0);
    35693577        IEM_MC_MAYBE_RAISE_SSE_RELATED_XCPT();
    35703578        IEM_MC_ACTUALIZE_SSE_STATE_FOR_CHANGE();
     
    36103618         * XMM, MMX
    36113619         */
     3620        IEM_MC_BEGIN(3, 1);
    36123621        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fSse2);
    3613 
    3614         IEM_MC_BEGIN(3, 1);
    36153622        IEM_MC_ARG(uint32_t *,              pfMxcsr,            0);
    36163623        IEM_MC_LOCAL(X86XMMREG,             Dst);
     
    36813688         * XMM, MMX
    36823689         */
     3690        IEM_MC_BEGIN(3, 1);
    36833691        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fSse2);
    3684 
    3685         IEM_MC_BEGIN(3, 1);
    36863692        IEM_MC_ARG(uint32_t *,              pfMxcsr,            0);
    36873693        IEM_MC_LOCAL(X86XMMREG,             Dst);
     
    40824088         * Register, register.
    40834089         */
     4090        IEM_MC_BEGIN(3, 1);
    40844091        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fSse2);
    4085 
    4086         IEM_MC_BEGIN(3, 1);
    40874092        IEM_MC_ARG(uint32_t *,              pfMxcsr,            0);
    40884093        IEM_MC_LOCAL(uint64_t,              u64Dst);
     
    41504155         * Register, register.
    41514156         */
     4157        IEM_MC_BEGIN(3, 1);
    41524158        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fSse2);
    4153 
    4154         IEM_MC_BEGIN(3, 1);
    41554159        IEM_MC_ARG(uint32_t *,              pfMxcsr,            0);
    41564160        IEM_MC_LOCAL(uint64_t,              u64Dst);
     
    44704474         * Register, register.
    44714475         */
     4476        IEM_MC_BEGIN(3, 1);
    44724477        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fSse2);
    4473 
    4474         IEM_MC_BEGIN(3, 1);
    44754478        IEM_MC_ARG(uint32_t *,              pfMxcsr,            0);
    44764479        IEM_MC_LOCAL(uint64_t,              u64Dst);
     
    45394542         * Register, register.
    45404543         */
     4544        IEM_MC_BEGIN(3, 1);
    45414545        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fSse2);
    4542 
    4543         IEM_MC_BEGIN(3, 1);
    45444546        IEM_MC_ARG(uint32_t *,              pfMxcsr,            0);
    45454547        IEM_MC_LOCAL(uint64_t,              u64Dst);
     
    48604862         * Register, register.
    48614863         */
     4864        IEM_MC_BEGIN(4, 1);
    48624865        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fSse);
    4863         IEM_MC_BEGIN(4, 1);
    48644866        IEM_MC_LOCAL(uint32_t, fEFlags);
    48654867        IEM_MC_ARG(uint32_t *,                  pfMxcsr,            0);
     
    49294931         * Register, register.
    49304932         */
     4933        IEM_MC_BEGIN(4, 1);
    49314934        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fSse2);
    4932         IEM_MC_BEGIN(4, 1);
    49334935        IEM_MC_LOCAL(uint32_t, fEFlags);
    49344936        IEM_MC_ARG(uint32_t *,                  pfMxcsr,            0);
     
    50025004         * Register, register.
    50035005         */
     5006        IEM_MC_BEGIN(4, 1);
    50045007        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fSse);
    5005         IEM_MC_BEGIN(4, 1);
    50065008        IEM_MC_LOCAL(uint32_t, fEFlags);
    50075009        IEM_MC_ARG(uint32_t *,                  pfMxcsr,            0);
     
    50715073         * Register, register.
    50725074         */
     5075        IEM_MC_BEGIN(4, 1);
    50735076        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fSse2);
    5074         IEM_MC_BEGIN(4, 1);
    50755077        IEM_MC_LOCAL(uint32_t, fEFlags);
    50765078        IEM_MC_ARG(uint32_t *,                  pfMxcsr,            0);
     
    52335235            case IEMMODE_16BIT: \
    52345236                IEM_MC_BEGIN(0, 1); \
     5237                IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); \
    52355238                IEM_MC_LOCAL(uint16_t, u16Tmp); \
    52365239                a_Cnd { \
     
    52445247            case IEMMODE_32BIT: \
    52455248                IEM_MC_BEGIN(0, 1); \
     5249                IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); \
    52465250                IEM_MC_LOCAL(uint32_t, u32Tmp); \
    52475251                a_Cnd { \
     
    52575261            case IEMMODE_64BIT: \
    52585262                IEM_MC_BEGIN(0, 1); \
     5263                IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); \
    52595264                IEM_MC_LOCAL(uint64_t, u64Tmp); \
    52605265                a_Cnd { \
     
    52785283                IEM_MC_LOCAL(uint16_t, u16Tmp); \
    52795284                IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffSrc, bRm, 0); \
     5285                IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); \
    52805286                IEM_MC_FETCH_MEM_U16(u16Tmp, pVCpu->iem.s.iEffSeg, GCPtrEffSrc); \
    52815287                a_Cnd { \
     
    52915297                IEM_MC_LOCAL(uint32_t, u32Tmp); \
    52925298                IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffSrc, bRm, 0); \
     5299                IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); \
    52935300                IEM_MC_FETCH_MEM_U32(u32Tmp, pVCpu->iem.s.iEffSeg, GCPtrEffSrc); \
    52945301                a_Cnd { \
     
    53065313                IEM_MC_LOCAL(uint64_t, u64Tmp); \
    53075314                IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffSrc, bRm, 0); \
     5315                IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); \
    53085316                IEM_MC_FETCH_MEM_U64(u64Tmp, pVCpu->iem.s.iEffSeg, GCPtrEffSrc); \
    53095317                a_Cnd { \
     
    54595467         * Register, register.
    54605468         */
     5469        IEM_MC_BEGIN(2, 1);
    54615470        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fSse);
    5462         IEM_MC_BEGIN(2, 1);
    54635471        IEM_MC_LOCAL(uint8_t,           u8Dst);
    54645472        IEM_MC_ARG_LOCAL_REF(uint8_t *, pu8Dst,  u8Dst, 0);
     
    54885496         * Register, register.
    54895497         */
     5498        IEM_MC_BEGIN(2, 1);
    54905499        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fSse2);
    5491         IEM_MC_BEGIN(2, 1);
    54925500        IEM_MC_LOCAL(uint8_t,           u8Dst);
    54935501        IEM_MC_ARG_LOCAL_REF(uint8_t *, pu8Dst,  u8Dst, 0);
     
    61916199        {
    61926200            /* MMX, greg64 */
     6201            IEM_MC_BEGIN(0, 1);
    61936202            IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fMmx);
    6194             IEM_MC_BEGIN(0, 1);
    61956203            IEM_MC_LOCAL(uint64_t, u64Tmp);
    61966204
     
    62436251        {
    62446252            /* MMX, greg32 */
     6253            IEM_MC_BEGIN(0, 1);
    62456254            IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fMmx);
    6246             IEM_MC_BEGIN(0, 1);
    62476255            IEM_MC_LOCAL(uint32_t, u32Tmp);
    62486256
     
    62986306        {
    62996307            /* XMM, greg64 */
     6308            IEM_MC_BEGIN(0, 1);
    63006309            IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fSse2);
    6301             IEM_MC_BEGIN(0, 1);
    63026310            IEM_MC_LOCAL(uint64_t, u64Tmp);
    63036311
     
    63486356        {
    63496357            /* XMM, greg32 */
     6358            IEM_MC_BEGIN(0, 1);
    63506359            IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fSse2);
    6351             IEM_MC_BEGIN(0, 1);
    63526360            IEM_MC_LOCAL(uint32_t, u32Tmp);
    63536361
     
    64036411         * Register, register.
    64046412         */
     6413        IEM_MC_BEGIN(0, 1);
    64056414        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fMmx);
    6406         IEM_MC_BEGIN(0, 1);
    64076415        IEM_MC_LOCAL(uint64_t, u64Tmp);
    64086416
     
    64586466         * Register, register.
    64596467         */
     6468        IEM_MC_BEGIN(0, 0);
    64606469        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fSse2);
    6461         IEM_MC_BEGIN(0, 0);
    64626470
    64636471        IEM_MC_MAYBE_RAISE_SSE_RELATED_XCPT();
     
    65096517         * Register, register.
    65106518         */
     6519        IEM_MC_BEGIN(0, 0);
    65116520        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fSse2);
    6512         IEM_MC_BEGIN(0, 0);
    65136521        IEM_MC_MAYBE_RAISE_SSE_RELATED_XCPT();
    65146522        IEM_MC_ACTUALIZE_SSE_STATE_FOR_CHANGE();
     
    65516559         */
    65526560        uint8_t bImm; IEM_OPCODE_GET_NEXT_U8(&bImm);
     6561        IEM_MC_BEGIN(3, 0);
    65536562        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX_2_OR(fSse, fAmdMmxExts);
    6554 
    6555         IEM_MC_BEGIN(3, 0);
    65566563        IEM_MC_ARG(uint64_t *,          pDst, 0);
    65576564        IEM_MC_ARG(uint64_t const *,    pSrc, 1);
     
    66186625         */
    66196626        uint8_t bImm; IEM_OPCODE_GET_NEXT_U8(&bImm);
     6627        IEM_MC_BEGIN(3, 0);
    66206628        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fSse2);
    6621 
    6622         IEM_MC_BEGIN(3, 0);
    66236629        IEM_MC_ARG(PRTUINT128U,         puDst, 0);
    66246630        IEM_MC_ARG(PCRTUINT128U,        puSrc, 1);
     
    67046710         */
    67056711        uint8_t bImm; IEM_OPCODE_GET_NEXT_U8(&bImm);
     6712        IEM_MC_BEGIN(2, 0);
    67066713        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fMmx);
    6707 
    6708         IEM_MC_BEGIN(2, 0);
    67096714        IEM_MC_ARG(uint64_t *,          pDst, 0);
    67106715        IEM_MC_ARG_CONST(uint8_t,       bShiftArg, /*=*/ bImm, 1);
     
    67516756         */
    67526757        uint8_t bImm; IEM_OPCODE_GET_NEXT_U8(&bImm);
     6758        IEM_MC_BEGIN(2, 0);
    67536759        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fSse2);
    6754 
    6755         IEM_MC_BEGIN(2, 0);
    67566760        IEM_MC_ARG(PRTUINT128U,         pDst, 0);
    67576761        IEM_MC_ARG_CONST(uint8_t,       bShiftArg, /*=*/ bImm, 1);
     
    70667070{
    70677071    IEMOP_MNEMONIC(emms, "emms");
     7072    IEM_MC_BEGIN(0,0);
    70687073    IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    7069 
    7070     IEM_MC_BEGIN(0,0);
    70717074    IEM_MC_MAYBE_RAISE_DEVICE_NOT_AVAILABLE();
    70727075    IEM_MC_MAYBE_RAISE_FPU_XCPT();
     
    70967099         * Register, register.
    70977100         */
    7098         IEMOP_HLP_DONE_DECODING_NO_SIZE_OP_REPZ_OR_REPNZ_PREFIXES();
    70997101        if (enmEffOpSize == IEMMODE_64BIT)
    71007102        {
    71017103            IEM_MC_BEGIN(2, 0);
     7104            IEMOP_HLP_DONE_DECODING_NO_SIZE_OP_REPZ_OR_REPNZ_PREFIXES();
    71027105            IEM_MC_ARG(uint64_t *, pu64Dst, 0);
    71037106            IEM_MC_ARG(uint64_t,   u64Enc,  1);
     
    71107113        {
    71117114            IEM_MC_BEGIN(2, 0);
     7115            IEMOP_HLP_DONE_DECODING_NO_SIZE_OP_REPZ_OR_REPNZ_PREFIXES();
    71127116            IEM_MC_ARG(uint64_t *, pu64Dst, 0);
    71137117            IEM_MC_ARG(uint32_t,   u32Enc,  1);
     
    71777181         * Register, register.
    71787182         */
    7179         IEMOP_HLP_DONE_DECODING_NO_SIZE_OP_REPZ_OR_REPNZ_PREFIXES();
    71807183        if (enmEffOpSize == IEMMODE_64BIT)
    71817184        {
    71827185            IEM_MC_BEGIN(2, 0);
     7186            IEMOP_HLP_DONE_DECODING_NO_SIZE_OP_REPZ_OR_REPNZ_PREFIXES();
    71837187            IEM_MC_ARG(uint64_t, u64Val, 0);
    71847188            IEM_MC_ARG(uint64_t, u64Enc, 1);
     
    71917195        {
    71927196            IEM_MC_BEGIN(2, 0);
     7197            IEMOP_HLP_DONE_DECODING_NO_SIZE_OP_REPZ_OR_REPNZ_PREFIXES();
    71937198            IEM_MC_ARG(uint32_t, u32Val, 0);
    71947199            IEM_MC_ARG(uint32_t, u32Enc, 1);
     
    73157320        {
    73167321            /* greg64, MMX */
     7322            IEM_MC_BEGIN(0, 1);
    73177323            IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fMmx);
    7318             IEM_MC_BEGIN(0, 1);
    73197324            IEM_MC_LOCAL(uint64_t, u64Tmp);
    73207325
     
    73677372        {
    73687373            /* greg32, MMX */
     7374            IEM_MC_BEGIN(0, 1);
    73697375            IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fMmx);
    7370             IEM_MC_BEGIN(0, 1);
    73717376            IEM_MC_LOCAL(uint32_t, u32Tmp);
    73727377
     
    74237428        {
    74247429            /* greg64, XMM */
     7430            IEM_MC_BEGIN(0, 1);
    74257431            IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fSse2);
    7426             IEM_MC_BEGIN(0, 1);
    74277432            IEM_MC_LOCAL(uint64_t, u64Tmp);
    74287433
     
    74737478        {
    74747479            /* greg32, XMM */
     7480            IEM_MC_BEGIN(0, 1);
    74757481            IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fSse2);
    7476             IEM_MC_BEGIN(0, 1);
    74777482            IEM_MC_LOCAL(uint32_t, u32Tmp);
    74787483
     
    75257530         * XMM128, XMM64.
    75267531         */
     7532        IEM_MC_BEGIN(0, 2);
    75277533        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fSse2);
    7528         IEM_MC_BEGIN(0, 2);
    75297534        IEM_MC_LOCAL(uint64_t,                  uSrc);
    75307535
     
    75757580        /** @todo testcase: REX.B / REX.R and MMX register indexing. Ignored? */
    75767581        /** @todo testcase: REX.B / REX.R and segment register indexing. Ignored? */
     7582        IEM_MC_BEGIN(0, 1);
    75777583        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fMmx);
    7578         IEM_MC_BEGIN(0, 1);
    75797584        IEM_MC_LOCAL(uint64_t, u64Tmp);
    75807585        IEM_MC_MAYBE_RAISE_MMX_RELATED_XCPT();
     
    76217626         * XMM, XMM.
    76227627         */
     7628        IEM_MC_BEGIN(0, 0);
    76237629        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fSse2);
    7624         IEM_MC_BEGIN(0, 0);
    76257630        IEM_MC_MAYBE_RAISE_SSE_RELATED_XCPT();
    76267631        IEM_MC_ACTUALIZE_SSE_STATE_FOR_CHANGE();
     
    76627667         * XMM, XMM.
    76637668         */
     7669        IEM_MC_BEGIN(0, 0);
    76647670        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fSse2);
    7665         IEM_MC_BEGIN(0, 0);
    76667671        IEM_MC_MAYBE_RAISE_SSE_RELATED_XCPT();
    76677672        IEM_MC_ACTUALIZE_SSE_STATE_FOR_CHANGE();
     
    77067711    {
    77077712        int16_t i16Imm; IEM_OPCODE_GET_NEXT_S16(&i16Imm);
     7713        IEM_MC_BEGIN(0, 0);
    77087714        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    7709 
    7710         IEM_MC_BEGIN(0, 0);
    77117715        IEM_MC_IF_EFL_BIT_SET(X86_EFL_OF) {
    77127716            IEM_MC_REL_JMP_S16_AND_FINISH(i16Imm);
     
    77197723    {
    77207724        int32_t i32Imm; IEM_OPCODE_GET_NEXT_S32(&i32Imm);
     7725        IEM_MC_BEGIN(0, 0);
    77217726        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    7722 
    7723         IEM_MC_BEGIN(0, 0);
    77247727        IEM_MC_IF_EFL_BIT_SET(X86_EFL_OF) {
    77257728            IEM_MC_REL_JMP_S32_AND_FINISH(i32Imm);
     
    77417744    {
    77427745        int16_t i16Imm; IEM_OPCODE_GET_NEXT_S16(&i16Imm);
     7746        IEM_MC_BEGIN(0, 0);
    77437747        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    7744 
    7745         IEM_MC_BEGIN(0, 0);
    77467748        IEM_MC_IF_EFL_BIT_SET(X86_EFL_OF) {
    77477749            IEM_MC_ADVANCE_RIP_AND_FINISH();
     
    77547756    {
    77557757        int32_t i32Imm; IEM_OPCODE_GET_NEXT_S32(&i32Imm);
     7758        IEM_MC_BEGIN(0, 0);
    77567759        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    7757 
    7758         IEM_MC_BEGIN(0, 0);
    77597760        IEM_MC_IF_EFL_BIT_SET(X86_EFL_OF) {
    77607761            IEM_MC_ADVANCE_RIP_AND_FINISH();
     
    77767777    {
    77777778        int16_t i16Imm; IEM_OPCODE_GET_NEXT_S16(&i16Imm);
     7779        IEM_MC_BEGIN(0, 0);
    77787780        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    7779 
    7780         IEM_MC_BEGIN(0, 0);
    77817781        IEM_MC_IF_EFL_BIT_SET(X86_EFL_CF) {
    77827782            IEM_MC_REL_JMP_S16_AND_FINISH(i16Imm);
     
    77897789    {
    77907790        int32_t i32Imm; IEM_OPCODE_GET_NEXT_S32(&i32Imm);
     7791        IEM_MC_BEGIN(0, 0);
    77917792        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    7792 
    7793         IEM_MC_BEGIN(0, 0);
    77947793        IEM_MC_IF_EFL_BIT_SET(X86_EFL_CF) {
    77957794            IEM_MC_REL_JMP_S32_AND_FINISH(i32Imm);
     
    78117810    {
    78127811        int16_t i16Imm; IEM_OPCODE_GET_NEXT_S16(&i16Imm);
     7812        IEM_MC_BEGIN(0, 0);
    78137813        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    7814 
    7815         IEM_MC_BEGIN(0, 0);
    78167814        IEM_MC_IF_EFL_BIT_SET(X86_EFL_CF) {
    78177815            IEM_MC_ADVANCE_RIP_AND_FINISH();
     
    78247822    {
    78257823        int32_t i32Imm; IEM_OPCODE_GET_NEXT_S32(&i32Imm);
     7824        IEM_MC_BEGIN(0, 0);
    78267825        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    7827 
    7828         IEM_MC_BEGIN(0, 0);
    78297826        IEM_MC_IF_EFL_BIT_SET(X86_EFL_CF) {
    78307827            IEM_MC_ADVANCE_RIP_AND_FINISH();
     
    78467843    {
    78477844        int16_t i16Imm; IEM_OPCODE_GET_NEXT_S16(&i16Imm);
     7845        IEM_MC_BEGIN(0, 0);
    78487846        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    7849 
    7850         IEM_MC_BEGIN(0, 0);
    78517847        IEM_MC_IF_EFL_BIT_SET(X86_EFL_ZF) {
    78527848            IEM_MC_REL_JMP_S16_AND_FINISH(i16Imm);
     
    78597855    {
    78607856        int32_t i32Imm; IEM_OPCODE_GET_NEXT_S32(&i32Imm);
     7857        IEM_MC_BEGIN(0, 0);
    78617858        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    7862 
    7863         IEM_MC_BEGIN(0, 0);
    78647859        IEM_MC_IF_EFL_BIT_SET(X86_EFL_ZF) {
    78657860            IEM_MC_REL_JMP_S32_AND_FINISH(i32Imm);
     
    78817876    {
    78827877        int16_t i16Imm; IEM_OPCODE_GET_NEXT_S16(&i16Imm);
     7878        IEM_MC_BEGIN(0, 0);
    78837879        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    7884 
    7885         IEM_MC_BEGIN(0, 0);
    78867880        IEM_MC_IF_EFL_BIT_SET(X86_EFL_ZF) {
    78877881            IEM_MC_ADVANCE_RIP_AND_FINISH();
     
    78947888    {
    78957889        int32_t i32Imm; IEM_OPCODE_GET_NEXT_S32(&i32Imm);
     7890        IEM_MC_BEGIN(0, 0);
    78967891        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    7897 
    7898         IEM_MC_BEGIN(0, 0);
    78997892        IEM_MC_IF_EFL_BIT_SET(X86_EFL_ZF) {
    79007893            IEM_MC_ADVANCE_RIP_AND_FINISH();
     
    79167909    {
    79177910        int16_t i16Imm; IEM_OPCODE_GET_NEXT_S16(&i16Imm);
     7911        IEM_MC_BEGIN(0, 0);
    79187912        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    7919 
    7920         IEM_MC_BEGIN(0, 0);
    79217913        IEM_MC_IF_EFL_ANY_BITS_SET(X86_EFL_CF | X86_EFL_ZF) {
    79227914            IEM_MC_REL_JMP_S16_AND_FINISH(i16Imm);
     
    79297921    {
    79307922        int32_t i32Imm; IEM_OPCODE_GET_NEXT_S32(&i32Imm);
     7923        IEM_MC_BEGIN(0, 0);
    79317924        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    7932 
    7933         IEM_MC_BEGIN(0, 0);
    79347925        IEM_MC_IF_EFL_ANY_BITS_SET(X86_EFL_CF | X86_EFL_ZF) {
    79357926            IEM_MC_REL_JMP_S32_AND_FINISH(i32Imm);
     
    79517942    {
    79527943        int16_t i16Imm; IEM_OPCODE_GET_NEXT_S16(&i16Imm);
     7944        IEM_MC_BEGIN(0, 0);
    79537945        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    7954 
    7955         IEM_MC_BEGIN(0, 0);
    79567946        IEM_MC_IF_EFL_ANY_BITS_SET(X86_EFL_CF | X86_EFL_ZF) {
    79577947            IEM_MC_ADVANCE_RIP_AND_FINISH();
     
    79647954    {
    79657955        int32_t i32Imm; IEM_OPCODE_GET_NEXT_S32(&i32Imm);
     7956        IEM_MC_BEGIN(0, 0);
    79667957        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    7967 
    7968         IEM_MC_BEGIN(0, 0);
    79697958        IEM_MC_IF_EFL_ANY_BITS_SET(X86_EFL_CF | X86_EFL_ZF) {
    79707959            IEM_MC_ADVANCE_RIP_AND_FINISH();
     
    79867975    {
    79877976        int16_t i16Imm; IEM_OPCODE_GET_NEXT_S16(&i16Imm);
     7977        IEM_MC_BEGIN(0, 0);
    79887978        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    7989 
    7990         IEM_MC_BEGIN(0, 0);
    79917979        IEM_MC_IF_EFL_BIT_SET(X86_EFL_SF) {
    79927980            IEM_MC_REL_JMP_S16_AND_FINISH(i16Imm);
     
    79997987    {
    80007988        int32_t i32Imm; IEM_OPCODE_GET_NEXT_S32(&i32Imm);
     7989        IEM_MC_BEGIN(0, 0);
    80017990        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    8002 
    8003         IEM_MC_BEGIN(0, 0);
    80047991        IEM_MC_IF_EFL_BIT_SET(X86_EFL_SF) {
    80057992            IEM_MC_REL_JMP_S32_AND_FINISH(i32Imm);
     
    80218008    {
    80228009        int16_t i16Imm; IEM_OPCODE_GET_NEXT_S16(&i16Imm);
     8010        IEM_MC_BEGIN(0, 0);
    80238011        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    8024 
    8025         IEM_MC_BEGIN(0, 0);
    80268012        IEM_MC_IF_EFL_BIT_SET(X86_EFL_SF) {
    80278013            IEM_MC_ADVANCE_RIP_AND_FINISH();
     
    80348020    {
    80358021        int32_t i32Imm; IEM_OPCODE_GET_NEXT_S32(&i32Imm);
     8022        IEM_MC_BEGIN(0, 0);
    80368023        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    8037 
    8038         IEM_MC_BEGIN(0, 0);
    80398024        IEM_MC_IF_EFL_BIT_SET(X86_EFL_SF) {
    80408025            IEM_MC_ADVANCE_RIP_AND_FINISH();
     
    80568041    {
    80578042        int16_t i16Imm; IEM_OPCODE_GET_NEXT_S16(&i16Imm);
     8043        IEM_MC_BEGIN(0, 0);
    80588044        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    8059 
    8060         IEM_MC_BEGIN(0, 0);
    80618045        IEM_MC_IF_EFL_BIT_SET(X86_EFL_PF) {
    80628046            IEM_MC_REL_JMP_S16_AND_FINISH(i16Imm);
     
    80698053    {
    80708054        int32_t i32Imm; IEM_OPCODE_GET_NEXT_S32(&i32Imm);
     8055        IEM_MC_BEGIN(0, 0);
    80718056        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    8072 
    8073         IEM_MC_BEGIN(0, 0);
    80748057        IEM_MC_IF_EFL_BIT_SET(X86_EFL_PF) {
    80758058            IEM_MC_REL_JMP_S32_AND_FINISH(i32Imm);
     
    80918074    {
    80928075        int16_t i16Imm; IEM_OPCODE_GET_NEXT_S16(&i16Imm);
     8076        IEM_MC_BEGIN(0, 0);
    80938077        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    8094 
    8095         IEM_MC_BEGIN(0, 0);
    80968078        IEM_MC_IF_EFL_BIT_SET(X86_EFL_PF) {
    80978079            IEM_MC_ADVANCE_RIP_AND_FINISH();
     
    81048086    {
    81058087        int32_t i32Imm; IEM_OPCODE_GET_NEXT_S32(&i32Imm);
     8088        IEM_MC_BEGIN(0, 0);
    81068089        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    8107 
    8108         IEM_MC_BEGIN(0, 0);
    81098090        IEM_MC_IF_EFL_BIT_SET(X86_EFL_PF) {
    81108091            IEM_MC_ADVANCE_RIP_AND_FINISH();
     
    81268107    {
    81278108        int16_t i16Imm; IEM_OPCODE_GET_NEXT_S16(&i16Imm);
     8109        IEM_MC_BEGIN(0, 0);
    81288110        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    8129 
    8130         IEM_MC_BEGIN(0, 0);
    81318111        IEM_MC_IF_EFL_BITS_NE(X86_EFL_SF, X86_EFL_OF) {
    81328112            IEM_MC_REL_JMP_S16_AND_FINISH(i16Imm);
     
    81398119    {
    81408120        int32_t i32Imm; IEM_OPCODE_GET_NEXT_S32(&i32Imm);
     8121        IEM_MC_BEGIN(0, 0);
    81418122        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    8142 
    8143         IEM_MC_BEGIN(0, 0);
    81448123        IEM_MC_IF_EFL_BITS_NE(X86_EFL_SF, X86_EFL_OF) {
    81458124            IEM_MC_REL_JMP_S32_AND_FINISH(i32Imm);
     
    81618140    {
    81628141        int16_t i16Imm; IEM_OPCODE_GET_NEXT_S16(&i16Imm);
     8142        IEM_MC_BEGIN(0, 0);
    81638143        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    8164 
    8165         IEM_MC_BEGIN(0, 0);
    81668144        IEM_MC_IF_EFL_BITS_NE(X86_EFL_SF, X86_EFL_OF) {
    81678145            IEM_MC_ADVANCE_RIP_AND_FINISH();
     
    81748152    {
    81758153        int32_t i32Imm; IEM_OPCODE_GET_NEXT_S32(&i32Imm);
     8154        IEM_MC_BEGIN(0, 0);
    81768155        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    8177 
    8178         IEM_MC_BEGIN(0, 0);
    81798156        IEM_MC_IF_EFL_BITS_NE(X86_EFL_SF, X86_EFL_OF) {
    81808157            IEM_MC_ADVANCE_RIP_AND_FINISH();
     
    81968173    {
    81978174        int16_t i16Imm; IEM_OPCODE_GET_NEXT_S16(&i16Imm);
     8175        IEM_MC_BEGIN(0, 0);
    81988176        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    8199 
    8200         IEM_MC_BEGIN(0, 0);
    82018177        IEM_MC_IF_EFL_BIT_SET_OR_BITS_NE(X86_EFL_ZF, X86_EFL_SF, X86_EFL_OF) {
    82028178            IEM_MC_REL_JMP_S16_AND_FINISH(i16Imm);
     
    82098185    {
    82108186        int32_t i32Imm; IEM_OPCODE_GET_NEXT_S32(&i32Imm);
     8187        IEM_MC_BEGIN(0, 0);
    82118188        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    8212 
    8213         IEM_MC_BEGIN(0, 0);
    82148189        IEM_MC_IF_EFL_BIT_SET_OR_BITS_NE(X86_EFL_ZF, X86_EFL_SF, X86_EFL_OF) {
    82158190            IEM_MC_REL_JMP_S32_AND_FINISH(i32Imm);
     
    82318206    {
    82328207        int16_t i16Imm; IEM_OPCODE_GET_NEXT_S16(&i16Imm);
     8208        IEM_MC_BEGIN(0, 0);
    82338209        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    8234 
    8235         IEM_MC_BEGIN(0, 0);
    82368210        IEM_MC_IF_EFL_BIT_SET_OR_BITS_NE(X86_EFL_ZF, X86_EFL_SF, X86_EFL_OF) {
    82378211            IEM_MC_ADVANCE_RIP_AND_FINISH();
     
    82448218    {
    82458219        int32_t i32Imm; IEM_OPCODE_GET_NEXT_S32(&i32Imm);
     8220        IEM_MC_BEGIN(0, 0);
    82468221        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    8247 
    8248         IEM_MC_BEGIN(0, 0);
    82498222        IEM_MC_IF_EFL_BIT_SET_OR_BITS_NE(X86_EFL_ZF, X86_EFL_SF, X86_EFL_OF) {
    82508223            IEM_MC_ADVANCE_RIP_AND_FINISH();
     
    82708243    {
    82718244        /* register target */
     8245        IEM_MC_BEGIN(0, 0);
    82728246        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    8273         IEM_MC_BEGIN(0, 0);
    82748247        IEM_MC_IF_EFL_BIT_SET(X86_EFL_OF) {
    82758248            IEM_MC_STORE_GREG_U8_CONST(IEM_GET_MODRM_RM(pVCpu, bRm), 1);
     
    83118284    {
    83128285        /* register target */
     8286        IEM_MC_BEGIN(0, 0);
    83138287        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    8314         IEM_MC_BEGIN(0, 0);
    83158288        IEM_MC_IF_EFL_BIT_SET(X86_EFL_OF) {
    83168289            IEM_MC_STORE_GREG_U8_CONST(IEM_GET_MODRM_RM(pVCpu, bRm), 0);
     
    83528325    {
    83538326        /* register target */
     8327        IEM_MC_BEGIN(0, 0);
    83548328        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    8355         IEM_MC_BEGIN(0, 0);
    83568329        IEM_MC_IF_EFL_BIT_SET(X86_EFL_CF) {
    83578330            IEM_MC_STORE_GREG_U8_CONST(IEM_GET_MODRM_RM(pVCpu, bRm), 1);
     
    83938366    {
    83948367        /* register target */
     8368        IEM_MC_BEGIN(0, 0);
    83958369        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    8396         IEM_MC_BEGIN(0, 0);
    83978370        IEM_MC_IF_EFL_BIT_SET(X86_EFL_CF) {
    83988371            IEM_MC_STORE_GREG_U8_CONST(IEM_GET_MODRM_RM(pVCpu, bRm), 0);
     
    84348407    {
    84358408        /* register target */
     8409        IEM_MC_BEGIN(0, 0);
    84368410        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    8437         IEM_MC_BEGIN(0, 0);
    84388411        IEM_MC_IF_EFL_BIT_SET(X86_EFL_ZF) {
    84398412            IEM_MC_STORE_GREG_U8_CONST(IEM_GET_MODRM_RM(pVCpu, bRm), 1);
     
    84758448    {
    84768449        /* register target */
     8450        IEM_MC_BEGIN(0, 0);
    84778451        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    8478         IEM_MC_BEGIN(0, 0);
    84798452        IEM_MC_IF_EFL_BIT_SET(X86_EFL_ZF) {
    84808453            IEM_MC_STORE_GREG_U8_CONST(IEM_GET_MODRM_RM(pVCpu, bRm), 0);
     
    85168489    {
    85178490        /* register target */
     8491        IEM_MC_BEGIN(0, 0);
    85188492        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    8519         IEM_MC_BEGIN(0, 0);
    85208493        IEM_MC_IF_EFL_ANY_BITS_SET(X86_EFL_CF | X86_EFL_ZF) {
    85218494            IEM_MC_STORE_GREG_U8_CONST(IEM_GET_MODRM_RM(pVCpu, bRm), 1);
     
    85578530    {
    85588531        /* register target */
     8532        IEM_MC_BEGIN(0, 0);
    85598533        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    8560         IEM_MC_BEGIN(0, 0);
    85618534        IEM_MC_IF_EFL_ANY_BITS_SET(X86_EFL_CF | X86_EFL_ZF) {
    85628535            IEM_MC_STORE_GREG_U8_CONST(IEM_GET_MODRM_RM(pVCpu, bRm), 0);
     
    85988571    {
    85998572        /* register target */
     8573        IEM_MC_BEGIN(0, 0);
    86008574        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    8601         IEM_MC_BEGIN(0, 0);
    86028575        IEM_MC_IF_EFL_BIT_SET(X86_EFL_SF) {
    86038576            IEM_MC_STORE_GREG_U8_CONST(IEM_GET_MODRM_RM(pVCpu, bRm), 1);
     
    86398612    {
    86408613        /* register target */
     8614        IEM_MC_BEGIN(0, 0);
    86418615        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    8642         IEM_MC_BEGIN(0, 0);
    86438616        IEM_MC_IF_EFL_BIT_SET(X86_EFL_SF) {
    86448617            IEM_MC_STORE_GREG_U8_CONST(IEM_GET_MODRM_RM(pVCpu, bRm), 0);
     
    86808653    {
    86818654        /* register target */
     8655        IEM_MC_BEGIN(0, 0);
    86828656        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    8683         IEM_MC_BEGIN(0, 0);
    86848657        IEM_MC_IF_EFL_BIT_SET(X86_EFL_PF) {
    86858658            IEM_MC_STORE_GREG_U8_CONST(IEM_GET_MODRM_RM(pVCpu, bRm), 1);
     
    87218694    {
    87228695        /* register target */
     8696        IEM_MC_BEGIN(0, 0);
    87238697        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    8724         IEM_MC_BEGIN(0, 0);
    87258698        IEM_MC_IF_EFL_BIT_SET(X86_EFL_PF) {
    87268699            IEM_MC_STORE_GREG_U8_CONST(IEM_GET_MODRM_RM(pVCpu, bRm), 0);
     
    87628735    {
    87638736        /* register target */
     8737        IEM_MC_BEGIN(0, 0);
    87648738        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    8765         IEM_MC_BEGIN(0, 0);
    87668739        IEM_MC_IF_EFL_BITS_NE(X86_EFL_SF, X86_EFL_OF) {
    87678740            IEM_MC_STORE_GREG_U8_CONST(IEM_GET_MODRM_RM(pVCpu, bRm), 1);
     
    88038776    {
    88048777        /* register target */
     8778        IEM_MC_BEGIN(0, 0);
    88058779        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    8806         IEM_MC_BEGIN(0, 0);
    88078780        IEM_MC_IF_EFL_BITS_NE(X86_EFL_SF, X86_EFL_OF) {
    88088781            IEM_MC_STORE_GREG_U8_CONST(IEM_GET_MODRM_RM(pVCpu, bRm), 0);
     
    88448817    {
    88458818        /* register target */
     8819        IEM_MC_BEGIN(0, 0);
    88468820        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    8847         IEM_MC_BEGIN(0, 0);
    88488821        IEM_MC_IF_EFL_BIT_SET_OR_BITS_NE(X86_EFL_ZF, X86_EFL_SF, X86_EFL_OF) {
    88498822            IEM_MC_STORE_GREG_U8_CONST(IEM_GET_MODRM_RM(pVCpu, bRm), 1);
     
    88858858    {
    88868859        /* register target */
     8860        IEM_MC_BEGIN(0, 0);
    88878861        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    8888         IEM_MC_BEGIN(0, 0);
    88898862        IEM_MC_IF_EFL_BIT_SET_OR_BITS_NE(X86_EFL_ZF, X86_EFL_SF, X86_EFL_OF) {
    88908863            IEM_MC_STORE_GREG_U8_CONST(IEM_GET_MODRM_RM(pVCpu, bRm), 0);
     
    89188891FNIEMOP_DEF_1(iemOpCommonPushSReg, uint8_t, iReg)
    89198892{
    8920     IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    89218893    Assert(iReg < X86_SREG_FS || !IEM_IS_64BIT_CODE(pVCpu));
    89228894    IEMOP_HLP_DEFAULT_64BIT_OP_SIZE();
     
    89268898        case IEMMODE_16BIT:
    89278899            IEM_MC_BEGIN(0, 1);
     8900            IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    89288901            IEM_MC_LOCAL(uint16_t, u16Value);
    89298902            IEM_MC_FETCH_SREG_U16(u16Value, iReg);
     
    89358908        case IEMMODE_32BIT:
    89368909            IEM_MC_BEGIN(0, 1);
     8910            IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    89378911            IEM_MC_LOCAL(uint32_t, u32Value);
    89388912            IEM_MC_FETCH_SREG_ZX_U32(u32Value, iReg);
     
    89448918        case IEMMODE_64BIT:
    89458919            IEM_MC_BEGIN(0, 1);
     8920            IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    89468921            IEM_MC_LOCAL(uint64_t, u64Value);
    89478922            IEM_MC_FETCH_SREG_ZX_U64(u64Value, iReg);
     
    89978972    { \
    89988973        /* register destination. */ \
    8999         IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); \
    90008974        switch (pVCpu->iem.s.enmEffOpSize) \
    90018975        { \
    90028976            case IEMMODE_16BIT: \
    90038977                IEM_MC_BEGIN(3, 0); \
     8978                IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); \
    90048979                IEM_MC_ARG(uint16_t *,      pu16Dst,                0); \
    90058980                IEM_MC_ARG(uint16_t,        u16Src,                 1); \
     
    90188993            case IEMMODE_32BIT: \
    90198994                IEM_MC_BEGIN(3, 0); \
     8995                IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); \
    90208996                IEM_MC_ARG(uint32_t *,      pu32Dst,                0); \
    90218997                IEM_MC_ARG(uint32_t,        u32Src,                 1); \
     
    90359011            case IEMMODE_64BIT: \
    90369012                IEM_MC_BEGIN(3, 0); \
     9013                IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); \
    90379014                IEM_MC_ARG(uint64_t *,      pu64Dst,                0); \
    90389015                IEM_MC_ARG(uint64_t,        u64Src,                 1); \
     
    92679244    {
    92689245        uint8_t cShift; IEM_OPCODE_GET_NEXT_U8(&cShift);
    9269         IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    92709246
    92719247        switch (pVCpu->iem.s.enmEffOpSize)
     
    92739249            case IEMMODE_16BIT:
    92749250                IEM_MC_BEGIN(4, 0);
     9251                IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    92759252                IEM_MC_ARG(uint16_t *,      pu16Dst,                0);
    92769253                IEM_MC_ARG(uint16_t,        u16Src,                 1);
     
    92899266            case IEMMODE_32BIT:
    92909267                IEM_MC_BEGIN(4, 0);
     9268                IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    92919269                IEM_MC_ARG(uint32_t *,      pu32Dst,                0);
    92929270                IEM_MC_ARG(uint32_t,        u32Src,                 1);
     
    93069284            case IEMMODE_64BIT:
    93079285                IEM_MC_BEGIN(4, 0);
     9286                IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    93089287                IEM_MC_ARG(uint64_t *,      pu64Dst,                0);
    93099288                IEM_MC_ARG(uint64_t,        u64Src,                 1);
     
    94129391    if (IEM_IS_MODRM_REG_MODE(bRm))
    94139392    {
    9414         IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    9415 
    94169393        switch (pVCpu->iem.s.enmEffOpSize)
    94179394        {
    94189395            case IEMMODE_16BIT:
    94199396                IEM_MC_BEGIN(4, 0);
     9397                IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    94209398                IEM_MC_ARG(uint16_t *,      pu16Dst,                0);
    94219399                IEM_MC_ARG(uint16_t,        u16Src,                 1);
     
    94359413            case IEMMODE_32BIT:
    94369414                IEM_MC_BEGIN(4, 0);
     9415                IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    94379416                IEM_MC_ARG(uint32_t *,      pu32Dst,                0);
    94389417                IEM_MC_ARG(uint32_t,        u32Src,                 1);
     
    94539432            case IEMMODE_64BIT:
    94549433                IEM_MC_BEGIN(4, 0);
     9434                IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    94559435                IEM_MC_ARG(uint64_t *,      pu64Dst,                0);
    94569436                IEM_MC_ARG(uint64_t,        u64Src,                 1);
     
    98499829    RT_NOREF_PV(bRm);
    98509830    IEMOP_MNEMONIC(lfence, "lfence");
    9851     IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    9852     if (!IEM_GET_GUEST_CPU_FEATURES(pVCpu)->fSse2)
    9853         IEMOP_RAISE_INVALID_OPCODE_RET();
    9854 
    98559831    IEM_MC_BEGIN(0, 0);
     9832    IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fSse2);
    98569833#ifdef RT_ARCH_ARM64
    98579834    IEM_MC_CALL_VOID_AIMPL_0(iemAImpl_lfence);
     
    98729849    RT_NOREF_PV(bRm);
    98739850    IEMOP_MNEMONIC(mfence, "mfence");
    9874     IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    9875     if (!IEM_GET_GUEST_CPU_FEATURES(pVCpu)->fSse2)
    9876         IEMOP_RAISE_INVALID_OPCODE_RET();
    9877 
    98789851    IEM_MC_BEGIN(0, 0);
     9852    IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fSse2);
    98799853#ifdef RT_ARCH_ARM64
    98809854    IEM_MC_CALL_VOID_AIMPL_0(iemAImpl_mfence);
     
    98959869    RT_NOREF_PV(bRm);
    98969870    IEMOP_MNEMONIC(sfence, "sfence");
    9897     IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    9898     if (!IEM_GET_GUEST_CPU_FEATURES(pVCpu)->fSse2)
    9899         IEMOP_RAISE_INVALID_OPCODE_RET();
    9900 
    99019871    IEM_MC_BEGIN(0, 0);
     9872    IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fSse2);
    99029873#ifdef RT_ARCH_ARM64
    99039874    IEM_MC_CALL_VOID_AIMPL_0(iemAImpl_sfence);
     
    99179888{
    99189889    IEMOP_MNEMONIC(rdfsbase, "rdfsbase Ry");
    9919     IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fFsGsBase);
    99209890    if (pVCpu->iem.s.enmEffOpSize == IEMMODE_64BIT)
    99219891    {
    99229892        IEM_MC_BEGIN(1, 0);
     9893        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fFsGsBase);
    99239894        IEM_MC_MAYBE_RAISE_FSGSBASE_XCPT();
    99249895        IEM_MC_ARG(uint64_t, u64Dst, 0);
     
    99319902    {
    99329903        IEM_MC_BEGIN(1, 0);
     9904        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fFsGsBase);
    99339905        IEM_MC_MAYBE_RAISE_FSGSBASE_XCPT();
    99349906        IEM_MC_ARG(uint32_t, u32Dst, 0);
     
    99459917{
    99469918    IEMOP_MNEMONIC(rdgsbase, "rdgsbase Ry");
    9947     IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fFsGsBase);
    99489919    if (pVCpu->iem.s.enmEffOpSize == IEMMODE_64BIT)
    99499920    {
    99509921        IEM_MC_BEGIN(1, 0);
     9922        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fFsGsBase);
    99519923        IEM_MC_MAYBE_RAISE_FSGSBASE_XCPT();
    99529924        IEM_MC_ARG(uint64_t, u64Dst, 0);
     
    99599931    {
    99609932        IEM_MC_BEGIN(1, 0);
     9933        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fFsGsBase);
    99619934        IEM_MC_MAYBE_RAISE_FSGSBASE_XCPT();
    99629935        IEM_MC_ARG(uint32_t, u32Dst, 0);
     
    99739946{
    99749947    IEMOP_MNEMONIC(wrfsbase, "wrfsbase Ry");
    9975     IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fFsGsBase);
    99769948    if (pVCpu->iem.s.enmEffOpSize == IEMMODE_64BIT)
    99779949    {
    99789950        IEM_MC_BEGIN(1, 0);
     9951        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fFsGsBase);
    99799952        IEM_MC_MAYBE_RAISE_FSGSBASE_XCPT();
    99809953        IEM_MC_ARG(uint64_t, u64Dst, 0);
     
    99889961    {
    99899962        IEM_MC_BEGIN(1, 0);
     9963        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fFsGsBase);
    99909964        IEM_MC_MAYBE_RAISE_FSGSBASE_XCPT();
    99919965        IEM_MC_ARG(uint32_t, u32Dst, 0);
     
    100029976{
    100039977    IEMOP_MNEMONIC(wrgsbase, "wrgsbase Ry");
    10004     IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fFsGsBase);
    100059978    if (pVCpu->iem.s.enmEffOpSize == IEMMODE_64BIT)
    100069979    {
    100079980        IEM_MC_BEGIN(1, 0);
     9981        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fFsGsBase);
    100089982        IEM_MC_MAYBE_RAISE_FSGSBASE_XCPT();
    100099983        IEM_MC_ARG(uint64_t, u64Dst, 0);
     
    100179991    {
    100189992        IEM_MC_BEGIN(1, 0);
     9993        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fFsGsBase);
    100199994        IEM_MC_MAYBE_RAISE_FSGSBASE_XCPT();
    100209995        IEM_MC_ARG(uint32_t, u32Dst, 0);
     
    1009610071    if (IEM_IS_MODRM_REG_MODE(bRm))
    1009710072    {
     10073        IEM_MC_BEGIN(4, 0);
    1009810074        IEMOP_HLP_DONE_DECODING();
    10099         IEM_MC_BEGIN(4, 0);
    1010010075        IEM_MC_ARG(uint8_t *,       pu8Dst,                 0);
    1010110076        IEM_MC_ARG(uint8_t *,       pu8Al,                  1);
     
    1015410129    if (IEM_IS_MODRM_REG_MODE(bRm))
    1015510130    {
    10156         IEMOP_HLP_DONE_DECODING();
    1015710131        switch (pVCpu->iem.s.enmEffOpSize)
    1015810132        {
    1015910133            case IEMMODE_16BIT:
    1016010134                IEM_MC_BEGIN(4, 0);
     10135                IEMOP_HLP_DONE_DECODING();
    1016110136                IEM_MC_ARG(uint16_t *,      pu16Dst,                0);
    1016210137                IEM_MC_ARG(uint16_t *,      pu16Ax,                 1);
     
    1017910154            case IEMMODE_32BIT:
    1018010155                IEM_MC_BEGIN(4, 0);
     10156                IEMOP_HLP_DONE_DECODING();
    1018110157                IEM_MC_ARG(uint32_t *,      pu32Dst,                0);
    1018210158                IEM_MC_ARG(uint32_t *,      pu32Eax,                1);
     
    1020510181            case IEMMODE_64BIT:
    1020610182                IEM_MC_BEGIN(4, 0);
     10183                IEMOP_HLP_DONE_DECODING();
    1020710184                IEM_MC_ARG(uint64_t *,      pu64Dst,                0);
    1020810185                IEM_MC_ARG(uint64_t *,      pu64Rax,                1);
     
    1047310450    if (IEM_IS_MODRM_REG_MODE(bRm))
    1047410451    {
    10475         IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    1047610452        switch (pVCpu->iem.s.enmEffOpSize)
    1047710453        {
    1047810454            case IEMMODE_16BIT:
    1047910455                IEM_MC_BEGIN(0, 1);
     10456                IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    1048010457                IEM_MC_LOCAL(uint16_t, u16Value);
    1048110458                IEM_MC_FETCH_GREG_U8_ZX_U16(u16Value, IEM_GET_MODRM_RM(pVCpu, bRm));
     
    1048710464            case IEMMODE_32BIT:
    1048810465                IEM_MC_BEGIN(0, 1);
     10466                IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    1048910467                IEM_MC_LOCAL(uint32_t, u32Value);
    1049010468                IEM_MC_FETCH_GREG_U8_ZX_U32(u32Value, IEM_GET_MODRM_RM(pVCpu, bRm));
     
    1049610474            case IEMMODE_64BIT:
    1049710475                IEM_MC_BEGIN(0, 1);
     10476                IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    1049810477                IEM_MC_LOCAL(uint64_t, u64Value);
    1049910478                IEM_MC_FETCH_GREG_U8_ZX_U64(u64Value, IEM_GET_MODRM_RM(pVCpu, bRm));
     
    1057110550    if (IEM_IS_MODRM_REG_MODE(bRm))
    1057210551    {
    10573         IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    1057410552        if (pVCpu->iem.s.enmEffOpSize != IEMMODE_64BIT)
    1057510553        {
    1057610554            IEM_MC_BEGIN(0, 1);
     10555            IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    1057710556            IEM_MC_LOCAL(uint32_t, u32Value);
    1057810557            IEM_MC_FETCH_GREG_U16_ZX_U32(u32Value, IEM_GET_MODRM_RM(pVCpu, bRm));
     
    1058410563        {
    1058510564            IEM_MC_BEGIN(0, 1);
     10565            IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    1058610566            IEM_MC_LOCAL(uint64_t, u64Value);
    1058710567            IEM_MC_FETCH_GREG_U16_ZX_U64(u64Value, IEM_GET_MODRM_RM(pVCpu, bRm));
     
    1067410654        /* register destination. */ \
    1067510655        uint8_t bImm; IEM_OPCODE_GET_NEXT_U8(&bImm); \
    10676         IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); \
    1067710656        \
    1067810657        switch (pVCpu->iem.s.enmEffOpSize) \
     
    1068010659            case IEMMODE_16BIT: \
    1068110660                IEM_MC_BEGIN(3, 0); \
     10661                IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); \
    1068210662                IEM_MC_ARG(uint16_t *,      pu16Dst,                    0); \
    1068310663                IEM_MC_ARG_CONST(uint16_t,  u16Src, /*=*/ bImm & 0x0f,  1); \
     
    1069410674            case IEMMODE_32BIT: \
    1069510675                IEM_MC_BEGIN(3, 0); \
     10676                IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); \
    1069610677                IEM_MC_ARG(uint32_t *,      pu32Dst,                    0); \
    1069710678                IEM_MC_ARG_CONST(uint32_t,  u32Src, /*=*/ bImm & 0x1f,  1); \
     
    1070910690            case IEMMODE_64BIT: \
    1071010691                IEM_MC_BEGIN(3, 0); \
     10692                IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); \
    1071110693                IEM_MC_ARG(uint64_t *,      pu64Dst,                    0); \
    1071210694                IEM_MC_ARG_CONST(uint64_t,  u64Src, /*=*/ bImm & 0x3f,  1); \
     
    1096710949    if (IEM_IS_MODRM_REG_MODE(bRm))
    1096810950    {
    10969         IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    1097010951        switch (pVCpu->iem.s.enmEffOpSize)
    1097110952        {
    1097210953            case IEMMODE_16BIT:
    1097310954                IEM_MC_BEGIN(3, 0);
     10955                IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    1097410956                IEM_MC_ARG(uint16_t *, pu16Dst, 0);
    1097510957                IEM_MC_ARG(uint16_t,   u16Src,  1);
     
    1098710969            case IEMMODE_32BIT:
    1098810970                IEM_MC_BEGIN(3, 0);
     10971                IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    1098910972                IEM_MC_ARG(uint32_t *, pu32Dst, 0);
    1099010973                IEM_MC_ARG(uint32_t,   u32Src,  1);
     
    1100410987            case IEMMODE_64BIT:
    1100510988                IEM_MC_BEGIN(3, 0);
     10989                IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    1100610990                IEM_MC_ARG(uint64_t *, pu64Dst, 0);
    1100710991                IEM_MC_ARG(uint64_t,   u64Src,  1);
     
    1117811162    if (IEM_IS_MODRM_REG_MODE(bRm))
    1117911163    {
    11180         IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    1118111164        switch (pVCpu->iem.s.enmEffOpSize)
    1118211165        {
    1118311166            case IEMMODE_16BIT:
    1118411167                IEM_MC_BEGIN(0, 1);
     11168                IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    1118511169                IEM_MC_LOCAL(uint16_t, u16Value);
    1118611170                IEM_MC_FETCH_GREG_U8_SX_U16(u16Value, IEM_GET_MODRM_RM(pVCpu, bRm));
     
    1119211176            case IEMMODE_32BIT:
    1119311177                IEM_MC_BEGIN(0, 1);
     11178                IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    1119411179                IEM_MC_LOCAL(uint32_t, u32Value);
    1119511180                IEM_MC_FETCH_GREG_U8_SX_U32(u32Value, IEM_GET_MODRM_RM(pVCpu, bRm));
     
    1120111186            case IEMMODE_64BIT:
    1120211187                IEM_MC_BEGIN(0, 1);
     11188                IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    1120311189                IEM_MC_LOCAL(uint64_t, u64Value);
    1120411190                IEM_MC_FETCH_GREG_U8_SX_U64(u64Value, IEM_GET_MODRM_RM(pVCpu, bRm));
     
    1127611262    if (IEM_IS_MODRM_REG_MODE(bRm))
    1127711263    {
    11278         IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    1127911264        if (pVCpu->iem.s.enmEffOpSize != IEMMODE_64BIT)
    1128011265        {
    1128111266            IEM_MC_BEGIN(0, 1);
     11267            IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    1128211268            IEM_MC_LOCAL(uint32_t, u32Value);
    1128311269            IEM_MC_FETCH_GREG_U16_SX_U32(u32Value, IEM_GET_MODRM_RM(pVCpu, bRm));
     
    1128911275        {
    1129011276            IEM_MC_BEGIN(0, 1);
     11277            IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    1129111278            IEM_MC_LOCAL(uint64_t, u64Value);
    1129211279            IEM_MC_FETCH_GREG_U16_SX_U64(u64Value, IEM_GET_MODRM_RM(pVCpu, bRm));
     
    1134111328    if (IEM_IS_MODRM_REG_MODE(bRm))
    1134211329    {
     11330        IEM_MC_BEGIN(3, 0);
    1134311331        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    11344 
    11345         IEM_MC_BEGIN(3, 0);
    1134611332        IEM_MC_ARG(uint8_t *,  pu8Dst,  0);
    1134711333        IEM_MC_ARG(uint8_t *,  pu8Reg,  1);
     
    1136911355
    1137011356        IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffDst, bRm, 0);
     11357        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    1137111358        IEM_MC_MEM_MAP(pu8Dst, IEM_ACCESS_DATA_RW, pVCpu->iem.s.iEffSeg, GCPtrEffDst, 0 /*arg*/);
    1137211359        IEM_MC_FETCH_GREG_U8(u8RegCopy, IEM_GET_MODRM_REG(pVCpu, bRm));
     
    1139911386    if (IEM_IS_MODRM_REG_MODE(bRm))
    1140011387    {
    11401         IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    11402 
    1140311388        switch (pVCpu->iem.s.enmEffOpSize)
    1140411389        {
    1140511390            case IEMMODE_16BIT:
    1140611391                IEM_MC_BEGIN(3, 0);
     11392                IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    1140711393                IEM_MC_ARG(uint16_t *, pu16Dst,  0);
    1140811394                IEM_MC_ARG(uint16_t *, pu16Reg,  1);
     
    1142011406            case IEMMODE_32BIT:
    1142111407                IEM_MC_BEGIN(3, 0);
     11408                IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    1142211409                IEM_MC_ARG(uint32_t *, pu32Dst,  0);
    1142311410                IEM_MC_ARG(uint32_t *, pu32Reg,  1);
     
    1143711424            case IEMMODE_64BIT:
    1143811425                IEM_MC_BEGIN(3, 0);
     11426                IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    1143911427                IEM_MC_ARG(uint64_t *, pu64Dst,  0);
    1144011428                IEM_MC_ARG(uint64_t *, pu64Reg,  1);
     
    1146911457
    1147011458                IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffDst, bRm, 0);
     11459                IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    1147111460                IEM_MC_MEM_MAP(pu16Dst, IEM_ACCESS_DATA_RW, pVCpu->iem.s.iEffSeg, GCPtrEffDst, 0 /*arg*/);
    1147211461                IEM_MC_FETCH_GREG_U16(u16RegCopy, IEM_GET_MODRM_REG(pVCpu, bRm));
     
    1149411483
    1149511484                IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffDst, bRm, 0);
     11485                IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    1149611486                IEM_MC_MEM_MAP(pu32Dst, IEM_ACCESS_DATA_RW, pVCpu->iem.s.iEffSeg, GCPtrEffDst, 0 /*arg*/);
    1149711487                IEM_MC_FETCH_GREG_U32(u32RegCopy, IEM_GET_MODRM_REG(pVCpu, bRm));
     
    1151911509
    1152011510                IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffDst, bRm, 0);
     11511                IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    1152111512                IEM_MC_MEM_MAP(pu64Dst, IEM_ACCESS_DATA_RW, pVCpu->iem.s.iEffSeg, GCPtrEffDst, 0 /*arg*/);
    1152211513                IEM_MC_FETCH_GREG_U64(u64RegCopy, IEM_GET_MODRM_REG(pVCpu, bRm));
     
    1155311544         */
    1155411545        uint8_t bImm; IEM_OPCODE_GET_NEXT_U8(&bImm);
     11546        IEM_MC_BEGIN(4, 2);
    1155511547        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fSse);
    11556         IEM_MC_BEGIN(4, 2);
    1155711548        IEM_MC_LOCAL(IEMMEDIAF2XMMSRC,              Src);
    1155811549        IEM_MC_LOCAL(X86XMMREG,                     Dst);
     
    1162411615         */
    1162511616        uint8_t bImm; IEM_OPCODE_GET_NEXT_U8(&bImm);
     11617        IEM_MC_BEGIN(4, 2);
    1162611618        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fSse2);
    11627         IEM_MC_BEGIN(4, 2);
    1162811619        IEM_MC_LOCAL(IEMMEDIAF2XMMSRC,              Src);
    1162911620        IEM_MC_LOCAL(X86XMMREG,                     Dst);
     
    1169511686         */
    1169611687        uint8_t bImm; IEM_OPCODE_GET_NEXT_U8(&bImm);
     11688        IEM_MC_BEGIN(4, 2);
    1169711689        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fSse2);
    11698         IEM_MC_BEGIN(4, 2);
    1169911690        IEM_MC_LOCAL(IEMMEDIAF2XMMSRC,              Src);
    1170011691        IEM_MC_LOCAL(X86XMMREG,                     Dst);
     
    1176611757         */
    1176711758        uint8_t bImm; IEM_OPCODE_GET_NEXT_U8(&bImm);
     11759        IEM_MC_BEGIN(4, 2);
    1176811760        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fSse2);
    11769         IEM_MC_BEGIN(4, 2);
    1177011761        IEM_MC_LOCAL(IEMMEDIAF2XMMSRC,              Src);
    1177111762        IEM_MC_LOCAL(X86XMMREG,                     Dst);
     
    1184311834
    1184411835                IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffDst, bRm, 0);
    11845                 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    11846                 IEMOP_HLP_RAISE_UD_IF_MISSING_GUEST_FEATURE(pVCpu, fSse2);
     11836                IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fSse2);
    1184711837
    1184811838                IEM_MC_FETCH_GREG_U32(u32Value, IEM_GET_MODRM_REG(pVCpu, bRm));
     
    1185811848
    1185911849                IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffDst, bRm, 0);
    11860                 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    11861                 IEMOP_HLP_RAISE_UD_IF_MISSING_GUEST_FEATURE(pVCpu, fSse2);
     11850                IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fSse2);
    1186211851
    1186311852                IEM_MC_FETCH_GREG_U64(u64Value, IEM_GET_MODRM_REG(pVCpu, bRm));
     
    1189511884         */
    1189611885        uint8_t bImm; IEM_OPCODE_GET_NEXT_U8(&bImm);
     11886        IEM_MC_BEGIN(3, 0);
    1189711887        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX_2_OR(fSse, fAmdMmxExts);
    11898         IEM_MC_BEGIN(3, 0);
    1189911888        IEM_MC_ARG(uint64_t *,           pu64Dst,               0);
    1190011889        IEM_MC_ARG(uint16_t,             u16Src,                1);
     
    1194911938         */
    1195011939        uint8_t bImm; IEM_OPCODE_GET_NEXT_U8(&bImm);
     11940        IEM_MC_BEGIN(3, 0);
    1195111941        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fSse2);
    11952         IEM_MC_BEGIN(3, 0);
    1195311942        IEM_MC_ARG(PRTUINT128U,          puDst,                 0);
    1195411943        IEM_MC_ARG(uint16_t,             u16Src,                1);
     
    1200311992         */
    1200411993        uint8_t bImm; IEM_OPCODE_GET_NEXT_U8(&bImm);
     11994        IEM_MC_BEGIN(3, 1);
    1200511995        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX_2_OR(fSse, fAmdMmxExts);
    12006         IEM_MC_BEGIN(3, 1);
    1200711996        IEM_MC_LOCAL(uint16_t,              u16Dst);
    1200811997        IEM_MC_ARG_LOCAL_REF(uint16_t *,    pu16Dst,  u16Dst,      0);
     
    1203512024         */
    1203612025        uint8_t bImm; IEM_OPCODE_GET_NEXT_U8(&bImm);
     12026        IEM_MC_BEGIN(3, 1);
    1203712027        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fSse2);
    12038         IEM_MC_BEGIN(3, 1);
    1203912028        IEM_MC_LOCAL(uint16_t,              u16Dst);
    1204012029        IEM_MC_ARG_LOCAL_REF(uint16_t *,    pu16Dst,  u16Dst,      0);
     
    1207012059         */
    1207112060        uint8_t bImm; IEM_OPCODE_GET_NEXT_U8(&bImm);
     12061        IEM_MC_BEGIN(3, 0);
    1207212062        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fSse);
    12073         IEM_MC_BEGIN(3, 0);
    1207412063        IEM_MC_ARG(PRTUINT128U,          pDst, 0);
    1207512064        IEM_MC_ARG(PCRTUINT128U,         pSrc, 1);
     
    1212212111         */
    1212312112        uint8_t bImm; IEM_OPCODE_GET_NEXT_U8(&bImm);
     12113        IEM_MC_BEGIN(3, 0);
    1212412114        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fSse2);
    12125         IEM_MC_BEGIN(3, 0);
    1212612115        IEM_MC_ARG(PRTUINT128U,          pDst, 0);
    1212712116        IEM_MC_ARG(PCRTUINT128U,         pSrc, 1);
     
    1231312302    {
    1231412303        /* register destination. */
    12315         IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    1231612304        switch (pVCpu->iem.s.enmEffOpSize)
    1231712305        {
    1231812306            case IEMMODE_16BIT:
    1231912307                IEM_MC_BEGIN(2, 0);
     12308                IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    1232012309                IEM_MC_ARG(uint16_t *,      pu16Dst,                0);
    1232112310                IEM_MC_ARG(uint32_t *,      pEFlags,                1);
     
    1233212321            case IEMMODE_32BIT:
    1233312322                IEM_MC_BEGIN(2, 0);
     12323                IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    1233412324                IEM_MC_ARG(uint32_t *,      pu32Dst,                0);
    1233512325                IEM_MC_ARG(uint32_t *,      pEFlags,                1);
     
    1234712337            case IEMMODE_64BIT:
    1234812338                IEM_MC_BEGIN(2, 0);
     12339                IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    1234912340                IEM_MC_ARG(uint64_t *,      pu64Dst,                0);
    1235012341                IEM_MC_ARG(uint32_t *,      pEFlags,                1);
     
    1245512446    {
    1245612447        /* register destination. */
    12457         IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    1245812448        switch (pVCpu->iem.s.enmEffOpSize)
    1245912449        {
    1246012450            case IEMMODE_16BIT:
    1246112451                IEM_MC_BEGIN(2, 0);
     12452                IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    1246212453                IEM_MC_ARG(uint16_t *,      pu16Dst,                0);
    1246312454                IEM_MC_ARG(uint32_t *,      pEFlags,                1);
     
    1247412465            case IEMMODE_32BIT:
    1247512466                IEM_MC_BEGIN(2, 0);
     12467                IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    1247612468                IEM_MC_ARG(uint32_t *,      pu32Dst,                0);
    1247712469                IEM_MC_ARG(uint32_t *,      pEFlags,                1);
     
    1248912481            case IEMMODE_64BIT:
    1249012482                IEM_MC_BEGIN(2, 0);
     12483                IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    1249112484                IEM_MC_ARG(uint64_t *,      pu64Dst,                0);
    1249212485                IEM_MC_ARG(uint32_t *,      pEFlags,                1);
     
    1256212555FNIEMOP_DEF_1(iemOpCommonBswapGReg, uint8_t, iReg)
    1256312556{
    12564     IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    1256512557    switch (pVCpu->iem.s.enmEffOpSize)
    1256612558    {
    1256712559        case IEMMODE_16BIT:
    1256812560            IEM_MC_BEGIN(1, 0);
     12561            IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    1256912562            IEM_MC_ARG(uint32_t *,  pu32Dst, 0);
    1257012563            IEM_MC_REF_GREG_U32(pu32Dst, iReg);     /* Don't clear the high dword! */
     
    1257612569        case IEMMODE_32BIT:
    1257712570            IEM_MC_BEGIN(1, 0);
     12571            IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    1257812572            IEM_MC_ARG(uint32_t *,  pu32Dst, 0);
    1257912573            IEM_MC_REF_GREG_U32(pu32Dst, iReg);
     
    1258612580        case IEMMODE_64BIT:
    1258712581            IEM_MC_BEGIN(1, 0);
     12582            IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    1258812583            IEM_MC_ARG(uint64_t *,  pu64Dst, 0);
    1258912584            IEM_MC_REF_GREG_U64(pu64Dst, iReg);
     
    1280912804         * Register, register.
    1281012805         */
     12806        IEM_MC_BEGIN(0, 2);
    1281112807        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fSse2);
    12812         IEM_MC_BEGIN(0, 2);
    1281312808        IEM_MC_LOCAL(uint64_t,                  uSrc);
    1281412809
     
    1286312858         */
    1286412859        IEMOP_MNEMONIC2(RM_REG, MOVQ2DQ, movq2dq, VqZx_WO, Nq, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OP_SIZES);
     12860        IEM_MC_BEGIN(0, 1);
    1286512861        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fSse2);
    12866         IEM_MC_BEGIN(0, 1);
    1286712862        IEM_MC_LOCAL(uint64_t,                  uSrc);
    1286812863
     
    1291512910         */
    1291612911        IEMOP_MNEMONIC2(RM_REG, MOVDQ2Q, movdq2q, Pq_WO, Uq, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OP_SIZES);
     12912        IEM_MC_BEGIN(0, 1);
    1291712913        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fSse2);
    12918         IEM_MC_BEGIN(0, 1);
    1291912914        IEM_MC_LOCAL(uint64_t,                  uSrc);
    1292012915
     
    1295412949        /* Note! Taking the lazy approch here wrt the high 32-bits of the GREG. */
    1295512950        IEMOP_MNEMONIC2(RM_REG, PMOVMSKB, pmovmskb, Gd, Nq, DISOPTYPE_X86_MMX | DISOPTYPE_HARMLESS, 0);
     12951        IEM_MC_BEGIN(2, 0);
    1295612952        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX_2_OR(fSse, fAmdMmxExts);
    12957         IEM_MC_BEGIN(2, 0);
    1295812953        IEM_MC_ARG(uint64_t *,              puDst, 0);
    1295912954        IEM_MC_ARG(uint64_t const *,        puSrc, 1);
     
    1298312978        /* Note! Taking the lazy approch here wrt the high 32-bits of the GREG. */
    1298412979        IEMOP_MNEMONIC2(RM_REG, PMOVMSKB, pmovmskb, Gd, Ux, DISOPTYPE_X86_SSE | DISOPTYPE_HARMLESS, 0);
     12980        IEM_MC_BEGIN(2, 0);
    1298512981        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fSse2);
    12986         IEM_MC_BEGIN(2, 0);
    1298712982        IEM_MC_ARG(uint64_t *,              puDst, 0);
    1298812983        IEM_MC_ARG(PCRTUINT128U,            puSrc, 1);
  • trunk/src/VBox/VMM/VMMAll/IEMAllInstructionsVexMap1.cpp.h

    r100602 r100714  
    5151        if (pVCpu->iem.s.uVexLength)
    5252        {
     53            IEM_MC_BEGIN(4, 3);
    5354            IEMOP_HLP_DONE_VEX_DECODING_EX(fAvx2);
    54             IEM_MC_BEGIN(4, 3);
    5555            IEM_MC_LOCAL(RTUINT256U,            uDst);
    5656            IEM_MC_LOCAL(RTUINT256U,            uSrc1);
     
    7171        else
    7272        {
     73            IEM_MC_BEGIN(4, 0);
    7374            IEMOP_HLP_DONE_VEX_DECODING_EX(fAvx);
    74             IEM_MC_BEGIN(4, 0);
    7575            IEM_MC_IMPLICIT_AVX_AIMPL_ARGS();
    7676            IEM_MC_ARG(PRTUINT128U,          puDst,  1);
     
    165165        if (pVCpu->iem.s.uVexLength)
    166166        {
     167            IEM_MC_BEGIN(3, 3);
    167168            IEMOP_HLP_DONE_VEX_DECODING_EX(fAvx2);
    168             IEM_MC_BEGIN(3, 3);
    169169            IEM_MC_LOCAL(RTUINT256U,            uDst);
    170170            IEM_MC_LOCAL(RTUINT256U,            uSrc1);
     
    184184        else
    185185        {
     186            IEM_MC_BEGIN(3, 0);
    186187            IEMOP_HLP_DONE_VEX_DECODING_EX(fAvx);
    187             IEM_MC_BEGIN(3, 0);
    188188            IEM_MC_ARG(PRTUINT128U,          puDst,  0);
    189189            IEM_MC_ARG(PCRTUINT128U,         puSrc1, 1);
     
    307307        if (pVCpu->iem.s.uVexLength)
    308308        {
     309            IEM_MC_BEGIN(2, 2);
    309310            IEMOP_HLP_DONE_VEX_DECODING_EX(fAvx2);
    310             IEM_MC_BEGIN(2, 2);
    311311            IEM_MC_LOCAL(RTUINT256U,            uDst);
    312312            IEM_MC_LOCAL(RTUINT256U,            uSrc);
     
    323323        else
    324324        {
     325            IEM_MC_BEGIN(2, 0);
    325326            IEMOP_HLP_DONE_VEX_DECODING_EX(fAvx);
    326             IEM_MC_BEGIN(2, 0);
    327327            IEM_MC_ARG(PRTUINT128U,          puDst,  0);
    328328            IEM_MC_ARG(PCRTUINT128U,         puSrc,  1);
     
    432432         * Register, register.
    433433         */
     434        IEM_MC_BEGIN(0, 0);
    434435        IEMOP_HLP_DONE_VEX_DECODING_NO_VVVV_EX(fAvx);
    435         IEM_MC_BEGIN(0, 0);
    436436        IEM_MC_MAYBE_RAISE_AVX_RELATED_XCPT();
    437437        IEM_MC_ACTUALIZE_AVX_STATE_FOR_CHANGE();
     
    507507         * Register, register.
    508508         */
     509        IEM_MC_BEGIN(0, 0);
    509510        IEMOP_HLP_DONE_VEX_DECODING_NO_VVVV_EX(fAvx);
    510         IEM_MC_BEGIN(0, 0);
    511511        IEM_MC_MAYBE_RAISE_AVX_RELATED_XCPT();
    512512        IEM_MC_ACTUALIZE_AVX_STATE_FOR_CHANGE();
     
    583583         */
    584584        IEMOP_MNEMONIC3(VEX_RVM_REG, VMOVSS, vmovss, Vss_WO, HssHi, Uss, DISOPTYPE_HARMLESS | DISOPTYPE_X86_AVX, IEMOPHINT_IGNORES_OP_SIZES | IEMOPHINT_VEX_L_IGNORED);
     585        IEM_MC_BEGIN(0, 0);
    585586        IEMOP_HLP_DONE_VEX_DECODING_EX(fAvx);
    586         IEM_MC_BEGIN(0, 0);
    587587        IEM_MC_MAYBE_RAISE_AVX_RELATED_XCPT();
    588588        IEM_MC_ACTUALIZE_AVX_STATE_FOR_CHANGE();
     
    646646         */
    647647        IEMOP_MNEMONIC3(VEX_RVM_REG, VMOVSD, vmovsd, Vsd_WO, HsdHi, Usd, DISOPTYPE_HARMLESS | DISOPTYPE_X86_AVX, IEMOPHINT_IGNORES_OP_SIZES | IEMOPHINT_VEX_L_IGNORED);
     648        IEM_MC_BEGIN(0, 0);
    648649        IEMOP_HLP_DONE_VEX_DECODING_EX(fAvx);
    649         IEM_MC_BEGIN(0, 0);
    650650
    651651        IEM_MC_MAYBE_RAISE_AVX_RELATED_XCPT();
     
    709709         * Register, register.
    710710         */
     711        IEM_MC_BEGIN(0, 0);
    711712        IEMOP_HLP_DONE_VEX_DECODING_NO_VVVV_EX(fAvx);
    712         IEM_MC_BEGIN(0, 0);
    713713        IEM_MC_MAYBE_RAISE_AVX_RELATED_XCPT();
    714714        IEM_MC_ACTUALIZE_AVX_STATE_FOR_CHANGE();
     
    784784         * Register, register.
    785785         */
     786        IEM_MC_BEGIN(0, 0);
    786787        IEMOP_HLP_DONE_VEX_DECODING_NO_VVVV_EX(fAvx);
    787         IEM_MC_BEGIN(0, 0);
    788788        IEM_MC_MAYBE_RAISE_AVX_RELATED_XCPT();
    789789        IEM_MC_ACTUALIZE_AVX_STATE_FOR_CHANGE();
     
    859859         */
    860860        IEMOP_MNEMONIC3(VEX_MVR_REG, VMOVSS, vmovss, Uss_WO, HssHi, Vss, DISOPTYPE_HARMLESS | DISOPTYPE_X86_AVX, IEMOPHINT_IGNORES_OP_SIZES | IEMOPHINT_VEX_L_IGNORED);
     861        IEM_MC_BEGIN(0, 0);
    861862        IEMOP_HLP_DONE_VEX_DECODING_EX(fAvx);
    862         IEM_MC_BEGIN(0, 0);
    863863
    864864        IEM_MC_MAYBE_RAISE_AVX_RELATED_XCPT();
     
    923923         */
    924924        IEMOP_MNEMONIC3(VEX_MVR_REG, VMOVSD, vmovsd, Usd_WO, HsdHi, Vsd, DISOPTYPE_HARMLESS | DISOPTYPE_X86_AVX, IEMOPHINT_IGNORES_OP_SIZES | IEMOPHINT_VEX_L_IGNORED);
     925        IEM_MC_BEGIN(0, 0);
    925926        IEMOP_HLP_DONE_VEX_DECODING_EX(fAvx);
    926         IEM_MC_BEGIN(0, 0);
    927927
    928928        IEM_MC_MAYBE_RAISE_AVX_RELATED_XCPT();
     
    986986         */
    987987        IEMOP_MNEMONIC3(VEX_RVM_REG, VMOVHLPS, vmovhlps, Vq_WO, HqHi, UqHi, DISOPTYPE_HARMLESS | DISOPTYPE_X86_AVX, IEMOPHINT_IGNORES_OP_SIZES | IEMOPHINT_VEX_L_ZERO);
    988 
     988        IEM_MC_BEGIN(0, 0);
    989989        IEMOP_HLP_DONE_VEX_DECODING_L0_EX(fAvx);
    990         IEM_MC_BEGIN(0, 0);
    991990
    992991        IEM_MC_MAYBE_RAISE_AVX_RELATED_XCPT();
     
    11111110         * Register, register.
    11121111         */
    1113         IEMOP_HLP_DONE_VEX_DECODING_NO_VVVV_EX(fAvx);
    11141112        if (pVCpu->iem.s.uVexLength == 0)
    11151113        {
    11161114            IEM_MC_BEGIN(0, 1);
     1115            IEMOP_HLP_DONE_VEX_DECODING_NO_VVVV_EX(fAvx);
    11171116            IEM_MC_LOCAL(RTUINT128U,                uSrc);
    11181117
     
    11331132        {
    11341133            IEM_MC_BEGIN(3, 0);
     1134            IEMOP_HLP_DONE_VEX_DECODING_NO_VVVV_EX(fAvx);
    11351135            IEM_MC_IMPLICIT_AVX_AIMPL_ARGS();
    11361136            IEM_MC_ARG_CONST(uint8_t,   iYRegDst, IEM_GET_MODRM_REG(pVCpu, bRm), 1);
     
    12151215         * Register, register.
    12161216         */
    1217         IEMOP_HLP_DONE_VEX_DECODING_NO_VVVV_EX(fAvx);
    12181217        if (pVCpu->iem.s.uVexLength == 0)
    12191218        {
    12201219            IEM_MC_BEGIN(1, 0);
     1220            IEMOP_HLP_DONE_VEX_DECODING_NO_VVVV_EX(fAvx);
    12211221            IEM_MC_ARG(uint64_t,                    uSrc, 0);
    12221222
     
    12351235        {
    12361236            IEM_MC_BEGIN(3, 0);
     1237            IEMOP_HLP_DONE_VEX_DECODING_NO_VVVV_EX(fAvx);
    12371238            IEM_MC_IMPLICIT_AVX_AIMPL_ARGS();
    12381239            IEM_MC_ARG_CONST(uint8_t,   iYRegDst, IEM_GET_MODRM_REG(pVCpu, bRm), 1);
     
    14511452        IEMOP_MNEMONIC3(VEX_RVM_REG, VMOVLHPS, vmovlhps, Vq_WO, Hq, Uq, DISOPTYPE_HARMLESS | DISOPTYPE_X86_AVX, IEMOPHINT_IGNORES_OP_SIZES | IEMOPHINT_VEX_L_ZERO);
    14521453
     1454        IEM_MC_BEGIN(0, 0);
    14531455        IEMOP_HLP_DONE_VEX_DECODING_L0_EX(fAvx);
    1454         IEM_MC_BEGIN(0, 0);
    14551456
    14561457        IEM_MC_MAYBE_RAISE_AVX_RELATED_XCPT();
     
    15631564         * Register, register.
    15641565         */
    1565         IEMOP_HLP_DONE_VEX_DECODING_NO_VVVV_EX(fAvx);
    15661566        if (pVCpu->iem.s.uVexLength == 0)
    15671567        {
    15681568            IEM_MC_BEGIN(0, 1);
     1569            IEMOP_HLP_DONE_VEX_DECODING_NO_VVVV_EX(fAvx);
    15691570            IEM_MC_LOCAL(RTUINT128U,                  uSrc);
    15701571
     
    15851586        {
    15861587            IEM_MC_BEGIN(3, 0);
     1588            IEMOP_HLP_DONE_VEX_DECODING_NO_VVVV_EX(fAvx);
    15871589            IEM_MC_IMPLICIT_AVX_AIMPL_ARGS();
    15881590            IEM_MC_ARG_CONST(uint8_t,   iYRegDst, IEM_GET_MODRM_REG(pVCpu, bRm), 1);
     
    17831785         * Register, register.
    17841786         */
     1787        IEM_MC_BEGIN(1, 0);
    17851788        IEMOP_HLP_DONE_VEX_DECODING_NO_VVVV_EX(fAvx);
    1786         IEM_MC_BEGIN(1, 0);
    17871789
    17881790        IEM_MC_MAYBE_RAISE_AVX_RELATED_XCPT();
     
    18601862         * Register, register.
    18611863         */
     1864        IEM_MC_BEGIN(1, 0);
    18621865        IEMOP_HLP_DONE_VEX_DECODING_NO_VVVV_EX(fAvx);
    1863         IEM_MC_BEGIN(1, 0);
    18641866
    18651867        IEM_MC_MAYBE_RAISE_AVX_RELATED_XCPT();
     
    19561958         * Register, register.
    19571959         */
     1960        IEM_MC_BEGIN(1, 0);
    19581961        IEMOP_HLP_DONE_VEX_DECODING_NO_VVVV_EX(fAvx);
    1959         IEM_MC_BEGIN(1, 0);
    19601962
    19611963        IEM_MC_MAYBE_RAISE_AVX_RELATED_XCPT();
     
    20322034         * Register, register.
    20332035         */
     2036        IEM_MC_BEGIN(1, 0);
    20342037        IEMOP_HLP_DONE_VEX_DECODING_NO_VVVV_EX(fAvx);
    2035         IEM_MC_BEGIN(1, 0);
    20362038
    20372039        IEM_MC_MAYBE_RAISE_AVX_RELATED_XCPT();
     
    22862288         * Register, register.
    22872289         */
     2290        IEM_MC_BEGIN(4, 1);
    22882291        IEMOP_HLP_DONE_VEX_DECODING_L0_AND_NO_VVVV_EX(fAvx);
    2289         IEM_MC_BEGIN(4, 1);
    22902292        IEM_MC_LOCAL(uint32_t, fEFlags);
    22912293        IEM_MC_ARG(uint32_t *,                  pfMxcsr,            0);
     
    23572359         * Register, register.
    23582360         */
     2361        IEM_MC_BEGIN(4, 1);
    23592362        IEMOP_HLP_DONE_VEX_DECODING_L0_AND_NO_VVVV_EX(fAvx);
    2360         IEM_MC_BEGIN(4, 1);
    23612363        IEM_MC_LOCAL(uint32_t, fEFlags);
    23622364        IEM_MC_ARG(uint32_t *,                  pfMxcsr,            0);
     
    24312433         * Register, register.
    24322434         */
     2435        IEM_MC_BEGIN(4, 1);
    24332436        IEMOP_HLP_DONE_VEX_DECODING_L0_AND_NO_VVVV_EX(fAvx);
    2434         IEM_MC_BEGIN(4, 1);
    24352437        IEM_MC_LOCAL(uint32_t, fEFlags);
    24362438        IEM_MC_ARG(uint32_t *,                  pfMxcsr,            0);
     
    25022504         * Register, register.
    25032505         */
     2506        IEM_MC_BEGIN(4, 1);
    25042507        IEMOP_HLP_DONE_VEX_DECODING_L0_AND_NO_VVVV_EX(fAvx);
    2505         IEM_MC_BEGIN(4, 1);
    25062508        IEM_MC_LOCAL(uint32_t, fEFlags);
    25072509        IEM_MC_ARG(uint32_t *,                  pfMxcsr,            0);
     
    26122614        if (pVCpu->iem.s.uVexLength == 0)
    26132615        {
     2616            IEM_MC_BEGIN(2, 1);
    26142617            IEMOP_HLP_DONE_VEX_DECODING_EX(fAvx);
    2615             IEM_MC_BEGIN(2, 1);
    26162618            IEM_MC_LOCAL(uint8_t,           u8Dst);
    26172619            IEM_MC_ARG_LOCAL_REF(uint8_t *, pu8Dst,  u8Dst, 0);
     
    26282630        else
    26292631        {
     2632            IEM_MC_BEGIN(2, 2);
    26302633            IEMOP_HLP_DONE_VEX_DECODING_EX(fAvx2);
    2631             IEM_MC_BEGIN(2, 2);
    26322634            IEM_MC_LOCAL(uint8_t,               u8Dst);
    26332635            IEM_MC_LOCAL(RTUINT256U,            uSrc);
     
    26632665        if (pVCpu->iem.s.uVexLength == 0)
    26642666        {
     2667            IEM_MC_BEGIN(2, 1);
    26652668            IEMOP_HLP_DONE_VEX_DECODING_EX(fAvx);
    2666             IEM_MC_BEGIN(2, 1);
    26672669            IEM_MC_LOCAL(uint8_t,           u8Dst);
    26682670            IEM_MC_ARG_LOCAL_REF(uint8_t *, pu8Dst,  u8Dst, 0);
     
    26792681        else
    26802682        {
     2683            IEM_MC_BEGIN(2, 2);
    26812684            IEMOP_HLP_DONE_VEX_DECODING_EX(fAvx2);
    2682             IEM_MC_BEGIN(2, 2);
    26832685            IEM_MC_LOCAL(uint8_t,               u8Dst);
    26842686            IEM_MC_LOCAL(RTUINT256U,            uSrc);
     
    30213023//         * Register, register.
    30223024//         */
     3025//        IEM_MC_BEGIN(2, 0);
    30233026//        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fSse2);
    3024 //        IEM_MC_BEGIN(2, 0);
    30253027//        IEM_MC_ARG(PRTUINT128U,          pDst, 0);
    30263028//        IEM_MC_ARG(PCRTUINT128U,         pSrc, 1);
     
    31713173        {
    31723174            /* XMM, greg64 */
     3175            IEM_MC_BEGIN(0, 1);
    31733176            IEMOP_HLP_DONE_VEX_DECODING_L0_AND_NO_VVVV_EX(fAvx);
    3174             IEM_MC_BEGIN(0, 1);
    31753177            IEM_MC_LOCAL(uint64_t, u64Tmp);
    31763178
     
    32213223        {
    32223224            /* XMM, greg32 */
     3225            IEM_MC_BEGIN(0, 1);
    32233226            IEMOP_HLP_DONE_VEX_DECODING_L0_AND_NO_VVVV_EX(fAvx);
    3224             IEM_MC_BEGIN(0, 1);
    32253227            IEM_MC_LOCAL(uint32_t, u32Tmp);
    32263228
     
    32803282         * Register, register.
    32813283         */
     3284        IEM_MC_BEGIN(0, 0);
    32823285        IEMOP_HLP_DONE_VEX_DECODING_NO_VVVV_EX(fAvx);
    3283         IEM_MC_BEGIN(0, 0);
    32843286
    32853287        IEM_MC_MAYBE_RAISE_AVX_RELATED_XCPT();
     
    33553357         * Register, register.
    33563358         */
     3359        IEM_MC_BEGIN(0, 0);
    33573360        IEMOP_HLP_DONE_VEX_DECODING_NO_VVVV_EX(fAvx);
    3358         IEM_MC_BEGIN(0, 0);
    33593361
    33603362        IEM_MC_MAYBE_RAISE_AVX_RELATED_XCPT();
     
    34333435        if (pVCpu->iem.s.uVexLength)
    34343436        {
     3437            IEM_MC_BEGIN(3, 2);
    34353438            IEMOP_HLP_DONE_VEX_DECODING_NO_VVVV_EX(fAvx2);
    3436             IEM_MC_BEGIN(3, 2);
    34373439            IEM_MC_LOCAL(RTUINT256U,            uDst);
    34383440            IEM_MC_LOCAL(RTUINT256U,            uSrc);
     
    34503452        else
    34513453        {
     3454            IEM_MC_BEGIN(3, 0);
    34523455            IEMOP_HLP_DONE_VEX_DECODING_NO_VVVV_EX(fAvx);
    3453             IEM_MC_BEGIN(3, 0);
    34543456            IEM_MC_ARG(PRTUINT128U,             puDst,                 0);
    34553457            IEM_MC_ARG(PCRTUINT128U,            puSrc,                 1);
     
    38633865        {
    38643866            /* greg64, XMM */
     3867            IEM_MC_BEGIN(0, 1);
    38653868            IEMOP_HLP_DONE_VEX_DECODING_L0_AND_NO_VVVV_EX(fAvx);
    3866             IEM_MC_BEGIN(0, 1);
    38673869            IEM_MC_LOCAL(uint64_t, u64Tmp);
    38683870
     
    39133915        {
    39143916            /* greg32, XMM */
     3917            IEM_MC_BEGIN(0, 1);
    39153918            IEMOP_HLP_DONE_VEX_DECODING_L0_AND_NO_VVVV_EX(fAvx);
    3916             IEM_MC_BEGIN(0, 1);
    39173919            IEM_MC_LOCAL(uint32_t, u32Tmp);
    39183920
     
    39663968         * Register, register.
    39673969         */
     3970        IEM_MC_BEGIN(0, 0);
    39683971        IEMOP_HLP_DONE_VEX_DECODING_L0_AND_NO_VVVV_EX(fAvx);
    3969         IEM_MC_BEGIN(0, 0);
    39703972
    39713973        IEM_MC_MAYBE_RAISE_AVX_RELATED_XCPT();
     
    40234025         * Register, register.
    40244026         */
     4027        IEM_MC_BEGIN(0, 0);
    40254028        IEMOP_HLP_DONE_VEX_DECODING_NO_VVVV_EX(fAvx);
    4026         IEM_MC_BEGIN(0, 0);
    40274029
    40284030        IEM_MC_MAYBE_RAISE_AVX_RELATED_XCPT();
     
    40994101         * Register, register.
    41004102         */
     4103        IEM_MC_BEGIN(0, 0);
    41014104        IEMOP_HLP_DONE_VEX_DECODING_NO_VVVV_EX(fAvx);
    4102         IEM_MC_BEGIN(0, 0);
    41034105
    41044106        IEM_MC_MAYBE_RAISE_AVX_RELATED_XCPT();
     
    44004402         */
    44014403        uint8_t bImm; IEM_OPCODE_GET_NEXT_U8(&bImm);
     4404        IEM_MC_BEGIN(4, 0);
    44024405        IEMOP_HLP_DONE_VEX_DECODING_L0_EX(fAvx);
    4403         IEM_MC_BEGIN(4, 0);
    44044406        IEM_MC_ARG(PRTUINT128U,          puDst,                 0);
    44054407        IEM_MC_ARG(PCRTUINT128U,         puSrc,                 1);
     
    44654467         */
    44664468        uint8_t bImm; IEM_OPCODE_GET_NEXT_U8(&bImm);
     4469        IEM_MC_BEGIN(3, 1);
    44674470        IEMOP_HLP_DONE_VEX_DECODING_L0_EX(fAvx);
    4468         IEM_MC_BEGIN(3, 1);
    44694471        IEM_MC_LOCAL(uint16_t,              u16Dst);
    44704472        IEM_MC_ARG_LOCAL_REF(uint16_t *,    pu16Dst,  u16Dst,      0);
     
    45004502        { \
    45014503            uint8_t bImm; IEM_OPCODE_GET_NEXT_U8(&bImm); \
     4504            IEM_MC_BEGIN(4, 3); \
    45024505            IEMOP_HLP_DONE_VEX_DECODING_EX(fAvx2); \
    4503             IEM_MC_BEGIN(4, 3); \
    45044506            IEM_MC_LOCAL(RTUINT256U,            uDst); \
    45054507            IEM_MC_LOCAL(RTUINT256U,            uSrc1); \
     
    45224524        { \
    45234525            uint8_t bImm; IEM_OPCODE_GET_NEXT_U8(&bImm); \
     4526            IEM_MC_BEGIN(4, 0); \
    45244527            IEMOP_HLP_DONE_VEX_DECODING_EX(fAvx); \
    4525             IEM_MC_BEGIN(4, 0); \
    45264528            IEM_MC_ARG(PRTUINT128U,          puDst,                 0); \
    45274529            IEM_MC_ARG(PCRTUINT128U,         puSrc1,                1); \
     
    47054707         * Register, register.
    47064708         */
     4709        IEM_MC_BEGIN(0, 0);
    47074710        IEMOP_HLP_DONE_VEX_DECODING_L0_AND_NO_VVVV_EX(fAvx);
    4708         IEM_MC_BEGIN(0, 0);
    47094711
    47104712        IEM_MC_MAYBE_RAISE_AVX_RELATED_XCPT();
     
    47554757        if (pVCpu->iem.s.uVexLength)
    47564758        {
     4759            IEM_MC_BEGIN(2, 1);
    47574760            IEMOP_HLP_DONE_VEX_DECODING_NO_VVVV_EX(fAvx2);
    4758             IEM_MC_BEGIN(2, 1);
    47594761            IEM_MC_ARG(uint64_t *,              puDst, 0);
    47604762            IEM_MC_LOCAL(RTUINT256U,            uSrc);
     
    47714773        else
    47724774        {
     4775            IEM_MC_BEGIN(2, 0);
    47734776            IEMOP_HLP_DONE_VEX_DECODING_NO_VVVV_EX(fAvx);
    4774             IEM_MC_BEGIN(2, 0);
    47754777            IEM_MC_ARG(uint64_t *,              puDst, 0);
    47764778            IEM_MC_ARG(PCRTUINT128U,            puSrc, 1);
  • trunk/src/VBox/VMM/VMMAll/IEMAllInstructionsVexMap2.cpp.h

    r100575 r100714  
    221221        if (pVCpu->iem.s.uVexLength)
    222222        {
     223            IEM_MC_BEGIN(3, 2);
    223224            IEMOP_HLP_DONE_VEX_DECODING_EX(fAvx2);
    224             IEM_MC_BEGIN(3, 2);
    225225            IEM_MC_LOCAL(RTUINT256U,            uSrc1);
    226226            IEM_MC_LOCAL(RTUINT256U,            uSrc2);
     
    240240        else
    241241        {
     242            IEM_MC_BEGIN(3, 0);
    242243            IEMOP_HLP_DONE_VEX_DECODING_EX(fAvx);
    243             IEM_MC_BEGIN(3, 0);
    244244            IEM_MC_ARG(PCRTUINT128U,            puSrc1,  0);
    245245            IEM_MC_ARG(PCRTUINT128U,            puSrc2,  1);
     
    323323         * Register, register.
    324324         */
    325         IEMOP_HLP_DONE_VEX_DECODING_NO_VVVV_EX(fAvx2);
    326325        if (pVCpu->iem.s.uVexLength)
    327326        {
    328327            IEM_MC_BEGIN(0, 1);
     328            IEMOP_HLP_DONE_VEX_DECODING_NO_VVVV_EX(fAvx2);
    329329            IEM_MC_LOCAL(uint32_t,              uSrc);
    330330
     
    341341        {
    342342            IEM_MC_BEGIN(0, 1);
     343            IEMOP_HLP_DONE_VEX_DECODING_NO_VVVV_EX(fAvx2);
    343344            IEM_MC_LOCAL(uint32_t,              uSrc);
    344345
     
    408409         * Register, register.
    409410         */
    410         IEMOP_HLP_DONE_VEX_DECODING_NO_VVVV_EX(fAvx2);
    411411        if (pVCpu->iem.s.uVexLength)
    412412        {
    413413            IEM_MC_BEGIN(0, 1);
     414            IEMOP_HLP_DONE_VEX_DECODING_NO_VVVV_EX(fAvx2);
    414415            IEM_MC_LOCAL(uint64_t,              uSrc);
    415416
     
    426427        {
    427428            IEM_MC_BEGIN(0, 1);
     429            IEMOP_HLP_DONE_VEX_DECODING_NO_VVVV_EX(fAvx2);
    428430            IEM_MC_LOCAL(uint64_t,              uSrc);
    429431
     
    549551        if (pVCpu->iem.s.uVexLength) \
    550552        { \
     553            IEM_MC_BEGIN(2, 1); \
    551554            IEMOP_HLP_DONE_VEX_DECODING_NO_VVVV_EX(fAvx2); \
    552             IEM_MC_BEGIN(2, 1); \
    553555            IEM_MC_LOCAL(RTUINT256U,            uDst); \
    554556            IEM_MC_ARG_LOCAL_REF(PRTUINT256U,   puDst, uDst, 0); \
     
    566568        else \
    567569        { \
     570            IEM_MC_BEGIN(2, 0); \
    568571            IEMOP_HLP_DONE_VEX_DECODING_NO_VVVV_EX(fAvx); \
    569             IEM_MC_BEGIN(2, 0); \
    570572            IEM_MC_ARG(PRTUINT128U,          puDst,  0); \
    571573            IEM_MC_ARG(uint64_t,             uSrc,   1); \
     
    966968         * Register, register.
    967969         */
     970        IEM_MC_BEGIN(2, 0);
    968971        IEMOP_HLP_DONE_VEX_DECODING_L0_EX(fAvx);
    969         IEM_MC_BEGIN(2, 0);
    970972        IEM_MC_ARG(PRTUINT128U,          puDst,  0);
    971973        IEM_MC_ARG(PCRTUINT128U,         puSrc,  1);
     
    16411643         * Register, register.
    16421644         */
    1643         IEMOP_HLP_DONE_VEX_DECODING_L0_EX(fBmi1);
    16441645        if (pVCpu->iem.s.fPrefixes & IEM_OP_PRF_SIZE_REX_W)
    16451646        {
    16461647            IEM_MC_BEGIN(4, 0);
     1648            IEMOP_HLP_DONE_VEX_DECODING_L0_EX(fBmi1);
    16471649            IEM_MC_ARG(uint64_t *,          pDst,    0);
    16481650            IEM_MC_ARG(uint64_t,            uSrc1,   1);
     
    16611663        {
    16621664            IEM_MC_BEGIN(4, 0);
     1665            IEMOP_HLP_DONE_VEX_DECODING_L0_EX(fBmi1);
    16631666            IEM_MC_ARG(uint32_t *,          pDst,    0);
    16641667            IEM_MC_ARG(uint32_t,            uSrc1,   1);
     
    17411744         * Register, register. \
    17421745         */ \
    1743         IEMOP_HLP_DONE_VEX_DECODING_L0_EX(fBmi1); \
    17441746        if (pVCpu->iem.s.fPrefixes & IEM_OP_PRF_SIZE_REX_W) \
    17451747        { \
    17461748            IEM_MC_BEGIN(3, 0); \
     1749            IEMOP_HLP_DONE_VEX_DECODING_L0_EX(fBmi1); \
    17471750            IEM_MC_ARG(uint64_t *,          pDst,    0); \
    17481751            IEM_MC_ARG(uint64_t,            uSrc,    1); \
     
    17591762        { \
    17601763            IEM_MC_BEGIN(3, 0); \
     1764            IEMOP_HLP_DONE_VEX_DECODING_L0_EX(fBmi1); \
    17611765            IEM_MC_ARG(uint32_t *,          pDst,    0); \
    17621766            IEM_MC_ARG(uint32_t,            uSrc,    1); \
     
    18911895         * Register, register. \
    18921896         */ \
    1893         IEMOP_HLP_DONE_VEX_DECODING_L0_EX(a_fFeatureMember); \
    18941897        if (pVCpu->iem.s.fPrefixes & IEM_OP_PRF_SIZE_REX_W) \
    18951898        { \
    18961899            IEM_MC_BEGIN(4, 0); \
     1900            IEMOP_HLP_DONE_VEX_DECODING_L0_EX(a_fFeatureMember); \
    18971901            IEM_MC_ARG(uint64_t *,          pDst,    0); \
    18981902            IEM_MC_ARG(uint64_t,            uSrc1,   1); \
     
    19121916        { \
    19131917            IEM_MC_BEGIN(4, 0); \
     1918            IEMOP_HLP_DONE_VEX_DECODING_L0_EX(a_fFeatureMember); \
    19141919            IEM_MC_ARG(uint32_t *,          pDst,    0); \
    19151920            IEM_MC_ARG(uint32_t,            uSrc1,   1); \
     
    19861991         * Register, register. \
    19871992         */ \
    1988         IEMOP_HLP_DONE_VEX_DECODING_L0_EX(a_fFeatureMember); \
    19891993        if (pVCpu->iem.s.fPrefixes & IEM_OP_PRF_SIZE_REX_W) \
    19901994        { \
    19911995            IEM_MC_BEGIN(3, 0); \
     1996            IEMOP_HLP_DONE_VEX_DECODING_L0_EX(a_fFeatureMember); \
    19921997            IEM_MC_ARG(uint64_t *,          pDst,    0); \
    19931998            IEM_MC_ARG(uint64_t,            uSrc1,   1); \
     
    20042009        { \
    20052010            IEM_MC_BEGIN(3, 0); \
     2011            IEMOP_HLP_DONE_VEX_DECODING_L0_EX(a_fFeatureMember); \
    20062012            IEM_MC_ARG(uint32_t *,          pDst,    0); \
    20072013            IEM_MC_ARG(uint32_t,            uSrc1,   1); \
     
    20772083         * Register, register. \
    20782084         */ \
    2079         IEMOP_HLP_DONE_VEX_DECODING_L0_EX(a_fFeatureMember); \
    20802085        if (pVCpu->iem.s.fPrefixes & IEM_OP_PRF_SIZE_REX_W) \
    20812086        { \
    20822087            IEM_MC_BEGIN(3, 0); \
     2088            IEMOP_HLP_DONE_VEX_DECODING_L0_EX(a_fFeatureMember); \
    20832089            IEM_MC_ARG(uint64_t *,          pDst,    0); \
    20842090            IEM_MC_ARG(uint64_t,            uSrc1,   1); \
     
    20962102        { \
    20972103            IEM_MC_BEGIN(3, 0); \
     2104            IEMOP_HLP_DONE_VEX_DECODING_L0_EX(a_fFeatureMember); \
    20982105            IEM_MC_ARG(uint32_t *,          pDst,    0); \
    20992106            IEM_MC_ARG(uint32_t,            uSrc1,   1); \
     
    21872194         * Register, register.
    21882195         */
    2189         IEMOP_HLP_DONE_VEX_DECODING_L0_EX(fBmi2);
    21902196        if (pVCpu->iem.s.fPrefixes & IEM_OP_PRF_SIZE_REX_W)
    21912197        {
    21922198            IEM_MC_BEGIN(4, 0);
     2199            IEMOP_HLP_DONE_VEX_DECODING_L0_EX(fBmi2);
    21932200            IEM_MC_ARG(uint64_t *,          pDst1,   0);
    21942201            IEM_MC_ARG(uint64_t *,          pDst2,   1);
     
    22072214        {
    22082215            IEM_MC_BEGIN(4, 0);
     2216            IEMOP_HLP_DONE_VEX_DECODING_L0_EX(fBmi2);
    22092217            IEM_MC_ARG(uint32_t *,          pDst1,   0);
    22102218            IEM_MC_ARG(uint32_t *,          pDst2,   1);
  • trunk/src/VBox/VMM/VMMAll/IEMAllInstructionsVexMap3.cpp.h

    r100607 r100714  
    5454        {
    5555            uint8_t bImm; IEM_OPCODE_GET_NEXT_U8(&bImm);
     56            IEM_MC_BEGIN(4, 3);
    5657            IEMOP_HLP_DONE_VEX_DECODING_EX(fAvx2);
    57             IEM_MC_BEGIN(4, 3);
    5858            IEM_MC_LOCAL(RTUINT256U,            uDst);
    5959            IEM_MC_LOCAL(RTUINT256U,            uSrc1);
     
    7575        {
    7676            uint8_t bImm; IEM_OPCODE_GET_NEXT_U8(&bImm);
     77            IEM_MC_BEGIN(4, 0);
    7778            IEMOP_HLP_DONE_VEX_DECODING_EX(fAvx);
    78             IEM_MC_BEGIN(4, 0);
    7979            IEM_MC_ARG(PRTUINT128U,          puDst,  0);
    8080            IEM_MC_ARG(PCRTUINT128U,         puSrc1, 1);
     
    170170         */
    171171        uint8_t bImm; IEM_OPCODE_GET_NEXT_U8(&bImm);
    172         IEMOP_HLP_DONE_VEX_DECODING_EX(fAvx);
    173172        if (pVCpu->iem.s.uVexLength)
    174173        {
    175174            IEM_MC_BEGIN(4, 3);
     175            IEMOP_HLP_DONE_VEX_DECODING_EX(fAvx);
    176176            IEM_MC_LOCAL(RTUINT256U,            uDst);
    177177            IEM_MC_LOCAL(RTUINT256U,            uSrc1);
     
    193193        {
    194194            IEM_MC_BEGIN(4, 0);
     195            IEMOP_HLP_DONE_VEX_DECODING_EX(fAvx);
    195196            IEM_MC_ARG(PRTUINT128U,          puDst,  0);
    196197            IEM_MC_ARG(PCRTUINT128U,         puSrc1, 1);
     
    293294         */
    294295        uint8_t bImm; IEM_OPCODE_GET_NEXT_U8(&bImm);
     296        IEM_MC_BEGIN(4, 3);
    295297        IEMOP_HLP_DONE_VEX_DECODING_L1_EX(fAvx2);
    296         IEM_MC_BEGIN(4, 3);
    297298        IEM_MC_LOCAL(RTUINT256U,            uDst);
    298299        IEM_MC_LOCAL(RTUINT256U,            uSrc1);
     
    424425         */
    425426        uint8_t bImm; IEM_OPCODE_GET_NEXT_U8(&bImm);
     427        IEM_MC_BEGIN(0, 1);
    426428        IEMOP_HLP_DONE_VEX_DECODING_L1_EX(fAvx2);
    427 
    428         IEM_MC_BEGIN(0, 1);
    429429        IEM_MC_LOCAL(RTUINT128U,            uSrc);
    430430
     
    517517         */
    518518        uint8_t bImm; IEM_OPCODE_GET_NEXT_U8(&bImm);
     519        IEM_MC_BEGIN(0, 1);
    519520        IEMOP_HLP_DONE_VEX_DECODING_L1_EX(fAvx2);
    520 
    521         IEM_MC_BEGIN(0, 1);
    522521        IEM_MC_LOCAL(RTUINT128U,            uSrc);
    523522
     
    588587         */
    589588        uint8_t bImm; IEM_OPCODE_GET_NEXT_U8(&bImm);
     589        IEM_MC_BEGIN(4, 0);
    590590        IEMOP_HLP_DONE_VEX_DECODING_L0_EX(fPclMul);
    591         IEM_MC_BEGIN(4, 0);
    592591        IEM_MC_ARG(PRTUINT128U,          puDst,  0);
    593592        IEM_MC_ARG(PCRTUINT128U,         puSrc1, 1);
     
    652651         */
    653652        uint8_t bImm; IEM_OPCODE_GET_NEXT_U8(&bImm);
     653        IEM_MC_BEGIN(4, 3);
    654654        IEMOP_HLP_DONE_VEX_DECODING_L1_EX(fAvx2);
    655         IEM_MC_BEGIN(4, 3);
    656655        IEM_MC_LOCAL(RTUINT256U,            uDst);
    657656        IEM_MC_LOCAL(RTUINT256U,            uSrc1);
     
    727726         */
    728727        uint8_t bOp4; IEM_OPCODE_GET_NEXT_U8(&bOp4);
    729         IEMOP_HLP_DONE_VEX_DECODING_EX(fAvx);
    730728        if (pVCpu->iem.s.uVexLength)
    731729        {
    732730            IEM_MC_BEGIN(4, 4);
     731            IEMOP_HLP_DONE_VEX_DECODING_EX(fAvx);
    733732            IEM_MC_LOCAL(RTUINT256U,            uDst);
    734733            IEM_MC_LOCAL(RTUINT256U,            uSrc1);
     
    752751        {
    753752            IEM_MC_BEGIN(4, 0);
     753            IEMOP_HLP_DONE_VEX_DECODING_EX(fAvx);
    754754            IEM_MC_ARG(PRTUINT128U,          puDst,  0);
    755755            IEM_MC_ARG(PCRTUINT128U,         puSrc1, 1);
     
    869869         * Register, register.
    870870         */
     871        uint8_t bOp4; IEM_OPCODE_GET_NEXT_U8(&bOp4);
    871872        if (pVCpu->iem.s.uVexLength)
    872873        {
    873             uint8_t bOp4; IEM_OPCODE_GET_NEXT_U8(&bOp4);
    874 
     874            IEM_MC_BEGIN(4, 4);
    875875            IEMOP_HLP_DONE_VEX_DECODING_EX(fAvx2);
    876             IEM_MC_BEGIN(4, 4);
    877876            IEM_MC_LOCAL(RTUINT256U,            uDst);
    878877            IEM_MC_LOCAL(RTUINT256U,            uSrc1);
     
    895894        else
    896895        {
    897             uint8_t bOp4; IEM_OPCODE_GET_NEXT_U8(&bOp4);
    898 
     896            IEM_MC_BEGIN(4, 0);
    899897            IEMOP_HLP_DONE_VEX_DECODING_EX(fAvx);
    900             IEM_MC_BEGIN(4, 0);
    901898            IEM_MC_ARG(PRTUINT128U,          puDst,  0);
    902899            IEM_MC_ARG(PCRTUINT128U,         puSrc1, 1);
     
    11231120         */
    11241121        uint8_t bImm8; IEM_OPCODE_GET_NEXT_U8(&bImm8);
    1125         IEMOP_HLP_DONE_VEX_DECODING_L0_AND_NO_VVVV_EX(fBmi2);
    11261122        if (pVCpu->iem.s.fPrefixes & IEM_OP_PRF_SIZE_REX_W)
    11271123        {
    11281124            IEM_MC_BEGIN(3, 0);
     1125            IEMOP_HLP_DONE_VEX_DECODING_L0_AND_NO_VVVV_EX(fBmi2);
    11291126            IEM_MC_ARG(uint64_t *,          pDst,    0);
    11301127            IEM_MC_ARG(uint64_t,            uSrc1,   1);
     
    11391136        {
    11401137            IEM_MC_BEGIN(3, 0);
     1138            IEMOP_HLP_DONE_VEX_DECODING_L0_AND_NO_VVVV_EX(fBmi2);
    11411139            IEM_MC_ARG(uint32_t *,          pDst,    0);
    11421140            IEM_MC_ARG(uint32_t,            uSrc1,   1);
  • trunk/src/VBox/VMM/include/IEMOpHlp.h

    r100579 r100714  
    327327 *
    328328 *  @note Update IEM_VMX_IN_VMX_OPERATION if changes are made here.
     329 *
     330 * @todo r=bird: This is absolutely *INCORRECT* since IEM_VMX_IS_ROOT_MODE
     331 *       is a complicated runtime state (calls CPUMIsGuestInVmxRootMode), and
     332 *       not something we can decide while decoding.  Convert to an IEM_MC!
    329333 */
    330334# define IEMOP_HLP_IN_VMX_OPERATION(a_szInstr, a_InsDiagPrefix) \
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