summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorNathan Binkert <nate@binkert.org>2008-11-10 11:51:18 -0800
committerNathan Binkert <nate@binkert.org>2008-11-10 11:51:18 -0800
commiteb5d9ba72b0309e7f98c382e3a80ce0601dbe084 (patch)
treedb510966579937d92bdacf4ad00b949e1ef0a5a8 /src
parentc25d966b06061402894b99a2362cb109275b73d1 (diff)
downloadgem5-eb5d9ba72b0309e7f98c382e3a80ce0601dbe084.tar.xz
pseudo inst: Add rpns (read processor nanoseconds) instruction.
This instruction basically returns the number of nanoseconds that the CPU has been running.
Diffstat (limited to 'src')
-rw-r--r--src/arch/alpha/isa/decoder.isa3
-rw-r--r--src/sim/pseudo_inst.cc6
-rw-r--r--src/sim/pseudo_inst.hh1
3 files changed, 10 insertions, 0 deletions
diff --git a/src/arch/alpha/isa/decoder.isa b/src/arch/alpha/isa/decoder.isa
index 270940df2..115cf7fa7 100644
--- a/src/arch/alpha/isa/decoder.isa
+++ b/src/arch/alpha/isa/decoder.isa
@@ -806,6 +806,9 @@ decode OPCODE default Unknown::unknown() {
0x04: quiesceTime({{
R0 = PseudoInst::quiesceTime(xc->tcBase());
}}, IsNonSpeculative, IsUnverifiable);
+ 0x07: rpns({{
+ R0 = PseudoInst::rpns(xc->tcBase());
+ }}, IsNonSpeculative, IsUnverifiable);
0x10: deprecated_ivlb({{
warn_once("Obsolete M5 ivlb instruction encountered.\n");
}});
diff --git a/src/sim/pseudo_inst.cc b/src/sim/pseudo_inst.cc
index 409a6e009..e43279376 100644
--- a/src/sim/pseudo_inst.cc
+++ b/src/sim/pseudo_inst.cc
@@ -125,6 +125,12 @@ quiesceTime(ThreadContext *tc)
return (tc->readLastActivate() - tc->readLastSuspend()) / Clock::Int::ns;
}
+uint64_t
+rpns(ThreadContext *tc)
+{
+ return curTick / Clock::Int::ns;
+}
+
void
m5exit(ThreadContext *tc, Tick delay)
{
diff --git a/src/sim/pseudo_inst.hh b/src/sim/pseudo_inst.hh
index 40702fced..80f58f80d 100644
--- a/src/sim/pseudo_inst.hh
+++ b/src/sim/pseudo_inst.hh
@@ -47,6 +47,7 @@ void quiesce(ThreadContext *tc);
void quiesceNs(ThreadContext *tc, uint64_t ns);
void quiesceCycles(ThreadContext *tc, uint64_t cycles);
uint64_t quiesceTime(ThreadContext *tc);
+uint64_t rpns(ThreadContext *tc);
void m5exit(ThreadContext *tc, Tick delay);
void loadsymbol(ThreadContext *xc);
void resetstats(ThreadContext *tc, Tick delay, Tick period);