eventq_impl.hh revision 9356
19356Snilay@cs.wisc.edu/* 29356Snilay@cs.wisc.edu * Copyright (c) 2012 The Regents of The University of Michigan 39356Snilay@cs.wisc.edu * Copyright (c) 2012 Mark D. Hill and David A. Wood 49356Snilay@cs.wisc.edu * All rights reserved. 59356Snilay@cs.wisc.edu * 69356Snilay@cs.wisc.edu * Redistribution and use in source and binary forms, with or without 79356Snilay@cs.wisc.edu * modification, are permitted provided that the following conditions are 89356Snilay@cs.wisc.edu * met: redistributions of source code must retain the above copyright 99356Snilay@cs.wisc.edu * notice, this list of conditions and the following disclaimer; 109356Snilay@cs.wisc.edu * redistributions in binary form must reproduce the above copyright 119356Snilay@cs.wisc.edu * notice, this list of conditions and the following disclaimer in the 129356Snilay@cs.wisc.edu * documentation and/or other materials provided with the distribution; 139356Snilay@cs.wisc.edu * neither the name of the copyright holders nor the names of its 149356Snilay@cs.wisc.edu * contributors may be used to endorse or promote products derived from 159356Snilay@cs.wisc.edu * this software without specific prior written permission. 169356Snilay@cs.wisc.edu * 179356Snilay@cs.wisc.edu * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 189356Snilay@cs.wisc.edu * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 199356Snilay@cs.wisc.edu * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 209356Snilay@cs.wisc.edu * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 219356Snilay@cs.wisc.edu * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 229356Snilay@cs.wisc.edu * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 239356Snilay@cs.wisc.edu * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 249356Snilay@cs.wisc.edu * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 259356Snilay@cs.wisc.edu * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 269356Snilay@cs.wisc.edu * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 279356Snilay@cs.wisc.edu * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 289356Snilay@cs.wisc.edu * 299356Snilay@cs.wisc.edu * Authors: Steve Reinhardt 309356Snilay@cs.wisc.edu * Nathan Binkert 319356Snilay@cs.wisc.edu * Nilay Vaish 329356Snilay@cs.wisc.edu */ 339356Snilay@cs.wisc.edu 349356Snilay@cs.wisc.edu#ifndef __SIM_EVENTQ_IMPL_HH__ 359356Snilay@cs.wisc.edu#define __SIM_EVENTQ_IMPL_HH__ 369356Snilay@cs.wisc.edu 379356Snilay@cs.wisc.edu#include "base/trace.hh" 389356Snilay@cs.wisc.edu#include "sim/eventq.hh" 399356Snilay@cs.wisc.edu 409356Snilay@cs.wisc.eduinline void 419356Snilay@cs.wisc.eduEventQueue::schedule(Event *event, Tick when) 429356Snilay@cs.wisc.edu{ 439356Snilay@cs.wisc.edu assert(when >= getCurTick()); 449356Snilay@cs.wisc.edu assert(!event->scheduled()); 459356Snilay@cs.wisc.edu assert(event->initialized()); 469356Snilay@cs.wisc.edu 479356Snilay@cs.wisc.edu event->setWhen(when, this); 489356Snilay@cs.wisc.edu insert(event); 499356Snilay@cs.wisc.edu event->flags.set(Event::Scheduled); 509356Snilay@cs.wisc.edu if (this == &mainEventQueue) 519356Snilay@cs.wisc.edu event->flags.set(Event::IsMainQueue); 529356Snilay@cs.wisc.edu else 539356Snilay@cs.wisc.edu event->flags.clear(Event::IsMainQueue); 549356Snilay@cs.wisc.edu 559356Snilay@cs.wisc.edu if (DTRACE(Event)) 569356Snilay@cs.wisc.edu event->trace("scheduled"); 579356Snilay@cs.wisc.edu} 589356Snilay@cs.wisc.edu 599356Snilay@cs.wisc.eduinline void 609356Snilay@cs.wisc.eduEventQueue::deschedule(Event *event) 619356Snilay@cs.wisc.edu{ 629356Snilay@cs.wisc.edu assert(event->scheduled()); 639356Snilay@cs.wisc.edu assert(event->initialized()); 649356Snilay@cs.wisc.edu 659356Snilay@cs.wisc.edu remove(event); 669356Snilay@cs.wisc.edu 679356Snilay@cs.wisc.edu event->flags.clear(Event::Squashed); 689356Snilay@cs.wisc.edu event->flags.clear(Event::Scheduled); 699356Snilay@cs.wisc.edu 709356Snilay@cs.wisc.edu if (DTRACE(Event)) 719356Snilay@cs.wisc.edu event->trace("descheduled"); 729356Snilay@cs.wisc.edu 739356Snilay@cs.wisc.edu if (event->flags.isSet(Event::AutoDelete)) 749356Snilay@cs.wisc.edu delete event; 759356Snilay@cs.wisc.edu} 769356Snilay@cs.wisc.edu 779356Snilay@cs.wisc.eduinline void 789356Snilay@cs.wisc.eduEventQueue::reschedule(Event *event, Tick when, bool always) 799356Snilay@cs.wisc.edu{ 809356Snilay@cs.wisc.edu assert(when >= getCurTick()); 819356Snilay@cs.wisc.edu assert(always || event->scheduled()); 829356Snilay@cs.wisc.edu assert(event->initialized()); 839356Snilay@cs.wisc.edu 849356Snilay@cs.wisc.edu if (event->scheduled()) 859356Snilay@cs.wisc.edu remove(event); 869356Snilay@cs.wisc.edu 879356Snilay@cs.wisc.edu event->setWhen(when, this); 889356Snilay@cs.wisc.edu insert(event); 899356Snilay@cs.wisc.edu event->flags.clear(Event::Squashed); 909356Snilay@cs.wisc.edu event->flags.set(Event::Scheduled); 919356Snilay@cs.wisc.edu if (this == &mainEventQueue) 929356Snilay@cs.wisc.edu event->flags.set(Event::IsMainQueue); 939356Snilay@cs.wisc.edu else 949356Snilay@cs.wisc.edu event->flags.clear(Event::IsMainQueue); 959356Snilay@cs.wisc.edu 969356Snilay@cs.wisc.edu if (DTRACE(Event)) 979356Snilay@cs.wisc.edu event->trace("rescheduled"); 989356Snilay@cs.wisc.edu} 999356Snilay@cs.wisc.edu 1009356Snilay@cs.wisc.edu#endif // __SIM_EVENTQ_IMPL_HH__ 101