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