Got rid of "inPalMode". Some places are still effectively checking if they are in...
authorGabe Black <gblack@eecs.umich.edu>
Fri, 3 Nov 2006 09:25:33 +0000 (04:25 -0500)
committerGabe Black <gblack@eecs.umich.edu>
Fri, 3 Nov 2006 09:25:33 +0000 (04:25 -0500)
--HG--
extra : convert_revision : b52d9642efc474eaf97437fa2df879efefa0062b

23 files changed:
src/arch/alpha/ev5.cc
src/arch/alpha/faults.cc
src/arch/alpha/interrupts.hh
src/cpu/base.hh
src/cpu/checker/cpu.hh
src/cpu/checker/thread_context.hh
src/cpu/o3/alpha/cpu.hh
src/cpu/o3/alpha/cpu_impl.hh
src/cpu/o3/alpha/dyn_inst.hh
src/cpu/o3/alpha/dyn_inst_impl.hh
src/cpu/o3/alpha/thread_context.hh
src/cpu/o3/commit_impl.hh
src/cpu/o3/fetch_impl.hh
src/cpu/ozone/cpu.hh
src/cpu/ozone/dyn_inst.hh
src/cpu/ozone/dyn_inst_impl.hh
src/cpu/ozone/front_end_impl.hh
src/cpu/ozone/inorder_back_end_impl.hh
src/cpu/ozone/lw_back_end_impl.hh
src/cpu/simple/base.cc
src/cpu/simple/base.hh
src/cpu/simple_thread.hh
src/cpu/thread_context.hh

index 314b445e0b2d82419211b11fbd5176f787942a6f..dca948bbdbfa5504ec7ecd3a3d0897c88c40f2e2 100644 (file)
@@ -147,7 +147,7 @@ AlphaISA::zeroRegisters(CPU *cpu)
 Fault
 SimpleThread::hwrei()
 {
-    if (!inPalMode())
+    if (!(readPC() & 0x3))
         return new UnimplementedOpcodeFault;
 
     setNextPC(readMiscReg(AlphaISA::IPR_EXC_ADDR));
index 7179bf025bb7ea191243fbff770845b5389be107..5efcf92e4e06ffb88d6ddd38a73ec336d109b8fc 100644 (file)
@@ -125,7 +125,7 @@ void AlphaFault::invoke(ThreadContext * tc)
     countStat()++;
 
     // exception restart address
-    if (setRestartAddress() || !tc->inPalMode())
+    if (setRestartAddress() || !(tc->readPC() & 0x3))
         tc->setMiscReg(AlphaISA::IPR_EXC_ADDR, tc->readPC());
 
     if (skipFaultingInstruction()) {
index 2f031f43457fcc7155b1574306394736e585db4b..75031ae47cf695d9b755ecc7f503ce096193e328 100644 (file)
@@ -88,15 +88,6 @@ namespace AlphaISA
             intstatus = 0;
         }
 
-        bool check_interrupt(int int_num) const {
-            if (int_num > NumInterruptLevels)
-                panic("int_num out of bounds\n");
-
-            return interrupts[int_num] != 0;
-        }
-
-        bool check_interrupts() const { return intstatus != 0; }
-
         void serialize(std::ostream &os)
         {
             SERIALIZE_ARRAY(interrupts, NumInterruptLevels);
@@ -109,6 +100,11 @@ namespace AlphaISA
             UNSERIALIZE_SCALAR(intstatus);
         }
 
+        bool check_interrupts(ThreadContext * tc) const
+        {
+            return (intstatus != 0) && !(tc->readPC() & 0x3);
+        }
+
         Fault getInterrupt(ThreadContext * tc)
         {
             int ipl = 0;
@@ -163,7 +159,6 @@ namespace AlphaISA
         }
 
       private:
-        uint64_t intr_status() const { return intstatus; }
     };
 }
 
index 207473d8044ab57185ae3b9de092913614dde57f..79d22c9927392af2bd79454d543292943c2b0370 100644 (file)
@@ -89,12 +89,8 @@ class BaseCPU : public MemObject
     virtual void clear_interrupts();
     bool checkInterrupts;
 
-    bool check_interrupt(int int_num) const {
-        return interrupts.check_interrupt(int_num);
-    }
-
-    bool check_interrupts() const { return interrupts.check_interrupts(); }
-    //uint64_t intr_status() const { return interrupts.intr_status(); }
+    bool check_interrupts(ThreadContext * tc) const
+    { return interrupts.check_interrupts(tc); }
 
     class ProfileEvent : public Event
     {
index 454f3892b26716d8d53ec740f379e3d758e31291..9be54529fb15e6d3e66ef41be04729866b6c830e 100644 (file)
@@ -327,7 +327,6 @@ class CheckerCPU : public BaseCPU
 
 #if FULL_SYSTEM
     Fault hwrei() { return thread->hwrei(); }
-    bool inPalMode() { return thread->inPalMode(); }
     void ev5_trap(Fault fault) { fault->invoke(tc); }
     bool simPalCheck(int palFunc) { return thread->simPalCheck(palFunc); }
 #else
index cd399dd222886b70cfae11101d8bdcdb7cb86c34..b46031167646e601468a071a3c9508f48cee00fa 100644 (file)
@@ -271,9 +271,6 @@ class CheckerThreadContext : public ThreadContext
         checkerTC->setStCondFailures(sc_failures);
         actualTC->setStCondFailures(sc_failures);
     }
