VirtualBox

Ignore:
Timestamp:
Apr 5, 2024 9:31:16 PM (11 months ago)
Author:
vboxsync
Message:

VMM/IEM: Refactoring assembly helpers to not pass eflags by reference but instead by value and return the updated value (via eax/w0) - fifth chunk: BLSI, BLSR, BLSMSK. bugref:10376

File:
1 edited

Legend:

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

    r104192 r104209  
    18221822            IEM_MC_BEGIN(IEM_MC_F_64BIT, 0); \
    18231823            IEMOP_HLP_DONE_VEX_DECODING_L0_EX(fBmi1); \
    1824             IEM_MC_ARG(uint64_t *,          pDst,    0); \
    1825             IEM_MC_ARG(uint64_t,            uSrc,    1); \
    1826             IEM_MC_ARG(uint32_t *,          pEFlags, 2); \
     1824            IEM_MC_ARG(uint64_t,            uSrc,       2); \
    18271825            IEM_MC_FETCH_GREG_U64(uSrc, IEM_GET_MODRM_RM(pVCpu, bRm)); \
     1826            IEM_MC_ARG(uint64_t *,          pDst,       1); \
    18281827            IEM_MC_REF_GREG_U64(pDst,   IEM_GET_EFFECTIVE_VVVV(pVCpu)); \
    1829             IEM_MC_REF_EFLAGS(pEFlags); \
    1830             IEM_MC_CALL_VOID_AIMPL_3(IEM_SELECT_HOST_OR_FALLBACK(fBmi1, iemAImpl_ ## a_Instr ## _u64, \
    1831                                                                  iemAImpl_ ## a_Instr ## _u64_fallback), pDst, uSrc, pEFlags); \
     1828            IEM_MC_ARG_EFLAGS(              fEFlagsIn,  0); \
     1829            IEM_MC_CALL_AIMPL_3(uint32_t, fEFlagsRet, \
     1830                                IEM_SELECT_HOST_OR_FALLBACK(fBmi1, iemAImpl_ ## a_Instr ## _u64, \
     1831                                                                   iemAImpl_ ## a_Instr ## _u64_fallback), fEFlagsIn, pDst, uSrc); \
     1832            IEM_MC_COMMIT_EFLAGS(fEFlagsRet); \
    18321833            IEM_MC_ADVANCE_RIP_AND_FINISH(); \
    18331834            IEM_MC_END(); \
     
    18371838            IEM_MC_BEGIN(IEM_MC_F_NOT_286_OR_OLDER, 0); \
    18381839            IEMOP_HLP_DONE_VEX_DECODING_L0_EX(fBmi1); \
    1839             IEM_MC_ARG(uint32_t *,          pDst,    0); \
    1840             IEM_MC_ARG(uint32_t,            uSrc,    1); \
    1841             IEM_MC_ARG(uint32_t *,          pEFlags, 2); \
     1840            IEM_MC_ARG(uint32_t,            uSrc,       2); \
    18421841            IEM_MC_FETCH_GREG_U32(uSrc, IEM_GET_MODRM_RM(pVCpu, bRm)); \
     1842            IEM_MC_ARG(uint32_t *,          pDst,       1); \
    18431843            IEM_MC_REF_GREG_U32(pDst,   IEM_GET_EFFECTIVE_VVVV(pVCpu)); \
    1844             IEM_MC_REF_EFLAGS(pEFlags); \
    1845             IEM_MC_CALL_VOID_AIMPL_3(IEM_SELECT_HOST_OR_FALLBACK(fBmi1, iemAImpl_ ## a_Instr ## _u32, \
    1846                                                                  iemAImpl_ ## a_Instr ## _u32_fallback), pDst, uSrc, pEFlags); \
     1844            IEM_MC_ARG_EFLAGS(              fEFlagsIn,  0); \
     1845            IEM_MC_CALL_AIMPL_3(uint32_t, fEFlagsRet, \
     1846                                IEM_SELECT_HOST_OR_FALLBACK(fBmi1, iemAImpl_ ## a_Instr ## _u32, \
     1847                                                                   iemAImpl_ ## a_Instr ## _u32_fallback), fEFlagsIn, pDst, uSrc); \
    18471848            IEM_MC_CLEAR_HIGH_GREG_U64(IEM_GET_EFFECTIVE_VVVV(pVCpu)); \
     1849            IEM_MC_COMMIT_EFLAGS(fEFlagsRet); \
    18481850            IEM_MC_ADVANCE_RIP_AND_FINISH(); \
    18491851            IEM_MC_END(); \
     
    18581860        { \
    18591861            IEM_MC_BEGIN(IEM_MC_F_64BIT, 0); \
    1860             IEM_MC_ARG(uint64_t *,          pDst,    0); \
    1861             IEM_MC_ARG(uint64_t,            uSrc,    1); \
    1862             IEM_MC_ARG(uint32_t *,          pEFlags, 2); \
    18631862            IEM_MC_LOCAL(RTGCPTR,           GCPtrEffSrc); \
    18641863            IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffSrc, bRm, 0); \
    18651864            IEMOP_HLP_DONE_VEX_DECODING_L0_EX(fBmi1); \
     1865            \
     1866            IEM_MC_ARG(uint64_t,            uSrc,       2); \
    18661867            IEM_MC_FETCH_MEM_U64(uSrc, pVCpu->iem.s.iEffSeg, GCPtrEffSrc); \
     1868            IEM_MC_ARG(uint64_t *,          pDst,       1); \
    18671869            IEM_MC_REF_GREG_U64(pDst,  IEM_GET_EFFECTIVE_VVVV(pVCpu)); \
    1868             IEM_MC_REF_EFLAGS(pEFlags); \
    1869             IEM_MC_CALL_VOID_AIMPL_3(IEM_SELECT_HOST_OR_FALLBACK(fBmi1, iemAImpl_ ## a_Instr ## _u64, \
    1870                                                                  iemAImpl_ ## a_Instr ## _u64_fallback), pDst, uSrc, pEFlags); \
     1870            IEM_MC_ARG_EFLAGS(              fEFlagsIn,  0); \
     1871            IEM_MC_CALL_AIMPL_3(uint32_t, fEFlagsRet, \
     1872                                IEM_SELECT_HOST_OR_FALLBACK(fBmi1, iemAImpl_ ## a_Instr ## _u64, \
     1873                                                                   iemAImpl_ ## a_Instr ## _u64_fallback), fEFlagsIn, pDst, uSrc); \
     1874            IEM_MC_COMMIT_EFLAGS(fEFlagsRet); \
    18711875            IEM_MC_ADVANCE_RIP_AND_FINISH(); \
    18721876            IEM_MC_END(); \
     
    18751879        { \
    18761880            IEM_MC_BEGIN(IEM_MC_F_NOT_286_OR_OLDER, 0); \
    1877             IEM_MC_ARG(uint32_t *,          pDst,    0); \
    1878             IEM_MC_ARG(uint32_t,            uSrc,    1); \
    1879             IEM_MC_ARG(uint32_t *,          pEFlags, 2); \
    18801881            IEM_MC_LOCAL(RTGCPTR,           GCPtrEffSrc); \
    18811882            IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffSrc, bRm, 0); \
    18821883            IEMOP_HLP_DONE_VEX_DECODING_L0_EX(fBmi1); \
     1884            \
     1885            IEM_MC_ARG(uint32_t,            uSrc,       2); \
    18831886            IEM_MC_FETCH_MEM_U32(uSrc, pVCpu->iem.s.iEffSeg, GCPtrEffSrc); \
     1887            IEM_MC_ARG(uint32_t *,          pDst,       1); \
    18841888            IEM_MC_REF_GREG_U32(pDst,  IEM_GET_EFFECTIVE_VVVV(pVCpu)); \
    1885             IEM_MC_REF_EFLAGS(pEFlags); \
    1886             IEM_MC_CALL_VOID_AIMPL_3(IEM_SELECT_HOST_OR_FALLBACK(fBmi1, iemAImpl_ ## a_Instr ## _u32, \
    1887                                                                  iemAImpl_ ## a_Instr ## _u32_fallback), pDst, uSrc, pEFlags); \
     1889            IEM_MC_ARG_EFLAGS(              fEFlagsIn,  0); \
     1890            IEM_MC_CALL_AIMPL_3(uint32_t, fEFlagsRet, \
     1891                                IEM_SELECT_HOST_OR_FALLBACK(fBmi1, iemAImpl_ ## a_Instr ## _u32, \
     1892                                                                   iemAImpl_ ## a_Instr ## _u32_fallback), fEFlagsIn, pDst, uSrc); \
    18881893            IEM_MC_CLEAR_HIGH_GREG_U64(IEM_GET_EFFECTIVE_VVVV(pVCpu)); \
     1894            IEM_MC_COMMIT_EFLAGS(fEFlagsRet); \
    18891895            IEM_MC_ADVANCE_RIP_AND_FINISH(); \
    18901896            IEM_MC_END(); \
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