diff options
author | Binh Pham <binhpham@cs.rutgers.edu> | 2014-06-21 10:26:43 -0700 |
---|---|---|
committer | Binh Pham <binhpham@cs.rutgers.edu> | 2014-06-21 10:26:43 -0700 |
commit | 0782d92286ded450b7e615fefbd5d6d5e738c8cd (patch) | |
tree | f69fc67a0957740bab56e11ca9587834da3e18fa /src/cpu/o3/lsq_impl.hh | |
parent | fdb965f5c17d8866a63c206e1975460544d8eda9 (diff) | |
download | gem5-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/lsq_impl.hh')
-rw-r--r-- | src/cpu/o3/lsq_impl.hh | 37 |
1 files changed, 30 insertions, 7 deletions
diff --git a/src/cpu/o3/lsq_impl.hh b/src/cpu/o3/lsq_impl.hh index 7e89968a8..6e605b6a0 100644 --- a/src/cpu/o3/lsq_impl.hh +++ b/src/cpu/o3/lsq_impl.hh @@ -1,5 +1,6 @@ /* * Copyright (c) 2011-2012 ARM Limited + * Copyright (c) 2013 Advanced Micro Devices, Inc. * All rights reserved * * The license below extends only to copyright in the software and shall @@ -433,7 +434,7 @@ LSQ<Impl>::numStores() template<class Impl> unsigned -LSQ<Impl>::numFreeEntries() +LSQ<Impl>::numFreeLoadEntries() { unsigned total = 0; @@ -443,7 +444,7 @@ LSQ<Impl>::numFreeEntries() while (threads != end) { ThreadID tid = *threads++; - total += thread[tid].numFreeEntries(); + total += thread[tid].numFreeLoadEntries(); } return total; @@ -451,12 +452,34 @@ LSQ<Impl>::numFreeEntries() template<class Impl> unsigned -LSQ<Impl>::numFreeEntries(ThreadID tid) +LSQ<Impl>::numFreeStoreEntries() { - //if (lsqPolicy == Dynamic) - //return numFreeEntries(); - //else - return thread[tid].numFreeEntries(); + unsigned total = 0; + + list<ThreadID>::iterator threads = activeThreads->begin(); + list<ThreadID>::iterator end = activeThreads->end(); + + while (threads != end) { + ThreadID tid = *threads++; + + total += thread[tid].numFreeStoreEntries(); + } + + return total; +} + +template<class Impl> +unsigned +LSQ<Impl>::numFreeLoadEntries(ThreadID tid) +{ + return thread[tid].numFreeLoadEntries(); +} + +template<class Impl> +unsigned +LSQ<Impl>::numFreeStoreEntries(ThreadID tid) +{ + return thread[tid].numFreeStoreEntries(); } template<class Impl> |