-#if FULL_SYSTEM
-    bool inPalMode() { return actualTC->inPalMode(); }
-#endif
 
     // @todo: Fix this!
     bool misspeculating() { return actualTC->misspeculating(); }
index 01749a2a29822646446d0c26220af7d68784d4e9..b62550062c6389065cec318b8430b65092a4defd 100644 (file)
@@ -153,9 +153,6 @@ class AlphaO3CPU : public FullO3CPU<Impl>
     void post_interrupt(int int_num, int index);
     /** HW return from error interrupt. */
     Fault hwrei(unsigned tid);
-    /** Returns if a specific PC is a PAL mode PC. */
-    bool inPalMode(uint64_t PC)
-    { return AlphaISA::PcPAL(PC); }
 
     bool simPalCheck(int palFunc, unsigned tid);
 
index 170a53c23b62305e84957e6e684316a69137f981..750ccc91262db1280b1a7723e118ba64508a26f8 100644 (file)
@@ -278,11 +278,12 @@ AlphaO3CPU<Impl>::processInterrupts()
 
     // Check if there are any outstanding interrupts
     //Handle the interrupts
-    this->checkInterrupts = false;
     Fault interrupt = this->interrupts.getInterrupt(this->tcBase(0));
 
-    if (interrupt != NoFault)
+    if (interrupt != NoFault) {
+        this->checkInterrupts = false;
         this->trap(interrupt, 0);
+    }
 }
 
 #endif // FULL_SYSTEM
index e711de510396cc43df4528b6780174963c03e937..31df8ff78fe2dd52e16ff9aba1c135e7581b8928 100644 (file)
@@ -126,8 +126,6 @@ class AlphaDynInst : public BaseDynInst<Impl>
 #if FULL_SYSTEM
     /** Calls hardware return from error interrupt. */
     Fault hwrei();
-    /** Checks if system is in PAL mode. */
-    bool inPalMode();
     /** Traps to handle specified fault. */
     void trap(Fault fault);
     bool simPalCheck(int palFunc);
index f27cd59614d14b9453c7849dda6cedcfc69e4681..6fc548a85c10fc026ccbbe14e16fd67f6a397043 100644 (file)
@@ -113,7 +113,7 @@ Fault
 AlphaDynInst<Impl>::hwrei()
 {
     // Can only do a hwrei when in pal mode.
-    if (!this->cpu->inPalMode(this->readPC()))
+    if (!(this->readPC() & 0x3))
         return new AlphaISA::UnimplementedOpcodeFault;
 
     // Set the next PC based on the value of the EXC_ADDR IPR.
@@ -127,13 +127,6 @@ AlphaDynInst<Impl>::hwrei()
     return NoFault;
 }
 
-template <class Impl>
-bool
-AlphaDynInst<Impl>::inPalMode()
-{
-    return this->cpu->inPalMode(this->PC);
-}
-
 template <class Impl>
 void
 AlphaDynInst<Impl>::trap(Fault fault)
index f0cecee35a278d49cfa53465eb4149da02750707..bcecb70873180166fe4befb6b97a35ca2895b39a 100644 (file)
@@ -47,11 +47,6 @@ class AlphaTC : public O3ThreadContext<Impl>
     {
         return this->thread->quiesceEvent;
     }
-
-    /** Returns if the thread is currently in PAL mode, based on
-     * the PC's value. */
-    virtual bool inPalMode()
-    { return TheISA::PcPAL(this->cpu->readPC(this->thread->readTid())); }
 #endif
 
     virtual uint64_t readNextNPC()
