VirtualBox

Changeset 100832 in vbox for trunk


Ignore:
Timestamp:
Aug 9, 2023 2:31:48 PM (19 months ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
158732
Message:

VMM/IEM: More conversion from IEM_MC_MEM_MAP to IEM_MC_MEM_MAP_XXX. bugref:10369

File:
1 edited

Legend:

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

    r100831 r100832  
    27002700    {
    27012701        /* Memory */
    2702         IEM_MC_BEGIN(3, 2);
     2702        IEM_MC_BEGIN(3, 3);
    27032703        IEM_MC_ARG(uint16_t *, pu16Dst,          0);
    27042704        IEM_MC_ARG(uint16_t,   u16Src,           1);
    27052705        IEM_MC_ARG_LOCAL_EFLAGS(pEFlags, EFlags, 2);
    27062706        IEM_MC_LOCAL(RTGCPTR, GCPtrEffDst);
     2707        IEM_MC_LOCAL(uint8_t, bUnmapInfo);
    27072708
    27082709        IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffDst, bRm, 0);
    27092710        IEMOP_HLP_DECODED_NL_2(OP_ARPL, IEMOPFORM_MR_REG, OP_PARM_Ew, OP_PARM_Gw, DISOPTYPE_HARMLESS);
    2710         IEM_MC_MEM_MAP(pu16Dst, IEM_ACCESS_DATA_RW, pVCpu->iem.s.iEffSeg, GCPtrEffDst, 0 /*arg*/);
     2711        IEM_MC_MEM_MAP_U16_RW(pu16Dst, bUnmapInfo, pVCpu->iem.s.iEffSeg, GCPtrEffDst);
    27112712        IEM_MC_FETCH_GREG_U16(u16Src, IEM_GET_MODRM_REG_8(bRm));
    27122713        IEM_MC_FETCH_EFLAGS(EFlags);
    27132714        IEM_MC_CALL_VOID_AIMPL_3(iemAImpl_arpl, pu16Dst, u16Src, pEFlags);
    27142715
    2715         IEM_MC_MEM_COMMIT_AND_UNMAP(pu16Dst, IEM_ACCESS_DATA_RW);
     2716        IEM_MC_MEM_COMMIT_AND_UNMAP_RW(pu16Dst, bUnmapInfo);
    27162717        IEM_MC_COMMIT_EFLAGS(EFlags);
    27172718        IEM_MC_ADVANCE_RIP_AND_FINISH();
     
    40974098 * Body for a group 1 binary operator.
    40984099 */
    4099 #define IEMOP_BODY_BINARY_Ev_Iz(a_fnNormalU16, a_fnNormalU32, a_fnNormalU64, a_fRW) \
     4100#define IEMOP_BODY_BINARY_Ev_Iz_RW(a_fnNormalU16, a_fnNormalU32, a_fnNormalU64) \
    41004101    if (IEM_IS_MODRM_REG_MODE(bRm)) \
    41014102    { \
     
    41334134                IEM_MC_REF_EFLAGS(pEFlags); \
    41344135                IEM_MC_CALL_VOID_AIMPL_3(a_fnNormalU32, pu32Dst, u32Src, pEFlags); \
    4135                 if (a_fRW == IEM_ACCESS_DATA_RW) \
    4136                     IEM_MC_CLEAR_HIGH_GREG_U64_BY_REF(pu32Dst); \
     4136                IEM_MC_CLEAR_HIGH_GREG_U64_BY_REF(pu32Dst); \
    41374137                \
    41384138                IEM_MC_ADVANCE_RIP_AND_FINISH(); \
     
    41714171                case IEMMODE_16BIT: \
    41724172                { \
    4173                     IEM_MC_BEGIN(3, 2); \
     4173                    IEM_MC_BEGIN(3, 3); \
    41744174                    IEM_MC_ARG(uint16_t *,      pu16Dst,                0); \
    41754175                    IEM_MC_ARG(uint16_t,        u16Src,                 1); \
    41764176                    IEM_MC_ARG_LOCAL_EFLAGS(    pEFlags, EFlags,        2); \
    41774177                    IEM_MC_LOCAL(RTGCPTR, GCPtrEffDst); \
     4178                    IEM_MC_LOCAL(uint8_t, bUnmapInfo); \
    41784179                    \
    41794180                    IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffDst, bRm, 2); \
     
    41814182                    IEM_MC_ASSIGN(u16Src, u16Imm); \
    41824183                    IEMOP_HLP_DONE_DECODING(); \
    4183                     IEM_MC_MEM_MAP(pu16Dst, a_fRW, pVCpu->iem.s.iEffSeg, GCPtrEffDst, 0 /*arg*/); \
     4184                    IEM_MC_MEM_MAP_U16_RW(pu16Dst, bUnmapInfo, pVCpu->iem.s.iEffSeg, GCPtrEffDst); \
    41844185                    IEM_MC_FETCH_EFLAGS(EFlags); \
    41854186                    IEM_MC_CALL_VOID_AIMPL_3(a_fnNormalU16, pu16Dst, u16Src, pEFlags); \
    41864187                    \
    4187                     IEM_MC_MEM_COMMIT_AND_UNMAP(pu16Dst, a_fRW); \
     4188                    IEM_MC_MEM_COMMIT_AND_UNMAP_RW(pu16Dst, bUnmapInfo); \
    41884189                    IEM_MC_COMMIT_EFLAGS(EFlags); \
    41894190                    IEM_MC_ADVANCE_RIP_AND_FINISH(); \
     
    41944195                case IEMMODE_32BIT: \
    41954196                { \
    4196                     IEM_MC_BEGIN(3, 2); \
     4197                    IEM_MC_BEGIN(3, 3); \
    41974198                    IEM_MC_ARG(uint32_t *,      pu32Dst,                0); \
    41984199                    IEM_MC_ARG(uint32_t,        u32Src,                 1); \
    41994200                    IEM_MC_ARG_LOCAL_EFLAGS(    pEFlags, EFlags,        2); \
    42004201                    IEM_MC_LOCAL(RTGCPTR, GCPtrEffDst); \
     4202                    IEM_MC_LOCAL(uint8_t, bUnmapInfo); \
    42014203                    \
    42024204                    IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffDst, bRm, 4); \
     
    42044206                    IEM_MC_ASSIGN(u32Src, u32Imm); \
    42054207                    IEMOP_HLP_DONE_DECODING(); \
    4206                     IEM_MC_MEM_MAP(pu32Dst, a_fRW, pVCpu->iem.s.iEffSeg, GCPtrEffDst, 0 /*arg*/); \
     4208                    IEM_MC_MEM_MAP_U32_RW(pu32Dst, bUnmapInfo, pVCpu->iem.s.iEffSeg, GCPtrEffDst); \
    42074209                    IEM_MC_FETCH_EFLAGS(EFlags); \
    42084210                    IEM_MC_CALL_VOID_AIMPL_3(a_fnNormalU32, pu32Dst, u32Src, pEFlags); \
    42094211                    \
    4210                     IEM_MC_MEM_COMMIT_AND_UNMAP(pu32Dst, a_fRW); \
     4212                    IEM_MC_MEM_COMMIT_AND_UNMAP_RW(pu32Dst, bUnmapInfo); \
    42114213                    IEM_MC_COMMIT_EFLAGS(EFlags); \
    42124214                    IEM_MC_ADVANCE_RIP_AND_FINISH(); \
     
    42174219                case IEMMODE_64BIT: \
    42184220                { \
    4219                     IEM_MC_BEGIN(3, 2); \
     4221                    IEM_MC_BEGIN(3, 3); \
    42204222                    IEM_MC_ARG(uint64_t *,      pu64Dst,                0); \
    42214223                    IEM_MC_ARG(uint64_t,        u64Src,                 1); \
    42224224                    IEM_MC_ARG_LOCAL_EFLAGS(    pEFlags, EFlags,        2); \
    42234225                    IEM_MC_LOCAL(RTGCPTR, GCPtrEffDst); \
     4226                    IEM_MC_LOCAL(uint8_t, bUnmapInfo); \
    42244227                    \
    42254228                    IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffDst, bRm, 4); \
     
    42274230                    IEMOP_HLP_DONE_DECODING(); \
    42284231                    IEM_MC_ASSIGN(u64Src, u64Imm); \
    4229                     IEM_MC_MEM_MAP(pu64Dst, a_fRW, pVCpu->iem.s.iEffSeg, GCPtrEffDst, 0 /*arg*/); \
     4232                    IEM_MC_MEM_MAP_U64_RW(pu64Dst, bUnmapInfo, pVCpu->iem.s.iEffSeg, GCPtrEffDst); \
    42304233                    IEM_MC_FETCH_EFLAGS(EFlags); \
    42314234                    IEM_MC_CALL_VOID_AIMPL_3(a_fnNormalU64, pu64Dst, u64Src, pEFlags); \
    42324235                    \
    4233                     IEM_MC_MEM_COMMIT_AND_UNMAP(pu64Dst, a_fRW); \
     4236                    IEM_MC_MEM_COMMIT_AND_UNMAP_RW(pu64Dst, bUnmapInfo); \
    42344237                    IEM_MC_COMMIT_EFLAGS(EFlags); \
    42354238                    IEM_MC_ADVANCE_RIP_AND_FINISH(); \
     
    42444247        { \
    42454248            (void)0
    4246 
    4247 #define IEMOP_BODY_BINARY_Ev_Iz_NO_LOCK() \
    4248             IEMOP_HLP_DONE_DECODING(); \
    4249             IEMOP_RAISE_INVALID_LOCK_PREFIX_RET(); \
    4250         } \
    4251     } \
    4252     (void)0
    4253 
     4249/* This must be a separate macro due to parsing restrictions in IEMAllInstPython.py. */
    42544250#define IEMOP_BODY_BINARY_Ev_Iz_LOCKED(a_fnLockedU16, a_fnLockedU32, a_fnLockedU64) \
    42554251            switch (pVCpu->iem.s.enmEffOpSize) \
     
    42574253                case IEMMODE_16BIT: \
    42584254                { \
    4259                     IEM_MC_BEGIN(3, 2); \
     4255                    IEM_MC_BEGIN(3, 3); \
    42604256                    IEM_MC_ARG(uint16_t *,      pu16Dst,                0); \
    42614257                    IEM_MC_ARG(uint16_t,        u16Src,                 1); \
    42624258                    IEM_MC_ARG_LOCAL_EFLAGS(    pEFlags, EFlags,        2); \
    42634259                    IEM_MC_LOCAL(RTGCPTR, GCPtrEffDst); \
     4260                    IEM_MC_LOCAL(uint8_t, bUnmapInfo); \
    42644261                    \
    42654262                    IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffDst, bRm, 2); \
     
    42674264                    IEM_MC_ASSIGN(u16Src, u16Imm); \
    42684265                    IEMOP_HLP_DONE_DECODING(); \
    4269                     IEM_MC_MEM_MAP(pu16Dst, IEM_ACCESS_DATA_RW, pVCpu->iem.s.iEffSeg, GCPtrEffDst, 0 /*arg*/); \
     4266                    IEM_MC_MEM_MAP_U16_RW(pu16Dst, bUnmapInfo, pVCpu->iem.s.iEffSeg, GCPtrEffDst); \
    42704267                    IEM_MC_FETCH_EFLAGS(EFlags); \
    42714268                    IEM_MC_CALL_VOID_AIMPL_3(a_fnLockedU16, pu16Dst, u16Src, pEFlags); \
    42724269                    \
    4273                     IEM_MC_MEM_COMMIT_AND_UNMAP(pu16Dst, IEM_ACCESS_DATA_RW); \
     4270                    IEM_MC_MEM_COMMIT_AND_UNMAP_RW(pu16Dst, bUnmapInfo); \
    42744271                    IEM_MC_COMMIT_EFLAGS(EFlags); \
    42754272                    IEM_MC_ADVANCE_RIP_AND_FINISH(); \
     
    42804277                case IEMMODE_32BIT: \
    42814278                { \
    4282                     IEM_MC_BEGIN(3, 2); \
     4279                    IEM_MC_BEGIN(3, 3); \
    42834280                    IEM_MC_ARG(uint32_t *,      pu32Dst,                0); \
    42844281                    IEM_MC_ARG(uint32_t,        u32Src,                 1); \
    42854282                    IEM_MC_ARG_LOCAL_EFLAGS(    pEFlags, EFlags,        2); \
    42864283                    IEM_MC_LOCAL(RTGCPTR, GCPtrEffDst); \
     4284                    IEM_MC_LOCAL(uint8_t, bUnmapInfo); \
    42874285                    \
    42884286                    IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffDst, bRm, 4); \
     
    42904288                    IEM_MC_ASSIGN(u32Src, u32Imm); \
    42914289                    IEMOP_HLP_DONE_DECODING(); \
    4292                     IEM_MC_MEM_MAP(pu32Dst, IEM_ACCESS_DATA_RW, pVCpu->iem.s.iEffSeg, GCPtrEffDst, 0 /*arg*/); \
     4290                    IEM_MC_MEM_MAP_U32_RW(pu32Dst, bUnmapInfo, pVCpu->iem.s.iEffSeg, GCPtrEffDst); \
    42934291                    IEM_MC_FETCH_EFLAGS(EFlags); \
    42944292                    IEM_MC_CALL_VOID_AIMPL_3(a_fnLockedU32, pu32Dst, u32Src, pEFlags); \
    42954293                    \
    4296                     IEM_MC_MEM_COMMIT_AND_UNMAP(pu32Dst, IEM_ACCESS_DATA_RW); \
     4294                    IEM_MC_MEM_COMMIT_AND_UNMAP_RW(pu32Dst, bUnmapInfo); \
    42974295                    IEM_MC_COMMIT_EFLAGS(EFlags); \
    42984296                    IEM_MC_ADVANCE_RIP_AND_FINISH(); \
     
    43034301                case IEMMODE_64BIT: \
    43044302                { \
    4305                     IEM_MC_BEGIN(3, 2); \
     4303                    IEM_MC_BEGIN(3, 3); \
    43064304                    IEM_MC_ARG(uint64_t *,      pu64Dst,                0); \
    43074305                    IEM_MC_ARG(uint64_t,        u64Src,                 1); \
    43084306                    IEM_MC_ARG_LOCAL_EFLAGS(    pEFlags, EFlags,        2); \
    43094307                    IEM_MC_LOCAL(RTGCPTR, GCPtrEffDst); \
     4308                    IEM_MC_LOCAL(uint8_t, bUnmapInfo); \
    43104309                    \
    43114310                    IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffDst, bRm, 4); \
     
    43134312                    IEMOP_HLP_DONE_DECODING(); \
    43144313                    IEM_MC_ASSIGN(u64Src, u64Imm); \
    4315                     IEM_MC_MEM_MAP(pu64Dst, IEM_ACCESS_DATA_RW, pVCpu->iem.s.iEffSeg, GCPtrEffDst, 0 /*arg*/); \
     4314                    IEM_MC_MEM_MAP_U64_RW(pu64Dst, bUnmapInfo, pVCpu->iem.s.iEffSeg, GCPtrEffDst); \
    43164315                    IEM_MC_FETCH_EFLAGS(EFlags); \
    43174316                    IEM_MC_CALL_VOID_AIMPL_3(a_fnLockedU64, pu64Dst, u64Src, pEFlags); \
    43184317                    \
    4319                     IEM_MC_MEM_COMMIT_AND_UNMAP(pu64Dst, IEM_ACCESS_DATA_RW); \
     4318                    IEM_MC_MEM_COMMIT_AND_UNMAP_RW(pu64Dst, bUnmapInfo); \
    43204319                    IEM_MC_COMMIT_EFLAGS(EFlags); \
    43214320                    IEM_MC_ADVANCE_RIP_AND_FINISH(); \
     
    43304329    (void)0
    43314330
     4331/* read-only version */
     4332#define IEMOP_BODY_BINARY_Ev_Iz_RO(a_fnNormalU16, a_fnNormalU32, a_fnNormalU64) \
     4333    if (IEM_IS_MODRM_REG_MODE(bRm)) \
     4334    { \
     4335        /* register target */ \
     4336        switch (pVCpu->iem.s.enmEffOpSize) \
     4337        { \
     4338            case IEMMODE_16BIT: \
     4339            { \
     4340                uint16_t u16Imm; IEM_OPCODE_GET_NEXT_U16(&u16Imm); \
     4341                IEM_MC_BEGIN(3, 0); \
     4342                IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); \
     4343                IEM_MC_ARG(uint16_t *,      pu16Dst,                0); \
     4344                IEM_MC_ARG_CONST(uint16_t,  u16Src, /*=*/ u16Imm,   1); \
     4345                IEM_MC_ARG(uint32_t *,      pEFlags,                2); \
     4346                \
     4347                IEM_MC_REF_GREG_U16(pu16Dst, IEM_GET_MODRM_RM(pVCpu, bRm)); \
     4348                IEM_MC_REF_EFLAGS(pEFlags); \
     4349                IEM_MC_CALL_VOID_AIMPL_3(a_fnNormalU16, pu16Dst, u16Src, pEFlags); \
     4350                \
     4351                IEM_MC_ADVANCE_RIP_AND_FINISH(); \
     4352                IEM_MC_END(); \
     4353                break; \
     4354            } \
     4355            \
     4356            case IEMMODE_32BIT: \
     4357            { \
     4358                uint32_t u32Imm; IEM_OPCODE_GET_NEXT_U32(&u32Imm); \
     4359                IEM_MC_BEGIN(3, 0); \
     4360                IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); \
     4361                IEM_MC_ARG(uint32_t *,      pu32Dst,                0); \
     4362                IEM_MC_ARG_CONST(uint32_t,  u32Src, /*=*/ u32Imm,   1); \
     4363                IEM_MC_ARG(uint32_t *,      pEFlags,                2); \
     4364                \
     4365                IEM_MC_REF_GREG_U32(pu32Dst, IEM_GET_MODRM_RM(pVCpu, bRm)); \
     4366                IEM_MC_REF_EFLAGS(pEFlags); \
     4367                IEM_MC_CALL_VOID_AIMPL_3(a_fnNormalU32, pu32Dst, u32Src, pEFlags); \
     4368                \
     4369                IEM_MC_ADVANCE_RIP_AND_FINISH(); \
     4370                IEM_MC_END(); \
     4371                break; \
     4372            } \
     4373            \
     4374            case IEMMODE_64BIT: \
     4375            { \
     4376                uint64_t u64Imm; IEM_OPCODE_GET_NEXT_S32_SX_U64(&u64Imm); \
     4377                IEM_MC_BEGIN(3, 0); \
     4378                IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); \
     4379                IEM_MC_ARG(uint64_t *,      pu64Dst,                0); \
     4380                IEM_MC_ARG_CONST(uint64_t,  u64Src, /*=*/ u64Imm,   1); \
     4381                IEM_MC_ARG(uint32_t *,      pEFlags,                2); \
     4382                \
     4383                IEM_MC_REF_GREG_U64(pu64Dst, IEM_GET_MODRM_RM(pVCpu, bRm)); \
     4384                IEM_MC_REF_EFLAGS(pEFlags); \
     4385                IEM_MC_CALL_VOID_AIMPL_3(a_fnNormalU64, pu64Dst, u64Src, pEFlags); \
     4386                \
     4387                IEM_MC_ADVANCE_RIP_AND_FINISH(); \
     4388                IEM_MC_END(); \
     4389                break; \
     4390            } \
     4391            \
     4392            IEM_NOT_REACHED_DEFAULT_CASE_RET(); \
     4393        } \
     4394    } \
     4395    else \
     4396    { \
     4397        /* memory target */ \
     4398        if (!(pVCpu->iem.s.fPrefixes & IEM_OP_PRF_LOCK)) \
     4399        { \
     4400            switch (pVCpu->iem.s.enmEffOpSize) \
     4401            { \
     4402                case IEMMODE_16BIT: \
     4403                { \
     4404                    IEM_MC_BEGIN(3, 3); \
     4405                    IEM_MC_ARG(uint16_t const *, pu16Dst,               0); \
     4406                    IEM_MC_ARG(uint16_t,         u16Src,                1); \
     4407                    IEM_MC_ARG_LOCAL_EFLAGS(     pEFlags, EFlags,       2); \
     4408                    IEM_MC_LOCAL(RTGCPTR, GCPtrEffDst); \
     4409                    IEM_MC_LOCAL(uint8_t, bUnmapInfo); \
     4410                    \
     4411                    IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffDst, bRm, 2); \
     4412                    uint16_t u16Imm; IEM_OPCODE_GET_NEXT_U16(&u16Imm); \
     4413                    IEM_MC_ASSIGN(u16Src, u16Imm); \
     4414                    IEMOP_HLP_DONE_DECODING(); \
     4415                    IEM_MC_MEM_MAP_U16_RO(pu16Dst, bUnmapInfo, pVCpu->iem.s.iEffSeg, GCPtrEffDst); \
     4416                    IEM_MC_FETCH_EFLAGS(EFlags); \
     4417                    IEM_MC_CALL_VOID_AIMPL_3(a_fnNormalU16, pu16Dst, u16Src, pEFlags); \
     4418                    \
     4419                    IEM_MC_MEM_COMMIT_AND_UNMAP_RO(pu16Dst, bUnmapInfo); \
     4420                    IEM_MC_COMMIT_EFLAGS(EFlags); \
     4421                    IEM_MC_ADVANCE_RIP_AND_FINISH(); \
     4422                    IEM_MC_END(); \
     4423                    break; \
     4424                } \
     4425                \
     4426                case IEMMODE_32BIT: \
     4427                { \
     4428                    IEM_MC_BEGIN(3, 3); \
     4429                    IEM_MC_ARG(uint32_t const *, pu32Dst,               0); \
     4430                    IEM_MC_ARG(uint32_t,         u32Src,                1); \
     4431                    IEM_MC_ARG_LOCAL_EFLAGS(     pEFlags, EFlags,       2); \
     4432                    IEM_MC_LOCAL(RTGCPTR, GCPtrEffDst); \
     4433                    IEM_MC_LOCAL(uint8_t, bUnmapInfo); \
     4434                    \
     4435                    IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffDst, bRm, 4); \
     4436                    uint32_t u32Imm; IEM_OPCODE_GET_NEXT_U32(&u32Imm); \
     4437                    IEM_MC_ASSIGN(u32Src, u32Imm); \
     4438                    IEMOP_HLP_DONE_DECODING(); \
     4439                    IEM_MC_MEM_MAP_U32_RO(pu32Dst, bUnmapInfo, pVCpu->iem.s.iEffSeg, GCPtrEffDst); \
     4440                    IEM_MC_FETCH_EFLAGS(EFlags); \
     4441                    IEM_MC_CALL_VOID_AIMPL_3(a_fnNormalU32, pu32Dst, u32Src, pEFlags); \
     4442                    \
     4443                    IEM_MC_MEM_COMMIT_AND_UNMAP_RO(pu32Dst, bUnmapInfo); \
     4444                    IEM_MC_COMMIT_EFLAGS(EFlags); \
     4445                    IEM_MC_ADVANCE_RIP_AND_FINISH(); \
     4446                    IEM_MC_END(); \
     4447                    break; \
     4448                } \
     4449                \
     4450                case IEMMODE_64BIT: \
     4451                { \
     4452                    IEM_MC_BEGIN(3, 3); \
     4453                    IEM_MC_ARG(uint64_t const *, pu64Dst,               0); \
     4454                    IEM_MC_ARG(uint64_t,         u64Src,                1); \
     4455                    IEM_MC_ARG_LOCAL_EFLAGS(     pEFlags, EFlags,       2); \
     4456                    IEM_MC_LOCAL(RTGCPTR, GCPtrEffDst); \
     4457                    IEM_MC_LOCAL(uint8_t, bUnmapInfo); \
     4458                    \
     4459                    IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffDst, bRm, 4); \
     4460                    uint64_t u64Imm; IEM_OPCODE_GET_NEXT_S32_SX_U64(&u64Imm); \
     4461                    IEMOP_HLP_DONE_DECODING(); \
     4462                    IEM_MC_ASSIGN(u64Src, u64Imm); \
     4463                    IEM_MC_MEM_MAP_U64_RO(pu64Dst, bUnmapInfo, pVCpu->iem.s.iEffSeg, GCPtrEffDst); \
     4464                    IEM_MC_FETCH_EFLAGS(EFlags); \
     4465                    IEM_MC_CALL_VOID_AIMPL_3(a_fnNormalU64, pu64Dst, u64Src, pEFlags); \
     4466                    \
     4467                    IEM_MC_MEM_COMMIT_AND_UNMAP_RO(pu64Dst, bUnmapInfo); \
     4468                    IEM_MC_COMMIT_EFLAGS(EFlags); \
     4469                    IEM_MC_ADVANCE_RIP_AND_FINISH(); \
     4470                    IEM_MC_END(); \
     4471                    break; \
     4472                } \
     4473                \
     4474                IEM_NOT_REACHED_DEFAULT_CASE_RET(); \
     4475            } \
     4476        } \
     4477        else \
     4478        { \
     4479            IEMOP_HLP_DONE_DECODING(); \
     4480            IEMOP_RAISE_INVALID_LOCK_PREFIX_RET(); \
     4481        } \
     4482    } \
     4483    (void)0
     4484
    43324485
    43334486/**
     
    43384491{
    43394492    IEMOP_MNEMONIC(add_Ev_Iz, "add Ev,Iz");
    4340     IEMOP_BODY_BINARY_Ev_Iz(       iemAImpl_add_u16,        iemAImpl_add_u32,        iemAImpl_add_u64, IEM_ACCESS_DATA_RW);
     4493    IEMOP_BODY_BINARY_Ev_Iz_RW(    iemAImpl_add_u16,        iemAImpl_add_u32,        iemAImpl_add_u64);
    43414494    IEMOP_BODY_BINARY_Ev_Iz_LOCKED(iemAImpl_add_u16_locked, iemAImpl_add_u32_locked, iemAImpl_add_u64_locked);
    43424495}
     
    43504503{
    43514504    IEMOP_MNEMONIC(or_Ev_Iz, "or Ev,Iz");
    4352     IEMOP_BODY_BINARY_Ev_Iz(       iemAImpl_or_u16,        iemAImpl_or_u32,        iemAImpl_or_u64, IEM_ACCESS_DATA_RW);
     4505    IEMOP_BODY_BINARY_Ev_Iz_RW(    iemAImpl_or_u16,        iemAImpl_or_u32,        iemAImpl_or_u64);
    43534506    IEMOP_BODY_BINARY_Ev_Iz_LOCKED(iemAImpl_or_u16_locked, iemAImpl_or_u32_locked, iemAImpl_or_u64_locked);
    43544507}
     
    43624515{
    43634516    IEMOP_MNEMONIC(adc_Ev_Iz, "adc Ev,Iz");
    4364     IEMOP_BODY_BINARY_Ev_Iz(       iemAImpl_adc_u16,        iemAImpl_adc_u32,        iemAImpl_adc_u64, IEM_ACCESS_DATA_RW);
     4517    IEMOP_BODY_BINARY_Ev_Iz_RW(    iemAImpl_adc_u16,        iemAImpl_adc_u32,        iemAImpl_adc_u64);
    43654518    IEMOP_BODY_BINARY_Ev_Iz_LOCKED(iemAImpl_adc_u16_locked, iemAImpl_adc_u32_locked, iemAImpl_adc_u64_locked);
    43664519}
     
    43744527{
    43754528    IEMOP_MNEMONIC(sbb_Ev_Iz, "sbb Ev,Iz");
    4376     IEMOP_BODY_BINARY_Ev_Iz(       iemAImpl_sbb_u16,        iemAImpl_sbb_u32,        iemAImpl_sbb_u64, IEM_ACCESS_DATA_RW);
     4529    IEMOP_BODY_BINARY_Ev_Iz_RW(    iemAImpl_sbb_u16,        iemAImpl_sbb_u32,        iemAImpl_sbb_u64);
    43774530    IEMOP_BODY_BINARY_Ev_Iz_LOCKED(iemAImpl_sbb_u16_locked, iemAImpl_sbb_u32_locked, iemAImpl_sbb_u64_locked);
    43784531}
     
    43864539{
    43874540    IEMOP_MNEMONIC(and_Ev_Iz, "and Ev,Iz");
    4388     IEMOP_BODY_BINARY_Ev_Iz(       iemAImpl_and_u16,        iemAImpl_and_u32,        iemAImpl_and_u64, IEM_ACCESS_DATA_RW);
     4541    IEMOP_BODY_BINARY_Ev_Iz_RW(    iemAImpl_and_u16,        iemAImpl_and_u32,        iemAImpl_and_u64);
    43894542    IEMOP_BODY_BINARY_Ev_Iz_LOCKED(iemAImpl_and_u16_locked, iemAImpl_and_u32_locked, iemAImpl_and_u64_locked);
    43904543}
     
    43984551{
    43994552    IEMOP_MNEMONIC(sub_Ev_Iz, "sub Ev,Iz");
    4400     IEMOP_BODY_BINARY_Ev_Iz(       iemAImpl_sub_u16,        iemAImpl_sub_u32,        iemAImpl_sub_u64, IEM_ACCESS_DATA_RW);
     4553    IEMOP_BODY_BINARY_Ev_Iz_RW(    iemAImpl_sub_u16,        iemAImpl_sub_u32,        iemAImpl_sub_u64);
    44014554    IEMOP_BODY_BINARY_Ev_Iz_LOCKED(iemAImpl_sub_u16_locked, iemAImpl_sub_u32_locked, iemAImpl_sub_u64_locked);
    44024555}
     
    44104563{
    44114564    IEMOP_MNEMONIC(xor_Ev_Iz, "xor Ev,Iz");
    4412     IEMOP_BODY_BINARY_Ev_Iz(       iemAImpl_xor_u16,        iemAImpl_xor_u32,        iemAImpl_xor_u64, IEM_ACCESS_DATA_RW);
     4565    IEMOP_BODY_BINARY_Ev_Iz_RW(    iemAImpl_xor_u16,        iemAImpl_xor_u32,        iemAImpl_xor_u64);
    44134566    IEMOP_BODY_BINARY_Ev_Iz_LOCKED(iemAImpl_xor_u16_locked, iemAImpl_xor_u32_locked, iemAImpl_xor_u64_locked);
    44144567}
     
    44224575{
    44234576    IEMOP_MNEMONIC(cmp_Ev_Iz, "cmp Ev,Iz");
    4424     IEMOP_BODY_BINARY_Ev_Iz(       iemAImpl_cmp_u16,        iemAImpl_cmp_u32,        iemAImpl_cmp_u64, IEM_ACCESS_DATA_R);
    4425     IEMOP_BODY_BINARY_Ev_Iz_NO_LOCK();
     4577    IEMOP_BODY_BINARY_Ev_Iz_RO(iemAImpl_cmp_u16, iemAImpl_cmp_u32, iemAImpl_cmp_u64);
    44264578}
    44274579
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