Delete unused files from src/base directory.
authorSteve Reinhardt <steve.reinhardt@amd.com>
Mon, 3 Jan 2011 22:35:45 +0000 (14:35 -0800)
committerSteve Reinhardt <steve.reinhardt@amd.com>
Mon, 3 Jan 2011 22:35:45 +0000 (14:35 -0800)
15 files changed:
src/base/SConscript
src/base/compression/base.hh [deleted file]
src/base/compression/lzss_compression.cc [deleted file]
src/base/compression/lzss_compression.hh [deleted file]
src/base/compression/null_compression.hh [deleted file]
src/base/crc.cc [deleted file]
src/base/crc.hh [deleted file]
src/base/fifo_buffer.cc [deleted file]
src/base/fifo_buffer.hh [deleted file]
src/base/hybrid_pred.cc [deleted file]
src/base/hybrid_pred.hh [deleted file]
src/base/predictor.hh [deleted file]
src/base/res_list.hh [deleted file]
src/base/sat_counter.cc [deleted file]
src/base/sat_counter.hh [deleted file]

index 91671f817f0d78ed42c770700736eb98b4f21318..2bb6b13ab873cb928ed34898fa1f53c4969e9dcb 100644 (file)
@@ -38,14 +38,11 @@ Source('bigint.cc')
 Source('callback.cc')
 Source('circlebuf.cc')
 Source('cprintf.cc')
-Source('crc.cc')
 Source('debug.cc')
 Source('fast_alloc.cc')
 if env['USE_FENV']:
     Source('fenv.c')
-Source('fifo_buffer.cc')
 Source('hostinfo.cc')
-Source('hybrid_pred.cc')
 Source('inet.cc')
 Source('inifile.cc')
 Source('intmath.cc')
@@ -58,7 +55,6 @@ Source('random_mt.cc')
 Source('range.cc')
 if env['TARGET_ISA'] != 'no':
     Source('remote_gdb.cc')
-Source('sat_counter.cc')
 Source('socket.cc')
 Source('statistics.cc')
 Source('str.cc')
@@ -66,8 +62,6 @@ Source('time.cc')
 Source('trace.cc')
 Source('userinfo.cc')
 
-Source('compression/lzss_compression.cc')
-
 Source('loader/aout_object.cc')
 Source('loader/ecoff_object.cc')
 Source('loader/elf_object.cc')
