From 89cf3f6e853e3d9a95536372ab78a4a11a8c6ad1 Mon Sep 17 00:00:00 2001 From: Steve Reinhardt Date: Mon, 3 Jan 2011 14:35:47 -0800 Subject: Move sched_list.hh and timebuf.hh from src/base to src/cpu. These files really aren't general enough to belong in src/base. This patch doesn't reorder include lines, leaving them unsorted in many cases, but Nate's magic script will fix that up shortly. --HG-- rename : src/base/sched_list.hh => src/cpu/sched_list.hh rename : src/base/timebuf.hh => src/cpu/timebuf.hh --- src/base/sched_list.hh | 180 ------------------------------------ src/base/timebuf.hh | 241 ------------------------------------------------- 2 files changed, 421 deletions(-) delete mode 100644 src/base/sched_list.hh delete mode 100644 src/base/timebuf.hh (limited to 'src/base') diff --git a/src/base/sched_list.hh b/src/base/sched_list.hh deleted file mode 100644 index 56ee2f8ec..000000000 --- a/src/base/sched_list.hh +++ /dev/null @@ -1,180 +0,0 @@ -/* - * Copyright (c) 2002-2005 The Regents of The University of Michigan - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer; - * redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution; - * neither the name of the copyright holders nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * Authors: Steve Raasch - */ - -#ifndef SCHED_LIST_HH -#define SCHED_LIST_HH - -#include -#include "base/intmath.hh" -#include "base/misc.hh" - - -// Any types you use this class for must be covered here... -namespace { - void ClearEntry(int &i) { i = 0; }; - void ClearEntry(unsigned &i) { i = 0; }; - void ClearEntry(double &i) { i = 0; }; - template void ClearEntry(std::list &l) { l.clear(); }; -}; - - -// -// this is a special list type that allows the user to insert elements at a -// specified positive offset from the "current" element, but only allow them -// be extracted from the "current" element -// - - -template -class SchedList -{ - T *data_array; - unsigned position; - unsigned size; - unsigned mask; - - public: - SchedList(unsigned size); - SchedList(void); - - void init(unsigned size); - - T &operator[](unsigned offset); - - void advance(void); - - void clear(void); -}; - - - -// -// Constructor -// -template -SchedList::SchedList(unsigned _size) -{ - size = _size; - - // size must be a power of two - if (!isPowerOf2(size)) { - panic("SchedList: size must be a power of two"); - } - - if (size < 2) { - panic("SchedList: you don't want a list that small"); - } - - // calculate the bit mask for the modulo operation - mask = size - 1; - - data_array = new T[size]; - - if (!data_array) { - panic("SchedList: could not allocate memory"); - } - - clear(); -} - -template -SchedList::SchedList(void) -{ - data_array = 0; - size = 0; -} - - -template void -SchedList::init(unsigned _size) -{ - size = _size; - - if (!data_array) { - // size must be a power of two - if (size & (size-1)) { - panic("SchedList: size must be a power of two"); - } - - if (size < 2) { - panic("SchedList: you don't want a list that small"); - } - - // calculate the bit mask for the modulo operation - mask = size - 1; - - data_array = new T[size]; - - if (!data_array) { - panic("SchedList: could not allocate memory"); - } - - clear(); - } -} - - -template void -SchedList::advance(void) -{ - ClearEntry(data_array[position]); - - // position = (++position % size); - position = ++position & mask; -} - - -template void -SchedList::clear(void) -{ - for (unsigned i=0; i T& -SchedList::operator[](unsigned offset) -{ - if (offset >= size) { - panic("SchedList: can't access element beyond current pointer"); - } - - // unsigned p = (position + offset) % size; - unsigned p = (position + offset) & mask; - - return data_array[p]; -} - - - -#endif diff --git a/src/base/timebuf.hh b/src/base/timebuf.hh deleted file mode 100644 index b6f709d71..000000000 --- a/src/base/timebuf.hh +++ /dev/null @@ -1,241 +0,0 @@ -/* - * Copyright (c) 2004-2005 The Regents of The University of Michigan - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer; - * redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution; - * neither the name of the copyright holders nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * Authors: Nathan Binkert - * Kevin Lim - */ - -#ifndef __BASE_TIMEBUF_HH__ -#define __BASE_TIMEBUF_HH__ - -#include -#include -#include - -template -class TimeBuffer -{ - protected: - int past; - int future; - unsigned size; - int _id; - - char *data; - std::vector index; - unsigned base; - - void valid(int idx) - { - assert (idx >= -past && idx <= future); - } - - public: - friend class wire; - class wire - { - friend class TimeBuffer; - protected: - TimeBuffer *buffer; - int index; - - void set(int idx) - { - buffer->valid(idx); - index = idx; - } - - wire(TimeBuffer *buf, int i) - : buffer(buf), index(i) - { } - - public: - wire() - { } - - wire(const wire &i) - : buffer(i.buffer), index(i.index) - { } - - const wire &operator=(const wire &i) - { - buffer = i.buffer; - set(i.index); - return *this; - } - - const wire &operator=(int idx) - { - set(idx); - return *this; - } - - const wire &operator+=(int offset) - { - set(index + offset); - return *this; - } - - const wire &operator-=(int offset) - { - set(index - offset); - return *this; - } - - wire &operator++() - { - set(index + 1); - return *this; - } - - wire &operator++(int) - { - int i = index; - set(index + 1); - return wire(this, i); - } - - wire &operator--() - { - set(index - 1); - return *this; - } - - wire &operator--(int) - { - int i = index; - set(index - 1); - return wire(this, i); - } - T &operator*() const { return *buffer->access(index); } - T *operator->() const { return buffer->access(index); } - }; - - - public: - TimeBuffer(int p, int f) - : past(p), future(f), size(past + future + 1), - data(new char[size * sizeof(T)]), index(size), base(0) - { - assert(past >= 0 && future >= 0); - char *ptr = data; - for (unsigned i = 0; i < size; i++) { - index[i] = ptr; - std::memset(ptr, 0, sizeof(T)); - new (ptr) T; - ptr += sizeof(T); - } - - _id = -1; - } - - TimeBuffer() - : data(NULL) - { - } - - ~TimeBuffer() - { - for (unsigned i = 0; i < size; ++i) - (reinterpret_cast(index[i]))->~T(); - delete [] data; - } - - void id(int id) - { - _id = id; - } - - int id() - { - return _id; - } - - void - advance() - { - if (++base >= size) - base = 0; - - int ptr = base + future; - if (ptr >= (int)size) - ptr -= size; - (reinterpret_cast(index[ptr]))->~T(); - std::memset(index[ptr], 0, sizeof(T)); - new (index[ptr]) T; - } - - T *access(int idx) - { - //Need more complex math here to calculate index. - valid(idx); - - int vector_index = idx + base; - if (vector_index >= (int)size) { - vector_index -= size; - } else if (vector_index < 0) { - vector_index += size; - } - - return reinterpret_cast(index[vector_index]); - } - - T &operator[](int idx) - { - //Need more complex math here to calculate index. - valid(idx); - - int vector_index = idx + base; - if (vector_index >= (int)size) { - vector_index -= size; - } else if (vector_index < 0) { - vector_index += size; - } - - return reinterpret_cast(*index[vector_index]); - } - - wire getWire(int idx) - { - valid(idx); - - return wire(this, idx); - } - - wire zero() - { - return wire(this, 0); - } - - unsigned getSize() - { - return size; - } -}; - -#endif // __BASE_TIMEBUF_HH__ - -- cgit v1.2.3