summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-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
-rw-r--r--util/m5/m5op.h1
-rw-r--r--util/m5/m5op_alpha.S2
-rw-r--r--util/m5/m5ops.h1
6 files changed, 14 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);
diff --git a/util/m5/m5op.h b/util/m5/m5op.h
index f4e6bb0f1..bab2e2b9e 100644
--- a/util/m5/m5op.h
+++ b/util/m5/m5op.h
@@ -39,6 +39,7 @@ void quiesce(void);
void quiesceNs(uint64_t ns);
void quiesceCycle(uint64_t cycles);
uint64_t quiesceTime(void);
+uint64_t rpns();
void m5_exit(uint64_t ns_delay);
uint64_t m5_initparam(void);
diff --git a/util/m5/m5op_alpha.S b/util/m5/m5op_alpha.S
index 7aeffb2c7..77e9afe34 100644
--- a/util/m5/m5op_alpha.S
+++ b/util/m5/m5op_alpha.S
@@ -59,6 +59,7 @@ func:
#define QUIESCENS(r1) INST(m5_op, r1, 0, quiescens_func)
#define QUIESCECYC(r1) INST(m5_op, r1, 0, quiescecycle_func)
#define QUIESCETIME INST(m5_op, 0, 0, quiescetime_func)
+#define RPNS INST(m5_op, 0, 0, rpns_func)
#define M5EXIT(reg) INST(m5_op, reg, 0, exit_func)
#define INITPARAM(reg) INST(m5_op, reg, 0, initparam_func)
#define LOADSYMBOL(reg) INST(m5_op, reg, 0, loadsymbol_func)
@@ -79,6 +80,7 @@ SIMPLE_OP(quiesce, QUIESCE)
SIMPLE_OP(quiesceNs, QUIESCENS(16))
SIMPLE_OP(quiesceCycle, QUIESCECYC(16))
SIMPLE_OP(quiesceTime, QUIESCETIME)
+SIMPLE_OP(rpns, RPNS)
SIMPLE_OP(m5_exit, M5EXIT(16))
SIMPLE_OP(m5_initparam, INITPARAM(0))
SIMPLE_OP(m5_loadsymbol, LOADSYMBOL(0))
diff --git a/util/m5/m5ops.h b/util/m5/m5ops.h
index 58846e1cf..ab9bdd857 100644
--- a/util/m5/m5ops.h
+++ b/util/m5/m5ops.h
@@ -34,6 +34,7 @@
#define quiescens_func 0x02
#define quiescecycle_func 0x03
#define quiescetime_func 0x04
+#define rpns_func 0x07
#define deprecated1_func 0x10 // obsolete ivlb
#define deprecated2_func 0x11 // obsolete ivle
#define deprecated3_func 0x20 // deprecated exit function