From bbe57a66cad1b4159f351bf55f84c97040b04753 Mon Sep 17 00:00:00 2001 From: James Rowe Date: Thu, 24 Nov 2016 12:42:32 -0700 Subject: Expose page table to dynarmic for optimized reads and writes to the JIT --- src/core/memory.cpp | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) (limited to 'src/core/memory.cpp') diff --git a/src/core/memory.cpp b/src/core/memory.cpp index 64c388374..65e4bba85 100644 --- a/src/core/memory.cpp +++ b/src/core/memory.cpp @@ -45,13 +45,11 @@ struct SpecialRegion { * requires an indexed fetch and a check for NULL. */ struct PageTable { - static const size_t NUM_ENTRIES = 1 << (32 - PAGE_BITS); - /** * Array of memory pointers backing each page. An entry can only be non-null if the * corresponding entry in the `attributes` array is of type `Memory`. */ - std::array pointers; + std::array pointers; /** * Contains MMIO handlers that back memory regions whose entries in the `attribute` array is of @@ -63,13 +61,13 @@ struct PageTable { * Array of fine grained page attributes. If it is set to any value other than `Memory`, then * the corresponding entry in `pointers` MUST be set to null. */ - std::array attributes; + std::array attributes; /** * Indicates the number of externally cached resources touching a page that should be * flushed before the memory is accessed */ - std::array cached_res_count; + std::array cached_res_count; }; /// Singular page table used for the singleton process @@ -77,6 +75,10 @@ static PageTable main_page_table; /// Currently active page table static PageTable* current_page_table = &main_page_table; +std::array* GetCurrentPageTablePointers() { + return ¤t_page_table->pointers; +} + static void MapPages(u32 base, u32 size, u8* memory, PageType type) { LOG_DEBUG(HW_Memory, "Mapping %p onto %08X-%08X", memory, base * PAGE_SIZE, (base + size) * PAGE_SIZE); @@ -84,7 +86,7 @@ static void MapPages(u32 base, u32 size, u8* memory, PageType type) { u32 end = base + size; while (base != end) { - ASSERT_MSG(base < PageTable::NUM_ENTRIES, "out of range mapping at %08X", base); + ASSERT_MSG(base < PAGE_TABLE_NUM_ENTRIES, "out of range mapping at %08X", base); // Since pages are unmapped on shutdown after video core is shutdown, the renderer may be // null here -- cgit v1.2.3