index ecf6ed632a4cb0ce801d231cc1c0e79c9a4d13f8..bd5c4f9ce50d3ebbf26bb9e7d52de518bf541c3f 100644 (file)
@@ -638,8 +638,7 @@ DefaultCommit<Impl>::commit()
     // and no other traps or external squashes are currently pending.
     // @todo: Allow other threads to handle interrupts.
     if (cpu->checkInterrupts &&
-        cpu->check_interrupts() &&
-        !cpu->inPalMode(readPC()) &&
+        cpu->check_interrupts(cpu->tcBase(0)) &&
         !trapSquash[0] &&
         !tcSquash[0]) {
         // Tell fetch that there is an interrupt pending.  This will
index 31f3b96d6a0e282b961d4d4359455287c48db590..4c39341aa2b790bd32fc6d8610f1c085acc846ee 100644 (file)
@@ -559,14 +559,9 @@ DefaultFetch<Impl>::fetchCacheLine(Addr fetch_PC, Fault &ret_fault, unsigned tid
 {
     Fault fault = NoFault;
 
-#if FULL_SYSTEM
-    // Flag to say whether or not address is physical addr.
-    unsigned flags = cpu->inPalMode(fetch_PC) ? PHYSICAL : 0;
-#else
-    unsigned flags = 0;
-#endif // FULL_SYSTEM
-
-    if (cacheBlocked || isSwitchedOut() || (interruptPending && flags == 0)) {
+    //AlphaDep
+    if (cacheBlocked || isSwitchedOut() ||
+            (interruptPending && (fetch_PC & 0x3))) {
         // Hold off fetch from getting new instructions when:
         // Cache is blocked, or
         // while an interrupt is pending and we're not in PAL mode, or
@@ -585,7 +580,7 @@ DefaultFetch<Impl>::fetchCacheLine(Addr fetch_PC, Fault &ret_fault, unsigned tid
     // Setup the memReq to do a read of the first instruction's address.
     // Set the appropriate read size and flags as well.
     // Build request here.
-    RequestPtr mem_req = new Request(tid, fetch_PC, cacheBlkSize, flags,
+    RequestPtr mem_req = new Request(tid, fetch_PC, cacheBlkSize, 0,
                                      fetch_PC, cpu->readCpuId(), tid);
 
     memReq[tid] = mem_req;
index 828c2b4cab844c30bdfedd0214b369fa312a210a..b3d3531e9644b52d82de7c82606dd50ca6f14340 100644 (file)
@@ -239,10 +239,6 @@ class OzoneCPU : public BaseCPU
         void setStCondFailures(unsigned sc_failures)
         { thread->storeCondFailures = sc_failures; }
 
-#if FULL_SYSTEM
-        bool inPalMode() { return cpu->inPalMode(); }
-#endif
-
         bool misspeculating() { return false; }
 
 #if !FULL_SYSTEM
@@ -584,8 +580,6 @@ class OzoneCPU : public BaseCPU
 
 #if FULL_SYSTEM
     Fault hwrei();
-    bool inPalMode() { return AlphaISA::PcPAL(thread.PC); }
-    bool inPalMode(Addr pc) { return AlphaISA::PcPAL(pc); }
     bool simPalCheck(int palFunc);
     void processInterrupts();
 #else
index 532317b083ffcf764fb24f1be50b6ac5d71e684f..9445a530965df6bac556cf34dba972bd9b847a73 100644 (file)
@@ -238,7 +238,6 @@ class OzoneDynInst : public BaseDynInst<Impl>
 
 #if FULL_SYSTEM
     Fault hwrei();
-    bool inPalMode();
     void trap(Fault fault);
     bool simPalCheck(int palFunc);
 #else
index 68736ae61108a5d4d33bd7eac054281401a6b893..42684153695b31ccf27acbbeb7eb3af43f2db826 100644 (file)
@@ -249,7 +249,7 @@ template <class Impl>
 Fault
 OzoneDynInst<Impl>::hwrei()
 {
-    if (!this->cpu->inPalMode(this->readPC()))
+    if (!(this->readPC() & 0x3))
         return new AlphaISA::UnimplementedOpcodeFault;
 
     this->setNextPC(this->thread->readMiscReg(AlphaISA::IPR_EXC_ADDR));
@@ -260,13 +260,6 @@ OzoneDynInst<Impl>::hwrei()
     return NoFault;
 }
 
-template <class Impl>
-bool
-OzoneDynInst<Impl>::inPalMode()
-{
-    return this->cpu->inPalMode();
-}
-
 template <class Impl>
 void
 OzoneDynInst<Impl>::trap(Fault fault)
index 6d02c58cb16bea4f83a04f00d81e25003dd75bdf..73ca6afbe4fe83ea03b897a4c7751470876dfee9 100644 (file)
@@ -462,15 +462,10 @@ Fault
 FrontEnd<Impl>::fetchCacheLine()
 {
     // Read a cache line, based on the current PC.
-#if FULL_SYSTEM
-    // Flag to say whether or not address is physical addr.
-    unsigned flags = cpu->inPalMode(PC) ? PHYSICAL : 0;
-#else
-    unsigned flags = 0;
-#endif // FULL_SYSTEM
     Fault fault = NoFault;
 
-    if (interruptPending && flags == 0) {
+    //AlphaDep
+    if (interruptPending && (PC & 0x3)) {
         return fault;
     }
 
index 8aef9c074c4e2d84aa89bc056c30c02327be1349..87bf0a7a20b99653c96201620bc13567eda77db3 100644 (file)
@@ -152,11 +152,11 @@ InorderBackEnd<Impl>::tick()
 #if FULL_SYSTEM
     if (interruptBlocked ||
         (cpu->checkInterrupts &&
-        cpu->check_interrupts() &&
-        !cpu->inPalMode())) {
+        cpu->check_interrupts(tc))) {
         if (!robEmpty()) {
             interruptBlocked = true;
-        } else if (robEmpty() && cpu->inPalMode()) {
+        //AlphaDep
+        } else if (robEmpty() && (PC & 0x3)) {
             // Will need to let the front end continue a bit until
             // we're out of pal mode.  Hopefully we never get into an
             // infinite loop...
index c39b9e08b647c720ba9e28933ea0f5c91336d1c0..a181c93f47c60c5fd569b3bdecc664d3f0d1d9d6 100644 (file)
@@ -526,8 +526,7 @@ void
 LWBackEnd<Impl>::checkInterrupts()
 {
     if (cpu->checkInterrupts &&
-        cpu->check_interrupts() &&
-        !cpu->inPalMode(thread->readPC()) &&
+        cpu->check_interrupts(tc) &&
         !trapSquash &&
         !tcSquash) {
         frontEnd->interruptPending = true;
index 0c7b5eafef249d682311da8271b5df881c9673aa..e91569db2e1ce12a96c1793153d25e3382ede0f3 100644 (file)
@@ -311,11 +311,11 @@ void
 BaseSimpleCPU::checkForInterrupts()
 {
 #if FULL_SYSTEM
-    if (checkInterrupts && check_interrupts() && !thread->inPalMode()) {
-        checkInterrupts = false;
+    if (checkInterrupts && check_interrupts(tc)) {
         Fault interrupt = interrupts.getInterrupt(tc);
 
         if (interrupt != NoFault) {
+            checkInterrupts = false;
             interrupt->invoke(tc);
         }
     }
@@ -371,6 +371,10 @@ BaseSimpleCPU::preExecute()
         StaticInstPtr instPtr = StaticInst::decode(makeExtMI(inst, thread->readPC()));
 #elif THE_ISA == SPARC_ISA
         StaticInstPtr instPtr = StaticInst::decode(makeExtMI(inst, thread->getTC()));
+#elif THE_ISA == MIPS_ISA
+        //Mips doesn't do anything in it's MakeExtMI function right now,
+        //so it won't be called.
+        StaticInstPtr instPtr = StaticInst::decode(inst);
 #endif
         if (instPtr->isMacroOp()) {
             curMacroStaticInst = instPtr;
index d13be2877d1dadbbeaad39571858bf263fe6679c..efb8843254877eac3291eee0bb3ec20913769625 100644 (file)
@@ -302,7 +302,6 @@ class BaseSimpleCPU : public BaseCPU
 
 #if FULL_SYSTEM
     Fault hwrei() { return thread->hwrei(); }
-    bool inPalMode() { return thread->inPalMode(); }
     void ev5_trap(Fault fault) { fault->invoke(tc); }
     bool simPalCheck(int palFunc) { return thread->simPalCheck(palFunc); }
 #else
index 9a575f06b616e9ae8495e650364254e51317ee59..600588295df0cbcfeb77a56d9b9d7e7b8d8f5aa8 100644 (file)
@@ -440,10 +440,6 @@ class SimpleThread : public ThreadState
     void setStCondFailures(unsigned sc_failures)
     { storeCondFailures = sc_failures; }
 
-#if FULL_SYSTEM
-    bool inPalMode() { return AlphaISA::PcPAL(regs.readPC()); }
-#endif
-
 #if !FULL_SYSTEM
     TheISA::IntReg getSyscallArg(int i)
     {
index dfc6fbc2abdacd715cb88835348ce25302d407ef..82d75b161d2e397bf75309952aa6303da1e73d2f 100644 (file)
@@ -236,10 +236,6 @@ class ThreadContext
 
     virtual void setStCondFailures(unsigned sc_failures) = 0;
 
-#if FULL_SYSTEM
-    virtual bool inPalMode() = 0;
-#endif
-
     // Only really makes sense for old CPU model.  Still could be useful though.
     virtual bool misspeculating() = 0;
 
@@ -424,9 +420,6 @@ class ProxyThreadContext : public ThreadContext
 
     void setStCondFailures(unsigned sc_failures)
     { actualTC->setStCondFailures(sc_failures); }
-#if FULL_SYSTEM
-    bool inPalMode() { return actualTC->inPalMode(); }
-#endif
 
     // @todo: Fix this!
     bool misspeculating() { return actualTC->misspeculating(); }