VirtualBox

Changeset 102896 in vbox for trunk/src/VBox/VMM/VMMAll


Ignore:
Timestamp:
Jan 16, 2024 12:23:05 PM (14 months ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
161118
Message:

VMM/IEM: Use standard binary assembly helper signature for ADCX and ADOX. Added them to tstIEMAImpl. bugref:9898

Location:
trunk/src/VBox/VMM/VMMAll
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/VMM/VMMAll/IEMAllAImpl.asm

    r102882 r102896  
    67316731;
    67326732; @param    A0      Pointer to the destination operand (input/output).
    6733 ; @param    A1      Pointer to the EFLAGS value (input/output).
    6734 ; @param    A2      32-bit source operand 1 (input).
     6733; @param    A1      32-bit source operand 1 (input).
     6734; @param    A2      Pointer to the EFLAGS value (input/output).
    67356735;
    67366736%macro IEMIMPL_ADX_32 2
     
    67386738        PROLOGUE_4_ARGS
    67396739
    6740         IEM_LOAD_FLAGS A1, %2, 0
    6741         %1      A2_32, [A0]
    6742         mov     [A0], A2_32
    6743         IEM_SAVE_FLAGS A1, %2, 0
     6740        IEM_LOAD_FLAGS A2, %2, 0
     6741        %1      A1_32, [A0]
     6742        mov     [A0], A1_32
     6743        IEM_SAVE_FLAGS A2, %2, 0
    67446744
    67456745        EPILOGUE_4_ARGS
     
    67516751;
    67526752; @param    A0      Pointer to the destination operand (input/output).
    6753 ; @param    A1      Pointer to the EFLAGS value (input/output).
    6754 ; @param    A2      64-bit source operand 1 (input).
     6753; @param    A1      64-bit source operand 1 (input).
     6754; @param    A2      Pointer to the EFLAGS value (input/output).
    67556755;
    67566756%macro IEMIMPL_ADX_64 2
     
    67586758        PROLOGUE_4_ARGS
    67596759
    6760         IEM_LOAD_FLAGS A1, %2, 0
    6761         %1      A2, [A0]
    6762         mov     [A0], A2
    6763         IEM_SAVE_FLAGS A1, %2, 0
     6760        IEM_LOAD_FLAGS A2, %2, 0
     6761        %1      A1, [A0]
     6762        mov     [A0], A1
     6763        IEM_SAVE_FLAGS A2, %2, 0
    67646764
    67656765        EPILOGUE_4_ARGS
  • trunk/src/VBox/VMM/VMMAll/IEMAllAImplC.cpp

    r102887 r102896  
    1858718587    while (0)
    1858818588
    18589 IEM_DECL_IMPL_DEF(void, iemAImpl_adcx_u32_fallback,(uint32_t *puDst, uint32_t *pfEFlags, uint32_t uSrc))
     18589IEM_DECL_IMPL_DEF(void, iemAImpl_adcx_u32_fallback,(uint32_t *puDst, uint32_t uSrc, uint32_t *pfEFlags))
    1859018590{
    1859118591    ADX_EMIT(X86_EFL_CF, uint32_t, UINT32_MAX);
    1859218592}
    1859318593
    18594 IEM_DECL_IMPL_DEF(void, iemAImpl_adcx_u64_fallback,(uint64_t *puDst, uint32_t *pfEFlags, uint64_t uSrc))
     18594IEM_DECL_IMPL_DEF(void, iemAImpl_adcx_u64_fallback,(uint64_t *puDst, uint64_t uSrc, uint32_t *pfEFlags))
    1859518595{
    1859618596    ADX_EMIT(X86_EFL_CF, uint64_t, UINT64_MAX);
    1859718597}
     18598
     18599# if defined(IEM_WITHOUT_ASSEMBLY)
     18600
     18601IEM_DECL_IMPL_DEF(void, iemAImpl_adcx_u32,(uint32_t *puDst, uint32_t uSrc, uint32_t *pfEFlags))
     18602{
     18603    ADX_EMIT(X86_EFL_CF, uint32_t, UINT32_MAX);
     18604}
     18605
     18606IEM_DECL_IMPL_DEF(void, iemAImpl_adcx_u64,(uint64_t *puDst, uint64_t uSrc, uint32_t *pfEFlags))
     18607{
     18608    ADX_EMIT(X86_EFL_CF, uint64_t, UINT64_MAX);
     18609}
     18610
     18611#endif
    1859818612
    1859918613
     
    1860118615 * ADOX
    1860218616 */
    18603 IEM_DECL_IMPL_DEF(void, iemAImpl_adox_u32_fallback,(uint32_t *puDst, uint32_t *pfEFlags, uint32_t uSrc))
     18617IEM_DECL_IMPL_DEF(void, iemAImpl_adox_u32_fallback,(uint32_t *puDst, uint32_t uSrc, uint32_t *pfEFlags))
    1860418618{
    1860518619    ADX_EMIT(X86_EFL_OF, uint32_t, UINT32_MAX);
    1860618620}
    1860718621
    18608 IEM_DECL_IMPL_DEF(void, iemAImpl_adox_u64_fallback,(uint64_t *puDst, uint32_t *pfEFlags, uint64_t uSrc))
     18622IEM_DECL_IMPL_DEF(void, iemAImpl_adox_u64_fallback,(uint64_t *puDst, uint64_t uSrc, uint32_t *pfEFlags))
    1860918623{
    1861018624    ADX_EMIT(X86_EFL_OF, uint64_t, UINT64_MAX);
    1861118625}
     18626
     18627# if defined(IEM_WITHOUT_ASSEMBLY)
     18628
     18629IEM_DECL_IMPL_DEF(void, iemAImpl_adox_u32,(uint32_t *puDst, uint32_t uSrc, uint32_t *pfEFlags))
     18630{
     18631    ADX_EMIT(X86_EFL_OF, uint32_t, UINT32_MAX);
     18632}
     18633
     18634IEM_DECL_IMPL_DEF(void, iemAImpl_adox_u64,(uint64_t *puDst, uint64_t uSrc, uint32_t *pfEFlags))
     18635{
     18636    ADX_EMIT(X86_EFL_OF, uint64_t, UINT64_MAX);
     18637}
     18638
     18639# endif
    1861218640
    1861318641
  • trunk/src/VBox/VMM/VMMAll/IEMAllInstThree0f38.cpp.h

    r102331 r102896  
    20782078                IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); \
    20792079                IEM_MC_ARG(uint64_t *,      pu64Dst,                0); \
    2080                 IEM_MC_ARG(uint32_t *,      pEFlags,                1); \
    2081                 IEM_MC_ARG(uint64_t,        u64Src,                 2); \
     2080                IEM_MC_ARG(uint64_t,        u64Src,                 1); \
     2081                IEM_MC_ARG(uint32_t *,      pEFlags,                2); \
    20822082                IEM_MC_FETCH_GREG_U64(u64Src, IEM_GET_MODRM_RM(pVCpu, bRm)); \
    20832083                IEM_MC_REF_GREG_U64(pu64Dst, IEM_GET_MODRM_REG(pVCpu, bRm)); \
    20842084                IEM_MC_REF_EFLAGS(pEFlags); \
    20852085                IEM_MC_CALL_VOID_AIMPL_3(IEM_SELECT_HOST_OR_FALLBACK(fAdx, iemAImpl_## a_Variant ##_u64, iemAImpl_## a_Variant ##_u64_fallback), \
    2086                                          pu64Dst, pEFlags, u64Src); \
     2086                                         pu64Dst, u64Src, pEFlags); \
    20872087                IEM_MC_ADVANCE_RIP_AND_FINISH(); \
    20882088                IEM_MC_END(); \
     
    20922092                IEM_MC_BEGIN(3, 1, IEM_MC_F_64BIT, 0); \
    20932093                IEM_MC_ARG(uint64_t *,      pu64Dst,                0); \
    2094                 IEM_MC_ARG(uint32_t *,      pEFlags,                1); \
    2095                 IEM_MC_ARG(uint64_t,        u64Src,                 2); \
     2094                IEM_MC_ARG(uint64_t,        u64Src,                 1); \
     2095                IEM_MC_ARG(uint32_t *,      pEFlags,                2); \
    20962096                IEM_MC_LOCAL(RTGCPTR,   GCPtrEffSrc); \
    20972097                IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffSrc, bRm, 1); \
     
    21012101                IEM_MC_REF_EFLAGS(pEFlags); \
    21022102                IEM_MC_CALL_VOID_AIMPL_3(IEM_SELECT_HOST_OR_FALLBACK(fAdx, iemAImpl_## a_Variant ##_u64, iemAImpl_## a_Variant ##_u64_fallback), \
    2103                                          pu64Dst, pEFlags, u64Src); \
     2103                                         pu64Dst, u64Src, pEFlags); \
    21042104                IEM_MC_ADVANCE_RIP_AND_FINISH(); \
    21052105                IEM_MC_END(); \
     
    21132113                IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); \
    21142114                IEM_MC_ARG(uint32_t *,      pu32Dst,                0); \
    2115                 IEM_MC_ARG(uint32_t *,      pEFlags,                1); \
    2116                 IEM_MC_ARG(uint32_t,        u32Src,                 2); \
     2115                IEM_MC_ARG(uint32_t,        u32Src,                 1); \
     2116                IEM_MC_ARG(uint32_t *,      pEFlags,                2); \
    21172117                IEM_MC_FETCH_GREG_U32(u32Src, IEM_GET_MODRM_RM(pVCpu, bRm)); \
    21182118                IEM_MC_REF_GREG_U32(pu32Dst, IEM_GET_MODRM_REG(pVCpu, bRm)); \
    21192119                IEM_MC_REF_EFLAGS(pEFlags); \
    21202120                IEM_MC_CALL_VOID_AIMPL_3(IEM_SELECT_HOST_OR_FALLBACK(fAdx, iemAImpl_## a_Variant ##_u32, iemAImpl_## a_Variant ##_u32_fallback), \
    2121                                          pu32Dst, pEFlags, u32Src); \
     2121                                         pu32Dst, u32Src, pEFlags); \
    21222122                IEM_MC_ADVANCE_RIP_AND_FINISH(); \
    21232123                IEM_MC_END(); \
     
    21272127                IEM_MC_BEGIN(3, 1, IEM_MC_F_NOT_286_OR_OLDER, 0); \
    21282128                IEM_MC_ARG(uint32_t *,      pu32Dst,                0); \
    2129                 IEM_MC_ARG(uint32_t *,      pEFlags,                1); \
    2130                 IEM_MC_ARG(uint32_t,        u32Src,                 2); \
     2129                IEM_MC_ARG(uint32_t,        u32Src,                 1); \
     2130                IEM_MC_ARG(uint32_t *,      pEFlags,                2); \
    21312131                IEM_MC_LOCAL(RTGCPTR,   GCPtrEffSrc); \
    21322132                IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffSrc, bRm, 1); \
     
    21362136                IEM_MC_REF_EFLAGS(pEFlags); \
    21372137                IEM_MC_CALL_VOID_AIMPL_3(IEM_SELECT_HOST_OR_FALLBACK(fAdx, iemAImpl_## a_Variant ##_u32, iemAImpl_## a_Variant ##_u32_fallback), \
    2138                                          pu32Dst, pEFlags, u32Src); \
     2138                                         pu32Dst, u32Src, pEFlags); \
    21392139                IEM_MC_ADVANCE_RIP_AND_FINISH(); \
    21402140                IEM_MC_END(); \
Note: See TracChangeset for help on using the changeset viewer.

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