2c2
< * Copyright (c) 2011-2013 ARM Limited
---
> * Copyright (c) 2011-2014 ARM Limited
415a416,417
> blockedMemInsts.clear();
> retryMemInsts.clear();
737,743c739,741
< DynInstPtr deferred_mem_inst;
< int total_deferred_mem_issued = 0;
< while (total_deferred_mem_issued < totalWidth &&
< (deferred_mem_inst = getDeferredMemInstToExecute()) != 0) {
< issueToExecuteQueue->access(0)->size++;
< instsToExecute.push_back(deferred_mem_inst);
< total_deferred_mem_issued++;
---
> DynInstPtr mem_inst;
> while (mem_inst = getDeferredMemInstToExecute()) {
> addReadyMemInst(mem_inst);
745a744,748
> // See if any cache blocked instructions are able to be executed
> while (mem_inst = getBlockedMemInstToExecute()) {
> addReadyMemInst(mem_inst);
> }
>
753a757
> int total_issued = 0;
756d759
< int total_issued = 0;
758,759c761
< while (total_issued < (totalWidth - total_deferred_mem_issued) &&
< order_it != order_end_it) {
---
> while (total_issued < totalWidth && order_it != order_end_it) {
877c879
< if (total_issued || total_deferred_mem_issued || deferredMemInsts.size()) {
---
> if (total_issued || !retryMemInsts.empty() || !deferredMemInsts.empty()) {
1053c1055
< memDepUnit[replay_inst->threadNumber].replay(replay_inst);
---
> memDepUnit[replay_inst->threadNumber].replay();
1080a1083,1103
> void
> InstructionQueue<Impl>::blockMemInst(DynInstPtr &blocked_inst)
> {
> blocked_inst->translationStarted(false);
> blocked_inst->translationCompleted(false);
>
> blocked_inst->clearIssued();
> blocked_inst->clearCanIssue();
> blockedMemInsts.push_back(blocked_inst);
> }
>
> template <class Impl>
> void
> InstructionQueue<Impl>::cacheUnblocked()
> {
> retryMemInsts.splice(retryMemInsts.end(), blockedMemInsts);
> // Get the CPU ticking again
> cpu->wakeCPU();
> }
>
> template <class Impl>
1087c1110
< DynInstPtr ret = *it;
---
> DynInstPtr mem_inst = *it;
1089c1112
< return ret;
---
> return mem_inst;
1092c1115
< return NULL;
---
> return nullptr;
1095a1119,1131
> typename Impl::DynInstPtr
> InstructionQueue<Impl>::getBlockedMemInstToExecute()
> {
> if (retryMemInsts.empty()) {
> return nullptr;
> } else {
> DynInstPtr mem_inst = retryMemInsts.front();
> retryMemInsts.pop_front();
> return mem_inst;
> }
> }
>
> template <class Impl>