VirtualBox

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


Ignore:
Timestamp:
Jul 7, 2016 12:25:11 AM (9 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
108564
Message:

IEM: Converted IEMOP_HLP_NO_LOCK_PREFIX to IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX and put them after decoded is done. Expect slight code size increase.

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

Legend:

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

    r62090 r62091  
    1076910769    } while (0)
    1077010770
    10771 /** The instruction allows no lock prefixing (in this encoding), throw \#UD if
    10772  * lock prefixed.
    10773  * @deprecated  IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX */
    10774 #define IEMOP_HLP_NO_LOCK_PREFIX() \
    10775     do \
    10776     { \
    10777         if (pVCpu->iem.s.fPrefixes & IEM_OP_PRF_LOCK) \
    10778             return IEMOP_RAISE_INVALID_LOCK_PREFIX(); \
    10779     } while (0)
    10780 
    1078110771/** The instruction is not available in 64-bit mode, throw \#UD if we're in
    1078210772 * 64-bit mode. */
  • trunk/src/VBox/VMM/VMMAll/IEMAllInstructions.cpp.h

    r62076 r62091  
    3838    if ((bRm & X86_MODRM_MOD_MASK) == (3 << X86_MODRM_MOD_SHIFT))
    3939    {
    40         IEMOP_HLP_NO_LOCK_PREFIX();
     40        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    4141
    4242        IEM_MC_BEGIN(3, 0);
     
    6868
    6969        IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffDst, bRm, 0);
     70        if (!pImpl->pfnLockedU8)
     71            IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    7072        IEM_MC_MEM_MAP(pu8Dst, fAccess, pVCpu->iem.s.iEffSeg, GCPtrEffDst, 0 /*arg*/);
    7173        IEM_MC_FETCH_GREG_U8(u8Src, ((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | pVCpu->iem.s.uRexReg);
     
    100102    if ((bRm & X86_MODRM_MOD_MASK) == (3 << X86_MODRM_MOD_SHIFT))
    101103    {
    102         IEMOP_HLP_NO_LOCK_PREFIX();
     104        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    103105
    104106        switch (pVCpu->iem.s.enmEffOpSize)
     
    170172
    171173                IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffDst, bRm, 0);
     174                if (!pImpl->pfnLockedU16)
     175                    IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    172176                IEM_MC_MEM_MAP(pu16Dst, fAccess, pVCpu->iem.s.iEffSeg, GCPtrEffDst, 0 /*arg*/);
    173177                IEM_MC_FETCH_GREG_U16(u16Src, ((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | pVCpu->iem.s.uRexReg);
     
    192196
    193197                IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffDst, bRm, 0);
     198                if (!pImpl->pfnLockedU32)
     199                    IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    194200                IEM_MC_MEM_MAP(pu32Dst, fAccess, pVCpu->iem.s.iEffSeg, GCPtrEffDst, 0 /*arg*/);
    195201                IEM_MC_FETCH_GREG_U32(u32Src, ((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | pVCpu->iem.s.uRexReg);
     
    214220
    215221                IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffDst, bRm, 0);
     222                if (!pImpl->pfnLockedU64)
     223                    IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    216224                IEM_MC_MEM_MAP(pu64Dst, fAccess, pVCpu->iem.s.iEffSeg, GCPtrEffDst, 0 /*arg*/);
    217225                IEM_MC_FETCH_GREG_U64(u64Src, ((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | pVCpu->iem.s.uRexReg);
     
    242250{
    243251    uint8_t bRm; IEM_OPCODE_GET_NEXT_U8(&bRm);
    244     IEMOP_HLP_NO_LOCK_PREFIX(); /** @todo should probably not be raised until we've fetched all the opcode bytes? */
    245252
    246253    /*
     
    249256    if ((bRm & X86_MODRM_MOD_MASK) == (3 << X86_MODRM_MOD_SHIFT))
    250257    {
     258        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    251259        IEM_MC_BEGIN(3, 0);
    252260        IEM_MC_ARG(uint8_t *,  pu8Dst,  0);
     
    274282
    275283        IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffDst, bRm, 0);
     284        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    276285        IEM_MC_FETCH_MEM_U8(u8Src, pVCpu->iem.s.iEffSeg, GCPtrEffDst);
    277286        IEM_MC_REF_GREG_U8(pu8Dst, ((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | pVCpu->iem.s.uRexReg);
     
    295304{
    296305    uint8_t bRm; IEM_OPCODE_GET_NEXT_U8(&bRm);
    297     IEMOP_HLP_NO_LOCK_PREFIX(); /** @todo should probably not be raised until we've fetched all the opcode bytes? */
    298306
    299307    /*
     
    302310    if ((bRm & X86_MODRM_MOD_MASK) == (3 << X86_MODRM_MOD_SHIFT))
    303311    {
     312        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    304313        switch (pVCpu->iem.s.enmEffOpSize)
    305314        {
     
    366375
    367376                IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffDst, bRm, 0);
     377                IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    368378                IEM_MC_FETCH_MEM_U16(u16Src, pVCpu->iem.s.iEffSeg, GCPtrEffDst);
    369379                IEM_MC_REF_GREG_U16(pu16Dst, ((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | pVCpu->iem.s.uRexReg);
     
    383393
    384394                IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffDst, bRm, 0);
     395                IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    385396                IEM_MC_FETCH_MEM_U32(u32Src, pVCpu->iem.s.iEffSeg, GCPtrEffDst);
    386397                IEM_MC_REF_GREG_U32(pu32Dst, ((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | pVCpu->iem.s.uRexReg);
     
    401412
    402413                IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffDst, bRm, 0);
     414                IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    403415                IEM_MC_FETCH_MEM_U64(u64Src, pVCpu->iem.s.iEffSeg, GCPtrEffDst);
    404416                IEM_MC_REF_GREG_U64(pu64Dst, ((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | pVCpu->iem.s.uRexReg);
     
    424436{
    425437    uint8_t u8Imm; IEM_OPCODE_GET_NEXT_U8(&u8Imm);
    426     IEMOP_HLP_NO_LOCK_PREFIX();
     438    IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    427439
    428440    IEM_MC_BEGIN(3, 0);
     
    454466        {
    455467            uint16_t u16Imm; IEM_OPCODE_GET_NEXT_U16(&u16Imm);
    456             IEMOP_HLP_NO_LOCK_PREFIX();
     468            IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    457469
    458470            IEM_MC_BEGIN(3, 0);
     
    473485        {
    474486            uint32_t u32Imm; IEM_OPCODE_GET_NEXT_U32(&u32Imm);
    475             IEMOP_HLP_NO_LOCK_PREFIX();
     487            IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    476488
    477489            IEM_MC_BEGIN(3, 0);
     
    494506        {
    495507            uint64_t u64Imm; IEM_OPCODE_GET_NEXT_S32_SX_U64(&u64Imm);
    496             IEMOP_HLP_NO_LOCK_PREFIX();
     508            IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    497509
    498510            IEM_MC_BEGIN(3, 0);
     
    976988    IEMOP_MNEMONIC("smsw");
    977989    IEMOP_HLP_MIN_286();
    978     IEMOP_HLP_NO_LOCK_PREFIX();
    979990    if ((bRm & X86_MODRM_MOD_MASK) == (3 << X86_MODRM_MOD_SHIFT))
    980991    {
     992        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    981993        switch (pVCpu->iem.s.enmEffOpSize)
    982994        {
     
    10241036        IEM_MC_LOCAL(RTGCPTR,  GCPtrEffDst);
    10251037        IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffDst, bRm, 0);
     1038        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    10261039        IEM_MC_FETCH_CR0_U16(u16Tmp);
    10271040        if (IEM_GET_TARGET_CPU(pVCpu) > IEMTARGETCPU_386)
     
    10461059    IEMOP_MNEMONIC("lmsw");
    10471060    IEMOP_HLP_MIN_286();
    1048     IEMOP_HLP_NO_LOCK_PREFIX();
    10491061    if ((bRm & X86_MODRM_MOD_MASK) == (3 << X86_MODRM_MOD_SHIFT))
    10501062    {
     1063        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    10511064        IEM_MC_BEGIN(1, 0);
    10521065        IEM_MC_ARG(uint16_t, u16Tmp, 0);
     
    10611074        IEM_MC_LOCAL(RTGCPTR,  GCPtrEffDst);
    10621075        IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffDst, bRm, 0);
     1076        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    10631077        IEM_MC_FETCH_MEM_U16(u16Tmp, pVCpu->iem.s.iEffSeg, GCPtrEffDst);
    10641078        IEM_MC_CALL_CIMPL_1(iemCImpl_lmsw, u16Tmp);
     
    10741088    IEMOP_MNEMONIC("invlpg");
    10751089    IEMOP_HLP_MIN_486();
    1076     IEMOP_HLP_NO_LOCK_PREFIX();
     1090    IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    10771091    IEM_MC_BEGIN(1, 1);
    10781092    IEM_MC_ARG(RTGCPTR, GCPtrEffDst, 0);
     
    10891103    IEMOP_MNEMONIC("swapgs");
    10901104    IEMOP_HLP_ONLY_64BIT();
    1091     IEMOP_HLP_NO_LOCK_PREFIX();
     1105    IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    10921106    return IEM_MC_DEFER_TO_CIMPL_0(iemCImpl_swapgs);
    10931107}
     
    13041318{
    13051319    IEMOP_MNEMONIC("syscall"); /** @todo 286 LOADALL   */
    1306     IEMOP_HLP_NO_LOCK_PREFIX();
     1320    IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    13071321    return IEM_MC_DEFER_TO_CIMPL_0(iemCImpl_syscall);
    13081322}
     
    13131327{
    13141328    IEMOP_MNEMONIC("clts");
    1315     IEMOP_HLP_NO_LOCK_PREFIX();
     1329    IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    13161330    return IEM_MC_DEFER_TO_CIMPL_0(iemCImpl_clts);
    13171331}
     
    13221336{
    13231337    IEMOP_MNEMONIC("sysret");  /** @todo 386 LOADALL   */
    1324     IEMOP_HLP_NO_LOCK_PREFIX();
     1338    IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    13251339    return IEM_MC_DEFER_TO_CIMPL_0(iemCImpl_sysret);
    13261340}
     
    13371351    IEMOP_MNEMONIC("wbinvd");
    13381352    IEMOP_HLP_MIN_486();
    1339     IEMOP_HLP_NO_LOCK_PREFIX();
     1353    IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    13401354    IEM_MC_BEGIN(0, 0);
    13411355    IEM_MC_RAISE_GP0_IF_CPL_NOT_ZERO();
     
    13701384    }
    13711385
    1372     IEMOP_HLP_NO_LOCK_PREFIX();
    13731386    switch ((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK)
    13741387    {
     
    13871400    IEM_MC_LOCAL(RTGCPTR,  GCPtrEffSrc);
    13881401    IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffSrc, bRm, 0);
     1402    IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    13891403    /* Currently a NOP. */
    13901404    IEM_MC_ADVANCE_RIP();
     
    16881702    if ((bRm & X86_MODRM_MOD_MASK) != (3 << X86_MODRM_MOD_SHIFT))
    16891703    {
    1690         IEMOP_HLP_NO_LOCK_PREFIX();
    16911704        switch ((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK)
    16921705        {
     
    17051718        IEM_MC_LOCAL(RTGCPTR,  GCPtrEffSrc);
    17061719        IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffSrc, bRm, 0);
     1720        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    17071721        /* Currently a NOP. */
    17081722        IEM_MC_ADVANCE_RIP();
     
    17181732FNIEMOP_DEF(iemOp_nop_Ev)
    17191733{
    1720     IEMOP_HLP_NO_LOCK_PREFIX();
    17211734    uint8_t bRm; IEM_OPCODE_GET_NEXT_U8(&bRm);
    17221735    if ((bRm & X86_MODRM_MOD_MASK) == (3 << X86_MODRM_MOD_SHIFT))
    17231736    {
     1737        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    17241738        IEM_MC_BEGIN(0, 0);
    17251739        IEM_MC_ADVANCE_RIP();
     
    17311745        IEM_MC_LOCAL(RTGCPTR, GCPtrEffSrc);
    17321746        IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffSrc, bRm, 0);
     1747        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    17331748        /* Currently a NOP. */
    17341749        IEM_MC_ADVANCE_RIP();
     
    17781793    IEMOP_HLP_MIN_386();
    17791794    uint8_t bRm; IEM_OPCODE_GET_NEXT_U8(&bRm);
    1780     IEMOP_HLP_NO_LOCK_PREFIX();
     1795    IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    17811796    if (pVCpu->iem.s.fPrefixes & IEM_OP_PRF_REX_R)
    17821797        return IEMOP_RAISE_INVALID_OPCODE();
     
    34823497    {
    34833498        int16_t i16Imm; IEM_OPCODE_GET_NEXT_S16(&i16Imm);
    3484         IEMOP_HLP_NO_LOCK_PREFIX();
     3499        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    34853500
    34863501        IEM_MC_BEGIN(0, 0);
     
    34953510    {
    34963511        int32_t i32Imm; IEM_OPCODE_GET_NEXT_S32(&i32Imm);
    3497         IEMOP_HLP_NO_LOCK_PREFIX();
     3512        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    34983513
    34993514        IEM_MC_BEGIN(0, 0);
     
    35183533    {
    35193534        int16_t i16Imm; IEM_OPCODE_GET_NEXT_S16(&i16Imm);
    3520         IEMOP_HLP_NO_LOCK_PREFIX();
     3535        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    35213536
    35223537        IEM_MC_BEGIN(0, 0);
     
    35313546    {
    35323547        int32_t i32Imm; IEM_OPCODE_GET_NEXT_S32(&i32Imm);
    3533         IEMOP_HLP_NO_LOCK_PREFIX();
     3548        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    35343549
    35353550        IEM_MC_BEGIN(0, 0);
     
    35543569    {
    35553570        int16_t i16Imm; IEM_OPCODE_GET_NEXT_S16(&i16Imm);
    3556         IEMOP_HLP_NO_LOCK_PREFIX();
     3571        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    35573572
    35583573        IEM_MC_BEGIN(0, 0);
     
    35673582    {
    35683583        int32_t i32Imm; IEM_OPCODE_GET_NEXT_S32(&i32Imm);
    3569         IEMOP_HLP_NO_LOCK_PREFIX();
     3584        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    35703585
    35713586        IEM_MC_BEGIN(0, 0);
     
    35903605    {
    35913606        int16_t i16Imm; IEM_OPCODE_GET_NEXT_S16(&i16Imm);
    3592         IEMOP_HLP_NO_LOCK_PREFIX();
     3607        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    35933608
    35943609        IEM_MC_BEGIN(0, 0);
     
    36033618    {
    36043619        int32_t i32Imm; IEM_OPCODE_GET_NEXT_S32(&i32Imm);
    3605         IEMOP_HLP_NO_LOCK_PREFIX();
     3620        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    36063621
    36073622        IEM_MC_BEGIN(0, 0);
     
    36263641    {
    36273642        int16_t i16Imm; IEM_OPCODE_GET_NEXT_S16(&i16Imm);
    3628         IEMOP_HLP_NO_LOCK_PREFIX();
     3643        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    36293644
    36303645        IEM_MC_BEGIN(0, 0);
     
    36393654    {
    36403655        int32_t i32Imm; IEM_OPCODE_GET_NEXT_S32(&i32Imm);
    3641         IEMOP_HLP_NO_LOCK_PREFIX();
     3656        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    36423657
    36433658        IEM_MC_BEGIN(0, 0);
     
    36623677    {
    36633678        int16_t i16Imm; IEM_OPCODE_GET_NEXT_S16(&i16Imm);
    3664         IEMOP_HLP_NO_LOCK_PREFIX();
     3679        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    36653680
    36663681        IEM_MC_BEGIN(0, 0);
     
    36753690    {
    36763691        int32_t i32Imm; IEM_OPCODE_GET_NEXT_S32(&i32Imm);
    3677         IEMOP_HLP_NO_LOCK_PREFIX();
     3692        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    36783693
    36793694        IEM_MC_BEGIN(0, 0);
     
    36983713    {
    36993714        int16_t i16Imm; IEM_OPCODE_GET_NEXT_S16(&i16Imm);
    3700         IEMOP_HLP_NO_LOCK_PREFIX();
     3715        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    37013716
    37023717        IEM_MC_BEGIN(0, 0);
     
    37113726    {
    37123727        int32_t i32Imm; IEM_OPCODE_GET_NEXT_S32(&i32Imm);
    3713         IEMOP_HLP_NO_LOCK_PREFIX();
     3728        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    37143729
    37153730        IEM_MC_BEGIN(0, 0);
     
    37343749    {
    37353750        int16_t i16Imm; IEM_OPCODE_GET_NEXT_S16(&i16Imm);
    3736         IEMOP_HLP_NO_LOCK_PREFIX();
     3751        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    37373752
    37383753        IEM_MC_BEGIN(0, 0);
     
    37473762    {
    37483763        int32_t i32Imm; IEM_OPCODE_GET_NEXT_S32(&i32Imm);
    3749         IEMOP_HLP_NO_LOCK_PREFIX();
     3764        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    37503765
    37513766        IEM_MC_BEGIN(0, 0);
     
    37703785    {
    37713786        int16_t i16Imm; IEM_OPCODE_GET_NEXT_S16(&i16Imm);
    3772         IEMOP_HLP_NO_LOCK_PREFIX();
     3787        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    37733788
    37743789        IEM_MC_BEGIN(0, 0);
     
    37833798    {
    37843799        int32_t i32Imm; IEM_OPCODE_GET_NEXT_S32(&i32Imm);
    3785         IEMOP_HLP_NO_LOCK_PREFIX();
     3800        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    37863801
    37873802        IEM_MC_BEGIN(0, 0);
     
    38063821    {
    38073822        int16_t i16Imm; IEM_OPCODE_GET_NEXT_S16(&i16Imm);
    3808         IEMOP_HLP_NO_LOCK_PREFIX();
     3823        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    38093824
    38103825        IEM_MC_BEGIN(0, 0);
     
    38193834    {
    38203835        int32_t i32Imm; IEM_OPCODE_GET_NEXT_S32(&i32Imm);
    3821         IEMOP_HLP_NO_LOCK_PREFIX();
     3836        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    38223837
    38233838        IEM_MC_BEGIN(0, 0);
     
    38423857    {
    38433858        int16_t i16Imm; IEM_OPCODE_GET_NEXT_S16(&i16Imm);
    3844         IEMOP_HLP_NO_LOCK_PREFIX();
     3859        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    38453860
    38463861        IEM_MC_BEGIN(0, 0);
     
    38553870    {
    38563871        int32_t i32Imm; IEM_OPCODE_GET_NEXT_S32(&i32Imm);
    3857         IEMOP_HLP_NO_LOCK_PREFIX();
     3872        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    38583873
    38593874        IEM_MC_BEGIN(0, 0);
     
    38783893    {
    38793894        int16_t i16Imm; IEM_OPCODE_GET_NEXT_S16(&i16Imm);
    3880         IEMOP_HLP_NO_LOCK_PREFIX();
     3895        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    38813896
    38823897        IEM_MC_BEGIN(0, 0);
     
    38913906    {
    38923907        int32_t i32Imm; IEM_OPCODE_GET_NEXT_S32(&i32Imm);
    3893         IEMOP_HLP_NO_LOCK_PREFIX();
     3908        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    38943909
    38953910        IEM_MC_BEGIN(0, 0);
     
    39143929    {
    39153930        int16_t i16Imm; IEM_OPCODE_GET_NEXT_S16(&i16Imm);
    3916         IEMOP_HLP_NO_LOCK_PREFIX();
     3931        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    39173932
    39183933        IEM_MC_BEGIN(0, 0);
     
    39273942    {
    39283943        int32_t i32Imm; IEM_OPCODE_GET_NEXT_S32(&i32Imm);
    3929         IEMOP_HLP_NO_LOCK_PREFIX();
     3944        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    39303945
    39313946        IEM_MC_BEGIN(0, 0);
     
    39503965    {
    39513966        int16_t i16Imm; IEM_OPCODE_GET_NEXT_S16(&i16Imm);
    3952         IEMOP_HLP_NO_LOCK_PREFIX();
     3967        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    39533968
    39543969        IEM_MC_BEGIN(0, 0);
     
    39633978    {
    39643979        int32_t i32Imm; IEM_OPCODE_GET_NEXT_S32(&i32Imm);
    3965         IEMOP_HLP_NO_LOCK_PREFIX();
     3980        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    39663981
    39673982        IEM_MC_BEGIN(0, 0);
     
    39864001    {
    39874002        int16_t i16Imm; IEM_OPCODE_GET_NEXT_S16(&i16Imm);
    3988         IEMOP_HLP_NO_LOCK_PREFIX();
     4003        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    39894004
    39904005        IEM_MC_BEGIN(0, 0);
     
    39994014    {
    40004015        int32_t i32Imm; IEM_OPCODE_GET_NEXT_S32(&i32Imm);
    4001         IEMOP_HLP_NO_LOCK_PREFIX();
     4016        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    40024017
    40034018        IEM_MC_BEGIN(0, 0);
     
    40224037    {
    40234038        int16_t i16Imm; IEM_OPCODE_GET_NEXT_S16(&i16Imm);
    4024         IEMOP_HLP_NO_LOCK_PREFIX();
     4039        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    40254040
    40264041        IEM_MC_BEGIN(0, 0);
     
    40354050    {
    40364051        int32_t i32Imm; IEM_OPCODE_GET_NEXT_S32(&i32Imm);
    4037         IEMOP_HLP_NO_LOCK_PREFIX();
     4052        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    40384053
    40394054        IEM_MC_BEGIN(0, 0);
     
    40554070    IEMOP_HLP_MIN_386();
    40564071    uint8_t bRm; IEM_OPCODE_GET_NEXT_U8(&bRm);
    4057     IEMOP_HLP_NO_LOCK_PREFIX(); /** @todo too early? */
    40584072
    40594073    /** @todo Encoding test: Check if the 'reg' field is ignored or decoded in
     
    40634077    {
    40644078        /* register target */
     4079        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    40654080        IEM_MC_BEGIN(0, 0);
    40664081        IEM_MC_IF_EFL_BIT_SET(X86_EFL_OF) {
     
    40784093        IEM_MC_LOCAL(RTGCPTR, GCPtrEffDst);
    40794094        IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffDst, bRm, 0);
     4095        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    40804096        IEM_MC_IF_EFL_BIT_SET(X86_EFL_OF) {
    40814097            IEM_MC_STORE_MEM_U8_CONST(pVCpu->iem.s.iEffSeg, GCPtrEffDst, 1);
     
    40964112    IEMOP_HLP_MIN_386();
    40974113    uint8_t bRm; IEM_OPCODE_GET_NEXT_U8(&bRm);
    4098     IEMOP_HLP_NO_LOCK_PREFIX(); /** @todo too early? */
    40994114
    41004115    /** @todo Encoding test: Check if the 'reg' field is ignored or decoded in
     
    41044119    {
    41054120        /* register target */
     4121        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    41064122        IEM_MC_BEGIN(0, 0);
    41074123        IEM_MC_IF_EFL_BIT_SET(X86_EFL_OF) {
     
    41194135        IEM_MC_LOCAL(RTGCPTR, GCPtrEffDst);
    41204136        IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffDst, bRm, 0);
     4137        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    41214138        IEM_MC_IF_EFL_BIT_SET(X86_EFL_OF) {
    41224139            IEM_MC_STORE_MEM_U8_CONST(pVCpu->iem.s.iEffSeg, GCPtrEffDst, 0);
     
    41374154    IEMOP_HLP_MIN_386();
    41384155    uint8_t bRm; IEM_OPCODE_GET_NEXT_U8(&bRm);
    4139     IEMOP_HLP_NO_LOCK_PREFIX(); /** @todo too early? */
    41404156
    41414157    /** @todo Encoding test: Check if the 'reg' field is ignored or decoded in
     
    41454161    {
    41464162        /* register target */
     4163        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    41474164        IEM_MC_BEGIN(0, 0);
    41484165        IEM_MC_IF_EFL_BIT_SET(X86_EFL_CF) {
     
    41604177        IEM_MC_LOCAL(RTGCPTR, GCPtrEffDst);
    41614178        IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffDst, bRm, 0);
     4179        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    41624180        IEM_MC_IF_EFL_BIT_SET(X86_EFL_CF) {
    41634181            IEM_MC_STORE_MEM_U8_CONST(pVCpu->iem.s.iEffSeg, GCPtrEffDst, 1);
     
    41784196    IEMOP_HLP_MIN_386();
    41794197    uint8_t bRm; IEM_OPCODE_GET_NEXT_U8(&bRm);
    4180     IEMOP_HLP_NO_LOCK_PREFIX(); /** @todo too early? */
    41814198
    41824199    /** @todo Encoding test: Check if the 'reg' field is ignored or decoded in
     
    41864203    {
    41874204        /* register target */
     4205        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    41884206        IEM_MC_BEGIN(0, 0);
    41894207        IEM_MC_IF_EFL_BIT_SET(X86_EFL_CF) {
     
    42014219        IEM_MC_LOCAL(RTGCPTR, GCPtrEffDst);
    42024220        IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffDst, bRm, 0);
     4221        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    42034222        IEM_MC_IF_EFL_BIT_SET(X86_EFL_CF) {
    42044223            IEM_MC_STORE_MEM_U8_CONST(pVCpu->iem.s.iEffSeg, GCPtrEffDst, 0);
     
    42194238    IEMOP_HLP_MIN_386();
    42204239    uint8_t bRm; IEM_OPCODE_GET_NEXT_U8(&bRm);
    4221     IEMOP_HLP_NO_LOCK_PREFIX(); /** @todo too early? */
    42224240
    42234241    /** @todo Encoding test: Check if the 'reg' field is ignored or decoded in
     
    42274245    {
    42284246        /* register target */
     4247        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    42294248        IEM_MC_BEGIN(0, 0);
    42304249        IEM_MC_IF_EFL_BIT_SET(X86_EFL_ZF) {
     
    42424261        IEM_MC_LOCAL(RTGCPTR, GCPtrEffDst);
    42434262        IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffDst, bRm, 0);
     4263        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    42444264        IEM_MC_IF_EFL_BIT_SET(X86_EFL_ZF) {
    42454265            IEM_MC_STORE_MEM_U8_CONST(pVCpu->iem.s.iEffSeg, GCPtrEffDst, 1);
     
    42604280    IEMOP_HLP_MIN_386();
    42614281    uint8_t bRm; IEM_OPCODE_GET_NEXT_U8(&bRm);
    4262     IEMOP_HLP_NO_LOCK_PREFIX(); /** @todo too early? */
    42634282
    42644283    /** @todo Encoding test: Check if the 'reg' field is ignored or decoded in
     
    42684287    {
    42694288        /* register target */
     4289        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    42704290        IEM_MC_BEGIN(0, 0);
    42714291        IEM_MC_IF_EFL_BIT_SET(X86_EFL_ZF) {
     
    42834303        IEM_MC_LOCAL(RTGCPTR, GCPtrEffDst);
    42844304        IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffDst, bRm, 0);
     4305        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    42854306        IEM_MC_IF_EFL_BIT_SET(X86_EFL_ZF) {
    42864307            IEM_MC_STORE_MEM_U8_CONST(pVCpu->iem.s.iEffSeg, GCPtrEffDst, 0);
     
    43014322    IEMOP_HLP_MIN_386();
    43024323    uint8_t bRm; IEM_OPCODE_GET_NEXT_U8(&bRm);
    4303     IEMOP_HLP_NO_LOCK_PREFIX(); /** @todo too early? */
    43044324
    43054325    /** @todo Encoding test: Check if the 'reg' field is ignored or decoded in
     
    43094329    {
    43104330        /* register target */
     4331        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    43114332        IEM_MC_BEGIN(0, 0);
    43124333        IEM_MC_IF_EFL_ANY_BITS_SET(X86_EFL_CF | X86_EFL_ZF) {
     
    43244345        IEM_MC_LOCAL(RTGCPTR, GCPtrEffDst);
    43254346        IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffDst, bRm, 0);
     4347        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    43264348        IEM_MC_IF_EFL_ANY_BITS_SET(X86_EFL_CF | X86_EFL_ZF) {
    43274349            IEM_MC_STORE_MEM_U8_CONST(pVCpu->iem.s.iEffSeg, GCPtrEffDst, 1);
     
    43424364    IEMOP_HLP_MIN_386();
    43434365    uint8_t bRm; IEM_OPCODE_GET_NEXT_U8(&bRm);
    4344     IEMOP_HLP_NO_LOCK_PREFIX(); /** @todo too early? */
    43454366
    43464367    /** @todo Encoding test: Check if the 'reg' field is ignored or decoded in
     
    43504371    {
    43514372        /* register target */
     4373        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    43524374        IEM_MC_BEGIN(0, 0);
    43534375        IEM_MC_IF_EFL_ANY_BITS_SET(X86_EFL_CF | X86_EFL_ZF) {
     
    43654387        IEM_MC_LOCAL(RTGCPTR, GCPtrEffDst);
    43664388        IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffDst, bRm, 0);
     4389        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    43674390        IEM_MC_IF_EFL_ANY_BITS_SET(X86_EFL_CF | X86_EFL_ZF) {
    43684391            IEM_MC_STORE_MEM_U8_CONST(pVCpu->iem.s.iEffSeg, GCPtrEffDst, 0);
     
    43834406    IEMOP_HLP_MIN_386();
    43844407    uint8_t bRm; IEM_OPCODE_GET_NEXT_U8(&bRm);
    4385     IEMOP_HLP_NO_LOCK_PREFIX(); /** @todo too early? */
    43864408
    43874409    /** @todo Encoding test: Check if the 'reg' field is ignored or decoded in
     
    43914413    {
    43924414        /* register target */
     4415        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    43934416        IEM_MC_BEGIN(0, 0);
    43944417        IEM_MC_IF_EFL_BIT_SET(X86_EFL_SF) {
     
    44064429        IEM_MC_LOCAL(RTGCPTR, GCPtrEffDst);
    44074430        IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffDst, bRm, 0);
     4431        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    44084432        IEM_MC_IF_EFL_BIT_SET(X86_EFL_SF) {
    44094433            IEM_MC_STORE_MEM_U8_CONST(pVCpu->iem.s.iEffSeg, GCPtrEffDst, 1);
     
    44244448    IEMOP_HLP_MIN_386();
    44254449    uint8_t bRm; IEM_OPCODE_GET_NEXT_U8(&bRm);
    4426     IEMOP_HLP_NO_LOCK_PREFIX(); /** @todo too early? */
    44274450
    44284451    /** @todo Encoding test: Check if the 'reg' field is ignored or decoded in
     
    44324455    {
    44334456        /* register target */
     4457        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    44344458        IEM_MC_BEGIN(0, 0);
    44354459        IEM_MC_IF_EFL_BIT_SET(X86_EFL_SF) {
     
    44474471        IEM_MC_LOCAL(RTGCPTR, GCPtrEffDst);
    44484472        IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffDst, bRm, 0);
     4473        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    44494474        IEM_MC_IF_EFL_BIT_SET(X86_EFL_SF) {
    44504475            IEM_MC_STORE_MEM_U8_CONST(pVCpu->iem.s.iEffSeg, GCPtrEffDst, 0);
     
    44654490    IEMOP_HLP_MIN_386();
    44664491    uint8_t bRm; IEM_OPCODE_GET_NEXT_U8(&bRm);
    4467     IEMOP_HLP_NO_LOCK_PREFIX(); /** @todo too early? */
    44684492
    44694493    /** @todo Encoding test: Check if the 'reg' field is ignored or decoded in
     
    44734497    {
    44744498        /* register target */
     4499        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    44754500        IEM_MC_BEGIN(0, 0);
    44764501        IEM_MC_IF_EFL_BIT_SET(X86_EFL_PF) {
     
    44884513        IEM_MC_LOCAL(RTGCPTR, GCPtrEffDst);
    44894514        IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffDst, bRm, 0);
     4515        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    44904516        IEM_MC_IF_EFL_BIT_SET(X86_EFL_PF) {
    44914517            IEM_MC_STORE_MEM_U8_CONST(pVCpu->iem.s.iEffSeg, GCPtrEffDst, 1);
     
    45064532    IEMOP_HLP_MIN_386();
    45074533    uint8_t bRm; IEM_OPCODE_GET_NEXT_U8(&bRm);
    4508     IEMOP_HLP_NO_LOCK_PREFIX(); /** @todo too early? */
    45094534
    45104535    /** @todo Encoding test: Check if the 'reg' field is ignored or decoded in
     
    45144539    {
    45154540        /* register target */
     4541        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    45164542        IEM_MC_BEGIN(0, 0);
    45174543        IEM_MC_IF_EFL_BIT_SET(X86_EFL_PF) {
     
    45294555        IEM_MC_LOCAL(RTGCPTR, GCPtrEffDst);
    45304556        IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffDst, bRm, 0);
     4557        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    45314558        IEM_MC_IF_EFL_BIT_SET(X86_EFL_PF) {
    45324559            IEM_MC_STORE_MEM_U8_CONST(pVCpu->iem.s.iEffSeg, GCPtrEffDst, 0);
     
    45474574    IEMOP_HLP_MIN_386();
    45484575    uint8_t bRm; IEM_OPCODE_GET_NEXT_U8(&bRm);
    4549     IEMOP_HLP_NO_LOCK_PREFIX(); /** @todo too early? */
    45504576
    45514577    /** @todo Encoding test: Check if the 'reg' field is ignored or decoded in
     
    45554581    {
    45564582        /* register target */
     4583        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    45574584        IEM_MC_BEGIN(0, 0);
    45584585        IEM_MC_IF_EFL_BITS_NE(X86_EFL_SF, X86_EFL_OF) {
     
    45704597        IEM_MC_LOCAL(RTGCPTR, GCPtrEffDst);
    45714598        IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffDst, bRm, 0);
     4599        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    45724600        IEM_MC_IF_EFL_BITS_NE(X86_EFL_SF, X86_EFL_OF) {
    45734601            IEM_MC_STORE_MEM_U8_CONST(pVCpu->iem.s.iEffSeg, GCPtrEffDst, 1);
     
    45884616    IEMOP_HLP_MIN_386();
    45894617    uint8_t bRm; IEM_OPCODE_GET_NEXT_U8(&bRm);
    4590     IEMOP_HLP_NO_LOCK_PREFIX(); /** @todo too early? */
    45914618
    45924619    /** @todo Encoding test: Check if the 'reg' field is ignored or decoded in
     
    45964623    {
    45974624        /* register target */
     4625        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    45984626        IEM_MC_BEGIN(0, 0);
    45994627        IEM_MC_IF_EFL_BITS_NE(X86_EFL_SF, X86_EFL_OF) {
     
    46114639        IEM_MC_LOCAL(RTGCPTR, GCPtrEffDst);
    46124640        IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffDst, bRm, 0);
     4641        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    46134642        IEM_MC_IF_EFL_BITS_NE(X86_EFL_SF, X86_EFL_OF) {
    46144643            IEM_MC_STORE_MEM_U8_CONST(pVCpu->iem.s.iEffSeg, GCPtrEffDst, 0);
     
    46294658    IEMOP_HLP_MIN_386();
    46304659    uint8_t bRm; IEM_OPCODE_GET_NEXT_U8(&bRm);
    4631     IEMOP_HLP_NO_LOCK_PREFIX(); /** @todo too early? */
    46324660
    46334661    /** @todo Encoding test: Check if the 'reg' field is ignored or decoded in
     
    46374665    {
    46384666        /* register target */
     4667        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    46394668        IEM_MC_BEGIN(0, 0);
    46404669        IEM_MC_IF_EFL_BIT_SET_OR_BITS_NE(X86_EFL_ZF, X86_EFL_SF, X86_EFL_OF) {
     
    46524681        IEM_MC_LOCAL(RTGCPTR, GCPtrEffDst);
    46534682        IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffDst, bRm, 0);
     4683        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    46544684        IEM_MC_IF_EFL_BIT_SET_OR_BITS_NE(X86_EFL_ZF, X86_EFL_SF, X86_EFL_OF) {
    46554685            IEM_MC_STORE_MEM_U8_CONST(pVCpu->iem.s.iEffSeg, GCPtrEffDst, 1);
     
    46704700    IEMOP_HLP_MIN_386();
    46714701    uint8_t bRm; IEM_OPCODE_GET_NEXT_U8(&bRm);
    4672     IEMOP_HLP_NO_LOCK_PREFIX(); /** @todo too early? */
    46734702
    46744703    /** @todo Encoding test: Check if the 'reg' field is ignored or decoded in
     
    46784707    {
    46794708        /* register target */
     4709        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    46804710        IEM_MC_BEGIN(0, 0);
    46814711        IEM_MC_IF_EFL_BIT_SET_OR_BITS_NE(X86_EFL_ZF, X86_EFL_SF, X86_EFL_OF) {
     
    46934723        IEM_MC_LOCAL(RTGCPTR, GCPtrEffDst);
    46944724        IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffDst, bRm, 0);
     4725        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    46954726        IEM_MC_IF_EFL_BIT_SET_OR_BITS_NE(X86_EFL_ZF, X86_EFL_SF, X86_EFL_OF) {
    46964727            IEM_MC_STORE_MEM_U8_CONST(pVCpu->iem.s.iEffSeg, GCPtrEffDst, 0);
     
    47104741FNIEMOP_DEF_1(iemOpCommonPushSReg, uint8_t, iReg)
    47114742{
    4712     IEMOP_HLP_NO_LOCK_PREFIX();
     4743    IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    47134744    if (iReg < X86_SREG_FS)
    47144745        IEMOP_HLP_NO_64BIT();
     
    47544785    IEMOP_MNEMONIC("push fs");
    47554786    IEMOP_HLP_MIN_386();
    4756     IEMOP_HLP_NO_LOCK_PREFIX();
     4787    IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    47574788    return FNIEMOP_CALL_1(iemOpCommonPushSReg, X86_SREG_FS);
    47584789}
     
    47644795    IEMOP_MNEMONIC("pop fs");
    47654796    IEMOP_HLP_MIN_386();
    4766     IEMOP_HLP_NO_LOCK_PREFIX();
     4797    IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    47674798    return IEM_MC_DEFER_TO_CIMPL_2(iemCImpl_pop_Sreg, X86_SREG_FS, pVCpu->iem.s.enmEffOpSize);
    47684799}
     
    47744805    IEMOP_MNEMONIC("cpuid");
    47754806    IEMOP_HLP_MIN_486(); /* not all 486es. */
    4776     IEMOP_HLP_NO_LOCK_PREFIX();
     4807    IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    47774808    return IEM_MC_DEFER_TO_CIMPL_0(iemCImpl_cpuid);
    47784809}
     
    47914822    {
    47924823        /* register destination. */
    4793         IEMOP_HLP_NO_LOCK_PREFIX();
     4824        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    47944825        switch (pVCpu->iem.s.enmEffOpSize)
    47954826        {
     
    48544885            fAccess = IEM_ACCESS_DATA_RW;
    48554886        else /* BT */
    4856         {
    4857             IEMOP_HLP_NO_LOCK_PREFIX();
    48584887            fAccess = IEM_ACCESS_DATA_R;
    4859         }
    48604888
    48614889        NOREF(fAccess);
     
    48734901
    48744902                IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffDst, bRm, 0);
     4903                if (pImpl->pfnLockedU16)
     4904                    IEMOP_HLP_DONE_DECODING();
     4905                else
     4906                    IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    48754907                IEM_MC_FETCH_GREG_U16(u16Src, ((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | pVCpu->iem.s.uRexReg);
    48764908                IEM_MC_ASSIGN(i16AddrAdj, u16Src);
     
    49024934
    49034935                IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffDst, bRm, 0);
     4936                if (pImpl->pfnLockedU16)
     4937                    IEMOP_HLP_DONE_DECODING();
     4938                else
     4939                    IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    49044940                IEM_MC_FETCH_GREG_U32(u32Src, ((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | pVCpu->iem.s.uRexReg);
    49054941                IEM_MC_ASSIGN(i32AddrAdj, u32Src);
     
    49314967
    49324968                IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffDst, bRm, 0);
     4969                if (pImpl->pfnLockedU16)
     4970                    IEMOP_HLP_DONE_DECODING();
     4971                else
     4972                    IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    49334973                IEM_MC_FETCH_GREG_U64(u64Src, ((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | pVCpu->iem.s.uRexReg);
    49344974                IEM_MC_ASSIGN(i64AddrAdj, u64Src);
     
    49725012{
    49735013    uint8_t bRm; IEM_OPCODE_GET_NEXT_U8(&bRm);
    4974     IEMOP_HLP_NO_LOCK_PREFIX();
    49755014    IEMOP_VERIFICATION_UNDEFINED_EFLAGS(X86_EFL_AF | X86_EFL_OF);
    49765015
     
    49785017    {
    49795018        uint8_t cShift; IEM_OPCODE_GET_NEXT_U8(&cShift);
    4980         IEMOP_HLP_NO_LOCK_PREFIX();
     5019        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    49815020
    49825021        switch (pVCpu->iem.s.enmEffOpSize)
     
    50365075    else
    50375076    {
    5038         IEMOP_HLP_NO_LOCK_PREFIX(); /** @todo too early? */
    5039 
    50405077        switch (pVCpu->iem.s.enmEffOpSize)
    50415078        {
     
    50515088                uint8_t cShift; IEM_OPCODE_GET_NEXT_U8(&cShift);
    50525089                IEM_MC_ASSIGN(cShiftArg, cShift);
     5090                IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    50535091                IEM_MC_FETCH_GREG_U16(u16Src, ((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | pVCpu->iem.s.uRexReg);
    50545092                IEM_MC_FETCH_EFLAGS(EFlags);
     
    50735111                uint8_t cShift; IEM_OPCODE_GET_NEXT_U8(&cShift);
    50745112                IEM_MC_ASSIGN(cShiftArg, cShift);
     5113                IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    50755114                IEM_MC_FETCH_GREG_U32(u32Src, ((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | pVCpu->iem.s.uRexReg);
    50765115                IEM_MC_FETCH_EFLAGS(EFlags);
     
    50955134                uint8_t cShift; IEM_OPCODE_GET_NEXT_U8(&cShift);
    50965135                IEM_MC_ASSIGN(cShiftArg, cShift);
     5136                IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    50975137                IEM_MC_FETCH_GREG_U64(u64Src, ((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | pVCpu->iem.s.uRexReg);
    50985138                IEM_MC_FETCH_EFLAGS(EFlags);
     
    51185158{
    51195159    uint8_t bRm; IEM_OPCODE_GET_NEXT_U8(&bRm);
    5120     IEMOP_HLP_NO_LOCK_PREFIX();
    51215160    IEMOP_VERIFICATION_UNDEFINED_EFLAGS(X86_EFL_AF | X86_EFL_OF);
    51225161
    51235162    if ((bRm & X86_MODRM_MOD_MASK) == (3 << X86_MODRM_MOD_SHIFT))
    51245163    {
    5125         IEMOP_HLP_NO_LOCK_PREFIX();
     5164        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    51265165
    51275166        switch (pVCpu->iem.s.enmEffOpSize)
     
    51845223    else
    51855224    {
    5186         IEMOP_HLP_NO_LOCK_PREFIX(); /** @todo too early? */
    5187 
    51885225        switch (pVCpu->iem.s.enmEffOpSize)
    51895226        {
     
    51975234
    51985235                IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffDst, bRm, 0);
     5236                IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    51995237                IEM_MC_FETCH_GREG_U16(u16Src, ((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | pVCpu->iem.s.uRexReg);
    52005238                IEM_MC_FETCH_GREG_U8(cShiftArg, X86_GREG_xCX);
     
    52185256
    52195257                IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffDst, bRm, 0);
     5258                IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    52205259                IEM_MC_FETCH_GREG_U32(u32Src, ((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | pVCpu->iem.s.uRexReg);
    52215260                IEM_MC_FETCH_GREG_U8(cShiftArg, X86_GREG_xCX);
     
    52395278
    52405279                IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffDst, bRm, 0);
     5280                IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    52415281                IEM_MC_FETCH_GREG_U64(u64Src, ((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | pVCpu->iem.s.uRexReg);
    52425282                IEM_MC_FETCH_GREG_U8(cShiftArg, X86_GREG_xCX);
     
    52815321    IEMOP_MNEMONIC("push gs");
    52825322    IEMOP_HLP_MIN_386();
    5283     IEMOP_HLP_NO_LOCK_PREFIX();
     5323    IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    52845324    return FNIEMOP_CALL_1(iemOpCommonPushSReg, X86_SREG_GS);
    52855325}
     
    52915331    IEMOP_MNEMONIC("pop gs");
    52925332    IEMOP_HLP_MIN_386();
    5293     IEMOP_HLP_NO_LOCK_PREFIX();
     5333    IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    52945334    return IEM_MC_DEFER_TO_CIMPL_2(iemCImpl_pop_Sreg, X86_SREG_GS, pVCpu->iem.s.enmEffOpSize);
    52955335}
     
    53915431{
    53925432    IEMOP_MNEMONIC("lfence");
    5393     IEMOP_HLP_NO_LOCK_PREFIX();
     5433    IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    53945434    if (!IEM_GET_GUEST_CPU_FEATURES(pVCpu)->fSse2)
    53955435        return IEMOP_RAISE_INVALID_OPCODE();
     
    54105450{
    54115451    IEMOP_MNEMONIC("mfence");
    5412     IEMOP_HLP_NO_LOCK_PREFIX();
     5452    IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    54135453    if (!IEM_GET_GUEST_CPU_FEATURES(pVCpu)->fSse2)
    54145454        return IEMOP_RAISE_INVALID_OPCODE();
     
    54295469{
    54305470    IEMOP_MNEMONIC("sfence");
    5431     IEMOP_HLP_NO_LOCK_PREFIX();
     5471    IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    54325472    if (!IEM_GET_GUEST_CPU_FEATURES(pVCpu)->fSse2)
    54335473        return IEMOP_RAISE_INVALID_OPCODE();
     
    58965936
    58975937    uint8_t bRm; IEM_OPCODE_GET_NEXT_U8(&bRm);
    5898     IEMOP_HLP_NO_LOCK_PREFIX(); /** @todo should probably not be raised until we've fetched all the opcode bytes? */
    58995938
    59005939    /*
     
    59035942    if ((bRm & X86_MODRM_MOD_MASK) == (3 << X86_MODRM_MOD_SHIFT))
    59045943    {
     5944        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    59055945        switch (pVCpu->iem.s.enmEffOpSize)
    59065946        {
     
    59475987                IEM_MC_LOCAL(RTGCPTR, GCPtrEffDst);
    59485988                IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffDst, bRm, 0);
     5989                IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    59495990                IEM_MC_FETCH_MEM_U8_ZX_U16(u16Value, pVCpu->iem.s.iEffSeg, GCPtrEffDst);
    59505991                IEM_MC_STORE_GREG_U16(((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | pVCpu->iem.s.uRexReg, u16Value);
     
    59585999                IEM_MC_LOCAL(RTGCPTR, GCPtrEffDst);
    59596000                IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffDst, bRm, 0);
     6001                IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    59606002                IEM_MC_FETCH_MEM_U8_ZX_U32(u32Value, pVCpu->iem.s.iEffSeg, GCPtrEffDst);
    59616003                IEM_MC_STORE_GREG_U32(((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | pVCpu->iem.s.uRexReg, u32Value);
     
    59696011                IEM_MC_LOCAL(RTGCPTR, GCPtrEffDst);
    59706012                IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffDst, bRm, 0);
     6013                IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    59716014                IEM_MC_FETCH_MEM_U8_ZX_U64(u64Value, pVCpu->iem.s.iEffSeg, GCPtrEffDst);
    59726015                IEM_MC_STORE_GREG_U64(((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | pVCpu->iem.s.uRexReg, u64Value);
     
    59886031
    59896032    uint8_t bRm; IEM_OPCODE_GET_NEXT_U8(&bRm);
    5990     IEMOP_HLP_NO_LOCK_PREFIX(); /** @todo should probably not be raised until we've fetched all the opcode bytes? */
    59916033
    59926034    /** @todo Not entirely sure how the operand size prefix is handled here,
     
    59986040    if ((bRm & X86_MODRM_MOD_MASK) == (3 << X86_MODRM_MOD_SHIFT))
    59996041    {
     6042        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    60006043        if (pVCpu->iem.s.enmEffOpSize != IEMMODE_64BIT)
    60016044        {
     
    60286071            IEM_MC_LOCAL(RTGCPTR, GCPtrEffDst);
    60296072            IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffDst, bRm, 0);
     6073            IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    60306074            IEM_MC_FETCH_MEM_U16_ZX_U32(u32Value, pVCpu->iem.s.iEffSeg, GCPtrEffDst);
    60316075            IEM_MC_STORE_GREG_U32(((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | pVCpu->iem.s.uRexReg, u32Value);
     
    60396083            IEM_MC_LOCAL(RTGCPTR, GCPtrEffDst);
    60406084            IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffDst, bRm, 0);
     6085            IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    60416086            IEM_MC_FETCH_MEM_U16_ZX_U64(u64Value, pVCpu->iem.s.iEffSeg, GCPtrEffDst);
    60426087            IEM_MC_STORE_GREG_U64(((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | pVCpu->iem.s.uRexReg, u64Value);
     
    60836128        /* register destination. */
    60846129        uint8_t u8Bit; IEM_OPCODE_GET_NEXT_U8(&u8Bit);
    6085         IEMOP_HLP_NO_LOCK_PREFIX();
     6130        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    60866131
    60876132        switch (pVCpu->iem.s.enmEffOpSize)
     
    61416186            fAccess = IEM_ACCESS_DATA_RW;
    61426187        else /* BT */
    6143         {
    6144             IEMOP_HLP_NO_LOCK_PREFIX();
    61456188            fAccess = IEM_ACCESS_DATA_R;
    6146         }
    61476189
    61486190        /** @todo test negative bit offsets! */
     
    61596201                uint8_t u8Bit; IEM_OPCODE_GET_NEXT_U8(&u8Bit);
    61606202                IEM_MC_ASSIGN(u16Src, u8Bit & 0x0f);
     6203                if (pImpl->pfnLockedU16)
     6204                    IEMOP_HLP_DONE_DECODING();
     6205                else
     6206                    IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    61616207                IEM_MC_FETCH_EFLAGS(EFlags);
    61626208                IEM_MC_MEM_MAP(pu16Dst, fAccess, pVCpu->iem.s.iEffSeg, GCPtrEffDst, 0);
     
    61826228                uint8_t u8Bit; IEM_OPCODE_GET_NEXT_U8(&u8Bit);
    61836229                IEM_MC_ASSIGN(u32Src, u8Bit & 0x1f);
     6230                if (pImpl->pfnLockedU16)
     6231                    IEMOP_HLP_DONE_DECODING();
     6232                else
     6233                    IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    61846234                IEM_MC_FETCH_EFLAGS(EFlags);
    61856235                IEM_MC_MEM_MAP(pu32Dst, fAccess, pVCpu->iem.s.iEffSeg, GCPtrEffDst, 0);
     
    62056255                uint8_t u8Bit; IEM_OPCODE_GET_NEXT_U8(&u8Bit);
    62066256                IEM_MC_ASSIGN(u64Src, u8Bit & 0x3f);
     6257                if (pImpl->pfnLockedU16)
     6258                    IEMOP_HLP_DONE_DECODING();
     6259                else
     6260                    IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    62076261                IEM_MC_FETCH_EFLAGS(EFlags);
    62086262                IEM_MC_MEM_MAP(pu64Dst, fAccess, pVCpu->iem.s.iEffSeg, GCPtrEffDst, 0);
     
    62616315
    62626316    uint8_t bRm; IEM_OPCODE_GET_NEXT_U8(&bRm);
    6263     IEMOP_HLP_NO_LOCK_PREFIX(); /** @todo should probably not be raised until we've fetched all the opcode bytes? */
    62646317
    62656318    /*
     
    62686321    if ((bRm & X86_MODRM_MOD_MASK) == (3 << X86_MODRM_MOD_SHIFT))
    62696322    {
     6323        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    62706324        switch (pVCpu->iem.s.enmEffOpSize)
    62716325        {
     
    63126366                IEM_MC_LOCAL(RTGCPTR, GCPtrEffDst);
    63136367                IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffDst, bRm, 0);
     6368                IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    63146369                IEM_MC_FETCH_MEM_U8_SX_U16(u16Value, pVCpu->iem.s.iEffSeg, GCPtrEffDst);
    63156370                IEM_MC_STORE_GREG_U16(((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | pVCpu->iem.s.uRexReg, u16Value);
     
    63236378                IEM_MC_LOCAL(RTGCPTR, GCPtrEffDst);
    63246379                IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffDst, bRm, 0);
     6380                IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    63256381                IEM_MC_FETCH_MEM_U8_SX_U32(u32Value, pVCpu->iem.s.iEffSeg, GCPtrEffDst);
    63266382                IEM_MC_STORE_GREG_U32(((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | pVCpu->iem.s.uRexReg, u32Value);
     
    63346390                IEM_MC_LOCAL(RTGCPTR, GCPtrEffDst);
    63356391                IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffDst, bRm, 0);
     6392                IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    63366393                IEM_MC_FETCH_MEM_U8_SX_U64(u64Value, pVCpu->iem.s.iEffSeg, GCPtrEffDst);
    63376394                IEM_MC_STORE_GREG_U64(((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | pVCpu->iem.s.uRexReg, u64Value);
     
    63536410
    63546411    uint8_t bRm; IEM_OPCODE_GET_NEXT_U8(&bRm);
    6355     IEMOP_HLP_NO_LOCK_PREFIX(); /** @todo should probably not be raised until we've fetched all the opcode bytes? */
    63566412
    63576413    /** @todo Not entirely sure how the operand size prefix is handled here,
     
    63636419    if ((bRm & X86_MODRM_MOD_MASK) == (3 << X86_MODRM_MOD_SHIFT))
    63646420    {
     6421        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    63656422        if (pVCpu->iem.s.enmEffOpSize != IEMMODE_64BIT)
    63666423        {
     
    63936450            IEM_MC_LOCAL(RTGCPTR, GCPtrEffDst);
    63946451            IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffDst, bRm, 0);
     6452            IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    63956453            IEM_MC_FETCH_MEM_U16_SX_U32(u32Value, pVCpu->iem.s.iEffSeg, GCPtrEffDst);
    63966454            IEM_MC_STORE_GREG_U32(((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | pVCpu->iem.s.uRexReg, u32Value);
     
    64046462            IEM_MC_LOCAL(RTGCPTR, GCPtrEffDst);
    64056463            IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffDst, bRm, 0);
     6464            IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    64066465            IEM_MC_FETCH_MEM_U16_SX_U64(u64Value, pVCpu->iem.s.iEffSeg, GCPtrEffDst);
    64076466            IEM_MC_STORE_GREG_U64(((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | pVCpu->iem.s.uRexReg, u64Value);
     
    64266485    if ((bRm & X86_MODRM_MOD_MASK) == (3 << X86_MODRM_MOD_SHIFT))
    64276486    {
    6428         IEMOP_HLP_NO_LOCK_PREFIX();
     6487        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    64296488
    64306489        IEM_MC_BEGIN(3, 0);
     
    64866545    if ((bRm & X86_MODRM_MOD_MASK) == (3 << X86_MODRM_MOD_SHIFT))
    64876546    {
    6488         IEMOP_HLP_NO_LOCK_PREFIX();
     6547        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    64896548
    64906549        switch (pVCpu->iem.s.enmEffOpSize)
     
    68116870FNIEMOP_DEF_1(iemOpCommonBswapGReg, uint8_t, iReg)
    68126871{
    6813     IEMOP_HLP_NO_LOCK_PREFIX();
     6872    IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    68146873    switch (pVCpu->iem.s.enmEffOpSize)
    68156874    {
     
    74667525    IEMOP_MNEMONIC("pop es");
    74677526    IEMOP_HLP_NO_64BIT();
    7468     IEMOP_HLP_NO_LOCK_PREFIX();
     7527    IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    74697528    return IEM_MC_DEFER_TO_CIMPL_2(iemCImpl_pop_Sreg, X86_SREG_ES, pVCpu->iem.s.enmEffOpSize);
    74707529}
     
    76027661{
    76037662    IEMOP_MNEMONIC("pop ss"); /** @todo implies instruction fusing? */
    7604     IEMOP_HLP_NO_LOCK_PREFIX();
     7663    IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    76057664    IEMOP_HLP_NO_64BIT();
    76067665    return IEM_MC_DEFER_TO_CIMPL_2(iemCImpl_pop_Sreg, X86_SREG_SS, pVCpu->iem.s.enmEffOpSize);
     
    76687727{
    76697728    IEMOP_MNEMONIC("pop ds");
    7670     IEMOP_HLP_NO_LOCK_PREFIX();
     7729    IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    76717730    IEMOP_HLP_NO_64BIT();
    76727731    return IEM_MC_DEFER_TO_CIMPL_2(iemCImpl_pop_Sreg, X86_SREG_DS, pVCpu->iem.s.enmEffOpSize);
     
    78967955{
    78977956    IEMOP_MNEMONIC("cmp Eb,Gb");
    7898     IEMOP_HLP_NO_LOCK_PREFIX(); /** @todo do we have to decode the whole instruction first?  */
    78997957    return FNIEMOP_CALL_1(iemOpHlpBinaryOperator_rm_r8, &g_iemAImpl_cmp);
    79007958}
     
    79057963{
    79067964    IEMOP_MNEMONIC("cmp Ev,Gv");
    7907     IEMOP_HLP_NO_LOCK_PREFIX(); /** @todo do we have to decode the whole instruction first?  */
    79087965    return FNIEMOP_CALL_1(iemOpHlpBinaryOperator_rm_rv, &g_iemAImpl_cmp);
    79097966}
     
    79628019FNIEMOP_DEF_2(iemOpCommonUnaryGReg, PCIEMOPUNARYSIZES, pImpl, uint8_t, iReg)
    79638020{
    7964     IEMOP_HLP_NO_LOCK_PREFIX();
     8021    IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    79658022    switch (pVCpu->iem.s.enmEffOpSize)
    79668023    {
     
    83618418FNIEMOP_DEF_1(iemOpCommonPushGReg, uint8_t, iReg)
    83628419{
    8363     IEMOP_HLP_NO_LOCK_PREFIX();
     8420    IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    83648421    if (pVCpu->iem.s.enmCpuMode == IEMMODE_64BIT)
    83658422    {
     
    84828539FNIEMOP_DEF_1(iemOpCommonPopGReg, uint8_t, iReg)
    84838540{
    8484     IEMOP_HLP_NO_LOCK_PREFIX();
     8541    IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    84858542    if (pVCpu->iem.s.enmCpuMode == IEMMODE_64BIT)
    84868543    {
     
    88288885        {
    88298886            uint16_t u16Imm; IEM_OPCODE_GET_NEXT_U16(&u16Imm);
    8830             IEMOP_HLP_NO_LOCK_PREFIX();
     8887            IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    88318888            IEM_MC_BEGIN(0,0);
    88328889            IEM_MC_PUSH_U16(u16Imm);
     
    88398896        {
    88408897            uint32_t u32Imm; IEM_OPCODE_GET_NEXT_U32(&u32Imm);
    8841             IEMOP_HLP_NO_LOCK_PREFIX();
     8898            IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    88428899            IEM_MC_BEGIN(0,0);
    88438900            IEM_MC_PUSH_U32(u32Imm);
     
    88508907        {
    88518908            uint64_t u64Imm; IEM_OPCODE_GET_NEXT_S32_SX_U64(&u64Imm);
    8852             IEMOP_HLP_NO_LOCK_PREFIX();
     8909            IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    88538910            IEM_MC_BEGIN(0,0);
    88548911            IEM_MC_PUSH_U64(u64Imm);
     
    90309087    IEMOP_HLP_MIN_186();
    90319088    int8_t i8Imm; IEM_OPCODE_GET_NEXT_S8(&i8Imm);
    9032     IEMOP_HLP_NO_LOCK_PREFIX();
     9089    IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    90339090    IEMOP_HLP_DEFAULT_64BIT_OP_SIZE();
    90349091
     
    92119268{
    92129269    IEMOP_HLP_MIN_186();
    9213     IEMOP_HLP_NO_LOCK_PREFIX();
     9270    IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    92149271    if (pVCpu->iem.s.fPrefixes & (IEM_OP_PRF_REPNZ | IEM_OP_PRF_REPZ))
    92159272    {
     
    92419298{
    92429299    IEMOP_HLP_MIN_186();
    9243     IEMOP_HLP_NO_LOCK_PREFIX();
     9300    IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    92449301    if (pVCpu->iem.s.fPrefixes & (IEM_OP_PRF_REPZ | IEM_OP_PRF_REPNZ))
    92459302    {
     
    93039360{
    93049361    IEMOP_HLP_MIN_186();
    9305     IEMOP_HLP_NO_LOCK_PREFIX();
     9362    IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    93069363    if (pVCpu->iem.s.fPrefixes & (IEM_OP_PRF_REPNZ | IEM_OP_PRF_REPZ))
    93079364    {
     
    93339390{
    93349391    IEMOP_HLP_MIN_186();
    9335     IEMOP_HLP_NO_LOCK_PREFIX();
     9392    IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    93369393    if (pVCpu->iem.s.fPrefixes & (IEM_OP_PRF_REPZ | IEM_OP_PRF_REPNZ))
    93379394    {
     
    93969453    IEMOP_MNEMONIC("jo  Jb");
    93979454    int8_t i8Imm; IEM_OPCODE_GET_NEXT_S8(&i8Imm);
    9398     IEMOP_HLP_NO_LOCK_PREFIX();
     9455    IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    93999456    IEMOP_HLP_DEFAULT_64BIT_OP_SIZE();
    94009457
     
    94159472    IEMOP_MNEMONIC("jno Jb");
    94169473    int8_t i8Imm; IEM_OPCODE_GET_NEXT_S8(&i8Imm);
    9417     IEMOP_HLP_NO_LOCK_PREFIX();
     9474    IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    94189475    IEMOP_HLP_DEFAULT_64BIT_OP_SIZE();
    94199476
     
    94339490    IEMOP_MNEMONIC("jc/jnae Jb");
    94349491    int8_t i8Imm; IEM_OPCODE_GET_NEXT_S8(&i8Imm);
    9435     IEMOP_HLP_NO_LOCK_PREFIX();
     9492    IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    94369493    IEMOP_HLP_DEFAULT_64BIT_OP_SIZE();
    94379494
     
    94529509    IEMOP_MNEMONIC("jnc/jnb Jb");
    94539510    int8_t i8Imm; IEM_OPCODE_GET_NEXT_S8(&i8Imm);
    9454     IEMOP_HLP_NO_LOCK_PREFIX();
     9511    IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    94559512    IEMOP_HLP_DEFAULT_64BIT_OP_SIZE();
    94569513
     
    94719528    IEMOP_MNEMONIC("je/jz   Jb");
    94729529    int8_t i8Imm; IEM_OPCODE_GET_NEXT_S8(&i8Imm);
    9473     IEMOP_HLP_NO_LOCK_PREFIX();
     9530    IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    94749531    IEMOP_HLP_DEFAULT_64BIT_OP_SIZE();
    94759532
     
    94909547    IEMOP_MNEMONIC("jne/jnz Jb");
    94919548    int8_t i8Imm; IEM_OPCODE_GET_NEXT_S8(&i8Imm);
    9492     IEMOP_HLP_NO_LOCK_PREFIX();
     9549    IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    94939550    IEMOP_HLP_DEFAULT_64BIT_OP_SIZE();
    94949551
     
    95099566    IEMOP_MNEMONIC("jbe/jna Jb");
    95109567    int8_t i8Imm; IEM_OPCODE_GET_NEXT_S8(&i8Imm);
    9511     IEMOP_HLP_NO_LOCK_PREFIX();
     9568    IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    95129569    IEMOP_HLP_DEFAULT_64BIT_OP_SIZE();
    95139570
     
    95289585    IEMOP_MNEMONIC("jnbe/ja Jb");
    95299586    int8_t i8Imm; IEM_OPCODE_GET_NEXT_S8(&i8Imm);
    9530     IEMOP_HLP_NO_LOCK_PREFIX();
     9587    IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    95319588    IEMOP_HLP_DEFAULT_64BIT_OP_SIZE();
    95329589
     
    95479604    IEMOP_MNEMONIC("js  Jb");
    95489605    int8_t i8Imm; IEM_OPCODE_GET_NEXT_S8(&i8Imm);
    9549     IEMOP_HLP_NO_LOCK_PREFIX();
     9606    IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    95509607    IEMOP_HLP_DEFAULT_64BIT_OP_SIZE();
    95519608
     
    95669623    IEMOP_MNEMONIC("jns Jb");
    95679624    int8_t i8Imm; IEM_OPCODE_GET_NEXT_S8(&i8Imm);
    9568     IEMOP_HLP_NO_LOCK_PREFIX();
     9625    IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    95699626    IEMOP_HLP_DEFAULT_64BIT_OP_SIZE();
    95709627
     
    95859642    IEMOP_MNEMONIC("jp  Jb");
    95869643    int8_t i8Imm; IEM_OPCODE_GET_NEXT_S8(&i8Imm);
    9587     IEMOP_HLP_NO_LOCK_PREFIX();
     9644    IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    95889645    IEMOP_HLP_DEFAULT_64BIT_OP_SIZE();
    95899646
     
    96049661    IEMOP_MNEMONIC("jnp Jb");
    96059662    int8_t i8Imm; IEM_OPCODE_GET_NEXT_S8(&i8Imm);
    9606     IEMOP_HLP_NO_LOCK_PREFIX();
     9663    IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    96079664    IEMOP_HLP_DEFAULT_64BIT_OP_SIZE();
    96089665
     
    96239680    IEMOP_MNEMONIC("jl/jnge Jb");
    96249681    int8_t i8Imm; IEM_OPCODE_GET_NEXT_S8(&i8Imm);
    9625     IEMOP_HLP_NO_LOCK_PREFIX();
     9682    IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    96269683    IEMOP_HLP_DEFAULT_64BIT_OP_SIZE();
    96279684
     
    96429699    IEMOP_MNEMONIC("jnl/jge Jb");
    96439700    int8_t i8Imm; IEM_OPCODE_GET_NEXT_S8(&i8Imm);
    9644     IEMOP_HLP_NO_LOCK_PREFIX();
     9701    IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    96459702    IEMOP_HLP_DEFAULT_64BIT_OP_SIZE();
    96469703
     
    96619718    IEMOP_MNEMONIC("jle/jng Jb");
    96629719    int8_t i8Imm; IEM_OPCODE_GET_NEXT_S8(&i8Imm);
    9663     IEMOP_HLP_NO_LOCK_PREFIX();
     9720    IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    96649721    IEMOP_HLP_DEFAULT_64BIT_OP_SIZE();
    96659722
     
    96809737    IEMOP_MNEMONIC("jnle/jg Jb");
    96819738    int8_t i8Imm; IEM_OPCODE_GET_NEXT_S8(&i8Imm);
    9682     IEMOP_HLP_NO_LOCK_PREFIX();
     9739    IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    96839740    IEMOP_HLP_DEFAULT_64BIT_OP_SIZE();
    96849741
     
    97059762        /* register target */
    97069763        uint8_t u8Imm; IEM_OPCODE_GET_NEXT_U8(&u8Imm);
    9707         IEMOP_HLP_NO_LOCK_PREFIX();
     9764        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    97089765        IEM_MC_BEGIN(3, 0);
    97099766        IEM_MC_ARG(uint8_t *,       pu8Dst,                 0);
     
    97249781        if (pImpl->pfnLockedU8)
    97259782            fAccess = IEM_ACCESS_DATA_RW;
    9726         else
    9727         {   /* CMP */
    9728             IEMOP_HLP_NO_LOCK_PREFIX();
     9783        else /* CMP */
    97299784            fAccess = IEM_ACCESS_DATA_R;
    9730         }
    97319785        IEM_MC_BEGIN(3, 2);
    97329786        IEM_MC_ARG(uint8_t *,       pu8Dst,                 0);
     
    97379791        uint8_t u8Imm; IEM_OPCODE_GET_NEXT_U8(&u8Imm);
    97389792        IEM_MC_ARG_CONST(uint8_t,   u8Src, /*=*/ u8Imm,     1);
     9793        if (pImpl->pfnLockedU8)
     9794            IEMOP_HLP_DONE_DECODING();
     9795        else
     9796            IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    97399797
    97409798        IEM_MC_MEM_MAP(pu8Dst, fAccess, pVCpu->iem.s.iEffSeg, GCPtrEffDst, 0 /*arg*/);
     
    97699827                /* register target */
    97709828                uint16_t u16Imm; IEM_OPCODE_GET_NEXT_U16(&u16Imm);
    9771                 IEMOP_HLP_NO_LOCK_PREFIX();
     9829                IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    97729830                IEM_MC_BEGIN(3, 0);
    97739831                IEM_MC_ARG(uint16_t *,      pu16Dst,                0);
     
    97889846                if (pImpl->pfnLockedU16)
    97899847                    fAccess = IEM_ACCESS_DATA_RW;
    9790                 else
    9791                 {   /* CMP, TEST */
    9792                     IEMOP_HLP_NO_LOCK_PREFIX();
     9848                else /* CMP, TEST */
    97939849                    fAccess = IEM_ACCESS_DATA_R;
    9794                 }
    97959850                IEM_MC_BEGIN(3, 2);
    97969851                IEM_MC_ARG(uint16_t *,      pu16Dst,                0);
     
    98029857                uint16_t u16Imm; IEM_OPCODE_GET_NEXT_U16(&u16Imm);
    98039858                IEM_MC_ASSIGN(u16Src, u16Imm);
     9859                if (pImpl->pfnLockedU16)
     9860                    IEMOP_HLP_DONE_DECODING();
     9861                else
     9862                    IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    98049863                IEM_MC_MEM_MAP(pu16Dst, fAccess, pVCpu->iem.s.iEffSeg, GCPtrEffDst, 0 /*arg*/);
    98059864                IEM_MC_FETCH_EFLAGS(EFlags);
     
    98239882                /* register target */
    98249883                uint32_t u32Imm; IEM_OPCODE_GET_NEXT_U32(&u32Imm);
    9825                 IEMOP_HLP_NO_LOCK_PREFIX();
     9884                IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    98269885                IEM_MC_BEGIN(3, 0);
    98279886                IEM_MC_ARG(uint32_t *,      pu32Dst,                0);
     
    98439902                if (pImpl->pfnLockedU32)
    98449903                    fAccess = IEM_ACCESS_DATA_RW;
    9845                 else
    9846                 {   /* CMP, TEST */
    9847                     IEMOP_HLP_NO_LOCK_PREFIX();
     9904                else /* CMP, TEST */
    98489905                    fAccess = IEM_ACCESS_DATA_R;
    9849                 }
    98509906                IEM_MC_BEGIN(3, 2);
    98519907                IEM_MC_ARG(uint32_t *,      pu32Dst,                0);
     
    98579913                uint32_t u32Imm; IEM_OPCODE_GET_NEXT_U32(&u32Imm);
    98589914                IEM_MC_ASSIGN(u32Src, u32Imm);
     9915                if (pImpl->pfnLockedU32)
     9916                    IEMOP_HLP_DONE_DECODING();
     9917                else
     9918                    IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    98599919                IEM_MC_MEM_MAP(pu32Dst, fAccess, pVCpu->iem.s.iEffSeg, GCPtrEffDst, 0 /*arg*/);
    98609920                IEM_MC_FETCH_EFLAGS(EFlags);
     
    98789938                /* register target */
    98799939                uint64_t u64Imm; IEM_OPCODE_GET_NEXT_S32_SX_U64(&u64Imm);
    9880                 IEMOP_HLP_NO_LOCK_PREFIX();
     9940                IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    98819941                IEM_MC_BEGIN(3, 0);
    98829942                IEM_MC_ARG(uint64_t *,      pu64Dst,                0);
     
    98979957                if (pImpl->pfnLockedU64)
    98989958                    fAccess = IEM_ACCESS_DATA_RW;
    9899                 else
    9900                 {   /* CMP */
    9901                     IEMOP_HLP_NO_LOCK_PREFIX();
     9959                else /* CMP */
    99029960                    fAccess = IEM_ACCESS_DATA_R;
    9903                 }
    99049961                IEM_MC_BEGIN(3, 2);
    99059962                IEM_MC_ARG(uint64_t *,      pu64Dst,                0);
     
    99109967                IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffDst, bRm, 4);
    99119968                uint64_t u64Imm; IEM_OPCODE_GET_NEXT_S32_SX_U64(&u64Imm);
     9969                if (pImpl->pfnLockedU64)
     9970                    IEMOP_HLP_DONE_DECODING();
     9971                else
     9972                    IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    99129973                IEM_MC_ASSIGN(u64Src, u64Imm);
    99139974                IEM_MC_MEM_MAP(pu64Dst, fAccess, pVCpu->iem.s.iEffSeg, GCPtrEffDst, 0 /*arg*/);
     
    995310014         * Register target
    995410015         */
    9955         IEMOP_HLP_NO_LOCK_PREFIX();
     10016        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    995610017        uint8_t u8Imm; IEM_OPCODE_GET_NEXT_U8(&u8Imm);
    995710018        switch (pVCpu->iem.s.enmEffOpSize)
     
    1001510076        if (pImpl->pfnLockedU16)
    1001610077            fAccess = IEM_ACCESS_DATA_RW;
    10017         else
    10018         {   /* CMP */
    10019             IEMOP_HLP_NO_LOCK_PREFIX();
     10078        else /* CMP */
    1002010079            fAccess = IEM_ACCESS_DATA_R;
    10021         }
    1002210080
    1002310081        switch (pVCpu->iem.s.enmEffOpSize)
     
    1003410092                uint8_t u8Imm; IEM_OPCODE_GET_NEXT_U8(&u8Imm);
    1003510093                IEM_MC_ASSIGN(u16Src, (int8_t)u8Imm);
     10094                if (pImpl->pfnLockedU16)
     10095                    IEMOP_HLP_DONE_DECODING();
     10096                else
     10097                    IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    1003610098                IEM_MC_MEM_MAP(pu16Dst, fAccess, pVCpu->iem.s.iEffSeg, GCPtrEffDst, 0 /*arg*/);
    1003710099                IEM_MC_FETCH_EFLAGS(EFlags);
     
    1005910121                uint8_t u8Imm; IEM_OPCODE_GET_NEXT_U8(&u8Imm);
    1006010122                IEM_MC_ASSIGN(u32Src, (int8_t)u8Imm);
     10123                if (pImpl->pfnLockedU32)
     10124                    IEMOP_HLP_DONE_DECODING();
     10125                else
     10126                    IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    1006110127                IEM_MC_MEM_MAP(pu32Dst, fAccess, pVCpu->iem.s.iEffSeg, GCPtrEffDst, 0 /*arg*/);
    1006210128                IEM_MC_FETCH_EFLAGS(EFlags);
     
    1008410150                uint8_t u8Imm; IEM_OPCODE_GET_NEXT_U8(&u8Imm);
    1008510151                IEM_MC_ASSIGN(u64Src, (int8_t)u8Imm);
     10152                if (pImpl->pfnLockedU64)
     10153                    IEMOP_HLP_DONE_DECODING();
     10154                else
     10155                    IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    1008610156                IEM_MC_MEM_MAP(pu64Dst, fAccess, pVCpu->iem.s.iEffSeg, GCPtrEffDst, 0 /*arg*/);
    1008710157                IEM_MC_FETCH_EFLAGS(EFlags);
     
    1010710177{
    1010810178    IEMOP_MNEMONIC("test Eb,Gb");
    10109     IEMOP_HLP_NO_LOCK_PREFIX(); /** @todo do we have to decode the whole instruction first?  */
    1011010179    IEMOP_VERIFICATION_UNDEFINED_EFLAGS(X86_EFL_AF);
    1011110180    return FNIEMOP_CALL_1(iemOpHlpBinaryOperator_rm_r8, &g_iemAImpl_test);
     
    1011710186{
    1011810187    IEMOP_MNEMONIC("test Ev,Gv");
    10119     IEMOP_HLP_NO_LOCK_PREFIX(); /** @todo do we have to decode the whole instruction first?  */
    1012010188    IEMOP_VERIFICATION_UNDEFINED_EFLAGS(X86_EFL_AF);
    1012110189    return FNIEMOP_CALL_1(iemOpHlpBinaryOperator_rm_rv, &g_iemAImpl_test);
     
    1013410202    if ((bRm & X86_MODRM_MOD_MASK) == (3 << X86_MODRM_MOD_SHIFT))
    1013510203    {
    10136         IEMOP_HLP_NO_LOCK_PREFIX();
     10204        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    1013710205
    1013810206        IEM_MC_BEGIN(0, 2);
     
    1018310251    if ((bRm & X86_MODRM_MOD_MASK) == (3 << X86_MODRM_MOD_SHIFT))
    1018410252    {
    10185         IEMOP_HLP_NO_LOCK_PREFIX();
     10253        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    1018610254
    1018710255        switch (pVCpu->iem.s.enmEffOpSize)
     
    1030210370    uint8_t bRm;
    1030310371    IEM_OPCODE_GET_NEXT_U8(&bRm);
    10304     IEMOP_HLP_NO_LOCK_PREFIX(); /** @todo should probably not be raised until we've fetched all the opcode bytes? */
    1030510372
    1030610373    /*
     
    1030910376    if ((bRm & X86_MODRM_MOD_MASK) == (3 << X86_MODRM_MOD_SHIFT))
    1031010377    {
     10378        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    1031110379        IEM_MC_BEGIN(0, 1);
    1031210380        IEM_MC_LOCAL(uint8_t, u8Value);
     
    1032510393        IEM_MC_LOCAL(RTGCPTR, GCPtrEffDst);
    1032610394        IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffDst, bRm, 0);
     10395        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    1032710396        IEM_MC_FETCH_GREG_U8(u8Value, ((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | pVCpu->iem.s.uRexReg);
    1032810397        IEM_MC_STORE_MEM_U8(pVCpu->iem.s.iEffSeg, GCPtrEffDst, u8Value);
     
    1034110410
    1034210411    uint8_t bRm; IEM_OPCODE_GET_NEXT_U8(&bRm);
    10343     IEMOP_HLP_NO_LOCK_PREFIX(); /** @todo should probably not be raised until we've fetched all the opcode bytes? */
    1034410412
    1034510413    /*
     
    1034810416    if ((bRm & X86_MODRM_MOD_MASK) == (3 << X86_MODRM_MOD_SHIFT))
    1034910417    {
     10418        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    1035010419        switch (pVCpu->iem.s.enmEffOpSize)
    1035110420        {
     
    1039010459                IEM_MC_LOCAL(RTGCPTR, GCPtrEffDst);
    1039110460                IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffDst, bRm, 0);
     10461                IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    1039210462                IEM_MC_FETCH_GREG_U16(u16Value, ((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | pVCpu->iem.s.uRexReg);
    1039310463                IEM_MC_STORE_MEM_U16(pVCpu->iem.s.iEffSeg, GCPtrEffDst, u16Value);
     
    1040110471                IEM_MC_LOCAL(RTGCPTR, GCPtrEffDst);
    1040210472                IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffDst, bRm, 0);
     10473                IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    1040310474                IEM_MC_FETCH_GREG_U32(u32Value, ((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | pVCpu->iem.s.uRexReg);
    1040410475                IEM_MC_STORE_MEM_U32(pVCpu->iem.s.iEffSeg, GCPtrEffDst, u32Value);
     
    1041210483                IEM_MC_LOCAL(RTGCPTR, GCPtrEffDst);
    1041310484                IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffDst, bRm, 0);
     10485                IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    1041410486                IEM_MC_FETCH_GREG_U64(u64Value, ((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | pVCpu->iem.s.uRexReg);
    1041510487                IEM_MC_STORE_MEM_U64(pVCpu->iem.s.iEffSeg, GCPtrEffDst, u64Value);
     
    1042910501
    1043010502    uint8_t bRm; IEM_OPCODE_GET_NEXT_U8(&bRm);
    10431     IEMOP_HLP_NO_LOCK_PREFIX(); /** @todo should probably not be raised until we've fetched all the opcode bytes? */
    1043210503
    1043310504    /*
     
    1043610507    if ((bRm & X86_MODRM_MOD_MASK) == (3 << X86_MODRM_MOD_SHIFT))
    1043710508    {
     10509        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    1043810510        IEM_MC_BEGIN(0, 1);
    1043910511        IEM_MC_LOCAL(uint8_t, u8Value);
     
    1045210524        IEM_MC_LOCAL(RTGCPTR, GCPtrEffDst);
    1045310525        IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffDst, bRm, 0);
     10526        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    1045410527        IEM_MC_FETCH_MEM_U8(u8Value, pVCpu->iem.s.iEffSeg, GCPtrEffDst);
    1045510528        IEM_MC_STORE_GREG_U8(((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | pVCpu->iem.s.uRexReg, u8Value);
     
    1046710540
    1046810541    uint8_t bRm; IEM_OPCODE_GET_NEXT_U8(&bRm);
    10469     IEMOP_HLP_NO_LOCK_PREFIX(); /** @todo should probably not be raised until we've fetched all the opcode bytes? */
    1047010542
    1047110543    /*
     
    1047410546    if ((bRm & X86_MODRM_MOD_MASK) == (3 << X86_MODRM_MOD_SHIFT))
    1047510547    {
     10548        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    1047610549        switch (pVCpu->iem.s.enmEffOpSize)
    1047710550        {
     
    1051610589                IEM_MC_LOCAL(RTGCPTR, GCPtrEffDst);
    1051710590                IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffDst, bRm, 0);
     10591                IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    1051810592                IEM_MC_FETCH_MEM_U16(u16Value, pVCpu->iem.s.iEffSeg, GCPtrEffDst);
    1051910593                IEM_MC_STORE_GREG_U16(((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | pVCpu->iem.s.uRexReg, u16Value);
     
    1052710601                IEM_MC_LOCAL(RTGCPTR, GCPtrEffDst);
    1052810602                IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffDst, bRm, 0);
     10603                IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    1052910604                IEM_MC_FETCH_MEM_U32(u32Value, pVCpu->iem.s.iEffSeg, GCPtrEffDst);
    1053010605                IEM_MC_STORE_GREG_U32(((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | pVCpu->iem.s.uRexReg, u32Value);
     
    1053810613                IEM_MC_LOCAL(RTGCPTR, GCPtrEffDst);
    1053910614                IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffDst, bRm, 0);
     10615                IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    1054010616                IEM_MC_FETCH_MEM_U64(u64Value, pVCpu->iem.s.iEffSeg, GCPtrEffDst);
    1054110617                IEM_MC_STORE_GREG_U64(((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | pVCpu->iem.s.uRexReg, u64Value);
     
    1056610642
    1056710643    uint8_t bRm; IEM_OPCODE_GET_NEXT_U8(&bRm);
    10568     IEMOP_HLP_NO_LOCK_PREFIX(); /** @todo should probably not be raised until we've fetched all the opcode bytes? */
    1056910644
    1057010645    /*
     
    1058210657    if ((bRm & X86_MODRM_MOD_MASK) == (3 << X86_MODRM_MOD_SHIFT))
    1058310658    {
     10659        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    1058410660        switch (pVCpu->iem.s.enmEffOpSize)
    1058510661        {
     
    1062510701        IEM_MC_LOCAL(RTGCPTR,   GCPtrEffDst);
    1062610702        IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffDst, bRm, 0);
     10703        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    1062710704        IEM_MC_FETCH_SREG_U16(u16Value, iSegReg);
    1062810705        IEM_MC_STORE_MEM_U16(pVCpu->iem.s.iEffSeg, GCPtrEffDst, u16Value);
     
    1064110718    IEMOP_MNEMONIC("lea Gv,M");
    1064210719    uint8_t bRm; IEM_OPCODE_GET_NEXT_U8(&bRm);
    10643     IEMOP_HLP_NO_LOCK_PREFIX(); /** @todo should probably not be raised until we've fetched all the opcode bytes? */
    1064410720    if ((bRm & X86_MODRM_MOD_MASK) == (3 << X86_MODRM_MOD_SHIFT))
    1064510721        return IEMOP_RAISE_INVALID_OPCODE(); /* no register form */
     
    1065210728            IEM_MC_LOCAL(uint16_t, u16Cast);
    1065310729            IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffSrc, bRm, 0);
     10730            IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    1065410731            IEM_MC_ASSIGN_TO_SMALLER(u16Cast, GCPtrEffSrc);
    1065510732            IEM_MC_STORE_GREG_U16(((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | pVCpu->iem.s.uRexReg, u16Cast);
     
    1066310740            IEM_MC_LOCAL(uint32_t, u32Cast);
    1066410741            IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffSrc, bRm, 0);
     10742            IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    1066510743            IEM_MC_ASSIGN_TO_SMALLER(u32Cast, GCPtrEffSrc);
    1066610744            IEM_MC_STORE_GREG_U32(((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | pVCpu->iem.s.uRexReg, u32Cast);
     
    1067310751            IEM_MC_LOCAL(RTGCPTR, GCPtrEffSrc);
    1067410752            IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffSrc, bRm, 0);
     10753            IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    1067510754            IEM_MC_STORE_GREG_U64(((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | pVCpu->iem.s.uRexReg, GCPtrEffSrc);
    1067610755            IEM_MC_ADVANCE_RIP();
     
    1068810767
    1068910768    uint8_t bRm; IEM_OPCODE_GET_NEXT_U8(&bRm);
    10690     IEMOP_HLP_NO_LOCK_PREFIX(); /** @todo should probably not be raised until we've fetched all the opcode bytes? */
    1069110769
    1069210770    /*
     
    1071110789    if ((bRm & X86_MODRM_MOD_MASK) == (3 << X86_MODRM_MOD_SHIFT))
    1071210790    {
     10791        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    1071310792        IEM_MC_BEGIN(2, 0);
    1071410793        IEM_MC_ARG_CONST(uint8_t, iSRegArg, iSegReg, 0);
     
    1072910808        IEM_MC_LOCAL(RTGCPTR, GCPtrEffDst);
    1073010809        IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffDst, bRm, 0);
     10810        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    1073110811        IEM_MC_FETCH_MEM_U16(u16Value, pVCpu->iem.s.iEffSeg, GCPtrEffDst);
    1073210812        IEM_MC_CALL_CIMPL_2(iemCImpl_load_SReg, iSRegArg, u16Value);
     
    1075110831     *        now until tests show it's checked.. */
    1075210832    IEMOP_MNEMONIC("pop Ev");
    10753     IEMOP_HLP_NO_LOCK_PREFIX(); /** @todo should probably not be raised until we've fetched all the opcode bytes? */
    1075410833
    1075510834    /* Register access is relatively easy and can share code. */
     
    1079110870    rcStrict = iemOpHlpCalcRmEffAddr(pVCpu, bRm, 0, &GCPtrEff);
    1079210871    Assert(rcStrict == VINF_SUCCESS);
     10872    IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    1079310873    pCtx->rsp = RspSaved;
    1079410874
     
    1085910939FNIEMOP_DEF_1(iemOpCommonXchgGRegRax, uint8_t, iReg)
    1086010940{
    10861     IEMOP_HLP_NO_LOCK_PREFIX();
     10941    IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    1086210942
    1086310943    iReg |= pVCpu->iem.s.uRexB;
     
    1098511065FNIEMOP_DEF(iemOp_cbw)
    1098611066{
    10987     IEMOP_HLP_NO_LOCK_PREFIX();
     11067    IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    1098811068    switch (pVCpu->iem.s.enmEffOpSize)
    1098911069    {
     
    1103211112FNIEMOP_DEF(iemOp_cwd)
    1103311113{
    11034     IEMOP_HLP_NO_LOCK_PREFIX();
     11114    IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    1103511115    switch (pVCpu->iem.s.enmEffOpSize)
    1103611116    {
     
    1109811178{
    1109911179    IEMOP_MNEMONIC("wait");
    11100     IEMOP_HLP_NO_LOCK_PREFIX();
     11180    IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    1110111181
    1110211182    IEM_MC_BEGIN(0, 0);
     
    1111211192FNIEMOP_DEF(iemOp_pushf_Fv)
    1111311193{
    11114     IEMOP_HLP_NO_LOCK_PREFIX();
     11194    IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    1111511195    IEMOP_HLP_DEFAULT_64BIT_OP_SIZE();
    1111611196    return IEM_MC_DEFER_TO_CIMPL_1(iemCImpl_pushf, pVCpu->iem.s.enmEffOpSize);
     
    1112111201FNIEMOP_DEF(iemOp_popf_Fv)
    1112211202{
    11123     IEMOP_HLP_NO_LOCK_PREFIX();
     11203    IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    1112411204    IEMOP_HLP_DEFAULT_64BIT_OP_SIZE();
    1112511205    return IEM_MC_DEFER_TO_CIMPL_1(iemCImpl_popf, pVCpu->iem.s.enmEffOpSize);
     
    1113111211{
    1113211212    IEMOP_MNEMONIC("sahf");
    11133     IEMOP_HLP_NO_LOCK_PREFIX();
     11213    IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    1113411214    if (   pVCpu->iem.s.enmCpuMode == IEMMODE_64BIT
    1113511215        && !IEM_GET_GUEST_CPU_FEATURES(pVCpu)->fLahfSahf)
     
    1115511235{
    1115611236    IEMOP_MNEMONIC("lahf");
    11157     IEMOP_HLP_NO_LOCK_PREFIX();
     11237    IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    1115811238    if (   pVCpu->iem.s.enmCpuMode == IEMMODE_64BIT
    1115911239        && !IEM_GET_GUEST_CPU_FEATURES(pVCpu)->fLahfSahf)
     
    1119111271            IEM_NOT_REACHED_DEFAULT_CASE_RET(); \
    1119211272        } \
    11193         IEMOP_HLP_NO_LOCK_PREFIX(); \
     11273        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); \
    1119411274    } while (0)
    1119511275
     
    1135211432FNIEMOP_DEF(iemOp_movsb_Xb_Yb)
    1135311433{
    11354     IEMOP_HLP_NO_LOCK_PREFIX();
     11434    IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    1135511435
    1135611436    /*
     
    1138711467FNIEMOP_DEF(iemOp_movswd_Xv_Yv)
    1138811468{
    11389     IEMOP_HLP_NO_LOCK_PREFIX();
     11469    IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    1139011470
    1139111471    /*
     
    1149911579FNIEMOP_DEF(iemOp_cmpsb_Xb_Yb)
    1150011580{
    11501     IEMOP_HLP_NO_LOCK_PREFIX();
     11581    IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    1150211582
    1150311583    /*
     
    1154611626FNIEMOP_DEF(iemOp_cmpswd_Xv_Yv)
    1154711627{
    11548     IEMOP_HLP_NO_LOCK_PREFIX();
     11628    IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    1154911629
    1155011630    /*
     
    1170111781FNIEMOP_DEF(iemOp_stosb_Yb_AL)
    1170211782{
    11703     IEMOP_HLP_NO_LOCK_PREFIX();
     11783    IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    1170411784
    1170511785    /*
     
    1173611816FNIEMOP_DEF(iemOp_stoswd_Yv_eAX)
    1173711817{
    11738     IEMOP_HLP_NO_LOCK_PREFIX();
     11818    IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    1173911819
    1174011820    /*
     
    1183711917FNIEMOP_DEF(iemOp_lodsb_AL_Xb)
    1183811918{
    11839     IEMOP_HLP_NO_LOCK_PREFIX();
     11919    IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    1184011920
    1184111921    /*
     
    1187211952FNIEMOP_DEF(iemOp_lodswd_eAX_Xv)
    1187311953{
    11874     IEMOP_HLP_NO_LOCK_PREFIX();
     11954    IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    1187511955
    1187611956    /*
     
    1197912059FNIEMOP_DEF(iemOp_scasb_AL_Xb)
    1198012060{
    11981     IEMOP_HLP_NO_LOCK_PREFIX();
     12061    IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    1198212062
    1198312063    /*
     
    1202512105FNIEMOP_DEF(iemOp_scaswd_eAX_Xv)
    1202612106{
    12027     IEMOP_HLP_NO_LOCK_PREFIX();
     12107    IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    1202812108
    1202912109    /*
     
    1214612226{
    1214712227    uint8_t u8Imm; IEM_OPCODE_GET_NEXT_U8(&u8Imm);
    12148     IEMOP_HLP_NO_LOCK_PREFIX();
     12228    IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    1214912229
    1215012230    IEM_MC_BEGIN(0, 1);
     
    1223212312        {
    1223312313            uint16_t u16Imm; IEM_OPCODE_GET_NEXT_U16(&u16Imm);
    12234             IEMOP_HLP_NO_LOCK_PREFIX();
     12314            IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    1223512315
    1223612316            IEM_MC_BEGIN(0, 1);
     
    1224512325        {
    1224612326            uint32_t u32Imm; IEM_OPCODE_GET_NEXT_U32(&u32Imm);
    12247             IEMOP_HLP_NO_LOCK_PREFIX();
     12327            IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    1224812328
    1224912329            IEM_MC_BEGIN(0, 1);
     
    1225712337        {
    1225812338            uint64_t u64Imm; IEM_OPCODE_GET_NEXT_U64(&u64Imm); /* 64-bit immediate! */
    12259             IEMOP_HLP_NO_LOCK_PREFIX();
     12339            IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    1226012340
    1226112341            IEM_MC_BEGIN(0, 1);
     
    1236012440        /* register */
    1236112441        uint8_t cShift; IEM_OPCODE_GET_NEXT_U8(&cShift);
    12362         IEMOP_HLP_NO_LOCK_PREFIX();
     12442        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    1236312443        IEM_MC_BEGIN(3, 0);
    1236412444        IEM_MC_ARG(uint8_t *,       pu8Dst,            0);
     
    1237412454    {
    1237512455        /* memory */
    12376         IEMOP_HLP_NO_LOCK_PREFIX(); /** @todo should probably not be raised until we've fetched all the opcode bytes? */
    1237712456        IEM_MC_BEGIN(3, 2);
    1237812457        IEM_MC_ARG(uint8_t *,   pu8Dst,    0);
     
    1238412463        uint8_t cShift; IEM_OPCODE_GET_NEXT_U8(&cShift);
    1238512464        IEM_MC_ASSIGN(cShiftArg, cShift);
     12465        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    1238612466        IEM_MC_MEM_MAP(pu8Dst, IEM_ACCESS_DATA_RW, pVCpu->iem.s.iEffSeg, GCPtrEffDst, 0 /*arg*/);
    1238712467        IEM_MC_FETCH_EFLAGS(EFlags);
     
    1242112501        /* register */
    1242212502        uint8_t cShift; IEM_OPCODE_GET_NEXT_U8(&cShift);
    12423         IEMOP_HLP_NO_LOCK_PREFIX();
     12503        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    1242412504        switch (pVCpu->iem.s.enmEffOpSize)
    1242512505        {
     
    1246712547    {
    1246812548        /* memory */
    12469         IEMOP_HLP_NO_LOCK_PREFIX(); /** @todo should probably not be raised until we've fetched all the opcode bytes? */
    1247012549        switch (pVCpu->iem.s.enmEffOpSize)
    1247112550        {
     
    1248012559                uint8_t cShift; IEM_OPCODE_GET_NEXT_U8(&cShift);
    1248112560                IEM_MC_ASSIGN(cShiftArg, cShift);
     12561                IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    1248212562                IEM_MC_MEM_MAP(pu16Dst, IEM_ACCESS_DATA_RW, pVCpu->iem.s.iEffSeg, GCPtrEffDst, 0 /*arg*/);
    1248312563                IEM_MC_FETCH_EFLAGS(EFlags);
     
    1250012580                uint8_t cShift; IEM_OPCODE_GET_NEXT_U8(&cShift);
    1250112581                IEM_MC_ASSIGN(cShiftArg, cShift);
     12582                IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    1250212583                IEM_MC_MEM_MAP(pu32Dst, IEM_ACCESS_DATA_RW, pVCpu->iem.s.iEffSeg, GCPtrEffDst, 0 /*arg*/);
    1250312584                IEM_MC_FETCH_EFLAGS(EFlags);
     
    1252012601                uint8_t cShift; IEM_OPCODE_GET_NEXT_U8(&cShift);
    1252112602                IEM_MC_ASSIGN(cShiftArg, cShift);
     12603                IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    1252212604                IEM_MC_MEM_MAP(pu64Dst, IEM_ACCESS_DATA_RW, pVCpu->iem.s.iEffSeg, GCPtrEffDst, 0 /*arg*/);
    1252312605                IEM_MC_FETCH_EFLAGS(EFlags);
     
    1254112623    IEMOP_MNEMONIC("retn Iw");
    1254212624    uint16_t u16Imm; IEM_OPCODE_GET_NEXT_U16(&u16Imm);
    12543     IEMOP_HLP_NO_LOCK_PREFIX();
     12625    IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    1254412626    IEMOP_HLP_DEFAULT_64BIT_OP_SIZE();
    1254512627    return IEM_MC_DEFER_TO_CIMPL_2(iemCImpl_retn, pVCpu->iem.s.enmEffOpSize, u16Imm);
     
    1255212634    IEMOP_MNEMONIC("retn");
    1255312635    IEMOP_HLP_DEFAULT_64BIT_OP_SIZE();
    12554     IEMOP_HLP_NO_LOCK_PREFIX();
     12636    IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    1255512637    return IEM_MC_DEFER_TO_CIMPL_2(iemCImpl_retn, pVCpu->iem.s.enmEffOpSize, 0);
    1255612638}
     
    1262212704{
    1262312705    uint8_t bRm; IEM_OPCODE_GET_NEXT_U8(&bRm);
    12624     IEMOP_HLP_NO_LOCK_PREFIX(); /** @todo should probably not be raised until we've fetched all the opcode bytes? */
    1262512706    if ((bRm & X86_MODRM_REG_MASK) != (0 << X86_MODRM_REG_SHIFT)) /* only mov Eb,Ib in this group. */
    1262612707        return IEMOP_RAISE_INVALID_OPCODE();
     
    1263112712        /* register access */
    1263212713        uint8_t u8Imm; IEM_OPCODE_GET_NEXT_U8(&u8Imm);
     12714        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    1263312715        IEM_MC_BEGIN(0, 0);
    1263412716        IEM_MC_STORE_GREG_U8((bRm & X86_MODRM_RM_MASK) | pVCpu->iem.s.uRexB, u8Imm);
     
    1264312725        IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffDst, bRm, 1);
    1264412726        uint8_t u8Imm; IEM_OPCODE_GET_NEXT_U8(&u8Imm);
     12727        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    1264512728        IEM_MC_STORE_MEM_U8(pVCpu->iem.s.iEffSeg, GCPtrEffDst, u8Imm);
    1264612729        IEM_MC_ADVANCE_RIP();
     
    1265512738{
    1265612739    uint8_t bRm; IEM_OPCODE_GET_NEXT_U8(&bRm);
    12657     IEMOP_HLP_NO_LOCK_PREFIX(); /** @todo should probably not be raised until we've fetched all the opcode bytes? */
    1265812740    if ((bRm & X86_MODRM_REG_MASK) != (0 << X86_MODRM_REG_SHIFT)) /* only mov Eb,Ib in this group. */
    1265912741        return IEMOP_RAISE_INVALID_OPCODE();
     
    1266812750                IEM_MC_BEGIN(0, 0);
    1266912751                uint16_t u16Imm; IEM_OPCODE_GET_NEXT_U16(&u16Imm);
     12752                IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    1267012753                IEM_MC_STORE_GREG_U16((bRm & X86_MODRM_RM_MASK) | pVCpu->iem.s.uRexB, u16Imm);
    1267112754                IEM_MC_ADVANCE_RIP();
     
    1267612759                IEM_MC_BEGIN(0, 0);
    1267712760                uint32_t u32Imm; IEM_OPCODE_GET_NEXT_U32(&u32Imm);
     12761                IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    1267812762                IEM_MC_STORE_GREG_U32((bRm & X86_MODRM_RM_MASK) | pVCpu->iem.s.uRexB, u32Imm);
    1267912763                IEM_MC_ADVANCE_RIP();
     
    1268412768                IEM_MC_BEGIN(0, 0);
    1268512769                uint64_t u64Imm; IEM_OPCODE_GET_NEXT_S32_SX_U64(&u64Imm);
     12770                IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    1268612771                IEM_MC_STORE_GREG_U64((bRm & X86_MODRM_RM_MASK) | pVCpu->iem.s.uRexB, u64Imm);
    1268712772                IEM_MC_ADVANCE_RIP();
     
    1270212787                IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffDst, bRm, 2);
    1270312788                uint16_t u16Imm; IEM_OPCODE_GET_NEXT_U16(&u16Imm);
     12789                IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    1270412790                IEM_MC_STORE_MEM_U16(pVCpu->iem.s.iEffSeg, GCPtrEffDst, u16Imm);
    1270512791                IEM_MC_ADVANCE_RIP();
     
    1271212798                IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffDst, bRm, 4);
    1271312799                uint32_t u32Imm; IEM_OPCODE_GET_NEXT_U32(&u32Imm);
     12800                IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    1271412801                IEM_MC_STORE_MEM_U32(pVCpu->iem.s.iEffSeg, GCPtrEffDst, u32Imm);
    1271512802                IEM_MC_ADVANCE_RIP();
     
    1272212809                IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffDst, bRm, 4);
    1272312810                uint64_t u64Imm; IEM_OPCODE_GET_NEXT_S32_SX_U64(&u64Imm);
     12811                IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    1272412812                IEM_MC_STORE_MEM_U64(pVCpu->iem.s.iEffSeg, GCPtrEffDst, u64Imm);
    1272512813                IEM_MC_ADVANCE_RIP();
     
    1274112829    IEMOP_HLP_MIN_186();
    1274212830    IEMOP_HLP_DEFAULT_64BIT_OP_SIZE();
    12743     IEMOP_HLP_NO_LOCK_PREFIX();
    1274412831    uint16_t cbFrame;        IEM_OPCODE_GET_NEXT_U16(&cbFrame);
    1274512832    uint8_t  u8NestingLevel; IEM_OPCODE_GET_NEXT_U8(&u8NestingLevel);
     12833    IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    1274612834    return IEM_MC_DEFER_TO_CIMPL_3(iemCImpl_enter, pVCpu->iem.s.enmEffOpSize, cbFrame, u8NestingLevel);
    1274712835}
     
    1275412842    IEMOP_HLP_MIN_186();
    1275512843    IEMOP_HLP_DEFAULT_64BIT_OP_SIZE();
    12756     IEMOP_HLP_NO_LOCK_PREFIX();
     12844    IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    1275712845    return IEM_MC_DEFER_TO_CIMPL_1(iemCImpl_leave, pVCpu->iem.s.enmEffOpSize);
    1275812846}
     
    1276412852    IEMOP_MNEMONIC("retf Iw");
    1276512853    uint16_t u16Imm; IEM_OPCODE_GET_NEXT_U16(&u16Imm);
    12766     IEMOP_HLP_NO_LOCK_PREFIX();
     12854    IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    1276712855    IEMOP_HLP_DEFAULT_64BIT_OP_SIZE();
    1276812856    return IEM_MC_DEFER_TO_CIMPL_2(iemCImpl_retf, pVCpu->iem.s.enmEffOpSize, u16Imm);
     
    1277412862{
    1277512863    IEMOP_MNEMONIC("retf");
    12776     IEMOP_HLP_NO_LOCK_PREFIX();
     12864    IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    1277712865    IEMOP_HLP_DEFAULT_64BIT_OP_SIZE();
    1277812866    return IEM_MC_DEFER_TO_CIMPL_2(iemCImpl_retf, pVCpu->iem.s.enmEffOpSize, 0);
     
    1281612904{
    1281712905    IEMOP_MNEMONIC("iret");
    12818     IEMOP_HLP_NO_LOCK_PREFIX();
     12906    IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    1281912907    return IEM_MC_DEFER_TO_CIMPL_1(iemCImpl_iret, pVCpu->iem.s.enmEffOpSize);
    1282012908}
     
    1284312931    {
    1284412932        /* register */
    12845         IEMOP_HLP_NO_LOCK_PREFIX();
     12933        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    1284612934        IEM_MC_BEGIN(3, 0);
    1284712935        IEM_MC_ARG(uint8_t *,       pu8Dst,             0);
     
    1285712945    {
    1285812946        /* memory */
    12859         IEMOP_HLP_NO_LOCK_PREFIX(); /** @todo should probably not be raised until we've fetched all the opcode bytes? */
    1286012947        IEM_MC_BEGIN(3, 2);
    1286112948        IEM_MC_ARG(uint8_t *,       pu8Dst,             0);
     
    1286512952
    1286612953        IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffDst, bRm, 0);
     12954        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    1286712955        IEM_MC_MEM_MAP(pu8Dst, IEM_ACCESS_DATA_RW, pVCpu->iem.s.iEffSeg, GCPtrEffDst, 0 /*arg*/);
    1286812956        IEM_MC_FETCH_EFLAGS(EFlags);
     
    1290112989    {
    1290212990        /* register */
    12903         IEMOP_HLP_NO_LOCK_PREFIX();
     12991        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    1290412992        switch (pVCpu->iem.s.enmEffOpSize)
    1290512993        {
     
    1294713035    {
    1294813036        /* memory */
    12949         IEMOP_HLP_NO_LOCK_PREFIX(); /** @todo should probably not be raised until we've fetched all the opcode bytes? */
    1295013037        switch (pVCpu->iem.s.enmEffOpSize)
    1295113038        {
     
    1295813045
    1295913046                IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffDst, bRm, 0);
     13047                IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    1296013048                IEM_MC_MEM_MAP(pu16Dst, IEM_ACCESS_DATA_RW, pVCpu->iem.s.iEffSeg, GCPtrEffDst, 0 /*arg*/);
    1296113049                IEM_MC_FETCH_EFLAGS(EFlags);
     
    1297613064
    1297713065                IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffDst, bRm, 0);
     13066                IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    1297813067                IEM_MC_MEM_MAP(pu32Dst, IEM_ACCESS_DATA_RW, pVCpu->iem.s.iEffSeg, GCPtrEffDst, 0 /*arg*/);
    1297913068                IEM_MC_FETCH_EFLAGS(EFlags);
     
    1299413083
    1299513084                IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffDst, bRm, 0);
     13085                IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    1299613086                IEM_MC_MEM_MAP(pu64Dst, IEM_ACCESS_DATA_RW, pVCpu->iem.s.iEffSeg, GCPtrEffDst, 0 /*arg*/);
    1299713087                IEM_MC_FETCH_EFLAGS(EFlags);
     
    1303213122    {
    1303313123        /* register */
    13034         IEMOP_HLP_NO_LOCK_PREFIX();
     13124        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    1303513125        IEM_MC_BEGIN(3, 0);
    1303613126        IEM_MC_ARG(uint8_t *,   pu8Dst,     0);
     
    1304713137    {
    1304813138        /* memory */
    13049         IEMOP_HLP_NO_LOCK_PREFIX(); /** @todo should probably not be raised until we've fetched all the opcode bytes? */
    1305013139        IEM_MC_BEGIN(3, 2);
    1305113140        IEM_MC_ARG(uint8_t *,   pu8Dst,          0);
     
    1305513144
    1305613145        IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffDst, bRm, 0);
     13146        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    1305713147        IEM_MC_FETCH_GREG_U8(cShiftArg, X86_GREG_xCX);
    1305813148        IEM_MC_MEM_MAP(pu8Dst, IEM_ACCESS_DATA_RW, pVCpu->iem.s.iEffSeg, GCPtrEffDst, 0 /*arg*/);
     
    1309113181    {
    1309213182        /* register */
    13093         IEMOP_HLP_NO_LOCK_PREFIX();
     13183        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    1309413184        switch (pVCpu->iem.s.enmEffOpSize)
    1309513185        {
     
    1314013230    {
    1314113231        /* memory */
    13142         IEMOP_HLP_NO_LOCK_PREFIX(); /** @todo should probably not be raised until we've fetched all the opcode bytes? */
    1314313232        switch (pVCpu->iem.s.enmEffOpSize)
    1314413233        {
     
    1315113240
    1315213241                IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffDst, bRm, 0);
     13242                IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    1315313243                IEM_MC_FETCH_GREG_U8(cShiftArg, X86_GREG_xCX);
    1315413244                IEM_MC_MEM_MAP(pu16Dst, IEM_ACCESS_DATA_RW, pVCpu->iem.s.iEffSeg, GCPtrEffDst, 0 /*arg*/);
     
    1317013260
    1317113261                IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffDst, bRm, 0);
     13262                IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    1317213263                IEM_MC_FETCH_GREG_U8(cShiftArg, X86_GREG_xCX);
    1317313264                IEM_MC_MEM_MAP(pu32Dst, IEM_ACCESS_DATA_RW, pVCpu->iem.s.iEffSeg, GCPtrEffDst, 0 /*arg*/);
     
    1318913280
    1319013281                IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffDst, bRm, 0);
     13282                IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    1319113283                IEM_MC_FETCH_GREG_U8(cShiftArg, X86_GREG_xCX);
    1319213284                IEM_MC_MEM_MAP(pu64Dst, IEM_ACCESS_DATA_RW, pVCpu->iem.s.iEffSeg, GCPtrEffDst, 0 /*arg*/);
     
    1321013302    IEMOP_MNEMONIC("aam Ib");
    1321113303    uint8_t bImm; IEM_OPCODE_GET_NEXT_U8(&bImm);
    13212     IEMOP_HLP_NO_LOCK_PREFIX();
     13304    IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    1321313305    IEMOP_HLP_NO_64BIT();
    1321413306    if (!bImm)
     
    1322313315    IEMOP_MNEMONIC("aad Ib");
    1322413316    uint8_t bImm; IEM_OPCODE_GET_NEXT_U8(&bImm);
    13225     IEMOP_HLP_NO_LOCK_PREFIX();
     13317    IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    1322613318    IEMOP_HLP_NO_64BIT();
    1322713319    return IEM_MC_DEFER_TO_CIMPL_1(iemCImpl_aad, bImm);
     
    1325413346{
    1325513347    IEMOP_MNEMONIC("xlat");
    13256     IEMOP_HLP_NO_LOCK_PREFIX();
     13348    IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    1325713349    switch (pVCpu->iem.s.enmEffAddrMode)
    1325813350    {
     
    1640616498    IEMOP_MNEMONIC("loopne Jb");
    1640716499    int8_t i8Imm; IEM_OPCODE_GET_NEXT_S8(&i8Imm);
    16408     IEMOP_HLP_NO_LOCK_PREFIX();
     16500    IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    1640916501    IEMOP_HLP_DEFAULT_64BIT_OP_SIZE();
    1641016502
     
    1645416546    IEMOP_MNEMONIC("loope Jb");
    1645516547    int8_t i8Imm; IEM_OPCODE_GET_NEXT_S8(&i8Imm);
    16456     IEMOP_HLP_NO_LOCK_PREFIX();
     16548    IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    1645716549    IEMOP_HLP_DEFAULT_64BIT_OP_SIZE();
    1645816550
     
    1650216594    IEMOP_MNEMONIC("loop Jb");
    1650316595    int8_t i8Imm; IEM_OPCODE_GET_NEXT_S8(&i8Imm);
    16504     IEMOP_HLP_NO_LOCK_PREFIX();
     16596    IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    1650516597    IEMOP_HLP_DEFAULT_64BIT_OP_SIZE();
    1650616598
     
    1657716669    IEMOP_MNEMONIC("jecxz Jb");
    1657816670    int8_t i8Imm; IEM_OPCODE_GET_NEXT_S8(&i8Imm);
    16579     IEMOP_HLP_NO_LOCK_PREFIX();
     16671    IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    1658016672    IEMOP_HLP_DEFAULT_64BIT_OP_SIZE();
    1658116673
     
    1662216714    IEMOP_MNEMONIC("in eAX,Ib");
    1662316715    uint8_t u8Imm; IEM_OPCODE_GET_NEXT_U8(&u8Imm);
    16624     IEMOP_HLP_NO_LOCK_PREFIX();
     16716    IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    1662516717    return IEM_MC_DEFER_TO_CIMPL_2(iemCImpl_in, u8Imm, 1);
    1662616718}
     
    1663216724    IEMOP_MNEMONIC("in eAX,Ib");
    1663316725    uint8_t u8Imm; IEM_OPCODE_GET_NEXT_U8(&u8Imm);
    16634     IEMOP_HLP_NO_LOCK_PREFIX();
     16726    IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    1663516727    return IEM_MC_DEFER_TO_CIMPL_2(iemCImpl_in, u8Imm, pVCpu->iem.s.enmEffOpSize == IEMMODE_16BIT ? 2 : 4);
    1663616728}
     
    1664216734    IEMOP_MNEMONIC("out Ib,AL");
    1664316735    uint8_t u8Imm; IEM_OPCODE_GET_NEXT_U8(&u8Imm);
    16644     IEMOP_HLP_NO_LOCK_PREFIX();
     16736    IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    1664516737    return IEM_MC_DEFER_TO_CIMPL_2(iemCImpl_out, u8Imm, 1);
    1664616738}
     
    1665216744    IEMOP_MNEMONIC("out Ib,eAX");
    1665316745    uint8_t u8Imm; IEM_OPCODE_GET_NEXT_U8(&u8Imm);
    16654     IEMOP_HLP_NO_LOCK_PREFIX();
     16746    IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    1665516747    return IEM_MC_DEFER_TO_CIMPL_2(iemCImpl_out, u8Imm, pVCpu->iem.s.enmEffOpSize == IEMMODE_16BIT ? 2 : 4);
    1665616748}
     
    1673116823        IEM_OPCODE_GET_NEXT_U16_ZX_U32(&offSeg);
    1673216824    uint16_t uSel;  IEM_OPCODE_GET_NEXT_U16(&uSel);
    16733     IEMOP_HLP_NO_LOCK_PREFIX();
     16825    IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    1673416826    return IEM_MC_DEFER_TO_CIMPL_3(iemCImpl_FarJmp, uSel, offSeg, pVCpu->iem.s.enmEffOpSize);
    1673516827}
     
    1674116833    IEMOP_MNEMONIC("jmp Jb");
    1674216834    int8_t i8Imm; IEM_OPCODE_GET_NEXT_S8(&i8Imm);
    16743     IEMOP_HLP_NO_LOCK_PREFIX();
     16835    IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    1674416836    IEMOP_HLP_DEFAULT_64BIT_OP_SIZE();
    1674516837
     
    1675516847{
    1675616848    IEMOP_MNEMONIC("in  AL,DX");
    16757     IEMOP_HLP_NO_LOCK_PREFIX();
     16849    IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    1675816850    return IEM_MC_DEFER_TO_CIMPL_1(iemCImpl_in_eAX_DX, 1);
    1675916851}
     
    1676416856{
    1676516857    IEMOP_MNEMONIC("in  eAX,DX");
    16766     IEMOP_HLP_NO_LOCK_PREFIX();
     16858    IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    1676716859    return IEM_MC_DEFER_TO_CIMPL_1(iemCImpl_in_eAX_DX, pVCpu->iem.s.enmEffOpSize == IEMMODE_16BIT ? 2 : 4);
    1676816860}
     
    1677316865{
    1677416866    IEMOP_MNEMONIC("out DX,AL");
    16775     IEMOP_HLP_NO_LOCK_PREFIX();
     16867    IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    1677616868    return IEM_MC_DEFER_TO_CIMPL_1(iemCImpl_out_DX_eAX, 1);
    1677716869}
     
    1678216874{
    1678316875    IEMOP_MNEMONIC("out DX,eAX");
    16784     IEMOP_HLP_NO_LOCK_PREFIX();
     16876    IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    1678516877    return IEM_MC_DEFER_TO_CIMPL_1(iemCImpl_out_DX_eAX, pVCpu->iem.s.enmEffOpSize == IEMMODE_16BIT ? 2 : 4);
    1678616878}
     
    1683716929FNIEMOP_DEF(iemOp_hlt)
    1683816930{
    16839     IEMOP_HLP_NO_LOCK_PREFIX();
     16931    IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    1684016932    return IEM_MC_DEFER_TO_CIMPL_0(iemCImpl_hlt);
    1684116933}
     
    1684616938{
    1684716939    IEMOP_MNEMONIC("cmc");
    16848     IEMOP_HLP_NO_LOCK_PREFIX();
     16940    IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    1684916941    IEM_MC_BEGIN(0, 0);
    1685016942    IEM_MC_FLIP_EFL_BIT(X86_EFL_CF);
     
    1699017082        /* register access */
    1699117083        uint8_t u8Imm; IEM_OPCODE_GET_NEXT_U8(&u8Imm);
    16992         IEMOP_HLP_NO_LOCK_PREFIX();
     17084        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    1699317085
    1699417086        IEM_MC_BEGIN(3, 0);
     
    1700517097    {
    1700617098        /* memory access. */
    17007         IEMOP_HLP_NO_LOCK_PREFIX(); /** @todo should probably not be raised until we've fetched all the opcode bytes? */
    17008 
    1700917099        IEM_MC_BEGIN(3, 2);
    1701017100        IEM_MC_ARG(uint8_t *,       pu8Dst,             0);
     
    1701617106        uint8_t u8Imm; IEM_OPCODE_GET_NEXT_U8(&u8Imm);
    1701717107        IEM_MC_ASSIGN(u8Src, u8Imm);
     17108        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    1701817109        IEM_MC_MEM_MAP(pu8Dst, IEM_ACCESS_DATA_R, pVCpu->iem.s.iEffSeg, GCPtrEffDst, 0 /*arg*/);
    1701917110        IEM_MC_FETCH_EFLAGS(EFlags);
     
    1703317124{
    1703417125    IEMOP_MNEMONIC("test Ev,Iv");
    17035     IEMOP_HLP_NO_LOCK_PREFIX(); /** @todo should probably not be raised until we've fetched all the opcode bytes? */
    1703617126    IEMOP_VERIFICATION_UNDEFINED_EFLAGS(X86_EFL_AF);
    1703717127
     
    1703917129    {
    1704017130        /* register access */
     17131        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    1704117132        switch (pVCpu->iem.s.enmEffOpSize)
    1704217133        {
     
    1710617197                uint16_t u16Imm; IEM_OPCODE_GET_NEXT_U16(&u16Imm);
    1710717198                IEM_MC_ASSIGN(u16Src, u16Imm);
     17199                IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    1710817200                IEM_MC_MEM_MAP(pu16Dst, IEM_ACCESS_DATA_R, pVCpu->iem.s.iEffSeg, GCPtrEffDst, 0 /*arg*/);
    1710917201                IEM_MC_FETCH_EFLAGS(EFlags);
     
    1712817220                uint32_t u32Imm; IEM_OPCODE_GET_NEXT_U32(&u32Imm);
    1712917221                IEM_MC_ASSIGN(u32Src, u32Imm);
     17222                IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    1713017223                IEM_MC_MEM_MAP(pu32Dst, IEM_ACCESS_DATA_R, pVCpu->iem.s.iEffSeg, GCPtrEffDst, 0 /*arg*/);
    1713117224                IEM_MC_FETCH_EFLAGS(EFlags);
     
    1715017243                uint64_t u64Imm; IEM_OPCODE_GET_NEXT_S32_SX_U64(&u64Imm);
    1715117244                IEM_MC_ASSIGN(u64Src, u64Imm);
     17245                IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    1715217246                IEM_MC_MEM_MAP(pu64Dst, IEM_ACCESS_DATA_R, pVCpu->iem.s.iEffSeg, GCPtrEffDst, 0 /*arg*/);
    1715317247                IEM_MC_FETCH_EFLAGS(EFlags);
     
    1717017264FNIEMOP_DEF_2(iemOpCommonGrp3MulDivEb, uint8_t, bRm, PFNIEMAIMPLMULDIVU8, pfnU8)
    1717117265{
    17172     IEMOP_HLP_NO_LOCK_PREFIX(); /** @todo should probably not be raised until we've fetched all the opcode bytes? */
    17173 
    1717417266    if ((bRm & X86_MODRM_MOD_MASK) == (3 << X86_MODRM_MOD_SHIFT))
    1717517267    {
    1717617268        /* register access */
    17177         IEMOP_HLP_NO_LOCK_PREFIX();
     17269        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    1717817270        IEM_MC_BEGIN(3, 1);
    1717917271        IEM_MC_ARG(uint16_t *,      pu16AX,     0);
     
    1719717289    {
    1719817290        /* memory access. */
    17199         IEMOP_HLP_NO_LOCK_PREFIX(); /** @todo should probably not be raised until we've fetched all the opcode bytes? */
    17200 
    1720117291        IEM_MC_BEGIN(3, 2);
    1720217292        IEM_MC_ARG(uint16_t *,      pu16AX,     0);
     
    1720717297
    1720817298        IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffDst, bRm, 0);
     17299        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    1720917300        IEM_MC_FETCH_MEM_U8(u8Value, pVCpu->iem.s.iEffSeg, GCPtrEffDst);
    1721017301        IEM_MC_REF_GREG_U16(pu16AX, X86_GREG_xAX);
     
    1722617317FNIEMOP_DEF_2(iemOpCommonGrp3MulDivEv, uint8_t, bRm, PCIEMOPMULDIVSIZES, pImpl)
    1722717318{
    17228     IEMOP_HLP_NO_LOCK_PREFIX(); /** @todo should probably not be raised until we've fetched all the opcode bytes? */
    1722917319    IEMOP_VERIFICATION_UNDEFINED_EFLAGS(X86_EFL_SF | X86_EFL_ZF | X86_EFL_AF | X86_EFL_PF);
    1723017320
     
    1723217322    {
    1723317323        /* register access */
     17324        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    1723417325        switch (pVCpu->iem.s.enmEffOpSize)
    1723517326        {
    1723617327            case IEMMODE_16BIT:
    1723717328            {
    17238                 IEMOP_HLP_NO_LOCK_PREFIX();
     17329                IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    1723917330                IEM_MC_BEGIN(4, 1);
    1724017331                IEM_MC_ARG(uint16_t *,      pu16AX,     0);
     
    1726117352            case IEMMODE_32BIT:
    1726217353            {
    17263                 IEMOP_HLP_NO_LOCK_PREFIX();
     17354                IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    1726417355                IEM_MC_BEGIN(4, 1);
    1726517356                IEM_MC_ARG(uint32_t *,      pu32AX,     0);
     
    1728817379            case IEMMODE_64BIT:
    1728917380            {
    17290                 IEMOP_HLP_NO_LOCK_PREFIX();
     17381                IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    1729117382                IEM_MC_BEGIN(4, 1);
    1729217383                IEM_MC_ARG(uint64_t *,      pu64AX,     0);
     
    1732117412            case IEMMODE_16BIT:
    1732217413            {
    17323                 IEMOP_HLP_NO_LOCK_PREFIX();
    1732417414                IEM_MC_BEGIN(4, 2);
    1732517415                IEM_MC_ARG(uint16_t *,      pu16AX,     0);
     
    1733117421
    1733217422                IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffDst, bRm, 0);
     17423                IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    1733317424                IEM_MC_FETCH_MEM_U16(u16Value, pVCpu->iem.s.iEffSeg, GCPtrEffDst);
    1733417425                IEM_MC_REF_GREG_U16(pu16AX, X86_GREG_xAX);
     
    1734817439            case IEMMODE_32BIT:
    1734917440            {
    17350                 IEMOP_HLP_NO_LOCK_PREFIX();
    1735117441                IEM_MC_BEGIN(4, 2);
    1735217442                IEM_MC_ARG(uint32_t *,      pu32AX,     0);
     
    1735817448
    1735917449                IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffDst, bRm, 0);
     17450                IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    1736017451                IEM_MC_FETCH_MEM_U32(u32Value, pVCpu->iem.s.iEffSeg, GCPtrEffDst);
    1736117452                IEM_MC_REF_GREG_U32(pu32AX, X86_GREG_xAX);
     
    1737717468            case IEMMODE_64BIT:
    1737817469            {
    17379                 IEMOP_HLP_NO_LOCK_PREFIX();
    1738017470                IEM_MC_BEGIN(4, 2);
    1738117471                IEM_MC_ARG(uint64_t *,      pu64AX,     0);
     
    1738717477
    1738817478                IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffDst, bRm, 0);
     17479                IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    1738917480                IEM_MC_FETCH_MEM_U64(u64Value, pVCpu->iem.s.iEffSeg, GCPtrEffDst);
    1739017481                IEM_MC_REF_GREG_U64(pu64AX, X86_GREG_xAX);
     
    1748717578{
    1748817579    IEMOP_MNEMONIC("clc");
    17489     IEMOP_HLP_NO_LOCK_PREFIX();
     17580    IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    1749017581    IEM_MC_BEGIN(0, 0);
    1749117582    IEM_MC_CLEAR_EFL_BIT(X86_EFL_CF);
     
    1750017591{
    1750117592    IEMOP_MNEMONIC("stc");
    17502     IEMOP_HLP_NO_LOCK_PREFIX();
     17593    IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    1750317594    IEM_MC_BEGIN(0, 0);
    1750417595    IEM_MC_SET_EFL_BIT(X86_EFL_CF);
     
    1751317604{
    1751417605    IEMOP_MNEMONIC("cli");
    17515     IEMOP_HLP_NO_LOCK_PREFIX();
     17606    IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    1751617607    return IEM_MC_DEFER_TO_CIMPL_0(iemCImpl_cli);
    1751717608}
     
    1752117612{
    1752217613    IEMOP_MNEMONIC("sti");
    17523     IEMOP_HLP_NO_LOCK_PREFIX();
     17614    IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    1752417615    return IEM_MC_DEFER_TO_CIMPL_0(iemCImpl_sti);
    1752517616}
     
    1753017621{
    1753117622    IEMOP_MNEMONIC("cld");
    17532     IEMOP_HLP_NO_LOCK_PREFIX();
     17623    IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    1753317624    IEM_MC_BEGIN(0, 0);
    1753417625    IEM_MC_CLEAR_EFL_BIT(X86_EFL_DF);
     
    1754317634{
    1754417635    IEMOP_MNEMONIC("std");
    17545     IEMOP_HLP_NO_LOCK_PREFIX();
     17636    IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    1754617637    IEM_MC_BEGIN(0, 0);
    1754717638    IEM_MC_SET_EFL_BIT(X86_EFL_DF);
     
    1757817669{
    1757917670    IEMOP_MNEMONIC("calln Ev");
    17580     IEMOP_HLP_NO_LOCK_PREFIX(); /** @todo Too early? */
    1758117671    IEMOP_HLP_DEFAULT_64BIT_OP_SIZE();
    1758217672
     
    1758417674    {
    1758517675        /* The new RIP is taken from a register. */
     17676        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    1758617677        switch (pVCpu->iem.s.enmEffOpSize)
    1758717678        {
     
    1762317714                IEM_MC_LOCAL(RTGCPTR, GCPtrEffSrc);
    1762417715                IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffSrc, bRm, 0);
     17716                IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    1762517717                IEM_MC_FETCH_MEM_U16(u16Target, pVCpu->iem.s.iEffSeg, GCPtrEffSrc);
    1762617718                IEM_MC_CALL_CIMPL_1(iemCImpl_call_16, u16Target);
     
    1763317725                IEM_MC_LOCAL(RTGCPTR, GCPtrEffSrc);
    1763417726                IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffSrc, bRm, 0);
     17727                IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    1763517728                IEM_MC_FETCH_MEM_U32(u32Target, pVCpu->iem.s.iEffSeg, GCPtrEffSrc);
    1763617729                IEM_MC_CALL_CIMPL_1(iemCImpl_call_32, u32Target);
     
    1764317736                IEM_MC_LOCAL(RTGCPTR, GCPtrEffSrc);
    1764417737                IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffSrc, bRm, 0);
     17738                IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    1764517739                IEM_MC_FETCH_MEM_U64(u64Target, pVCpu->iem.s.iEffSeg, GCPtrEffSrc);
    1764617740                IEM_MC_CALL_CIMPL_1(iemCImpl_call_64, u64Target);
     
    1773817832{
    1773917833    IEMOP_MNEMONIC("jmpn Ev");
    17740     IEMOP_HLP_NO_LOCK_PREFIX(); /** @todo Too early? */
    1774117834    IEMOP_HLP_DEFAULT_64BIT_OP_SIZE();
    1774217835
     
    1774417837    {
    1774517838        /* The new RIP is taken from a register. */
     17839        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    1774617840        switch (pVCpu->iem.s.enmEffOpSize)
    1774717841        {
     
    1778317877                IEM_MC_LOCAL(RTGCPTR, GCPtrEffSrc);
    1778417878                IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffSrc, bRm, 0);
     17879                IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    1778517880                IEM_MC_FETCH_MEM_U16(u16Target, pVCpu->iem.s.iEffSeg, GCPtrEffSrc);
    1778617881                IEM_MC_SET_RIP_U16(u16Target);
     
    1779317888                IEM_MC_LOCAL(RTGCPTR, GCPtrEffSrc);
    1779417889                IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffSrc, bRm, 0);
     17890                IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    1779517891                IEM_MC_FETCH_MEM_U32(u32Target, pVCpu->iem.s.iEffSeg, GCPtrEffSrc);
    1779617892                IEM_MC_SET_RIP_U32(u32Target);
     
    1780317899                IEM_MC_LOCAL(RTGCPTR, GCPtrEffSrc);
    1780417900                IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffSrc, bRm, 0);
     17901                IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    1780517902                IEM_MC_FETCH_MEM_U64(u64Target, pVCpu->iem.s.iEffSeg, GCPtrEffSrc);
    1780617903                IEM_MC_SET_RIP_U64(u64Target);
     
    1783217929{
    1783317930    IEMOP_MNEMONIC("push Ev");
    17834     IEMOP_HLP_NO_LOCK_PREFIX(); /** @todo Too early? */
    1783517931
    1783617932    /* Registers are handled by a common worker. */
     
    1784717943            IEM_MC_LOCAL(RTGCPTR,   GCPtrEffSrc);
    1784817944            IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffSrc, bRm, 0);
     17945            IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    1784917946            IEM_MC_FETCH_MEM_U16(u16Src, pVCpu->iem.s.iEffSeg, GCPtrEffSrc);
    1785017947            IEM_MC_PUSH_U16(u16Src);
     
    1785817955            IEM_MC_LOCAL(RTGCPTR,   GCPtrEffSrc);
    1785917956            IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffSrc, bRm, 0);
     17957            IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    1786017958            IEM_MC_FETCH_MEM_U32(u32Src, pVCpu->iem.s.iEffSeg, GCPtrEffSrc);
    1786117959            IEM_MC_PUSH_U32(u32Src);
     
    1786917967            IEM_MC_LOCAL(RTGCPTR,   GCPtrEffSrc);
    1787017968            IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffSrc, bRm, 0);
     17969            IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    1787117970            IEM_MC_FETCH_MEM_U64(u64Src, pVCpu->iem.s.iEffSeg, GCPtrEffSrc);
    1787217971            IEM_MC_PUSH_U64(u64Src);
Note: See TracChangeset for help on using the changeset viewer.

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