VirtualBox

Changeset 101950 in vbox


Ignore:
Timestamp:
Nov 8, 2023 1:57:15 AM (13 months ago)
Author:
vboxsync
Message:

VMM/IEM: Eliminated IEM_MC_ASSIGN use from IEMAllInstTwoByte0f.cpp.h, replacing it with IEM_MC_ARG_CONST/IEM_MC_LOCAL_ASSIGN and moved IEM_MC_ARG* and IEM_MC_LOCAL* from the top of the MC-blocks being modified to where they are actually first needed, reducing the life time and troubles for the recompiler. bugref:10371

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

Legend:

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

    r101911 r101950  
    18381838
    18391839class McStmtVar(McStmt):
    1840     """ IEM_MC_LOCAL, IEM_MC_LOCAL_CONST """
    1841     def __init__(self, sName, asParams, sType, sVarName, sConstValue = None):
     1840    """ IEM_MC_LOCAL, IEM_MC_LOCAL_ASSIGN, IEM_MC_LOCAL_CONST """
     1841    def __init__(self, sName, asParams, sType, sVarName, sValue = None):
    18421842        McStmt.__init__(self, sName, asParams);
    18431843        self.sType       = sType;
    18441844        self.sVarName    = sVarName;
    1845         self.sConstValue = sConstValue;     ##< None if not const.
     1845        self.sValue      = sValue;              ##< None if no assigned / const value.
    18461846
    18471847class McStmtArg(McStmtVar):
     
    21472147
    21482148    @staticmethod
     2149    def parseMcLocalAssign(oSelf, sName, asParams):
     2150        """ IEM_MC_LOCAL_ASSIGN """
     2151        oSelf.checkStmtParamCount(sName, asParams, 3);
     2152        oStmt = McStmtVar(sName, asParams, asParams[0], asParams[1], sValue = asParams[2]);
     2153        oSelf.aoLocals.append(oStmt);
     2154        return oStmt;
     2155
     2156    @staticmethod
    21492157    def parseMcLocalConst(oSelf, sName, asParams):
    21502158        """ IEM_MC_LOCAL_CONST """
    21512159        oSelf.checkStmtParamCount(sName, asParams, 3);
    2152         oStmt = McStmtVar(sName, asParams, asParams[0], asParams[1], sConstValue = asParams[2]);
     2160        oStmt = McStmtVar(sName, asParams, asParams[0], asParams[1], sValue = asParams[2]);
    21532161        oSelf.aoLocals.append(oStmt);
    21542162        return oStmt;
     
    29202928    'IEM_MC_INT_CLEAR_ZMM_256_UP':                               (McBlock.parseMcGeneric,           True,  False, ),
    29212929    'IEM_MC_LOCAL':                                              (McBlock.parseMcLocal,             False, True,  ),
     2930    'IEM_MC_LOCAL_ASSIGN':                                       (McBlock.parseMcLocalAssign,       False, True,  ),
    29222931    'IEM_MC_LOCAL_CONST':                                        (McBlock.parseMcLocalConst,        False, True,  ),
    29232932    'IEM_MC_MAYBE_RAISE_AVX_RELATED_XCPT':                       (McBlock.parseMcGeneric,           True,  False, ),
  • trunk/src/VBox/VMM/VMMAll/IEMAllInstTwoByte0f.cpp.h

    r101850 r101950  
    12051205    /* Ignore operand size here, memory refs are always 16-bit. */
    12061206    IEM_MC_BEGIN(2, 0, IEM_MC_F_MIN_286, 0);
    1207     IEM_MC_ARG(uint16_t, iEffSeg,               0);
    1208     IEM_MC_ARG(RTGCPTR,  GCPtrEffDst,           1);
     1207    IEM_MC_ARG(RTGCPTR,         GCPtrEffDst,                            1);
    12091208    IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffDst, bRm, 0);
    12101209    IEMOP_HLP_DECODED_NL_1(OP_SLDT, IEMOPFORM_M_MEM, OP_PARM_Ew, DISOPTYPE_DANGEROUS | DISOPTYPE_PRIVILEGED_NOTRAP);
    1211     IEM_MC_ASSIGN(iEffSeg, pVCpu->iem.s.iEffSeg);
     1210    IEM_MC_ARG_CONST(uint8_t,   iEffSeg, /*=*/ pVCpu->iem.s.iEffSeg,    0);
    12121211    IEM_MC_CALL_CIMPL_2(IEM_CIMPL_F_VMEXIT, iemCImpl_sldt_mem, iEffSeg, GCPtrEffDst);
    12131212    IEM_MC_END();
     
    12311230    /* Ignore operand size here, memory refs are always 16-bit. */
    12321231    IEM_MC_BEGIN(2, 0, IEM_MC_F_MIN_286, 0);
    1233     IEM_MC_ARG(uint16_t, iEffSeg,               0);
    1234     IEM_MC_ARG(RTGCPTR,  GCPtrEffDst,           1);
     1232    IEM_MC_ARG(RTGCPTR,         GCPtrEffDst,                            1);
    12351233    IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffDst, bRm, 0);
    12361234    IEMOP_HLP_DECODED_NL_1(OP_STR, IEMOPFORM_M_MEM, OP_PARM_Ew, DISOPTYPE_DANGEROUS | DISOPTYPE_PRIVILEGED_NOTRAP);
    1237     IEM_MC_ASSIGN(iEffSeg, pVCpu->iem.s.iEffSeg);
     1235    IEM_MC_ARG_CONST(uint8_t,   iEffSeg, /*=*/ pVCpu->iem.s.iEffSeg,    0);
    12381236    IEM_MC_CALL_CIMPL_2(IEM_CIMPL_F_VMEXIT, iemCImpl_str_mem, iEffSeg, GCPtrEffDst);
    12391237    IEM_MC_END();
     
    13801378    IEMOP_HLP_64BIT_OP_SIZE();
    13811379    IEM_MC_BEGIN(2, 1, IEM_MC_F_MIN_286, 0);
    1382     IEM_MC_ARG(uint8_t,         iEffSeg,                                    0);
    1383     IEM_MC_ARG(RTGCPTR,         GCPtrEffSrc,                                1);
     1380    IEM_MC_ARG(RTGCPTR,         GCPtrEffSrc,                            1);
    13841381    IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffSrc, bRm, 0);
    13851382    IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    1386     IEM_MC_ASSIGN(iEffSeg, pVCpu->iem.s.iEffSeg);
     1383    IEM_MC_ARG_CONST(uint8_t,   iEffSeg, /*=*/ pVCpu->iem.s.iEffSeg,    0);
    13871384    IEM_MC_CALL_CIMPL_2(IEM_CIMPL_F_VMEXIT, iemCImpl_sgdt, iEffSeg, GCPtrEffSrc);
    13881385    IEM_MC_END();
     
    14721469    IEMOP_HLP_64BIT_OP_SIZE();
    14731470    IEM_MC_BEGIN(2, 1, IEM_MC_F_MIN_286, 0);
    1474     IEM_MC_ARG(uint8_t,         iEffSeg,                                    0);
    1475     IEM_MC_ARG(RTGCPTR,         GCPtrEffSrc,                                1);
     1471    IEM_MC_ARG(RTGCPTR,         GCPtrEffSrc,                            1);
    14761472    IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffSrc, bRm, 0);
    14771473    IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    1478     IEM_MC_ASSIGN(iEffSeg, pVCpu->iem.s.iEffSeg);
     1474    IEM_MC_ARG_CONST(uint8_t,   iEffSeg, /*=*/ pVCpu->iem.s.iEffSeg,    0);
    14791475    IEM_MC_CALL_CIMPL_2(IEM_CIMPL_F_VMEXIT, iemCImpl_sidt, iEffSeg, GCPtrEffSrc);
    14801476    IEM_MC_END();
     
    15061502    IEMOP_HLP_64BIT_OP_SIZE();
    15071503    IEM_MC_BEGIN(3, 1, 0, 0);
    1508     IEM_MC_ARG(uint8_t,         iEffSeg,                                    0);
    1509     IEM_MC_ARG(RTGCPTR,         GCPtrEffSrc,                                1);
    1510     IEM_MC_ARG_CONST(IEMMODE,   enmEffOpSizeArg,/*=*/pVCpu->iem.s.enmEffOpSize, 2);
     1504    IEM_MC_ARG(RTGCPTR,         GCPtrEffSrc,                                    1);
    15111505    IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffSrc, bRm, 0);
    15121506    IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    1513     IEM_MC_ASSIGN(iEffSeg, pVCpu->iem.s.iEffSeg);
     1507    IEM_MC_ARG_CONST(uint8_t,   iEffSeg,       /*=*/ pVCpu->iem.s.iEffSeg,      0);
     1508    IEM_MC_ARG_CONST(IEMMODE,   enmEffOpSizeArg,/*=*/pVCpu->iem.s.enmEffOpSize, 2);
    15141509    IEM_MC_CALL_CIMPL_3(IEM_CIMPL_F_VMEXIT, iemCImpl_lgdt, iEffSeg, GCPtrEffSrc, enmEffOpSizeArg);
    15151510    IEM_MC_END();
     
    15591554    IEMMODE enmEffOpSize = IEM_IS_64BIT_CODE(pVCpu) ? IEMMODE_64BIT : pVCpu->iem.s.enmEffOpSize;
    15601555    IEM_MC_BEGIN(3, 1, 0, 0);
    1561     IEM_MC_ARG(uint8_t,         iEffSeg,                            0);
    1562     IEM_MC_ARG(RTGCPTR,         GCPtrEffSrc,                        1);
    1563     IEM_MC_ARG_CONST(IEMMODE,   enmEffOpSizeArg,/*=*/enmEffOpSize,  2);
     1556    IEM_MC_ARG(RTGCPTR,         GCPtrEffSrc,                                    1);
    15641557    IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffSrc, bRm, 0);
    15651558    IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    1566     IEM_MC_ASSIGN(iEffSeg, pVCpu->iem.s.iEffSeg);
     1559    IEM_MC_ARG_CONST(uint8_t,   iEffSeg,         /*=*/ pVCpu->iem.s.iEffSeg,    0);
     1560    IEM_MC_ARG_CONST(IEMMODE,   enmEffOpSizeArg, /*=*/ enmEffOpSize,            2);
    15671561    IEM_MC_CALL_CIMPL_3(IEM_CIMPL_F_VMEXIT, iemCImpl_lidt, iEffSeg, GCPtrEffSrc, enmEffOpSizeArg);
    15681562    IEM_MC_END();
     
    16911685    /* Ignore operand size here, memory refs are always 16-bit. */
    16921686    IEM_MC_BEGIN(2, 0, IEM_MC_F_MIN_286, 0);
    1693     IEM_MC_ARG(uint16_t, iEffSeg,               0);
    1694     IEM_MC_ARG(RTGCPTR,  GCPtrEffDst,           1);
     1687    IEM_MC_ARG(RTGCPTR,         GCPtrEffDst,                            1);
    16951688    IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffDst, bRm, 0);
    16961689    IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    1697     IEM_MC_ASSIGN(iEffSeg, pVCpu->iem.s.iEffSeg);
     1690    IEM_MC_ARG_CONST(uint8_t,   iEffSeg, /*=*/ pVCpu->iem.s.iEffSeg,    0);
    16981691    IEM_MC_CALL_CIMPL_2(IEM_CIMPL_F_VMEXIT, iemCImpl_smsw_mem, iEffSeg, GCPtrEffDst);
    16991692    IEM_MC_END();
     
    71347127        {
    71357128            IEM_MC_BEGIN(3, 0, IEM_MC_F_64BIT, 0);
    7136             IEM_MC_ARG(uint8_t,       iEffSeg,                                          0);
    7137             IEM_MC_ARG(RTGCPTR,       GCPtrVal,                                         1);
    7138             IEM_MC_ARG(uint64_t,      u64Enc,                                           2);
     7129            IEM_MC_ARG(RTGCPTR,         GCPtrVal,                                         1);
    71397130            IEM_MC_CALC_RM_EFF_ADDR(GCPtrVal, bRm, 0);
    71407131            IEMOP_HLP_DONE_DECODING_NO_SIZE_OP_REPZ_OR_REPNZ_PREFIXES();
     7132            IEM_MC_ARG_CONST(uint8_t,   iEffSeg, /*=*/ pVCpu->iem.s.iEffSeg,              0);
     7133            IEM_MC_ARG(uint64_t,        u64Enc,                                           2);
    71417134            IEM_MC_FETCH_GREG_U64(u64Enc, IEM_GET_MODRM_REG(pVCpu, bRm));
    7142             IEM_MC_ASSIGN(iEffSeg, pVCpu->iem.s.iEffSeg);
    71437135            IEM_MC_CALL_CIMPL_3(IEM_CIMPL_F_VMEXIT | IEM_CIMPL_F_STATUS_FLAGS,
    71447136                                iemCImpl_vmread_mem_reg64, iEffSeg, GCPtrVal, u64Enc);
     
    71487140        {
    71497141            IEM_MC_BEGIN(3, 0, 0, 0);
    7150             IEM_MC_ARG(uint8_t,       iEffSeg,                                          0);
    7151             IEM_MC_ARG(RTGCPTR,       GCPtrVal,                                         1);
    7152             IEM_MC_ARG(uint32_t,      u32Enc,                                           2);
     7142            IEM_MC_ARG(RTGCPTR,         GCPtrVal,                                         1);
    71537143            IEM_MC_CALC_RM_EFF_ADDR(GCPtrVal, bRm, 0);
    71547144            IEMOP_HLP_DONE_DECODING_NO_SIZE_OP_REPZ_OR_REPNZ_PREFIXES();
     7145            IEM_MC_ARG_CONST(uint8_t,   iEffSeg, /*=*/ pVCpu->iem.s.iEffSeg,              0);
     7146            IEM_MC_ARG(uint32_t,        u32Enc,                                           2);
    71557147            IEM_MC_FETCH_GREG_U32(u32Enc, IEM_GET_MODRM_REG(pVCpu, bRm));
    7156             IEM_MC_ASSIGN(iEffSeg, pVCpu->iem.s.iEffSeg);
    71577148            IEM_MC_CALL_CIMPL_3(IEM_CIMPL_F_VMEXIT | IEM_CIMPL_F_STATUS_FLAGS,
    71587149                                iemCImpl_vmread_mem_reg32, iEffSeg, GCPtrVal, u32Enc);
     
    72167207        {
    72177208            IEM_MC_BEGIN(3, 0, IEM_MC_F_64BIT, 0);
    7218             IEM_MC_ARG(uint8_t,       iEffSeg,                                          0);
    7219             IEM_MC_ARG(RTGCPTR,       GCPtrVal,                                         1);
    7220             IEM_MC_ARG(uint64_t,      u64Enc,                                           2);
     7209            IEM_MC_ARG(RTGCPTR,         GCPtrVal,                                         1);
    72217210            IEM_MC_CALC_RM_EFF_ADDR(GCPtrVal, bRm, 0);
    72227211            IEMOP_HLP_DONE_DECODING_NO_SIZE_OP_REPZ_OR_REPNZ_PREFIXES();
     7212            IEM_MC_ARG_CONST(uint8_t,   iEffSeg, /*=*/ pVCpu->iem.s.iEffSeg,              0);
     7213            IEM_MC_ARG(uint64_t,        u64Enc,                                           2);
    72237214            IEM_MC_FETCH_GREG_U64(u64Enc, IEM_GET_MODRM_REG(pVCpu, bRm));
    7224             IEM_MC_ASSIGN(iEffSeg, pVCpu->iem.s.iEffSeg);
    72257215            IEM_MC_CALL_CIMPL_3(IEM_CIMPL_F_VMEXIT | IEM_CIMPL_F_STATUS_FLAGS,
    72267216                                iemCImpl_vmwrite_mem, iEffSeg, GCPtrVal, u64Enc);
     
    72307220        {
    72317221            IEM_MC_BEGIN(3, 0, 0, 0);
    7232             IEM_MC_ARG(uint8_t,       iEffSeg,                                          0);
    7233             IEM_MC_ARG(RTGCPTR,       GCPtrVal,                                         1);
    7234             IEM_MC_ARG(uint32_t,      u32Enc,                                           2);
     7222            IEM_MC_ARG(RTGCPTR,         GCPtrVal,                                         1);
    72357223            IEM_MC_CALC_RM_EFF_ADDR(GCPtrVal, bRm, 0);
    72367224            IEMOP_HLP_DONE_DECODING_NO_SIZE_OP_REPZ_OR_REPNZ_PREFIXES();
     7225            IEM_MC_ARG(uint32_t,        u32Enc,                                           2);
     7226            IEM_MC_ARG_CONST(uint8_t,   iEffSeg, /*=*/ pVCpu->iem.s.iEffSeg,              0);
    72377227            IEM_MC_FETCH_GREG_U32(u32Enc, IEM_GET_MODRM_REG(pVCpu, bRm));
    7238             IEM_MC_ASSIGN(iEffSeg, pVCpu->iem.s.iEffSeg);
    72397228            IEM_MC_CALL_CIMPL_3(IEM_CIMPL_F_VMEXIT | IEM_CIMPL_F_STATUS_FLAGS,
    72407229                                iemCImpl_vmwrite_mem, iEffSeg, GCPtrVal, u32Enc);
     
    89998988                case IEMMODE_16BIT: \
    90008989                    IEM_MC_BEGIN(3, 4, IEM_MC_F_MIN_386, 0); \
    9001                     IEM_MC_ARG(uint16_t *,              pu16Dst,                0); \
    9002                     IEM_MC_ARG(uint16_t,                u16Src,                 1); \
    9003                     IEM_MC_ARG_LOCAL_EFLAGS(            pEFlags, EFlags,        2); \
    90048990                    IEM_MC_LOCAL(RTGCPTR,               GCPtrEffDst); \
    9005                     IEM_MC_LOCAL(int16_t,               i16AddrAdj); \
    9006                     IEM_MC_LOCAL(uint8_t,               bUnmapInfo); \
    9007                     \
    90088991                    IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffDst, bRm, 0); \
    90098992                    IEMOP_HLP_DONE_DECODING(); \
     8993                    \
     8994                    IEM_MC_ARG(uint16_t,                u16Src,                 1); \
    90108995                    IEM_MC_FETCH_GREG_U16(u16Src, IEM_GET_MODRM_REG(pVCpu, bRm)); \
    9011                     IEM_MC_ASSIGN(i16AddrAdj, u16Src); \
     8996                    IEM_MC_LOCAL_ASSIGN(int16_t,        i16AddrAdj, /*=*/ u16Src); \
    90128997                    IEM_MC_AND_ARG_U16(u16Src, 0x0f); \
    90138998                    IEM_MC_SAR_LOCAL_S16(i16AddrAdj, 4); \
    90148999                    IEM_MC_SHL_LOCAL_S16(i16AddrAdj, 1); \
    90159000                    IEM_MC_ADD_LOCAL_S16_TO_EFF_ADDR(GCPtrEffDst, i16AddrAdj); \
     9001                    \
     9002                    IEM_MC_LOCAL(uint8_t,               bUnmapInfo); \
     9003                    IEM_MC_ARG(uint16_t *,              pu16Dst,                0); \
     9004                    IEM_MC_MEM_MAP_U16_RW(pu16Dst, bUnmapInfo, pVCpu->iem.s.iEffSeg, GCPtrEffDst); \
     9005                    \
     9006                    IEM_MC_ARG_LOCAL_EFLAGS(            pEFlags, EFlags,        2); \
    90169007                    IEM_MC_FETCH_EFLAGS(EFlags); \
     9008                    IEM_MC_CALL_VOID_AIMPL_3(a_fnNormalU16, pu16Dst, u16Src, pEFlags); \
    90179009                    \
    9018                     IEM_MC_MEM_MAP_U16_RW(pu16Dst, bUnmapInfo, pVCpu->iem.s.iEffSeg, GCPtrEffDst); \
    9019                     IEM_MC_CALL_VOID_AIMPL_3(a_fnNormalU16, pu16Dst, u16Src, pEFlags); \
    90209010                    IEM_MC_MEM_COMMIT_AND_UNMAP_RW(pu16Dst, bUnmapInfo); \
    9021                     \
    90229011                    IEM_MC_COMMIT_EFLAGS(EFlags); \
    90239012                    IEM_MC_ADVANCE_RIP_AND_FINISH(); \
     
    90279016                case IEMMODE_32BIT: \
    90289017                    IEM_MC_BEGIN(3, 4, IEM_MC_F_MIN_386, 0); \
    9029                     IEM_MC_ARG(uint32_t *,              pu32Dst,                0); \
    9030                     IEM_MC_ARG(uint32_t,                u32Src,                 1); \
    9031                     IEM_MC_ARG_LOCAL_EFLAGS(            pEFlags, EFlags,        2); \
    90329018                    IEM_MC_LOCAL(RTGCPTR,               GCPtrEffDst); \
    9033                     IEM_MC_LOCAL(int32_t,               i32AddrAdj); \
    9034                     IEM_MC_LOCAL(uint8_t,               bUnmapInfo); \
    9035                     \
    90369019                    IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffDst, bRm, 0); \
    90379020                    IEMOP_HLP_DONE_DECODING(); \
     9021                    \
     9022                    IEM_MC_ARG(uint32_t,                u32Src,                 1); \
    90389023                    IEM_MC_FETCH_GREG_U32(u32Src, IEM_GET_MODRM_REG(pVCpu, bRm)); \
    9039                     IEM_MC_ASSIGN(i32AddrAdj, u32Src); \
     9024                    IEM_MC_LOCAL_ASSIGN(int32_t,        i32AddrAdj, /*=*/ u32Src); \
    90409025                    IEM_MC_AND_ARG_U32(u32Src, 0x1f); \
    90419026                    IEM_MC_SAR_LOCAL_S32(i32AddrAdj, 5); \
    90429027                    IEM_MC_SHL_LOCAL_S32(i32AddrAdj, 2); \
    90439028                    IEM_MC_ADD_LOCAL_S32_TO_EFF_ADDR(GCPtrEffDst, i32AddrAdj); \
     9029                    \
     9030                    IEM_MC_LOCAL(uint8_t,               bUnmapInfo); \
     9031                    IEM_MC_ARG(uint32_t *,              pu32Dst,                0); \
     9032                    IEM_MC_MEM_MAP_U32_RW(pu32Dst, bUnmapInfo, pVCpu->iem.s.iEffSeg, GCPtrEffDst); \
     9033                    \
     9034                    IEM_MC_ARG_LOCAL_EFLAGS(            pEFlags, EFlags,        2); \
    90449035                    IEM_MC_FETCH_EFLAGS(EFlags); \
     9036                    IEM_MC_CALL_VOID_AIMPL_3(a_fnNormalU32, pu32Dst, u32Src, pEFlags); \
    90459037                    \
    9046                     IEM_MC_MEM_MAP_U32_RW(pu32Dst, bUnmapInfo, pVCpu->iem.s.iEffSeg, GCPtrEffDst); \
    9047                     IEM_MC_CALL_VOID_AIMPL_3(a_fnNormalU32, pu32Dst, u32Src, pEFlags); \
    90489038                    IEM_MC_MEM_COMMIT_AND_UNMAP_RW(pu32Dst, bUnmapInfo); \
    9049                     \
    90509039                    IEM_MC_COMMIT_EFLAGS(EFlags); \
    90519040                    IEM_MC_ADVANCE_RIP_AND_FINISH(); \
     
    90559044                case IEMMODE_64BIT: \
    90569045                    IEM_MC_BEGIN(3, 5, IEM_MC_F_64BIT, 0); \
    9057                     IEM_MC_ARG(uint64_t *,              pu64Dst,                0); \
    9058                     IEM_MC_ARG(uint64_t,                u64Src,                 1); \
    9059                     IEM_MC_ARG_LOCAL_EFLAGS(            pEFlags, EFlags,        2); \
    90609046                    IEM_MC_LOCAL(RTGCPTR,               GCPtrEffDst); \
    9061                     IEM_MC_LOCAL(int64_t,               i64AddrAdj); \
    9062                     IEM_MC_LOCAL(uint8_t,               bUnmapInfo); \
    9063                     \
    90649047                    IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffDst, bRm, 0); \
    90659048                    IEMOP_HLP_DONE_DECODING(); \
     9049                    \
     9050                    IEM_MC_ARG(uint64_t,                u64Src,                 1); \
    90669051                    IEM_MC_FETCH_GREG_U64(u64Src, IEM_GET_MODRM_REG(pVCpu, bRm)); \
    9067                     IEM_MC_ASSIGN(i64AddrAdj, u64Src); \
     9052                    IEM_MC_LOCAL_ASSIGN(int64_t,        i64AddrAdj, /*=*/ u64Src); \
    90689053                    IEM_MC_AND_ARG_U64(u64Src, 0x3f); \
    90699054                    IEM_MC_SAR_LOCAL_S64(i64AddrAdj, 6); \
    90709055                    IEM_MC_SHL_LOCAL_S64(i64AddrAdj, 3); \
    90719056                    IEM_MC_ADD_LOCAL_S64_TO_EFF_ADDR(GCPtrEffDst, i64AddrAdj); \
     9057                    \
     9058                    IEM_MC_LOCAL(uint8_t,               bUnmapInfo); \
     9059                    IEM_MC_ARG(uint64_t *,              pu64Dst,                0); \
     9060                    IEM_MC_MEM_MAP_U64_RW(pu64Dst, bUnmapInfo, pVCpu->iem.s.iEffSeg, GCPtrEffDst); \
     9061                    \
     9062                    IEM_MC_ARG_LOCAL_EFLAGS(            pEFlags, EFlags,        2); \
    90729063                    IEM_MC_FETCH_EFLAGS(EFlags); \
     9064                    IEM_MC_CALL_VOID_AIMPL_3(a_fnNormalU64, pu64Dst, u64Src, pEFlags); \
    90739065                    \
    9074                     IEM_MC_MEM_MAP_U64_RW(pu64Dst, bUnmapInfo, pVCpu->iem.s.iEffSeg, GCPtrEffDst); \
    9075                     IEM_MC_CALL_VOID_AIMPL_3(a_fnNormalU64, pu64Dst, u64Src, pEFlags); \
    90769066                    IEM_MC_MEM_COMMIT_AND_UNMAP_RW(pu64Dst, bUnmapInfo); \
    9077                     \
    90789067                    IEM_MC_COMMIT_EFLAGS(EFlags); \
    90799068                    IEM_MC_ADVANCE_RIP_AND_FINISH(); \
     
    90939082                case IEMMODE_16BIT: \
    90949083                    IEM_MC_BEGIN(3, 4, IEM_MC_F_MIN_386, 0); \
    9095                     IEM_MC_ARG(uint16_t *,              pu16Dst,                0); \
    9096                     IEM_MC_ARG(uint16_t,                u16Src,                 1); \
    9097                     IEM_MC_ARG_LOCAL_EFLAGS(            pEFlags, EFlags,        2); \
    90989084                    IEM_MC_LOCAL(RTGCPTR,               GCPtrEffDst); \
    9099                     IEM_MC_LOCAL(int16_t,               i16AddrAdj); \
    9100                     IEM_MC_LOCAL(uint8_t, bUnmapInfo); \
    9101                     \
    91029085                    IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffDst, bRm, 0); \
    91039086                    IEMOP_HLP_DONE_DECODING(); \
     9087                    \
     9088                    IEM_MC_ARG(uint16_t,                u16Src,                 1); \
    91049089                    IEM_MC_FETCH_GREG_U16(u16Src, IEM_GET_MODRM_REG(pVCpu, bRm)); \
    9105                     IEM_MC_ASSIGN(i16AddrAdj, u16Src); \
     9090                    IEM_MC_LOCAL_ASSIGN(int16_t,        i16AddrAdj, /*=*/ u16Src); \
    91069091                    IEM_MC_AND_ARG_U16(u16Src, 0x0f); \
    91079092                    IEM_MC_SAR_LOCAL_S16(i16AddrAdj, 4); \
    91089093                    IEM_MC_SHL_LOCAL_S16(i16AddrAdj, 1); \
    91099094                    IEM_MC_ADD_LOCAL_S16_TO_EFF_ADDR(GCPtrEffDst, i16AddrAdj); \
     9095                    \
     9096                    IEM_MC_LOCAL(uint8_t,               bUnmapInfo); \
     9097                    IEM_MC_ARG(uint16_t *,              pu16Dst,                0); \
     9098                    IEM_MC_MEM_MAP_U16_RW(pu16Dst, bUnmapInfo, pVCpu->iem.s.iEffSeg, GCPtrEffDst); \
     9099                    \
     9100                    IEM_MC_ARG_LOCAL_EFLAGS(            pEFlags, EFlags,        2); \
    91109101                    IEM_MC_FETCH_EFLAGS(EFlags); \
     9102                    IEM_MC_CALL_VOID_AIMPL_3(a_fnLockedU16, pu16Dst, u16Src, pEFlags); \
    91119103                    \
    9112                     IEM_MC_MEM_MAP_U16_RW(pu16Dst, bUnmapInfo, pVCpu->iem.s.iEffSeg, GCPtrEffDst); \
    9113                     IEM_MC_CALL_VOID_AIMPL_3(a_fnLockedU16, pu16Dst, u16Src, pEFlags); \
    91149104                    IEM_MC_MEM_COMMIT_AND_UNMAP_RW(pu16Dst, bUnmapInfo); \
    9115                     \
    91169105                    IEM_MC_COMMIT_EFLAGS(EFlags); \
    91179106                    IEM_MC_ADVANCE_RIP_AND_FINISH(); \
     
    91219110                case IEMMODE_32BIT: \
    91229111                    IEM_MC_BEGIN(3, 4, IEM_MC_F_MIN_386, 0); \
    9123                     IEM_MC_ARG(uint32_t *,              pu32Dst,                0); \
    9124                     IEM_MC_ARG(uint32_t,                u32Src,                 1); \
    9125                     IEM_MC_ARG_LOCAL_EFLAGS(            pEFlags, EFlags,        2); \
    91269112                    IEM_MC_LOCAL(RTGCPTR,               GCPtrEffDst); \
    9127                     IEM_MC_LOCAL(int32_t,               i32AddrAdj); \
    9128                     IEM_MC_LOCAL(uint8_t, bUnmapInfo); \
    9129                     \
    91309113                    IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffDst, bRm, 0); \
    91319114                    IEMOP_HLP_DONE_DECODING(); \
     9115                    \
     9116                    IEM_MC_ARG(uint32_t,                u32Src,                 1); \
    91329117                    IEM_MC_FETCH_GREG_U32(u32Src, IEM_GET_MODRM_REG(pVCpu, bRm)); \
    9133                     IEM_MC_ASSIGN(i32AddrAdj, u32Src); \
     9118                    IEM_MC_LOCAL_ASSIGN(int32_t,        i32AddrAdj, /*=*/ u32Src); \
    91349119                    IEM_MC_AND_ARG_U32(u32Src, 0x1f); \
    91359120                    IEM_MC_SAR_LOCAL_S32(i32AddrAdj, 5); \
    91369121                    IEM_MC_SHL_LOCAL_S32(i32AddrAdj, 2); \
    91379122                    IEM_MC_ADD_LOCAL_S32_TO_EFF_ADDR(GCPtrEffDst, i32AddrAdj); \
     9123                    \
     9124                    IEM_MC_LOCAL(uint8_t,               bUnmapInfo); \
     9125                    IEM_MC_ARG(uint32_t *,              pu32Dst,                0); \
     9126                    IEM_MC_MEM_MAP_U32_RW(pu32Dst, bUnmapInfo, pVCpu->iem.s.iEffSeg, GCPtrEffDst); \
     9127                    \
     9128                    IEM_MC_ARG_LOCAL_EFLAGS(            pEFlags, EFlags,        2); \
    91389129                    IEM_MC_FETCH_EFLAGS(EFlags); \
     9130                    IEM_MC_CALL_VOID_AIMPL_3(a_fnLockedU32, pu32Dst, u32Src, pEFlags); \
    91399131                    \
    9140                     IEM_MC_MEM_MAP_U32_RW(pu32Dst, bUnmapInfo, pVCpu->iem.s.iEffSeg, GCPtrEffDst); \
    9141                     IEM_MC_CALL_VOID_AIMPL_3(a_fnLockedU32, pu32Dst, u32Src, pEFlags); \
    91429132                    IEM_MC_MEM_COMMIT_AND_UNMAP_RW(pu32Dst, bUnmapInfo); \
    9143                     \
    91449133                    IEM_MC_COMMIT_EFLAGS(EFlags); \
    91459134                    IEM_MC_ADVANCE_RIP_AND_FINISH(); \
     
    91499138                case IEMMODE_64BIT: \
    91509139                    IEM_MC_BEGIN(3, 4, IEM_MC_F_64BIT, 0); \
    9151                     IEM_MC_ARG(uint64_t *,              pu64Dst,                0); \
    9152                     IEM_MC_ARG(uint64_t,                u64Src,                 1); \
    9153                     IEM_MC_ARG_LOCAL_EFLAGS(            pEFlags, EFlags,        2); \
    91549140                    IEM_MC_LOCAL(RTGCPTR,               GCPtrEffDst); \
    9155                     IEM_MC_LOCAL(int64_t,               i64AddrAdj); \
    9156                     IEM_MC_LOCAL(uint8_t, bUnmapInfo); \
    9157                     \
    91589141                    IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffDst, bRm, 0); \
    91599142                    IEMOP_HLP_DONE_DECODING(); \
     9143                    \
     9144                    IEM_MC_ARG(uint64_t,                u64Src,                 1); \
    91609145                    IEM_MC_FETCH_GREG_U64(u64Src, IEM_GET_MODRM_REG(pVCpu, bRm)); \
    9161                     IEM_MC_ASSIGN(i64AddrAdj, u64Src); \
     9146                    IEM_MC_LOCAL_ASSIGN(int64_t,        i64AddrAdj, /*=*/ u64Src); \
    91629147                    IEM_MC_AND_ARG_U64(u64Src, 0x3f); \
    91639148                    IEM_MC_SAR_LOCAL_S64(i64AddrAdj, 6); \
    91649149                    IEM_MC_SHL_LOCAL_S64(i64AddrAdj, 3); \
    91659150                    IEM_MC_ADD_LOCAL_S64_TO_EFF_ADDR(GCPtrEffDst, i64AddrAdj); \
     9151                    \
     9152                    IEM_MC_LOCAL(uint8_t,               bUnmapInfo); \
     9153                    IEM_MC_ARG(uint64_t *,              pu64Dst,                0); \
     9154                    IEM_MC_MEM_MAP_U64_RW(pu64Dst, bUnmapInfo, pVCpu->iem.s.iEffSeg, GCPtrEffDst); \
     9155                    \
     9156                    IEM_MC_ARG_LOCAL_EFLAGS(            pEFlags, EFlags,        2); \
    91669157                    IEM_MC_FETCH_EFLAGS(EFlags); \
     9158                    IEM_MC_CALL_VOID_AIMPL_3(a_fnLockedU64, pu64Dst, u64Src, pEFlags); \
    91679159                    \
    9168                     IEM_MC_MEM_MAP_U64_RW(pu64Dst, bUnmapInfo, pVCpu->iem.s.iEffSeg, GCPtrEffDst); \
    9169                     IEM_MC_CALL_VOID_AIMPL_3(a_fnLockedU64, pu64Dst, u64Src, pEFlags); \
    91709160                    IEM_MC_MEM_COMMIT_AND_UNMAP_RW(pu64Dst, bUnmapInfo); \
    9171                     \
    91729161                    IEM_MC_COMMIT_EFLAGS(EFlags); \
    91739162                    IEM_MC_ADVANCE_RIP_AND_FINISH(); \
     
    92559244                case IEMMODE_16BIT: \
    92569245                    IEM_MC_BEGIN(3, 4, IEM_MC_F_MIN_386, 0); \
    9257                     IEM_MC_ARG(uint16_t const *,        pu16Dst,                0); \
    9258                     IEM_MC_ARG(uint16_t,                u16Src,                 1); \
    9259                     IEM_MC_ARG_LOCAL_EFLAGS(            pEFlags, EFlags,        2); \
    92609246                    IEM_MC_LOCAL(RTGCPTR,               GCPtrEffDst); \
    9261                     IEM_MC_LOCAL(int16_t,               i16AddrAdj); \
    9262                     IEM_MC_LOCAL(uint8_t,               bUnmapInfo); \
    9263                     \
    92649247                    IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffDst, bRm, 0); \
    92659248                    IEMOP_HLP_DONE_DECODING(); \
     9249                    \
     9250                    IEM_MC_ARG(uint16_t,                u16Src,                 1); \
    92669251                    IEM_MC_FETCH_GREG_U16(u16Src, IEM_GET_MODRM_REG(pVCpu, bRm)); \
    9267                     IEM_MC_ASSIGN(i16AddrAdj, u16Src); \
     9252                    IEM_MC_LOCAL_ASSIGN(int16_t,        i16AddrAdj, /*=*/ u16Src); \
    92689253                    IEM_MC_AND_ARG_U16(u16Src, 0x0f); \
    92699254                    IEM_MC_SAR_LOCAL_S16(i16AddrAdj, 4); \
    92709255                    IEM_MC_SHL_LOCAL_S16(i16AddrAdj, 1); \
    92719256                    IEM_MC_ADD_LOCAL_S16_TO_EFF_ADDR(GCPtrEffDst, i16AddrAdj); \
     9257                    \
     9258                    IEM_MC_LOCAL(uint8_t,               bUnmapInfo); \
     9259                    IEM_MC_ARG(uint16_t const *,        pu16Dst,                0); \
     9260                    IEM_MC_MEM_MAP_U16_RO(pu16Dst, bUnmapInfo, pVCpu->iem.s.iEffSeg, GCPtrEffDst); \
     9261                    \
     9262                    IEM_MC_ARG_LOCAL_EFLAGS(            pEFlags, EFlags,        2); \
    92729263                    IEM_MC_FETCH_EFLAGS(EFlags); \
     9264                    IEM_MC_CALL_VOID_AIMPL_3(a_fnNormalU16, pu16Dst, u16Src, pEFlags); \
    92739265                    \
    9274                     IEM_MC_MEM_MAP_U16_RO(pu16Dst, bUnmapInfo, pVCpu->iem.s.iEffSeg, GCPtrEffDst); \
    9275                     IEM_MC_CALL_VOID_AIMPL_3(a_fnNormalU16, pu16Dst, u16Src, pEFlags); \
    92769266                    IEM_MC_MEM_COMMIT_AND_UNMAP_RO(pu16Dst, bUnmapInfo); \
    9277                     \
    92789267                    IEM_MC_COMMIT_EFLAGS(EFlags); \
    92799268                    IEM_MC_ADVANCE_RIP_AND_FINISH(); \
     
    92839272                case IEMMODE_32BIT: \
    92849273                    IEM_MC_BEGIN(3, 4, IEM_MC_F_MIN_386, 0); \
    9285                     IEM_MC_ARG(uint32_t const *,        pu32Dst,                0); \
    9286                     IEM_MC_ARG(uint32_t,                u32Src,                 1); \
    9287                     IEM_MC_ARG_LOCAL_EFLAGS(            pEFlags, EFlags,        2); \
    92889274                    IEM_MC_LOCAL(RTGCPTR,               GCPtrEffDst); \
    9289                     IEM_MC_LOCAL(int32_t,               i32AddrAdj); \
    9290                     IEM_MC_LOCAL(uint8_t,               bUnmapInfo); \
    9291                     \
    92929275                    IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffDst, bRm, 0); \
    92939276                    IEMOP_HLP_DONE_DECODING(); \
     9277                    \
     9278                    IEM_MC_ARG(uint32_t,                u32Src,                 1); \
    92949279                    IEM_MC_FETCH_GREG_U32(u32Src, IEM_GET_MODRM_REG(pVCpu, bRm)); \
    9295                     IEM_MC_ASSIGN(i32AddrAdj, u32Src); \
     9280                    IEM_MC_LOCAL_ASSIGN(int32_t,        i32AddrAdj, /*=*/ u32Src); \
    92969281                    IEM_MC_AND_ARG_U32(u32Src, 0x1f); \
    92979282                    IEM_MC_SAR_LOCAL_S32(i32AddrAdj, 5); \
    92989283                    IEM_MC_SHL_LOCAL_S32(i32AddrAdj, 2); \
    92999284                    IEM_MC_ADD_LOCAL_S32_TO_EFF_ADDR(GCPtrEffDst, i32AddrAdj); \
     9285                    \
     9286                    IEM_MC_ARG(uint32_t const *,        pu32Dst,                0); \
     9287                    IEM_MC_LOCAL(uint8_t,               bUnmapInfo); \
     9288                    IEM_MC_MEM_MAP_U32_RO(pu32Dst, bUnmapInfo, pVCpu->iem.s.iEffSeg, GCPtrEffDst); \
     9289                    \
     9290                    IEM_MC_ARG_LOCAL_EFLAGS(            pEFlags, EFlags,        2); \
    93009291                    IEM_MC_FETCH_EFLAGS(EFlags); \
     9292                    IEM_MC_CALL_VOID_AIMPL_3(a_fnNormalU32, pu32Dst, u32Src, pEFlags); \
    93019293                    \
    9302                     IEM_MC_MEM_MAP_U32_RO(pu32Dst, bUnmapInfo, pVCpu->iem.s.iEffSeg, GCPtrEffDst); \
    9303                     IEM_MC_CALL_VOID_AIMPL_3(a_fnNormalU32, pu32Dst, u32Src, pEFlags); \
    93049294                    IEM_MC_MEM_COMMIT_AND_UNMAP_RO(pu32Dst, bUnmapInfo); \
    9305                     \
    93069295                    IEM_MC_COMMIT_EFLAGS(EFlags); \
    93079296                    IEM_MC_ADVANCE_RIP_AND_FINISH(); \
     
    93119300                case IEMMODE_64BIT: \
    93129301                    IEM_MC_BEGIN(3, 4, IEM_MC_F_64BIT, 0); \
    9313                     IEM_MC_ARG(uint64_t const *,        pu64Dst,                0); \
     9302                    IEM_MC_LOCAL(RTGCPTR,               GCPtrEffDst); \
     9303                    IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffDst, bRm, 0);  \
     9304                    IEMOP_HLP_DONE_DECODING(); \
     9305                    \
    93149306                    IEM_MC_ARG(uint64_t,                u64Src,                 1); \
    9315                     IEM_MC_ARG_LOCAL_EFLAGS(            pEFlags, EFlags,        2); \
    9316                     IEM_MC_LOCAL(RTGCPTR,               GCPtrEffDst); \
    9317                     IEM_MC_LOCAL(int64_t,               i64AddrAdj); \
    9318                     IEM_MC_LOCAL(uint8_t,               bUnmapInfo); \
    9319                     \
    9320                     IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffDst, bRm, 0); \
    9321                     IEMOP_HLP_DONE_DECODING(); \
    93229307                    IEM_MC_FETCH_GREG_U64(u64Src, IEM_GET_MODRM_REG(pVCpu, bRm)); \
    9323                     IEM_MC_ASSIGN(i64AddrAdj, u64Src); \
     9308                    IEM_MC_LOCAL_ASSIGN(int64_t,        i64AddrAdj, /*=*/ u64Src); \
    93249309                    IEM_MC_AND_ARG_U64(u64Src, 0x3f); \
    93259310                    IEM_MC_SAR_LOCAL_S64(i64AddrAdj, 6); \
    93269311                    IEM_MC_SHL_LOCAL_S64(i64AddrAdj, 3); \
    93279312                    IEM_MC_ADD_LOCAL_S64_TO_EFF_ADDR(GCPtrEffDst, i64AddrAdj); \
     9313                    \
     9314                    IEM_MC_LOCAL(uint8_t,               bUnmapInfo); \
     9315                    IEM_MC_ARG(uint64_t const *,        pu64Dst,                0); \
     9316                    IEM_MC_MEM_MAP_U64_RO(pu64Dst, bUnmapInfo, pVCpu->iem.s.iEffSeg, GCPtrEffDst); \
     9317                    \
     9318                    IEM_MC_ARG_LOCAL_EFLAGS(            pEFlags, EFlags,        2); \
    93289319                    IEM_MC_FETCH_EFLAGS(EFlags); \
     9320                    IEM_MC_CALL_VOID_AIMPL_3(a_fnNormalU64, pu64Dst, u64Src, pEFlags); \
    93299321                    \
    9330                     IEM_MC_MEM_MAP_U64_RO(pu64Dst, bUnmapInfo, pVCpu->iem.s.iEffSeg, GCPtrEffDst); \
    9331                     IEM_MC_CALL_VOID_AIMPL_3(a_fnNormalU64, pu64Dst, u64Src, pEFlags); \
    93329322                    IEM_MC_MEM_COMMIT_AND_UNMAP_RO(pu64Dst, bUnmapInfo); \
    9333                     \
    93349323                    IEM_MC_COMMIT_EFLAGS(EFlags); \
    93359324                    IEM_MC_ADVANCE_RIP_AND_FINISH(); \
     
    94339422            case IEMMODE_16BIT:
    94349423                IEM_MC_BEGIN(4, 3, IEM_MC_F_MIN_386, 0);
     9424                IEM_MC_LOCAL(RTGCPTR,               GCPtrEffDst);
     9425                IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffDst, bRm, 1);
     9426
     9427                uint8_t cShift; IEM_OPCODE_GET_NEXT_U8(&cShift);
     9428                IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
     9429
     9430                IEM_MC_LOCAL(uint8_t,               bUnmapInfo);
    94359431                IEM_MC_ARG(uint16_t *,              pu16Dst,                0);
     9432                IEM_MC_MEM_MAP_U16_RW(pu16Dst, bUnmapInfo, pVCpu->iem.s.iEffSeg, GCPtrEffDst);
     9433
    94369434                IEM_MC_ARG(uint16_t,                u16Src,                 1);
    9437                 IEM_MC_ARG(uint8_t,                 cShiftArg,              2);
     9435                IEM_MC_FETCH_GREG_U16(u16Src, IEM_GET_MODRM_REG(pVCpu, bRm));
     9436                IEM_MC_ARG_CONST(uint8_t,           cShiftArg,/*=*/ cShift, 2);
    94389437                IEM_MC_ARG_LOCAL_EFLAGS(            pEFlags, EFlags,        3);
    9439                 IEM_MC_LOCAL(RTGCPTR,               GCPtrEffDst);
    9440                 IEM_MC_LOCAL(uint8_t,               bUnmapInfo);
    9441 
    9442                 IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffDst, bRm, 1);
    9443                 uint8_t cShift; IEM_OPCODE_GET_NEXT_U8(&cShift);
    9444                 IEM_MC_ASSIGN(cShiftArg, cShift);
    9445                 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    9446                 IEM_MC_FETCH_GREG_U16(u16Src, IEM_GET_MODRM_REG(pVCpu, bRm));
    94479438                IEM_MC_FETCH_EFLAGS(EFlags);
    9448                 IEM_MC_MEM_MAP_U16_RW(pu16Dst, bUnmapInfo, pVCpu->iem.s.iEffSeg, GCPtrEffDst);
    94499439                IEM_MC_CALL_VOID_AIMPL_4(pImpl->pfnNormalU16, pu16Dst, u16Src, cShiftArg, pEFlags);
    94509440
     
    94579447            case IEMMODE_32BIT:
    94589448                IEM_MC_BEGIN(4, 3, IEM_MC_F_MIN_386, 0);
     9449                IEM_MC_LOCAL(RTGCPTR,               GCPtrEffDst);
     9450                IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffDst, bRm, 1);
     9451
     9452                uint8_t cShift; IEM_OPCODE_GET_NEXT_U8(&cShift);
     9453                IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
     9454
     9455                IEM_MC_LOCAL(uint8_t,               bUnmapInfo);
    94599456                IEM_MC_ARG(uint32_t *,              pu32Dst,                0);
     9457                IEM_MC_MEM_MAP_U32_RW(pu32Dst, bUnmapInfo, pVCpu->iem.s.iEffSeg, GCPtrEffDst);
     9458
    94609459                IEM_MC_ARG(uint32_t,                u32Src,                 1);
    9461                 IEM_MC_ARG(uint8_t,                 cShiftArg,              2);
     9460                IEM_MC_FETCH_GREG_U32(u32Src, IEM_GET_MODRM_REG(pVCpu, bRm));
     9461                IEM_MC_ARG_CONST(uint8_t,           cShiftArg,/*=*/ cShift, 2);
    94629462                IEM_MC_ARG_LOCAL_EFLAGS(            pEFlags, EFlags,        3);
    9463                 IEM_MC_LOCAL(RTGCPTR,               GCPtrEffDst);
    9464                 IEM_MC_LOCAL(uint8_t,               bUnmapInfo);
    9465 
    9466                 IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffDst, bRm, 1);
    9467                 uint8_t cShift; IEM_OPCODE_GET_NEXT_U8(&cShift);
    9468                 IEM_MC_ASSIGN(cShiftArg, cShift);
    9469                 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    9470                 IEM_MC_FETCH_GREG_U32(u32Src, IEM_GET_MODRM_REG(pVCpu, bRm));
    94719463                IEM_MC_FETCH_EFLAGS(EFlags);
    9472                 IEM_MC_MEM_MAP_U32_RW(pu32Dst, bUnmapInfo, pVCpu->iem.s.iEffSeg, GCPtrEffDst);
    94739464                IEM_MC_CALL_VOID_AIMPL_4(pImpl->pfnNormalU32, pu32Dst, u32Src, cShiftArg, pEFlags);
    94749465
     
    94819472            case IEMMODE_64BIT:
    94829473                IEM_MC_BEGIN(4, 3, IEM_MC_F_64BIT, 0);
     9474                IEM_MC_LOCAL(RTGCPTR,               GCPtrEffDst);
     9475                IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffDst, bRm, 1);
     9476
     9477                uint8_t cShift; IEM_OPCODE_GET_NEXT_U8(&cShift);
     9478                IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
     9479
     9480                IEM_MC_LOCAL(uint8_t,               bUnmapInfo);
    94839481                IEM_MC_ARG(uint64_t *,              pu64Dst,                0);
     9482                IEM_MC_MEM_MAP_U64_RW(pu64Dst, bUnmapInfo, pVCpu->iem.s.iEffSeg, GCPtrEffDst);
     9483
    94849484                IEM_MC_ARG(uint64_t,                u64Src,                 1);
    9485                 IEM_MC_ARG(uint8_t,                 cShiftArg,              2);
     9485                IEM_MC_FETCH_GREG_U64(u64Src, IEM_GET_MODRM_REG(pVCpu, bRm));
     9486                IEM_MC_ARG_CONST(uint8_t,           cShiftArg,/*=*/ cShift, 2);
    94869487                IEM_MC_ARG_LOCAL_EFLAGS(            pEFlags, EFlags,        3);
    9487                 IEM_MC_LOCAL(RTGCPTR,               GCPtrEffDst);
    9488                 IEM_MC_LOCAL(uint8_t,               bUnmapInfo);
    9489 
    9490                 IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffDst, bRm, 1);
    9491                 uint8_t cShift; IEM_OPCODE_GET_NEXT_U8(&cShift);
    9492                 IEM_MC_ASSIGN(cShiftArg, cShift);
    9493                 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    9494                 IEM_MC_FETCH_GREG_U64(u64Src, IEM_GET_MODRM_REG(pVCpu, bRm));
    94959488                IEM_MC_FETCH_EFLAGS(EFlags);
    9496                 IEM_MC_MEM_MAP_U64_RW(pu64Dst, bUnmapInfo, pVCpu->iem.s.iEffSeg, GCPtrEffDst);
     9489
    94979490                IEM_MC_CALL_VOID_AIMPL_4(pImpl->pfnNormalU64, pu64Dst, u64Src, cShiftArg, pEFlags);
    94989491
     
    97469739
    97479740    IEM_MC_BEGIN(3, 1, IEM_MC_F_MIN_PENTIUM_II, 0);
    9748     IEM_MC_ARG(uint8_t,         iEffSeg,                                 0);
    9749     IEM_MC_ARG(RTGCPTR,         GCPtrEff,                                1);
    9750     IEM_MC_ARG_CONST(IEMMODE,   enmEffOpSize,/*=*/pVCpu->iem.s.enmEffOpSize, 2);
     9741    IEM_MC_ARG(RTGCPTR,         GCPtrEff,                                       1);
    97519742    IEM_MC_CALC_RM_EFF_ADDR(GCPtrEff, bRm, 0);
    97529743    IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    97539744    IEM_MC_ACTUALIZE_FPU_STATE_FOR_READ();
    9754     IEM_MC_ASSIGN(iEffSeg, pVCpu->iem.s.iEffSeg);
     9745    IEM_MC_ARG_CONST(uint8_t,   iEffSeg,      /*=*/ pVCpu->iem.s.iEffSeg,       0);
     9746    IEM_MC_ARG_CONST(IEMMODE,   enmEffOpSize, /*=*/pVCpu->iem.s.enmEffOpSize,   2);
    97559747    IEM_MC_CALL_CIMPL_3(IEM_CIMPL_F_FPU, iemCImpl_fxsave, iEffSeg, GCPtrEff, enmEffOpSize);
    97569748    IEM_MC_END();
     
    97669758
    97679759    IEM_MC_BEGIN(3, 1, IEM_MC_F_MIN_PENTIUM_II, 0);
    9768     IEM_MC_ARG(uint8_t,         iEffSeg,                                 0);
    9769     IEM_MC_ARG(RTGCPTR,         GCPtrEff,                                1);
    9770     IEM_MC_ARG_CONST(IEMMODE,   enmEffOpSize,/*=*/pVCpu->iem.s.enmEffOpSize, 2);
     9760    IEM_MC_ARG(RTGCPTR,         GCPtrEff,                                       1);
    97719761    IEM_MC_CALC_RM_EFF_ADDR(GCPtrEff, bRm, 0);
    97729762    IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    97739763    IEM_MC_ACTUALIZE_FPU_STATE_FOR_CHANGE();
    9774     IEM_MC_ASSIGN(iEffSeg, pVCpu->iem.s.iEffSeg);
     9764    IEM_MC_ARG_CONST(uint8_t,   iEffSeg,      /*=*/ pVCpu->iem.s.iEffSeg,       0);
     9765    IEM_MC_ARG_CONST(IEMMODE,   enmEffOpSize, /*=*/pVCpu->iem.s.enmEffOpSize,   2);
    97759766    IEM_MC_CALL_CIMPL_3(IEM_CIMPL_F_FPU, iemCImpl_fxrstor, iEffSeg, GCPtrEff, enmEffOpSize);
    97769767    IEM_MC_END();
     
    98049795
    98059796    IEM_MC_BEGIN(2, 0, IEM_MC_F_MIN_PENTIUM_II, 0);
    9806     IEM_MC_ARG(uint8_t,         iEffSeg,                                 0);
    98079797    IEM_MC_ARG(RTGCPTR,         GCPtrEff,                                1);
    98089798    IEM_MC_CALC_RM_EFF_ADDR(GCPtrEff, bRm, 0);
    98099799    IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    98109800    IEM_MC_ACTUALIZE_SSE_STATE_FOR_READ();
    9811     IEM_MC_ASSIGN(iEffSeg, pVCpu->iem.s.iEffSeg);
     9801    IEM_MC_ARG_CONST(uint8_t,   iEffSeg, /*=*/ pVCpu->iem.s.iEffSeg,     0);
    98129802    IEM_MC_CALL_CIMPL_2(IEM_CIMPL_F_FPU, iemCImpl_ldmxcsr, iEffSeg, GCPtrEff);
    98139803    IEM_MC_END();
     
    98409830
    98419831    IEM_MC_BEGIN(2, 0, IEM_MC_F_MIN_PENTIUM_II, 0);
    9842     IEM_MC_ARG(uint8_t,         iEffSeg,                                 0);
    98439832    IEM_MC_ARG(RTGCPTR,         GCPtrEff,                                1);
    98449833    IEM_MC_CALC_RM_EFF_ADDR(GCPtrEff, bRm, 0);
    98459834    IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    98469835    IEM_MC_ACTUALIZE_SSE_STATE_FOR_READ();
    9847     IEM_MC_ASSIGN(iEffSeg, pVCpu->iem.s.iEffSeg);
     9836    IEM_MC_ARG_CONST(uint8_t,   iEffSeg, /*=*/ pVCpu->iem.s.iEffSeg,     0);
    98489837    IEM_MC_CALL_CIMPL_2(IEM_CIMPL_F_FPU, iemCImpl_stmxcsr, iEffSeg, GCPtrEff);
    98499838    IEM_MC_END();
     
    98669855
    98679856    IEM_MC_BEGIN(3, 0, IEM_MC_F_MIN_CORE, 0);
    9868     IEM_MC_ARG(uint8_t,         iEffSeg,                                 0);
    9869     IEM_MC_ARG(RTGCPTR,         GCPtrEff,                                1);
    9870     IEM_MC_ARG_CONST(IEMMODE,   enmEffOpSize,/*=*/pVCpu->iem.s.enmEffOpSize, 2);
     9857    IEM_MC_ARG(RTGCPTR,         GCPtrEff,                                       1);
    98719858    IEM_MC_CALC_RM_EFF_ADDR(GCPtrEff, bRm, 0);
    98729859    IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    98739860    IEM_MC_ACTUALIZE_FPU_STATE_FOR_READ();
    9874     IEM_MC_ASSIGN(iEffSeg, pVCpu->iem.s.iEffSeg);
     9861    IEM_MC_ARG_CONST(uint8_t,   iEffSeg,      /*=*/ pVCpu->iem.s.iEffSeg,       0);
     9862    IEM_MC_ARG_CONST(IEMMODE,   enmEffOpSize, /*=*/ pVCpu->iem.s.enmEffOpSize,  2);
    98759863    IEM_MC_CALL_CIMPL_3(IEM_CIMPL_F_FPU, iemCImpl_xsave, iEffSeg, GCPtrEff, enmEffOpSize);
    98769864    IEM_MC_END();
     
    98939881
    98949882    IEM_MC_BEGIN(3, 0, IEM_MC_F_MIN_CORE, 0);
    9895     IEM_MC_ARG(uint8_t,         iEffSeg,                                 0);
    9896     IEM_MC_ARG(RTGCPTR,         GCPtrEff,                                1);
    9897     IEM_MC_ARG_CONST(IEMMODE,   enmEffOpSize,/*=*/pVCpu->iem.s.enmEffOpSize, 2);
     9883    IEM_MC_ARG(RTGCPTR,         GCPtrEff,                                       1);
    98989884    IEM_MC_CALC_RM_EFF_ADDR(GCPtrEff, bRm, 0);
    98999885    IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    99009886    IEM_MC_ACTUALIZE_FPU_STATE_FOR_READ();
    9901     IEM_MC_ASSIGN(iEffSeg, pVCpu->iem.s.iEffSeg);
     9887    IEM_MC_ARG_CONST(uint8_t,   iEffSeg,      /*=*/ pVCpu->iem.s.iEffSeg,       0);
     9888    IEM_MC_ARG_CONST(IEMMODE,   enmEffOpSize, /*=*/ pVCpu->iem.s.enmEffOpSize,  2);
    99029889    IEM_MC_CALL_CIMPL_3(IEM_CIMPL_F_FPU, iemCImpl_xrstor, iEffSeg, GCPtrEff, enmEffOpSize);
    99039890    IEM_MC_END();
     
    99229909
    99239910    IEM_MC_BEGIN(2, 0, IEM_MC_F_NOT_286_OR_OLDER, 0);
    9924     IEM_MC_ARG(uint8_t,         iEffSeg,                                 0);
    99259911    IEM_MC_ARG(RTGCPTR,         GCPtrEff,                                1);
    99269912    IEM_MC_CALC_RM_EFF_ADDR(GCPtrEff, bRm, 0);
    99279913    IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    9928     IEM_MC_ASSIGN(iEffSeg, pVCpu->iem.s.iEffSeg);
     9914    IEM_MC_ARG_CONST(uint8_t,   iEffSeg, /*=*/ pVCpu->iem.s.iEffSeg,     0);
    99299915    IEM_MC_CALL_CIMPL_2(IEM_CIMPL_F_VMEXIT, iemCImpl_clflush_clflushopt, iEffSeg, GCPtrEff);
    99309916    IEM_MC_END();
     
    99469932
    99479933    IEM_MC_BEGIN(2, 0, IEM_MC_F_NOT_286_OR_OLDER, 0);
    9948     IEM_MC_ARG(uint8_t,         iEffSeg,                                 0);
    99499934    IEM_MC_ARG(RTGCPTR,         GCPtrEff,                                1);
    99509935    IEM_MC_CALC_RM_EFF_ADDR(GCPtrEff, bRm, 0);
    99519936    IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    9952     IEM_MC_ASSIGN(iEffSeg, pVCpu->iem.s.iEffSeg);
     9937    IEM_MC_ARG_CONST(uint8_t,   iEffSeg, /*=*/ pVCpu->iem.s.iEffSeg,     0);
    99539938    IEM_MC_CALL_CIMPL_2(IEM_CIMPL_F_VMEXIT, iemCImpl_clflush_clflushopt, iEffSeg, GCPtrEff);
    99549939    IEM_MC_END();
     
    1079010775                case IEMMODE_16BIT: \
    1079110776                    IEM_MC_BEGIN(3, 3, IEM_MC_F_MIN_386, 0); \
    10792                     IEM_MC_ARG(uint16_t *,              pu16Dst,                0); \
    10793                     IEM_MC_ARG(uint16_t,                u16Src,                 1); \
    10794                     IEM_MC_ARG_LOCAL_EFLAGS(            pEFlags, EFlags,        2); \
    1079510777                    IEM_MC_LOCAL(RTGCPTR,               GCPtrEffDst); \
     10778                    IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffDst, bRm, 1); \
     10779                    \
     10780                    uint8_t bImm; IEM_OPCODE_GET_NEXT_U8(&bImm); \
     10781                    IEMOP_HLP_DONE_DECODING(); \
     10782                    \
    1079610783                    IEM_MC_LOCAL(uint8_t,               bUnmapInfo); \
     10784                    IEM_MC_ARG(uint16_t *,              pu16Dst,                    0); \
     10785                    IEM_MC_MEM_MAP_U16_RW(pu16Dst, bUnmapInfo, pVCpu->iem.s.iEffSeg, GCPtrEffDst); \
    1079710786                    \
    10798                     IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffDst, bRm, 1); \
    10799                     uint8_t bImm; IEM_OPCODE_GET_NEXT_U8(&bImm); \
    10800                     IEM_MC_ASSIGN(u16Src, bImm & 0x0f); \
    10801                     IEMOP_HLP_DONE_DECODING(); \
     10787                    IEM_MC_ARG_CONST(uint16_t,          u16Src, /*=*/ bImm & 0x0f,  1); \
     10788                    IEM_MC_ARG_LOCAL_EFLAGS(            pEFlags, EFlags,            2); \
    1080210789                    IEM_MC_FETCH_EFLAGS(EFlags); \
    10803                     IEM_MC_MEM_MAP_U16_RW(pu16Dst, bUnmapInfo, pVCpu->iem.s.iEffSeg, GCPtrEffDst); \
    1080410790                    IEM_MC_CALL_VOID_AIMPL_3(a_fnNormalU16, pu16Dst, u16Src, pEFlags); \
    1080510791                    \
     
    1081210798                case IEMMODE_32BIT: \
    1081310799                    IEM_MC_BEGIN(3, 3, IEM_MC_F_MIN_386, 0); \
     10800                    IEM_MC_LOCAL(RTGCPTR,               GCPtrEffDst); \
     10801                    IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffDst, bRm, 1); \
     10802                    \
     10803                    uint8_t bImm; IEM_OPCODE_GET_NEXT_U8(&bImm); \
     10804                    IEMOP_HLP_DONE_DECODING(); \
     10805                    \
     10806                    IEM_MC_LOCAL(uint8_t,               bUnmapInfo); \
    1081410807                    IEM_MC_ARG(uint32_t *,              pu32Dst,                0); \
    10815                     IEM_MC_ARG(uint32_t,                u32Src,                 1); \
    10816                     IEM_MC_ARG_LOCAL_EFLAGS(            pEFlags, EFlags,        2); \
    10817                     IEM_MC_LOCAL(RTGCPTR,               GCPtrEffDst); \
    10818                     IEM_MC_LOCAL(uint8_t,               bUnmapInfo); \
     10808                    IEM_MC_MEM_MAP_U32_RW(pu32Dst, bUnmapInfo, pVCpu->iem.s.iEffSeg, GCPtrEffDst); \
    1081910809                    \
    10820                     IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffDst, bRm, 1); \
    10821                     uint8_t bImm; IEM_OPCODE_GET_NEXT_U8(&bImm); \
    10822                     IEM_MC_ASSIGN(u32Src, bImm & 0x1f); \
    10823                     IEMOP_HLP_DONE_DECODING(); \
     10810                    IEM_MC_ARG_CONST(uint32_t,          u32Src, /*=*/ bImm & 0x1f,  1); \
     10811                    IEM_MC_ARG_LOCAL_EFLAGS(            pEFlags, EFlags,            2); \
    1082410812                    IEM_MC_FETCH_EFLAGS(EFlags); \
    10825                     IEM_MC_MEM_MAP_U32_RW(pu32Dst, bUnmapInfo, pVCpu->iem.s.iEffSeg, GCPtrEffDst); \
    1082610813                    IEM_MC_CALL_VOID_AIMPL_3(a_fnNormalU32, pu32Dst, u32Src, pEFlags); \
    1082710814                    \
     
    1083410821                case IEMMODE_64BIT: \
    1083510822                    IEM_MC_BEGIN(3, 3, IEM_MC_F_64BIT, 0); \
    10836                     IEM_MC_ARG(uint64_t *,              pu64Dst,                0); \
    10837                     IEM_MC_ARG(uint64_t,                u64Src,                 1); \
    10838                     IEM_MC_ARG_LOCAL_EFLAGS(            pEFlags, EFlags,        2); \
    1083910823                    IEM_MC_LOCAL(RTGCPTR,               GCPtrEffDst); \
     10824                    IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffDst, bRm, 1); \
     10825                    \
     10826                    uint8_t bImm; IEM_OPCODE_GET_NEXT_U8(&bImm); \
     10827                    IEMOP_HLP_DONE_DECODING(); \
     10828                    \
    1084010829                    IEM_MC_LOCAL(uint8_t,               bUnmapInfo); \
     10830                    IEM_MC_ARG(uint64_t *,              pu64Dst,                    0); \
     10831                    IEM_MC_MEM_MAP_U64_RW(pu64Dst, bUnmapInfo, pVCpu->iem.s.iEffSeg, GCPtrEffDst); \
    1084110832                    \
    10842                     IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffDst, bRm, 1); \
    10843                     uint8_t bImm; IEM_OPCODE_GET_NEXT_U8(&bImm); \
    10844                     IEM_MC_ASSIGN(u64Src, bImm & 0x3f); \
    10845                     IEMOP_HLP_DONE_DECODING(); \
     10833                    IEM_MC_ARG_CONST(uint64_t,          u64Src, /*=*/ bImm & 0x3f,  1); \
     10834                    IEM_MC_ARG_LOCAL_EFLAGS(            pEFlags, EFlags,            2); \
    1084610835                    IEM_MC_FETCH_EFLAGS(EFlags); \
    10847                     IEM_MC_MEM_MAP_U64_RW(pu64Dst, bUnmapInfo, pVCpu->iem.s.iEffSeg, GCPtrEffDst); \
    1084810836                    IEM_MC_CALL_VOID_AIMPL_3(a_fnNormalU64, pu64Dst, u64Src, pEFlags); \
    1084910837                    \
     
    1086610854                case IEMMODE_16BIT: \
    1086710855                    IEM_MC_BEGIN(3, 3, IEM_MC_F_MIN_386, 0); \
    10868                     IEM_MC_ARG(uint16_t *,              pu16Dst,                0); \
    10869                     IEM_MC_ARG(uint16_t,                u16Src,                 1); \
    10870                     IEM_MC_ARG_LOCAL_EFLAGS(            pEFlags, EFlags,        2); \
    1087110856                    IEM_MC_LOCAL(RTGCPTR,               GCPtrEffDst); \
     10857                    IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffDst, bRm, 1); \
     10858                    \
     10859                    uint8_t bImm; IEM_OPCODE_GET_NEXT_U8(&bImm); \
     10860                    IEMOP_HLP_DONE_DECODING(); \
     10861                    \
     10862                    IEM_MC_ARG(uint16_t *,              pu16Dst,                    0); \
    1087210863                    IEM_MC_LOCAL(uint8_t,               bUnmapInfo); \
     10864                    IEM_MC_MEM_MAP_U16_RW(pu16Dst, bUnmapInfo, pVCpu->iem.s.iEffSeg, GCPtrEffDst); \
    1087310865                    \
    10874                     IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffDst, bRm, 1); \
    10875                     uint8_t bImm; IEM_OPCODE_GET_NEXT_U8(&bImm); \
    10876                     IEM_MC_ASSIGN(u16Src, bImm & 0x0f); \
    10877                     IEMOP_HLP_DONE_DECODING(); \
     10866                    IEM_MC_ARG_CONST(uint16_t,          u16Src, /*=*/ bImm & 0x0f,  1); \
     10867                    IEM_MC_ARG_LOCAL_EFLAGS(            pEFlags, EFlags,            2); \
    1087810868                    IEM_MC_FETCH_EFLAGS(EFlags); \
    10879                     IEM_MC_MEM_MAP_U16_RW(pu16Dst, bUnmapInfo, pVCpu->iem.s.iEffSeg, GCPtrEffDst); \
    1088010869                    IEM_MC_CALL_VOID_AIMPL_3(a_fnLockedU16, pu16Dst, u16Src, pEFlags); \
     10870                    \
    1088110871                    IEM_MC_MEM_COMMIT_AND_UNMAP_RW(pu16Dst, bUnmapInfo); \
    10882                     \
    1088310872                    IEM_MC_COMMIT_EFLAGS(EFlags); \
    1088410873                    IEM_MC_ADVANCE_RIP_AND_FINISH(); \
     
    1088810877                case IEMMODE_32BIT: \
    1088910878                    IEM_MC_BEGIN(3, 3, IEM_MC_F_MIN_386, 0); \
    10890                     IEM_MC_ARG(uint32_t *,              pu32Dst,                0); \
    10891                     IEM_MC_ARG(uint32_t,                u32Src,                 1); \
    10892                     IEM_MC_ARG_LOCAL_EFLAGS(            pEFlags, EFlags,        2); \
    1089310879                    IEM_MC_LOCAL(RTGCPTR,               GCPtrEffDst); \
     10880                    IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffDst, bRm, 1); \
     10881                    \
     10882                    uint8_t bImm; IEM_OPCODE_GET_NEXT_U8(&bImm); \
     10883                    IEMOP_HLP_DONE_DECODING(); \
     10884                    \
    1089410885                    IEM_MC_LOCAL(uint8_t,               bUnmapInfo); \
     10886                    IEM_MC_ARG(uint32_t *,              pu32Dst,                    0); \
     10887                    IEM_MC_MEM_MAP_U32_RW(pu32Dst, bUnmapInfo, pVCpu->iem.s.iEffSeg, GCPtrEffDst); \
    1089510888                    \
    10896                     IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffDst, bRm, 1); \
    10897                     uint8_t bImm; IEM_OPCODE_GET_NEXT_U8(&bImm); \
    10898                     IEM_MC_ASSIGN(u32Src, bImm & 0x1f); \
    10899                     IEMOP_HLP_DONE_DECODING(); \
     10889                    IEM_MC_ARG_CONST(uint32_t,          u32Src, /*=*/ bImm & 0x1f,  1); \
     10890                    IEM_MC_ARG_LOCAL_EFLAGS(            pEFlags, EFlags,            2); \
    1090010891                    IEM_MC_FETCH_EFLAGS(EFlags); \
    10901                     IEM_MC_MEM_MAP_U32_RW(pu32Dst, bUnmapInfo, pVCpu->iem.s.iEffSeg, GCPtrEffDst); \
    1090210892                    IEM_MC_CALL_VOID_AIMPL_3(a_fnLockedU32, pu32Dst, u32Src, pEFlags); \
     10893                    \
    1090310894                    IEM_MC_MEM_COMMIT_AND_UNMAP_RW(pu32Dst, bUnmapInfo); \
    10904                     \
    1090510895                    IEM_MC_COMMIT_EFLAGS(EFlags); \
    1090610896                    IEM_MC_ADVANCE_RIP_AND_FINISH(); \
     
    1091010900                case IEMMODE_64BIT: \
    1091110901                    IEM_MC_BEGIN(3, 3, IEM_MC_F_64BIT, 0); \
    10912                     IEM_MC_ARG(uint64_t *,              pu64Dst,                0); \
    10913                     IEM_MC_ARG(uint64_t,                u64Src,                 1); \
    10914                     IEM_MC_ARG_LOCAL_EFLAGS(            pEFlags, EFlags,        2); \
    1091510902                    IEM_MC_LOCAL(RTGCPTR,               GCPtrEffDst); \
     10903                    IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffDst, bRm, 1); \
     10904                    \
     10905                    uint8_t bImm; IEM_OPCODE_GET_NEXT_U8(&bImm); \
     10906                    IEMOP_HLP_DONE_DECODING(); \
     10907                    \
    1091610908                    IEM_MC_LOCAL(uint8_t,               bUnmapInfo); \
     10909                    IEM_MC_ARG(uint64_t *,              pu64Dst,                    0); \
     10910                    IEM_MC_MEM_MAP_U64_RW(pu64Dst, bUnmapInfo, pVCpu->iem.s.iEffSeg, GCPtrEffDst); \
    1091710911                    \
    10918                     IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffDst, bRm, 1); \
    10919                     uint8_t bImm; IEM_OPCODE_GET_NEXT_U8(&bImm); \
    10920                     IEM_MC_ASSIGN(u64Src, bImm & 0x3f); \
    10921                     IEMOP_HLP_DONE_DECODING(); \
     10912                    IEM_MC_ARG_CONST(uint64_t,          u64Src, /*=*/ bImm & 0x3f,  1); \
     10913                    IEM_MC_ARG_LOCAL_EFLAGS(            pEFlags, EFlags,            2); \
    1092210914                    IEM_MC_FETCH_EFLAGS(EFlags); \
    10923                     IEM_MC_MEM_MAP_U64_RW(pu64Dst, bUnmapInfo, pVCpu->iem.s.iEffSeg, GCPtrEffDst); \
    1092410915                    IEM_MC_CALL_VOID_AIMPL_3(a_fnLockedU64, pu64Dst, u64Src, pEFlags); \
     10916                    \
    1092510917                    IEM_MC_MEM_COMMIT_AND_UNMAP_RW(pu64Dst, bUnmapInfo); \
    10926                     \
    1092710918                    IEM_MC_COMMIT_EFLAGS(EFlags); \
    1092810919                    IEM_MC_ADVANCE_RIP_AND_FINISH(); \
     
    1100510996                case IEMMODE_16BIT: \
    1100610997                    IEM_MC_BEGIN(3, 3, IEM_MC_F_MIN_386, 0); \
    11007                     IEM_MC_ARG(uint16_t const *,        pu16Dst,                0); \
    11008                     IEM_MC_ARG(uint16_t,                u16Src,                 1); \
    11009                     IEM_MC_ARG_LOCAL_EFLAGS(            pEFlags, EFlags,        2); \
    1101010998                    IEM_MC_LOCAL(RTGCPTR,               GCPtrEffDst); \
     10999                    IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffDst, bRm, 1); \
     11000                    \
     11001                    uint8_t bImm; IEM_OPCODE_GET_NEXT_U8(&bImm); \
     11002                    IEMOP_HLP_DONE_DECODING(); \
     11003                    \
    1101111004                    IEM_MC_LOCAL(uint8_t,               bUnmapInfo); \
     11005                    IEM_MC_ARG(uint16_t const *,        pu16Dst,                    0); \
     11006                    IEM_MC_MEM_MAP_U16_RO(pu16Dst, bUnmapInfo, pVCpu->iem.s.iEffSeg, GCPtrEffDst); \
    1101211007                    \
    11013                     IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffDst, bRm, 1); \
    11014                     uint8_t bImm; IEM_OPCODE_GET_NEXT_U8(&bImm); \
    11015                     IEM_MC_ASSIGN(u16Src, bImm & 0x0f); \
    11016                     IEMOP_HLP_DONE_DECODING(); \
     11008                    IEM_MC_ARG_CONST(uint16_t,          u16Src, /*=*/ bImm & 0x0f,  1); \
     11009                    IEM_MC_ARG_LOCAL_EFLAGS(            pEFlags, EFlags,            2); \
    1101711010                    IEM_MC_FETCH_EFLAGS(EFlags); \
    11018                     IEM_MC_MEM_MAP_U16_RO(pu16Dst, bUnmapInfo, pVCpu->iem.s.iEffSeg, GCPtrEffDst); \
    1101911011                    IEM_MC_CALL_VOID_AIMPL_3(a_fnNormalU16, pu16Dst, u16Src, pEFlags); \
    1102011012                    \
     
    1102711019                case IEMMODE_32BIT: \
    1102811020                    IEM_MC_BEGIN(3, 3, IEM_MC_F_MIN_386, 0); \
    11029                     IEM_MC_ARG(uint32_t const *,        pu32Dst,                0); \
    11030                     IEM_MC_ARG(uint32_t,                u32Src,                 1); \
    11031                     IEM_MC_ARG_LOCAL_EFLAGS(            pEFlags, EFlags,        2); \
    1103211021                    IEM_MC_LOCAL(RTGCPTR,               GCPtrEffDst); \
     11022                    IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffDst, bRm, 1); \
     11023                    \
     11024                    uint8_t bImm; IEM_OPCODE_GET_NEXT_U8(&bImm); \
     11025                    IEMOP_HLP_DONE_DECODING(); \
     11026                    \
    1103311027                    IEM_MC_LOCAL(uint8_t,               bUnmapInfo); \
     11028                    IEM_MC_ARG(uint32_t const *,        pu32Dst,                    0); \
     11029                    IEM_MC_MEM_MAP_U32_RO(pu32Dst, bUnmapInfo, pVCpu->iem.s.iEffSeg, GCPtrEffDst); \
    1103411030                    \
    11035                     IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffDst, bRm, 1); \
    11036                     uint8_t bImm; IEM_OPCODE_GET_NEXT_U8(&bImm); \
    11037                     IEM_MC_ASSIGN(u32Src, bImm & 0x1f); \
    11038                     IEMOP_HLP_DONE_DECODING(); \
     11031                    IEM_MC_ARG_CONST(uint32_t,          u32Src, /*=*/ bImm & 0x1f,  1); \
     11032                    IEM_MC_ARG_LOCAL_EFLAGS(            pEFlags, EFlags,            2); \
    1103911033                    IEM_MC_FETCH_EFLAGS(EFlags); \
    11040                     IEM_MC_MEM_MAP_U32_RO(pu32Dst, bUnmapInfo, pVCpu->iem.s.iEffSeg, GCPtrEffDst); \
    1104111034                    IEM_MC_CALL_VOID_AIMPL_3(a_fnNormalU32, pu32Dst, u32Src, pEFlags); \
    1104211035                    \
     
    1104911042                case IEMMODE_64BIT: \
    1105011043                    IEM_MC_BEGIN(3, 3, IEM_MC_F_64BIT, 0); \
    11051                     IEM_MC_ARG(uint64_t const *,        pu64Dst,                0); \
    11052                     IEM_MC_ARG(uint64_t,                u64Src,                 1); \
    11053                     IEM_MC_ARG_LOCAL_EFLAGS(            pEFlags, EFlags,        2); \
    1105411044                    IEM_MC_LOCAL(RTGCPTR,               GCPtrEffDst); \
     11045                    IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffDst, bRm, 1); \
     11046                    \
     11047                    uint8_t bImm; IEM_OPCODE_GET_NEXT_U8(&bImm); \
     11048                    IEMOP_HLP_DONE_DECODING(); \
     11049                    \
    1105511050                    IEM_MC_LOCAL(uint8_t,               bUnmapInfo); \
     11051                    IEM_MC_ARG(uint64_t const *,        pu64Dst,                    0); \
     11052                    IEM_MC_MEM_MAP_U64_RO(pu64Dst, bUnmapInfo, pVCpu->iem.s.iEffSeg, GCPtrEffDst); \
    1105611053                    \
    11057                     IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffDst, bRm, 1); \
    11058                     uint8_t bImm; IEM_OPCODE_GET_NEXT_U8(&bImm); \
    11059                     IEM_MC_ASSIGN(u64Src, bImm & 0x3f); \
    11060                     IEMOP_HLP_DONE_DECODING(); \
     11054                    IEM_MC_ARG_CONST(uint64_t,          u64Src, /*=*/ bImm & 0x3f,  1); \
     11055                    IEM_MC_ARG_LOCAL_EFLAGS(            pEFlags, EFlags,            2); \
    1106111056                    IEM_MC_FETCH_EFLAGS(EFlags); \
    11062                     IEM_MC_MEM_MAP_U64_RO(pu64Dst, bUnmapInfo, pVCpu->iem.s.iEffSeg, GCPtrEffDst); \
    1106311057                    IEM_MC_CALL_VOID_AIMPL_3(a_fnNormalU64, pu64Dst, u64Src, pEFlags); \
    1106411058                    \
     
    1258012574    IEMOP_HLP_VMX_INSTR("vmptrld", kVmxVDiag_Vmptrld);
    1258112575    IEM_MC_BEGIN(2, 0, IEM_MC_F_NOT_286_OR_OLDER, 0);
    12582     IEM_MC_ARG(uint8_t, iEffSeg,     0);
    12583     IEM_MC_ARG(RTGCPTR, GCPtrEffSrc, 1);
     12576    IEM_MC_ARG(RTGCPTR,         GCPtrEffSrc,                            1);
    1258412577    IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffSrc, bRm, 0);
    1258512578    IEMOP_HLP_DONE_DECODING_NO_SIZE_OP_REPZ_OR_REPNZ_PREFIXES();
    12586     IEM_MC_ASSIGN(iEffSeg, pVCpu->iem.s.iEffSeg);
     12579    IEM_MC_ARG_CONST(uint8_t,   iEffSeg, /*=*/ pVCpu->iem.s.iEffSeg,    0);
    1258712580    IEM_MC_CALL_CIMPL_2(IEM_CIMPL_F_VMEXIT | IEM_CIMPL_F_STATUS_FLAGS, iemCImpl_vmptrld, iEffSeg, GCPtrEffSrc);
    1258812581    IEM_MC_END();
     
    1260012593    IEMOP_HLP_VMX_INSTR("vmclear", kVmxVDiag_Vmclear);
    1260112594    IEM_MC_BEGIN(2, 0, IEM_MC_F_NOT_286_OR_OLDER, 0);
    12602     IEM_MC_ARG(uint8_t, iEffSeg,     0);
    12603     IEM_MC_ARG(RTGCPTR, GCPtrEffDst, 1);
     12595    IEM_MC_ARG(RTGCPTR,         GCPtrEffDst,                            1);
    1260412596    IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffDst, bRm, 0);
    1260512597    IEMOP_HLP_DONE_DECODING();
    12606     IEM_MC_ASSIGN(iEffSeg, pVCpu->iem.s.iEffSeg);
     12598    IEM_MC_ARG_CONST(uint8_t,   iEffSeg, /*=*/ pVCpu->iem.s.iEffSeg,    0);
    1260712599    IEM_MC_CALL_CIMPL_2(IEM_CIMPL_F_VMEXIT | IEM_CIMPL_F_STATUS_FLAGS, iemCImpl_vmclear, iEffSeg, GCPtrEffDst);
    1260812600    IEM_MC_END();
     
    1261912611    IEMOP_HLP_VMX_INSTR("vmxon", kVmxVDiag_Vmxon);
    1262012612    IEM_MC_BEGIN(2, 0, IEM_MC_F_NOT_286_OR_OLDER, 0);
    12621     IEM_MC_ARG(uint8_t, iEffSeg,     0);
    12622     IEM_MC_ARG(RTGCPTR, GCPtrEffSrc, 1);
     12613    IEM_MC_ARG(RTGCPTR,         GCPtrEffSrc,                            1);
    1262312614    IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffSrc, bRm, 0);
    1262412615    IEMOP_HLP_DONE_DECODING();
    12625     IEM_MC_ASSIGN(iEffSeg, pVCpu->iem.s.iEffSeg);
     12616    IEM_MC_ARG_CONST(uint8_t,   iEffSeg, /*=*/ pVCpu->iem.s.iEffSeg,    0);
    1262612617    IEM_MC_CALL_CIMPL_2(IEM_CIMPL_F_VMEXIT | IEM_CIMPL_F_STATUS_FLAGS, iemCImpl_vmxon, iEffSeg, GCPtrEffSrc);
    1262712618    IEM_MC_END();
     
    1263912630    IEMOP_HLP_VMX_INSTR("vmptrst", kVmxVDiag_Vmptrst);
    1264012631    IEM_MC_BEGIN(2, 0, IEM_MC_F_NOT_286_OR_OLDER, 0);
    12641     IEM_MC_ARG(uint8_t, iEffSeg,     0);
    12642     IEM_MC_ARG(RTGCPTR, GCPtrEffDst, 1);
     12632    IEM_MC_ARG(RTGCPTR,         GCPtrEffDst,                            1);
    1264312633    IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffDst, bRm, 0);
    1264412634    IEMOP_HLP_DONE_DECODING_NO_SIZE_OP_REPZ_OR_REPNZ_PREFIXES();
    12645     IEM_MC_ASSIGN(iEffSeg, pVCpu->iem.s.iEffSeg);
     12635    IEM_MC_ARG_CONST(uint8_t,   iEffSeg, /*=*/ pVCpu->iem.s.iEffSeg,    0);
    1264612636    IEM_MC_CALL_CIMPL_2(IEM_CIMPL_F_VMEXIT | IEM_CIMPL_F_STATUS_FLAGS, iemCImpl_vmptrst, iEffSeg, GCPtrEffDst);
    1264712637    IEM_MC_END();
  • trunk/src/VBox/VMM/VMMAll/IEMAllThrdPython.py

    r101949 r101950  
    962962
    963963            if isinstance(oStmt, iai.McStmtVar):
    964                 if oStmt.sConstValue is None:
     964                if oStmt.sValue is None:
    965965                    continue;
    966966                aiSkipParams = { 0: True, 1: True, 3: True };
  • trunk/src/VBox/VMM/include/IEMMc.h

    r101911 r101950  
    194194
    195195#define IEM_MC_LOCAL(a_Type, a_Name)                    a_Type a_Name
     196#define IEM_MC_LOCAL_ASSIGN(a_Type, a_Name, a_Value)    a_Type a_Name = (a_Value)
    196197#define IEM_MC_LOCAL_CONST(a_Type, a_Name, a_Value)     a_Type const a_Name = (a_Value)
    197198#define IEM_MC_REF_LOCAL(a_pRefArg, a_Local)            (a_pRefArg) = &(a_Local)
  • trunk/src/VBox/VMM/testcase/tstIEMCheckMc.cpp

    r101911 r101950  
    595595#define IEM_MC_LOCAL_CONST(a_Type, a_Name, a_Value) (void)fMcBegin; \
    596596    a_Type const a_Name = (a_Value); \
     597    NOREF(a_Name)
     598#define IEM_MC_LOCAL_ASSIGN(a_Type, a_Name, a_Value) (void)fMcBegin; \
     599    a_Type a_Name = (a_Value); \
    597600    NOREF(a_Name)
    598601#define IEM_MC_REF_LOCAL(a_pRefArg, a_Local) (void)fMcBegin; \
Note: See TracChangeset for help on using the changeset viewer.

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