cpu: Remove hwrei from the generic interfaces.

This mechanism is specific to Alpha and doesn't belong sprinkled around
the CPU's generic mechanisms.

Change-Id: I87904d1a08df2b03eb770205e2c4b94db25201a1
Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/18432
Reviewed-by: Gabe Black <gabeblack@google.com>
Maintainer: Gabe Black <gabeblack@google.com>
Tested-by: kokoro <noreply+kokoro@google.com>
This commit is contained in:
Gabe Black
2019-04-27 20:51:22 -07:00
parent 0eb763c77f
commit 40cc7cdd53
11 changed files with 0 additions and 103 deletions

View File

@@ -485,28 +485,6 @@ copyIprs(ThreadContext *src, ThreadContext *dest)
using namespace AlphaISA;
Fault
SimpleThread::hwrei()
{
auto *stats = dynamic_cast<AlphaISA::Kernel::Statistics *>(kernelStats);
assert(stats || !kernelStats);
PCState pc = pcState();
if (!(pc.pc() & 0x3))
return std::make_shared<UnimplementedOpcodeFault>();
pc.npc(readMiscRegNoEffect(IPR_EXC_ADDR));
pcState(pc);
CPA::cpa()->swAutoBegin(this, pc.npc());
if (stats)
stats->hwrei();
// FIXME: XXX check for interrupts? XXX
return NoFault;
}
/**
* Check for special simulator handling of specific PAL calls.
* If return value is false, actual PAL call will be suppressed.

View File

@@ -539,7 +539,6 @@ class CheckerCPU : public BaseCPU, public ExecContext
void setStCondFailures(unsigned int sc_failures) override {}
/////////////////////////////////////////////////////
Fault hwrei() override { return thread->hwrei(); }
bool simPalCheck(int palFunc) override
{ return thread->simPalCheck(palFunc); }
void wakeup(ThreadID tid) override { }

View File

@@ -314,12 +314,6 @@ class ExecContext {
* @name Alpha-Specific Interfaces
*/
/**
* Somewhat Alpha-specific function that handles returning from an
* error or interrupt.
*/
virtual Fault hwrei() = 0;
/**
* Check for special simulator handling of specific PAL calls. If
* return value is false, actual PAL call will be suppressed.

View File

@@ -365,16 +365,6 @@ class ExecContext : public ::ExecContext
return thread.setMiscReg(reg.index(), val);
}
Fault
hwrei() override
{
#if THE_ISA == ALPHA_ISA
return thread.hwrei();
#else
return NoFault;
#endif
}
bool
simPalCheck(int palFunc) override
{

View File

@@ -917,24 +917,6 @@ FullO3CPU<Impl>::removeThread(ThreadID tid)
*/
}
template <class Impl>
Fault
FullO3CPU<Impl>::hwrei(ThreadID tid)
{
#if THE_ISA == ALPHA_ISA
// Need to clear the lock flag upon returning from an interrupt.
this->setMiscRegNoEffect(AlphaISA::MISCREG_LOCKFLAG, false, tid);
auto *stats = dynamic_cast<AlphaISA::Kernel::Statistics *>(
this->thread[tid]->kernelStats);
assert(stats);
stats->hwrei();
// FIXME: XXX check for interrupts? XXX
#endif
return NoFault;
}
template <class Impl>
bool
FullO3CPU<Impl>::simPalCheck(int palFunc, ThreadID tid)

View File

@@ -385,9 +385,6 @@ class FullO3CPU : public BaseO3CPU
/** Traps to handle given fault. */
void trap(const Fault &fault, ThreadID tid, const StaticInstPtr &inst);
/** HW return from error interrupt. */
Fault hwrei(ThreadID tid);
bool simPalCheck(int palFunc, ThreadID tid);
/** Check if a change in renaming is needed for vector registers.

View File

@@ -248,8 +248,6 @@ class BaseO3DynInst : public BaseDynInst<Impl>
}
}
}
/** Calls hardware return from error interrupt. */
Fault hwrei() override;
/** Traps to handle specified fault. */
void trap(const Fault &fault);
bool simPalCheck(int palFunc) override;

View File

@@ -184,34 +184,6 @@ BaseO3DynInst<Impl>::completeAcc(PacketPtr pkt)
return this->fault;
}
template <class Impl>
Fault
BaseO3DynInst<Impl>::hwrei()
{
#if THE_ISA == ALPHA_ISA
// Can only do a hwrei when in pal mode.
if (!(this->instAddr() & 0x3))
return std::make_shared<AlphaISA::UnimplementedOpcodeFault>();
// Set the next PC based on the value of the EXC_ADDR IPR.
AlphaISA::PCState pc = this->pcState();
pc.npc(this->cpu->readMiscRegNoEffect(AlphaISA::IPR_EXC_ADDR,
this->threadNumber));
this->pcState(pc);
if (CPA::available()) {
ThreadContext *tc = this->cpu->tcBase(this->threadNumber);
CPA::cpa()->swAutoBegin(tc, this->nextInstAddr());
}
// Tell CPU to clear any state it needs to if a hwrei is taken.
this->cpu->hwrei(this->threadNumber);
#else
#endif
// FIXME: XXX check for interrupts? XXX
return NoFault;
}
template <class Impl>
void
BaseO3DynInst<Impl>::trap(const Fault &fault)

View File

@@ -502,12 +502,6 @@ class SimpleExecContext : public ExecContext {
/** Returns a pointer to the ThreadContext. */
ThreadContext *tcBase() override { return thread->getTC(); }
/**
* Somewhat Alpha-specific function that handles returning from an
* error or interrupt.
*/
Fault hwrei() override { return thread->hwrei(); }
/**
* Check for special simulator handling of specific PAL calls. If
* return value is false, actual PAL call will be suppressed.

View File

@@ -216,11 +216,6 @@ SimpleThread::copyArchRegs(ThreadContext *src_tc)
// The following methods are defined in src/arch/alpha/ev5.cc for
// Alpha.
#if THE_ISA != ALPHA_ISA
Fault
SimpleThread::hwrei()
{
return NoFault;
}
bool
SimpleThread::simPalCheck(int palFunc)

View File

@@ -181,8 +181,6 @@ class SimpleThread : public ThreadState, public ThreadContext
void dumpFuncProfile() override;
Fault hwrei();
bool simPalCheck(int palFunc);
/*******************************************