Merge ktlim@zizzer:/bk/newmem
authorKevin Lim <ktlim@umich.edu>
Wed, 5 Jul 2006 20:08:18 +0000 (16:08 -0400)
committerKevin Lim <ktlim@umich.edu>
Wed, 5 Jul 2006 20:08:18 +0000 (16:08 -0400)
into  zamp.eecs.umich.edu:/z/ktlim2/clean/newmem-merge

src/base/traceflags.py:
src/cpu/SConscript:
    Hand merge.
src/cpu/o3/alpha/params.hh:
    Hand merge.  This needs to get changed.

--HG--
rename : src/cpu/o3/alpha_cpu_builder.cc => src/cpu/o3/alpha/cpu_builder.cc
rename : src/cpu/o3/alpha_params.hh => src/cpu/o3/alpha/params.hh
rename : src/python/m5/objects/AlphaO3CPU.py => src/python/m5/objects/O3CPU.py
extra : convert_revision : 581f338f5bce35288f7d15d95cbd0ac3a9135e6a

1  2 
src/base/traceflags.py
src/cpu/SConscript
src/cpu/o3/alpha/cpu_builder.cc
src/cpu/o3/alpha/params.hh
src/cpu/o3/inst_queue_impl.hh
src/cpu/simple/timing.cc
src/python/m5/objects/O3CPU.py

