/** Records if there is a fetch redirect on this cycle for each thread. */
bool fetchRedirect[Impl::MaxThreads];
- /** Used to track if all instructions have been dispatched this cycle.
- * If they have not, then blocking must have occurred, and the instructions
- * would already be added to the skid buffer.
- * @todo: Fix this hack.
- */
- bool dispatchedAllInsts;
-
/** Records if the queues have been changed (inserted or issued insts),
* so that IEW knows to broadcast the updated amount of free entries.
*/
++iewUnblockCycles;
- if (validInstsFromRename() && dispatchedAllInsts) {
+ if (validInstsFromRename()) {
// Add the current inputs to the skid buffer so they can be
// reprocessed when this stage unblocks.
skidInsert(tid);
void
DefaultIEW<Impl>::dispatchInsts(unsigned tid)
{
- dispatchedAllInsts = true;
-
// Obtain instructions from skid buffer if unblocking, or queue from rename
// otherwise.
std::queue<DynInstPtr> &insts_to_dispatch =
// get full in the IQ.
toRename->iewUnblock[tid] = false;
- dispatchedAllInsts = false;
-
++iewIQFullEvents;
break;
} else if (ldstQueue.isFull(tid)) {
// get full in the IQ.
toRename->iewUnblock[tid] = false;
- dispatchedAllInsts = false;
-
++iewLSQFullEvents;
break;
}