arch: cpu: Make the ExtMachInst type a template argument in InstMap.
authorGabe Black <gabeblack@google.com>
Tue, 27 Mar 2018 08:20:05 +0000 (01:20 -0700)
committerGabe Black <gabeblack@google.com>
Tue, 27 Mar 2018 10:57:54 +0000 (10:57 +0000)
This doesn't completely hide the ISA specific ExtMachInst type inside
the ISAs since it still gets applied in arch/generic, but it at least
pulls it into the arch directory.

Change-Id: Ic2188d59696530d7ecafdff0785d71867182701d
Reviewed-on: https://gem5-review.googlesource.com/9403
Reviewed-by: Andreas Sandberg <andreas.sandberg@arm.com>
Maintainer: Gabe Black <gabeblack@google.com>

src/arch/generic/decode_cache.cc
src/arch/generic/decode_cache.hh
src/arch/riscv/decoder.hh
src/arch/x86/decoder.cc
src/arch/x86/decoder.hh
src/cpu/decode_cache.hh

index 782dfca43f5c26674844df351ff48af3881695c6..0f7a9d991b2446f469d206d81ef8de92978a928b 100644 (file)
@@ -46,7 +46,7 @@ BasicDecodeCache::decode(TheISA::Decoder *decoder,
     if (si && (si->machInst == mach_inst))
         return si;
 
-    DecodeCache::InstMap::iterator iter = instMap.find(mach_inst);
+    auto iter = instMap.find(mach_inst);
     if (iter != instMap.end()) {
         si = iter->second;
         return si;
index c6bce72265fe7a427d93c34b4c29127278f90cd4..ebfaa0645fa102780ef67802cf787939391920e6 100644 (file)
@@ -47,7 +47,7 @@ namespace GenericISA
 class BasicDecodeCache
 {
   private:
-    DecodeCache::InstMap instMap;
+    DecodeCache::InstMap<TheISA::ExtMachInst> instMap;
     DecodeCache::AddrMap<StaticInstPtr> decodePages;
 
   public:
index 91fe7873e24af7d545fa106fe4bb7a92b9062106..750321167ea29800fd88f9a1a44c3cbf1f17405a 100644 (file)
@@ -48,7 +48,7 @@ class ISA;
 class Decoder
 {
   private:
-    DecodeCache::InstMap instMap;
+    DecodeCache::InstMap<ExtMachInst> instMap;
     bool aligned;
     bool mid;
     bool more;
index 835d5e25d2443138d65b61ffee40b053f4065846..54701bb7301c3d48d65db1aff66afe86fa9ac767 100644 (file)
@@ -681,7 +681,7 @@ Decoder::InstCacheMap Decoder::instCacheMap;
 StaticInstPtr
 Decoder::decode(ExtMachInst mach_inst, Addr addr)
 {
-    DecodeCache::InstMap::iterator iter = instMap->find(mach_inst);
+    auto iter = instMap->find(mach_inst);
     if (iter != instMap->end())
         return iter->second;
 
index a60aa469ab121d03a64622f1f1685fd2dc44d8aa..3630ea8c8dc170c604d085d689ebb9fbc0de1b85 100644 (file)
@@ -229,8 +229,9 @@ class Decoder
     typedef std::unordered_map<CacheKey, DecodePages *> AddrCacheMap;
     AddrCacheMap addrCacheMap;
 
-    DecodeCache::InstMap *instMap;
-    typedef std::unordered_map<CacheKey, DecodeCache::InstMap *> InstCacheMap;
+    DecodeCache::InstMap<ExtMachInst> *instMap;
+    typedef std::unordered_map<
+            CacheKey, DecodeCache::InstMap<ExtMachInst> *> InstCacheMap;
     static InstCacheMap instCacheMap;
 
   public:
@@ -277,7 +278,7 @@ class Decoder
         if (imIter != instCacheMap.end()) {
             instMap = imIter->second;
         } else {
-            instMap = new DecodeCache::InstMap;
+            instMap = new DecodeCache::InstMap<ExtMachInst>;
             instCacheMap[m5Reg] = instMap;
         }
     }
index c451cbb6999a7c0ca854d0c4b1dc6b608c5bd438..2d33455e04696cd558eeba4ea561ff9d362dffff 100644 (file)
@@ -47,7 +47,8 @@ namespace DecodeCache
 {
 
 /// Hash for decoded instructions.
-typedef std::unordered_map<TheISA::ExtMachInst, StaticInstPtr> InstMap;
+template <typename EMI>
+using InstMap = std::unordered_map<EMI, StaticInstPtr>;
 
 /// A sparse map from an Addr to a Value, stored in page chunks.
 template<class Value>