diff options
author | Gabe Black <gblack@eecs.umich.edu> | 2012-05-26 13:45:12 -0700 |
---|---|---|
committer | Gabe Black <gblack@eecs.umich.edu> | 2012-05-26 13:45:12 -0700 |
commit | 19df4e94ee4f2323e5fe1b915f7e81a6034cfc56 (patch) | |
tree | ae0fbc2a53a90e022e91b00f028451759c2d270d /src/arch/x86/decoder.cc | |
parent | 0cba96ba6a5d7a4dab2a63b14149c49dfbfbb3bc (diff) | |
download | gem5-19df4e94ee4f2323e5fe1b915f7e81a6034cfc56.tar.xz |
ISA,CPU: Generalize and split out the components of the decode cache.
This will allow it to be specialized by the ISAs. The existing caching scheme
is provided by the BasicDecodeCache in the GenericISA namespace and is built
from the generalized components.
--HG--
rename : src/cpu/decode_cache.cc => src/arch/generic/decode_cache.cc
Diffstat (limited to 'src/arch/x86/decoder.cc')
-rw-r--r-- | src/arch/x86/decoder.cc | 21 |
1 files changed, 20 insertions, 1 deletions
diff --git a/src/arch/x86/decoder.cc b/src/arch/x86/decoder.cc index d7199fa82..5fb2dcaf4 100644 --- a/src/arch/x86/decoder.cc +++ b/src/arch/x86/decoder.cc @@ -408,6 +408,25 @@ Decoder::State Decoder::doImmediateState() return nextState; } -DecodeCache Decoder::defaultCache; +DecodeCache::InstMap Decoder::instMap; +DecodeCache::AddrMap<StaticInstPtr> Decoder::decodePages; + +StaticInstPtr +Decoder::decode(ExtMachInst mach_inst, Addr addr) +{ + StaticInstPtr &si = decodePages.lookup(addr); + if (si && (si->machInst == mach_inst)) + return si; + + DecodeCache::InstMap::iterator iter = instMap.find(mach_inst); + if (iter != instMap.end()) { + si = iter->second; + return si; + } + + si = decodeInst(mach_inst); + instMap[mach_inst] = si; + return si; +} } |