diff --git a/src/base/compression/base.hh b/src/base/compression/base.hh
deleted file mode 100644 (file)
index d80660a..0000000
+++ /dev/null
@@ -1,71 +0,0 @@
-/*
- * Copyright (c) 2003-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: Erik Hallnor
- *          Nathan Binkert
- */
-
-#ifndef __BASE_COMPRESSION_BASE_HH__
-#define __BASE_COMPRESSION_BASE_HH__
-
-/**
- * @file
- * This file defines a base (abstract virtual) compression algorithm object.
- */
-
-#include "base/types.hh"
-
-/**
- * Abstract virtual compression algorithm object.
- */
-class CompressionAlgorithm
-{
-  public:
-    virtual ~CompressionAlgorithm() {}
-
-    /**
-     * Uncompress the data, causes a fatal since no data should be compressed.
-     * @param dest The output buffer.
-     * @param src  The compressed data.
-     * @param size The number of bytes in src.
-     *
-     * @retval The size of the uncompressed data.
-     */
-    virtual int uncompress(uint8_t * dest, uint8_t *src, int size) = 0;
-
-    /**
-     * Compress the data, just returns the source data.
-     * @param dest The output buffer.
-     * @param src  The data to be compressed.
-     * @param size The number of bytes in src.
-     *
-     * @retval The size of the compressed data.
-     */
-    virtual int compress(uint8_t *dest, uint8_t *src, int size) = 0;
-};
-
-#endif //__BASE_COMPRESSION_BASE_HH__
diff --git a/src/base/compression/lzss_compression.cc b/src/base/compression/lzss_compression.cc
deleted file mode 100644 (file)
index bd16d82..0000000
+++ /dev/null
@@ -1,173 +0,0 @@
-/*
- * Copyright (c) 2003-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: Erik Hallnor
- */
-
-/** @file
- * LZSSCompression definitions.
- */
-
-#include <cassert>
-#include <cstring>
-#include "base/compression/lzss_compression.hh"
-
-#include "base/misc.hh" //for fatal
-
-void
-LZSSCompression::findSubString(uint8_t *src, int back, int size, uint16_t &L,
-                               uint16_t &P)
-{
-    int front = 0;
-    int max_length = size - back;
-    L = 0;
-    P = back - 1;
-    while (front < back) {
-        while (src[front] != src[back] && front < back) ++front;
-        if (front >= back) {
-            return;
-        }
-        int i = 1;
-        while (src[front+i] == src[back+i] && i < max_length) ++i;
-        if (i >= L) {
-            L = i;
-            P = front;
-        }
-        if (src[front+i] != src[back+i-1]) {
-            // can't find a longer substring until past this point.
-            front += i;
-        } else {
-            ++front;
-        }
-    }
-}
-
-int
-LZSSCompression::emitByte(uint8_t *dest, uint8_t byte)
-{
-    if ((byte >> 5 & 0x7) == 0 || (byte >> 5 & 0x7) == 7) {
-        // If the top 3 bits are the same, emit 00<6bits>
-        dest[0] = byte & 0x3f;
-        return 1;
-    } else {
-        // emit 01XXXXXX <8 bits>
-        dest[0] = 0x40;
-        dest[1] = byte;
-        return 2;
-    }
-}
-
-void
-LZSSCompression::emitString(uint8_t *dest, uint16_t P, uint16_t L)
-{
-    // Emit 1<7P> <5P><3L> <8L>
-    dest[0] = 1<<7 | (P >> 5 & 0x7f);
-    dest[1] = ((P & 0x1f) << 3) | (L>>8 & 0x3);
-    dest[2] = L & 0xFF;
-}
-
-int
-LZSSCompression::compress(uint8_t *dest, uint8_t *src, int size)
-{
-    if (size > 4096) {
-        fatal("Compression can only handle block sizes of 4096 bytes or less");
-    }
-
-    // Encode the first byte.
-    int dest_index = emitByte(dest, src[0]);
-    int i = 1;
-    // A 11 bit field
-    uint16_t L;
-    // A 12 bit field
-    uint16_t P = 0;
-
-    while (i < size && dest_index < size) {
-        L = 0;
-
-        if (dest_index+3 >= size) {
-            dest_index = size;
-            continue;
-        }
-
-        if (i == size - 1) {
-            // Output the character
-            dest_index += emitByte(&dest[dest_index], src[i]);
-            ++i;
-            continue;
-        }
-        findSubString(src, i, size, L, P);
-        if (L > 1) {
-            // Output the string reference
-            emitString(&dest[dest_index], P, L);
-            dest_index += 3;
-            i = i+L;
-        } else {
-            // Output the character
-            dest_index += emitByte(&dest[dest_index], src[i]);
-            ++i;
-        }
-    }
-
-    if (dest_index >= size) {
-        // Have expansion instead of compression, just copy.
-        std::memcpy(dest,src,size);
-        return size;
-    }
-    return dest_index;
-}
-
-int
-LZSSCompression::uncompress(uint8_t *dest, uint8_t *src, int size)
-{
-    int index = 0;
-    int i = 0;
-    while (i < size) {
-        if (src[i] & 1<<7 ) {
-            // We have a string
-            // Extract P
-            int start = (src[i] & 0x3f)<<5 | ((src[i+1] >> 3) & 0x1f);
-            // Extract L
-            int len = (src[i+1] & 0x07)<<8 | src[i+2];
-            i += 3;
-            for (int j = start; j < start+len; ++j) {
-                dest[index++] = dest[j];
-            }
-        } else {
-            // We have a character
-            if (src[i] & 1<<6) {
-                // Value is in the next byte
-                dest[index++] = src[i+1];
-                i += 2;
-            } else {
-                // just extend the lower 6 bits
-                dest[index++] = (src[i] & 0x3f) | ((src[i] & 1<<5) ? 0xC0 : 0);
-                ++i;
-            }
-        }
-    }
-    return index;
-}
diff --git a/src/base/compression/lzss_compression.hh b/src/base/compression/lzss_compression.hh
deleted file mode 100644 (file)
index a23d07f..0000000
+++ /dev/null
@@ -1,103 +0,0 @@
-/*
- * Copyright (c) 2003-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: Erik Hallnor
- */
-
-#ifndef __LZSS_COMPRESSION_HH__
-#define __LZSS_COMPRESSION_HH__
-
-/** @file
- * LZSSCompression declarations.
- */
-
-#include "base/compression/base.hh"
-
-/**
- * Simple LZSS compression scheme.
- */
-class LZSSCompression : public CompressionAlgorithm
-{
-    /**
-     * Finds the longest substring for the given offset.
-     * @param src The source block that we search for substrings.
-     * @param back The larger offset.
-     * @param size The size of the source block.
-     * @param L The length of the largest substring.
-     * @param P The starting offset of the largest substring.
-     */
-    void findSubString(uint8_t *src, int back, int size, uint16_t &L,
-                       uint16_t &P);
-
-    /**
-     * Emit an encoded byte to the compressed data array. If the 2 high
-     * order bits can be signed extended, use 1 byte encoding, if not use 2
-     * bytes.
-     * @param dest The compressed data.
-     * @param byte The byte to emit.
-     * @return The number of bytes used to encode.
-     */
-    int emitByte(uint8_t *dest, uint8_t byte);
-
-    /**
-     * Emit a string reference to the compressed data array. A string reference
-     * always uses 3 bytes. 1 flag bit, 12 bits for the starting position, and
-     * 11 bits for the length of the string. This allows compression of 4096
-     * byte blocks with string lengths of up to 2048 bytes.
-     * @param dest The compressed data.
-     * @param P The starting position in the uncompressed data.
-     * @param L The length in bytes of the string.
-     */
-    void emitString(uint8_t *dest, uint16_t P, uint16_t L);
-
-  public:
-    /**
-     * Compresses the source block and stores it in the destination block. If
-     * the compressed block grows to larger than the source block, it aborts
-     * and just performs a copy.
-     * @param dest The destination block.
-     * @param src The block to be compressed.
-     * @param size The size of the source block.
-     * @return The size of the compressed block.
-     *
-     * @pre Destination has enough storage to hold the compressed block.
-     */
-    int compress(uint8_t *dest, uint8_t *src, int size);
-
-    /**
-     * Unompresses the source block and stores it in the destination block.
-     * @param dest The destination block.
-     * @param src The block to be uncompressed.
-     * @param size The size of the source block.
-     * @return The size of the uncompressed block.
-     *
-     * @pre Destination has enough storage to hold the uncompressed block.
-     */
-    int uncompress(uint8_t *dest, uint8_t *src, int size);
-};
-
-#endif //__LZSS_COMPRESSION_HH__
diff --git a/src/base/compression/null_compression.hh b/src/base/compression/null_compression.hh
deleted file mode 100644 (file)
index 798acb7..0000000
+++ /dev/null
@@ -1,63 +0,0 @@
-/*
- * Copyright (c) 2003-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: Erik Hallnor
- *          Nathan Binkert
- */
-
-#ifndef __BASE_COMPRESSION_NULL_COMPRESSION_HH__
-#define __BASE_COMPRESSION_NULL_COMPRESSION_HH__
-
-/**
- * @file
- * This file defines a doNothing compression algorithm.
- */
-
-#include "base/misc.hh" // for fatal()
-#include "base/compression/base.hh"
-
-
-/**
- * A dummy compression class to use when no data compression is desired.
- */
-class NullCompression : public CompressionAlgorithm
-{
-  public:
-    int uncompress(uint8_t * dest, uint8_t *src, int size)
-    {
-        fatal("Can't uncompress data");
-        M5_DUMMY_RETURN
-    }
-
-    int compress(uint8_t *dest, uint8_t *src, int size)
-    {
-        fatal("Can't compress data");
-        M5_DUMMY_RETURN
-    }
-};
-
-#endif //__BASE_COMPRESSION_NULL_COMPRESSION_HH__
diff --git a/src/base/crc.cc b/src/base/crc.cc
deleted file mode 100644 (file)
index 6b04213..0000000
+++ /dev/null
@@ -1,105 +0,0 @@
-/*
- * Copyright (c) 1988, 1992, 1993
- *      The Regents of the University of California.  All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. 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.
- * 3. All advertising materials mentioning features or use of this software
- *    must display the following acknowledgement:
- *      This product includes software developed by the University of
- *      California, Berkeley and its contributors.
- * 4. Neither the name of the University 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 REGENTS 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 REGENTS 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.
- */
-
-#include <string>
-
-#include "base/crc.hh"
-#include "base/types.hh"
-
-#define ETHER_CRC_POLY_LE 0xedb88320
-#define ETHER_CRC_POLY_BE 0x04c11db6
-
-#if 0
-/*
- * This is for reference.  We have a table-driven version
- * of the little-endian crc32 generator, which is faster
- * than the double-loop.
- */
-uint32_t
-crc32le(const uint8_t *buf, size_t len)
-{
-    uint32_t crc = 0xffffffffU;      /* initial value */
-
-    for (size_t i = 0; i < len; i++) {
-        uint32_t c = buf[i];
-        for (size_t j = 0; j < 8; j++) {
-            uint32_t carry = ((crc & 0x01) ? 1 : 0) ^ (c & 0x01);
-            crc >>= 1;
-            c >>= 1;
-            if (carry)
-                crc = (crc ^ ETHER_CRC_POLY_LE);
-        }
-    }
-
-    return crc;
-}
-#else
-uint32_t
-crc32le(const uint8_t *buf, size_t len)
-{
-    static const uint32_t crctab[] = {
-        0x00000000, 0x1db71064, 0x3b6e20c8, 0x26d930ac,
-        0x76dc4190, 0x6b6b51f4, 0x4db26158, 0x5005713c,
-        0xedb88320, 0xf00f9344, 0xd6d6a3e8, 0xcb61b38c,
-        0x9b64c2b0, 0x86d3d2d4, 0xa00ae278, 0xbdbdf21c
-    };
-    uint32_t crc = 0xffffffffU;      /* initial value */
-
-    for (size_t i = 0; i < len; i++) {
-        crc ^= buf[i];
-        crc = (crc >> 4) ^ crctab[crc & 0xf];
-        crc = (crc >> 4) ^ crctab[crc & 0xf];
-    }
-
-    return crc;
-}
-#endif
-
-uint32_t
-crc32be(const uint8_t *buf, size_t len)
-{
-    uint32_t crc = 0xffffffffU;      /* initial value */
-
-    for (size_t i = 0; i < len; i++) {
-        uint32_t c = buf[i];
-        for (size_t j = 0; j < 8; j++) {
-            uint32_t carry = ((crc & 0x80000000U) ? 1 : 0) ^ (c & 0x01);
-            crc <<= 1;
-            c >>= 1;
-            if (carry)
-                crc = (crc ^ ETHER_CRC_POLY_BE) | carry;
-        }
-    }
-
-    return (crc);
-}
diff --git a/src/base/crc.hh b/src/base/crc.hh
deleted file mode 100644 (file)
index 212be4f..0000000
+++ /dev/null
@@ -1,39 +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
- */
-
-#ifndef __BASE_CRC_HH__
-#define __BASE_CRC_HH__
-
-#include "base/types.hh"
-
-uint32_t crc32be(const uint8_t *buf, size_t len);
-uint32_t crc32le(const uint8_t *buf, size_t len);
-
-#endif // __BASE_CRC_HH__
diff --git a/src/base/fifo_buffer.cc b/src/base/fifo_buffer.cc
deleted file mode 100644 (file)
index 4bafa88..0000000
+++ /dev/null
@@ -1,43 +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
- *          Nathan Binkert
- */
-
-#include "base/fifo_buffer.hh"
-
-template<class T>
-void
-FifoBuffer<T>::dump()
-{
-    if (buffer->count() > 0)
-        for (iterator i=buffer->tail(); i.notnull(); i=i.prev())
-            i->dump();
-}
-
-
diff --git a/src/base/fifo_buffer.hh b/src/base/fifo_buffer.hh
deleted file mode 100644 (file)
index f620533..0000000
+++ /dev/null
@@ -1,89 +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
- *          Nathan Binkert
- */
-
-#ifndef __FIFO_BUFFER_HH__
-#define __FIFO_BUFFER_HH__
-
-#include "base/res_list.hh"
-
-
-//
-//  The FifoBuffer requires only that the objects to be used have a default
-//  constructor and a dump() method
-//
-template<class T>
-class FifoBuffer
-{
-  public:
-    typedef typename res_list<T>::iterator iterator;
-
-  private:
-    res_list<T> *buffer;
-
-    unsigned size;
-
-  public:
-    FifoBuffer(unsigned sz)
-    {
-        buffer = new res_list<T>(sz, true, 0);
-        size = sz;
-    }
-
-    void add(T &item)
-    {
-        assert(buffer->num_free() > 0);
-        buffer->add_head(item);
-    }
-
-    iterator head() { return buffer->head(); }
-    iterator tail() { return buffer->tail(); }
-
-    unsigned count() {return buffer->count();}
-    unsigned free_slots() {return buffer->num_free();}
-
-    T *peek() { return (count() > 0) ? tail().data_ptr() : 0; }
-
-    T remove()
-    {
-        assert(buffer->count() > 0);
-        T rval = *buffer->tail();
-        buffer->remove_tail();
-        return rval;
-    }
-
-    void dump();
-
-    ~FifoBuffer() { delete buffer; }
-};
-
-
-#endif
-
diff --git a/src/base/hybrid_pred.cc b/src/base/hybrid_pred.cc
deleted file mode 100644 (file)
index 7321648..0000000
+++ /dev/null
@@ -1,276 +0,0 @@
-/*
- * Copyright (c) 2003-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 Reinhardt
- *          Lisa Hsu
- */
-
-#include <string>
-#include <sstream>
-
-#include "base/hybrid_pred.hh"
-#include "base/statistics.hh"
-#include "sim/stats.hh"
-
-using namespace std;
-
-HybridPredictor::HybridPredictor(const char *_p_name, const char *_z_name,
-                                 const char *_o_name,
-                                 unsigned _index_bits, unsigned _counter_bits,
-                                 unsigned _zero_change, unsigned _one_change,
-                                 unsigned _thresh,
-                                 unsigned _global_bits,
-                                 unsigned _global_thresh,
-                                 bool _reg_individual_stats)
-{
-    stringstream local_name, global_name;
-
-    pred_name = _p_name;
-    one_name  = _o_name;
-    zero_name = _z_name;
-    reg_individual_stats = _reg_individual_stats;
-
-    local_name << pred_name.c_str() << ":L";
-    local = new SaturatingCounterPred(local_name.str(), zero_name, one_name,
-                                      _index_bits, _counter_bits,
-                                      _zero_change, _one_change, _thresh);
-
-    global_name << pred_name.c_str() << ":G";
-    global = new SaturatingCounterPred(global_name.str(), zero_name, one_name,
-                                       0, _global_bits, 1, 1, _global_thresh);
-}
-
-void HybridPredictor::regStats()
-{
-    using namespace Stats;
-
-    string p_name;
-    stringstream description;
-
-    if (reg_individual_stats)
-        p_name = pred_name + ":A";
-    else
-        p_name = pred_name;
-
-
-    //
-    //  Number of predictions
-    //
-    stringstream num_zero_preds;
-    num_zero_preds << p_name << ":" << zero_name << ":preds";
-    description << "number of predictions of " << zero_name;
-    pred_zero
-        .name(num_zero_preds.str())
-        .desc(description.str());
-    description.str("");
-
-    stringstream num_one_preds;
-    num_one_preds << p_name << ":" << one_name << ":preds";
-    description << "number of predictions of " << one_name;
-    pred_one
-        .name(num_one_preds.str())
-        .desc(description.str())
-        ;
-    description.str("");
-
-    //
-    //  Count the number of correct predictions
-    //
-    stringstream num_zero_correct;
-    num_zero_correct << p_name << ":" << zero_name << ":corr_preds";
-    description << "number of correct " << zero_name << " preds" ;
-    correct_pred_zero
-        .name(num_zero_correct.str())
-        .desc(description.str())
-        ;
-    description.str("");
-
-    stringstream num_one_correct;
-    num_one_correct << p_name << ":" << one_name << ":corr_preds";
-    description << "number of correct " << one_name << " preds" ;
-    correct_pred_one
-        .name(num_one_correct.str())
-        .desc(description.str())
-        ;
-    description.str("");
-
-
-    //
-    //  Number of predictor updates
-    //
-    stringstream num_zero_updates;
-    num_zero_updates << p_name << ":" << zero_name << ":updates" ;
-    description << "number of actual " << zero_name << "s" ;
-    record_zero
-        .name(num_zero_updates.str())
-        .desc(description.str())
-        ;
-    description.str("");
-
-    stringstream num_one_updates;
-    num_one_updates << p_name << ":" << one_name << ":updates" ;
-    description << "number of actual " << one_name << "s" ;
-    record_one
-        .name(num_one_updates.str())
-        .desc(description.str())
-        ;
-    description.str("");
-
-    //
-    //  Local & Global predictor stats
-    //
-    if (reg_individual_stats) {
-        local->regStats();
-        global->regStats();
-    }
-}
-
-void HybridPredictor::regFormulas()
-{
-    using namespace Stats;
-
-    string p_name;
-    stringstream description;
-    stringstream name;
-
-    if (reg_individual_stats)
-        p_name = pred_name + ":A";
-    else
-        p_name = pred_name;
-
-    //
-    //  Number of predictions
-    //
-    name << p_name << ":predictions" ;
-    total_preds
-        .name(name.str())
-        .desc("total number of predictions made")
-        ;
-    total_preds = pred_one + pred_zero;
-    name.str("");
-
-    //
-    //  Fraction of all predictions that are one or zero
-    //
-    name << p_name << ":" << zero_name << ":pred_frac";
-    description << "fraction of all preds that were " << zero_name ;
-    frac_preds_zero
-        .name(name.str())
-        .desc(description.str())
-        ;
-    frac_preds_zero = 100 * record_zero / total_preds;
-    description.str("");
-    name.str("");
-
-    name << p_name << ":" << one_name << ":pred_frac";
-    description << "fraction of all preds that were " << one_name ;
-    frac_preds_one
-        .name(name.str())
-        .desc(description.str())
-        ;
-    frac_preds_one = 100 * record_one / total_preds;
-    description.str("");
-    name.str("");
-
-    //
-    //  Count the number of correct predictions
-    //
-    name << p_name << ":correct_preds" ;
-    total_correct
-        .name(name.str())
-        .desc("total number of correct predictions made")
-        ;
-    total_correct = correct_pred_one + correct_pred_zero;
-    name.str("");
-
-
-    //
-    //  Prediction accuracy rates
-    //
-    name << p_name << ":pred_rate";
-    total_accuracy
-        .name(name.str())
-        .desc("fraction of all preds that were correct")
-        ;
-    total_accuracy = 100 * total_correct / total_preds;
-    name.str("");
-
-    name << p_name << ":" << zero_name << ":pred_rate" ;
-    description << "fraction of "<< zero_name <<" preds that were correct";
-    zero_accuracy
-        .name(name.str())
-        .desc(description.str())
-        ;
-    zero_accuracy = 100 * correct_pred_zero / pred_zero;
-    description.str("");
-    name.str("");
-
-    name << p_name << ":" << one_name << ":pred_rate" ;
-    description << "fraction of "<< one_name <<" preds that were correct";
-    one_accuracy
-        .name(name.str())
-        .desc(description.str())
-        ;
-    one_accuracy = 100 * correct_pred_one / pred_one;
-    description.str("");
-    name.str("");
-
-    //
-    //  Coverage
-    //
-    name << p_name << ":" << zero_name << ":coverage";
-    description << "fraction of " << zero_name
-                << "s that were predicted correctly";
-    zero_coverage
-        .name(name.str())
-        .desc(description.str())
-        ;
-    zero_coverage = 100 * correct_pred_zero / record_zero;
-    description.str("");
-    name.str("");
-
-    name << p_name << ":" << one_name << ":coverage";
-    description << "fraction of " << one_name
-                << "s that were predicted correctly";
-    one_coverage
-        .name(name.str())
-        .desc(description.str())
-        ;
-    one_coverage = 100 * correct_pred_one / record_one;
-    description.str("");
-    name.str("");
-
-    //
-    //  Local & Global predictor stats
-    //
-    if (reg_individual_stats) {
-        local->regFormulas();
-        global->regFormulas();
-    }
-
-}
-
diff --git a/src/base/hybrid_pred.hh b/src/base/hybrid_pred.hh
deleted file mode 100644 (file)
index 5e47855..0000000
+++ /dev/null
@@ -1,204 +0,0 @@
-/*
- * Copyright (c) 2001-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
- *          Steve Reinhardt
- */
-
-//==========================================================================
-//
-//  This predictor takes the AND of a "local" and a "global" predictor
-//  in order to determine its prediction.
-//
-//
-//
-//
-
-#ifndef __HYBRID_PRED_HH__
-#define __HYBRID_PRED_HH__
-
-#include <string>
-
-#include "base/sat_counter.hh"
-#include "base/statistics.hh"
-
-class HybridPredictor : public GenericPredictor
-{
-  private:
-    std::string pred_name;
-    std::string one_name;
-    std::string zero_name;
-    bool reg_individual_stats;
-
-    SaturatingCounterPred *local;
-    SaturatingCounterPred *global;
-
-    unsigned long max_index;
-
-    //
-    //  Stats
-    //
-    Stats::Scalar pred_one; //num_one_preds
-    Stats::Scalar pred_zero; //num_zero_preds
-    Stats::Scalar correct_pred_one; //num_one_correct
-    Stats::Scalar correct_pred_zero; //num_zero_correct
-    Stats::Scalar record_one; //num_one_updates
-    Stats::Scalar record_zero; //num_zero_updates
-
-    Stats::Formula total_preds;
-    Stats::Formula frac_preds_zero;
-    Stats::Formula frac_preds_one;
-    Stats::Formula total_correct;
-    Stats::Formula total_accuracy;
-    Stats::Formula zero_accuracy;
-    Stats::Formula one_accuracy;
-    Stats::Formula zero_coverage;
-    Stats::Formula one_coverage;
-
-  public:
-    HybridPredictor(const char *_p_name, const char *_z_name,
-                    const char *_o_name,
-                    unsigned _index_bits, unsigned _counter_bits,
-                    unsigned _zero_change, unsigned _one_change,
-                    unsigned _thresh,
-                    unsigned _global_bits, unsigned _global_thresh,
-                    bool _reg_individual_stats = false);
-
-    void clear() {
-        global->clear();
-        local->clear();
-    }
-
-    unsigned peek(unsigned long _index) {
-        unsigned l = local->peek(_index);
-        unsigned g = global->peek(_index);
-
-        if (l && g)
-            return 1;
-
-        return 0;
-    }
-
-    unsigned value(unsigned long _index) {
-        unsigned l = local->peek(_index);
-        unsigned g = global->peek(_index);
-
-        l = l & 0xFFFF;
-        g = g & 0xFFFF;
-
-        return  (l << 16) | g;
-
-    }
-
-    unsigned predict(unsigned long _index) {
-        unsigned l = local->predict(_index);
-        unsigned g = global->predict(_index);
-
-        if (l && g) {
-            ++pred_one;
-            return 1;
-        }
-
-        ++pred_zero;
-        return 0;
-    }
-
-
-    //
-    //  This version need only be used if local/global statistics
-    //  will be maintained
-    //
-    unsigned predict(unsigned long _index, unsigned &_pdata) {
-        unsigned l = local->predict(_index);
-        unsigned g = global->predict(_index);
-
-        //
-        //  bit 0 => local predictor result
-        //  bit 1 => global predictor result
-        //
-        _pdata = 0;
-        if (l)
-            _pdata |= 1;
-        if (g)
-            _pdata |= 2;
-        if (l && g) {
-            ++pred_one;
-            return 1;
-        }
-
-        ++pred_zero;
-        return 0;
-    }
-
-    void record(unsigned long _index, unsigned _val, unsigned _predicted) {
-
-        if (_val) {
-            local->record(_index, _val, 0);
-            global->record(_index, _val, 0);
-            ++record_one;
-
-            if (_val == _predicted) {
-                ++correct_pred_one;
-            }
-        } else {
-            local->record(_index, _val, 0);
-            global->record(_index, _val, 0);
-            ++record_zero;
-
-            if (_val == _predicted)
-                ++correct_pred_zero;
-        }
-    }
-
-    void record(unsigned long _index, unsigned _val, unsigned _predicted,
-                unsigned _pdata)
-    {
-
-        local->record(_index, _val, (_pdata & 1));
-        global->record(_index, _val, ((_pdata & 2) ? 1 : 0));
-
-
-        if (_val) {
-            ++record_one;
-
-            if (_val == _predicted)
-                ++correct_pred_one;
-        } else {
-            ++record_zero;
-
-            if (_val == _predicted)
-                ++correct_pred_zero;
-        }
-    }
-
-    void regStats();
-    void regFormulas();
-};
-
-
-#endif  // _HYBRID_PRED_HH__
-
diff --git a/src/base/predictor.hh b/src/base/predictor.hh
deleted file mode 100644 (file)
index 94f19ca..0000000
+++ /dev/null
@@ -1,63 +0,0 @@
-/*
- * Copyright (c) 2001-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
- *          Nathan Binkert
- */
-
-//
-//  Abstract base class for a generic predictor
-//
-//
-
-#ifndef __PREDICTOR_HH__
-#define __PREDICTOR_HH__
-
-class GenericPredictor {
-
-  public:
-    virtual void clear() = 0;
-
-    virtual unsigned predict(unsigned long _index) = 0;
-    virtual unsigned predict(unsigned long _index, unsigned &pdata) = 0;
-
-    virtual unsigned peek(unsigned long _index) = 0;
-
-    virtual void record(unsigned long _index, unsigned _actual_value,
-                        unsigned _pred_value) = 0;
-    virtual void record(unsigned long _index, unsigned _actual_value,
-                        unsigned _pred_value, unsigned _pdata) = 0;
-
-    virtual unsigned value(unsigned long _index) = 0;
-
-    virtual void regStats() = 0;
-    virtual void regFormulas() = 0;
-
-    virtual ~GenericPredictor() {};
-};
-
-#endif //  __PREDICTOR_HH__
diff --git a/src/base/res_list.hh b/src/base/res_list.hh
deleted file mode 100644 (file)
index fd22043..0000000
+++ /dev/null
@@ -1,759 +0,0 @@
-/*
- * Copyright (c) 2001-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
- *          Nathan Binkert
- */
-
-#ifndef __RES_LIST_HH__
-#define __RES_LIST_HH__
-
-#include <cassert>
-
-#include "base/cprintf.hh"
-
-#define DEBUG_REMOVE 0
-
-#define DEBUG_MEMORY 0
-//#define DEBUG_MEMORY DEBUG
-
-class res_list_base
-{
-#if DEBUG_MEMORY
-  protected:
-    static long long allocated_elements;
-    static long long allocated_lists;
-
-  public:
-    long long get_elements(void) {
-        return allocated_elements;
-    }
-    long long get_lists(void) {
-        return allocated_lists;
-    }
-
-#endif
-};
-
-#if DEBUG_MEMORY
-extern void what_the(void);
-#endif
-
-template<class T>
-class res_list : public res_list_base
-{
-  public:
-    class iterator;
-
-    class res_element
-    {
-        res_element *next;
-        res_element *prev;
-        T *data;
-        bool allocate_data;
-
-      public:
-        //  always adds to the END of the list
-        res_element(res_element *_prev, bool allocate);
-        ~res_element();
-        void dump(void);
-
-        friend class res_list<T>;
-        friend class res_list<T>::iterator;
-    };
-
-    class iterator
-    {
-      private:
-        res_element *p;
-
-        friend class res_list<T>;
-
-      public:
-        // Constructors
-        iterator(res_element *q) : p(q) {}
-        iterator(void) { p=0; };
-
-        void dump(void);
-        T* data_ptr(void);
-        res_element *res_el_ptr(void) { return p;}
-        void point_to(T &d) { p->data = &d; }
-
-        iterator next(void) { return iterator(p->next); }
-        iterator prev(void) { return iterator(p->prev); }
-        bool operator== (iterator x) { return (x.p == this->p); }
-        bool operator != (iterator x) { return (x.p != this->p); }
-        T &operator * (void) { return *(p->data); }
-        T* operator -> (void) { return p->data; }
-        bool isnull(void) { return (p==0); }
-        bool notnull(void) { return (p!=0); }
-    };
-
-  private:
-    iterator unused_elements;
-    iterator head_ptr;
-    iterator tail_ptr;
-
-    unsigned base_elements;
-    unsigned extra_elements;
-    unsigned active_elements;
-    bool     allocate_storage;
-    unsigned build_size;
-
-    int remove_count;
-
-    //
-    //  Allocate new elements, and assign them to the unused_elements
-    //  list.
-    //
-    unsigned allocate_elements(unsigned num, bool allocate_storage);
-
-  public:
-    //
-    //  List Constructor
-    //
-    res_list(unsigned size, bool alloc_storage = false,
-             unsigned build_sz = 5);
-
-    //
-    //  List Destructor
-    //
-    ~res_list();
-
-    iterator head(void) {return head_ptr;};
-    iterator tail(void) {return tail_ptr;};
-
-    unsigned num_free(void) { return size() - count(); }
-    unsigned size(void) { return base_elements + extra_elements; }
-    unsigned count(void) { return active_elements; }
-    bool empty(void) { return count() == 0; }
-    bool full(void);
-
-    //
-    //  Insert with data copy
-    //
-    iterator insert_after(iterator prev, T *d);
-    iterator insert_after(iterator prev, T &d);
-    iterator insert_before(iterator prev, T *d);
-    iterator insert_before(iterator prev, T &d);
-
-    //
-    //  Insert new list element (no data copy)
-    //
-    iterator insert_after(iterator prev);
-    iterator insert_before(iterator prev);
-
-    iterator add_tail(T *d) { return insert_after(tail_ptr, d); }
-    iterator add_tail(T &d) { return insert_after(tail_ptr, d); }
-    iterator add_tail(void) { return insert_after(tail_ptr); }
-    iterator add_head(T *d) { return insert_before(head_ptr, d); }
-    iterator add_head(T &d) { return insert_before(head_ptr, d); }
-    iterator add_head(void) { return insert_before(head_ptr); }
-
-    iterator remove(iterator q);
-    iterator remove_head(void) {return remove(head_ptr);}
-    iterator remove_tail(void) {return remove(tail_ptr);}
-
-    bool in_list(iterator j);
-    void free_extras(void);
-    void clear(void);
-    void dump(void);
-    void raw_dump(void);
-};
-
-template <class T>
-inline
-res_list<T>::res_element::res_element(res_element *_prev, bool allocate)
-{
-    allocate_data = allocate;
-    prev = _prev;
-    next = 0;
-
-    if (prev)
-        prev->next = this;
-
-    if (allocate)
-        data = new T;
-    else
-        data = 0;
-
-#if DEBUG_MEMORY
-    ++allocated_elements;
-#endif
-}
-
-template <class T>
-inline
-res_list<T>::res_element::~res_element(void)
-{
-    if (prev)
-        prev->next = next;
-
-    if (next)
-        next->prev = prev;
-
-    if (allocate_data)
-        delete data;
-
-#if DEBUG_MEMORY
-    --allocated_elements;
-#endif
-}
-
-template <class T>
-inline void
-res_list<T>::res_element::dump(void)
-{
-    cprintf("  prev = %#x\n", prev);
-    cprintf("  next = %#x\n", next);
-    cprintf("  data = %#x\n", data);
-}
-
-template <class T>
-inline void
-res_list<T>::iterator::dump(void)
-{
-    if (p && p->data)
-        p->data->dump();
-    else {
-        if (!p)
-            cprintf("  Null Pointer\n");
-        else
-            cprintf("  Null 'data' Pointer\n");
-    }
-}
-
-template <class T>
-inline T *
-res_list<T>::iterator::data_ptr(void)
-{
-    if (p)
-        return p->data;
-    else
-        return 0;
-}
-
-
-//
-//  Allocate new elements, and assign them to the unused_elements
-//  list.
-//
-template <class T>
-inline unsigned
-res_list<T>::allocate_elements(unsigned num, bool allocate_storage)
-{
-    res_element *pnew, *plast = 0, *pfirst=0;
-
-    for (int i=0; i<num; ++i) {
-        pnew = new res_element(plast, allocate_storage);
-        if (i==0)
-            pfirst = pnew;
-        plast = pnew;
-    }
-
-    if (unused_elements.notnull()) {
-        //  Add these new elements to the front of the list
-        plast->next = unused_elements.res_el_ptr();
-        unused_elements.res_el_ptr()->prev = plast;
-    }
-
-    unused_elements = iterator(pfirst);
-
-    return num;
-}
-
-template <class T>
-inline
-res_list<T>::res_list(unsigned size, bool alloc_storage, unsigned build_sz)
-{
-#if DEBUG_MEMORY
-    ++allocated_lists;
-#endif
-    extra_elements = 0;
-    active_elements = 0;
-    build_size = build_sz;
-    allocate_storage = alloc_storage;
-    remove_count = 0;
-
-    //  Create the new elements
-    base_elements = allocate_elements(size, alloc_storage);
-
-    //  The list of active elements
-    head_ptr = iterator(0);
-    tail_ptr = iterator(0);
-}
-
-//
-//  List Destructor
-//
-template <class T>
-inline
-res_list<T>::~res_list(void)
-{
-    iterator n;
-
-#if DEBUG_MEMORY
-    --allocated_lists;
-#endif
-
-    //  put everything into the unused list
-    clear();
-
-    //  rudely delete all the res_elements
-    for (iterator p = unused_elements;
-         p.notnull();
-         p = n) {
-
-        n = p.next();
-
-        //  delete the res_element
-        //  (it will take care of deleting the data)
-        delete p.res_el_ptr();
-    }
-}
-
-template <class T>
-inline bool
-res_list<T>::full(void)
-{
-    if (build_size)
-        return false;
-    else
-        return unused_elements.isnull();
-}
-
-//
-//  Insert with data copy
-//
-template <class T>
-inline typename res_list<T>::iterator
-res_list<T>::insert_after(iterator prev, T *d)
-{
-    iterator p;
-
-    if (!allocate_storage)
-        this->panic("Can't copy data... not allocating storage");
-
-    p = insert_after(prev);
-    if (p.notnull())
-        *p = *d;
-
-    return p;
-}
-
-
-template <class T>
-inline typename res_list<T>::iterator
-res_list<T>::insert_after(iterator prev, T &d)
-{
-    iterator p;
-
-    p = insert_after(prev);
-    if (p.notnull()) {
-
-        if (allocate_storage) {
-            //  if we allocate storage, then copy the contents of the
-            //  specified object to our object
-            *p = d;
-        }
-        else {
-            //  if we don't allocate storage, then we just want to
-            //  point to the specified object
-            p.point_to(d);
-        }
-    }
-
-    return p;
-}
-
-
-template <class T>
-inline typename res_list<T>::iterator
-res_list<T>::insert_after(iterator prev)
-{
-
-#if DEBUG_MEMORY
-    if (active_elements > 2*base_elements) {
-        what_the();
-    }
-#endif
-
-    //  If we have no unused elements, make some more
-    if (unused_elements.isnull()) {
-
-        if (build_size == 0) {
-            return 0;   // No space left, and can't allocate more....
-        }
-
-        extra_elements += allocate_elements(build_size, allocate_storage);
-    }
-
-    //  grab the first unused element
-    res_element *p = unused_elements.res_el_ptr();
-
-    unused_elements = unused_elements.next();
-
-    ++active_elements;
-
-    //  Insert the new element
-    if (head_ptr.isnull()) {
-        //
-        //  Special case #1: Empty List
-        //
-        head_ptr = p;
-        tail_ptr = p;
-        p->prev = 0;
-        p->next = 0;
-    }
-    else if (prev.isnull()) {
-        //
-        //  Special case #2: Insert at head
-        //
-
-        // our next ptr points to old head element
-        p->next = head_ptr.res_el_ptr();
-
-        // our element becomes the new head element
-        head_ptr = p;
-
-        // no previous element for the head
-        p->prev = 0;
-
-        // old head element points back to this element
-        p->next->prev = p;
-    }
-    else if (prev.next().isnull()) {
-        //
-        //  Special case #3 Insert at tail
-        //
-
-        // our prev pointer points to old tail element
-        p->prev = tail_ptr.res_el_ptr();
-
-        // our element becomes the new tail
-        tail_ptr = p;
-
-        // no next element for the tail
-        p->next = 0;
-
-        // old tail element point to this element
-        p->prev->next = p;
-    }
-    else {
-        //
-        //  Normal insertion (after prev)
-        //
-        p->prev = prev.res_el_ptr();
-        p->next = prev.next().res_el_ptr();
-
-        prev.res_el_ptr()->next = p;
-        p->next->prev = p;
-    }
-
-    return iterator(p);
-}
-
-template <class T>
-inline typename res_list<T>::iterator
-res_list<T>::insert_before(iterator next, T &d)
-{
-    iterator p;
-
-    p = insert_before(next);
-    if (p.notnull()) {
-
-        if (allocate_storage) {
-            //  if we allocate storage, then copy the contents of the
-            //  specified object to our object
-            *p = d;
-        }
-        else {
-            //  if we don't allocate storage, then we just want to
-            //  point to the specified object
-            p.point_to(d);
-        }
-    }
-
-    return p;
-}
-
-
-template <class T>
-inline typename res_list<T>::iterator
-res_list<T>::insert_before(iterator next)
-{
-
-#if DEBUG_MEMORY
-    if (active_elements > 2*base_elements) {
-        what_the();
-    }
-#endif
-
-    //  If we have no unused elements, make some more
-    if (unused_elements.isnull()) {
-
-        if (build_size == 0) {
-            return 0;   // No space left, and can't allocate more....
-        }
-
-        extra_elements += allocate_elements(build_size, allocate_storage);
-    }
-
-    //  grab the first unused element
-    res_element *p = unused_elements.res_el_ptr();
-
-    unused_elements = unused_elements.next();
-
-    ++active_elements;
-
-    //  Insert the new element
-    if (head_ptr.isnull()) {
-        //
-        //  Special case #1: Empty List
-        //
-        head_ptr = p;
-        tail_ptr = p;
-        p->prev = 0;
-        p->next = 0;
-    }
-    else if (next.isnull()) {
-        //
-        //  Special case #2 Insert at tail
-        //
-
-        // our prev pointer points to old tail element
-        p->prev = tail_ptr.res_el_ptr();
-
-        // our element becomes the new tail
-        tail_ptr = p;
-
-        // no next element for the tail
-        p->next = 0;
-
-        // old tail element point to this element
-        p->prev->next = p;
-    }
-    else if (next.prev().isnull()) {
-        //
-        //  Special case #3: Insert at head
-        //
-
-        // our next ptr points to old head element
-        p->next = head_ptr.res_el_ptr();
-
-        // our element becomes the new head element
-        head_ptr = p;
-
-        // no previous element for the head
-        p->prev = 0;
-
-        // old head element points back to this element
-        p->next->prev = p;
-    }
-    else {
-        //
-        //  Normal insertion (before next)
-        //
-        p->next = next.res_el_ptr();
-        p->prev = next.prev().res_el_ptr();
-
-        next.res_el_ptr()->prev = p;
-        p->prev->next = p;
-    }
-
-    return iterator(p);
-}
-
-
-template <class T>
-inline typename res_list<T>::iterator
-res_list<T>::remove(iterator q)
-{
-    res_element *p = q.res_el_ptr();
-    iterator n = 0;
-
-    //  Handle the special cases
-    if (active_elements == 1) {    // This is the only element
-        head_ptr = 0;
-        tail_ptr = 0;
-    }
-    else if (q == head_ptr) {      // This is the head element
-        head_ptr = q.next();
-        head_ptr.res_el_ptr()->prev = 0;
-
-        n = head_ptr;
-    }
-    else if (q == tail_ptr) {      // This is the tail element
-        tail_ptr = q.prev();
-        tail_ptr.res_el_ptr()->next = 0;
-    }
-    else {                         // This is between two elements
-        p->prev->next = p->next;
-        p->next->prev = p->prev;
-
-        // Get the "next" element for return
-        n = p->next;
-    }
-
-    --active_elements;
-
-    //  Put this element back onto the unused list
-    p->next = unused_elements.res_el_ptr();
-    p->prev = 0;
-    if (p->next) {           // NULL if unused list is empty
-        p->next->prev = p;
-    }
-
-    if (!allocate_storage) {
-        p->data = 0;
-    }
-
-    unused_elements = q;
-
-    //  A little "garbage collection"
-    if (++remove_count > 10) {
-        //          free_extras();
-        remove_count = 0;
-    }
-
-#if DEBUG_REMOVE
-    unsigned unused_count = 0;
-    for (iterator i=unused_elements;
-         i.notnull();
-         i = i.next()) {
-
-        ++unused_count;
-    }
-
-    assert((active_elements+unused_count) == (base_elements+extra_elements));
-#endif
-
-    return iterator(n);
-}
-
-
-template <class T>
-inline bool
-res_list<T>::in_list(iterator j)
-{
-    iterator i;
-
-    for (i=head(); i.notnull(); i=i.next()) {
-        if (j.res_el_ptr() == i.res_el_ptr()) {
-            return true;
-        }
-    }
-
-    return false;
-}
-
-template <class T>
-inline void
-res_list<T>::free_extras(void)
-{
-    unsigned num_unused = base_elements + extra_elements - active_elements;
-    unsigned to_free = extra_elements;
-    res_element *p;
-
-
-    if (extra_elements != 0) {
-        //
-        //  Free min(extra_elements, # unused elements)
-        //
-        if (extra_elements > num_unused) {
-            to_free = num_unused;
-        }
-
-        p = unused_elements.res_el_ptr();
-        for (int i=0; i<to_free; ++i) {
-            res_element *q = p->next;
-
-            delete p;
-
-            p = q;
-        }
-
-        //  update the unused element pointer to point to the first
-        //  element that wasn't deleted.
-        unused_elements = iterator(p);
-
-        //  Update the number of extra elements
-        extra_elements -= to_free;
-    }
-
-    return;
-}
-
-
-template <class T>
-inline void
-res_list<T>::clear(void)
-{
-    iterator i,n;
-
-    for (i=head_ptr; i.notnull(); i=n) {
-        n = i.next();
-        remove(i);
-    }
-
-    free_extras();
-}
-
-template <class T>
-inline void
-res_list<T>::dump(void)
-{
-    for (iterator i=head(); !i.isnull(); i=i.next())
-        i->dump();
-}
-
-template <class T>
-inline void
-res_list<T>::raw_dump(void)
-{
-    int j = 0;
-    res_element *p;
-    for (iterator i=head(); !i.isnull(); i=i.next()) {
-        cprintf("Element %d:\n", j);
-
-        if (i.notnull()) {
-            p = i.res_el_ptr();
-            cprintf("  points to res_element @ %#x\n", p);
-            p->dump();
-            cprintf("  Data Element:\n");
-            i->dump();
-        }
-        else {
-            cprintf("  NULL iterator!\n");
-        }
-
-        ++j;
-    }
-
-}
-
-#endif // __RES_LIST_HH__
diff --git a/src/base/sat_counter.cc b/src/base/sat_counter.cc
deleted file mode 100644 (file)
index 61815c1..0000000
+++ /dev/null
@@ -1,271 +0,0 @@
-/*
- * Copyright (c) 2003-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 Reinhardt
- *          Lisa Hsu
- */
-
-#include <sstream>
-
-#include "base/sat_counter.hh"
-#include "base/statistics.hh"
-#include "sim/stats.hh"
-
-
-using namespace std;
-
-
-SaturatingCounterPred::SaturatingCounterPred(string p_name,
-                                             string z_name,
-                                             string o_name,
-                                             unsigned _index_bits,
-                                             unsigned _counter_bits,
-                                             unsigned _zero_change,
-                                             unsigned _one_change,
-                                             unsigned _thresh,
-                                             unsigned _init_value)
-{
-    pred_name    = p_name;
-    zero_name    = z_name;
-    one_name     = o_name;
-
-    index_bits   = _index_bits;
-    counter_bits = _counter_bits;
-    zero_change  = _zero_change;
-    one_change   = _one_change;
-    thresh       = _thresh;
-    init_value   = _init_value;
-
-    max_index = (1 << index_bits) - 1;
-    max_value = (1 << counter_bits) - 1;
-
-    table = new unsigned[max_index + 1];
-
-    //  Initialize with the right parameters & clear the counter
-    for (unsigned long i = 0; i <= max_index; ++i)
-        table[i] = init_value;
-}
-
-void SaturatingCounterPred::regStats()
-{
-    using namespace Stats;
-    stringstream name, description;
-
-    //
-    //  Number of predictions
-    //
-    name << pred_name << ":" << zero_name << ":preds";
-    description << "number of predictions of " << zero_name;
-    predicted_zero
-        .name(name.str())
-        .desc(description.str())
-        ;
-    description.str("");
-    name.str("");
-
-    name << pred_name << ":" << one_name << ":preds";
-    description << "number of predictions of " << one_name;
-    predicted_one
-        .name(name.str())
-        .desc(description.str())
-        ;
-    description.str("");
-    name.str("");
-
-    //
-    //  Count the number of correct predictions
-    //
-    name << pred_name << ":" << zero_name << ":corr_preds";
-    description << "number of correct " << zero_name << " preds";
-    correct_pred_zero
-        .name(name.str())
-        .desc(description.str())
-        ;
-    description.str("");
-    name.str("");
-
-    name << pred_name << ":" << one_name << ":corr_preds";
-    description << "number of correct " << one_name << " preds";
-    correct_pred_one
-        .name(name.str())
-        .desc(description.str())
-        ;
-    description.str("");
-    name.str("");
-
-    //
-    //  Number of predictor updates
-    //
-    name << pred_name << ":" << zero_name << ":updates";
-    description << "number of actual " << zero_name << "s";
-    record_zero
-        .name(name.str())
-        .desc(description.str())
-        ;
-    description.str("");
-    name.str("");
-
-    name << pred_name << ":" << one_name << ":updates";
-    description << "number of actual " << one_name << "s";
-    record_one
-        .name(name.str())
-        .desc(description.str())
-        ;
-    description.str("");
-    name.str("");
-}
-
-void SaturatingCounterPred::regFormulas()
-{
-    using namespace Stats;
-    stringstream name, description;
-
-    //
-    //  Number of predictions
-    //
-    name << pred_name << ":predictions";
-    preds_total
-        .name(name.str())
-        .desc("total number of predictions made")
-        ;
-    preds_total = predicted_zero + predicted_one;
-    name.str("");
-
-    //
-    //  Fraction of all predictions that are one or zero
-    //
-    name << pred_name << ":" << zero_name << ":pred_frac";
-    description << "fraction of all preds that were " << zero_name;
-    pred_frac_zero
-        .name(name.str())
-        .desc(description.str())
-        ;
-    pred_frac_zero = 100 * predicted_zero / preds_total;
-    description.str("");
-    name.str("");
-
-    name << pred_name << ":" << one_name << ":pred_frac";
-    description << "fraction of all preds that were " << one_name;
-    pred_frac_one
-        .name(name.str())
-        .desc(description.str())
-        ;
-    pred_frac_one = 100 * predicted_one / preds_total;
-    description.str("");
-    name.str("");
-
-
-    //
-    //  Count the number of correct predictions
-    //
-    name << pred_name << ":correct_preds";
-    correct_total
-        .name(name.str())
-        .desc("total correct predictions made")
-        ;
-    correct_total = correct_pred_one + correct_pred_zero;
-    name.str("");
-
-    //
-    //  Number of predictor updates
-    //
-    name << pred_name << ":updates";
-    updates_total
-        .name(name.str())
-        .desc("total number of updates")
-        ;
-    updates_total = record_zero + record_one;
-    name.str("");
-
-    //
-    //  Prediction accuracy rates
-    //
-    name << pred_name << ":pred_rate";
-    pred_rate
-        .name(name.str())
-        .desc("correct fraction of all preds")
-        ;
-    pred_rate = correct_total / updates_total;
-    name.str("");
-
-    name << pred_name << ":" << zero_name << ":pred_rate";
-    description << "fraction of " << zero_name << " preds that were correct";
-    frac_correct_zero
-        .name(name.str())
-        .desc(description.str())
-        ;
-    frac_correct_zero = 100 * correct_pred_zero /
-        (correct_pred_zero + record_one - correct_pred_one);
-    description.str("");
-    name.str("");
-
-    name << pred_name << ":" << one_name << ":pred_rate";
-    description << "fraction of " << one_name << " preds that were correct";
-    frac_correct_one
-        .name(name.str())
-        .desc(description.str())
-        ;
-    frac_correct_one = 100 * correct_pred_one /
-        (correct_pred_one + record_zero - correct_pred_zero);
-    description.str("");
-    name.str("");
-
-    //
-    //  Coverage
-    //
-    name << pred_name << ":" << zero_name << ":coverage";
-    description << "fraction of " << zero_name
-                << "s that were predicted correctly";
-    coverage_zero
-        .name(name.str())
-        .desc(description.str())
-        ;
-    coverage_zero = 100 * correct_pred_zero / record_zero;
-    description.str("");
-    name.str("");
-
-    name << pred_name << ":" << one_name << ":coverage";
-    description << "fraction of " << one_name
-                << "s that were predicted correctly";
-    coverage_one
-        .name(name.str())
-        .desc(description.str())
-        ;
-    coverage_one = 100 * correct_pred_one / record_one;
-    description.str("");
-    name.str("");
-}
-
-
-
-
-
-
-
-
-
-
diff --git a/src/base/sat_counter.hh b/src/base/sat_counter.hh
deleted file mode 100644 (file)
index 963a39f..0000000
+++ /dev/null
@@ -1,195 +0,0 @@
-/*
- * Copyright (c) 2001-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
- *          Steve Reinhardt
- */
-
-#ifndef __SAT_COUNTER_HH__
-#define __SAT_COUNTER_HH__
-
-#include <string>
-
-#include "base/predictor.hh"
-
-#include "base/statistics.hh"
-#include "sim/stats.hh"
-
-//
-//
-//  A simple saturating counter predictor
-//
-//
-class SaturatingCounterPred : public GenericPredictor
-{
-  private:
-    std::string   pred_name;
-    std::string   zero_name;
-    std::string   one_name;
-
-    unsigned index_bits;
-    unsigned counter_bits;
-    unsigned zero_change;
-    unsigned one_change;
-    unsigned thresh;
-    unsigned init_value;
-
-    unsigned max_value;       // maximum counter value
-
-    unsigned long max_index;  // also the index mask value
-    unsigned *table;
-
-    //  Statistics
-    Stats::Scalar predicted_one;      // Total predictions of one, preds_one
-    Stats::Scalar predicted_zero;     // Total predictions of zero, preds_zero
-    Stats::Scalar correct_pred_one;   // Total correct predictions of one, correct_one
-    Stats::Scalar correct_pred_zero;  // Total correct predictions of zero, correct_zero
-
-    Stats::Scalar record_zero;        //updates_zero
-    Stats::Scalar record_one;         //updates_one
-
-    Stats::Formula preds_total;
-    Stats::Formula pred_frac_zero;
-    Stats::Formula pred_frac_one;
-    Stats::Formula correct_total;
-    Stats::Formula updates_total;
-    Stats::Formula pred_rate;
-    Stats::Formula frac_correct_zero;
-    Stats::Formula frac_correct_one;
-    Stats::Formula coverage_zero;
-    Stats::Formula coverage_one;
-
-  private:
-    bool pred_one(unsigned &counter)  { return counter >  thresh; }
-    bool pred_zero(unsigned &counter) { return counter <= thresh; }
-
-    void update_one(unsigned &counter) {
-
-        if (one_change)
-            counter += one_change;
-        else
-            counter = 0;
-
-        // check for wrap
-        if (counter > max_value)
-            counter = max_value;
-    }
-
-    void update_zero(unsigned &counter) {
-        if (zero_change) {
-            // check for wrap
-            if (counter < zero_change)
-                counter = 0;
-            else
-                counter -= zero_change;
-        } else
-            counter = 0;
-    }
-
-
-  public:
-
-    SaturatingCounterPred(std::string p_name,
-                          std::string z_name, std::string o_name,
-                          unsigned _index_bits, unsigned _counter_bits = 2,
-                          unsigned _zero_change = 1, unsigned _one_change = 1,
-                          unsigned _thresh = 1, unsigned _init_value = 0);
-
-    void
-    clear()
-    {
-        for (unsigned long i = 0; i <= max_index; ++i)
-            table[i] = init_value;
-    }
-
-    //  Record the ACTUAL result... and indicate whether the prediction
-    //  corresponding to this event was correct
-    void record(unsigned long _index, unsigned _val, unsigned _predicted,
-                unsigned _pdata)
-    {
-        record(_index, _val, _predicted);
-    }
-
-    void record(unsigned long _index, unsigned _val, unsigned _predicted) {
-        unsigned long index = _index & max_index;
-
-        if (_val) {
-            update_one(table[index]);
-            ++record_one;
-
-            if (_predicted)
-                ++correct_pred_one;
-        } else {
-            update_zero(table[index]);
-            ++record_zero;
-
-            if (!_predicted)
-                ++correct_pred_zero;
-        }
-    }
-
-    unsigned value(unsigned long _index) {
-        unsigned long index = _index & max_index;
-
-        return table[index];
-    }
-
-
-    unsigned predict(unsigned long _index, unsigned &pdata) {
-        return predict(_index);
-    }
-
-    unsigned predict(unsigned long _index) {
-        unsigned long index = _index & max_index;
-
-        if (pred_one(table[index])) {
-            ++predicted_one;
-            return 1;
-        }
-
-        ++predicted_zero;
-        return 0;
-    }
-
-    //  No internal state is changed here
-    unsigned peek(unsigned long _index) {
-        unsigned long index = _index & max_index;
-
-        if (pred_one(table[index]))
-            return 1;
-
-        return 0;
-    }
-
-
-    //=======================================================
-    void regStats();
-    void regFormulas();
-};
-
-
-#endif // __SAT_COUNTER_HH__