Deleted Added
sdiff udiff text old ( 2852:7fc1b748dd81 ) new ( 2863:2592e056dc5c )
full compact
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;

--- 698 unchanged lines hidden (view full) ---

707*/
708}
709
710template <class Impl>
711bool
712FullO3CPU<Impl>::drain(Event *drain_event)
713{
714 drainCount = 0;
715 fetch.drain();
716 decode.drain();
717 rename.drain();
718 iew.drain();
719 commit.drain();
720 // A bit of a hack...set the drainEvent after all the drain()
721 // calls have been made, that way if all of the stages drain
722 // immediately, the signalDrained() function knows not to call
723 // process on the drain event.
724 drainEvent = drain_event;
725
726 // Wake the CPU and record activity so everything can drain out if
727 // the CPU was not able to immediately drain.
728 if (_status != Drained) {
729 wakeCPU();
730 activityRec.activity();
731
732 return false;
733 } else {
734 return true;
735 }
736}
737
738template <class Impl>
739void
740FullO3CPU<Impl>::resume()
741{
742 if (_status == SwitchedOut)
743 return;

--- 10 unchanged lines hidden (view full) ---

754
755template <class Impl>
756void
757FullO3CPU<Impl>::signalDrained()
758{
759 if (++drainCount == NumStages) {
760 if (tickEvent.scheduled())
761 tickEvent.squash();
762
763 _status = Drained;
764
765 if (drainEvent) {
766 drainEvent->process();
767 drainEvent = NULL;
768 }
769 }
770 assert(drainCount <= 5);
771}
772
773template <class Impl>
774void
775FullO3CPU<Impl>::switchOut()
776{

--- 522 unchanged lines hidden ---