CPU: Eliminate the simPalCheck funciton.

This commit is contained in:
Gabe Black 2008-10-11 12:17:24 -07:00
parent da7209ec93
commit f621b7b81f
15 changed files with 24 additions and 122 deletions

View file

@ -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

View file

@ -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);

View file

@ -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"

View file

@ -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.

View file

@ -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

View file

@ -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()

View file

@ -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();

View file

@ -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);

View file

@ -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

View file

@ -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);

View file

@ -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>

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -185,8 +185,6 @@ class SimpleThread : public ThreadState
void dumpFuncProfile(); void dumpFuncProfile();
bool simPalCheck(int palFunc);
#endif #endif
/******************************************* /*******************************************