1/* 2 * Copyright (c) 2004-2006 The Regents of The University of Michigan 3 * All rights reserved. 4 * 5 * Redistribution and use in source and binary forms, with or without 6 * modification, are permitted provided that the following conditions are 7 * met: redistributions of source code must retain the above copyright 8 * notice, this list of conditions and the following disclaimer; --- 144 unchanged lines hidden (view full) --- 153 154 globalSeqNum(1), 155 156#if FULL_SYSTEM 157 system(params->system), 158 physmem(system->physmem), 159#endif // FULL_SYSTEM 160 mem(params->mem), |
161 drainCount(0), |
162 deferRegistration(params->deferRegistration), 163 numThreads(number_of_threads) 164{ 165 _status = Idle; 166 167 checker = NULL; 168 169 if (params->checker) { --- 533 unchanged lines hidden (view full) --- 703 activeThreads.erase(isActive); 704 705 removeThread(tid); 706 } 707*/ 708} 709 710template <class Impl> |
711bool 712FullO3CPU<Impl>::drain(Event *drain_event) |
713{ |
714 drainCount = 0; 715 drainEvent = drain_event; 716 fetch.drain(); 717 decode.drain(); 718 rename.drain(); 719 iew.drain(); 720 commit.drain(); |
721 722 // Wake the CPU and record activity so everything can drain out if 723 // the CPU is currently idle. 724 wakeCPU(); 725 activityRec.activity(); |
726 727 return false; |
728} 729 730template <class Impl> 731void |
732FullO3CPU<Impl>::resume() |
733{ |
734 if (_status == SwitchedOut) 735 return; 736 fetch.resume(); 737 decode.resume(); 738 rename.resume(); 739 iew.resume(); 740 commit.resume(); |
741 |
742 if (!tickEvent.scheduled()) 743 tickEvent.schedule(curTick); 744 _status = Running; 745} |
746 |
747template <class Impl> 748void 749FullO3CPU<Impl>::signalDrained() 750{ 751 if (++drainCount == NumStages) { |
752 if (tickEvent.scheduled()) 753 tickEvent.squash(); |
754 _status = Drained; 755 drainEvent->process(); |
756 } |
757 assert(drainCount <= 5); |
758} 759 760template <class Impl> 761void |
762FullO3CPU<Impl>::switchOut() 763{ 764 fetch.switchOut(); 765 rename.switchOut(); 766 commit.switchOut(); 767 instList.clear(); 768 while (!removeList.empty()) { 769 removeList.pop(); 770 } 771 772 _status = SwitchedOut; 773#if USE_CHECKER 774 if (checker) 775 checker->switchOut(); 776#endif 777} 778 779template <class Impl> 780void |
781FullO3CPU<Impl>::takeOverFrom(BaseCPU *oldCPU) 782{ 783 // Flush out any old data from the time buffers. 784 for (int i = 0; i < 10; ++i) { 785 timeBuffer.advance(); 786 fetchQueue.advance(); 787 decodeQueue.advance(); 788 renameQueue.advance(); --- 497 unchanged lines hidden --- |