- Timestamp:
- Nov 6, 2023 10:13:31 AM (19 months ago)
- svn:sync-xref-src-repo-rev:
- 159946
- Location:
- trunk/src/VBox/VMM
- Files:
-
- 10 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/VMM/VMMAll/IEMAllInstCommonBodyMacros.h
r101387 r101850 78 78 \ 79 79 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)); \ 81 81 IEM_MC_ADVANCE_RIP_AND_FINISH(); \ 82 82 IEM_MC_END(); \ … … 142 142 \ 143 143 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)); \ 145 145 IEM_MC_ADVANCE_RIP_AND_FINISH(); \ 146 146 IEM_MC_END(); \ -
trunk/src/VBox/VMM/VMMAll/IEMAllInstOneByte.cpp.h
r101707 r101850 299 299 IEM_MC_CALL_VOID_AIMPL_3(a_fnNormalU32, pu32Dst, u32Src, pEFlags); \ 300 300 \ 301 IEM_MC_CLEAR_HIGH_GREG_U64 _BY_REF(pu32Dst); \301 IEM_MC_CLEAR_HIGH_GREG_U64(IEM_GET_MODRM_RM(pVCpu, bRm)); \ 302 302 IEM_MC_ADVANCE_RIP_AND_FINISH(); \ 303 303 IEM_MC_END(); \ … … 687 687 \ 688 688 if (a_fModifiesDstReg) \ 689 IEM_MC_CLEAR_HIGH_GREG_U64 _BY_REF(pu32Dst); \689 IEM_MC_CLEAR_HIGH_GREG_U64(X86_GREG_xAX); \ 690 690 IEM_MC_ADVANCE_RIP_AND_FINISH(); \ 691 691 IEM_MC_END(); \ … … 1788 1788 IEM_MC_REF_EFLAGS(pEFlags); \ 1789 1789 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); \ 1791 1791 IEM_MC_ADVANCE_RIP_AND_FINISH(); \ 1792 1792 IEM_MC_END(); \ … … 2351 2351 IEM_MC_REF_GREG_U32(pu32Dst, iReg); 2352 2352 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*/ 2354 2354 IEM_MC_ADVANCE_RIP_AND_FINISH(); 2355 2355 IEM_MC_END(); … … 4129 4129 IEM_MC_REF_EFLAGS(pEFlags); \ 4130 4130 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)); \ 4132 4132 \ 4133 4133 IEM_MC_ADVANCE_RIP_AND_FINISH(); \ … … 4645 4645 IEM_MC_REF_EFLAGS(pEFlags); \ 4646 4646 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)); \ 4648 4648 \ 4649 4649 IEM_MC_ADVANCE_RIP_AND_FINISH(); \ … … 7733 7733 IEM_MC_REF_EFLAGS(pEFlags); 7734 7734 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)); 7736 7736 IEM_MC_ADVANCE_RIP_AND_FINISH(); 7737 7737 IEM_MC_END(); … … 8330 8330 IEM_MC_REF_EFLAGS(pEFlags); 8331 8331 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)); 8333 8333 IEM_MC_ADVANCE_RIP_AND_FINISH(); 8334 8334 IEM_MC_END(); … … 8533 8533 IEM_MC_REF_EFLAGS(pEFlags); 8534 8534 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)); 8536 8536 IEM_MC_ADVANCE_RIP_AND_FINISH(); 8537 8537 IEM_MC_END(); … … 12456 12456 IEM_MC_REF_EFLAGS(pEFlags); \ 12457 12457 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)); \ 12459 12459 IEM_MC_ADVANCE_RIP_AND_FINISH(); \ 12460 12460 IEM_MC_END(); \ … … 12767 12767 IEM_MC_CALL_AIMPL_4(rc, pImpl->pfnU32, pu32AX, pu32DX, u32Value, pEFlags); 12768 12768 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); 12771 12771 IEM_MC_ADVANCE_RIP_AND_FINISH(); 12772 12772 } IEM_MC_ELSE() { … … 12850 12850 IEM_MC_CALL_AIMPL_4(rc, pImpl->pfnU32, pu32AX, pu32DX, u32Value, pEFlags); 12851 12851 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); 12854 12854 IEM_MC_ADVANCE_RIP_AND_FINISH(); 12855 12855 } IEM_MC_ELSE() { -
trunk/src/VBox/VMM/VMMAll/IEMAllInstPython.py
r101844 r101850 2781 2781 'IEM_MC_CLEAR_FSW_EX': (McBlock.parseMcGeneric, True, False, ), 2782 2782 'IEM_MC_CLEAR_HIGH_GREG_U64': (McBlock.parseMcGeneric, True, False, ), 2783 'IEM_MC_CLEAR_HIGH_GREG_U64_BY_REF': (McBlock.parseMcGeneric, True, False, ),2784 2783 'IEM_MC_CLEAR_XREG_U32_MASK': (McBlock.parseMcGeneric, True, False, ), 2785 2784 'IEM_MC_CLEAR_YREG_128_UP': (McBlock.parseMcGeneric, True, False, ), -
trunk/src/VBox/VMM/VMMAll/IEMAllInstThree0f38.cpp.h
r101387 r101850 1823 1823 IEM_MC_FETCH_GREG_U8(uSrc, IEM_GET_MODRM_RM(pVCpu, bRm)); 1824 1824 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)); 1826 1826 IEM_MC_ADVANCE_RIP_AND_FINISH(); 1827 1827 IEM_MC_END(); … … 1843 1843 IEM_MC_REF_GREG_U32(puDst, IEM_GET_MODRM_REG(pVCpu, bRm)); 1844 1844 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)); 1846 1846 1847 1847 IEM_MC_ADVANCE_RIP_AND_FINISH(); … … 1943 1943 IEM_MC_CALL_VOID_AIMPL_2(IEM_SELECT_HOST_OR_FALLBACK(fSse42, iemAImpl_crc32_u16, iemAImpl_crc32_u16_fallback), 1944 1944 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)); 1946 1946 IEM_MC_ADVANCE_RIP_AND_FINISH(); 1947 1947 IEM_MC_END(); … … 1957 1957 IEM_MC_CALL_VOID_AIMPL_2(IEM_SELECT_HOST_OR_FALLBACK(fSse42, iemAImpl_crc32_u32, iemAImpl_crc32_u32_fallback), 1958 1958 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)); 1960 1960 IEM_MC_ADVANCE_RIP_AND_FINISH(); 1961 1961 IEM_MC_END(); … … 1971 1971 IEM_MC_CALL_VOID_AIMPL_2(IEM_SELECT_HOST_OR_FALLBACK(fSse42, iemAImpl_crc32_u64, iemAImpl_crc32_u64_fallback), 1972 1972 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)); 1974 1974 IEM_MC_ADVANCE_RIP_AND_FINISH(); 1975 1975 IEM_MC_END(); … … 1999 1999 IEM_MC_CALL_VOID_AIMPL_2(IEM_SELECT_HOST_OR_FALLBACK(fSse42, iemAImpl_crc32_u16, iemAImpl_crc32_u16_fallback), 2000 2000 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)); 2002 2002 2003 2003 IEM_MC_ADVANCE_RIP_AND_FINISH(); … … 2018 2018 IEM_MC_CALL_VOID_AIMPL_2(IEM_SELECT_HOST_OR_FALLBACK(fSse42, iemAImpl_crc32_u32, iemAImpl_crc32_u32_fallback), 2019 2019 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)); 2021 2021 2022 2022 IEM_MC_ADVANCE_RIP_AND_FINISH(); … … 2037 2037 IEM_MC_CALL_VOID_AIMPL_2(IEM_SELECT_HOST_OR_FALLBACK(fSse42, iemAImpl_crc32_u64, iemAImpl_crc32_u64_fallback), 2038 2038 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)); 2040 2040 2041 2041 IEM_MC_ADVANCE_RIP_AND_FINISH(); -
trunk/src/VBox/VMM/VMMAll/IEMAllInstTwoByte0f.cpp.h
r101802 r101850 8964 8964 IEM_MC_CALL_VOID_AIMPL_3(a_fnNormalU32, pu32Dst, u32Src, pEFlags); \ 8965 8965 \ 8966 IEM_MC_CLEAR_HIGH_GREG_U64 _BY_REF(pu32Dst); \8966 IEM_MC_CLEAR_HIGH_GREG_U64(IEM_GET_MODRM_RM(pVCpu, bRm)); \ 8967 8967 IEM_MC_ADVANCE_RIP_AND_FINISH(); \ 8968 8968 IEM_MC_END(); \ … … 9402 9402 IEM_MC_CALL_VOID_AIMPL_4(pImpl->pfnNormalU32, pu32Dst, u32Src, cShiftArg, pEFlags); 9403 9403 9404 IEM_MC_CLEAR_HIGH_GREG_U64 _BY_REF(pu32Dst);9404 IEM_MC_CLEAR_HIGH_GREG_U64(IEM_GET_MODRM_RM(pVCpu, bRm)); 9405 9405 IEM_MC_ADVANCE_RIP_AND_FINISH(); 9406 9406 IEM_MC_END(); … … 9553 9553 IEM_MC_CALL_VOID_AIMPL_4(pImpl->pfnNormalU32, pu32Dst, u32Src, cShiftArg, pEFlags); 9554 9554 9555 IEM_MC_CLEAR_HIGH_GREG_U64 _BY_REF(pu32Dst);9555 IEM_MC_CLEAR_HIGH_GREG_U64(IEM_GET_MODRM_RM(pVCpu, bRm)); 9556 9556 IEM_MC_ADVANCE_RIP_AND_FINISH(); 9557 9557 IEM_MC_END(); … … 10303 10303 10304 10304 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)); 10306 10306 } IEM_MC_ELSE() { 10307 IEM_MC_CLEAR_HIGH_GREG_U64 _BY_REF(pu32Eax);10307 IEM_MC_CLEAR_HIGH_GREG_U64(X86_GREG_xAX); 10308 10308 } IEM_MC_ENDIF(); 10309 10309 … … 10757 10757 IEM_MC_CALL_VOID_AIMPL_3(a_fnNormalU32, pu32Dst, u32Src, pEFlags); \ 10758 10758 \ 10759 IEM_MC_CLEAR_HIGH_GREG_U64 _BY_REF(pu32Dst); \10759 IEM_MC_CLEAR_HIGH_GREG_U64(IEM_GET_MODRM_RM(pVCpu, bRm)); \ 10760 10760 IEM_MC_ADVANCE_RIP_AND_FINISH(); \ 10761 10761 IEM_MC_END(); \ … … 11195 11195 IEM_MC_CALL_VOID_AIMPL_3(pImpl->pfnNormalU32, pu32Dst, u32Src, pEFlags); 11196 11196 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)); 11198 11198 } IEM_MC_ENDIF(); 11199 11199 IEM_MC_ADVANCE_RIP_AND_FINISH(); … … 11260 11260 11261 11261 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)); 11263 11263 } IEM_MC_ENDIF(); 11264 11264 IEM_MC_ADVANCE_RIP_AND_FINISH(); … … 11633 11633 IEM_MC_CALL_VOID_AIMPL_3(iemAImpl_xadd_u32, pu32Dst, pu32Reg, pEFlags); 11634 11634 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)); 11637 11637 IEM_MC_ADVANCE_RIP_AND_FINISH(); 11638 11638 IEM_MC_END(); … … 12743 12743 IEM_MC_REF_GREG_U32(pu32Dst, iReg); 12744 12744 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); 12746 12746 IEM_MC_ADVANCE_RIP_AND_FINISH(); 12747 12747 IEM_MC_END(); -
trunk/src/VBox/VMM/VMMAll/IEMAllInstVexMap2.cpp.h
r101387 r101850 1674 1674 IEM_MC_CALL_VOID_AIMPL_4(IEM_SELECT_HOST_OR_FALLBACK(fBmi1, iemAImpl_andn_u32, iemAImpl_andn_u32_fallback), 1675 1675 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)); 1677 1677 IEM_MC_ADVANCE_RIP_AND_FINISH(); 1678 1678 IEM_MC_END(); … … 1719 1719 IEM_MC_CALL_VOID_AIMPL_4(IEM_SELECT_HOST_OR_FALLBACK(fBmi1, iemAImpl_andn_u32, iemAImpl_andn_u32_fallback), 1720 1720 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)); 1722 1722 IEM_MC_ADVANCE_RIP_AND_FINISH(); 1723 1723 IEM_MC_END(); … … 1771 1771 IEM_MC_CALL_VOID_AIMPL_3(IEM_SELECT_HOST_OR_FALLBACK(fBmi1, iemAImpl_ ## a_Instr ## _u32, \ 1772 1772 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)); \ 1774 1774 IEM_MC_ADVANCE_RIP_AND_FINISH(); \ 1775 1775 IEM_MC_END(); \ … … 1812 1812 IEM_MC_CALL_VOID_AIMPL_3(IEM_SELECT_HOST_OR_FALLBACK(fBmi1, iemAImpl_ ## a_Instr ## _u32, \ 1813 1813 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)); \ 1815 1815 IEM_MC_ADVANCE_RIP_AND_FINISH(); \ 1816 1816 IEM_MC_END(); \ … … 1928 1928 iemAImpl_ ## a_Instr ## _u32_fallback), \ 1929 1929 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)); \ 1931 1931 IEM_MC_ADVANCE_RIP_AND_FINISH(); \ 1932 1932 IEM_MC_END(); \ … … 1975 1975 iemAImpl_ ## a_Instr ## _u32_fallback), \ 1976 1976 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)); \ 1978 1978 IEM_MC_ADVANCE_RIP_AND_FINISH(); \ 1979 1979 IEM_MC_END(); \ … … 2018 2018 IEM_MC_CALL_VOID_AIMPL_3(IEM_SELECT_HOST_OR_FALLBACK(a_fFeatureMember, iemAImpl_ ## a_Instr ## _u32, \ 2019 2019 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)); \ 2021 2021 IEM_MC_ADVANCE_RIP_AND_FINISH(); \ 2022 2022 IEM_MC_END(); \ … … 2059 2059 IEM_MC_CALL_VOID_AIMPL_3(IEM_SELECT_HOST_OR_FALLBACK(a_fFeatureMember, iemAImpl_ ## a_Instr ## _u32, \ 2060 2060 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)); \ 2062 2062 IEM_MC_ADVANCE_RIP_AND_FINISH(); \ 2063 2063 IEM_MC_END(); \ … … 2112 2112 iemAImpl_ ## a_Instr ## _u32, \ 2113 2113 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)); \ 2115 2115 IEM_MC_ADVANCE_RIP_AND_FINISH(); \ 2116 2116 IEM_MC_END(); \ … … 2155 2155 iemAImpl_ ## a_Instr ## _u32, \ 2156 2156 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)); \ 2158 2158 IEM_MC_ADVANCE_RIP_AND_FINISH(); \ 2159 2159 IEM_MC_END(); \ … … 2225 2225 IEM_MC_CALL_VOID_AIMPL_4(IEM_SELECT_HOST_OR_FALLBACK(fBmi2, iemAImpl_mulx_u32, iemAImpl_mulx_u32_fallback), 2226 2226 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)); 2229 2229 IEM_MC_ADVANCE_RIP_AND_FINISH(); 2230 2230 IEM_MC_END(); … … 2271 2271 IEM_MC_CALL_VOID_AIMPL_4(IEM_SELECT_HOST_OR_FALLBACK(fBmi2, iemAImpl_mulx_u32, iemAImpl_mulx_u32_fallback), 2272 2272 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)); 2275 2275 IEM_MC_ADVANCE_RIP_AND_FINISH(); 2276 2276 IEM_MC_END(); -
trunk/src/VBox/VMM/VMMAll/IEMAllInstVexMap3.cpp.h
r101387 r101850 1152 1152 IEM_MC_FETCH_GREG_U32(uSrc1, IEM_GET_MODRM_RM(pVCpu, bRm)); 1153 1153 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)); 1155 1155 IEM_MC_ADVANCE_RIP_AND_FINISH(); 1156 1156 IEM_MC_END(); … … 1191 1191 IEM_MC_REF_GREG_U32(pDst, IEM_GET_MODRM_REG(pVCpu, bRm)); 1192 1192 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)); 1194 1194 IEM_MC_ADVANCE_RIP_AND_FINISH(); 1195 1195 IEM_MC_END(); -
trunk/src/VBox/VMM/VMMAll/IEMAllN8veRecompiler.cpp
r101849 r101850 5465 5465 * Their lifetime always expires with the call they are for. 5466 5466 */ 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. */ 5472 5469 for (uint32_t i = cHiddenArgs; i < cArgs; i++) 5473 5470 { -
trunk/src/VBox/VMM/include/IEMMc.h
r101587 r101850 264 264 #define IEM_MC_STORE_GREG_U64_CONST IEM_MC_STORE_GREG_U64 265 265 #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)267 266 /** @todo IEM_MC_STORE_SREG_BASE_U64 & IEM_MC_STORE_SREG_BASE_U32 aren't worth it... */ 268 267 #define IEM_MC_STORE_SREG_BASE_U64(a_iSReg, a_u64Value) do { \ … … 283 282 #define IEM_MC_REF_GREG_U16_CONST(a_pu16Dst, a_iGReg) (a_pu16Dst) = (uint16_t const *)iemGRegRefU16(pVCpu, (a_iGReg)) 284 283 /** @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! */ 286 285 #define IEM_MC_REF_GREG_U32(a_pu32Dst, a_iGReg) (a_pu32Dst) = iemGRegRefU32(pVCpu, (a_iGReg)) 287 286 #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 670 670 #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) 671 671 #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)673 672 #define IEM_MC_STORE_SREG_BASE_U64(a_iSeg, a_u64Value) do { (void)fMcBegin; CHK_SEG_IDX(a_iSeg); } while (0) 674 673 #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.