CheckerCPU: Add function stubs to non-ARM ISA source to compile with CheckerCPU

Making the CheckerCPU a runtime time option requires the code to be compatible
with ISAs other than ARM.  This patch adds the appropriate function
stubs to allow compilation.
This commit is contained in:
Geoffrey Blake 2012-03-09 09:59:28 -05:00
parent 043709fdfa
commit 98cf57fb89
13 changed files with 95 additions and 5 deletions

View file

@ -600,6 +600,13 @@ TLB::translateTiming(RequestPtr req, ThreadContext *tc,
translation->finish(translateAtomic(req, tc, mode), req, tc, mode);
}
Fault
TLB::translateFunctional(RequestPtr req, ThreadContext *tc, Mode mode)
{
panic("Not implemented\n");
return NoFault;
}
} // namespace AlphaISA
AlphaISA::TLB *

View file

@ -144,6 +144,10 @@ class TLB : public BaseTLB
Fault translateAtomic(RequestPtr req, ThreadContext *tc, Mode mode);
void translateTiming(RequestPtr req, ThreadContext *tc,
Translation *translation, Mode mode);
/**
* translateFunctional stub function for future CheckerCPU support
*/
Fault translateFunctional(RequestPtr req, ThreadContext *tc, Mode mode);
};
} // namespace AlphaISA

View file

@ -339,6 +339,13 @@ TLB::translateTiming(RequestPtr req, ThreadContext *tc,
translation->finish(translateAtomic(req, tc, mode), req, tc, mode);
}
Fault
TLB::translateFunctional(RequestPtr req, ThreadContext *tc, Mode mode)
{
panic("Not implemented\n");
return NoFault;
}
MipsISA::PTE &
TLB::index(bool advance)

View file

@ -114,6 +114,11 @@ class TLB : public BaseTLB
void translateTiming(RequestPtr req, ThreadContext *tc,
Translation *translation, Mode mode);
/** Function stub for CheckerCPU compilation issues. MIPS does not
* support the Checker model at the moment.
*/
Fault translateFunctional(RequestPtr req, ThreadContext *tc, Mode mode);
private:
Fault translateInst(RequestPtr req, ThreadContext *tc);
Fault translateData(RequestPtr req, ThreadContext *tc, bool write);

View file