index 327ce60757a106e3a5183e04056a3d83acdca93f,27c24107c963c5bee9471a313a15104b96486ca3..9ceba3017ba1807f5430442ad1a95a338fdabe85
@@@ -48,8 -48,10 +48,11 @@@ ccfilename = sys.argv[1] + '.cc
  # To define a new flag, simply add it to this list.
  #
  baseFlags = [
+     'Activity',
      'AlphaConsole',
      'BADADDR',
++    'BaseCPU',
+     'BE',
      'BPredRAS',
      'Bus',
      'BusAddrRanges',
index 3dcc2f1ec13b607dead3d65213ec34ecc1980492,8b584ba57b3a5065d2ad8f619630a902d922b425..1d0a015b0fda5784cbe2136e527113a834a2b935
@@@ -130,13 -130,15 +130,13 @@@ if need_simple_base
  if 'FastCPU' in env['CPU_MODELS']:
      sources += Split('fast/cpu.cc')
  
 -if 'AlphaO3CPU' in env['CPU_MODELS']:
+ need_bp_unit = False
 +if 'O3CPU' in env['CPU_MODELS']:
+     need_bp_unit = True
 +    sources += SConscript('o3/SConscript', exports = 'env')
      sources += Split('''
-         o3/2bit_local_pred.cc
 -        o3/alpha_dyn_inst.cc
 -        o3/alpha_cpu.cc
 -        o3/alpha_cpu_builder.cc
          o3/base_dyn_inst.cc
          o3/bpred_unit.cc
-         o3/btb.cc
          o3/commit.cc
          o3/decode.cc
          o3/fetch.cc
index 490305cbf2b8038a039f09c7d3b1b2dadb1aeec9,0000000000000000000000000000000000000000..d61eee4b125605a32610a9efa67b1f26d9bde320
mode 100644,000000..100644
--- /dev/null
@@@ -1,404 -1,0 +1,413 @@@
 +/*
 + * Copyright (c) 2004-2006 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: Kevin Lim
 + */
 +
 +#include <string>
 +
 +#include "cpu/base.hh"
 +#include "cpu/o3/alpha/cpu.hh"
 +#include "cpu/o3/alpha/impl.hh"
 +#include "cpu/o3/alpha/params.hh"
 +#include "cpu/o3/fu_pool.hh"
 +#include "sim/builder.hh"
 +
 +class DerivO3CPU : public AlphaO3CPU<AlphaSimpleImpl>
 +{
 +  public:
 +    DerivO3CPU(AlphaSimpleParams *p)
 +        : AlphaO3CPU<AlphaSimpleImpl>(p)
 +    { }
 +};
 +
 +BEGIN_DECLARE_SIM_OBJECT_PARAMS(DerivO3CPU)
 +
 +    Param<int> clock;
 +    Param<int> numThreads;
 +Param<int> activity;
 +
 +#if FULL_SYSTEM
 +SimObjectParam<System *> system;
 +Param<int> cpu_id;
 +SimObjectParam<AlphaITB *> itb;
 +SimObjectParam<AlphaDTB *> dtb;
 +#else
 +SimObjectVectorParam<Process *> workload;
 +#endif // FULL_SYSTEM
 +
 +SimObjectParam<MemObject *> mem;
 +
 +SimObjectParam<BaseCPU *> checker;
 +
 +Param<Counter> max_insts_any_thread;
 +Param<Counter> max_insts_all_threads;
 +Param<Counter> max_loads_any_thread;
 +Param<Counter> max_loads_all_threads;
 +
 +Param<unsigned> cachePorts;
 +
 +Param<unsigned> decodeToFetchDelay;
 +Param<unsigned> renameToFetchDelay;
 +Param<unsigned> iewToFetchDelay;
 +Param<unsigned> commitToFetchDelay;
 +Param<unsigned> fetchWidth;
 +
 +Param<unsigned> renameToDecodeDelay;
 +Param<unsigned> iewToDecodeDelay;
 +Param<unsigned> commitToDecodeDelay;
 +Param<unsigned> fetchToDecodeDelay;
 +Param<unsigned> decodeWidth;
 +
 +Param<unsigned> iewToRenameDelay;
 +Param<unsigned> commitToRenameDelay;
 +Param<unsigned> decodeToRenameDelay;
 +Param<unsigned> renameWidth;
 +
 +Param<unsigned> commitToIEWDelay;
 +Param<unsigned> renameToIEWDelay;
 +Param<unsigned> issueToExecuteDelay;
++Param<unsigned> dispatchWidth;
 +Param<unsigned> issueWidth;
++Param<unsigned> wbWidth;
++Param<unsigned> wbDepth;
 +SimObjectParam<FUPool *> fuPool;
 +
 +Param<unsigned> iewToCommitDelay;
 +Param<unsigned> renameToROBDelay;
 +Param<unsigned> commitWidth;
 +Param<unsigned> squashWidth;
 +Param<Tick> trapLatency;
 +Param<Tick> fetchTrapLatency;
 +
 +Param<std::string> predType;
 +Param<unsigned> localPredictorSize;
 +Param<unsigned> localCtrBits;
 +Param<unsigned> localHistoryTableSize;
 +Param<unsigned> localHistoryBits;
 +Param<unsigned> globalPredictorSize;
 +Param<unsigned> globalCtrBits;
 +Param<unsigned> globalHistoryBits;
 +Param<unsigned> choicePredictorSize;
 +Param<unsigned> choiceCtrBits;
 +
 +Param<unsigned> BTBEntries;
 +Param<unsigned> BTBTagSize;
 +
 +Param<unsigned> RASSize;
 +
 +Param<unsigned> LQEntries;
 +Param<unsigned> SQEntries;
 +Param<unsigned> LFSTSize;
 +Param<unsigned> SSITSize;
 +
 +Param<unsigned> numPhysIntRegs;
 +Param<unsigned> numPhysFloatRegs;
 +Param<unsigned> numIQEntries;
 +Param<unsigned> numROBEntries;
 +
 +Param<unsigned> smtNumFetchingThreads;
 +Param<std::string>   smtFetchPolicy;
 +Param<std::string>   smtLSQPolicy;
 +Param<unsigned> smtLSQThreshold;
 +Param<std::string>   smtIQPolicy;
 +Param<unsigned> smtIQThreshold;
 +Param<std::string>   smtROBPolicy;
 +Param<unsigned> smtROBThreshold;
 +Param<std::string>   smtCommitPolicy;
 +
 +Param<unsigned> instShiftAmt;
 +
 +Param<bool> defer_registration;
 +
 +Param<bool> function_trace;
 +Param<Tick> function_trace_start;
 +
 +END_DECLARE_SIM_OBJECT_PARAMS(DerivO3CPU)
 +
 +BEGIN_INIT_SIM_OBJECT_PARAMS(DerivO3CPU)
 +
 +    INIT_PARAM(clock, "clock speed"),
 +    INIT_PARAM(numThreads, "number of HW thread contexts"),
 +    INIT_PARAM_DFLT(activity, "Initial activity count", 0),
 +
 +#if FULL_SYSTEM
 +    INIT_PARAM(system, "System object"),
 +    INIT_PARAM(cpu_id, "processor ID"),
 +    INIT_PARAM(itb, "Instruction translation buffer"),
 +    INIT_PARAM(dtb, "Data translation buffer"),
 +#else
 +    INIT_PARAM(workload, "Processes to run"),
 +#endif // FULL_SYSTEM
 +
 +    INIT_PARAM(mem, "Memory"),
 +
 +    INIT_PARAM_DFLT(checker, "Checker CPU", NULL),
 +
 +    INIT_PARAM_DFLT(max_insts_any_thread,
 +                    "Terminate when any thread reaches this inst count",
 +                    0),
 +    INIT_PARAM_DFLT(max_insts_all_threads,
 +                    "Terminate when all threads have reached"
 +                    "this inst count",
 +                    0),
 +    INIT_PARAM_DFLT(max_loads_any_thread,
 +                    "Terminate when any thread reaches this load count",
 +                    0),
 +    INIT_PARAM_DFLT(max_loads_all_threads,
 +                    "Terminate when all threads have reached this load"
 +                    "count",
 +                    0),
 +
 +    INIT_PARAM_DFLT(cachePorts, "Cache Ports", 200),
 +
 +    INIT_PARAM(decodeToFetchDelay, "Decode to fetch delay"),
 +    INIT_PARAM(renameToFetchDelay, "Rename to fetch delay"),
 +    INIT_PARAM(iewToFetchDelay, "Issue/Execute/Writeback to fetch"
 +               "delay"),
 +    INIT_PARAM(commitToFetchDelay, "Commit to fetch delay"),
 +    INIT_PARAM(fetchWidth, "Fetch width"),
 +    INIT_PARAM(renameToDecodeDelay, "Rename to decode delay"),
 +    INIT_PARAM(iewToDecodeDelay, "Issue/Execute/Writeback to decode"
 +               "delay"),
 +    INIT_PARAM(commitToDecodeDelay, "Commit to decode delay"),
 +    INIT_PARAM(fetchToDecodeDelay, "Fetch to decode delay"),
 +    INIT_PARAM(decodeWidth, "Decode width"),
 +
 +    INIT_PARAM(iewToRenameDelay, "Issue/Execute/Writeback to rename"
 +               "delay"),
 +    INIT_PARAM(commitToRenameDelay, "Commit to rename delay"),
 +    INIT_PARAM(decodeToRenameDelay, "Decode to rename delay"),
 +    INIT_PARAM(renameWidth, "Rename width"),
 +
 +    INIT_PARAM(commitToIEWDelay, "Commit to "
 +               "Issue/Execute/Writeback delay"),
 +    INIT_PARAM(renameToIEWDelay, "Rename to "
 +               "Issue/Execute/Writeback delay"),
 +    INIT_PARAM(issueToExecuteDelay, "Issue to execute delay (internal"
 +               "to the IEW stage)"),
++    INIT_PARAM(dispatchWidth, "Dispatch width"),
 +    INIT_PARAM(issueWidth, "Issue width"),
++    INIT_PARAM(wbWidth, "Writeback width"),
++    INIT_PARAM(wbDepth, "Writeback depth (number of cycles it can buffer)"),
 +    INIT_PARAM_DFLT(fuPool, "Functional unit pool", NULL),
 +
 +    INIT_PARAM(iewToCommitDelay, "Issue/Execute/Writeback to commit "
 +               "delay"),
 +    INIT_PARAM(renameToROBDelay, "Rename to reorder buffer delay"),
 +    INIT_PARAM(commitWidth, "Commit width"),
 +    INIT_PARAM(squashWidth, "Squash width"),
 +    INIT_PARAM_DFLT(trapLatency, "Number of cycles before the trap is handled", 6),
 +    INIT_PARAM_DFLT(fetchTrapLatency, "Number of cycles before the fetch trap is handled", 12),
 +
 +    INIT_PARAM(predType, "Type of branch predictor ('local', 'tournament')"),
 +    INIT_PARAM(localPredictorSize, "Size of local predictor"),
 +    INIT_PARAM(localCtrBits, "Bits per counter"),
 +    INIT_PARAM(localHistoryTableSize, "Size of local history table"),
 +    INIT_PARAM(localHistoryBits, "Bits for the local history"),
 +    INIT_PARAM(globalPredictorSize, "Size of global predictor"),
 +    INIT_PARAM(globalCtrBits, "Bits per counter"),
 +    INIT_PARAM(globalHistoryBits, "Bits of history"),
 +    INIT_PARAM(choicePredictorSize, "Size of choice predictor"),
 +    INIT_PARAM(choiceCtrBits, "Bits of choice counters"),
 +
 +    INIT_PARAM(BTBEntries, "Number of BTB entries"),
 +    INIT_PARAM(BTBTagSize, "Size of the BTB tags, in bits"),
 +
 +    INIT_PARAM(RASSize, "RAS size"),
 +
 +    INIT_PARAM(LQEntries, "Number of load queue entries"),
 +    INIT_PARAM(SQEntries, "Number of store queue entries"),
 +    INIT_PARAM(LFSTSize, "Last fetched store table size"),
 +    INIT_PARAM(SSITSize, "Store set ID table size"),
 +
 +    INIT_PARAM(numPhysIntRegs, "Number of physical integer registers"),
 +    INIT_PARAM(numPhysFloatRegs, "Number of physical floating point "
 +               "registers"),
 +    INIT_PARAM(numIQEntries, "Number of instruction queue entries"),
 +    INIT_PARAM(numROBEntries, "Number of reorder buffer entries"),
 +
 +    INIT_PARAM_DFLT(smtNumFetchingThreads, "SMT Number of Fetching Threads", 1),
 +    INIT_PARAM_DFLT(smtFetchPolicy, "SMT Fetch Policy", "SingleThread"),
 +    INIT_PARAM_DFLT(smtLSQPolicy,   "SMT LSQ Sharing Policy",    "Partitioned"),
 +    INIT_PARAM_DFLT(smtLSQThreshold,"SMT LSQ Threshold", 100),
 +    INIT_PARAM_DFLT(smtIQPolicy,    "SMT IQ Policy",    "Partitioned"),
 +    INIT_PARAM_DFLT(smtIQThreshold, "SMT IQ Threshold", 100),
 +    INIT_PARAM_DFLT(smtROBPolicy,   "SMT ROB Sharing Policy", "Partitioned"),
 +    INIT_PARAM_DFLT(smtROBThreshold,"SMT ROB Threshold", 100),
 +    INIT_PARAM_DFLT(smtCommitPolicy,"SMT Commit Fetch Policy", "RoundRobin"),
 +
 +    INIT_PARAM(instShiftAmt, "Number of bits to shift instructions by"),
 +    INIT_PARAM(defer_registration, "defer system registration (for sampling)"),
 +
 +    INIT_PARAM(function_trace, "Enable function trace"),
 +    INIT_PARAM(function_trace_start, "Cycle to start function trace")
 +
 +END_INIT_SIM_OBJECT_PARAMS(DerivO3CPU)
 +
 +CREATE_SIM_OBJECT(DerivO3CPU)
 +{
 +    DerivO3CPU *cpu;
 +
 +#if FULL_SYSTEM
 +    // Full-system only supports a single thread for the moment.
 +    int actual_num_threads = 1;
 +#else
 +    // In non-full-system mode, we infer the number of threads from
 +    // the workload if it's not explicitly specified.
 +    int actual_num_threads =
 +        (numThreads.isValid() && numThreads >= workload.size()) ?
 +         numThreads : workload.size();
 +
 +    if (workload.size() == 0) {
 +        fatal("Must specify at least one workload!");
 +    }
 +#endif
 +
 +    AlphaSimpleParams *params = new AlphaSimpleParams;
 +
 +    params->clock = clock;
 +
 +    params->name = getInstanceName();
 +    params->numberOfThreads = actual_num_threads;
 +    params->activity = activity;
 +
 +#if FULL_SYSTEM
 +    params->system = system;
 +    params->cpu_id = cpu_id;
 +    params->itb = itb;
 +    params->dtb = dtb;
 +#else
 +    params->workload = workload;
 +#endif // FULL_SYSTEM
 +
 +    params->mem = mem;
 +
 +    params->checker = checker;
 +
 +    params->max_insts_any_thread = max_insts_any_thread;
 +    params->max_insts_all_threads = max_insts_all_threads;
 +    params->max_loads_any_thread = max_loads_any_thread;
 +    params->max_loads_all_threads = max_loads_all_threads;
 +
 +    //
 +    // Caches
 +    //
 +    params->cachePorts = cachePorts;
 +
 +    params->decodeToFetchDelay = decodeToFetchDelay;
 +    params->renameToFetchDelay = renameToFetchDelay;
 +    params->iewToFetchDelay = iewToFetchDelay;
 +    params->commitToFetchDelay = commitToFetchDelay;
 +    params->fetchWidth = fetchWidth;
 +
 +    params->renameToDecodeDelay = renameToDecodeDelay;
 +    params->iewToDecodeDelay = iewToDecodeDelay;
 +    params->commitToDecodeDelay = commitToDecodeDelay;
 +    params->fetchToDecodeDelay = fetchToDecodeDelay;
 +    params->decodeWidth = decodeWidth;
 +
 +    params->iewToRenameDelay = iewToRenameDelay;
 +    params->commitToRenameDelay = commitToRenameDelay;
 +    params->decodeToRenameDelay = decodeToRenameDelay;
 +    params->renameWidth = renameWidth;
 +
 +    params->commitToIEWDelay = commitToIEWDelay;
 +    params->renameToIEWDelay = renameToIEWDelay;
 +    params->issueToExecuteDelay = issueToExecuteDelay;
++    params->dispatchWidth = dispatchWidth;
 +    params->issueWidth = issueWidth;
++    params->wbWidth = wbWidth;
++    params->wbDepth = wbDepth;
 +    params->fuPool = fuPool;
 +
 +    params->iewToCommitDelay = iewToCommitDelay;
 +    params->renameToROBDelay = renameToROBDelay;
 +    params->commitWidth = commitWidth;
 +    params->squashWidth = squashWidth;
 +    params->trapLatency = trapLatency;
 +    params->fetchTrapLatency = fetchTrapLatency;
 +
 +    params->predType = predType;
 +    params->localPredictorSize = localPredictorSize;
 +    params->localCtrBits = localCtrBits;
 +    params->localHistoryTableSize = localHistoryTableSize;
 +    params->localHistoryBits = localHistoryBits;
 +    params->globalPredictorSize = globalPredictorSize;
 +    params->globalCtrBits = globalCtrBits;
 +    params->globalHistoryBits = globalHistoryBits;
 +    params->choicePredictorSize = choicePredictorSize;
 +    params->choiceCtrBits = choiceCtrBits;
 +
 +    params->BTBEntries = BTBEntries;
 +    params->BTBTagSize = BTBTagSize;
 +
 +    params->RASSize = RASSize;
 +
 +    params->LQEntries = LQEntries;
 +    params->SQEntries = SQEntries;
 +
 +    params->SSITSize = SSITSize;
 +    params->LFSTSize = LFSTSize;
 +
 +    params->numPhysIntRegs = numPhysIntRegs;
 +    params->numPhysFloatRegs = numPhysFloatRegs;
 +    params->numIQEntries = numIQEntries;
 +    params->numROBEntries = numROBEntries;
 +
 +    params->smtNumFetchingThreads = smtNumFetchingThreads;
 +
 +    // Default smtFetchPolicy to "RoundRobin", if necessary.
 +    std::string round_robin_policy = "RoundRobin";
 +    std::string single_thread = "SingleThread";
 +
 +    if (actual_num_threads > 1 && single_thread.compare(smtFetchPolicy) == 0)
 +        params->smtFetchPolicy = round_robin_policy;
 +    else
 +        params->smtFetchPolicy = smtFetchPolicy;
 +
 +    params->smtIQPolicy    = smtIQPolicy;
 +    params->smtLSQPolicy    = smtLSQPolicy;
 +    params->smtLSQThreshold = smtLSQThreshold;
 +    params->smtROBPolicy   = smtROBPolicy;
 +    params->smtROBThreshold = smtROBThreshold;
 +    params->smtCommitPolicy = smtCommitPolicy;
 +
 +    params->instShiftAmt = 2;
 +
 +    params->deferRegistration = defer_registration;
 +
 +    params->functionTrace = function_trace;
 +    params->functionTraceStart = function_trace_start;
 +
 +    cpu = new DerivO3CPU(params);
 +
 +    return cpu;
 +}
 +
 +REGISTER_SIM_OBJECT("DerivO3CPU", DerivO3CPU)
 +
index b1f2a487d298056222fb1a93e48f890ac0529240,0000000000000000000000000000000000000000..8f7364dd0bac71f6107823be10149ee214d0271e
mode 100644,000000..100644
--- /dev/null
@@@ -1,69 -1,0 +1,72 @@@
 +/*
 + * Copyright (c) 2004-2006 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: Kevin Lim
 + */
 +
 +#ifndef __CPU_O3_ALPHA_PARAMS_HH__
 +#define __CPU_O3_ALPHA_PARAMS_HH__
 +
 +#include "cpu/o3/cpu.hh"
 +#include "cpu/o3/params.hh"
 +
 +//Forward declarations
 +class AlphaDTB;
 +class AlphaITB;
 +class MemObject;
 +class Process;
 +class System;
 +
 +/**
 + * This file defines the parameters that will be used for the AlphaO3CPU.
 + * This must be defined externally so that the Impl can have a params class
 + * defined that it can pass to all of the individual stages.
 + */
 +
 +class AlphaSimpleParams : public O3Params
 +{
 +  public:
 +
 +#if FULL_SYSTEM
 +    AlphaITB *itb;
 +    AlphaDTB *dtb;
 +#else
 +    std::vector<Process *> workload;
 +    Process *process;
 +#endif // FULL_SYSTEM
 +
 +    MemObject *mem;
 +
 +    BaseCPU *checker;
 +
 +    unsigned decodeToFetchDelay;
++    unsigned dispatchWidth;
++    unsigned wbWidth;
++    unsigned wbDepth;
 +};
 +
 +#endif // __CPU_O3_ALPHA_PARAMS_HH__
Simple merge
Simple merge
index 4ecfa8fbd61a1814d7a5cc7206c424f7e034c945,0000000000000000000000000000000000000000..9ccbdcf53b2cc6b0c12b976d34c09348377e8bff
mode 100644,000000..100644
--- /dev/null
@@@ -1,98 -1,0 +1,96 @@@
-     executeWidth = Param.Unsigned("Execute width")
-     executeIntWidth = Param.Unsigned("Integer execute width")
-     executeFloatWidth = Param.Unsigned("Floating point execute width")
-     executeBranchWidth = Param.Unsigned("Branch execute width")
-     executeMemoryWidth = Param.Unsigned("Memory execute width")
 +from m5 import build_env
 +from m5.config import *
 +from BaseCPU import BaseCPU
 +
 +class DerivO3CPU(BaseCPU):
 +    type = 'DerivO3CPU'
 +    activity = Param.Unsigned("Initial count")
 +    numThreads = Param.Unsigned("number of HW thread contexts")
 +
 +    checker = Param.BaseCPU(NULL, "checker")
 +
 +    cachePorts = Param.Unsigned("Cache Ports")
 +
 +    decodeToFetchDelay = Param.Unsigned("Decode to fetch delay")
 +    renameToFetchDelay = Param.Unsigned("Rename to fetch delay")
 +    iewToFetchDelay = Param.Unsigned("Issue/Execute/Writeback to fetch "
 +               "delay")
 +    commitToFetchDelay = Param.Unsigned("Commit to fetch delay")
 +    fetchWidth = Param.Unsigned("Fetch width")
 +
 +    renameToDecodeDelay = Param.Unsigned("Rename to decode delay")
 +    iewToDecodeDelay = Param.Unsigned("Issue/Execute/Writeback to decode "
 +               "delay")
 +    commitToDecodeDelay = Param.Unsigned("Commit to decode delay")
 +    fetchToDecodeDelay = Param.Unsigned("Fetch to decode delay")
 +    decodeWidth = Param.Unsigned("Decode width")
 +
 +    iewToRenameDelay = Param.Unsigned("Issue/Execute/Writeback to rename "
 +               "delay")
 +    commitToRenameDelay = Param.Unsigned("Commit to rename delay")
 +    decodeToRenameDelay = Param.Unsigned("Decode to rename delay")
 +    renameWidth = Param.Unsigned("Rename width")
 +
 +    commitToIEWDelay = Param.Unsigned("Commit to "
 +               "Issue/Execute/Writeback delay")
 +    renameToIEWDelay = Param.Unsigned("Rename to "
 +               "Issue/Execute/Writeback delay")
 +    issueToExecuteDelay = Param.Unsigned("Issue to execute delay (internal "
 +              "to the IEW stage)")
++    dispatchWidth = Param.Unsigned("Dispatch width")
 +    issueWidth = Param.Unsigned("Issue width")
++    wbWidth = Param.Unsigned("Writeback width")
++    wbDepth = Param.Unsigned("Writeback depth")
 +    fuPool = Param.FUPool(NULL, "Functional Unit pool")
 +
 +    iewToCommitDelay = Param.Unsigned("Issue/Execute/Writeback to commit "
 +               "delay")
 +    renameToROBDelay = Param.Unsigned("Rename to reorder buffer delay")
 +    commitWidth = Param.Unsigned("Commit width")
 +    squashWidth = Param.Unsigned("Squash width")
 +    trapLatency = Param.Tick("Trap latency")
 +    fetchTrapLatency = Param.Tick("Fetch trap latency")
 +
 +    predType = Param.String("Branch predictor type ('local', 'tournament')")
 +    localPredictorSize = Param.Unsigned("Size of local predictor")
 +    localCtrBits = Param.Unsigned("Bits per counter")
 +    localHistoryTableSize = Param.Unsigned("Size of local history table")
 +    localHistoryBits = Param.Unsigned("Bits for the local history")
 +    globalPredictorSize = Param.Unsigned("Size of global predictor")
 +    globalCtrBits = Param.Unsigned("Bits per counter")
 +    globalHistoryBits = Param.Unsigned("Bits of history")
 +    choicePredictorSize = Param.Unsigned("Size of choice predictor")
 +    choiceCtrBits = Param.Unsigned("Bits of choice counters")
 +
 +    BTBEntries = Param.Unsigned("Number of BTB entries")
 +    BTBTagSize = Param.Unsigned("Size of the BTB tags, in bits")
 +
 +    RASSize = Param.Unsigned("RAS size")
 +
 +    LQEntries = Param.Unsigned("Number of load queue entries")
 +    SQEntries = Param.Unsigned("Number of store queue entries")
 +    LFSTSize = Param.Unsigned("Last fetched store table size")
 +    SSITSize = Param.Unsigned("Store set ID table size")
 +
 +    numRobs = Param.Unsigned("Number of Reorder Buffers");
 +
 +    numPhysIntRegs = Param.Unsigned("Number of physical integer registers")
 +    numPhysFloatRegs = Param.Unsigned("Number of physical floating point "
 +               "registers")
 +    numIQEntries = Param.Unsigned("Number of instruction queue entries")
 +    numROBEntries = Param.Unsigned("Number of reorder buffer entries")
 +
 +    instShiftAmt = Param.Unsigned("Number of bits to shift instructions by")
 +
 +    function_trace = Param.Bool(False, "Enable function trace")
 +    function_trace_start = Param.Tick(0, "Cycle to start function trace")
 +
 +    smtNumFetchingThreads = Param.Unsigned("SMT Number of Fetching Threads")
 +    smtFetchPolicy = Param.String("SMT Fetch policy")
 +    smtLSQPolicy    = Param.String("SMT LSQ Sharing Policy")
 +    smtLSQThreshold = Param.String("SMT LSQ Threshold Sharing Parameter")
 +    smtIQPolicy    = Param.String("SMT IQ Sharing Policy")
 +    smtIQThreshold = Param.String("SMT IQ Threshold Sharing Parameter")
 +    smtROBPolicy   = Param.String("SMT ROB Sharing Policy")
 +    smtROBThreshold = Param.String("SMT ROB Threshold Sharing Parameter")
 +    smtCommitPolicy = Param.String("SMT Commit Policy")