summaryrefslogtreecommitdiff
path: root/src/cpu/simple_thread.hh
diff options
context:
space:
mode:
Diffstat (limited to 'src/cpu/simple_thread.hh')
-rw-r--r--src/cpu/simple_thread.hh32
1 files changed, 32 insertions, 0 deletions
diff --git a/src/cpu/simple_thread.hh b/src/cpu/simple_thread.hh
index 86d31b235..5ed0f2982 100644
--- a/src/cpu/simple_thread.hh
+++ b/src/cpu/simple_thread.hh
@@ -127,6 +127,11 @@ class SimpleThread : public ThreadState, public ThreadContext
}
PCEventQueue pcEventQueue;
+ /**
+ * An instruction-based event queue. Used for scheduling events based on
+ * number of instructions committed.
+ */
+ EventQueue comInstEventQueue;
System *system;
@@ -193,6 +198,33 @@ class SimpleThread : public ThreadState, public ThreadContext
bool schedule(PCEvent *e) override { return pcEventQueue.schedule(e); }
bool remove(PCEvent *e) override { return pcEventQueue.remove(e); }
+ Tick
+ nextInstEventCount() override
+ {
+ return comInstEventQueue.empty() ?
+ MaxTick : comInstEventQueue.nextTick();
+ }
+ void
+ serviceInstCountEvents(Tick count) override
+ {
+ comInstEventQueue.serviceEvents(count);
+ }
+ void
+ scheduleInstCountEvent(Event *event, Tick count) override
+ {
+ comInstEventQueue.schedule(event, count);
+ }
+ void
+ descheduleInstCountEvent(Event *event) override
+ {
+ comInstEventQueue.deschedule(event);
+ }
+ Tick
+ getCurrentInstCount() override
+ {
+ return comInstEventQueue.getCurTick();
+ }
+
BaseCPU *getCpuPtr() override { return baseCpu; }
int cpuId() const override { return ThreadState::cpuId(); }