32,33d31
< #include <map>
< #include <stack>
36d33
< #include "arch/alpha/osfpal.hh"
48,49d44
< const char *modestr[] = { "kernel", "user", "idle" };
<
51,52c46
< : idleProcess((Addr)-1), themode(kernel), lastModeTick(0),
< iplLast(0), iplLastTick(0)
---
> : iplLast(0), iplLastTick(0)
71,75d64
< _hwrei
< .name(name() + ".inst.hwrei")
< .desc("number of hwrei instructions executed")
< ;
<
105,117d93
< _callpal
< .init(256)
< .name(name() + ".callpal")
< .desc("number of callpals executed")
< .flags(total | pdf | nozero | nonan)
< ;
<
< for (int i = 0; i < PAL::NumCodes; ++i) {
< const char *str = PAL::name(i);
< if (str)
< _callpal.subname(i, str);
< }
<
124a101,102
> //@todo This needs to get the names of syscalls from an appropriate place.
> #if 0
131,172c109
<
< _mode
< .init(cpu_mode_num)
< .name(name() + ".mode_switch")
< .desc("number of protection mode switches")
< ;
<
< for (int i = 0; i < cpu_mode_num; ++i)
< _mode.subname(i, modestr[i]);
<
< _modeGood
< .init(cpu_mode_num)
< .name(name() + ".mode_good")
< ;
<
< for (int i = 0; i < cpu_mode_num; ++i)
< _modeGood.subname(i, modestr[i]);
<
< _modeFraction
< .name(name() + ".mode_switch_good")
< .desc("fraction of useful protection mode switches")
< .flags(total)
< ;
<
< for (int i = 0; i < cpu_mode_num; ++i)
< _modeFraction.subname(i, modestr[i]);
<
< _modeFraction = _modeGood / _mode;
<
< _modeTicks
< .init(cpu_mode_num)
< .name(name() + ".mode_ticks")
< .desc("number of ticks spent at the given mode")
< .flags(pdf)
< ;
< for (int i = 0; i < cpu_mode_num; ++i)
< _modeTicks.subname(i, modestr[i]);
<
< _swap_context
< .name(name() + ".swap_context")
< .desc("number of times the context was actually changed")
< ;
---
> #endif
176,202d112
< Statistics::setIdleProcess(Addr idlepcbb, ThreadContext *tc)
< {
< assert(themode == kernel);
< idleProcess = idlepcbb;
< themode = idle;
< changeMode(themode, tc);
< }
<
< void
< Statistics::changeMode(cpu_mode newmode, ThreadContext *tc)
< {
< _mode[newmode]++;
<
< if (newmode == themode)
< return;
<
< DPRINTF(Context, "old mode=%-8s new mode=%-8s\n",
< modestr[themode], modestr[newmode]);
<
< _modeGood[newmode]++;
< _modeTicks[themode] += curTick - lastModeTick;
<
< lastModeTick = curTick;
< themode = newmode;
< }
<
< void
219,257d128
< Statistics::mode(cpu_mode newmode, ThreadContext *tc)
< {
< Addr pcbb = tc->readMiscReg(AlphaISA::IPR_PALtemp23);
<
< if (newmode == kernel && pcbb == idleProcess)
< newmode = idle;
<
< changeMode(newmode, tc);
< }
<
< void
< Statistics::context(Addr oldpcbb, Addr newpcbb, ThreadContext *tc)
< {
< assert(themode != user);
<
< _swap_context++;
< changeMode(newpcbb == idleProcess ? idle : kernel, tc);
< }
<
< void
< Statistics::callpal(int code, ThreadContext *tc)
< {
< if (!PAL::name(code))
< return;
<
< _callpal[code]++;
<
< switch (code) {
< case PAL::callsys: {
< int number = tc->readIntReg(0);
< if (SystemCalls<Tru64>::validSyscallNumber(number)) {
< int cvtnum = SystemCalls<Tru64>::convert(number);
< _syscall[cvtnum]++;
< }
< } break;
< }
< }
<
< void
260,262d130
< int exemode = themode;
< SERIALIZE_SCALAR(exemode);
< SERIALIZE_SCALAR(idleProcess);
265d132
< SERIALIZE_SCALAR(lastModeTick);
271,273d137
< int exemode;
< UNSERIALIZE_SCALAR(exemode);
< UNSERIALIZE_SCALAR(idleProcess);
276,277d139
< UNSERIALIZE_SCALAR(lastModeTick);
< themode = (cpu_mode)exemode;