CPU: Eliminate the simPalCheck funciton.
authorGabe Black <gblack@eecs.umich.edu>
Sat, 11 Oct 2008 19:17:24 +0000 (12:17 -0700)
committerGabe Black <gblack@eecs.umich.edu>
Sat, 11 Oct 2008 19:17:24 +0000 (12:17 -0700)
15 files changed:
src/arch/alpha/ev5.cc
src/arch/alpha/isa/decoder.isa
src/arch/alpha/isa/main.isa
src/cpu/checker/cpu.hh
src/cpu/exec_context.hh
src/cpu/o3/cpu.cc
src/cpu/o3/cpu.hh
src/cpu/o3/dyn_inst.hh
src/cpu/o3/dyn_inst_impl.hh
src/cpu/ozone/cpu.hh
src/cpu/ozone/cpu_impl.hh
src/cpu/ozone/dyn_inst.hh
src/cpu/ozone/dyn_inst_impl.hh
src/cpu/simple/base.hh
src/cpu/simple_thread.hh

index eefe86bfffd478c45a852a882145e7fc4911047d..c11b3632ef972ccde751be13d1bd52ed4d6c3ba2 100644 (file)
@@ -547,36 +547,3 @@ copyIprs(ThreadContext *src, ThreadContext *dest)
 }
 
 } // 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
index 8025ba69f8b436ed170c35d36be784ec4509b53d..06676ae87103b3bff222fc824dd13692619f6383 100644 (file)
@@ -698,7 +698,28 @@ decode OPCODE default Unknown::unknown() {
         else {
             // check to see if simulator wants to do something special
             // 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) {
                 xc->setMiscReg(IPR_EXC_ADDR, NPC);
index 07898269702e3bd22fcbea18a220bf9ee60d3095..0f7f74359a93eb938e793d2c84a5313c2e8adb97 100644 (file)
@@ -70,6 +70,7 @@ output exec {{
 
 #if FULL_SYSTEM
 #include "arch/alpha/kernel_stats.hh"
+#include "arch/alpha/osfpal.hh"
 #include "sim/pseudo_inst.hh"
 #endif
 #include "arch/alpha/ipr.hh"
index b234bf23fd8259bc222bc0b22fd34040bda257b7..0f01f17c57a690446644d6dd370f4900943e07cb 100644 (file)
@@ -337,7 +337,6 @@ class CheckerCPU : public BaseCPU
 
 #if FULL_SYSTEM
     void ev5_trap(Fault fault) { fault->invoke(tc); }
-    bool simPalCheck(int palFunc) { return thread->simPalCheck(palFunc); }
 #else
     // Assume that the normal CPU's call to syscall was successful.
     // The checker's state would have already been updated by the syscall.
index 93192246cc4814679a24ec39a54a9af07253d792..836cf43528a4ac1919467f0b95a55079c02ac1e9 100644 (file)
@@ -143,13 +143,7 @@ class ExecContext {
      * given flags. */
     void writeHint(Addr addr, int size, unsigned flags);
 
-#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
+#if !FULL_SYSTEM
     /** Executes a syscall specified by the callnum. */
     void syscall(int64_t callnum);
 #endif
index 174f4a98d0be3e8b637aca7d9b39931b8b9bfae2..ac816fc18555cfe45d906926eac88c1f7e6b03b8 100644 (file)
 #include "cpu/checker/cpu.hh"
 #endif
 
-#if THE_ISA == ALPHA_ISA
-#include "arch/alpha/osfpal.hh"
-#endif
-
 class BaseCPUParams;
 
 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>
 Fault
 FullO3CPU<Impl>::getInterrupts()
index cdc1d2e588662a520ea671e00888ec49a1a15f94..07ba8d7018470308cddebb48f3100885ec4367da 100644 (file)
@@ -414,8 +414,6 @@ class FullO3CPU : public BaseO3CPU
     /** Posts an interrupt. */
     void post_interrupt(int int_num, int index);
 
-    bool simPalCheck(int palFunc, unsigned tid);
-
     /** Returns the Fault for any valid interrupt. */
     Fault getInterrupts();
 
index ce59d802be93cc7ff398cf9fcc3ebf9161845b38..28dd60f5faf5d35cfd6715e787fcca1055828bfb 100644 (file)
@@ -170,7 +170,6 @@ class BaseO3DynInst : public BaseDynInst<Impl>
 #if FULL_SYSTEM
     /** Traps to handle specified fault. */
     void trap(Fault fault);
-    bool simPalCheck(int palFunc);
 #else
     /** Calls a syscall. */
     void syscall(int64_t callnum);
index f85527f225112942929dd9af4f820148f40cf0f8..3b713ea8f51a76dbd8c41539eee1d1b1b8cc126b 100644 (file)
@@ -130,16 +130,6 @@ BaseO3DynInst<Impl>::trap(Fault fault)
 {
     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
 template <class Impl>
 void
index e95accdfd7208050dd13c270717e31756ca3c739..aeafb603aca5626185fc4c2d5397f8e8fae7335e 100644 (file)
@@ -510,7 +510,6 @@ class OzoneCPU : public BaseCPU
     void dumpInsts() { frontEnd->dumpInsts(); }
 
 #if FULL_SYSTEM
-    bool simPalCheck(int palFunc);
     void processInterrupts();
 #else
     void syscall(uint64_t &callnum);
index eb7b1a13f2c93e3a4228592c0f00e7fb07e67b6f..9c0b95a1a58886d21a690ffead01e56c67acdf92 100644 (file)
@@ -685,31 +685,6 @@ OzoneCPU<Impl>::processInterrupts()
         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
 
 template <class Impl>
index deade93974afca1d10a3eeb4bee869a26254ac5a..12a19e70df31f88a0ea3c5f111c5093f93ae5305 100644 (file)
@@ -241,7 +241,6 @@ class OzoneDynInst : public BaseDynInst<Impl>
 
 #if FULL_SYSTEM
     void trap(Fault fault);
-    bool simPalCheck(int palFunc);
 #else
     void syscall(uint64_t &callnum);
 #endif
index 8fc5077a64e210fd6799a52ae98f6cb094675ee0..39600768763bf53760f0f6c286f513a85ab845e0 100644 (file)
@@ -254,13 +254,6 @@ OzoneDynInst<Impl>::trap(Fault fault)
 {
     fault->invoke(this->thread->getTC());
 }
-
-template <class Impl>
-bool
-OzoneDynInst<Impl>::simPalCheck(int palFunc)
-{
-    return this->cpu->simPalCheck(palFunc);
-}
 #else
 template <class Impl>
 void
index b28a690bb3ef618d04bb3cce0ca978118a4ad001..03c20a6f27ecb438c4e5e9e4a2bf99bdd7ae846a 100644 (file)
@@ -414,7 +414,6 @@ class BaseSimpleCPU : public BaseCPU
 
 #if FULL_SYSTEM
     void ev5_trap(Fault fault) { fault->invoke(tc); }
-    bool simPalCheck(int palFunc) { return thread->simPalCheck(palFunc); }
 #else
     void syscall(int64_t callnum) { thread->syscall(callnum); }
 #endif
index 89d5ba99fc2dec7c8e453018c03487ee49fc1dc9..69d7b2548257eae90bcda32d4cb5b14ba9b65d97 100644 (file)
@@ -185,8 +185,6 @@ class SimpleThread : public ThreadState
 
     void dumpFuncProfile();
 
-    bool simPalCheck(int palFunc);
-
 #endif
 
     /*******************************************