X-Git-Url: https://git.libre-soc.org/?a=blobdiff_plain;f=src%2Fmem%2Fpage_table.hh;h=fce063280ff98c9e9c49ba630c02ee891b3b9dd9;hb=bc732b59fd82689490306090974f1f4c06741b0a;hp=26248261aa03f83d13a06a7249c05d517d7d0024;hpb=4a5b51b516853c9fcaabc44caacdd7e8e93dc0ef;p=gem5.git diff --git a/src/mem/page_table.hh b/src/mem/page_table.hh index 26248261a..fce063280 100644 --- a/src/mem/page_table.hh +++ b/src/mem/page_table.hh @@ -24,6 +24,8 @@ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * Authors: Steve Reinhardt */ /** @@ -35,9 +37,10 @@ #define __PAGE_TABLE__ #include -#include +#include "sim/faults.hh" #include "arch/isa_traits.hh" +#include "base/hashmap.hh" #include "base/trace.hh" #include "mem/request.hh" #include "mem/packet.hh" @@ -46,12 +49,19 @@ class System; /** - * Page Table Decleration. + * Page Table Declaration. */ class PageTable { protected: - std::map pTable; + m5::hash_map pTable; + + struct cacheElement { + Addr paddr; + Addr vaddr; + } ; + + struct cacheElement pTableCache[3]; const Addr pageSize; const Addr offsetMask; @@ -67,9 +77,9 @@ class PageTable Addr pageAlign(Addr a) { return (a & ~offsetMask); } Addr pageOffset(Addr a) { return (a & offsetMask); } - Fault page_check(Addr addr, int size) const; + Fault page_check(Addr addr, int64_t size) const; - void allocate(Addr vaddr, int size); + void allocate(Addr vaddr, int64_t size); /** * Translate function