VirtualBox

Ignore:
Timestamp:
Nov 27, 2023 8:41:01 PM (12 months ago)
Author:
vboxsync
Message:

VMM/IEM: Converted IEM_MC_REF_LOCAL uses to IEM_MC_ARG_LOCAL_REF, except for three the POP SP/ESP/RSP instructions abusing it and requires rewriting+testcase. bugref:10371

File:
1 edited

Legend:

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

    r102331 r102349  
    29692969                IEM_MC_BEGIN(3, 1, IEM_MC_F_MIN_186, 0);
    29702970                IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    2971                 IEM_MC_ARG(uint16_t *,      pu16Dst,            0);
    2972                 IEM_MC_ARG_CONST(uint16_t,  u16Src,/*=*/ u16Imm,1);
    2973                 IEM_MC_ARG(uint32_t *,      pEFlags,            2);
    2974                 IEM_MC_LOCAL(uint16_t,      u16Tmp);
    2975 
     2971                IEM_MC_LOCAL(uint16_t,              u16Tmp);
    29762972                IEM_MC_FETCH_GREG_U16(u16Tmp, IEM_GET_MODRM_RM(pVCpu, bRm));
    2977                 IEM_MC_REF_LOCAL(pu16Dst, u16Tmp);
     2973                IEM_MC_ARG_LOCAL_REF(uint16_t *,    pu16Dst, u16Tmp,        0);
     2974                IEM_MC_ARG_CONST(uint16_t,          u16Src,/*=*/ u16Imm,    1);
     2975                IEM_MC_ARG(uint32_t *,              pEFlags,                2);
    29782976                IEM_MC_REF_EFLAGS(pEFlags);
    29792977                IEM_MC_CALL_VOID_AIMPL_3(pfnAImplU16, pu16Dst, u16Src, pEFlags);
     
    30183016                IEM_MC_BEGIN(3, 1, IEM_MC_F_MIN_386, 0);
    30193017                IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    3020                 IEM_MC_ARG(uint32_t *,      pu32Dst,            0);
    3021                 IEM_MC_ARG_CONST(uint32_t,  u32Src,/*=*/ u32Imm,1);
    3022                 IEM_MC_ARG(uint32_t *,      pEFlags,            2);
    30233018                IEM_MC_LOCAL(uint32_t,      u32Tmp);
    3024 
    30253019                IEM_MC_FETCH_GREG_U32(u32Tmp, IEM_GET_MODRM_RM(pVCpu, bRm));
    3026                 IEM_MC_REF_LOCAL(pu32Dst, u32Tmp);
     3020
     3021                IEM_MC_ARG_LOCAL_REF(uint32_t *,    pu32Dst,     u32Tmp,    0);
     3022                IEM_MC_ARG_CONST(uint32_t,          u32Src,/*=*/ u32Imm,    1);
     3023                IEM_MC_ARG(uint32_t *,              pEFlags,                2);
    30273024                IEM_MC_REF_EFLAGS(pEFlags);
    30283025                IEM_MC_CALL_VOID_AIMPL_3(pfnAImplU32, pu32Dst, u32Src, pEFlags);
     
    30673064                IEM_MC_BEGIN(3, 1, IEM_MC_F_64BIT, 0);
    30683065                IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    3069                 IEM_MC_ARG(uint64_t *,      pu64Dst,            0);
    3070                 IEM_MC_ARG_CONST(uint64_t,  u64Src,/*=*/ u64Imm,1);
    3071                 IEM_MC_ARG(uint32_t *,      pEFlags,            2);
    3072                 IEM_MC_LOCAL(uint64_t,      u64Tmp);
    3073 
     3066                IEM_MC_LOCAL(uint64_t,              u64Tmp);
    30743067                IEM_MC_FETCH_GREG_U64(u64Tmp, IEM_GET_MODRM_RM(pVCpu, bRm));
    3075                 IEM_MC_REF_LOCAL(pu64Dst, u64Tmp);
     3068
     3069                IEM_MC_ARG_LOCAL_REF(uint64_t *,    pu64Dst,     u64Tmp,    0);
     3070                IEM_MC_ARG_CONST(uint64_t,          u64Src,/*=*/ u64Imm,    1);
     3071                IEM_MC_ARG(uint32_t *,              pEFlags,                2);
    30763072                IEM_MC_REF_EFLAGS(pEFlags);
    30773073                IEM_MC_CALL_VOID_AIMPL_3(pfnAImplU64, pu64Dst, u64Src, pEFlags);
     
    31743170                uint8_t u8Imm; IEM_OPCODE_GET_NEXT_U8(&u8Imm);
    31753171                IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    3176                 IEM_MC_ARG(uint16_t *,      pu16Dst,                    0);
    3177                 IEM_MC_ARG_CONST(uint16_t,  u16Src,/*=*/ (int8_t)u8Imm, 1);
    3178                 IEM_MC_ARG(uint32_t *,      pEFlags,                    2);
    3179                 IEM_MC_LOCAL(uint16_t,      u16Tmp);
    3180 
     3172
     3173                IEM_MC_LOCAL(uint16_t,              u16Tmp);
    31813174                IEM_MC_FETCH_GREG_U16(u16Tmp, IEM_GET_MODRM_RM(pVCpu, bRm));
    3182                 IEM_MC_REF_LOCAL(pu16Dst, u16Tmp);
     3175
     3176                IEM_MC_ARG_LOCAL_REF(uint16_t *,    pu16Dst,    u16Tmp,         0);
     3177                IEM_MC_ARG_CONST(uint16_t,          u16Src,/*=*/ (int8_t)u8Imm, 1);
     3178                IEM_MC_ARG(uint32_t *,              pEFlags,                    2);
    31833179                IEM_MC_REF_EFLAGS(pEFlags);
    31843180                IEM_MC_CALL_VOID_AIMPL_3(pfnAImplU16, pu16Dst, u16Src, pEFlags);
     
    32243220                IEM_MC_BEGIN(3, 1, IEM_MC_F_MIN_386, 0);
    32253221                IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    3226                 IEM_MC_ARG(uint32_t *,      pu32Dst,                    0);
    3227                 IEM_MC_ARG_CONST(uint32_t,  u32Src,/*=*/ (int8_t)u8Imm, 1);
    3228                 IEM_MC_ARG(uint32_t *,      pEFlags,                    2);
    32293222                IEM_MC_LOCAL(uint32_t,      u32Tmp);
    3230 
    32313223                IEM_MC_FETCH_GREG_U32(u32Tmp, IEM_GET_MODRM_RM(pVCpu, bRm));
    3232                 IEM_MC_REF_LOCAL(pu32Dst, u32Tmp);
     3224
     3225                IEM_MC_ARG_LOCAL_REF(uint32_t *,    pu32Dst,            u32Tmp, 0);
     3226                IEM_MC_ARG_CONST(uint32_t,          u32Src,/*=*/ (int8_t)u8Imm, 1);
     3227                IEM_MC_ARG(uint32_t *,              pEFlags,                    2);
    32333228                IEM_MC_REF_EFLAGS(pEFlags);
    32343229                IEM_MC_CALL_VOID_AIMPL_3(pfnAImplU32, pu32Dst, u32Src, pEFlags);
     
    32733268                IEM_MC_BEGIN(3, 1, IEM_MC_F_64BIT, 0);
    32743269                IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    3275                 IEM_MC_ARG(uint64_t *,      pu64Dst,                                0);
    3276                 IEM_MC_ARG_CONST(uint64_t,  u64Src, /*=*/ (int64_t)(int8_t)u8Imm,   1);
    3277                 IEM_MC_ARG(uint32_t *,      pEFlags,                                2);
    32783270                IEM_MC_LOCAL(uint64_t,      u64Tmp);
    3279 
    32803271                IEM_MC_FETCH_GREG_U64(u64Tmp, IEM_GET_MODRM_RM(pVCpu, bRm));
    3281                 IEM_MC_REF_LOCAL(pu64Dst, u64Tmp);
     3272
     3273                IEM_MC_ARG_LOCAL_REF(uint64_t *,    pu64Dst,                       u64Tmp,  0);
     3274                IEM_MC_ARG_CONST(uint64_t,          u64Src, /*=*/ (int64_t)(int8_t)u8Imm,   1);
     3275                IEM_MC_ARG(uint32_t *,              pEFlags,                                2);
    32823276                IEM_MC_REF_EFLAGS(pEFlags);
    32833277                IEM_MC_CALL_VOID_AIMPL_3(pfnAImplU64, pu64Dst, u64Src, pEFlags);
     
    69346928        IEM_MC_BEGIN(3, 3, a_fMcFlags, 0); \
    69356929        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); \
    6936         IEM_MC_ARG(uint##ValBits##_t *, puValue1, 0); \
    6937         IEM_MC_ARG(uint##ValBits##_t,   uValue2,  1); \
    6938         IEM_MC_ARG(uint32_t *,          pEFlags,  2); \
     6930        \
     6931        IEM_MC_LOCAL(RTGCPTR,           uAddr1); \
     6932        IEM_MC_FETCH_GREG_U##AddrBits##_ZX_U64(uAddr1, X86_GREG_xSI); \
    69396933        IEM_MC_LOCAL(uint##ValBits##_t, uValue1); \
    6940         IEM_MC_LOCAL(RTGCPTR,           uAddr); \
     6934        IEM_MC_FETCH_MEM_U##ValBits(uValue1, pVCpu->iem.s.iEffSeg, uAddr1); \
    69416935        \
    6942         IEM_MC_FETCH_GREG_U##AddrBits##_ZX_U64(uAddr, X86_GREG_xSI); \
    6943         IEM_MC_FETCH_MEM_U##ValBits(uValue1, pVCpu->iem.s.iEffSeg, uAddr); \
    6944         IEM_MC_FETCH_GREG_U##AddrBits##_ZX_U64(uAddr, X86_GREG_xDI); \
    6945         IEM_MC_FETCH_MEM_U##ValBits(uValue2, X86_SREG_ES, uAddr); \
    6946         IEM_MC_REF_LOCAL(puValue1, uValue1); \
     6936        IEM_MC_LOCAL(RTGCPTR,           uAddr2); \
     6937        IEM_MC_FETCH_GREG_U##AddrBits##_ZX_U64(uAddr2, X86_GREG_xDI); \
     6938        IEM_MC_ARG(uint##ValBits##_t,               uValue2,            1); \
     6939        IEM_MC_FETCH_MEM_U##ValBits(uValue2, X86_SREG_ES, uAddr2); \
     6940        \
     6941        IEM_MC_ARG(uint32_t *,                      pEFlags,            2); \
    69476942        IEM_MC_REF_EFLAGS(pEFlags); \
     6943        IEM_MC_ARG_LOCAL_REF(uint##ValBits##_t *,   puValue1, uValue1,  0); \
    69486944        IEM_MC_CALL_VOID_AIMPL_3(iemAImpl_cmp_u##ValBits, puValue1, uValue2, pEFlags); \
    69496945        \
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