From: Korey Sewell <ksewell@umich.edu>
Date: Fri, 7 Jul 2006 23:02:12 +0000 (-0400)
Subject: Merge zizzer.eecs.umich.edu:/z/m5/Bitkeeper/newmem
X-Git-Tag: m5_2.0_beta1~36^2~5^2~5
X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=cdf27a0a864b3c3a22fbcdd2afdd00edd00613a2;p=gem5.git

Merge zizzer.eecs.umich.edu:/z/m5/Bitkeeper/newmem
into  zizzer.eecs.umich.edu:/.automount/zooks/y/ksewell/research/m5-sim/newmem-o3

--HG--
extra : convert_revision : 9098d989832e2a5818b80771e3c02170c5c8cd5b
---

cdf27a0a864b3c3a22fbcdd2afdd00edd00613a2
diff --cc src/cpu/o3/cpu.cc
index a9a1a7c9b,c46276d5a..62d58c71b
--- a/src/cpu/o3/cpu.cc
+++ b/src/cpu/o3/cpu.cc
@@@ -618,149 -750,6 +763,47 @@@ FullO3CPU<Impl>::activateWhenReady(int 
      }
  }
  
- template <class Impl>
- void
- FullO3CPU<Impl>::activateThread(unsigned int tid)
- {
-     list<unsigned>::iterator isActive = find(
-         activeThreads.begin(), activeThreads.end(), tid);
- 
-     if (isActive == activeThreads.end()) {
-         DPRINTF(O3CPU, "[tid:%i]: Adding to active threads list\n",
-                 tid);
- 
-         activeThreads.push_back(tid);
-     }
- }
- 
- 
- template <class Impl>
- void
- FullO3CPU<Impl>::activateContext(int tid, int delay)
- {
-     // Needs to set each stage to running as well.
-     if (delay){
-         DPRINTF(O3CPU, "[tid:%i]: Scheduling thread context to activate "
-                 "on cycle %d\n", tid, curTick + cycles(delay));
-         scheduleActivateThreadEvent(tid, delay);
-     } else {
-         activateThread(tid);
-     }
- 
-     if(lastActivatedCycle < curTick) {
-         scheduleTickEvent(delay);
- 
-         // Be sure to signal that there's some activity so the CPU doesn't
-         // deschedule itself.
-         activityRec.activity();
-         fetch.wakeFromQuiesce();
- 
-         lastActivatedCycle = curTick;
- 
-         _status = Running;
-     }
- }
- 
- template <class Impl>
- void
- FullO3CPU<Impl>::suspendContext(int tid)
- {
-     DPRINTF(O3CPU,"[tid: %i]: Suspending Thread Context.\n", tid);
-     unscheduleTickEvent();
-     _status = Idle;
- /*
-     //Remove From Active List, if Active
-     list<unsigned>::iterator isActive = find(
-         activeThreads.begin(), activeThreads.end(), tid);
- 
-     if (isActive != activeThreads.end()) {
-         DPRINTF(O3CPU,"[tid:%i]: Removing from active threads list\n",
-                 tid);
-         activeThreads.erase(isActive);
-     }
- */
- }
- 
- template <class Impl>
- void
- FullO3CPU<Impl>::deallocateContext(int tid)
- {
-     DPRINTF(O3CPU,"[tid:%i]: Deallocating Thread Context", tid);
- 
-     //Remove From Active List, if Active
-     list<unsigned>::iterator thread_it =
-         find(activeThreads.begin(), activeThreads.end(), tid);
- 
-     if (thread_it != activeThreads.end()) {
-         DPRINTF(O3CPU,"[tid:%i]: Removing from active threads list\n",
-                 tid);
-         activeThreads.erase(thread_it);
- 
-         removeThread(tid);
-     }
- }
- 
- template <class Impl>
- void
- FullO3CPU<Impl>::haltContext(int tid)
- {
-     DPRINTF(O3CPU,"[tid:%i]: Halting Thread Context", tid);
- /*
-     //Remove From Active List, if Active
-     list<unsigned>::iterator isActive = find(
-         activeThreads.begin(), activeThreads.end(), tid);
- 
-     if (isActive != activeThreads.end()) {
-         DPRINTF(O3CPU,"[tid:%i]: Removing from active threads list\n",
-                 tid);
-         activeThreads.erase(isActive);
- 
-         removeThread(tid);
-     }
- */
- }
- 
 +template <class Impl>
 +void
 +FullO3CPU<Impl>::serialize(std::ostream &os)
 +{
 +    SERIALIZE_ENUM(_status);
 +    BaseCPU::serialize(os);
 +    nameOut(os, csprintf("%s.tickEvent", name()));
 +    tickEvent.serialize(os);
 +
 +    // Use SimpleThread's ability to checkpoint to make it easier to
 +    // write out the registers.  Also make this static so it doesn't
 +    // get instantiated multiple times (causes a panic in statistics).
 +    static SimpleThread temp;
 +
 +    for (int i = 0; i < thread.size(); i++) {
 +        nameOut(os, csprintf("%s.xc.%i", name(), i));
 +        temp.copyTC(thread[i]->getTC());
 +        temp.serialize(os);
 +    }
 +}
 +
 +template <class Impl>
 +void
 +FullO3CPU<Impl>::unserialize(Checkpoint *cp, const std::string &section)
 +{
 +    UNSERIALIZE_ENUM(_status);
 +    BaseCPU::unserialize(cp, section);
 +    tickEvent.unserialize(cp, csprintf("%s.tickEvent", section));
 +
 +    // Use SimpleThread's ability to checkpoint to make it easier to
 +    // read in the registers.  Also make this static so it doesn't
 +    // get instantiated multiple times (causes a panic in statistics).
 +    static SimpleThread temp;
 +
 +    for (int i = 0; i < thread.size(); i++) {
 +        temp.copyTC(thread[i]->getTC());
 +        temp.unserialize(cp, csprintf("%s.xc.%i", section, i));
 +        thread[i]->getTC()->copyArchRegs(temp.getTC());
 +    }
 +}
 +
  template <class Impl>
  bool
  FullO3CPU<Impl>::drain(Event *drain_event)