summaryrefslogtreecommitdiff
path: root/src/cpu/o3/cpu.cc
diff options
context:
space:
mode:
authorBinh Pham <binhpham@cs.rutgers.edu>2014-06-21 10:26:43 -0700
committerBinh Pham <binhpham@cs.rutgers.edu>2014-06-21 10:26:43 -0700
commit0782d92286ded450b7e615fefbd5d6d5e738c8cd (patch)
treef69fc67a0957740bab56e11ca9587834da3e18fa /src/cpu/o3/cpu.cc
parentfdb965f5c17d8866a63c206e1975460544d8eda9 (diff)
downloadgem5-0782d92286ded450b7e615fefbd5d6d5e738c8cd.tar.xz
o3: split load & store queue full cases in rename
Check for free entries in Load Queue and Store Queue separately to avoid cases when load cannot be renamed due to full Store Queue and vice versa. This work was done while Binh was an intern at AMD Research.
Diffstat (limited to 'src/cpu/o3/cpu.cc')
-rw-r--r--src/cpu/o3/cpu.cc10
1 files changed, 8 insertions, 2 deletions
diff --git a/src/cpu/o3/cpu.cc b/src/cpu/o3/cpu.cc
index ac003bc24..4f48e29d9 100644
--- a/src/cpu/o3/cpu.cc
+++ b/src/cpu/o3/cpu.cc
@@ -1009,12 +1009,18 @@ FullO3CPU<Impl>::activateWhenReady(ThreadID tid)
"IQ entries.\n",
tid);
ready = false;
- } else if (iew.ldstQueue.numFreeEntries() >=
+ } else if (iew.ldstQueue.numFreeLoadEntries() >=
iew.ldstQueue.entryAmount(activeThreads.size() + 1)) {
DPRINTF(O3CPU,"[tid:%i] Suspending thread due to not enough "
- "LSQ entries.\n",
+ "LQ entries.\n",
tid);
ready = false;
+ } else if (iew.ldstQueue.numFreeStoreEntries() >=
+ iew.ldstQueue.entryAmount(activeThreads.size() + 1)) {
+ DPRINTF(O3CPU,"[tid:%i] Suspending thread due to not enough "
+ "SQ entries.\n",
+ tid);
+ ready = false;
}
if (ready) {