VirtualBox

Changeset 101850 in vbox for trunk/src


Ignore:
Timestamp:
Nov 6, 2023 10:13:31 AM (19 months ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
159946
Message:

VMM/IEM: Replaced all IEM_MC_CLEAR_HIGH_GREG_U64_BY_REF use with IEM_MC_CLEAR_HIGH_GREG_U64 and removed the MC, as it forced argument variables to be used after IEM_MC_CALL_XXXX which made recompiling more complicated. bugref:10371

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

Legend:

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

    r101387 r101850  
    7878                \
    7979                if (a_fModifiesDstReg) \
    80                     IEM_MC_CLEAR_HIGH_GREG_U64_BY_REF(pu32Dst); \
     80                    IEM_MC_CLEAR_HIGH_GREG_U64(IEM_GET_MODRM_REG(pVCpu, bRm)); \
    8181                IEM_MC_ADVANCE_RIP_AND_FINISH(); \
    8282                IEM_MC_END(); \
     
    142142                \
    143143                if (a_fModifiesDstReg) \
    144                     IEM_MC_CLEAR_HIGH_GREG_U64_BY_REF(pu32Dst); \
     144                    IEM_MC_CLEAR_HIGH_GREG_U64(IEM_GET_MODRM_REG(pVCpu, bRm)); \
    145145                IEM_MC_ADVANCE_RIP_AND_FINISH(); \
    146146                IEM_MC_END(); \
  • trunk/src/VBox/VMM/VMMAll/IEMAllInstOneByte.cpp.h

    r101707 r101850  
    299299                IEM_MC_CALL_VOID_AIMPL_3(a_fnNormalU32, pu32Dst, u32Src, pEFlags); \
    300300                \
    301                 IEM_MC_CLEAR_HIGH_GREG_U64_BY_REF(pu32Dst); \
     301                IEM_MC_CLEAR_HIGH_GREG_U64(IEM_GET_MODRM_RM(pVCpu, bRm)); \
    302302                IEM_MC_ADVANCE_RIP_AND_FINISH(); \
    303303                IEM_MC_END(); \
     
    687687            \
    688688            if (a_fModifiesDstReg) \
    689                 IEM_MC_CLEAR_HIGH_GREG_U64_BY_REF(pu32Dst); \
     689                IEM_MC_CLEAR_HIGH_GREG_U64(X86_GREG_xAX); \
    690690            IEM_MC_ADVANCE_RIP_AND_FINISH(); \
    691691            IEM_MC_END(); \
     
    17881788            IEM_MC_REF_EFLAGS(pEFlags); \
    17891789            IEM_MC_CALL_VOID_AIMPL_2(a_fnNormalU32, pu32Dst, pEFlags); \
    1790             IEM_MC_CLEAR_HIGH_GREG_U64_BY_REF(pu32Dst); \
     1790            IEM_MC_CLEAR_HIGH_GREG_U64(a_iReg); \
    17911791            IEM_MC_ADVANCE_RIP_AND_FINISH(); \
    17921792            IEM_MC_END(); \
     
    23512351            IEM_MC_REF_GREG_U32(pu32Dst, iReg);
    23522352            IEM_MC_POP_U32(pu32Dst);
    2353             IEM_MC_CLEAR_HIGH_GREG_U64_BY_REF(pu32Dst); /** @todo testcase*/
     2353            IEM_MC_CLEAR_HIGH_GREG_U64(iReg); /** @todo testcase*/
    23542354            IEM_MC_ADVANCE_RIP_AND_FINISH();
    23552355            IEM_MC_END();
     
    41294129                IEM_MC_REF_EFLAGS(pEFlags); \
    41304130                IEM_MC_CALL_VOID_AIMPL_3(a_fnNormalU32, pu32Dst, u32Src, pEFlags); \
    4131                 IEM_MC_CLEAR_HIGH_GREG_U64_BY_REF(pu32Dst); \
     4131                IEM_MC_CLEAR_HIGH_GREG_U64(IEM_GET_MODRM_RM(pVCpu, bRm)); \
    41324132                \
    41334133                IEM_MC_ADVANCE_RIP_AND_FINISH(); \
     
    46454645                IEM_MC_REF_EFLAGS(pEFlags); \
    46464646                IEM_MC_CALL_VOID_AIMPL_3(a_fnNormalU32, pu32Dst, u32Src, pEFlags); \
    4647                 IEM_MC_CLEAR_HIGH_GREG_U64_BY_REF(pu32Dst); \
     4647                IEM_MC_CLEAR_HIGH_GREG_U64(IEM_GET_MODRM_RM(pVCpu, bRm)); \
    46484648                \
    46494649                IEM_MC_ADVANCE_RIP_AND_FINISH(); \
     
    77337733                IEM_MC_REF_EFLAGS(pEFlags);
    77347734                IEM_MC_CALL_VOID_AIMPL_3(pImpl->pfnNormalU32, pu32Dst, cShiftArg, pEFlags);
    7735                 IEM_MC_CLEAR_HIGH_GREG_U64_BY_REF(pu32Dst);
     7735                IEM_MC_CLEAR_HIGH_GREG_U64(IEM_GET_MODRM_RM(pVCpu, bRm));
    77367736                IEM_MC_ADVANCE_RIP_AND_FINISH();
    77377737                IEM_MC_END();
     
    83308330                IEM_MC_REF_EFLAGS(pEFlags);
    83318331                IEM_MC_CALL_VOID_AIMPL_3(pImpl->pfnNormalU32, pu32Dst, cShiftArg, pEFlags);
    8332                 IEM_MC_CLEAR_HIGH_GREG_U64_BY_REF(pu32Dst);
     8332                IEM_MC_CLEAR_HIGH_GREG_U64(IEM_GET_MODRM_RM(pVCpu, bRm));
    83338333                IEM_MC_ADVANCE_RIP_AND_FINISH();
    83348334                IEM_MC_END();
     
    85338533                IEM_MC_REF_EFLAGS(pEFlags);
    85348534                IEM_MC_CALL_VOID_AIMPL_3(pImpl->pfnNormalU32, pu32Dst, cShiftArg, pEFlags);
    8535                 IEM_MC_CLEAR_HIGH_GREG_U64_BY_REF(pu32Dst);
     8535                IEM_MC_CLEAR_HIGH_GREG_U64(IEM_GET_MODRM_RM(pVCpu, bRm));
    85368536                IEM_MC_ADVANCE_RIP_AND_FINISH();
    85378537                IEM_MC_END();
     
    1245612456                IEM_MC_REF_EFLAGS(pEFlags); \
    1245712457                IEM_MC_CALL_VOID_AIMPL_2(a_fnNormalU32, pu32Dst, pEFlags); \
    12458                 IEM_MC_CLEAR_HIGH_GREG_U64_BY_REF(pu32Dst); \
     12458                IEM_MC_CLEAR_HIGH_GREG_U64(IEM_GET_MODRM_RM(pVCpu, bRm)); \
    1245912459                IEM_MC_ADVANCE_RIP_AND_FINISH(); \
    1246012460                IEM_MC_END(); \
     
    1276712767                IEM_MC_CALL_AIMPL_4(rc, pImpl->pfnU32, pu32AX, pu32DX, u32Value, pEFlags);
    1276812768                IEM_MC_IF_LOCAL_IS_Z(rc) {
    12769                     IEM_MC_CLEAR_HIGH_GREG_U64_BY_REF(pu32AX);
    12770                     IEM_MC_CLEAR_HIGH_GREG_U64_BY_REF(pu32DX);
     12769                    IEM_MC_CLEAR_HIGH_GREG_U64(X86_GREG_xAX);
     12770                    IEM_MC_CLEAR_HIGH_GREG_U64(X86_GREG_xDX);
    1277112771                    IEM_MC_ADVANCE_RIP_AND_FINISH();
    1277212772                } IEM_MC_ELSE() {
     
    1285012850                IEM_MC_CALL_AIMPL_4(rc, pImpl->pfnU32, pu32AX, pu32DX, u32Value, pEFlags);
    1285112851                IEM_MC_IF_LOCAL_IS_Z(rc) {
    12852                     IEM_MC_CLEAR_HIGH_GREG_U64_BY_REF(pu32AX);
    12853                     IEM_MC_CLEAR_HIGH_GREG_U64_BY_REF(pu32DX);
     12852                    IEM_MC_CLEAR_HIGH_GREG_U64(X86_GREG_xAX);
     12853                    IEM_MC_CLEAR_HIGH_GREG_U64(X86_GREG_xDX);
    1285412854                    IEM_MC_ADVANCE_RIP_AND_FINISH();
    1285512855                } IEM_MC_ELSE() {
  • trunk/src/VBox/VMM/VMMAll/IEMAllInstPython.py

    r101844 r101850  
    27812781    'IEM_MC_CLEAR_FSW_EX':                                       (McBlock.parseMcGeneric,           True,  False, ),
    27822782    'IEM_MC_CLEAR_HIGH_GREG_U64':                                (McBlock.parseMcGeneric,           True,  False, ),
    2783     'IEM_MC_CLEAR_HIGH_GREG_U64_BY_REF':                         (McBlock.parseMcGeneric,           True,  False, ),
    27842783    'IEM_MC_CLEAR_XREG_U32_MASK':                                (McBlock.parseMcGeneric,           True,  False, ),
    27852784    'IEM_MC_CLEAR_YREG_128_UP':                                  (McBlock.parseMcGeneric,           True,  False, ),
  • trunk/src/VBox/VMM/VMMAll/IEMAllInstThree0f38.cpp.h

    r101387 r101850  
    18231823        IEM_MC_FETCH_GREG_U8(uSrc,  IEM_GET_MODRM_RM(pVCpu, bRm));
    18241824        IEM_MC_CALL_VOID_AIMPL_2(IEM_SELECT_HOST_OR_FALLBACK(fSse42, iemAImpl_crc32_u8, iemAImpl_crc32_u8_fallback), puDst, uSrc);
    1825         IEM_MC_CLEAR_HIGH_GREG_U64_BY_REF(puDst);
     1825        IEM_MC_CLEAR_HIGH_GREG_U64(IEM_GET_MODRM_REG(pVCpu, bRm));
    18261826        IEM_MC_ADVANCE_RIP_AND_FINISH();
    18271827        IEM_MC_END();
     
    18431843        IEM_MC_REF_GREG_U32(puDst, IEM_GET_MODRM_REG(pVCpu, bRm));
    18441844        IEM_MC_CALL_VOID_AIMPL_2(IEM_SELECT_HOST_OR_FALLBACK(fSse42, iemAImpl_crc32_u8, iemAImpl_crc32_u8_fallback), puDst, uSrc);
    1845         IEM_MC_CLEAR_HIGH_GREG_U64_BY_REF(puDst);
     1845        IEM_MC_CLEAR_HIGH_GREG_U64(IEM_GET_MODRM_REG(pVCpu, bRm));
    18461846
    18471847        IEM_MC_ADVANCE_RIP_AND_FINISH();
     
    19431943                IEM_MC_CALL_VOID_AIMPL_2(IEM_SELECT_HOST_OR_FALLBACK(fSse42, iemAImpl_crc32_u16, iemAImpl_crc32_u16_fallback),
    19441944                                         puDst, uSrc);
    1945                 IEM_MC_CLEAR_HIGH_GREG_U64_BY_REF(puDst);
     1945                IEM_MC_CLEAR_HIGH_GREG_U64(IEM_GET_MODRM_REG(pVCpu, bRm));
    19461946                IEM_MC_ADVANCE_RIP_AND_FINISH();
    19471947                IEM_MC_END();
     
    19571957                IEM_MC_CALL_VOID_AIMPL_2(IEM_SELECT_HOST_OR_FALLBACK(fSse42, iemAImpl_crc32_u32, iemAImpl_crc32_u32_fallback),
    19581958                                         puDst, uSrc);
    1959                 IEM_MC_CLEAR_HIGH_GREG_U64_BY_REF(puDst);
     1959                IEM_MC_CLEAR_HIGH_GREG_U64(IEM_GET_MODRM_REG(pVCpu, bRm));
    19601960                IEM_MC_ADVANCE_RIP_AND_FINISH();
    19611961                IEM_MC_END();
     
    19711971                IEM_MC_CALL_VOID_AIMPL_2(IEM_SELECT_HOST_OR_FALLBACK(fSse42, iemAImpl_crc32_u64, iemAImpl_crc32_u64_fallback),
    19721972                                         puDst, uSrc);
    1973                 IEM_MC_CLEAR_HIGH_GREG_U64_BY_REF(puDst);
     1973                IEM_MC_CLEAR_HIGH_GREG_U64(IEM_GET_MODRM_REG(pVCpu, bRm));
    19741974                IEM_MC_ADVANCE_RIP_AND_FINISH();
    19751975                IEM_MC_END();
     
    19991999                IEM_MC_CALL_VOID_AIMPL_2(IEM_SELECT_HOST_OR_FALLBACK(fSse42, iemAImpl_crc32_u16, iemAImpl_crc32_u16_fallback),
    20002000                                         puDst, uSrc);
    2001                 IEM_MC_CLEAR_HIGH_GREG_U64_BY_REF(puDst);
     2001                IEM_MC_CLEAR_HIGH_GREG_U64(IEM_GET_MODRM_REG(pVCpu, bRm));
    20022002
    20032003                IEM_MC_ADVANCE_RIP_AND_FINISH();
     
    20182018                IEM_MC_CALL_VOID_AIMPL_2(IEM_SELECT_HOST_OR_FALLBACK(fSse42, iemAImpl_crc32_u32, iemAImpl_crc32_u32_fallback),
    20192019                                         puDst, uSrc);
    2020                 IEM_MC_CLEAR_HIGH_GREG_U64_BY_REF(puDst);
     2020                IEM_MC_CLEAR_HIGH_GREG_U64(IEM_GET_MODRM_REG(pVCpu, bRm));
    20212021
    20222022                IEM_MC_ADVANCE_RIP_AND_FINISH();
     
    20372037                IEM_MC_CALL_VOID_AIMPL_2(IEM_SELECT_HOST_OR_FALLBACK(fSse42, iemAImpl_crc32_u64, iemAImpl_crc32_u64_fallback),
    20382038                                         puDst, uSrc);
    2039                 IEM_MC_CLEAR_HIGH_GREG_U64_BY_REF(puDst);
     2039                IEM_MC_CLEAR_HIGH_GREG_U64(IEM_GET_MODRM_REG(pVCpu, bRm));
    20402040
    20412041                IEM_MC_ADVANCE_RIP_AND_FINISH();
  • trunk/src/VBox/VMM/VMMAll/IEMAllInstTwoByte0f.cpp.h

    r101802 r101850  
    89648964                IEM_MC_CALL_VOID_AIMPL_3(a_fnNormalU32, pu32Dst, u32Src, pEFlags); \
    89658965                \
    8966                 IEM_MC_CLEAR_HIGH_GREG_U64_BY_REF(pu32Dst); \
     8966                IEM_MC_CLEAR_HIGH_GREG_U64(IEM_GET_MODRM_RM(pVCpu, bRm)); \
    89678967                IEM_MC_ADVANCE_RIP_AND_FINISH(); \
    89688968                IEM_MC_END(); \
     
    94029402                IEM_MC_CALL_VOID_AIMPL_4(pImpl->pfnNormalU32, pu32Dst, u32Src, cShiftArg, pEFlags);
    94039403
    9404                 IEM_MC_CLEAR_HIGH_GREG_U64_BY_REF(pu32Dst);
     9404                IEM_MC_CLEAR_HIGH_GREG_U64(IEM_GET_MODRM_RM(pVCpu, bRm));
    94059405                IEM_MC_ADVANCE_RIP_AND_FINISH();
    94069406                IEM_MC_END();
     
    95539553                IEM_MC_CALL_VOID_AIMPL_4(pImpl->pfnNormalU32, pu32Dst, u32Src, cShiftArg, pEFlags);
    95549554
    9555                 IEM_MC_CLEAR_HIGH_GREG_U64_BY_REF(pu32Dst);
     9555                IEM_MC_CLEAR_HIGH_GREG_U64(IEM_GET_MODRM_RM(pVCpu, bRm));
    95569556                IEM_MC_ADVANCE_RIP_AND_FINISH();
    95579557                IEM_MC_END();
     
    1030310303
    1030410304                IEM_MC_IF_EFL_BIT_SET(X86_EFL_ZF) {
    10305                     IEM_MC_CLEAR_HIGH_GREG_U64_BY_REF(pu32Dst);
     10305                    IEM_MC_CLEAR_HIGH_GREG_U64(IEM_GET_MODRM_RM(pVCpu, bRm));
    1030610306                } IEM_MC_ELSE() {
    10307                     IEM_MC_CLEAR_HIGH_GREG_U64_BY_REF(pu32Eax);
     10307                    IEM_MC_CLEAR_HIGH_GREG_U64(X86_GREG_xAX);
    1030810308                } IEM_MC_ENDIF();
    1030910309
     
    1075710757                IEM_MC_CALL_VOID_AIMPL_3(a_fnNormalU32, pu32Dst, u32Src, pEFlags); \
    1075810758                \
    10759                 IEM_MC_CLEAR_HIGH_GREG_U64_BY_REF(pu32Dst); \
     10759                IEM_MC_CLEAR_HIGH_GREG_U64(IEM_GET_MODRM_RM(pVCpu, bRm)); \
    1076010760                IEM_MC_ADVANCE_RIP_AND_FINISH(); \
    1076110761                IEM_MC_END(); \
     
    1119511195                IEM_MC_CALL_VOID_AIMPL_3(pImpl->pfnNormalU32, pu32Dst, u32Src, pEFlags);
    1119611196                IEM_MC_IF_EFL_BIT_NOT_SET(X86_EFL_ZF) {
    11197                     IEM_MC_CLEAR_HIGH_GREG_U64_BY_REF(pu32Dst);
     11197                    IEM_MC_CLEAR_HIGH_GREG_U64(IEM_GET_MODRM_REG(pVCpu, bRm));
    1119811198                } IEM_MC_ENDIF();
    1119911199                IEM_MC_ADVANCE_RIP_AND_FINISH();
     
    1126011260
    1126111261                IEM_MC_IF_EFL_BIT_NOT_SET(X86_EFL_ZF) {
    11262                     IEM_MC_CLEAR_HIGH_GREG_U64_BY_REF(pu32Dst);
     11262                    IEM_MC_CLEAR_HIGH_GREG_U64(IEM_GET_MODRM_REG(pVCpu, bRm));
    1126311263                } IEM_MC_ENDIF();
    1126411264                IEM_MC_ADVANCE_RIP_AND_FINISH();
     
    1163311633                IEM_MC_CALL_VOID_AIMPL_3(iemAImpl_xadd_u32, pu32Dst, pu32Reg, pEFlags);
    1163411634
    11635                 IEM_MC_CLEAR_HIGH_GREG_U64_BY_REF(pu32Dst);
    11636                 IEM_MC_CLEAR_HIGH_GREG_U64_BY_REF(pu32Reg);
     11635                IEM_MC_CLEAR_HIGH_GREG_U64(IEM_GET_MODRM_RM(pVCpu, bRm));
     11636                IEM_MC_CLEAR_HIGH_GREG_U64(IEM_GET_MODRM_REG(pVCpu, bRm));
    1163711637                IEM_MC_ADVANCE_RIP_AND_FINISH();
    1163811638                IEM_MC_END();
     
    1274312743            IEM_MC_REF_GREG_U32(pu32Dst, iReg);
    1274412744            IEM_MC_CALL_VOID_AIMPL_1(iemAImpl_bswap_u32, pu32Dst);
    12745             IEM_MC_CLEAR_HIGH_GREG_U64_BY_REF(pu32Dst);
     12745            IEM_MC_CLEAR_HIGH_GREG_U64(iReg);
    1274612746            IEM_MC_ADVANCE_RIP_AND_FINISH();
    1274712747            IEM_MC_END();
  • trunk/src/VBox/VMM/VMMAll/IEMAllInstVexMap2.cpp.h

    r101387 r101850  
    16741674            IEM_MC_CALL_VOID_AIMPL_4(IEM_SELECT_HOST_OR_FALLBACK(fBmi1, iemAImpl_andn_u32, iemAImpl_andn_u32_fallback),
    16751675                                     pDst, uSrc1, uSrc2, pEFlags);
    1676             IEM_MC_CLEAR_HIGH_GREG_U64_BY_REF(pDst);
     1676            IEM_MC_CLEAR_HIGH_GREG_U64(IEM_GET_MODRM_REG(pVCpu, bRm));
    16771677            IEM_MC_ADVANCE_RIP_AND_FINISH();
    16781678            IEM_MC_END();
     
    17191719            IEM_MC_CALL_VOID_AIMPL_4(IEM_SELECT_HOST_OR_FALLBACK(fBmi1, iemAImpl_andn_u32, iemAImpl_andn_u32_fallback),
    17201720                                     pDst, uSrc1, uSrc2, pEFlags);
    1721             IEM_MC_CLEAR_HIGH_GREG_U64_BY_REF(pDst);
     1721            IEM_MC_CLEAR_HIGH_GREG_U64(IEM_GET_MODRM_REG(pVCpu, bRm));
    17221722            IEM_MC_ADVANCE_RIP_AND_FINISH();
    17231723            IEM_MC_END();
     
    17711771            IEM_MC_CALL_VOID_AIMPL_3(IEM_SELECT_HOST_OR_FALLBACK(fBmi1, iemAImpl_ ## a_Instr ## _u32, \
    17721772                                                                 iemAImpl_ ## a_Instr ## _u32_fallback), pDst, uSrc, pEFlags); \
    1773             IEM_MC_CLEAR_HIGH_GREG_U64_BY_REF(pDst); \
     1773            IEM_MC_CLEAR_HIGH_GREG_U64(IEM_GET_EFFECTIVE_VVVV(pVCpu)); \
    17741774            IEM_MC_ADVANCE_RIP_AND_FINISH(); \
    17751775            IEM_MC_END(); \
     
    18121812            IEM_MC_CALL_VOID_AIMPL_3(IEM_SELECT_HOST_OR_FALLBACK(fBmi1, iemAImpl_ ## a_Instr ## _u32, \
    18131813                                                                 iemAImpl_ ## a_Instr ## _u32_fallback), pDst, uSrc, pEFlags); \
    1814             IEM_MC_CLEAR_HIGH_GREG_U64_BY_REF(pDst); \
     1814            IEM_MC_CLEAR_HIGH_GREG_U64(IEM_GET_EFFECTIVE_VVVV(pVCpu)); \
    18151815            IEM_MC_ADVANCE_RIP_AND_FINISH(); \
    18161816            IEM_MC_END(); \
     
    19281928                                                                 iemAImpl_ ## a_Instr ## _u32_fallback), \
    19291929                                     pDst, uSrc1, uSrc2, pEFlags); \
    1930             IEM_MC_CLEAR_HIGH_GREG_U64_BY_REF(pDst); \
     1930            IEM_MC_CLEAR_HIGH_GREG_U64(IEM_GET_MODRM_REG(pVCpu, bRm)); \
    19311931            IEM_MC_ADVANCE_RIP_AND_FINISH(); \
    19321932            IEM_MC_END(); \
     
    19751975                                                                 iemAImpl_ ## a_Instr ## _u32_fallback), \
    19761976                                     pDst, uSrc1, uSrc2, pEFlags); \
    1977             IEM_MC_CLEAR_HIGH_GREG_U64_BY_REF(pDst); \
     1977            IEM_MC_CLEAR_HIGH_GREG_U64(IEM_GET_MODRM_REG(pVCpu, bRm)); \
    19781978            IEM_MC_ADVANCE_RIP_AND_FINISH(); \
    19791979            IEM_MC_END(); \
     
    20182018            IEM_MC_CALL_VOID_AIMPL_3(IEM_SELECT_HOST_OR_FALLBACK(a_fFeatureMember, iemAImpl_ ## a_Instr ## _u32, \
    20192019                                                                 iemAImpl_ ## a_Instr ## _u32_fallback), pDst, uSrc1, uSrc2); \
    2020             IEM_MC_CLEAR_HIGH_GREG_U64_BY_REF(pDst); \
     2020            IEM_MC_CLEAR_HIGH_GREG_U64(IEM_GET_MODRM_REG(pVCpu, bRm)); \
    20212021            IEM_MC_ADVANCE_RIP_AND_FINISH(); \
    20222022            IEM_MC_END(); \
     
    20592059            IEM_MC_CALL_VOID_AIMPL_3(IEM_SELECT_HOST_OR_FALLBACK(a_fFeatureMember, iemAImpl_ ## a_Instr ## _u32, \
    20602060                                                                 iemAImpl_ ## a_Instr ## _u32_fallback), pDst, uSrc1, uSrc2); \
    2061             IEM_MC_CLEAR_HIGH_GREG_U64_BY_REF(pDst); \
     2061            IEM_MC_CLEAR_HIGH_GREG_U64(IEM_GET_MODRM_REG(pVCpu, bRm)); \
    20622062            IEM_MC_ADVANCE_RIP_AND_FINISH(); \
    20632063            IEM_MC_END(); \
     
    21122112                                                                 iemAImpl_ ## a_Instr ## _u32, \
    21132113                                                                 iemAImpl_ ## a_Instr ## _u32_fallback), pDst, uSrc1, uSrc2); \
    2114             IEM_MC_CLEAR_HIGH_GREG_U64_BY_REF(pDst); \
     2114            IEM_MC_CLEAR_HIGH_GREG_U64(IEM_GET_MODRM_REG(pVCpu, bRm)); \
    21152115            IEM_MC_ADVANCE_RIP_AND_FINISH(); \
    21162116            IEM_MC_END(); \
     
    21552155                                                                 iemAImpl_ ## a_Instr ## _u32, \
    21562156                                                                 iemAImpl_ ## a_Instr ## _u32_fallback), pDst, uSrc1, uSrc2); \
    2157             IEM_MC_CLEAR_HIGH_GREG_U64_BY_REF(pDst); \
     2157            IEM_MC_CLEAR_HIGH_GREG_U64(IEM_GET_MODRM_REG(pVCpu, bRm)); \
    21582158            IEM_MC_ADVANCE_RIP_AND_FINISH(); \
    21592159            IEM_MC_END(); \
     
    22252225            IEM_MC_CALL_VOID_AIMPL_4(IEM_SELECT_HOST_OR_FALLBACK(fBmi2, iemAImpl_mulx_u32, iemAImpl_mulx_u32_fallback),
    22262226                                     pDst1, pDst2, uSrc1, uSrc2);
    2227             IEM_MC_CLEAR_HIGH_GREG_U64_BY_REF(pDst2);
    2228             IEM_MC_CLEAR_HIGH_GREG_U64_BY_REF(pDst1);
     2227            IEM_MC_CLEAR_HIGH_GREG_U64(IEM_GET_EFFECTIVE_VVVV(pVCpu));
     2228            IEM_MC_CLEAR_HIGH_GREG_U64(IEM_GET_MODRM_REG(pVCpu, bRm));
    22292229            IEM_MC_ADVANCE_RIP_AND_FINISH();
    22302230            IEM_MC_END();
     
    22712271            IEM_MC_CALL_VOID_AIMPL_4(IEM_SELECT_HOST_OR_FALLBACK(fBmi2, iemAImpl_mulx_u32, iemAImpl_mulx_u32_fallback),
    22722272                                     pDst1, pDst2, uSrc1, uSrc2);
    2273             IEM_MC_CLEAR_HIGH_GREG_U64_BY_REF(pDst2);
    2274             IEM_MC_CLEAR_HIGH_GREG_U64_BY_REF(pDst1);
     2273            IEM_MC_CLEAR_HIGH_GREG_U64(IEM_GET_EFFECTIVE_VVVV(pVCpu));
     2274            IEM_MC_CLEAR_HIGH_GREG_U64(IEM_GET_MODRM_REG(pVCpu, bRm));
    22752275            IEM_MC_ADVANCE_RIP_AND_FINISH();
    22762276            IEM_MC_END();
  • trunk/src/VBox/VMM/VMMAll/IEMAllInstVexMap3.cpp.h

    r101387 r101850  
    11521152            IEM_MC_FETCH_GREG_U32(uSrc1, IEM_GET_MODRM_RM(pVCpu, bRm));
    11531153            IEM_MC_CALL_VOID_AIMPL_3(iemAImpl_rorx_u32, pDst, uSrc1, uSrc2);
    1154             IEM_MC_CLEAR_HIGH_GREG_U64_BY_REF(pDst);
     1154            IEM_MC_CLEAR_HIGH_GREG_U64(IEM_GET_MODRM_REG(pVCpu, bRm));
    11551155            IEM_MC_ADVANCE_RIP_AND_FINISH();
    11561156            IEM_MC_END();
     
    11911191            IEM_MC_REF_GREG_U32(pDst, IEM_GET_MODRM_REG(pVCpu, bRm));
    11921192            IEM_MC_CALL_VOID_AIMPL_3(iemAImpl_rorx_u32, pDst, uSrc1, uSrc2);
    1193             IEM_MC_CLEAR_HIGH_GREG_U64_BY_REF(pDst);
     1193            IEM_MC_CLEAR_HIGH_GREG_U64(IEM_GET_MODRM_REG(pVCpu, bRm));
    11941194            IEM_MC_ADVANCE_RIP_AND_FINISH();
    11951195            IEM_MC_END();
  • trunk/src/VBox/VMM/VMMAll/IEMAllN8veRecompiler.cpp

    r101849 r101850  
    54655465     * Their lifetime always expires with the call they are for.
    54665466     */
    5467     /** @todo Unfortunately we have some high 32-bit register clears using
    5468      *        register references held by argument vars. Almost all the
    5469      *        IEM_MC_CLEAR_HIGH_GREG_U64_BY_REF uses are stupid!  However we need to
    5470      *        add checks to the python scripts to ensure argument vars aren't used
    5471      *        after a call. That's a bit of work. */
     5467    /** @todo Make the python script check that arguments aren't used after
     5468     *        IEM_MC_CALL_XXXX. */
    54725469    for (uint32_t i = cHiddenArgs; i < cArgs; i++)
    54735470    {
  • trunk/src/VBox/VMM/include/IEMMc.h

    r101587 r101850  
    264264#define IEM_MC_STORE_GREG_U64_CONST                     IEM_MC_STORE_GREG_U64
    265265#define IEM_MC_CLEAR_HIGH_GREG_U64(a_iGReg)             *iemGRegRefU64(pVCpu, (a_iGReg)) &= UINT32_MAX
    266 #define IEM_MC_CLEAR_HIGH_GREG_U64_BY_REF(a_pu32Dst)    do { (a_pu32Dst)[1] = 0; } while (0)
    267266/** @todo IEM_MC_STORE_SREG_BASE_U64 & IEM_MC_STORE_SREG_BASE_U32 aren't worth it... */
    268267#define IEM_MC_STORE_SREG_BASE_U64(a_iSReg, a_u64Value) do { \
     
    283282#define IEM_MC_REF_GREG_U16_CONST(a_pu16Dst, a_iGReg)   (a_pu16Dst) = (uint16_t const *)iemGRegRefU16(pVCpu, (a_iGReg))
    284283/** @todo User of IEM_MC_REF_GREG_U32 needs to clear the high bits on commit.
    285  *        Use IEM_MC_CLEAR_HIGH_GREG_U64_BY_REF! */
     284 *        Use IEM_MC_CLEAR_HIGH_GREG_U64! */
    286285#define IEM_MC_REF_GREG_U32(a_pu32Dst, a_iGReg)         (a_pu32Dst) = iemGRegRefU32(pVCpu, (a_iGReg))
    287286#define IEM_MC_REF_GREG_U32_CONST(a_pu32Dst, a_iGReg)   (a_pu32Dst) = (uint32_t const *)iemGRegRefU32(pVCpu, (a_iGReg))
  • trunk/src/VBox/VMM/testcase/tstIEMCheckMc.cpp

    r101802 r101850  
    670670#define IEM_MC_STORE_FPUREG_R80_SRC_REF(a_iSt, a_pr80Src) do { CHK_PTYPE(PCRTFLOAT80U, a_pr80Src); Assert((a_iSt) < 8); (void)fMcBegin; } while (0)
    671671#define IEM_MC_CLEAR_HIGH_GREG_U64(a_iGReg)             do { CHK_GREG_IDX(a_iGReg); (void)fMcBegin;  } while (0)
    672 #define IEM_MC_CLEAR_HIGH_GREG_U64_BY_REF(a_pu32Dst)    do { CHK_PTYPE(uint32_t *, a_pu32Dst); (void)fMcBegin; } while (0)
    673672#define IEM_MC_STORE_SREG_BASE_U64(a_iSeg, a_u64Value)  do { (void)fMcBegin; CHK_SEG_IDX(a_iSeg); } while (0)
    674673#define IEM_MC_STORE_SREG_BASE_U32(a_iSeg, a_u32Value)  do { (void)fMcBegin; CHK_SEG_IDX(a_iSeg); } while (0)
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