CPU: Eliminate the simPalCheck funciton.
This commit is contained in:
parent
da7209ec93
commit
f621b7b81f
15 changed files with 24 additions and 122 deletions
|
@ -547,36 +547,3 @@ copyIprs(ThreadContext *src, ThreadContext *dest)
|
||||||
}
|
}
|
||||||
|
|
||||||
} // namespace AlphaISA
|
} // namespace AlphaISA
|
||||||
|
|
||||||
#if FULL_SYSTEM
|
|
||||||
|
|
||||||
using namespace AlphaISA;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Check for special simulator handling of specific PAL calls.
|
|
||||||
* If return value is false, actual PAL call will be suppressed.
|
|
||||||
*/
|
|
||||||
bool
|
|
||||||
SimpleThread::simPalCheck(int palFunc)
|
|
||||||
{
|
|
||||||
if (kernelStats)
|
|
||||||
kernelStats->callpal(palFunc, tc);
|
|
||||||
|
|
||||||
switch (palFunc) {
|
|
||||||
case PAL::halt:
|
|
||||||
halt();
|
|
||||||
if (--System::numSystemsRunning == 0)
|
|
||||||
exitSimLoop("all cpus halted");
|
|
||||||
break;
|
|
||||||
|
|
||||||
case PAL::bpt:
|
|
||||||
case PAL::bugchk:
|
|
||||||
if (system->breakpoint())
|
|
||||||
return false;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
#endif // FULL_SYSTEM
|
|
||||||
|
|
|
@ -698,7 +698,28 @@ decode OPCODE default Unknown::unknown() {
|
||||||
else {
|
else {
|
||||||
// check to see if simulator wants to do something special
|
// check to see if simulator wants to do something special
|
||||||
// on this PAL call (including maybe suppress it)
|
// on this PAL call (including maybe suppress it)
|
||||||
bool dopal = xc->simPalCheck(palFunc);
|
|
||||||
|
bool dopal = true;
|
||||||
|
|
||||||
|
ThreadContext * tc = xc->tcBase();
|
||||||
|
AlphaISA::Kernel::Statistics * kernelStats = tc->getKernelStats();
|
||||||
|
System * system = tc->getSystemPtr();
|
||||||
|
if (kernelStats)
|
||||||
|
kernelStats->callpal(palFunc, tc);
|
||||||
|
|
||||||
|
switch (palFunc) {
|
||||||
|
case PAL::halt:
|
||||||
|
tc->halt();
|
||||||
|
if (--System::numSystemsRunning == 0)
|
||||||
|
exitSimLoop("all cpus halted");
|
||||||
|
break;
|
||||||
|
|
||||||
|
case PAL::bpt:
|
||||||
|
case PAL::bugchk:
|
||||||
|
if (system->breakpoint())
|
||||||
|
dopal = false;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
if (dopal) {
|
if (dopal) {
|
||||||
xc->setMiscReg(IPR_EXC_ADDR, NPC);
|
xc->setMiscReg(IPR_EXC_ADDR, NPC);
|
||||||
|
|
|
@ -70,6 +70,7 @@ output exec {{
|
||||||
|
|
||||||
#if FULL_SYSTEM
|
#if FULL_SYSTEM
|
||||||
#include "arch/alpha/kernel_stats.hh"
|
#include "arch/alpha/kernel_stats.hh"
|
||||||
|
#include "arch/alpha/osfpal.hh"
|
||||||
#include "sim/pseudo_inst.hh"
|
#include "sim/pseudo_inst.hh"
|
||||||
#endif
|
#endif
|
||||||
#include "arch/alpha/ipr.hh"
|
#include "arch/alpha/ipr.hh"
|
||||||
|
|
|
@ -337,7 +337,6 @@ class CheckerCPU : public BaseCPU
|
||||||
|
|
||||||
#if FULL_SYSTEM
|
#if FULL_SYSTEM
|
||||||
void ev5_trap(Fault fault) { fault->invoke(tc); }
|
void ev5_trap(Fault fault) { fault->invoke(tc); }
|
||||||
bool simPalCheck(int palFunc) { return thread->simPalCheck(palFunc); }
|
|
||||||
#else
|
#else
|
||||||
// Assume that the normal CPU's call to syscall was successful.
|
// Assume that the normal CPU's call to syscall was successful.
|
||||||
// The checker's state would have already been updated by the syscall.
|
// The checker's state would have already been updated by the syscall.
|
||||||
|
|
|
@ -143,13 +143,7 @@ class ExecContext {
|
||||||
* given flags. */
|
* given flags. */
|
||||||
void writeHint(Addr addr, int size, unsigned flags);
|
void writeHint(Addr addr, int size, unsigned flags);
|
||||||
|
|
||||||
#if FULL_SYSTEM
|
#if !FULL_SYSTEM
|
||||||
/**
|
|
||||||
* Check for special simulator handling of specific PAL calls. If
|
|
||||||
* return value is false, actual PAL call will be suppressed.
|
|
||||||
*/
|
|
||||||
bool simPalCheck(int palFunc);
|
|
||||||
#else
|
|
||||||
/** Executes a syscall specified by the callnum. */
|
/** Executes a syscall specified by the callnum. */
|
||||||
void syscall(int64_t callnum);
|
void syscall(int64_t callnum);
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -53,10 +53,6 @@
|
||||||
#include "cpu/checker/cpu.hh"
|
#include "cpu/checker/cpu.hh"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if THE_ISA == ALPHA_ISA
|
|
||||||
#include "arch/alpha/osfpal.hh"
|
|
||||||
#endif
|
|
||||||
|
|
||||||
class BaseCPUParams;
|
class BaseCPUParams;
|
||||||
|
|
||||||
using namespace TheISA;
|
using namespace TheISA;
|
||||||
|
@ -905,32 +901,6 @@ FullO3CPU<Impl>::post_interrupt(int int_num, int index)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
template <class Impl>
|
|
||||||
bool
|
|
||||||
FullO3CPU<Impl>::simPalCheck(int palFunc, unsigned tid)
|
|
||||||
{
|
|
||||||
#if THE_ISA == ALPHA_ISA
|
|
||||||
if (this->thread[tid]->kernelStats)
|
|
||||||
this->thread[tid]->kernelStats->callpal(palFunc,
|
|
||||||
this->threadContexts[tid]);
|
|
||||||
|
|
||||||
switch (palFunc) {
|
|
||||||
case PAL::halt:
|
|
||||||
halt();
|
|
||||||
if (--System::numSystemsRunning == 0)
|
|
||||||
exitSimLoop("all cpus halted");
|
|
||||||
break;
|
|
||||||
|
|
||||||
case PAL::bpt:
|
|
||||||
case PAL::bugchk:
|
|
||||||
if (this->system->breakpoint())
|
|
||||||
return false;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
template <class Impl>
|
template <class Impl>
|
||||||
Fault
|
Fault
|
||||||
FullO3CPU<Impl>::getInterrupts()
|
FullO3CPU<Impl>::getInterrupts()
|
||||||
|
|
|
@ -414,8 +414,6 @@ class FullO3CPU : public BaseO3CPU
|
||||||
/** Posts an interrupt. */
|
/** Posts an interrupt. */
|
||||||
void post_interrupt(int int_num, int index);
|
void post_interrupt(int int_num, int index);
|
||||||
|
|
||||||
bool simPalCheck(int palFunc, unsigned tid);
|
|
||||||
|
|
||||||
/** Returns the Fault for any valid interrupt. */
|
/** Returns the Fault for any valid interrupt. */
|
||||||
Fault getInterrupts();
|
Fault getInterrupts();
|
||||||
|
|
||||||
|
|
|
@ -170,7 +170,6 @@ class BaseO3DynInst : public BaseDynInst<Impl>
|
||||||
#if FULL_SYSTEM
|
#if FULL_SYSTEM
|
||||||
/** Traps to handle specified fault. */
|
/** Traps to handle specified fault. */
|
||||||
void trap(Fault fault);
|
void trap(Fault fault);
|
||||||
bool simPalCheck(int palFunc);
|
|
||||||
#else
|
#else
|
||||||
/** Calls a syscall. */
|
/** Calls a syscall. */
|
||||||
void syscall(int64_t callnum);
|
void syscall(int64_t callnum);
|
||||||
|
|
|
@ -130,16 +130,6 @@ BaseO3DynInst<Impl>::trap(Fault fault)
|
||||||
{
|
{
|
||||||
this->cpu->trap(fault, this->threadNumber);
|
this->cpu->trap(fault, this->threadNumber);
|
||||||
}
|
}
|
||||||
|
|
||||||
template <class Impl>
|
|
||||||
bool
|
|
||||||
BaseO3DynInst<Impl>::simPalCheck(int palFunc)
|
|
||||||
{
|
|
||||||
#if THE_ISA != ALPHA_ISA
|
|
||||||
panic("simPalCheck called, but PAL only exists in Alpha!\n");
|
|
||||||
#endif
|
|
||||||
return this->cpu->simPalCheck(palFunc, this->threadNumber);
|
|
||||||
}
|
|
||||||
#else
|
#else
|
||||||
template <class Impl>
|
template <class Impl>
|
||||||
void
|
void
|
||||||
|
|
|
@ -510,7 +510,6 @@ class OzoneCPU : public BaseCPU
|
||||||
void dumpInsts() { frontEnd->dumpInsts(); }
|
void dumpInsts() { frontEnd->dumpInsts(); }
|
||||||
|
|
||||||
#if FULL_SYSTEM
|
#if FULL_SYSTEM
|
||||||
bool simPalCheck(int palFunc);
|
|
||||||
void processInterrupts();
|
void processInterrupts();
|
||||||
#else
|
#else
|
||||||
void syscall(uint64_t &callnum);
|
void syscall(uint64_t &callnum);
|
||||||
|
|
|
@ -685,31 +685,6 @@ OzoneCPU<Impl>::processInterrupts()
|
||||||
interrupt->invoke(thread.getTC());
|
interrupt->invoke(thread.getTC());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
template <class Impl>
|
|
||||||
bool
|
|
||||||
OzoneCPU<Impl>::simPalCheck(int palFunc)
|
|
||||||
{
|
|
||||||
// Need to move this to ISA code
|
|
||||||
// May also need to make this per thread
|
|
||||||
thread.kernelStats->callpal(palFunc, tc);
|
|
||||||
|
|
||||||
switch (palFunc) {
|
|
||||||
case PAL::halt:
|
|
||||||
haltContext(thread.readTid());
|
|
||||||
if (--System::numSystemsRunning == 0)
|
|
||||||
exitSimLoop("all cpus halted");
|
|
||||||
break;
|
|
||||||
|
|
||||||
case PAL::bpt:
|
|
||||||
case PAL::bugchk:
|
|
||||||
if (system->breakpoint())
|
|
||||||
return false;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
template <class Impl>
|
template <class Impl>
|
||||||
|
|
|
@ -241,7 +241,6 @@ class OzoneDynInst : public BaseDynInst<Impl>
|
||||||
|
|
||||||
#if FULL_SYSTEM
|
#if FULL_SYSTEM
|
||||||
void trap(Fault fault);
|
void trap(Fault fault);
|
||||||
bool simPalCheck(int palFunc);
|
|
||||||
#else
|
#else
|
||||||
void syscall(uint64_t &callnum);
|
void syscall(uint64_t &callnum);
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -254,13 +254,6 @@ OzoneDynInst<Impl>::trap(Fault fault)
|
||||||
{
|
{
|
||||||
fault->invoke(this->thread->getTC());
|
fault->invoke(this->thread->getTC());
|
||||||
}
|
}
|
||||||
|
|
||||||
template <class Impl>
|
|
||||||
bool
|
|
||||||
OzoneDynInst<Impl>::simPalCheck(int palFunc)
|
|
||||||
{
|
|
||||||
return this->cpu->simPalCheck(palFunc);
|
|
||||||
}
|
|
||||||
#else
|
#else
|
||||||
template <class Impl>
|
template <class Impl>
|
||||||
void
|
void
|
||||||
|
|
|
@ -414,7 +414,6 @@ class BaseSimpleCPU : public BaseCPU
|
||||||
|
|
||||||
#if FULL_SYSTEM
|
#if FULL_SYSTEM
|
||||||
void ev5_trap(Fault fault) { fault->invoke(tc); }
|
void ev5_trap(Fault fault) { fault->invoke(tc); }
|
||||||
bool simPalCheck(int palFunc) { return thread->simPalCheck(palFunc); }
|
|
||||||
#else
|
#else
|
||||||
void syscall(int64_t callnum) { thread->syscall(callnum); }
|
void syscall(int64_t callnum) { thread->syscall(callnum); }
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -185,8 +185,6 @@ class SimpleThread : public ThreadState
|
||||||
|
|
||||||
void dumpFuncProfile();
|
void dumpFuncProfile();
|
||||||
|
|
||||||
bool simPalCheck(int palFunc);
|
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/*******************************************
|
/*******************************************
|
||||||
|
|
Loading…
Reference in a new issue