CheckerCPU: Add function stubs to non-ARM ISA source to compile with CheckerCPU
authorGeoffrey Blake <geoffrey.blake@arm.com>
Fri, 9 Mar 2012 14:59:28 +0000 (09:59 -0500)
committerGeoffrey Blake <geoffrey.blake@arm.com>
Fri, 9 Mar 2012 14:59:28 +0000 (09:59 -0500)
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.

13 files changed:
src/arch/alpha/tlb.cc
src/arch/alpha/tlb.hh
src/arch/mips/tlb.cc
src/arch/mips/tlb.hh
src/arch/power/tlb.cc
src/arch/power/tlb.hh
src/arch/sparc/tlb.cc
src/arch/sparc/tlb.hh
src/arch/x86/tlb.cc
src/arch/x86/tlb.hh
src/cpu/checker/cpu.hh
src/cpu/checker/cpu_impl.hh
src/cpu/inorder/thread_context.hh

index f1199b9b611c4a9baee2b6bb83decff0097e8833..1d18c8d391438b5e3216f5b60996f6dd68fce281 100644 (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 *
index 1d4b6c6f880980670c8456ade8d94561a87b9565..4e56100c790e6ca78c290a11f32fe101caef8441 100644 (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
index cd6d47d1e26a75c0ec3aa1cb90f44b9ef3d307f3..49ff2caba645c7c4ed865d83bee4de8b9a143c78 100644 (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)
index 834431536fa35e14da7bb20e2643e007e6cd2a76..e949d16d9a55363c7a5a889a132edb4ed7eac5c0 100644 (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);
index 9f535e9e516d713e06621500ad7de6c325274c7c..de828a625dc0623634b5b01b30b7dfd2efac0dd4 100644 (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)
 {
index 590477b6a8c014e6130ecac1940fe2682c2e1ee0..3cf2a3706af788aa7e8b92c0c68d3bbaecb9fa96 100644 (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);
index a6179e0f88ed756e320c1a6811e78be058eba587..37f1479b0a2945eeba4cd4a82f8b9971d1833310 100644 (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)
 {
index cefa381752c6d73ec9261f44aa40794e8f808704..89a049a8bc68605639085d5515657cadf5198926 100644 (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);
index 456f03208e35d2f383ef025c2d9d68481ccc63fc..b7d0b828cb88a6cac123f443fd02e5cd4c413903 100644 (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()
 {
index a943683af1514dcc185116300c4215569fa75d0b..078b8b8d6de78f9f3a3bc08fc07010ed6667c09a 100644 (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);
 
index c3d3a379edd4eb909aaf83560e6b8c745ff4cf5a..afc453f875155a53585cfb5145676d1b92523fda 100644 (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)
index 4f3fa34d2249873a2cb9e3024c549f6f821419cb..167c3531fecae769cfb34f43ec9853775149b85c 100644 (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, "
index 0f9b1028ea9e18553b43d64908749798efdd80d7..aaf7d6ede1fa1ae543759c18d4e4f3836477bbe4 100644 (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()); }