Changeset 102442 in vbox for trunk/src/VBox/VMM
- Timestamp:
- Dec 3, 2023 7:39:54 PM (14 months ago)
- Location:
- trunk/src/VBox/VMM/VMMAll
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/VMM/VMMAll/IEMAllInstPython.py
r102438 r102442 2908 2908 'IEM_MC_FETCH_MEM_U16': (McBlock.parseMcGeneric, True, True, ), 2909 2909 'IEM_MC_FETCH_MEM_U16_DISP': (McBlock.parseMcGeneric, True, True, ), 2910 'IEM_MC_FETCH_MEM_U16_SX_U32': (McBlock.parseMcGeneric, True, False,), # movsx2911 'IEM_MC_FETCH_MEM_U16_SX_U64': (McBlock.parseMcGeneric, True, False,), # movsx2912 'IEM_MC_FETCH_MEM_U16_ZX_U32': (McBlock.parseMcGeneric, True, False,), # movzx2913 'IEM_MC_FETCH_MEM_U16_ZX_U64': (McBlock.parseMcGeneric, True, False,), # movzx2910 'IEM_MC_FETCH_MEM_U16_SX_U32': (McBlock.parseMcGeneric, True, True, ), # movsx 2911 'IEM_MC_FETCH_MEM_U16_SX_U64': (McBlock.parseMcGeneric, True, True, ), # movsx 2912 'IEM_MC_FETCH_MEM_U16_ZX_U32': (McBlock.parseMcGeneric, True, True, ), # movzx 2913 'IEM_MC_FETCH_MEM_U16_ZX_U64': (McBlock.parseMcGeneric, True, True, ), # movzx 2914 2914 'IEM_MC_FETCH_MEM_U256': (McBlock.parseMcGeneric, True, False, ), 2915 2915 'IEM_MC_FETCH_MEM_U256_ALIGN_AVX': (McBlock.parseMcGeneric, True, False, ), … … 2917 2917 'IEM_MC_FETCH_MEM_U32': (McBlock.parseMcGeneric, True, True, ), 2918 2918 'IEM_MC_FETCH_MEM_U32_DISP': (McBlock.parseMcGeneric, True, False, ), #bounds only 2919 'IEM_MC_FETCH_MEM_U32_SX_U64': (McBlock.parseMcGeneric, True, False,), # movsx2920 'IEM_MC_FETCH_MEM_U32_ZX_U64': (McBlock.parseMcGeneric, True, False,), # movzx2919 'IEM_MC_FETCH_MEM_U32_SX_U64': (McBlock.parseMcGeneric, True, True, ), # movsx 2920 'IEM_MC_FETCH_MEM_U32_ZX_U64': (McBlock.parseMcGeneric, True, True, ), # movzx 2921 2921 'IEM_MC_FETCH_MEM_U64': (McBlock.parseMcGeneric, True, True, ), 2922 2922 'IEM_MC_FETCH_MEM_U64_ALIGN_U128': (McBlock.parseMcGeneric, True, False, ), 2923 2923 'IEM_MC_FETCH_MEM_U64_DISP': (McBlock.parseMcGeneric, True, False, ), 2924 2924 'IEM_MC_FETCH_MEM_U8': (McBlock.parseMcGeneric, True, True, ), 2925 'IEM_MC_FETCH_MEM_U8_SX_U16': (McBlock.parseMcGeneric, True, False,), # movsx2926 'IEM_MC_FETCH_MEM_U8_SX_U32': (McBlock.parseMcGeneric, True, False,), # movsx2927 'IEM_MC_FETCH_MEM_U8_SX_U64': (McBlock.parseMcGeneric, True, False,), # movsx2928 'IEM_MC_FETCH_MEM_U8_ZX_U16': (McBlock.parseMcGeneric, True, False,), # movzx2929 'IEM_MC_FETCH_MEM_U8_ZX_U32': (McBlock.parseMcGeneric, True, False,), # movzx2930 'IEM_MC_FETCH_MEM_U8_ZX_U64': (McBlock.parseMcGeneric, True, False,), # movzx2925 'IEM_MC_FETCH_MEM_U8_SX_U16': (McBlock.parseMcGeneric, True, True, ), # movsx 2926 'IEM_MC_FETCH_MEM_U8_SX_U32': (McBlock.parseMcGeneric, True, True, ), # movsx 2927 'IEM_MC_FETCH_MEM_U8_SX_U64': (McBlock.parseMcGeneric, True, True, ), # movsx 2928 'IEM_MC_FETCH_MEM_U8_ZX_U16': (McBlock.parseMcGeneric, True, True, ), # movzx 2929 'IEM_MC_FETCH_MEM_U8_ZX_U32': (McBlock.parseMcGeneric, True, True, ), # movzx 2930 'IEM_MC_FETCH_MEM_U8_ZX_U64': (McBlock.parseMcGeneric, True, True, ), # movzx 2931 2931 'IEM_MC_FETCH_MEM_XMM': (McBlock.parseMcGeneric, True, False, ), 2932 2932 'IEM_MC_FETCH_MEM_XMM_ALIGN_SSE': (McBlock.parseMcGeneric, True, False, ), -
trunk/src/VBox/VMM/VMMAll/IEMAllN8vePython.py
r102438 r102442 115 115 'IEM_MC_FETCH_MEM_FLAT_U128': (None, True, False, ), 116 116 'IEM_MC_FETCH_MEM_FLAT_U16_DISP': (None, True, False, ), 117 'IEM_MC_FETCH_MEM_FLAT_U16_SX_U32': (None, True, False,),118 'IEM_MC_FETCH_MEM_FLAT_U16_SX_U64': (None, True, False,),117 'IEM_MC_FETCH_MEM_FLAT_U16_SX_U32': (None, True, True, ), 118 'IEM_MC_FETCH_MEM_FLAT_U16_SX_U64': (None, True, True, ), 119 119 'IEM_MC_FETCH_MEM_FLAT_U16': (None, True, True, ), 120 'IEM_MC_FETCH_MEM_FLAT_U16_ZX_U32': (None, True, False,),121 'IEM_MC_FETCH_MEM_FLAT_U16_ZX_U64': (None, True, False,),120 'IEM_MC_FETCH_MEM_FLAT_U16_ZX_U32': (None, True, True, ), 121 'IEM_MC_FETCH_MEM_FLAT_U16_ZX_U64': (None, True, True, ), 122 122 'IEM_MC_FETCH_MEM_FLAT_U256_ALIGN_AVX': (None, True, False, ), 123 123 'IEM_MC_FETCH_MEM_FLAT_U256_NO_AC': (None, True, False, ), 124 124 'IEM_MC_FETCH_MEM_FLAT_U256': (None, True, False, ), 125 'IEM_MC_FETCH_MEM_FLAT_U32': (None, True, True, ), 125 126 'IEM_MC_FETCH_MEM_FLAT_U32_DISP': (None, True, False, ), 126 'IEM_MC_FETCH_MEM_FLAT_U32_SX_U64': (None, True, False, ), 127 'IEM_MC_FETCH_MEM_FLAT_U32': (None, True, True, ), 128 'IEM_MC_FETCH_MEM_FLAT_U32_ZX_U64': (None, True, False, ), 127 'IEM_MC_FETCH_MEM_FLAT_U32_SX_U64': (None, True, True, ), 128 'IEM_MC_FETCH_MEM_FLAT_U32_ZX_U64': (None, True, True, ), 129 129 'IEM_MC_FETCH_MEM_FLAT_U64': (None, True, True, ), 130 'IEM_MC_FETCH_MEM_FLAT_U8_SX_U16': (None, True, False,),131 'IEM_MC_FETCH_MEM_FLAT_U8_SX_U32': (None, True, False,),132 'IEM_MC_FETCH_MEM_FLAT_U8_SX_U64': (None, True, False,),130 'IEM_MC_FETCH_MEM_FLAT_U8_SX_U16': (None, True, True, ), 131 'IEM_MC_FETCH_MEM_FLAT_U8_SX_U32': (None, True, True, ), 132 'IEM_MC_FETCH_MEM_FLAT_U8_SX_U64': (None, True, True, ), 133 133 'IEM_MC_FETCH_MEM_FLAT_U8': (None, True, True, ), 134 'IEM_MC_FETCH_MEM_FLAT_U8_ZX_U16': (None, True, False,),135 'IEM_MC_FETCH_MEM_FLAT_U8_ZX_U32': (None, True, False,),136 'IEM_MC_FETCH_MEM_FLAT_U8_ZX_U64': (None, True, False,),134 'IEM_MC_FETCH_MEM_FLAT_U8_ZX_U16': (None, True, True, ), 135 'IEM_MC_FETCH_MEM_FLAT_U8_ZX_U32': (None, True, True, ), 136 'IEM_MC_FETCH_MEM_FLAT_U8_ZX_U64': (None, True, True, ), 137 137 'IEM_MC_FETCH_MEM_FLAT_XMM_ALIGN_SSE': (None, True, False, ), 138 138 'IEM_MC_FETCH_MEM_FLAT_XMM_U32': (None, True, False, ), -
trunk/src/VBox/VMM/VMMAll/IEMAllN8veRecompiler.cpp
r102439 r102442 1588 1588 1589 1589 1590 /* Segmented memory helpers: */ 1590 /********************************************************************************************************************************* 1591 * Helpers: Segmented memory fetches and stores. * 1592 *********************************************************************************************************************************/ 1591 1593 1592 1594 /** 1593 1595 * Used by TB code to load unsigned 8-bit data w/ segmentation. 1594 1596 */ 1595 IEM_DECL_NATIVE_HLP_DEF(uint8_t, iemNativeHlpMemFetchDataU8,(PVMCPUCC pVCpu, RTGCPTR GCPtrMem, uint8_t iSegReg)) 1596 { 1597 return iemMemFetchDataU8Jmp(pVCpu, iSegReg, GCPtrMem); /** @todo use iemMemFetchDataU8SafeJmp */ 1597 IEM_DECL_NATIVE_HLP_DEF(uint64_t, iemNativeHlpMemFetchDataU8,(PVMCPUCC pVCpu, RTGCPTR GCPtrMem, uint8_t iSegReg)) 1598 { 1599 return (uint64_t)iemMemFetchDataU8Jmp(pVCpu, iSegReg, GCPtrMem); /** @todo use iemMemFetchDataU8SafeJmp */ 1600 } 1601 1602 1603 /** 1604 * Used by TB code to load signed 8-bit data w/ segmentation, sign extending it 1605 * to 16 bits. 1606 */ 1607 IEM_DECL_NATIVE_HLP_DEF(uint64_t, iemNativeHlpMemFetchDataU8_Sx_U16,(PVMCPUCC pVCpu, RTGCPTR GCPtrMem, uint8_t iSegReg)) 1608 { 1609 return (uint64_t)(uint16_t)(int16_t)(int8_t)iemMemFetchDataU8Jmp(pVCpu, iSegReg, GCPtrMem); /** @todo use iemMemFetchDataU8SafeJmp */ 1610 } 1611 1612 1613 /** 1614 * Used by TB code to load signed 8-bit data w/ segmentation, sign extending it 1615 * to 32 bits. 1616 */ 1617 IEM_DECL_NATIVE_HLP_DEF(uint64_t, iemNativeHlpMemFetchDataU8_Sx_U32,(PVMCPUCC pVCpu, RTGCPTR GCPtrMem, uint8_t iSegReg)) 1618 { 1619 return (uint64_t)(uint32_t)(int32_t)(int8_t)iemMemFetchDataU8Jmp(pVCpu, iSegReg, GCPtrMem); /** @todo use iemMemFetchDataU8SafeJmp */ 1620 } 1621 1622 /** 1623 * Used by TB code to load signed 8-bit data w/ segmentation, sign extending it 1624 * to 64 bits. 1625 */ 1626 IEM_DECL_NATIVE_HLP_DEF(uint64_t, iemNativeHlpMemFetchDataU8_Sx_U64,(PVMCPUCC pVCpu, RTGCPTR GCPtrMem, uint8_t iSegReg)) 1627 { 1628 return (uint64_t)(int64_t)(int8_t)iemMemFetchDataU8Jmp(pVCpu, iSegReg, GCPtrMem); /** @todo use iemMemFetchDataU8SafeJmp */ 1598 1629 } 1599 1630 … … 1602 1633 * Used by TB code to load unsigned 16-bit data w/ segmentation. 1603 1634 */ 1604 IEM_DECL_NATIVE_HLP_DEF(uint16_t, iemNativeHlpMemFetchDataU16,(PVMCPUCC pVCpu, RTGCPTR GCPtrMem, uint8_t iSegReg)) 1605 { 1606 return iemMemFetchDataU16Jmp(pVCpu, iSegReg, GCPtrMem); /** @todo use iemMemFetchDataU8SafeJmp */ 1635 IEM_DECL_NATIVE_HLP_DEF(uint64_t, iemNativeHlpMemFetchDataU16,(PVMCPUCC pVCpu, RTGCPTR GCPtrMem, uint8_t iSegReg)) 1636 { 1637 return (uint64_t)iemMemFetchDataU16Jmp(pVCpu, iSegReg, GCPtrMem); /** @todo use iemMemFetchDataU8SafeJmp */ 1638 } 1639 1640 1641 /** 1642 * Used by TB code to load signed 16-bit data w/ segmentation, sign extending it 1643 * to 32 bits. 1644 */ 1645 IEM_DECL_NATIVE_HLP_DEF(uint64_t, iemNativeHlpMemFetchDataU16_Sx_U32,(PVMCPUCC pVCpu, RTGCPTR GCPtrMem, uint8_t iSegReg)) 1646 { 1647 return (uint64_t)(uint32_t)(int32_t)(int16_t)iemMemFetchDataU16Jmp(pVCpu, iSegReg, GCPtrMem); /** @todo use iemMemFetchDataU8SafeJmp */ 1648 } 1649 1650 1651 /** 1652 * Used by TB code to load signed 16-bit data w/ segmentation, sign extending it 1653 * to 64 bits. 1654 */ 1655 IEM_DECL_NATIVE_HLP_DEF(uint64_t, iemNativeHlpMemFetchDataU16_Sx_U64,(PVMCPUCC pVCpu, RTGCPTR GCPtrMem, uint8_t iSegReg)) 1656 { 1657 return (uint64_t)(int64_t)(int16_t)iemMemFetchDataU16Jmp(pVCpu, iSegReg, GCPtrMem); /** @todo use iemMemFetchDataU8SafeJmp */ 1607 1658 } 1608 1659 … … 1611 1662 * Used by TB code to load unsigned 32-bit data w/ segmentation. 1612 1663 */ 1613 IEM_DECL_NATIVE_HLP_DEF(uint32_t, iemNativeHlpMemFetchDataU32,(PVMCPUCC pVCpu, RTGCPTR GCPtrMem, uint8_t iSegReg)) 1614 { 1615 return iemMemFetchDataU32Jmp(pVCpu, iSegReg, GCPtrMem); /** @todo use iemMemFetchDataU8SafeJmp */ 1664 IEM_DECL_NATIVE_HLP_DEF(uint64_t, iemNativeHlpMemFetchDataU32,(PVMCPUCC pVCpu, RTGCPTR GCPtrMem, uint8_t iSegReg)) 1665 { 1666 return (uint64_t)iemMemFetchDataU32Jmp(pVCpu, iSegReg, GCPtrMem); /** @todo use iemMemFetchDataU8SafeJmp */ 1667 } 1668 1669 1670 /** 1671 * Used by TB code to load signed 32-bit data w/ segmentation, sign extending it 1672 * to 64 bits. 1673 */ 1674 IEM_DECL_NATIVE_HLP_DEF(uint64_t, iemNativeHlpMemFetchDataU32_Sx_U64,(PVMCPUCC pVCpu, RTGCPTR GCPtrMem, uint8_t iSegReg)) 1675 { 1676 return (uint64_t)(int64_t)(int32_t)iemMemFetchDataU32Jmp(pVCpu, iSegReg, GCPtrMem); /** @todo use iemMemFetchDataU8SafeJmp */ 1616 1677 } 1617 1678 … … 1661 1722 } 1662 1723 1724 1725 1726 /********************************************************************************************************************************* 1727 * Helpers: Flat memory fetches and stores. * 1728 *********************************************************************************************************************************/ 1729 1730 /** 1731 * Used by TB code to load unsigned 8-bit data w/ flat address. 1732 * @note Zero extending the value to 64-bit to simplify assembly. 1733 */ 1734 IEM_DECL_NATIVE_HLP_DEF(uint64_t, iemNativeHlpMemFlatFetchDataU8,(PVMCPUCC pVCpu, RTGCPTR GCPtrMem)) 1735 { 1736 return (uint64_t)iemMemFlatFetchDataU8Jmp(pVCpu, GCPtrMem); /** @todo use iemMemFlatFetchDataU8SafeJmp */ 1737 } 1738 1739 1740 /** 1741 * Used by TB code to load signed 8-bit data w/ flat address, sign extending it 1742 * to 16 bits. 1743 * @note Zero extending the value to 64-bit to simplify assembly. 1744 */ 1745 IEM_DECL_NATIVE_HLP_DEF(uint64_t, iemNativeHlpMemFlatFetchDataU8_Sx_U16,(PVMCPUCC pVCpu, RTGCPTR GCPtrMem)) 1746 { 1747 return (uint64_t)(uint16_t)(int16_t)(int8_t)iemMemFlatFetchDataU8Jmp(pVCpu, GCPtrMem); /** @todo use iemMemFlatFetchDataU8SafeJmp */ 1748 } 1749 1750 1751 /** 1752 * Used by TB code to load signed 8-bit data w/ flat address, sign extending it 1753 * to 32 bits. 1754 * @note Zero extending the value to 64-bit to simplify assembly. 1755 */ 1756 IEM_DECL_NATIVE_HLP_DEF(uint64_t, iemNativeHlpMemFlatFetchDataU8_Sx_U32,(PVMCPUCC pVCpu, RTGCPTR GCPtrMem)) 1757 { 1758 return (uint64_t)(uint32_t)(int32_t)(int8_t)iemMemFlatFetchDataU8Jmp(pVCpu, GCPtrMem); /** @todo use iemMemFlatFetchDataU8SafeJmp */ 1759 } 1760 1761 1762 /** 1763 * Used by TB code to load signed 8-bit data w/ flat address, sign extending it 1764 * to 64 bits. 1765 */ 1766 IEM_DECL_NATIVE_HLP_DEF(uint64_t, iemNativeHlpMemFlatFetchDataU8_Sx_U64,(PVMCPUCC pVCpu, RTGCPTR GCPtrMem)) 1767 { 1768 return (uint64_t)(int64_t)(int8_t)iemMemFlatFetchDataU8Jmp(pVCpu, GCPtrMem); /** @todo use iemMemFlatFetchDataU8SafeJmp */ 1769 } 1770 1771 1772 /** 1773 * Used by TB code to load unsigned 16-bit data w/ flat address. 1774 * @note Zero extending the value to 64-bit to simplify assembly. 1775 */ 1776 IEM_DECL_NATIVE_HLP_DEF(uint64_t, iemNativeHlpMemFlatFetchDataU16,(PVMCPUCC pVCpu, RTGCPTR GCPtrMem)) 1777 { 1778 return (uint64_t)iemMemFlatFetchDataU16Jmp(pVCpu, GCPtrMem); /** @todo use iemMemFlatFetchDataU16SafeJmp */ 1779 } 1780 1781 1782 /** 1783 * Used by TB code to load signed 16-bit data w/ flat address, sign extending it 1784 * to 32 bits. 1785 * @note Zero extending the value to 64-bit to simplify assembly. 1786 */ 1787 IEM_DECL_NATIVE_HLP_DEF(uint64_t, iemNativeHlpMemFlatFetchDataU16_Sx_U32,(PVMCPUCC pVCpu, RTGCPTR GCPtrMem)) 1788 { 1789 return (uint64_t)(uint32_t)(int32_t)(int16_t)iemMemFlatFetchDataU16Jmp(pVCpu, GCPtrMem); /** @todo use iemMemFlatFetchDataU16SafeJmp */ 1790 } 1791 1792 1793 /** 1794 * Used by TB code to load signed 16-bit data w/ flat address, sign extending it 1795 * to 64 bits. 1796 * @note Zero extending the value to 64-bit to simplify assembly. 1797 */ 1798 IEM_DECL_NATIVE_HLP_DEF(uint64_t, iemNativeHlpMemFlatFetchDataU16_Sx_U64,(PVMCPUCC pVCpu, RTGCPTR GCPtrMem)) 1799 { 1800 return (uint64_t)(int64_t)(int16_t)iemMemFlatFetchDataU16Jmp(pVCpu, GCPtrMem); /** @todo use iemMemFlatFetchDataU16SafeJmp */ 1801 } 1802 1803 1804 /** 1805 * Used by TB code to load unsigned 32-bit data w/ flat address. 1806 * @note Zero extending the value to 64-bit to simplify assembly. 1807 */ 1808 IEM_DECL_NATIVE_HLP_DEF(uint64_t, iemNativeHlpMemFlatFetchDataU32,(PVMCPUCC pVCpu, RTGCPTR GCPtrMem)) 1809 { 1810 return (uint64_t)iemMemFlatFetchDataU32Jmp(pVCpu, GCPtrMem); /** @todo use iemMemFlatFetchDataU32SafeJmp */ 1811 } 1812 1813 1814 /** 1815 * Used by TB code to load signed 32-bit data w/ flat address, sign extending it 1816 * to 64 bits. 1817 * @note Zero extending the value to 64-bit to simplify assembly. 1818 */ 1819 IEM_DECL_NATIVE_HLP_DEF(uint64_t, iemNativeHlpMemFlatFetchDataU32_Sx_U64,(PVMCPUCC pVCpu, RTGCPTR GCPtrMem)) 1820 { 1821 return (uint64_t)(int64_t)(int32_t)iemMemFlatFetchDataU32Jmp(pVCpu, GCPtrMem); /** @todo use iemMemFlatFetchDataU32SafeJmp */ 1822 } 1823 1824 1825 /** 1826 * Used by TB code to load unsigned 64-bit data w/ flat address. 1827 */ 1828 IEM_DECL_NATIVE_HLP_DEF(uint64_t, iemNativeHlpMemFlatFetchDataU64,(PVMCPUCC pVCpu, RTGCPTR GCPtrMem)) 1829 { 1830 return iemMemFlatFetchDataU64Jmp(pVCpu, GCPtrMem); /** @todo use iemMemFlatFetchDataU8SafeJmp */ 1831 } 1832 1833 1834 /** 1835 * Used by TB code to store unsigned 8-bit data w/ flat address. 1836 */ 1837 IEM_DECL_NATIVE_HLP_DEF(void, iemNativeHlpMemFlatStoreDataU8,(PVMCPUCC pVCpu, RTGCPTR GCPtrMem, uint8_t u8Value)) 1838 { 1839 iemMemFlatStoreDataU8Jmp(pVCpu, GCPtrMem, u8Value); /** @todo use iemMemStoreDataU8SafeJmp */ 1840 } 1841 1842 1843 /** 1844 * Used by TB code to store unsigned 16-bit data w/ flat address. 1845 */ 1846 IEM_DECL_NATIVE_HLP_DEF(void, iemNativeHlpMemFlatStoreDataU16,(PVMCPUCC pVCpu, RTGCPTR GCPtrMem, uint16_t u16Value)) 1847 { 1848 iemMemFlatStoreDataU16Jmp(pVCpu, GCPtrMem, u16Value); /** @todo use iemMemStoreDataU16SafeJmp */ 1849 } 1850 1851 1852 /** 1853 * Used by TB code to store unsigned 32-bit data w/ flat address. 1854 */ 1855 IEM_DECL_NATIVE_HLP_DEF(void, iemNativeHlpMemFlatStoreDataU32,(PVMCPUCC pVCpu, RTGCPTR GCPtrMem, uint32_t u32Value)) 1856 { 1857 iemMemFlatStoreDataU32Jmp(pVCpu, GCPtrMem, u32Value); /** @todo use iemMemStoreDataU32SafeJmp */ 1858 } 1859 1860 1861 /** 1862 * Used by TB code to store unsigned 64-bit data w/ flat address. 1863 */ 1864 IEM_DECL_NATIVE_HLP_DEF(void, iemNativeHlpMemFlatStoreDataU64,(PVMCPUCC pVCpu, RTGCPTR GCPtrMem, uint64_t u64Value)) 1865 { 1866 iemMemFlatStoreDataU64Jmp(pVCpu, GCPtrMem, u64Value); /** @todo use iemMemStoreDataU64SafeJmp */ 1867 } 1868 1869 1870 /********************************************************************************************************************************* 1871 * Helpers: Segmented memory mapping. * 1872 *********************************************************************************************************************************/ 1663 1873 1664 1874 /** … … 1832 2042 1833 2043 2044 /********************************************************************************************************************************* 2045 * Helpers: Flat memory mapping. * 2046 *********************************************************************************************************************************/ 2047 2048 /** 2049 * Used by TB code to map unsigned 8-bit data read-write w/ flat address. 2050 */ 2051 IEM_DECL_NATIVE_HLP_DEF(uint8_t *, iemNativeHlpMemFlatMapDataU8Rw,(PVMCPUCC pVCpu, uint8_t *pbUnmapInfo, RTGCPTR GCPtrMem)) 2052 { 2053 return iemMemFlatMapDataU8RwJmp(pVCpu, pbUnmapInfo, GCPtrMem); /** @todo use iemMemFlatMapDataU8RwSafeJmp */ 2054 } 2055 2056 2057 /** 2058 * Used by TB code to map unsigned 8-bit data writeonly w/ flat address. 2059 */ 2060 IEM_DECL_NATIVE_HLP_DEF(uint8_t *, iemNativeHlpMemFlatMapDataU8Wo,(PVMCPUCC pVCpu, uint8_t *pbUnmapInfo, RTGCPTR GCPtrMem)) 2061 { 2062 return iemMemFlatMapDataU8WoJmp(pVCpu, pbUnmapInfo, GCPtrMem); /** @todo use iemMemFlatMapDataU8WoSafeJmp */ 2063 } 2064 2065 2066 /** 2067 * Used by TB code to map unsigned 8-bit data readonly w/ flat address. 2068 */ 2069 IEM_DECL_NATIVE_HLP_DEF(uint8_t const *, iemNativeHlpMemFlatMapDataU8Ro,(PVMCPUCC pVCpu, uint8_t *pbUnmapInfo, RTGCPTR GCPtrMem)) 2070 { 2071 return iemMemFlatMapDataU8RoJmp(pVCpu, pbUnmapInfo, GCPtrMem); /** @todo use iemMemFlatMapDataU8RoSafeJmp */ 2072 } 2073 2074 2075 /** 2076 * Used by TB code to map unsigned 16-bit data read-write w/ flat address. 2077 */ 2078 IEM_DECL_NATIVE_HLP_DEF(uint16_t *, iemNativeHlpMemFlatMapDataU16Rw,(PVMCPUCC pVCpu, uint8_t *pbUnmapInfo, RTGCPTR GCPtrMem)) 2079 { 2080 return iemMemFlatMapDataU16RwJmp(pVCpu, pbUnmapInfo, GCPtrMem); /** @todo use iemMemFlatMapDataU16RwSafeJmp */ 2081 } 2082 2083 2084 /** 2085 * Used by TB code to map unsigned 16-bit data writeonly w/ flat address. 2086 */ 2087 IEM_DECL_NATIVE_HLP_DEF(uint16_t *, iemNativeHlpMemFlatMapDataU16Wo,(PVMCPUCC pVCpu, uint8_t *pbUnmapInfo, RTGCPTR GCPtrMem)) 2088 { 2089 return iemMemFlatMapDataU16WoJmp(pVCpu, pbUnmapInfo, GCPtrMem); /** @todo use iemMemFlatMapDataU16WoSafeJmp */ 2090 } 2091 2092 2093 /** 2094 * Used by TB code to map unsigned 16-bit data readonly w/ flat address. 2095 */ 2096 IEM_DECL_NATIVE_HLP_DEF(uint16_t const *, iemNativeHlpMemFlatMapDataU16Ro,(PVMCPUCC pVCpu, uint8_t *pbUnmapInfo, RTGCPTR GCPtrMem)) 2097 { 2098 return iemMemFlatMapDataU16RoJmp(pVCpu, pbUnmapInfo, GCPtrMem); /** @todo use iemMemFlatMapDataU16RoSafeJmp */ 2099 } 2100 2101 2102 /** 2103 * Used by TB code to map unsigned 32-bit data read-write w/ flat address. 2104 */ 2105 IEM_DECL_NATIVE_HLP_DEF(uint32_t *, iemNativeHlpMemFlatMapDataU32Rw,(PVMCPUCC pVCpu, uint8_t *pbUnmapInfo, RTGCPTR GCPtrMem)) 2106 { 2107 return iemMemFlatMapDataU32RwJmp(pVCpu, pbUnmapInfo, GCPtrMem); /** @todo use iemMemFlatMapDataU32RwSafeJmp */ 2108 } 2109 2110 2111 /** 2112 * Used by TB code to map unsigned 32-bit data writeonly w/ flat address. 2113 */ 2114 IEM_DECL_NATIVE_HLP_DEF(uint32_t *, iemNativeHlpMemFlatMapDataU32Wo,(PVMCPUCC pVCpu, uint8_t *pbUnmapInfo, RTGCPTR GCPtrMem)) 2115 { 2116 return iemMemFlatMapDataU32WoJmp(pVCpu, pbUnmapInfo, GCPtrMem); /** @todo use iemMemFlatMapDataU32WoSafeJmp */ 2117 } 2118 2119 2120 /** 2121 * Used by TB code to map unsigned 32-bit data readonly w/ flat address. 2122 */ 2123 IEM_DECL_NATIVE_HLP_DEF(uint32_t const *, iemNativeHlpMemFlatMapDataU32Ro,(PVMCPUCC pVCpu, uint8_t *pbUnmapInfo, RTGCPTR GCPtrMem)) 2124 { 2125 return iemMemFlatMapDataU32RoJmp(pVCpu, pbUnmapInfo, GCPtrMem); /** @todo use iemMemFlatMapDataU32RoSafeJmp */ 2126 } 2127 2128 2129 /** 2130 * Used by TB code to map unsigned 64-bit data read-write w/ flat address. 2131 */ 2132 IEM_DECL_NATIVE_HLP_DEF(uint64_t *, iemNativeHlpMemFlatMapDataU64Rw,(PVMCPUCC pVCpu, uint8_t *pbUnmapInfo, RTGCPTR GCPtrMem)) 2133 { 2134 return iemMemFlatMapDataU64RwJmp(pVCpu, pbUnmapInfo, GCPtrMem); /** @todo use iemMemFlatMapDataU64RwSafeJmp */ 2135 } 2136 2137 2138 /** 2139 * Used by TB code to map unsigned 64-bit data writeonly w/ flat address. 2140 */ 2141 IEM_DECL_NATIVE_HLP_DEF(uint64_t *, iemNativeHlpMemFlatMapDataU64Wo,(PVMCPUCC pVCpu, uint8_t *pbUnmapInfo, RTGCPTR GCPtrMem)) 2142 { 2143 return iemMemFlatMapDataU64WoJmp(pVCpu, pbUnmapInfo, GCPtrMem); /** @todo use iemMemFlatMapDataU64WoSafeJmp */ 2144 } 2145 2146 2147 /** 2148 * Used by TB code to map unsigned 64-bit data readonly w/ flat address. 2149 */ 2150 IEM_DECL_NATIVE_HLP_DEF(uint64_t const *, iemNativeHlpMemFlatMapDataU64Ro,(PVMCPUCC pVCpu, uint8_t *pbUnmapInfo, RTGCPTR GCPtrMem)) 2151 { 2152 return iemMemFlatMapDataU64RoJmp(pVCpu, pbUnmapInfo, GCPtrMem); /** @todo use iemMemFlatMapDataU64RoSafeJmp */ 2153 } 2154 2155 2156 /** 2157 * Used by TB code to map 80-bit float data writeonly w/ flat address. 2158 */ 2159 IEM_DECL_NATIVE_HLP_DEF(RTFLOAT80U *, iemNativeHlpMemFlatMapDataR80Wo,(PVMCPUCC pVCpu, uint8_t *pbUnmapInfo, RTGCPTR GCPtrMem)) 2160 { 2161 return iemMemFlatMapDataR80WoJmp(pVCpu, pbUnmapInfo, GCPtrMem); /** @todo use iemMemFlatMapDataR80WoSafeJmp */ 2162 } 2163 2164 2165 /** 2166 * Used by TB code to map 80-bit BCD data writeonly w/ flat address. 2167 */ 2168 IEM_DECL_NATIVE_HLP_DEF(RTPBCD80U *, iemNativeHlpMemFlatMapDataD80Wo,(PVMCPUCC pVCpu, uint8_t *pbUnmapInfo, RTGCPTR GCPtrMem)) 2169 { 2170 return iemMemFlatMapDataD80WoJmp(pVCpu, pbUnmapInfo, GCPtrMem); /** @todo use iemMemFlatMapDataD80WoSafeJmp */ 2171 } 2172 2173 2174 /** 2175 * Used by TB code to map unsigned 128-bit data read-write w/ flat address. 2176 */ 2177 IEM_DECL_NATIVE_HLP_DEF(RTUINT128U *, iemNativeHlpMemFlatMapDataU128Rw,(PVMCPUCC pVCpu, uint8_t *pbUnmapInfo, RTGCPTR GCPtrMem)) 2178 { 2179 return iemMemFlatMapDataU128RwJmp(pVCpu, pbUnmapInfo, GCPtrMem); /** @todo use iemMemFlatMapDataU128RwSafeJmp */ 2180 } 2181 2182 2183 /** 2184 * Used by TB code to map unsigned 128-bit data writeonly w/ flat address. 2185 */ 2186 IEM_DECL_NATIVE_HLP_DEF(RTUINT128U *, iemNativeHlpMemFlatMapDataU128Wo,(PVMCPUCC pVCpu, uint8_t *pbUnmapInfo, RTGCPTR GCPtrMem)) 2187 { 2188 return iemMemFlatMapDataU128WoJmp(pVCpu, pbUnmapInfo, GCPtrMem); /** @todo use iemMemFlatMapDataU128WoSafeJmp */ 2189 } 2190 2191 2192 /** 2193 * Used by TB code to map unsigned 128-bit data readonly w/ flat address. 2194 */ 2195 IEM_DECL_NATIVE_HLP_DEF(RTUINT128U const *, iemNativeHlpMemFlatMapDataU128Ro,(PVMCPUCC pVCpu, uint8_t *pbUnmapInfo, RTGCPTR GCPtrMem)) 2196 { 2197 return iemMemFlatMapDataU128RoJmp(pVCpu, pbUnmapInfo, GCPtrMem); /** @todo use iemMemFlatMapDataU128RoSafeJmp */ 2198 } 2199 2200 2201 /********************************************************************************************************************************* 2202 * Helpers: Commit, rollback & unmap * 2203 *********************************************************************************************************************************/ 1834 2204 1835 2205 /** … … 1857 2227 { 1858 2228 return iemMemCommitAndUnmapRoSafeJmp(pVCpu, bUnmapInfo); 1859 }1860 1861 1862 /* Flat memory helpers: */1863 1864 /**1865 * Used by TB code to load unsigned 8-bit data w/ flat address.1866 */1867 IEM_DECL_NATIVE_HLP_DEF(uint8_t, iemNativeHlpMemFlatFetchDataU8,(PVMCPUCC pVCpu, RTGCPTR GCPtrMem))1868 {1869 return iemMemFlatFetchDataU8Jmp(pVCpu, GCPtrMem); /** @todo use iemMemFetchDataU8SafeJmp */1870 }1871 1872 1873 /**1874 * Used by TB code to load unsigned 16-bit data w/ flat address.1875 */1876 IEM_DECL_NATIVE_HLP_DEF(uint16_t, iemNativeHlpMemFlatFetchDataU16,(PVMCPUCC pVCpu, RTGCPTR GCPtrMem))1877 {1878 return iemMemFlatFetchDataU16Jmp(pVCpu, GCPtrMem); /** @todo use iemMemFetchDataU8SafeJmp */1879 }1880 1881 1882 /**1883 * Used by TB code to load unsigned 32-bit data w/ flat address.1884 */1885 IEM_DECL_NATIVE_HLP_DEF(uint32_t, iemNativeHlpMemFlatFetchDataU32,(PVMCPUCC pVCpu, RTGCPTR GCPtrMem))1886 {1887 return iemMemFlatFetchDataU32Jmp(pVCpu, GCPtrMem); /** @todo use iemMemFetchDataU8SafeJmp */1888 }1889 1890 1891 /**1892 * Used by TB code to load unsigned 64-bit data w/ flat address.1893 */1894 IEM_DECL_NATIVE_HLP_DEF(uint64_t, iemNativeHlpMemFlatFetchDataU64,(PVMCPUCC pVCpu, RTGCPTR GCPtrMem))1895 {1896 return iemMemFlatFetchDataU64Jmp(pVCpu, GCPtrMem); /** @todo use iemMemFetchDataU8SafeJmp */1897 }1898 1899 1900 /**1901 * Used by TB code to store unsigned 8-bit data w/ flat address.1902 */1903 IEM_DECL_NATIVE_HLP_DEF(void, iemNativeHlpMemFlatStoreDataU8,(PVMCPUCC pVCpu, RTGCPTR GCPtrMem, uint8_t u8Value))1904 {1905 iemMemFlatStoreDataU8Jmp(pVCpu, GCPtrMem, u8Value); /** @todo use iemMemStoreDataU8SafeJmp */1906 }1907 1908 1909 /**1910 * Used by TB code to store unsigned 16-bit data w/ flat address.1911 */1912 IEM_DECL_NATIVE_HLP_DEF(void, iemNativeHlpMemFlatStoreDataU16,(PVMCPUCC pVCpu, RTGCPTR GCPtrMem, uint16_t u16Value))1913 {1914 iemMemFlatStoreDataU16Jmp(pVCpu, GCPtrMem, u16Value); /** @todo use iemMemStoreDataU16SafeJmp */1915 }1916 1917 1918 /**1919 * Used by TB code to store unsigned 32-bit data w/ flat address.1920 */1921 IEM_DECL_NATIVE_HLP_DEF(void, iemNativeHlpMemFlatStoreDataU32,(PVMCPUCC pVCpu, RTGCPTR GCPtrMem, uint32_t u32Value))1922 {1923 iemMemFlatStoreDataU32Jmp(pVCpu, GCPtrMem, u32Value); /** @todo use iemMemStoreDataU32SafeJmp */1924 }1925 1926 1927 /**1928 * Used by TB code to store unsigned 64-bit data w/ flat address.1929 */1930 IEM_DECL_NATIVE_HLP_DEF(void, iemNativeHlpMemFlatStoreDataU64,(PVMCPUCC pVCpu, RTGCPTR GCPtrMem, uint64_t u64Value))1931 {1932 iemMemFlatStoreDataU64Jmp(pVCpu, GCPtrMem, u64Value); /** @todo use iemMemStoreDataU64SafeJmp */1933 }1934 1935 1936 /**1937 * Used by TB code to map unsigned 8-bit data read-write w/ flat address.1938 */1939 IEM_DECL_NATIVE_HLP_DEF(uint8_t *, iemNativeHlpMemFlatMapDataU8Rw,(PVMCPUCC pVCpu, uint8_t *pbUnmapInfo, RTGCPTR GCPtrMem))1940 {1941 return iemMemFlatMapDataU8RwJmp(pVCpu, pbUnmapInfo, GCPtrMem); /** @todo use iemMemFlatMapDataU8RwSafeJmp */1942 }1943 1944 1945 /**1946 * Used by TB code to map unsigned 8-bit data writeonly w/ flat address.1947 */1948 IEM_DECL_NATIVE_HLP_DEF(uint8_t *, iemNativeHlpMemFlatMapDataU8Wo,(PVMCPUCC pVCpu, uint8_t *pbUnmapInfo, RTGCPTR GCPtrMem))1949 {1950 return iemMemFlatMapDataU8WoJmp(pVCpu, pbUnmapInfo, GCPtrMem); /** @todo use iemMemFlatMapDataU8WoSafeJmp */1951 }1952 1953 1954 /**1955 * Used by TB code to map unsigned 8-bit data readonly w/ flat address.1956 */1957 IEM_DECL_NATIVE_HLP_DEF(uint8_t const *, iemNativeHlpMemFlatMapDataU8Ro,(PVMCPUCC pVCpu, uint8_t *pbUnmapInfo, RTGCPTR GCPtrMem))1958 {1959 return iemMemFlatMapDataU8RoJmp(pVCpu, pbUnmapInfo, GCPtrMem); /** @todo use iemMemFlatMapDataU8RoSafeJmp */1960 }1961 1962 1963 /**1964 * Used by TB code to map unsigned 16-bit data read-write w/ flat address.1965 */1966 IEM_DECL_NATIVE_HLP_DEF(uint16_t *, iemNativeHlpMemFlatMapDataU16Rw,(PVMCPUCC pVCpu, uint8_t *pbUnmapInfo, RTGCPTR GCPtrMem))1967 {1968 return iemMemFlatMapDataU16RwJmp(pVCpu, pbUnmapInfo, GCPtrMem); /** @todo use iemMemFlatMapDataU16RwSafeJmp */1969 }1970 1971 1972 /**1973 * Used by TB code to map unsigned 16-bit data writeonly w/ flat address.1974 */1975 IEM_DECL_NATIVE_HLP_DEF(uint16_t *, iemNativeHlpMemFlatMapDataU16Wo,(PVMCPUCC pVCpu, uint8_t *pbUnmapInfo, RTGCPTR GCPtrMem))1976 {1977 return iemMemFlatMapDataU16WoJmp(pVCpu, pbUnmapInfo, GCPtrMem); /** @todo use iemMemFlatMapDataU16WoSafeJmp */1978 }1979 1980 1981 /**1982 * Used by TB code to map unsigned 16-bit data readonly w/ flat address.1983 */1984 IEM_DECL_NATIVE_HLP_DEF(uint16_t const *, iemNativeHlpMemFlatMapDataU16Ro,(PVMCPUCC pVCpu, uint8_t *pbUnmapInfo, RTGCPTR GCPtrMem))1985 {1986 return iemMemFlatMapDataU16RoJmp(pVCpu, pbUnmapInfo, GCPtrMem); /** @todo use iemMemFlatMapDataU16RoSafeJmp */1987 }1988 1989 1990 /**1991 * Used by TB code to map unsigned 32-bit data read-write w/ flat address.1992 */1993 IEM_DECL_NATIVE_HLP_DEF(uint32_t *, iemNativeHlpMemFlatMapDataU32Rw,(PVMCPUCC pVCpu, uint8_t *pbUnmapInfo, RTGCPTR GCPtrMem))1994 {1995 return iemMemFlatMapDataU32RwJmp(pVCpu, pbUnmapInfo, GCPtrMem); /** @todo use iemMemFlatMapDataU32RwSafeJmp */1996 }1997 1998 1999 /**2000 * Used by TB code to map unsigned 32-bit data writeonly w/ flat address.2001 */2002 IEM_DECL_NATIVE_HLP_DEF(uint32_t *, iemNativeHlpMemFlatMapDataU32Wo,(PVMCPUCC pVCpu, uint8_t *pbUnmapInfo, RTGCPTR GCPtrMem))2003 {2004 return iemMemFlatMapDataU32WoJmp(pVCpu, pbUnmapInfo, GCPtrMem); /** @todo use iemMemFlatMapDataU32WoSafeJmp */2005 }2006 2007 2008 /**2009 * Used by TB code to map unsigned 32-bit data readonly w/ flat address.2010 */2011 IEM_DECL_NATIVE_HLP_DEF(uint32_t const *, iemNativeHlpMemFlatMapDataU32Ro,(PVMCPUCC pVCpu, uint8_t *pbUnmapInfo, RTGCPTR GCPtrMem))2012 {2013 return iemMemFlatMapDataU32RoJmp(pVCpu, pbUnmapInfo, GCPtrMem); /** @todo use iemMemFlatMapDataU32RoSafeJmp */2014 }2015 2016 2017 /**2018 * Used by TB code to map unsigned 64-bit data read-write w/ flat address.2019 */2020 IEM_DECL_NATIVE_HLP_DEF(uint64_t *, iemNativeHlpMemFlatMapDataU64Rw,(PVMCPUCC pVCpu, uint8_t *pbUnmapInfo, RTGCPTR GCPtrMem))2021 {2022 return iemMemFlatMapDataU64RwJmp(pVCpu, pbUnmapInfo, GCPtrMem); /** @todo use iemMemFlatMapDataU64RwSafeJmp */2023 }2024 2025 2026 /**2027 * Used by TB code to map unsigned 64-bit data writeonly w/ flat address.2028 */2029 IEM_DECL_NATIVE_HLP_DEF(uint64_t *, iemNativeHlpMemFlatMapDataU64Wo,(PVMCPUCC pVCpu, uint8_t *pbUnmapInfo, RTGCPTR GCPtrMem))2030 {2031 return iemMemFlatMapDataU64WoJmp(pVCpu, pbUnmapInfo, GCPtrMem); /** @todo use iemMemFlatMapDataU64WoSafeJmp */2032 }2033 2034 2035 /**2036 * Used by TB code to map unsigned 64-bit data readonly w/ flat address.2037 */2038 IEM_DECL_NATIVE_HLP_DEF(uint64_t const *, iemNativeHlpMemFlatMapDataU64Ro,(PVMCPUCC pVCpu, uint8_t *pbUnmapInfo, RTGCPTR GCPtrMem))2039 {2040 return iemMemFlatMapDataU64RoJmp(pVCpu, pbUnmapInfo, GCPtrMem); /** @todo use iemMemFlatMapDataU64RoSafeJmp */2041 }2042 2043 2044 /**2045 * Used by TB code to map 80-bit float data writeonly w/ flat address.2046 */2047 IEM_DECL_NATIVE_HLP_DEF(RTFLOAT80U *, iemNativeHlpMemFlatMapDataR80Wo,(PVMCPUCC pVCpu, uint8_t *pbUnmapInfo, RTGCPTR GCPtrMem))2048 {2049 return iemMemFlatMapDataR80WoJmp(pVCpu, pbUnmapInfo, GCPtrMem); /** @todo use iemMemFlatMapDataR80WoSafeJmp */2050 }2051 2052 2053 /**2054 * Used by TB code to map 80-bit BCD data writeonly w/ flat address.2055 */2056 IEM_DECL_NATIVE_HLP_DEF(RTPBCD80U *, iemNativeHlpMemFlatMapDataD80Wo,(PVMCPUCC pVCpu, uint8_t *pbUnmapInfo, RTGCPTR GCPtrMem))2057 {2058 return iemMemFlatMapDataD80WoJmp(pVCpu, pbUnmapInfo, GCPtrMem); /** @todo use iemMemFlatMapDataD80WoSafeJmp */2059 }2060 2061 2062 /**2063 * Used by TB code to map unsigned 128-bit data read-write w/ flat address.2064 */2065 IEM_DECL_NATIVE_HLP_DEF(RTUINT128U *, iemNativeHlpMemFlatMapDataU128Rw,(PVMCPUCC pVCpu, uint8_t *pbUnmapInfo, RTGCPTR GCPtrMem))2066 {2067 return iemMemFlatMapDataU128RwJmp(pVCpu, pbUnmapInfo, GCPtrMem); /** @todo use iemMemFlatMapDataU128RwSafeJmp */2068 }2069 2070 2071 /**2072 * Used by TB code to map unsigned 128-bit data writeonly w/ flat address.2073 */2074 IEM_DECL_NATIVE_HLP_DEF(RTUINT128U *, iemNativeHlpMemFlatMapDataU128Wo,(PVMCPUCC pVCpu, uint8_t *pbUnmapInfo, RTGCPTR GCPtrMem))2075 {2076 return iemMemFlatMapDataU128WoJmp(pVCpu, pbUnmapInfo, GCPtrMem); /** @todo use iemMemFlatMapDataU128WoSafeJmp */2077 }2078 2079 2080 /**2081 * Used by TB code to map unsigned 128-bit data readonly w/ flat address.2082 */2083 IEM_DECL_NATIVE_HLP_DEF(RTUINT128U const *, iemNativeHlpMemFlatMapDataU128Ro,(PVMCPUCC pVCpu, uint8_t *pbUnmapInfo, RTGCPTR GCPtrMem))2084 {2085 return iemMemFlatMapDataU128RoJmp(pVCpu, pbUnmapInfo, GCPtrMem); /** @todo use iemMemFlatMapDataU128RoSafeJmp */2086 2229 } 2087 2230 … … 8181 8324 *********************************************************************************************************************************/ 8182 8325 8326 typedef enum IEMNATIVEMITMEMOP 8327 { 8328 kIemNativeEmitMemOp_Store = 0, 8329 kIemNativeEmitMemOp_Fetch, 8330 kIemNativeEmitMemOp_Fetch_Zx_U16, 8331 kIemNativeEmitMemOp_Fetch_Zx_U32, 8332 kIemNativeEmitMemOp_Fetch_Zx_U64, 8333 kIemNativeEmitMemOp_Fetch_Sx_U16, 8334 kIemNativeEmitMemOp_Fetch_Sx_U32, 8335 kIemNativeEmitMemOp_Fetch_Sx_U64 8336 } IEMNATIVEMITMEMOP; 8337 8183 8338 /** Emits code for IEM_MC_FETCH_MEM_U8/16/32/64 and IEM_MC_STORE_MEM_U8/16/32/64, 8184 8339 * and IEM_MC_FETCH_MEM_FLAT_U8/16/32/64 and IEM_MC_STORE_MEM_FLAT_U8/16/32/64 … … 8186 8341 DECL_INLINE_THROW(uint32_t) 8187 8342 iemNativeEmitMemFetchStoreDataCommon(PIEMRECOMPILERSTATE pReNative, uint32_t off, uint8_t idxVarValue, uint8_t iSegReg, 8188 uint8_t idxVarGCPtrMem, uint8_t cbMem, bool fFetch, uintptr_t pfnFunction, uint8_t idxInstr,8189 uint 8_t offDisp = 0)8343 uint8_t idxVarGCPtrMem, uint8_t cbMem, uint8_t fAlignMask, IEMNATIVEMITMEMOP enmOp, 8344 uintptr_t pfnFunction, uint8_t idxInstr, uint8_t offDisp = 0) 8190 8345 { 8191 8346 /* … … 8193 8348 */ 8194 8349 IEMNATIVE_ASSERT_VAR_IDX(pReNative, idxVarValue); 8195 Assert( fFetch8350 Assert( enmOp != kIemNativeEmitMemOp_Store 8196 8351 || pReNative->Core.aVars[idxVarValue].enmKind == kIemNativeVarKind_Immediate 8197 8352 || pReNative->Core.aVars[idxVarValue].enmKind == kIemNativeVarKind_Stack); … … 8211 8366 switch (cbMem) 8212 8367 { 8213 case 1: Assert(pfnFunction == (fFetch ? (uintptr_t)iemNativeHlpMemFlatFetchDataU8 : (uintptr_t)iemNativeHlpMemFlatStoreDataU8 )); break; 8214 case 2: Assert(pfnFunction == (fFetch ? (uintptr_t)iemNativeHlpMemFlatFetchDataU16 : (uintptr_t)iemNativeHlpMemFlatStoreDataU16)); break; 8215 case 4: Assert(pfnFunction == (fFetch ? (uintptr_t)iemNativeHlpMemFlatFetchDataU32 : (uintptr_t)iemNativeHlpMemFlatStoreDataU32)); break; 8216 case 8: Assert(pfnFunction == (fFetch ? (uintptr_t)iemNativeHlpMemFlatFetchDataU64 : (uintptr_t)iemNativeHlpMemFlatStoreDataU64)); break; 8368 case 1: 8369 Assert( pfnFunction 8370 == ( enmOp == kIemNativeEmitMemOp_Store ? (uintptr_t)iemNativeHlpMemFlatStoreDataU8 8371 : enmOp == kIemNativeEmitMemOp_Fetch ? (uintptr_t)iemNativeHlpMemFlatFetchDataU8 8372 : enmOp == kIemNativeEmitMemOp_Fetch_Zx_U16 ? (uintptr_t)iemNativeHlpMemFlatFetchDataU8 8373 : enmOp == kIemNativeEmitMemOp_Fetch_Zx_U32 ? (uintptr_t)iemNativeHlpMemFlatFetchDataU8 8374 : enmOp == kIemNativeEmitMemOp_Fetch_Zx_U64 ? (uintptr_t)iemNativeHlpMemFlatFetchDataU8 8375 : enmOp == kIemNativeEmitMemOp_Fetch_Sx_U16 ? (uintptr_t)iemNativeHlpMemFlatFetchDataU8_Sx_U16 8376 : enmOp == kIemNativeEmitMemOp_Fetch_Sx_U32 ? (uintptr_t)iemNativeHlpMemFlatFetchDataU8_Sx_U32 8377 : enmOp == kIemNativeEmitMemOp_Fetch_Sx_U64 ? (uintptr_t)iemNativeHlpMemFlatFetchDataU8_Sx_U64 8378 : UINT64_C(0xc000b000a0009000) )); 8379 break; 8380 case 2: 8381 Assert( pfnFunction 8382 == ( enmOp == kIemNativeEmitMemOp_Store ? (uintptr_t)iemNativeHlpMemFlatStoreDataU16 8383 : enmOp == kIemNativeEmitMemOp_Fetch ? (uintptr_t)iemNativeHlpMemFlatFetchDataU16 8384 : enmOp == kIemNativeEmitMemOp_Fetch_Zx_U32 ? (uintptr_t)iemNativeHlpMemFlatFetchDataU16 8385 : enmOp == kIemNativeEmitMemOp_Fetch_Zx_U64 ? (uintptr_t)iemNativeHlpMemFlatFetchDataU16 8386 : enmOp == kIemNativeEmitMemOp_Fetch_Sx_U32 ? (uintptr_t)iemNativeHlpMemFlatFetchDataU16_Sx_U32 8387 : enmOp == kIemNativeEmitMemOp_Fetch_Sx_U64 ? (uintptr_t)iemNativeHlpMemFlatFetchDataU16_Sx_U64 8388 : UINT64_C(0xc000b000a0009000) )); 8389 break; 8390 case 4: 8391 Assert( pfnFunction 8392 == ( enmOp == kIemNativeEmitMemOp_Store ? (uintptr_t)iemNativeHlpMemFlatStoreDataU32 8393 : enmOp == kIemNativeEmitMemOp_Fetch ? (uintptr_t)iemNativeHlpMemFlatFetchDataU32 8394 : enmOp == kIemNativeEmitMemOp_Fetch_Zx_U64 ? (uintptr_t)iemNativeHlpMemFlatFetchDataU32 8395 : enmOp == kIemNativeEmitMemOp_Fetch_Sx_U64 ? (uintptr_t)iemNativeHlpMemFlatFetchDataU32_Sx_U64 8396 : UINT64_C(0xc000b000a0009000) )); 8397 break; 8398 case 8: 8399 Assert( pfnFunction 8400 == ( enmOp == kIemNativeEmitMemOp_Store ? (uintptr_t)iemNativeHlpMemFlatStoreDataU64 8401 : enmOp == kIemNativeEmitMemOp_Fetch ? (uintptr_t)iemNativeHlpMemFlatFetchDataU64 8402 : UINT64_C(0xc000b000a0009000) )); 8403 break; 8217 8404 } 8218 8405 } … … 8222 8409 switch (cbMem) 8223 8410 { 8224 case 1: Assert(pfnFunction == (fFetch ? (uintptr_t)iemNativeHlpMemFetchDataU8 : (uintptr_t)iemNativeHlpMemStoreDataU8 )); break; 8225 case 2: Assert(pfnFunction == (fFetch ? (uintptr_t)iemNativeHlpMemFetchDataU16 : (uintptr_t)iemNativeHlpMemStoreDataU16)); break; 8226 case 4: Assert(pfnFunction == (fFetch ? (uintptr_t)iemNativeHlpMemFetchDataU32 : (uintptr_t)iemNativeHlpMemStoreDataU32)); break; 8227 case 8: Assert(pfnFunction == (fFetch ? (uintptr_t)iemNativeHlpMemFetchDataU64 : (uintptr_t)iemNativeHlpMemStoreDataU64)); break; 8411 case 1: 8412 Assert( pfnFunction 8413 == ( enmOp == kIemNativeEmitMemOp_Store ? (uintptr_t)iemNativeHlpMemStoreDataU8 8414 : enmOp == kIemNativeEmitMemOp_Fetch ? (uintptr_t)iemNativeHlpMemFetchDataU8 8415 : enmOp == kIemNativeEmitMemOp_Fetch_Zx_U16 ? (uintptr_t)iemNativeHlpMemFetchDataU8 8416 : enmOp == kIemNativeEmitMemOp_Fetch_Zx_U32 ? (uintptr_t)iemNativeHlpMemFetchDataU8 8417 : enmOp == kIemNativeEmitMemOp_Fetch_Zx_U64 ? (uintptr_t)iemNativeHlpMemFetchDataU8 8418 : enmOp == kIemNativeEmitMemOp_Fetch_Sx_U16 ? (uintptr_t)iemNativeHlpMemFetchDataU8_Sx_U16 8419 : enmOp == kIemNativeEmitMemOp_Fetch_Sx_U32 ? (uintptr_t)iemNativeHlpMemFetchDataU8_Sx_U32 8420 : enmOp == kIemNativeEmitMemOp_Fetch_Sx_U64 ? (uintptr_t)iemNativeHlpMemFetchDataU8_Sx_U64 8421 : UINT64_C(0xc000b000a0009000) )); 8422 break; 8423 case 2: 8424 Assert( pfnFunction 8425 == ( enmOp == kIemNativeEmitMemOp_Store ? (uintptr_t)iemNativeHlpMemStoreDataU16 8426 : enmOp == kIemNativeEmitMemOp_Fetch ? (uintptr_t)iemNativeHlpMemFetchDataU16 8427 : enmOp == kIemNativeEmitMemOp_Fetch_Zx_U32 ? (uintptr_t)iemNativeHlpMemFetchDataU16 8428 : enmOp == kIemNativeEmitMemOp_Fetch_Zx_U64 ? (uintptr_t)iemNativeHlpMemFetchDataU16 8429 : enmOp == kIemNativeEmitMemOp_Fetch_Sx_U32 ? (uintptr_t)iemNativeHlpMemFetchDataU16_Sx_U32 8430 : enmOp == kIemNativeEmitMemOp_Fetch_Sx_U64 ? (uintptr_t)iemNativeHlpMemFetchDataU16_Sx_U64 8431 : UINT64_C(0xc000b000a0009000) )); 8432 break; 8433 case 4: 8434 Assert( pfnFunction 8435 == ( enmOp == kIemNativeEmitMemOp_Store ? (uintptr_t)iemNativeHlpMemStoreDataU32 8436 : enmOp == kIemNativeEmitMemOp_Fetch ? (uintptr_t)iemNativeHlpMemFetchDataU32 8437 : enmOp == kIemNativeEmitMemOp_Fetch_Zx_U64 ? (uintptr_t)iemNativeHlpMemFetchDataU32 8438 : enmOp == kIemNativeEmitMemOp_Fetch_Sx_U64 ? (uintptr_t)iemNativeHlpMemFetchDataU32_Sx_U64 8439 : UINT64_C(0xc000b000a0009000) )); 8440 break; 8441 case 8: 8442 Assert( pfnFunction 8443 == ( enmOp == kIemNativeEmitMemOp_Store ? (uintptr_t)iemNativeHlpMemStoreDataU64 8444 : enmOp == kIemNativeEmitMemOp_Fetch ? (uintptr_t)iemNativeHlpMemFetchDataU64 8445 : UINT64_C(0xc000b000a0009000) )); 8446 break; 8228 8447 } 8229 8448 } 8230 8449 #endif 8231 RT_NOREF(cbMem);8232 8450 8233 8451 #ifdef VBOX_STRICT … … 8262 8480 uint32_t const idxLabelTlbMiss = iemNativeLabelCreate(pReNative, kIemNativeLabelType_TlbMiss, UINT32_MAX, uTlbSeqNo); 8263 8481 uint32_t const idxLabelTlbDone = iemNativeLabelCreate(pReNative, kIemNativeLabelType_TlbDone, UINT32_MAX, uTlbSeqNo); 8264 uint8_t const idxRegValueFetch = !fFetch? UINT8_MAX /* special case value storing below */8482 uint8_t const idxRegValueFetch = enmOp == kIemNativeEmitMemOp_Store ? UINT8_MAX /* special case value storing below */ 8265 8483 : !(pReNative->Core.bmHstRegs & RT_BIT_32(IEMNATIVE_CALL_RET_GREG)) 8266 8484 ? iemNativeVarSetRegister(pReNative, idxVarValue, IEMNATIVE_CALL_RET_GREG, off) … … 8272 8490 //pReNative->pInstrBuf[off++] = 0xcc; 8273 8491 /** @todo later. */ 8492 RT_NOREF(fAlignMask, cbMem); 8274 8493 8275 8494 /* … … 8298 8517 8299 8518 /* IEMNATIVE_CALL_ARG2/3_GREG = uValue (idxVarValue) - if store */ 8300 if ( !fFetch)8519 if (enmOp == kIemNativeEmitMemOp_Store) 8301 8520 { 8302 8521 if (pReNative->Core.aVars[idxVarValue].enmKind == kIemNativeVarKind_Immediate) … … 8354 8573 * Put the result in the right register if this is a fetch. 8355 8574 */ 8356 if ( fFetch)8575 if (enmOp != kIemNativeEmitMemOp_Store) 8357 8576 { 8358 8577 Assert(idxRegValueFetch == pReNative->Core.aVars[idxVarValue].idxReg); … … 8372 8591 *********************************************************************************************************************************/ 8373 8592 8593 /* 8-bit segmented: */ 8374 8594 #define IEM_MC_FETCH_MEM_U8(a_u8Dst, a_iSeg, a_GCPtrMem) \ 8375 off = iemNativeEmitMemFetchStoreDataCommon(pReNative, off, a_u8Dst, a_iSeg, a_GCPtrMem, sizeof(uint8_t), true /*fFetch*/, \ 8595 off = iemNativeEmitMemFetchStoreDataCommon(pReNative, off, a_u8Dst, a_iSeg, a_GCPtrMem, \ 8596 sizeof(uint8_t), 0 /*fAlignMask*/, kIemNativeEmitMemOp_Fetch, \ 8376 8597 (uintptr_t)iemNativeHlpMemFetchDataU8, pCallEntry->idxInstr) 8377 8598 8599 #define IEM_MC_FETCH_MEM_U8_ZX_U16(a_u16Dst, a_iSeg, a_GCPtrMem) \ 8600 off = iemNativeEmitMemFetchStoreDataCommon(pReNative, off, a_u16Dst, a_iSeg, a_GCPtrMem, \ 8601 sizeof(uint8_t), 0 /*fAlignMask*/, kIemNativeEmitMemOp_Fetch_Zx_U16, \ 8602 (uintptr_t)iemNativeHlpMemFetchDataU8, pCallEntry->idxInstr) 8603 8604 #define IEM_MC_FETCH_MEM_U8_ZX_U32(a_u32Dst, a_iSeg, a_GCPtrMem) \ 8605 off = iemNativeEmitMemFetchStoreDataCommon(pReNative, off, a_u32Dst, a_iSeg, a_GCPtrMem, \ 8606 sizeof(uint8_t), 0 /*fAlignMask*/, kIemNativeEmitMemOp_Fetch_Zx_U32, \ 8607 (uintptr_t)iemNativeHlpMemFetchDataU8, pCallEntry->idxInstr) 8608 8609 #define IEM_MC_FETCH_MEM_U8_ZX_U64(a_u64Dst, a_iSeg, a_GCPtrMem) \ 8610 off = iemNativeEmitMemFetchStoreDataCommon(pReNative, off, a_u64Dst, a_iSeg, a_GCPtrMem, \ 8611 sizeof(uint8_t), 0 /*fAlignMask*/, kIemNativeEmitMemOp_Fetch_Zx_U64, \ 8612 (uintptr_t)iemNativeHlpMemFetchDataU8, pCallEntry->idxInstr) 8613 8614 #define IEM_MC_FETCH_MEM_U8_SX_U16(a_u16Dst, a_iSeg, a_GCPtrMem) \ 8615 off = iemNativeEmitMemFetchStoreDataCommon(pReNative, off, a_u16Dst, a_iSeg, a_GCPtrMem, \ 8616 sizeof(uint8_t), 0 /*fAlignMask*/, kIemNativeEmitMemOp_Fetch_Sx_U16, \ 8617 (uintptr_t)iemNativeHlpMemFetchDataU8_Sx_U16, pCallEntry->idxInstr) 8618 8619 #define IEM_MC_FETCH_MEM_U8_SX_U32(a_u32Dst, a_iSeg, a_GCPtrMem) \ 8620 off = iemNativeEmitMemFetchStoreDataCommon(pReNative, off, a_u32Dst, a_iSeg, a_GCPtrMem, \ 8621 sizeof(uint8_t), 0 /*fAlignMask*/, kIemNativeEmitMemOp_Fetch_Sx_U32, \ 8622 (uintptr_t)iemNativeHlpMemFetchDataU8_Sx_U32, pCallEntry->idxInstr) 8623 8624 #define IEM_MC_FETCH_MEM_U8_SX_U64(a_u64Dst, a_iSeg, a_GCPtrMem) \ 8625 off = iemNativeEmitMemFetchStoreDataCommon(pReNative, off, a_u64Dst, a_iSeg, a_GCPtrMem, \ 8626 sizeof(uint8_t), 0 /*fAlignMask*/, kIemNativeEmitMemOp_Fetch_Sx_U64, \ 8627 (uintptr_t)iemNativeHlpMemFetchDataU8_Sx_U64, pCallEntry->idxInstr) 8628 8629 /* 16-bit segmented: */ 8378 8630 #define IEM_MC_FETCH_MEM_U16(a_u16Dst, a_iSeg, a_GCPtrMem) \ 8379 off = iemNativeEmitMemFetchStoreDataCommon(pReNative, off, a_u16Dst, a_iSeg, a_GCPtrMem, sizeof(uint16_t), true /*fFetch*/, \ 8631 off = iemNativeEmitMemFetchStoreDataCommon(pReNative, off, a_u16Dst, a_iSeg, a_GCPtrMem, \ 8632 sizeof(uint16_t), sizeof(uint16_t) - 1, kIemNativeEmitMemOp_Fetch, \ 8380 8633 (uintptr_t)iemNativeHlpMemFetchDataU16, pCallEntry->idxInstr) 8381 8634 8382 8635 #define IEM_MC_FETCH_MEM_U16_DISP(a_u16Dst, a_iSeg, a_GCPtrMem, a_offDisp) \ 8383 off = iemNativeEmitMemFetchStoreDataCommon(pReNative, off, a_u16Dst, a_iSeg, a_GCPtrMem, sizeof(uint16_t), true /*fFetch*/, \ 8636 off = iemNativeEmitMemFetchStoreDataCommon(pReNative, off, a_u16Dst, a_iSeg, a_GCPtrMem, \ 8637 sizeof(uint16_t), sizeof(uint16_t) - 1, kIemNativeEmitMemOp_Fetch, \ 8384 8638 (uintptr_t)iemNativeHlpMemFetchDataU16, pCallEntry->idxInstr, a_offDisp) 8385 8639 8640 #define IEM_MC_FETCH_MEM_U16_ZX_U32(a_u32Dst, a_iSeg, a_GCPtrMem) \ 8641 off = iemNativeEmitMemFetchStoreDataCommon(pReNative, off, a_u32Dst, a_iSeg, a_GCPtrMem, \ 8642 sizeof(uint16_t), sizeof(uint16_t) - 1, kIemNativeEmitMemOp_Fetch_Zx_U32, \ 8643 (uintptr_t)iemNativeHlpMemFetchDataU16, pCallEntry->idxInstr) 8644 8645 #define IEM_MC_FETCH_MEM_U16_ZX_U64(a_u64Dst, a_iSeg, a_GCPtrMem) \ 8646 off = iemNativeEmitMemFetchStoreDataCommon(pReNative, off, a_u64Dst, a_iSeg, a_GCPtrMem, \ 8647 sizeof(uint16_t), sizeof(uint16_t) - 1, kIemNativeEmitMemOp_Fetch_Zx_U64, \ 8648 (uintptr_t)iemNativeHlpMemFetchDataU16, pCallEntry->idxInstr) 8649 8650 #define IEM_MC_FETCH_MEM_U16_SX_U32(a_u32Dst, a_iSeg, a_GCPtrMem) \ 8651 off = iemNativeEmitMemFetchStoreDataCommon(pReNative, off, a_u32Dst, a_iSeg, a_GCPtrMem, \ 8652 sizeof(uint16_t), sizeof(uint16_t) - 1, kIemNativeEmitMemOp_Fetch_Sx_U32, \ 8653 (uintptr_t)iemNativeHlpMemFetchDataU16_Sx_U32, pCallEntry->idxInstr) 8654 8655 #define IEM_MC_FETCH_MEM_U16_SX_U64(a_u64Dst, a_iSeg, a_GCPtrMem) \ 8656 off = iemNativeEmitMemFetchStoreDataCommon(pReNative, off, a_u64Dst, a_iSeg, a_GCPtrMem, \ 8657 sizeof(uint16_t), sizeof(uint16_t) - 1, kIemNativeEmitMemOp_Fetch_Sx_U64, \ 8658 (uintptr_t)iemNativeHlpMemFetchDataU16_Sx_U64, pCallEntry->idxInstr) 8659 8660 8661 /* 32-bit segmented: */ 8386 8662 #define IEM_MC_FETCH_MEM_U32(a_u32Dst, a_iSeg, a_GCPtrMem) \ 8387 off = iemNativeEmitMemFetchStoreDataCommon(pReNative, off, a_u32Dst, a_iSeg, a_GCPtrMem, sizeof(uint32_t), true /*fFetch*/, \ 8663 off = iemNativeEmitMemFetchStoreDataCommon(pReNative, off, a_u32Dst, a_iSeg, a_GCPtrMem, \ 8664 sizeof(uint32_t), sizeof(uint32_t) - 1, kIemNativeEmitMemOp_Fetch, \ 8388 8665 (uintptr_t)iemNativeHlpMemFetchDataU32, pCallEntry->idxInstr) 8389 8666 8390 8667 #define IEM_MC_FETCH_MEM_U32_DISP(a_u32Dst, a_iSeg, a_GCPtrMem, a_offDisp) \ 8391 off = iemNativeEmitMemFetchStoreDataCommon(pReNative, off, a_u32Dst, a_iSeg, a_GCPtrMem, sizeof(uint32_t), true /*fFetch*/, \ 8668 off = iemNativeEmitMemFetchStoreDataCommon(pReNative, off, a_u32Dst, a_iSeg, a_GCPtrMem, \ 8669 sizeof(uint32_t), sizeof(uint32_t) - 1, kIemNativeEmitMemOp_Fetch, \ 8392 8670 (uintptr_t)iemNativeHlpMemFetchDataU32, pCallEntry->idxInstr, a_offDisp) 8393 8671 8672 #define IEM_MC_FETCH_MEM_U32_ZX_U64(a_u64Dst, a_iSeg, a_GCPtrMem) \ 8673 off = iemNativeEmitMemFetchStoreDataCommon(pReNative, off, a_u64Dst, a_iSeg, a_GCPtrMem, \ 8674 sizeof(uint32_t), sizeof(uint32_t) - 1, kIemNativeEmitMemOp_Fetch_Zx_U64, \ 8675 (uintptr_t)iemNativeHlpMemFetchDataU32, pCallEntry->idxInstr) 8676 8677 #define IEM_MC_FETCH_MEM_U32_SX_U64(a_u64Dst, a_iSeg, a_GCPtrMem) \ 8678 off = iemNativeEmitMemFetchStoreDataCommon(pReNative, off, a_u64Dst, a_iSeg, a_GCPtrMem, \ 8679 sizeof(uint32_t), sizeof(uint32_t) - 1, kIemNativeEmitMemOp_Fetch_Sx_U64, \ 8680 (uintptr_t)iemNativeHlpMemFetchDataU32_Sx_U64, pCallEntry->idxInstr) 8681 8682 8683 /* 64-bit segmented: */ 8394 8684 #define IEM_MC_FETCH_MEM_U64(a_u64Dst, a_iSeg, a_GCPtrMem) \ 8395 off = iemNativeEmitMemFetchStoreDataCommon(pReNative, off, a_u64Dst, a_iSeg, a_GCPtrMem, sizeof(uint64_t), true /*fFetch*/, \ 8685 off = iemNativeEmitMemFetchStoreDataCommon(pReNative, off, a_u64Dst, a_iSeg, a_GCPtrMem, \ 8686 sizeof(uint64_t), sizeof(uint64_t) - 1, kIemNativeEmitMemOp_Fetch, \ 8396 8687 (uintptr_t)iemNativeHlpMemFetchDataU64, pCallEntry->idxInstr) 8397 8688 8398 8689 8690 8691 /* 8-bit flat: */ 8399 8692 #define IEM_MC_FETCH_MEM_FLAT_U8(a_u8Dst, a_GCPtrMem) \ 8400 off = iemNativeEmitMemFetchStoreDataCommon(pReNative, off, a_u8Dst, UINT8_MAX, a_GCPtrMem, sizeof(uint8_t), true /*fFetch*/, \ 8693 off = iemNativeEmitMemFetchStoreDataCommon(pReNative, off, a_u8Dst, UINT8_MAX, a_GCPtrMem, \ 8694 sizeof(uint8_t), 0 /*fAlignMask*/, kIemNativeEmitMemOp_Fetch, \ 8401 8695 (uintptr_t)iemNativeHlpMemFlatFetchDataU8, pCallEntry->idxInstr) 8402 8696 8697 #define IEM_MC_FETCH_MEM_FLAT_U8_ZX_U16(a_u16Dst, a_GCPtrMem) \ 8698 off = iemNativeEmitMemFetchStoreDataCommon(pReNative, off, a_u16Dst, UINT8_MAX, a_GCPtrMem, \ 8699 sizeof(uint8_t), 0 /*fAlignMask*/, kIemNativeEmitMemOp_Fetch_Zx_U16, \ 8700 (uintptr_t)iemNativeHlpMemFlatFetchDataU8, pCallEntry->idxInstr) 8701 8702 #define IEM_MC_FETCH_MEM_FLAT_U8_ZX_U32(a_u32Dst, a_GCPtrMem) \ 8703 off = iemNativeEmitMemFetchStoreDataCommon(pReNative, off, a_u32Dst, UINT8_MAX, a_GCPtrMem, \ 8704 sizeof(uint8_t), 0 /*fAlignMask*/, kIemNativeEmitMemOp_Fetch_Zx_U32, \ 8705 (uintptr_t)iemNativeHlpMemFlatFetchDataU8, pCallEntry->idxInstr) 8706 8707 #define IEM_MC_FETCH_MEM_FLAT_U8_ZX_U64(a_u64Dst, a_GCPtrMem) \ 8708 off = iemNativeEmitMemFetchStoreDataCommon(pReNative, off, a_u64Dst, UINT8_MAX, a_GCPtrMem, \ 8709 sizeof(uint8_t), 0 /*fAlignMask*/, kIemNativeEmitMemOp_Fetch_Zx_U64, \ 8710 (uintptr_t)iemNativeHlpMemFlatFetchDataU8, pCallEntry->idxInstr) 8711 8712 #define IEM_MC_FETCH_MEM_FLAT_U8_SX_U16(a_u16Dst, a_GCPtrMem) \ 8713 off = iemNativeEmitMemFetchStoreDataCommon(pReNative, off, a_u16Dst, UINT8_MAX, a_GCPtrMem, \ 8714 sizeof(uint8_t), 0 /*fAlignMask*/, kIemNativeEmitMemOp_Fetch_Sx_U16, \ 8715 (uintptr_t)iemNativeHlpMemFlatFetchDataU8_Sx_U16, pCallEntry->idxInstr) 8716 8717 #define IEM_MC_FETCH_MEM_FLAT_U8_SX_U32(a_u32Dst, a_GCPtrMem) \ 8718 off = iemNativeEmitMemFetchStoreDataCommon(pReNative, off, a_u32Dst, UINT8_MAX, a_GCPtrMem, \ 8719 sizeof(uint8_t), 0 /*fAlignMask*/, kIemNativeEmitMemOp_Fetch_Sx_U32, \ 8720 (uintptr_t)iemNativeHlpMemFlatFetchDataU8_Sx_U32, pCallEntry->idxInstr) 8721 8722 #define IEM_MC_FETCH_MEM_FLAT_U8_SX_U64(a_u64Dst, a_GCPtrMem) \ 8723 off = iemNativeEmitMemFetchStoreDataCommon(pReNative, off, a_u64Dst, UINT8_MAX, a_GCPtrMem, \ 8724 sizeof(uint8_t), 0 /*fAlignMask*/, kIemNativeEmitMemOp_Fetch_Sx_U64, \ 8725 (uintptr_t)iemNativeHlpMemFlatFetchDataU8_Sx_U64, pCallEntry->idxInstr) 8726 8727 8728 /* 16-bit flat: */ 8403 8729 #define IEM_MC_FETCH_MEM_FLAT_U16(a_u16Dst, a_GCPtrMem) \ 8404 off = iemNativeEmitMemFetchStoreDataCommon(pReNative, off, a_u16Dst, UINT8_MAX, a_GCPtrMem, sizeof(uint16_t), true /*fFetch*/, \ 8730 off = iemNativeEmitMemFetchStoreDataCommon(pReNative, off, a_u16Dst, UINT8_MAX, a_GCPtrMem, \ 8731 sizeof(uint16_t), sizeof(uint16_t) - 1, kIemNativeEmitMemOp_Fetch, \ 8405 8732 (uintptr_t)iemNativeHlpMemFlatFetchDataU16, pCallEntry->idxInstr) 8406 8733 8734 #define IEM_MC_FETCH_MEM_FLAT_U16_ZX_U32(a_u32Dst, a_GCPtrMem) \ 8735 off = iemNativeEmitMemFetchStoreDataCommon(pReNative, off, a_u32Dst, UINT8_MAX, a_GCPtrMem, \ 8736 sizeof(uint16_t), sizeof(uint16_t) - 1, kIemNativeEmitMemOp_Fetch_Zx_U32, \ 8737 (uintptr_t)iemNativeHlpMemFlatFetchDataU16, pCallEntry->idxInstr) 8738 8739 #define IEM_MC_FETCH_MEM_FLAT_U16_ZX_U64(a_u64Dst, a_GCPtrMem) \ 8740 off = iemNativeEmitMemFetchStoreDataCommon(pReNative, off, a_u64Dst, UINT8_MAX, a_GCPtrMem, \ 8741 sizeof(uint16_t), sizeof(uint16_t) - 1, kIemNativeEmitMemOp_Fetch_Zx_U64, \ 8742 (uintptr_t)iemNativeHlpMemFlatFetchDataU16, pCallEntry->idxInstr) 8743 8744 #define IEM_MC_FETCH_MEM_FLAT_U16_SX_U32(a_u32Dst, a_GCPtrMem) \ 8745 off = iemNativeEmitMemFetchStoreDataCommon(pReNative, off, a_u32Dst, UINT8_MAX, a_GCPtrMem, \ 8746 sizeof(uint16_t), sizeof(uint16_t) - 1, kIemNativeEmitMemOp_Fetch_Sx_U32, \ 8747 (uintptr_t)iemNativeHlpMemFlatFetchDataU16_Sx_U32, pCallEntry->idxInstr) 8748 8749 #define IEM_MC_FETCH_MEM_FLAT_U16_SX_U64(a_u64Dst, a_GCPtrMem) \ 8750 off = iemNativeEmitMemFetchStoreDataCommon(pReNative, off, a_u64Dst, UINT8_MAX, a_GCPtrMem, \ 8751 sizeof(uint16_t), sizeof(uint16_t) - 1, kIemNativeEmitMemOp_Fetch_Sx_U64, \ 8752 (uintptr_t)iemNativeHlpMemFlatFetchDataU16_Sx_U64, pCallEntry->idxInstr) 8753 8754 /* 32-bit flat: */ 8407 8755 #define IEM_MC_FETCH_MEM_FLAT_U32(a_u32Dst, a_GCPtrMem) \ 8408 off = iemNativeEmitMemFetchStoreDataCommon(pReNative, off, a_u32Dst, UINT8_MAX, a_GCPtrMem, sizeof(uint32_t), true /*fFetch*/, \ 8756 off = iemNativeEmitMemFetchStoreDataCommon(pReNative, off, a_u32Dst, UINT8_MAX, a_GCPtrMem, \ 8757 sizeof(uint32_t), sizeof(uint32_t) - 1, kIemNativeEmitMemOp_Fetch, \ 8409 8758 (uintptr_t)iemNativeHlpMemFlatFetchDataU32, pCallEntry->idxInstr) 8410 8759 8760 #define IEM_MC_FETCH_MEM_FLAT_U32_ZX_U64(a_u64Dst, a_GCPtrMem) \ 8761 off = iemNativeEmitMemFetchStoreDataCommon(pReNative, off, a_u64Dst, UINT8_MAX, a_GCPtrMem, \ 8762 sizeof(uint32_t), sizeof(uint32_t) - 1, kIemNativeEmitMemOp_Fetch_Zx_U64, \ 8763 (uintptr_t)iemNativeHlpMemFlatFetchDataU32, pCallEntry->idxInstr) 8764 8765 #define IEM_MC_FETCH_MEM_FLAT_U32_SX_U64(a_u64Dst, a_GCPtrMem) \ 8766 off = iemNativeEmitMemFetchStoreDataCommon(pReNative, off, a_u64Dst, UINT8_MAX, a_GCPtrMem, \ 8767 sizeof(uint32_t), sizeof(uint32_t) - 1, kIemNativeEmitMemOp_Fetch_Sx_U64, \ 8768 (uintptr_t)iemNativeHlpMemFlatFetchDataU32_Sx_U64, pCallEntry->idxInstr) 8769 8770 /* 64-bit flat: */ 8411 8771 #define IEM_MC_FETCH_MEM_FLAT_U64(a_u64Dst, a_GCPtrMem) \ 8412 off = iemNativeEmitMemFetchStoreDataCommon(pReNative, off, a_u64Dst, UINT8_MAX, a_GCPtrMem, sizeof(uint64_t), true /*fFetch*/, \ 8772 off = iemNativeEmitMemFetchStoreDataCommon(pReNative, off, a_u64Dst, UINT8_MAX, a_GCPtrMem, \ 8773 sizeof(uint64_t), sizeof(uint64_t) - 1, kIemNativeEmitMemOp_Fetch, \ 8413 8774 (uintptr_t)iemNativeHlpMemFlatFetchDataU64, pCallEntry->idxInstr) 8414 8775 … … 8420 8781 8421 8782 #define IEM_MC_STORE_MEM_U8(a_iSeg, a_GCPtrMem, a_u8Value) \ 8422 off = iemNativeEmitMemFetchStoreDataCommon(pReNative, off, a_u8Value, a_iSeg, a_GCPtrMem, sizeof(uint8_t), false /*fFetch*/, \ 8783 off = iemNativeEmitMemFetchStoreDataCommon(pReNative, off, a_u8Value, a_iSeg, a_GCPtrMem, \ 8784 sizeof(uint8_t), 0 /*fAlignMask*/, kIemNativeEmitMemOp_Store, \ 8423 8785 (uintptr_t)iemNativeHlpMemStoreDataU8, pCallEntry->idxInstr) 8424 8786 8425 8787 #define IEM_MC_STORE_MEM_U16(a_iSeg, a_GCPtrMem, a_u16Value) \ 8426 off = iemNativeEmitMemFetchStoreDataCommon(pReNative, off, a_u16Value, a_iSeg, a_GCPtrMem, sizeof(uint16_t), false /*fFetch*/, \ 8788 off = iemNativeEmitMemFetchStoreDataCommon(pReNative, off, a_u16Value, a_iSeg, a_GCPtrMem, \ 8789 sizeof(uint16_t), sizeof(uint16_t) - 1, kIemNativeEmitMemOp_Store, \ 8427 8790 (uintptr_t)iemNativeHlpMemStoreDataU16, pCallEntry->idxInstr) 8428 8791 8429 8792 #define IEM_MC_STORE_MEM_U32(a_iSeg, a_GCPtrMem, a_u32Value) \ 8430 off = iemNativeEmitMemFetchStoreDataCommon(pReNative, off, a_u32Value, a_iSeg, a_GCPtrMem, sizeof(uint32_t), false /*fFetch*/, \ 8793 off = iemNativeEmitMemFetchStoreDataCommon(pReNative, off, a_u32Value, a_iSeg, a_GCPtrMem, \ 8794 sizeof(uint32_t), sizeof(uint32_t) - 1, kIemNativeEmitMemOp_Store, \ 8431 8795 (uintptr_t)iemNativeHlpMemStoreDataU32, pCallEntry->idxInstr) 8432 8796 8433 8797 #define IEM_MC_STORE_MEM_U64(a_iSeg, a_GCPtrMem, a_u64Value) \ 8434 off = iemNativeEmitMemFetchStoreDataCommon(pReNative, off, a_u64Value, a_iSeg, a_GCPtrMem, sizeof(uint64_t), false /*fFetch*/, \ 8798 off = iemNativeEmitMemFetchStoreDataCommon(pReNative, off, a_u64Value, a_iSeg, a_GCPtrMem, \ 8799 sizeof(uint64_t), sizeof(uint64_t) - 1, kIemNativeEmitMemOp_Store, \ 8435 8800 (uintptr_t)iemNativeHlpMemStoreDataU64, pCallEntry->idxInstr) 8436 8801 8437 8802 8438 8803 #define IEM_MC_STORE_MEM_FLAT_U8(a_GCPtrMem, a_u8Value) \ 8439 off = iemNativeEmitMemFetchStoreDataCommon(pReNative, off, a_u8Value, UINT8_MAX, a_GCPtrMem, sizeof(uint8_t), false /*fFetch*/, \ 8804 off = iemNativeEmitMemFetchStoreDataCommon(pReNative, off, a_u8Value, UINT8_MAX, a_GCPtrMem, \ 8805 sizeof(uint8_t), 0 /*fAlignMask*/, kIemNativeEmitMemOp_Store, \ 8440 8806 (uintptr_t)iemNativeHlpMemFlatStoreDataU8, pCallEntry->idxInstr) 8441 8807 8442 8808 #define IEM_MC_STORE_MEM_FLAT_U16(a_GCPtrMem, a_u16Value) \ 8443 off = iemNativeEmitMemFetchStoreDataCommon(pReNative, off, a_u16Value, UINT8_MAX, a_GCPtrMem, sizeof(uint16_t), false /*fFetch*/, \ 8809 off = iemNativeEmitMemFetchStoreDataCommon(pReNative, off, a_u16Value, UINT8_MAX, a_GCPtrMem, \ 8810 sizeof(uint16_t), sizeof(uint16_t) - 1, kIemNativeEmitMemOp_Store, \ 8444 8811 (uintptr_t)iemNativeHlpMemFlatStoreDataU16, pCallEntry->idxInstr) 8445 8812 8446 8813 #define IEM_MC_STORE_MEM_FLAT_U32(a_GCPtrMem, a_u32Value) \ 8447 off = iemNativeEmitMemFetchStoreDataCommon(pReNative, off, a_u32Value, UINT8_MAX, a_GCPtrMem, sizeof(uint32_t), false /*fFetch*/, \ 8814 off = iemNativeEmitMemFetchStoreDataCommon(pReNative, off, a_u32Value, UINT8_MAX, a_GCPtrMem, \ 8815 sizeof(uint32_t), sizeof(uint32_t) - 1, kIemNativeEmitMemOp_Store, \ 8448 8816 (uintptr_t)iemNativeHlpMemFlatStoreDataU32, pCallEntry->idxInstr) 8449 8817 8450 8818 #define IEM_MC_STORE_MEM_FLAT_U64(a_GCPtrMem, a_u64Value) \ 8451 off = iemNativeEmitMemFetchStoreDataCommon(pReNative, off, a_u64Value, UINT8_MAX, a_GCPtrMem, sizeof(uint64_t), false /*fFetch*/, \ 8819 off = iemNativeEmitMemFetchStoreDataCommon(pReNative, off, a_u64Value, UINT8_MAX, a_GCPtrMem, \ 8820 sizeof(uint64_t), sizeof(uint64_t) - 1, kIemNativeEmitMemOp_Store, \ 8452 8821 (uintptr_t)iemNativeHlpMemFlatStoreDataU64, pCallEntry->idxInstr) 8453 8454 8822 8455 8823 … … 8498 8866 */ 8499 8867 uint8_t const idxVarConstValue = iemNativeVarAllocConst(pReNative, cbMem, uValueConst); 8500 off = iemNativeEmitMemFetchStoreDataCommon(pReNative, off, idxVarConstValue, iSegReg, idxVarGCPtrMem, cbMem, 8501 false /*fFetch*/, pfnFunction, idxInstr); 8868 off = iemNativeEmitMemFetchStoreDataCommon(pReNative, off, idxVarConstValue, iSegReg, idxVarGCPtrMem, 8869 cbMem, cbMem - 1, kIemNativeEmitMemOp_Store, 8870 pfnFunction, idxInstr); 8502 8871 iemNativeVarFreeLocal(pReNative, idxVarConstValue); 8503 8872 return off;
Note:
See TracChangeset
for help on using the changeset viewer.