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