summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGabe Black <gabeblack@google.com>2018-03-27 01:20:05 -0700
committerGabe Black <gabeblack@google.com>2018-03-27 10:57:54 +0000
commit563e19d1fd151fe222af2455536d8239f5c6d3dc (patch)
tree91a22d01bd431df0acaeb305c9bc91307ae65fd1
parent4384493da74547e3af0537034fe2644688c388fe (diff)
downloadgem5-563e19d1fd151fe222af2455536d8239f5c6d3dc.tar.xz
arch: cpu: Make the ExtMachInst type a template argument in InstMap.
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>
-rw-r--r--src/arch/generic/decode_cache.cc2
-rw-r--r--src/arch/generic/decode_cache.hh2
-rw-r--r--src/arch/riscv/decoder.hh2
-rw-r--r--src/arch/x86/decoder.cc2
-rw-r--r--src/arch/x86/decoder.hh7
-rw-r--r--src/cpu/decode_cache.hh3
6 files changed, 10 insertions, 8 deletions
diff --git a/src/arch/generic/decode_cache.cc b/src/arch/generic/decode_cache.cc
index 782dfca43..0f7a9d991 100644
--- a/src/arch/generic/decode_cache.cc
+++ b/src/arch/generic/decode_cache.cc
@@ -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;
diff --git a/src/arch/generic/decode_cache.hh b/src/arch/generic/decode_cache.hh
index c6bce7226..ebfaa0645 100644
--- a/src/arch/generic/decode_cache.hh
+++ b/src/arch/generic/decode_cache.hh
@@ -47,7 +47,7 @@ namespace GenericISA
class BasicDecodeCache
{
private:
- DecodeCache::InstMap instMap;
+ DecodeCache::InstMap<TheISA::ExtMachInst> instMap;
DecodeCache::AddrMap<StaticInstPtr> decodePages;
public:
diff --git a/src/arch/riscv/decoder.hh b/src/arch/riscv/decoder.hh
index 91fe7873e..750321167 100644
--- a/src/arch/riscv/decoder.hh
+++ b/src/arch/riscv/decoder.hh
@@ -48,7 +48,7 @@ class ISA;
class Decoder
{
private:
- DecodeCache::InstMap instMap;
+ DecodeCache::InstMap<ExtMachInst> instMap;
bool aligned;
bool mid;
bool more;
diff --git a/src/arch/x86/decoder.cc b/src/arch/x86/decoder.cc
index 835d5e25d..54701bb73 100644
--- a/src/arch/x86/decoder.cc
+++ b/src/arch/x86/decoder.cc
@@ -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;
diff --git a/src/arch/x86/decoder.hh b/src/arch/x86/decoder.hh
index a60aa469a..3630ea8c8 100644
--- a/src/arch/x86/decoder.hh
+++ b/src/arch/x86/decoder.hh
@@ -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;
}
}
diff --git a/src/cpu/decode_cache.hh b/src/cpu/decode_cache.hh
index c451cbb69..2d33455e0 100644
--- a/src/cpu/decode_cache.hh
+++ b/src/cpu/decode_cache.hh
@@ -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>