func_unit.cc revision 5034
18541Sgblack@eecs.umich.edu/*
28541Sgblack@eecs.umich.edu * Copyright (c) 2002-2006 The Regents of The University of Michigan
38541Sgblack@eecs.umich.edu * All rights reserved.
48541Sgblack@eecs.umich.edu *
58541Sgblack@eecs.umich.edu * Redistribution and use in source and binary forms, with or without
68541Sgblack@eecs.umich.edu * modification, are permitted provided that the following conditions are
78541Sgblack@eecs.umich.edu * met: redistributions of source code must retain the above copyright
88541Sgblack@eecs.umich.edu * notice, this list of conditions and the following disclaimer;
98541Sgblack@eecs.umich.edu * redistributions in binary form must reproduce the above copyright
108541Sgblack@eecs.umich.edu * notice, this list of conditions and the following disclaimer in the
118541Sgblack@eecs.umich.edu * documentation and/or other materials provided with the distribution;
128541Sgblack@eecs.umich.edu * neither the name of the copyright holders nor the names of its
138541Sgblack@eecs.umich.edu * contributors may be used to endorse or promote products derived from
148541Sgblack@eecs.umich.edu * this software without specific prior written permission.
158541Sgblack@eecs.umich.edu *
168541Sgblack@eecs.umich.edu * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
178541Sgblack@eecs.umich.edu * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
188541Sgblack@eecs.umich.edu * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
198541Sgblack@eecs.umich.edu * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
208541Sgblack@eecs.umich.edu * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
218541Sgblack@eecs.umich.edu * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
228541Sgblack@eecs.umich.edu * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
238541Sgblack@eecs.umich.edu * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
248541Sgblack@eecs.umich.edu * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
258541Sgblack@eecs.umich.edu * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
268541Sgblack@eecs.umich.edu * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
278541Sgblack@eecs.umich.edu *
288541Sgblack@eecs.umich.edu * Authors: Steve Raasch
298541Sgblack@eecs.umich.edu */
308541Sgblack@eecs.umich.edu
318541Sgblack@eecs.umich.edu#include <sstream>
328541Sgblack@eecs.umich.edu
338541Sgblack@eecs.umich.edu#include "base/misc.hh"
348541Sgblack@eecs.umich.edu#include "cpu/func_unit.hh"
358541Sgblack@eecs.umich.edu
368541Sgblack@eecs.umich.eduusing namespace std;
378541Sgblack@eecs.umich.edu
388541Sgblack@eecs.umich.edu
398541Sgblack@eecs.umich.edu////////////////////////////////////////////////////////////////////////////
409022Sgblack@eecs.umich.edu//
419022Sgblack@eecs.umich.edu//  The funciton unit
429022Sgblack@eecs.umich.edu//
439022Sgblack@eecs.umich.eduFuncUnit::FuncUnit()
448541Sgblack@eecs.umich.edu{
458541Sgblack@eecs.umich.edu    capabilityList.reset();
468541Sgblack@eecs.umich.edu}
478541Sgblack@eecs.umich.edu
488541Sgblack@eecs.umich.edu
498541Sgblack@eecs.umich.edu//  Copy constructor
508541Sgblack@eecs.umich.eduFuncUnit::FuncUnit(const FuncUnit &fu)
518541Sgblack@eecs.umich.edu{
528541Sgblack@eecs.umich.edu
539021Sgblack@eecs.umich.edu    for (int i = 0; i < Num_OpClasses; ++i) {
549021Sgblack@eecs.umich.edu        opLatencies[i] = fu.opLatencies[i];
558541Sgblack@eecs.umich.edu        issueLatencies[i] = fu.issueLatencies[i];
568541Sgblack@eecs.umich.edu    }
578541Sgblack@eecs.umich.edu
588541Sgblack@eecs.umich.edu    capabilityList = fu.capabilityList;
598541Sgblack@eecs.umich.edu}
608541Sgblack@eecs.umich.edu
618541Sgblack@eecs.umich.edu
628541Sgblack@eecs.umich.eduvoid
638541Sgblack@eecs.umich.eduFuncUnit::addCapability(OpClass cap, unsigned oplat, unsigned issuelat)
648541Sgblack@eecs.umich.edu{
658541Sgblack@eecs.umich.edu    if (issuelat == 0 || oplat == 0)
668541Sgblack@eecs.umich.edu        panic("FuncUnit:  you don't really want a zero-cycle latency do you?");
678541Sgblack@eecs.umich.edu
689022Sgblack@eecs.umich.edu    capabilityList.set(cap);
699022Sgblack@eecs.umich.edu
709021Sgblack@eecs.umich.edu    opLatencies[cap] = oplat;
718541Sgblack@eecs.umich.edu    issueLatencies[cap] = issuelat;
728541Sgblack@eecs.umich.edu}
739022Sgblack@eecs.umich.edu
748541Sgblack@eecs.umich.edubool
758541Sgblack@eecs.umich.eduFuncUnit::provides(OpClass capability)
768541Sgblack@eecs.umich.edu{
778541Sgblack@eecs.umich.edu    return capabilityList[capability];
788541Sgblack@eecs.umich.edu}
799022Sgblack@eecs.umich.edu
808541Sgblack@eecs.umich.edubitset<Num_OpClasses>
818541Sgblack@eecs.umich.eduFuncUnit::capabilities()
828541Sgblack@eecs.umich.edu{
838541Sgblack@eecs.umich.edu    return capabilityList;
848541Sgblack@eecs.umich.edu}
858541Sgblack@eecs.umich.edu
869022Sgblack@eecs.umich.eduunsigned &
879022Sgblack@eecs.umich.eduFuncUnit::opLatency(OpClass cap)
888541Sgblack@eecs.umich.edu{
898541Sgblack@eecs.umich.edu    return opLatencies[cap];
908541Sgblack@eecs.umich.edu}
91
92unsigned
93FuncUnit::issueLatency(OpClass capability)
94{
95    return issueLatencies[capability];
96}
97
98////////////////////////////////////////////////////////////////////////////
99//
100//  The SimObjects we use to get the FU information into the simulator
101//
102////////////////////////////////////////////////////////////////////////////
103
104//
105//  We use 2 objects to specify this data in the INI file:
106//    (1) OpDesc - Describes the operation class & latencies
107//                   (multiple OpDesc objects can refer to the same
108//                   operation classes)
109//    (2) FUDesc - Describes the operations available in the unit &
110//                   the number of these units
111//
112//
113
114
115//
116//  The operation-class description object
117//
118OpDesc *
119OpDescParams::create()
120{
121    return new OpDesc(this);
122}
123
124//
125//  The FuDesc object
126//
127FUDesc *
128FUDescParams::create()
129{
130    return new FUDesc(this);
131}
132