Commit cc6747f4c94de5ebe9605f3592633928934f6295

Authored by blueswir1
1 parent 06e67a82

Add mmu tlb demap support (Igor Kovalenko)

git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@5332 c046a42c-6fe2-441c-8c8c-71466251a162
Showing 1 changed file with 35 additions and 1 deletions
target-sparc/op_helper.c
... ... @@ -1941,6 +1941,8 @@ void helper_st_asi(target_ulong addr, target_ulong val, int asi, int size)
1941 1941 }
1942 1942 case 0x55: // I-MMU data access
1943 1943 {
  1944 + // TODO: auto demap
  1945 +
1944 1946 unsigned int i = (addr >> 3) & 0x3f;
1945 1947  
1946 1948 env->itlb_tag[i] = env->immuregs[6];
... ... @@ -1948,7 +1950,22 @@ void helper_st_asi(target_ulong addr, target_ulong val, int asi, int size)
1948 1950 return;
1949 1951 }
1950 1952 case 0x57: // I-MMU demap
1951   - // XXX
  1953 + {
  1954 + unsigned int i;
  1955 +
  1956 + for (i = 0; i < 64; i++) {
  1957 + if ((env->itlb_tte[i] & 0x8000000000000000ULL) != 0) {
  1958 + target_ulong mask = 0xffffffffffffe000ULL;
  1959 +
  1960 + mask <<= 3 * ((env->itlb_tte[i] >> 61) & 3);
  1961 + if ((val & mask) == (env->itlb_tag[i] & mask)) {
  1962 + env->itlb_tag[i] = 0;
  1963 + env->itlb_tte[i] = 0;
  1964 + }
  1965 + return;
  1966 + }
  1967 + }
  1968 + }
1952 1969 return;
1953 1970 case 0x58: // D-MMU regs
1954 1971 {
... ... @@ -2018,6 +2035,23 @@ void helper_st_asi(target_ulong addr, target_ulong val, int asi, int size)
2018 2035 return;
2019 2036 }
2020 2037 case 0x5f: // D-MMU demap
  2038 + {
  2039 + unsigned int i;
  2040 +
  2041 + for (i = 0; i < 64; i++) {
  2042 + if ((env->dtlb_tte[i] & 0x8000000000000000ULL) != 0) {
  2043 + target_ulong mask = 0xffffffffffffe000ULL;
  2044 +
  2045 + mask <<= 3 * ((env->dtlb_tte[i] >> 61) & 3);
  2046 + if ((val & mask) == (env->dtlb_tag[i] & mask)) {
  2047 + env->dtlb_tag[i] = 0;
  2048 + env->dtlb_tte[i] = 0;
  2049 + }
  2050 + return;
  2051 + }
  2052 + }
  2053 + }
  2054 + return;
2021 2055 case 0x49: // Interrupt data receive
2022 2056 // XXX
2023 2057 return;
... ...