* Nathan Binkert
*/
-#include "cpu/base.hh"
+#include "arch/isa_traits.hh"
+#include "arch/utility.hh"
+#include "base/trace.hh"
+#include "config/the_isa.hh"
#include "cpu/thread_context.hh"
-#include "kern/kernel_stats.hh"
+#include "debug/PCEvent.hh"
#include "kern/system_events.hh"
-#include "sim/system.hh"
using namespace TheISA;
void
SkipFuncEvent::process(ThreadContext *tc)
{
- Addr newpc = tc->readIntReg(ReturnAddressReg);
+ TheISA::PCState oldPC M5_VAR_USED = tc->pcState();
- DPRINTF(PCEvent, "skipping %s: pc=%x, newpc=%x\n", description,
- tc->readPC(), newpc);
-
- tc->setPC(newpc);
- tc->setNextPC(tc->readPC() + sizeof(TheISA::MachInst));
-/*
- BranchPred *bp = tc->getCpuPtr()->getBranchPred();
- if (bp != NULL) {
- bp->popRAS(tc->getThreadNum());
- }
-*/
-}
-
-void
-IdleStartEvent::process(ThreadContext *tc)
-{
- if (tc->getKernelStats())
- tc->getKernelStats()->setIdleProcess(
- tc->readMiscReg(AlphaISA::IPR_PALtemp23), tc);
- remove();
+ // Call ISA specific code to do the skipping
+ TheISA::skipFunction(tc);
+ DPRINTF(PCEvent, "skipping %s: pc = %s, newpc = %s\n", description,
+ oldPC, tc->pcState());
}