Commit e37e6ee6e100ebc355b4a48ae9a7802b38b8dac0
1 parent
8fcc55f9
Allow 5 mmu indexes.
This is necessary for alpha because it has 4 protection levels and pal mode. Signed-off-by: Tristan Gingold <gingold@adacore.com> Signed-off-by: Aurelien Jarno <aurelien@aurel32.net> git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@7028 c046a42c-6fe2-441c-8c8c-71466251a162
Showing
2 changed files
with
49 additions
and
10 deletions
exec.c
... | ... | @@ -1734,12 +1734,18 @@ void tlb_flush(CPUState *env, int flush_global) |
1734 | 1734 | env->tlb_table[2][i].addr_read = -1; |
1735 | 1735 | env->tlb_table[2][i].addr_write = -1; |
1736 | 1736 | env->tlb_table[2][i].addr_code = -1; |
1737 | -#if (NB_MMU_MODES == 4) | |
1737 | +#endif | |
1738 | +#if (NB_MMU_MODES >= 4) | |
1738 | 1739 | env->tlb_table[3][i].addr_read = -1; |
1739 | 1740 | env->tlb_table[3][i].addr_write = -1; |
1740 | 1741 | env->tlb_table[3][i].addr_code = -1; |
1741 | 1742 | #endif |
1743 | +#if (NB_MMU_MODES >= 5) | |
1744 | + env->tlb_table[4][i].addr_read = -1; | |
1745 | + env->tlb_table[4][i].addr_write = -1; | |
1746 | + env->tlb_table[4][i].addr_code = -1; | |
1742 | 1747 | #endif |
1748 | + | |
1743 | 1749 | } |
1744 | 1750 | |
1745 | 1751 | memset (env->tb_jmp_cache, 0, TB_JMP_CACHE_SIZE * sizeof (void *)); |
... | ... | @@ -1783,9 +1789,12 @@ void tlb_flush_page(CPUState *env, target_ulong addr) |
1783 | 1789 | tlb_flush_entry(&env->tlb_table[1][i], addr); |
1784 | 1790 | #if (NB_MMU_MODES >= 3) |
1785 | 1791 | tlb_flush_entry(&env->tlb_table[2][i], addr); |
1786 | -#if (NB_MMU_MODES == 4) | |
1792 | +#endif | |
1793 | +#if (NB_MMU_MODES >= 4) | |
1787 | 1794 | tlb_flush_entry(&env->tlb_table[3][i], addr); |
1788 | 1795 | #endif |
1796 | +#if (NB_MMU_MODES >= 5) | |
1797 | + tlb_flush_entry(&env->tlb_table[4][i], addr); | |
1789 | 1798 | #endif |
1790 | 1799 | |
1791 | 1800 | tlb_flush_jmp_cache(env, addr); |
... | ... | @@ -1869,10 +1878,14 @@ void cpu_physical_memory_reset_dirty(ram_addr_t start, ram_addr_t end, |
1869 | 1878 | #if (NB_MMU_MODES >= 3) |
1870 | 1879 | for(i = 0; i < CPU_TLB_SIZE; i++) |
1871 | 1880 | tlb_reset_dirty_range(&env->tlb_table[2][i], start1, length); |
1872 | -#if (NB_MMU_MODES == 4) | |
1881 | +#endif | |
1882 | +#if (NB_MMU_MODES >= 4) | |
1873 | 1883 | for(i = 0; i < CPU_TLB_SIZE; i++) |
1874 | 1884 | tlb_reset_dirty_range(&env->tlb_table[3][i], start1, length); |
1875 | 1885 | #endif |
1886 | +#if (NB_MMU_MODES >= 5) | |
1887 | + for(i = 0; i < CPU_TLB_SIZE; i++) | |
1888 | + tlb_reset_dirty_range(&env->tlb_table[4][i], start1, length); | |
1876 | 1889 | #endif |
1877 | 1890 | } |
1878 | 1891 | } |
... | ... | @@ -1918,10 +1931,14 @@ void cpu_tlb_update_dirty(CPUState *env) |
1918 | 1931 | #if (NB_MMU_MODES >= 3) |
1919 | 1932 | for(i = 0; i < CPU_TLB_SIZE; i++) |
1920 | 1933 | tlb_update_dirty(&env->tlb_table[2][i]); |
1921 | -#if (NB_MMU_MODES == 4) | |
1934 | +#endif | |
1935 | +#if (NB_MMU_MODES >= 4) | |
1922 | 1936 | for(i = 0; i < CPU_TLB_SIZE; i++) |
1923 | 1937 | tlb_update_dirty(&env->tlb_table[3][i]); |
1924 | 1938 | #endif |
1939 | +#if (NB_MMU_MODES >= 5) | |
1940 | + for(i = 0; i < CPU_TLB_SIZE; i++) | |
1941 | + tlb_update_dirty(&env->tlb_table[4][i]); | |
1925 | 1942 | #endif |
1926 | 1943 | } |
1927 | 1944 | |
... | ... | @@ -1943,9 +1960,12 @@ static inline void tlb_set_dirty(CPUState *env, target_ulong vaddr) |
1943 | 1960 | tlb_set_dirty1(&env->tlb_table[1][i], vaddr); |
1944 | 1961 | #if (NB_MMU_MODES >= 3) |
1945 | 1962 | tlb_set_dirty1(&env->tlb_table[2][i], vaddr); |
1946 | -#if (NB_MMU_MODES == 4) | |
1963 | +#endif | |
1964 | +#if (NB_MMU_MODES >= 4) | |
1947 | 1965 | tlb_set_dirty1(&env->tlb_table[3][i], vaddr); |
1948 | 1966 | #endif |
1967 | +#if (NB_MMU_MODES >= 5) | |
1968 | + tlb_set_dirty1(&env->tlb_table[4][i], vaddr); | |
1949 | 1969 | #endif |
1950 | 1970 | } |
1951 | 1971 | ... | ... |
softmmu_exec.h
... | ... | @@ -60,6 +60,7 @@ |
60 | 60 | #include "softmmu_header.h" |
61 | 61 | #undef ACCESS_TYPE |
62 | 62 | #undef MEMSUFFIX |
63 | +#endif /* (NB_MMU_MODES >= 3) */ | |
63 | 64 | |
64 | 65 | #if (NB_MMU_MODES >= 4) |
65 | 66 | |
... | ... | @@ -78,12 +79,30 @@ |
78 | 79 | #include "softmmu_header.h" |
79 | 80 | #undef ACCESS_TYPE |
80 | 81 | #undef MEMSUFFIX |
82 | +#endif /* (NB_MMU_MODES >= 4) */ | |
81 | 83 | |
82 | -#if (NB_MMU_MODES > 4) | |
83 | -#error "NB_MMU_MODES > 4 is not supported for now" | |
84 | -#endif /* (NB_MMU_MODES > 4) */ | |
85 | -#endif /* (NB_MMU_MODES == 4) */ | |
86 | -#endif /* (NB_MMU_MODES >= 3) */ | |
84 | +#if (NB_MMU_MODES >= 5) | |
85 | + | |
86 | +#define ACCESS_TYPE 4 | |
87 | +#define MEMSUFFIX MMU_MODE4_SUFFIX | |
88 | +#define DATA_SIZE 1 | |
89 | +#include "softmmu_header.h" | |
90 | + | |
91 | +#define DATA_SIZE 2 | |
92 | +#include "softmmu_header.h" | |
93 | + | |
94 | +#define DATA_SIZE 4 | |
95 | +#include "softmmu_header.h" | |
96 | + | |
97 | +#define DATA_SIZE 8 | |
98 | +#include "softmmu_header.h" | |
99 | +#undef ACCESS_TYPE | |
100 | +#undef MEMSUFFIX | |
101 | +#endif /* (NB_MMU_MODES >= 5) */ | |
102 | + | |
103 | +#if (NB_MMU_MODES > 5) | |
104 | +#error "NB_MMU_MODES > 5 is not supported for now" | |
105 | +#endif /* (NB_MMU_MODES > 5) */ | |
87 | 106 | |
88 | 107 | /* these access are slower, they must be as rare as possible */ |
89 | 108 | #define ACCESS_TYPE (NB_MMU_MODES) | ... | ... |