46a47
> resumeUnblocking(false),
407a409,411
> resumeUnblocking = (skidBuffer[tid].size() != 0);
> DPRINTF(Rename, "Resume unblocking set to %s\n",
> resumeUnblocking ? "true" : "false");
498a503,508
> } else if (renameStatus[tid] == Unblocking) {
> if (resumeUnblocking) {
> block(tid);
> resumeUnblocking = false;
> toDecode->renameUnblock[tid] = false;
> }
763a774,782
> {
> typename InstQueue::iterator it;
> warn("Skidbuffer contents:\n");
> for(it = skidBuffer[tid].begin(); it != skidBuffer[tid].end(); it++)
> {
> warn("[tid:%u]: %s [sn:%i].\n", tid,
> (*it)->staticInst->disassemble(inst->readPC()),
> (*it)->seqNum);
> }
764a784
> }
851c871,874
< if (renameStatus[tid] != Unblocking) {
---
> // If resumeUnblocking is set, we unblocked during the squash,
> // but now we're have unblocking status. We need to tell earlier
> // stages to block.
> if (resumeUnblocking || renameStatus[tid] != Unblocking) {
1267,1273c1290
< if (!resumeSerialize) {
< DPRINTF(Rename, "[tid:%u]: Done squashing, switching to running.\n",
< tid);
<
< renameStatus[tid] = Running;
< return false;
< } else {
---
> if (resumeSerialize) {
1278a1296,1306
> } else if (resumeUnblocking) {
> DPRINTF(Rename, "[tid:%u]: Done squashing, switching to unblocking.\n",
> tid);
> renameStatus[tid] = Unblocking;
> return true;
> } else {
> DPRINTF(Rename, "[tid:%u]: Done squashing, switching to running.\n",
> tid);
>
> renameStatus[tid] = Running;
> return false;