CPU: Eliminate the get_vec function.
authorGabe Black <gblack@eecs.umich.edu>
Sun, 12 Oct 2008 15:24:09 +0000 (08:24 -0700)
committerGabe Black <gblack@eecs.umich.edu>
Sun, 12 Oct 2008 15:24:09 +0000 (08:24 -0700)
src/arch/alpha/interrupts.hh
src/arch/mips/interrupts.cc
src/arch/mips/interrupts.hh
src/arch/sparc/tlb.cc
src/arch/x86/interrupts.hh
src/cpu/base.cc
src/cpu/base.hh

index abfecfb5bed8a0483569f773f3acb7972bcac527..6ae4e4b1d1ff3e210dc51a3b92e749248821692b 100644 (file)
@@ -171,13 +171,6 @@ class Interrupts
         tc->setMiscRegNoEffect(IPR_INTID, newIpl);
         newInfoSet = false;
     }
-
-    uint64_t
-    get_vec(int int_num)
-    {
-        panic("Shouldn't be called for Alpha\n");
-        M5_DUMMY_RETURN;
-    }
 };
 
 } // namespace AlphaISA
index c91ee1e997bdae852495444365435a4fb389d85e..e04d22631bb9262b73552c7315c9801ff33eb234 100755 (executable)
@@ -156,12 +156,6 @@ static inline void setCauseIP_(ThreadContext *tc, uint8_t val) {
   return false;
   }
 
-
-  uint64_t Interrupts::get_vec(int int_num)
-  {
-  panic("MipsISA::Interrupts::get_vec() is not implemented. \n");
-  M5_DUMMY_RETURN
-  }
 */
 void Interrupts::post(int int_num, ThreadContext* tc)
 {
@@ -252,12 +246,6 @@ void Interrupts::updateIntrInfo(ThreadContext *tc) const
     ;
 }
 
-uint64_t Interrupts::get_vec(int int_num)
-{
-    panic("MipsISA::Interrupts::get_vec() is not implemented. \n");
-    M5_DUMMY_RETURN
-        }
-
 bool Interrupts::interruptsPending(ThreadContext *tc) const
 {
     //if there is a on cpu timer interrupt (i.e. Compare == Count)
index f0e92808892f3642aa19b2c4983f219003ba6df9..99a8f6fa0b31f3fbafaaadb1e10cb0e81f647897 100755 (executable)
@@ -91,8 +91,6 @@ class Interrupts
       void updateIntrInfoCpuTimerIntr(ThreadContext *tc) const;
       bool onCpuTimerInterrupt(ThreadContext *tc) const;
 
-      uint64_t get_vec(int int_num);
-
       bool check_interrupts(ThreadContext * tc) const{
       //return (intstatus != 0) && !(tc->readPC() & 0x3);
       if (oncputimerintr == false){
@@ -160,8 +158,6 @@ class Interrupts
     bool interruptsPending(ThreadContext *tc) const;
     bool onCpuTimerInterrupt(ThreadContext *tc) const;
 
-    uint64_t get_vec(int int_num);
-
     bool check_interrupts(ThreadContext * tc) const{
         return interruptsPending(tc);
     }
index 125ceba6925c204b4fd40094134ef68266e34f48..61f0985db62d89c45f6222a5df7a07dd629b951c 100644 (file)
@@ -1008,12 +1008,22 @@ DTB::doMmuRegRead(ThreadContext *tc, Packet *pkt)
                 itb->cx_config));
         break;
       case ASI_SWVR_INTR_RECEIVE:
-        pkt->set(tc->getCpuPtr()->get_interrupts(IT_INT_VEC));
+        {
+            SparcISA::Interrupts * interrupts =
+                dynamic_cast<SparcISA::Interrupts *>(
+                        tc->getCpuPtr()->getInterruptController());
+            pkt->set(interrupts->get_vec(IT_INT_VEC));
+        }
         break;
       case ASI_SWVR_UDB_INTR_R:
-        temp = findMsbSet(tc->getCpuPtr()->get_interrupts(IT_INT_VEC));
-        tc->getCpuPtr()->clear_interrupt(IT_INT_VEC, temp);
-        pkt->set(temp);
+        {
+            SparcISA::Interrupts * interrupts =
+                dynamic_cast<SparcISA::Interrupts *>(
+                        tc->getCpuPtr()->getInterruptController());
+            temp = findMsbSet(interrupts->get_vec(IT_INT_VEC));
+            tc->getCpuPtr()->clear_interrupt(IT_INT_VEC, temp);
+            pkt->set(temp);
+        }
         break;
       default:
 doMmuReadError:
@@ -1252,11 +1262,16 @@ DTB::doMmuRegWrite(ThreadContext *tc, Packet *pkt)
         }
         break;
        case ASI_SWVR_INTR_RECEIVE:
-        int msb;
-        // clear all the interrupts that aren't set in the write
-        while(tc->getCpuPtr()->get_interrupts(IT_INT_VEC) & data) {
-            msb = findMsbSet(tc->getCpuPtr()->get_interrupts(IT_INT_VEC) & data);
-            tc->getCpuPtr()->clear_interrupt(IT_INT_VEC, msb);
+        {
+            int msb;
+            // clear all the interrupts that aren't set in the write
+            SparcISA::Interrupts * interrupts =
+                dynamic_cast<SparcISA::Interrupts *>(
+                        tc->getCpuPtr()->getInterruptController());
+            while(interrupts->get_vec(IT_INT_VEC) & data) {
+                msb = findMsbSet(interrupts->get_vec(IT_INT_VEC) & data);
+                tc->getCpuPtr()->clear_interrupt(IT_INT_VEC, msb);
+            }
         }
         break;
       case ASI_SWVR_UDB_INTR_W:
index cf9109e2242d89a52f8378bd2e8bb38a4fdaec73..43675294e4d7da076112f40f60cf28806cfb2a8c 100644 (file)
@@ -108,12 +108,6 @@ class Interrupts
         panic("Interrupts::updateIntrInfo unimplemented!\n");
     }
 
-    uint64_t get_vec(int int_num)
-    {
-        panic("Interrupts::get_vec unimplemented!\n");
-        return 0;
-    }
-
     void serialize(std::ostream & os)
     {
         panic("Interrupts::serialize unimplemented!\n");
index 5a0359e53106d5b6973d193f8525ecc55291f38b..1ca0dc14b8f4d9b704302ea2d1878dc8b744a96f 100644 (file)
@@ -396,12 +396,6 @@ BaseCPU::clear_interrupts()
     interrupts.clear_all();
 }
 
-uint64_t
-BaseCPU::get_interrupts(int int_num)
-{
-    return interrupts.get_vec(int_num);
-}
-
 void
 BaseCPU::serialize(std::ostream &os)
 {
index 7b7ad9be0efef8f8be4c546b3b1f509ce4cf2f3a..c99efa834aff4715816eb1dd2680f953a9958706 100644 (file)
@@ -119,7 +119,6 @@ class BaseCPU : public MemObject
     virtual void post_interrupt(int int_num, int index);
     virtual void clear_interrupt(int int_num, int index);
     virtual void clear_interrupts();
-    virtual uint64_t get_interrupts(int int_num);
 
     bool check_interrupts(ThreadContext * tc) const
     { return interrupts.check_interrupts(tc); }