cpu: Query CPU for inst executed from Python
authorGeoffrey Blake <Geoffrey.Blake@arm.com>
Tue, 5 Apr 2016 10:29:02 +0000 (05:29 -0500)
committerGeoffrey Blake <Geoffrey.Blake@arm.com>
Tue, 5 Apr 2016 10:29:02 +0000 (05:29 -0500)
This patch adds the ability for the simulator to query the number of
instructions a CPU has executed so far per hw-thread. This can be used
to enable more flexible periodic events such as taking checkpoints
starting 1s into simulation and X instructions thereafter.

src/cpu/BaseCPU.py
src/cpu/base.cc
src/cpu/base.hh

index a54a63b466ad9d3ffafb9b8471cb52f0edef142f..4d114cbdcecb3db1faea955664af82f9bdd20965 100644 (file)
@@ -101,6 +101,7 @@ class BaseCPU(MemObject):
     Counter totalInsts();
     void scheduleInstStop(ThreadID tid, Counter insts, const char *cause);
     void scheduleLoadStop(ThreadID tid, Counter loads, const char *cause);
+    uint64_t getCurrentInstCount(ThreadID tid);
 ''')
 
     @classmethod
index 22fca4dc5cb53b3d81793fdf40933253b7ea3d88..624843f425e55c46cab3433373ddf803119cce35 100644 (file)
@@ -691,6 +691,12 @@ BaseCPU::scheduleInstStop(ThreadID tid, Counter insts, const char *cause)
     comInstEventQueue[tid]->schedule(event, now + insts);
 }
 
+uint64_t
+BaseCPU::getCurrentInstCount(ThreadID tid)
+{
+    return Tick(comInstEventQueue[tid]->getCurTick());
+}
+
 AddressMonitor::AddressMonitor() {
     armed = false;
     waiting = false;
index 87f27accac675b2e379330e523c3b4990bd868c6..438c38812fa790083daca49634a10a542d62a03e 100644 (file)
@@ -465,6 +465,15 @@ class BaseCPU : public MemObject
      */
     void scheduleLoadStop(ThreadID tid, Counter loads, const char *cause);
 
+    /**
+     * Get the number of instructions executed by the specified thread
+     * on this CPU. Used by Python to control simulation.
+     *
+     * @param tid Thread monitor
+     * @return Number of instructions executed
+     */
+    uint64_t getCurrentInstCount(ThreadID tid);
+
   public:
     /**
      * @{