From c7d6745b073982782eb05ca523b53e1c7fe784da Mon Sep 17 00:00:00 2001 From: Nathan Binkert Date: Sun, 2 Nov 2003 02:07:31 -0500 Subject: [PATCH] deprecate the m5exit instruction and rename it to m5exit_old Implement a new m5exit instruction with an optional delay arch/alpha/isa_desc: move m5exit to m5exit old. The old version of the instruction is now deprecated Implement the new exit instruction with the optional delay sim/sim_events.cc: sim/sim_events.hh: Make SimExit take a cycle sim/universe.cc: provide ticksPerMS, ticksPerUS, and ticksPerNS so we don't have to do math during the cycle --HG-- extra : convert_revision : e2ed47a2e5cfcd57c82086c6fcb4a28bf801c214 --- arch/alpha/isa_desc | 16 ++++++++++++++-- sim/sim_events.cc | 4 ++-- sim/sim_events.hh | 2 +- sim/universe.cc | 8 +++++++- 4 files changed, 24 insertions(+), 6 deletions(-) diff --git a/arch/alpha/isa_desc b/arch/alpha/isa_desc index 75f765029..09fb4a50a 100644 --- a/arch/alpha/isa_desc +++ b/arch/alpha/isa_desc @@ -2425,9 +2425,21 @@ decode OPCODE default Unknown::unknown() { if (!xc->misspeculating()) Annotate::EndInterval(xc); }}, No_OpClass); - 0x20: m5exit({{ + 0x20: m5exit_old({{ if (!xc->misspeculating()) - SimExit("m5_exit instruction encountered"); + SimExit(curTick, "m5_exit_old instruction encountered"); + }}, No_OpClass); + 0x21: m5exit({{ + if (!xc->misspeculating()) { + Tick when = curTick; + Tick delay = xc->regs.intRegFile[16]; + if (delay != 0) { + delay *= ticksPerUS; + delay /= 1000; + when += delay; + } + SimExit(when, "m5_exit instruction encountered"); + } }}, No_OpClass); 0x30: initparam({{ Ra = xc->cpu->system->init_param; }}); 0x40: resetstats({{ diff --git a/sim/sim_events.cc b/sim/sim_events.cc index 5f24de516..165bab2bf 100644 --- a/sim/sim_events.cc +++ b/sim/sim_events.cc @@ -64,9 +64,9 @@ SimExitEvent::description() } void -SimExit(const char *message) +SimExit(Tick when, const char *message) { - static SimExitEvent event(message); + static SimExitEvent event(when, message); } // diff --git a/sim/sim_events.hh b/sim/sim_events.hh index 0029a8404..bca978ce1 100644 --- a/sim/sim_events.hh +++ b/sim/sim_events.hh @@ -66,7 +66,7 @@ class SimExitEvent : public Event virtual const char *description(); }; -void SimExit(const char *message); +void SimExit(Tick when, const char *message); // // Event class to terminate simulation after 'n' related events have diff --git a/sim/universe.cc b/sim/universe.cc index 8274d84ca..4cfcdc563 100644 --- a/sim/universe.cc +++ b/sim/universe.cc @@ -38,6 +38,9 @@ using namespace std; Tick curTick = 0; Tick ticksPerSecond; +Tick ticksPerMS; +Tick ticksPerUS; +Tick ticksPerNS; class UniverseParamContext : public ParamContext { @@ -49,10 +52,13 @@ class UniverseParamContext : public ParamContext UniverseParamContext universe("Universe"); Param universe_freq(&universe, "frequency", "tick frequency", - 200000000); + 200000000); void UniverseParamContext::checkParams() { ticksPerSecond = universe_freq; + ticksPerMS = universe_freq / 1000; + ticksPerUS = universe_freq / (1000 * 1000); + ticksPerNS = universe_freq / (1000 * 1000 * 1000); } -- 2.30.2