summaryrefslogtreecommitdiff
path: root/src/cpu/o3
diff options
context:
space:
mode:
Diffstat (limited to 'src/cpu/o3')
-rw-r--r--src/cpu/o3/commit_impl.hh2
-rw-r--r--src/cpu/o3/thread_context.hh11
-rw-r--r--src/cpu/o3/thread_state.hh3
3 files changed, 16 insertions, 0 deletions
diff --git a/src/cpu/o3/commit_impl.hh b/src/cpu/o3/commit_impl.hh
index df439454b..23f10fe2a 100644
--- a/src/cpu/o3/commit_impl.hh
+++ b/src/cpu/o3/commit_impl.hh
@@ -1114,6 +1114,8 @@ DefaultCommit<Impl>::commitInsts()
oldpc = pc[tid].instAddr();
cpu->system->pcEventQueue.service(
oldpc, thread[tid]->getTC());
+ thread[tid]->pcEventQueue.service(
+ oldpc, thread[tid]->getTC());
count++;
} while (oldpc != pc[tid].instAddr());
if (count > 1) {
diff --git a/src/cpu/o3/thread_context.hh b/src/cpu/o3/thread_context.hh
index 9029aba3e..2ec559f2d 100644
--- a/src/cpu/o3/thread_context.hh
+++ b/src/cpu/o3/thread_context.hh
@@ -75,6 +75,17 @@ class O3ThreadContext : public ThreadContext
/** Pointer to the CPU. */
O3CPU *cpu;
+ bool
+ schedule(PCEvent *e) override
+ {
+ return thread->pcEventQueue.schedule(e);
+ }
+ bool
+ remove(PCEvent *e) override
+ {
+ return thread->pcEventQueue.remove(e);
+ }
+
/** Pointer to the thread state that this TC corrseponds to. */
O3ThreadState<Impl> *thread;
diff --git a/src/cpu/o3/thread_state.hh b/src/cpu/o3/thread_state.hh
index 4b4f51e8f..b2c9296f4 100644
--- a/src/cpu/o3/thread_state.hh
+++ b/src/cpu/o3/thread_state.hh
@@ -72,7 +72,10 @@ struct O3ThreadState : public ThreadState {
private:
/** Pointer to the CPU. */
O3CPU *cpu;
+
public:
+ PCEventQueue pcEventQueue;
+
/* This variable controls if writes to a thread context should cause a all
* dynamic/speculative state to be thrown away. Nominally this is the
* desired behavior because the external thread context write has updated