diff options
author | Gabe Black <gabeblack@google.com> | 2017-12-19 23:14:34 -0800 |
---|---|---|
committer | Gabe Black <gabeblack@google.com> | 2018-01-10 12:19:54 +0000 |
commit | 78524bda5606e1b60615f57ebd6bfe5bcdd71afb (patch) | |
tree | 346b73741acae374e37328c1c72c5289278749af /src/cpu | |
parent | 3fb4d59a9d66d729b292bf804a8b5fdbe6e40d89 (diff) | |
download | gem5-78524bda5606e1b60615f57ebd6bfe5bcdd71afb.tar.xz |
alpha,arm,mips,power,riscv,sparc,x86,cpu: Get rid of ISA_HAS_DELAY_SLOT.
This constant is, first, a #define, and second only used in one place.
In that one place, it appears that the code it guards is no longer
necessary in general. It was originally written to avoid refetching a
block of data that you're still in, even if you've moved slightly
farther in it because you're skipping the next instruction due to an
annulled branch delay slot. In reality however, in SPARC, the one ISA
I'm aware of which has this sort of branching behavior, the PC state
object will correctly determine that no branch is happening in these
cases. Code lower down in the loop will then recompute where fetching
should continue based on the next PC, automatically skipping the
annulled branch slot without misinterpretting the gap as a branch.
This change therefore also removes this block of code.
Change-Id: I820ebc9df10aeb4fcb69c12f6a784e9ec616743c
Reviewed-on: https://gem5-review.googlesource.com/6821
Reviewed-by: Andreas Sandberg <andreas.sandberg@arm.com>
Maintainer: Andreas Sandberg <andreas.sandberg@arm.com>
Diffstat (limited to 'src/cpu')
-rw-r--r-- | src/cpu/o3/fetch_impl.hh | 11 |
1 files changed, 0 insertions, 11 deletions
diff --git a/src/cpu/o3/fetch_impl.hh b/src/cpu/o3/fetch_impl.hh index d8793426b..2e8ec67ae 100644 --- a/src/cpu/o3/fetch_impl.hh +++ b/src/cpu/o3/fetch_impl.hh @@ -1277,17 +1277,6 @@ DefaultFetch<Impl>::fetch(bool &status_change) break; } - if (ISA_HAS_DELAY_SLOT && pcOffset == 0) { - // Walk past any annulled delay slot instructions. - Addr pcAddr = thisPC.instAddr() & BaseCPU::PCMask; - while (fetchAddr != pcAddr && blkOffset < numInsts) { - blkOffset++; - fetchAddr += instSize; - } - if (blkOffset >= numInsts) - break; - } - MachInst inst = TheISA::gtoh(cacheInsts[blkOffset]); decoder[tid]->moreBytes(thisPC, fetchAddr, inst); |