arch,cpu: Make branching() a virtual member of PCStateBase.
Change-Id: I4422d07024e97dbd67e97ad95a16e1b06fd6be12
Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/52066
Tested-by: kokoro <noreply+kokoro@google.com>
Maintainer: Gabe Black <gabe.black@gmail.com>
Reviewed-by: Daniel Carvalho <odanrc@yahoo.com.br>
diff --git a/src/arch/arm/pcstate.hh b/src/arch/arm/pcstate.hh
index f2d85d2..7b75ed8 100644
--- a/src/arch/arm/pcstate.hh
+++ b/src/arch/arm/pcstate.hh
@@ -196,7 +196,7 @@
uint8_t size() const { return _size; }
bool
- branching() const
+ branching() const override
{
return ((this->pc() + this->size()) != this->npc());
}
diff --git a/src/arch/generic/pcstate.hh b/src/arch/generic/pcstate.hh
index 415e80d..f2501e6 100644
--- a/src/arch/generic/pcstate.hh
+++ b/src/arch/generic/pcstate.hh
@@ -127,6 +127,7 @@
}
virtual void advance() = 0;
+ virtual bool branching() const = 0;
void
serialize(CheckpointOut &cp) const override
@@ -365,7 +366,7 @@
};
bool
- branching() const
+ branching() const override
{
return this->npc() != this->pc() + InstWidth;
}
@@ -414,7 +415,7 @@
explicit UPCState(Addr val) { set(val); }
bool
- branching() const
+ branching() const override
{
return this->npc() != this->pc() + InstWidth ||
this->nupc() != this->upc() + 1;
@@ -486,7 +487,7 @@
explicit DelaySlotPCState(Addr val) { set(val); }
bool
- branching() const
+ branching() const override
{
return !(this->nnpc() == this->npc() + InstWidth &&
(this->npc() == this->pc() + InstWidth ||
@@ -559,7 +560,7 @@
explicit DelaySlotUPCState(Addr val) { set(val); }
bool
- branching() const
+ branching() const override
{
return Base::branching() || this->nupc() != this->upc() + 1;
}
diff --git a/src/arch/riscv/pcstate.hh b/src/arch/riscv/pcstate.hh
index 53b358c..0125507 100644
--- a/src/arch/riscv/pcstate.hh
+++ b/src/arch/riscv/pcstate.hh
@@ -77,7 +77,7 @@
bool rv32() const { return _rv32; }
bool
- branching() const
+ branching() const override
{
if (_compressed) {
return npc() != pc() + 2 || nupc() != upc() + 1;
diff --git a/src/arch/x86/pcstate.hh b/src/arch/x86/pcstate.hh
index bfc7d4f..a0ed6ff 100644
--- a/src/arch/x86/pcstate.hh
+++ b/src/arch/x86/pcstate.hh
@@ -88,7 +88,7 @@
void size(uint8_t newSize) { _size = newSize; }
bool
- branching() const
+ branching() const override
{
return (this->npc() != this->pc() + size()) ||
(this->nupc() != this->upc() + 1);
diff --git a/src/cpu/o3/fetch.cc b/src/cpu/o3/fetch.cc
index 530fcfb..61ffc17 100644
--- a/src/cpu/o3/fetch.cc
+++ b/src/cpu/o3/fetch.cc
@@ -1287,7 +1287,7 @@
// If we're branching after this instruction, quit fetching
// from the same block.
- predictedBranch |= this_pc.as<TheISA::PCState>().branching();
+ predictedBranch |= this_pc.branching();
predictedBranch |= lookupAndUpdateNextPC(instruction, *next_pc);
if (predictedBranch) {
DPRINTF(Fetch, "Branch detected with PC = %s\n", this_pc);
diff --git a/src/cpu/o3/iew.cc b/src/cpu/o3/iew.cc
index 062a566..8dbd5b3 100644
--- a/src/cpu/o3/iew.cc
+++ b/src/cpu/o3/iew.cc
@@ -461,8 +461,7 @@
inst->seqNum < toCommit->squashedSeqNum[tid]) {
toCommit->squash[tid] = true;
toCommit->squashedSeqNum[tid] = inst->seqNum;
- toCommit->branchTaken[tid] =
- inst->pcState().as<TheISA::PCState>().branching();
+ toCommit->branchTaken[tid] = inst->pcState().branching();
set(toCommit->pc[tid], inst->pcState());
inst->staticInst->advancePC(*toCommit->pc[tid]);
diff --git a/src/cpu/simple/base.cc b/src/cpu/simple/base.cc
index 84c729e..0f11eb9 100644
--- a/src/cpu/simple/base.cc
+++ b/src/cpu/simple/base.cc
@@ -461,8 +461,7 @@
SimpleExecContext &t_info = *threadInfo[curThread];
SimpleThread* thread = t_info.thread;
- const bool branching =
- thread->pcState().as<TheISA::PCState>().branching();
+ const bool branching = thread->pcState().branching();
//Since we're moving to a new pc, zero out the offset
t_info.fetchOffset = 0;