diff options
author | Gabe Black <gabeblack@google.com> | 2019-04-27 20:37:44 -0700 |
---|---|---|
committer | Gabe Black <gabeblack@google.com> | 2019-04-30 02:52:08 +0000 |
commit | f9b72476fd948cde713f145834fba81574b0fde0 (patch) | |
tree | a557df5a61859aae9a121c2868f1ba5764e6407b | |
parent | 2268d07623910dbab50ae0f80e93068acb25cfa9 (diff) | |
download | gem5-f9b72476fd948cde713f145834fba81574b0fde0.tar.xz |
alpha: Implement HWREI in the ISA.
This moves it out of generic interfaces and the CPU implementations.
Change-Id: I6767d6b26d0ae128b5bdad5830dce838be74e256
Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/18431
Reviewed-by: Andreas Sandberg <andreas.sandberg@arm.com>
Reviewed-by: Jason Lowe-Power <jason@lowepower.com>
Maintainer: Jason Lowe-Power <jason@lowepower.com>
Tested-by: kokoro <noreply+kokoro@google.com>
-rw-r--r-- | src/arch/alpha/isa/decoder.isa | 19 |
1 files changed, 18 insertions, 1 deletions
diff --git a/src/arch/alpha/isa/decoder.isa b/src/arch/alpha/isa/decoder.isa index 8789fa905..5635d381a 100644 --- a/src/arch/alpha/isa/decoder.isa +++ b/src/arch/alpha/isa/decoder.isa @@ -930,7 +930,24 @@ decode OPCODE default Unknown::unknown() { 0x1e: decode PALMODE { 0: OpcdecFault::hw_rei(); format BasicOperate { - 1: hw_rei({{ xc->hwrei(); }}, IsSerializing, IsSerializeBefore); + 1: hw_rei({{ + Addr pc = PC; + if (!(pc & 0x3)) + return std::make_shared<UnimplementedOpcodeFault>(); + + LockFlag = false; + NPC = IprExcAddr; + + ThreadContext *tc = xc->tcBase(); + auto *base_stats = tc->getKernelStats(); + auto *stats = dynamic_cast<AlphaISA::Kernel::Statistics *>( + base_stats); + assert(stats || !base_stats); + if (stats) + stats->hwrei(); + + CPA::cpa()->swAutoBegin(tc, IprExcAddr); + }}, IsSerializing, IsSerializeBefore); } } |