VirtualBox

Changeset 101954 in vbox for trunk


Ignore:
Timestamp:
Nov 8, 2023 2:31:04 AM (16 months ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
160051
Message:

VMM/IEM: Eliminated IEM_MC_ASSIGN_U8_SX_U64 and IEM_MC_ASSIGN_U32_SX_U64. bugref:10371

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

Legend:

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

    r101949 r101954  
    30423042                /* memory operand */
    30433043                IEM_MC_BEGIN(3, 2, IEM_MC_F_64BIT, 0);
    3044                 IEM_MC_ARG(uint64_t *,      pu64Dst,            0);
    3045                 IEM_MC_ARG(uint64_t,        u64Src,             1);
    3046                 IEM_MC_ARG(uint32_t *,      pEFlags,            2);
     3044                IEM_MC_LOCAL(RTGCPTR,  GCPtrEffDst);
     3045                IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffDst, bRm, 4);
     3046
     3047                uint32_t u32Imm; IEM_OPCODE_GET_NEXT_U32(&u32Imm); /* Not using IEM_OPCODE_GET_NEXT_S32_SX_U64 to reduce the */
     3048                IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();          /* parameter count for the threaded function for this block. */
     3049
    30473050                IEM_MC_LOCAL(uint64_t,      u64Tmp);
    3048                 IEM_MC_LOCAL(RTGCPTR,  GCPtrEffDst);
    3049 
    3050                 IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffDst, bRm, 4);
    3051                 uint32_t u32Imm; IEM_OPCODE_GET_NEXT_U32(&u32Imm); /* Not using IEM_OPCODE_GET_NEXT_S32_SX_U64 to reduce the */
    3052                 IEM_MC_ASSIGN_U32_SX_U64(u64Src, u32Imm);          /* parameter count for the threaded function for this block. */
    3053                 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    30543051                IEM_MC_FETCH_MEM_U64(u64Tmp, pVCpu->iem.s.iEffSeg, GCPtrEffDst);
    3055                 IEM_MC_REF_LOCAL(pu64Dst, u64Tmp);
     3052
     3053                IEM_MC_ARG_LOCAL_REF(uint64_t *,    pu64Dst,      u64Tmp,                   0);
     3054                IEM_MC_ARG_CONST(uint64_t,          u64Src, /*=*/ (int64_t)(int32_t)u32Imm, 1);
     3055                IEM_MC_ARG(uint32_t *,              pEFlags,                                2);
    30563056                IEM_MC_REF_EFLAGS(pEFlags);
    30573057                IEM_MC_CALL_VOID_AIMPL_3(pfnAImplU64, pu64Dst, u64Src, pEFlags);
     
    32273227                IEM_MC_BEGIN(3, 1, IEM_MC_F_64BIT, 0);
    32283228                IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    3229                 IEM_MC_ARG(uint64_t *,      pu64Dst,                    0);
    3230                 IEM_MC_ARG_CONST(uint64_t,  u64Src,/*=*/ (int8_t)u8Imm, 1);
    3231                 IEM_MC_ARG(uint32_t *,      pEFlags,                    2);
     3229                IEM_MC_ARG(uint64_t *,      pu64Dst,                                0);
     3230                IEM_MC_ARG_CONST(uint64_t,  u64Src, /*=*/ (int64_t)(int8_t)u8Imm,  1);
     3231                IEM_MC_ARG(uint32_t *,      pEFlags,                                2);
    32323232                IEM_MC_LOCAL(uint64_t,      u64Tmp);
    32333233
     
    32453245                /* memory operand */
    32463246                IEM_MC_BEGIN(3, 2, IEM_MC_F_64BIT, 0);
    3247                 IEM_MC_ARG(uint64_t *,      pu64Dst,                    0);
    3248                 IEM_MC_ARG(uint64_t,        u64Src,                     1);
    3249                 IEM_MC_ARG(uint32_t *,      pEFlags,                    2);
     3247                IEM_MC_LOCAL(RTGCPTR,  GCPtrEffDst);
     3248                IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffDst, bRm, 1);
     3249
     3250                uint8_t u8Imm; IEM_OPCODE_GET_NEXT_U8(&u8Imm); /* Not using IEM_OPCODE_GET_NEXT_S8_SX_U64 to reduce the threaded parameter count. */
     3251                IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
     3252
    32503253                IEM_MC_LOCAL(uint64_t,      u64Tmp);
    3251                 IEM_MC_LOCAL(RTGCPTR,  GCPtrEffDst);
    3252 
    3253                 IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffDst, bRm, 1);
    3254                 uint8_t u8Imm; IEM_OPCODE_GET_NEXT_U8(&u8Imm); /* Not using IEM_OPCODE_GET_NEXT_S8_SX_U64 to reduce the */
    3255                 IEM_MC_ASSIGN_U8_SX_U64(u64Src, u8Imm);        /* parameter count for the threaded function for this block. */
    3256                 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    32573254                IEM_MC_FETCH_MEM_U64(u64Tmp, pVCpu->iem.s.iEffSeg, GCPtrEffDst);
    3258                 IEM_MC_REF_LOCAL(pu64Dst, u64Tmp);
     3255
     3256                IEM_MC_ARG_LOCAL_REF(uint64_t *,    pu64Dst,      u64Tmp,                   0);
     3257                IEM_MC_ARG_CONST(uint64_t,          u64Src, /*=*/ (int64_t)(int8_t)u8Imm,   1);
     3258                IEM_MC_ARG(uint32_t *,              pEFlags,                                2);
    32593259                IEM_MC_REF_EFLAGS(pEFlags);
    32603260                IEM_MC_CALL_VOID_AIMPL_3(pfnAImplU64, pu64Dst, u64Src, pEFlags);
     
    57205720            IEM_MC_BEGIN(0, 2, 0, 0);
    57215721            IEM_MC_LOCAL(RTGCPTR,  GCPtrEffSrc);
    5722             IEM_MC_LOCAL(uint16_t, u16Cast);
    57235722            IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffSrc, bRm, 0);
    57245723            IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
     5724            IEM_MC_LOCAL(uint16_t, u16Cast);
    57255725            IEM_MC_ASSIGN_TO_SMALLER(u16Cast, GCPtrEffSrc);
    57265726            IEM_MC_STORE_GREG_U16(IEM_GET_MODRM_REG(pVCpu, bRm), u16Cast);
     
    57325732            IEM_MC_BEGIN(0, 2, IEM_MC_F_MIN_386, 0);
    57335733            IEM_MC_LOCAL(RTGCPTR, GCPtrEffSrc);
    5734             IEM_MC_LOCAL(uint32_t, u32Cast);
    57355734            IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffSrc, bRm, 0);
    57365735            IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
     5736            IEM_MC_LOCAL(uint32_t, u32Cast);
    57375737            IEM_MC_ASSIGN_TO_SMALLER(u32Cast, GCPtrEffSrc);
    57385738            IEM_MC_STORE_GREG_U32(IEM_GET_MODRM_REG(pVCpu, bRm), u32Cast);
  • trunk/src/VBox/VMM/VMMAll/IEMAllInstPython.py

    r101953 r101954  
    27472747    'IEM_MC_ARG_LOCAL_REF':                                      (McBlock.parseMcArgLocalRef,       False, True,  ),
    27482748    'IEM_MC_ASSIGN_TO_SMALLER':                                  (McBlock.parseMcGeneric,           False, False, ),
    2749     'IEM_MC_ASSIGN_U8_SX_U64':                                   (McBlock.parseMcGeneric,           False, False, ),
    2750     'IEM_MC_ASSIGN_U32_SX_U64':                                  (McBlock.parseMcGeneric,           False, False, ),
    27512749    'IEM_MC_BEGIN':                                              (McBlock.parseMcBegin,             False, True,  ),
    27522750    'IEM_MC_BROADCAST_XREG_U16_ZX_VLMAX':                        (McBlock.parseMcGeneric,           True,  False, ),
  • trunk/src/VBox/VMM/include/IEMMc.h

    r101953 r101954  
    208208
    209209#define IEM_MC_ASSIGN_TO_SMALLER(a_VarOrArg, a_CVariableOrConst) (a_VarOrArg) = (a_CVariableOrConst)
    210 #define IEM_MC_ASSIGN_U8_SX_U64(a_u64VarOrArg, a_u8CVariableOrConst) \
    211    (a_u64VarOrArg) = (int8_t)(a_u8CVariableOrConst)
    212 #define IEM_MC_ASSIGN_U32_SX_U64(a_u64VarOrArg, a_u32CVariableOrConst) \
    213    (a_u64VarOrArg) = (int32_t)(a_u32CVariableOrConst)
    214210
    215211#define IEM_MC_FETCH_GREG_U8(a_u8Dst, a_iGReg)          (a_u8Dst)  = iemGRegFetchU8(pVCpu, (a_iGReg))
  • trunk/src/VBox/VMM/testcase/tstIEMCheckMc.cpp

    r101953 r101954  
    633633#define IEM_MC_COMMIT_EFLAGS(a_EFlags)                  do { CHK_TYPE(uint32_t, a_EFlags); (void)fMcBegin; } while (0)
    634634#define IEM_MC_ASSIGN_TO_SMALLER(a_VarOrArg, a_CVariableOrConst)    do { (a_VarOrArg) = (0); (void)fMcBegin; } while (0)
    635 #define IEM_MC_ASSIGN_U8_SX_U64(a_VarOrArg, a_CVariableOrConst)     do { (a_VarOrArg) = (0); (void)fMcBegin; } while (0)
    636 #define IEM_MC_ASSIGN_U32_SX_U64(a_VarOrArg, a_CVariableOrConst)    do { (a_VarOrArg) = (0); (void)fMcBegin; } while (0)
    637635
    638636#define IEM_MC_FETCH_GREG_U8(a_u8Dst, a_iGReg)          do { (a_u8Dst)  = 0; CHK_TYPE(uint8_t,  a_u8Dst);  CHK_GREG_IDX(a_iGReg); (void)fMcBegin; } while (0)
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