decode_cache.hh (9024:5851586f399c) | decode_cache.hh (11168:f98eb2da15a4) |
---|---|
1/* 2 * Copyright (c) 2011 Google 3 * All rights reserved. 4 * 5 * Redistribution and use in source and binary forms, with or without 6 * modification, are permitted provided that the following conditions are 7 * met: redistributions of source code must retain the above copyright 8 * notice, this list of conditions and the following disclaimer; --- 17 unchanged lines hidden (view full) --- 26 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 27 * 28 * Authors: Gabe Black 29 */ 30 31#ifndef __CPU_DECODE_CACHE_HH__ 32#define __CPU_DECODE_CACHE_HH__ 33 | 1/* 2 * Copyright (c) 2011 Google 3 * All rights reserved. 4 * 5 * Redistribution and use in source and binary forms, with or without 6 * modification, are permitted provided that the following conditions are 7 * met: redistributions of source code must retain the above copyright 8 * notice, this list of conditions and the following disclaimer; --- 17 unchanged lines hidden (view full) --- 26 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 27 * 28 * Authors: Gabe Black 29 */ 30 31#ifndef __CPU_DECODE_CACHE_HH__ 32#define __CPU_DECODE_CACHE_HH__ 33 |
34#include <unordered_map> 35 |
|
34#include "arch/isa_traits.hh" 35#include "arch/types.hh" | 36#include "arch/isa_traits.hh" 37#include "arch/types.hh" |
36#include "base/hashmap.hh" | |
37#include "config/the_isa.hh" 38#include "cpu/static_inst_fwd.hh" 39 40namespace TheISA 41{ 42 class Decoder; 43} 44 45namespace DecodeCache 46{ 47 48/// Hash for decoded instructions. | 38#include "config/the_isa.hh" 39#include "cpu/static_inst_fwd.hh" 40 41namespace TheISA 42{ 43 class Decoder; 44} 45 46namespace DecodeCache 47{ 48 49/// Hash for decoded instructions. |
49typedef m5::hash_map<TheISA::ExtMachInst, StaticInstPtr> InstMap; | 50typedef std::unordered_map<TheISA::ExtMachInst, StaticInstPtr> InstMap; |
50 51/// A sparse map from an Addr to a Value, stored in page chunks. 52template<class Value> 53class AddrMap 54{ 55 protected: 56 // A pages worth of cache entries. 57 struct CachePage { 58 Value items[TheISA::PageBytes]; 59 }; 60 // A map of cache pages which allows a sparse mapping. | 51 52/// A sparse map from an Addr to a Value, stored in page chunks. 53template<class Value> 54class AddrMap 55{ 56 protected: 57 // A pages worth of cache entries. 58 struct CachePage { 59 Value items[TheISA::PageBytes]; 60 }; 61 // A map of cache pages which allows a sparse mapping. |
61 typedef typename m5::hash_map<Addr, CachePage *> PageMap; | 62 typedef typename std::unordered_map<Addr, CachePage *> PageMap; |
62 typedef typename PageMap::iterator PageIt; 63 // Mini cache of recent lookups. 64 PageIt recent[2]; 65 PageMap pageMap; 66 67 /// Update the mini cache of recent lookups. 68 /// @param recentest The most recent result; 69 void 70 update(PageIt recentest) 71 { 72 recent[1] = recent[0]; 73 recent[0] = recentest; 74 } 75 76 /// Attempt to find the CacheePage which goes with a particular 77 /// address. First check the small cache of recent results, then | 63 typedef typename PageMap::iterator PageIt; 64 // Mini cache of recent lookups. 65 PageIt recent[2]; 66 PageMap pageMap; 67 68 /// Update the mini cache of recent lookups. 69 /// @param recentest The most recent result; 70 void 71 update(PageIt recentest) 72 { 73 recent[1] = recent[0]; 74 recent[0] = recentest; 75 } 76 77 /// Attempt to find the CacheePage which goes with a particular 78 /// address. First check the small cache of recent results, then |
78 /// actually look in the hash_map. | 79 /// actually look in the hash map. |
79 /// @param addr The address to look up. 80 CachePage * 81 getPage(Addr addr) 82 { 83 Addr page_addr = addr & ~(TheISA::PageBytes - 1); 84 85 // Check against recent lookups. 86 if (recent[0] != pageMap.end()) { --- 43 unchanged lines hidden --- | 80 /// @param addr The address to look up. 81 CachePage * 82 getPage(Addr addr) 83 { 84 Addr page_addr = addr & ~(TheISA::PageBytes - 1); 85 86 // Check against recent lookups. 87 if (recent[0] != pageMap.end()) { --- 43 unchanged lines hidden --- |