sim_object.cc revision 334
12155SN/A/* 22155SN/A * Copyright (c) 2003 The Regents of The University of Michigan 32155SN/A * All rights reserved. 42155SN/A * 52155SN/A * Redistribution and use in source and binary forms, with or without 62155SN/A * modification, are permitted provided that the following conditions are 72155SN/A * met: redistributions of source code must retain the above copyright 82155SN/A * notice, this list of conditions and the following disclaimer; 92155SN/A * redistributions in binary form must reproduce the above copyright 102155SN/A * notice, this list of conditions and the following disclaimer in the 112155SN/A * documentation and/or other materials provided with the distribution; 122155SN/A * neither the name of the copyright holders nor the names of its 132155SN/A * contributors may be used to endorse or promote products derived from 142155SN/A * this software without specific prior written permission. 152155SN/A * 162155SN/A * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 172155SN/A * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 182155SN/A * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 192155SN/A * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 202155SN/A * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 212155SN/A * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 222155SN/A * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 232155SN/A * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 242155SN/A * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 252155SN/A * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 262155SN/A * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 272155SN/A */ 282665Ssaidi@eecs.umich.edu 292665Ssaidi@eecs.umich.edu#include <assert.h> 302155SN/A 314202Sbinkertn@umich.edu#include "base/callback.hh" 322155SN/A#include "base/inifile.hh" 337768SAli.Saidi@ARM.com#include "base/misc.hh" 347768SAli.Saidi@ARM.com#include "base/trace.hh" 357768SAli.Saidi@ARM.com#include "sim/configfile.hh" 362178SN/A#include "sim/host.hh" 372178SN/A#include "sim/sim_object.hh" 382178SN/A#include "sim/sim_stats.hh" 392178SN/A 402178SN/Ausing namespace std; 412178SN/A 422178SN/A 432178SN/A//////////////////////////////////////////////////////////////////////// 442178SN/A// 452178SN/A// SimObject member definitions 462178SN/A// 472155SN/A//////////////////////////////////////////////////////////////////////// 485865Sksewell@umich.edu 496181Sksewell@umich.edu// 506181Sksewell@umich.edu// static list of all SimObjects, used for initialization etc. 515865Sksewell@umich.edu// 523918Ssaidi@eecs.umich.eduSimObject::SimObjectList SimObject::simObjectList; 535865Sksewell@umich.edu 542623SN/A// 553918Ssaidi@eecs.umich.edu// SimObject constructor: used to maintain static simObjectList 562155SN/A// 572155SN/ASimObject::SimObject(const string &_name) 582292SN/A : objName(_name) 596181Sksewell@umich.edu{ 606181Sksewell@umich.edu simObjectList.push_back(this); 613918Ssaidi@eecs.umich.edu} 622292SN/A 632292SN/A// 642292SN/A// no default statistics, so nothing to do in base implementation 653918Ssaidi@eecs.umich.edu// 662292SN/Avoid 672292SN/ASimObject::regStats() 682766Sktlim@umich.edu{ 692766Sktlim@umich.edu} 702766Sktlim@umich.edu 712921Sktlim@umich.eduvoid 722921Sktlim@umich.eduSimObject::regFormulas() 732766Sktlim@umich.edu{ 742766Sktlim@umich.edu} 755529Snate@binkert.org 762766Sktlim@umich.eduvoid 774762Snate@binkert.orgSimObject::resetStats() 782155SN/A{ 792155SN/A} 802155SN/A 812155SN/A// 822155SN/A// no default extra output 832155SN/A// 842766Sktlim@umich.eduvoid 852155SN/ASimObject::printExtraOutput(ostream &os) 865865Sksewell@umich.edu{ 872155SN/A} 882155SN/A 892155SN/A// 902155SN/A// static function: 912178SN/A// call regStats() on all SimObjects and then regFormulas() on all 922178SN/A// SimObjects. 937756SAli.Saidi@ARM.com// 942766Sktlim@umich.edustruct SimObjectResetCB : public Callback 952178SN/A{ 962178SN/A virtual void process() { SimObject::resetAllStats(); } 976994Snate@binkert.org}; 982178SN/A 992766Sktlim@umich.edunamespace { 1002766Sktlim@umich.edu static SimObjectResetCB StatResetCB; 1012766Sktlim@umich.edu} 1022788Sktlim@umich.edu 1032178SN/Avoid 1042733Sktlim@umich.eduSimObject::regAllStats() 1052733Sktlim@umich.edu{ 1062817Sksewell@umich.edu SimObjectList::iterator i; 1072733Sktlim@umich.edu SimObjectList::iterator end = simObjectList.end(); 1084486Sbinkertn@umich.edu 1094486Sbinkertn@umich.edu /** 1104776Sgblack@eecs.umich.edu * @todo change cprintfs to DPRINTFs 1114776Sgblack@eecs.umich.edu */ 1126365Sgblack@eecs.umich.edu for (i = simObjectList.begin(); i != end; ++i) { 1134486Sbinkertn@umich.edu#ifdef STAT_DEBUG 1144202Sbinkertn@umich.edu cprintf("registering stats for %s\n", (*i)->name()); 1154202Sbinkertn@umich.edu#endif 1164202Sbinkertn@umich.edu (*i)->regStats(); 1174202Sbinkertn@umich.edu } 1184202Sbinkertn@umich.edu 1194776Sgblack@eecs.umich.edu for (i = simObjectList.begin(); i != end; ++i) { 1206365Sgblack@eecs.umich.edu#ifdef STAT_DEBUG 1214202Sbinkertn@umich.edu cprintf("registering formulas for %s\n", (*i)->name()); 1224202Sbinkertn@umich.edu#endif 1234202Sbinkertn@umich.edu (*i)->regFormulas(); 1244202Sbinkertn@umich.edu } 1255217Ssaidi@eecs.umich.edu 1264202Sbinkertn@umich.edu Statistics::RegResetCallback(&StatResetCB); 1272155SN/A} 1284202Sbinkertn@umich.edu 1294486Sbinkertn@umich.edu// 1304486Sbinkertn@umich.edu// static function: call resetStats() on all SimObjects. 1314202Sbinkertn@umich.edu// 1324202Sbinkertn@umich.eduvoid 1332821Sktlim@umich.eduSimObject::resetAllStats() 1344776Sgblack@eecs.umich.edu{ 1354776Sgblack@eecs.umich.edu SimObjectList::iterator i = simObjectList.begin(); 1364776Sgblack@eecs.umich.edu SimObjectList::iterator end = simObjectList.end(); 1374776Sgblack@eecs.umich.edu 1382766Sktlim@umich.edu for (; i != end; ++i) { 1394202Sbinkertn@umich.edu SimObject *obj = *i; 1405192Ssaidi@eecs.umich.edu obj->resetStats(); 1412733Sktlim@umich.edu } 1422733Sktlim@umich.edu} 1432733Sktlim@umich.edu 1442733Sktlim@umich.edu// 1452733Sktlim@umich.edu// static function: call printExtraOutput() on all SimObjects. 1462874Sktlim@umich.edu// 1472874Sktlim@umich.eduvoid 1482874Sktlim@umich.eduSimObject::printAllExtraOutput(ostream &os) 1494202Sbinkertn@umich.edu{ 1502733Sktlim@umich.edu SimObjectList::iterator i = simObjectList.begin(); 1515192Ssaidi@eecs.umich.edu SimObjectList::iterator end = simObjectList.end(); 1525192Ssaidi@eecs.umich.edu 1535192Ssaidi@eecs.umich.edu for (; i != end; ++i) { 1545217Ssaidi@eecs.umich.edu SimObject *obj = *i; 1555192Ssaidi@eecs.umich.edu obj->printExtraOutput(os); 1565192Ssaidi@eecs.umich.edu } 1575192Ssaidi@eecs.umich.edu} 1585192Ssaidi@eecs.umich.edu