@ -326,6 +326,13 @@ TLB::translateTiming(RequestPtr req, ThreadContext *tc,
translation->finish(translateAtomic(req, tc, mode), req, tc, mode);
}
Fault
TLB::translateFunctional(RequestPtr req, ThreadContext *tc, Mode mode)
{
panic("Not implemented\n");
return NoFault;
}
PowerISA::PTE &
TLB::index(bool advance)
{

View file

@ -160,6 +160,10 @@ class TLB : public BaseTLB
Fault translateAtomic(RequestPtr req, ThreadContext *tc, Mode mode);
void translateTiming(RequestPtr req, ThreadContext *tc,
Translation *translation, Mode mode);
/** Stub function for CheckerCPU compilation support. Power ISA not
* supported by Checker at the moment
*/
Fault translateFunctional(RequestPtr req, ThreadContext *tc, Mode mode);
// Checkpointing
void serialize(std::ostream &os);

View file

@ -841,6 +841,13 @@ TLB::translateTiming(RequestPtr req, ThreadContext *tc,
translation->finish(translateAtomic(req, tc, mode), req, tc, mode);
}
Fault
TLB::translateFunctional(RequestPtr req, ThreadContext *tc, Mode mode)
{
panic("Not implemented\n");
return NoFault;
}
Tick
TLB::doMmuRegRead(ThreadContext *tc, Packet *pkt)
{

View file

@ -164,6 +164,10 @@ class TLB : public BaseTLB
Fault translateAtomic(RequestPtr req, ThreadContext *tc, Mode mode);
void translateTiming(RequestPtr req, ThreadContext *tc,
Translation *translation, Mode mode);
/** Stub function for compilation support with CheckerCPU. SPARC ISA
* does not support the Checker model at the moment
*/
Fault translateFunctional(RequestPtr req, ThreadContext *tc, Mode mode);
Tick doMmuRegRead(ThreadContext *tc, Packet *pkt);
Tick doMmuRegWrite(ThreadContext *tc, Packet *pkt);
void GetTsbPtr(ThreadContext *tc, Addr addr, int ctx, Addr *ptrs);

View file

@ -405,6 +405,13 @@ TLB::translateTiming(RequestPtr req, ThreadContext *tc,
translation->finish(fault, req, tc, mode);
}
Fault
TLB::translateFunctional(RequestPtr req, ThreadContext *tc, Mode mode)
{
panic("Not implemented\n");
return NoFault;
}
Walker *
TLB::getWalker()
{

View file

@ -114,6 +114,10 @@ namespace X86ISA
Fault translateAtomic(RequestPtr req, ThreadContext *tc, Mode mode);
void translateTiming(RequestPtr req, ThreadContext *tc,
Translation *translation, Mode mode);
/** Stub function for compilation support of CheckerCPU. x86 ISA does
* not support Checker model at the moment
*/
Fault translateFunctional(RequestPtr req, ThreadContext *tc, Mode mode);
TlbEntry * insert(Addr vpn, TlbEntry &entry);

View file

@ -311,6 +311,20 @@ class CheckerCPU : public BaseCPU
int reg_idx = si->destRegIdx(idx) - TheISA::Ctrl_Base_DepTag;
return thread->setMiscReg(reg_idx, val);
}
#if THE_ISA == MIPS_ISA
uint64_t readRegOtherThread(int misc_reg)
{
panic("MIPS MT not defined for CheckerCPU.\n");
return 0;
}
void setRegOtherThread(int misc_reg, const TheISA::MiscReg &val)
{
panic("MIPS MT not defined for CheckerCPU.\n");
}
#endif
/////////////////////////////////////////
void recordPCChange(const TheISA::PCState &val)

View file

@ -44,6 +44,7 @@
#include <list>
#include <string>
#include "arch/isa_traits.hh"
#include "arch/vtophys.hh"
#include "base/refcnt.hh"
#include "config/the_isa.hh"
@ -201,9 +202,9 @@ Checker<Impl>::verify(DynInstPtr &completed_inst)
// maintain $r0 semantics
thread->setIntReg(ZeroReg, 0);
#ifdef TARGET_ALPHA
thread->setFloatRegDouble(ZeroReg, 0.0);
#endif // TARGET_ALPHA
#if THE_ISA == ALPHA_ISA
thread->setFloatReg(ZeroReg, 0.0);
#endif
// Check if any recent PC changes match up with anything we
// expect to happen. This is mostly to check if traps or
@ -320,7 +321,9 @@ Checker<Impl>::verify(DynInstPtr &completed_inst)
thread->pcState(pcState);
instPtr = thread->decoder.decode(newMachInst,
pcState.instAddr());
machInst = newMachInst;
#if THE_ISA != X86_ISA
machInst = newMachInst;
#endif
} else {
fetchDone = false;
fetchOffset += sizeof(TheISA::MachInst);
@ -476,7 +479,11 @@ Checker<Impl>::validateInst(DynInstPtr &inst)
}
}
MachInst mi = static_cast<MachInst>(inst->staticInst->machInst);
MachInst mi;
#if THE_ISA != X86_ISA
mi = static_cast<MachInst>(inst->staticInst->machInst);
#endif
if (mi != machInst) {
panic("%lli: Binary instructions do not match! Inst: %#x, "

View file

@ -40,6 +40,7 @@
#include "arch/kernel_stats.hh"
class EndQuiesceEvent;
class CheckerCPU;
namespace Kernel {
class Statistics;
};
@ -76,6 +77,12 @@ class InOrderThreadContext : public ThreadContext
/** @TODO: PERF: Should we bind this to a pointer in constructor? */
TheISA::TLB *getDTBPtr() { return cpu->getDTBPtr(); }
/** Currently InOrder model does not support CheckerCPU, this is
* merely here for supporting compilation of gem5 with the Checker
* as a runtime option
*/
CheckerCPU *getCheckerCpuPtr() { return NULL; }
Decoder *getDecoderPtr() { return cpu->getDecoderPtr(); }
System *getSystemPtr() { return cpu->system; }
@ -215,6 +222,12 @@ class InOrderThreadContext : public ThreadContext
void pcState(const TheISA::PCState &val)
{ cpu->pcState(val, thread->threadId()); }
/** Needs to be implemented for future CheckerCPU support.
* See O3CPU for examples on how to integrate Checker.
*/
void pcStateNoRecord(const TheISA::PCState &val)
{}
Addr instAddr()
{ return cpu->instAddr(thread->threadId()); }