MMU: Create constants for our BAT flags.
This avoids a few hard-coded constants in several files.
This commit is contained in:
1 parent
54e32fd91e
commit
5152c997a4
5 files changed
+44
-34
No files matched your search
@@ -288,16 +288,20 @@ struct TranslateResult
|
||||
};
|
||||
TranslateResult JitCache_TranslateAddress(u32 address);
|
||||
|
||||
static const int BAT_INDEX_SHIFT = 17;
|
||||
constexpr int BAT_INDEX_SHIFT = 17;
|
||||
constexpr u32 BAT_PAGE_SIZE = 1 << BAT_INDEX_SHIFT;
|
||||
constexpr u32 BAT_MAPPED_BIT = 0x1;
|
||||
constexpr u32 BAT_PHYSICAL_BIT = 0x2;
|
||||
constexpr u32 BAT_RESULT_MASK = ~0x3;
|
||||
using BatTable = std::array<u32, 1 << (32 - BAT_INDEX_SHIFT)>; // 128 KB
|
||||
extern BatTable ibat_table;
|
||||
extern BatTable dbat_table;
|
||||
inline bool TranslateBatAddess(const BatTable& bat_table, u32* address)
|
||||
{
|
||||
u32 bat_result = bat_table[*address >> BAT_INDEX_SHIFT];
|
||||
if ((bat_result & 1) == 0)
|
||||
if ((bat_result & BAT_MAPPED_BIT) == 0)
|
||||
return false;
|
||||
*address = (bat_result & ~3) | (*address & 0x0001FFFF);
|
||||
*address = (bat_result & BAT_RESULT_MASK) | (*address & (BAT_PAGE_SIZE - 1));
|
||||
return true;
|
||||
}
|
||||
} // namespace
|
||||
|
||||
Reference in new issue
Block a user