From: Nathan Binkert Date: Mon, 10 Nov 2008 19:51:18 +0000 (-0800) Subject: pseudo inst: Add rpns (read processor nanoseconds) instruction. X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=eb5d9ba72b0309e7f98c382e3a80ce0601dbe084;p=gem5.git pseudo inst: Add rpns (read processor nanoseconds) instruction. This instruction basically returns the number of nanoseconds that the CPU has been running. --- 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