1/* 2 * Copyright (c) 2010-2013 ARM Limited 3 * Copyright (c) 2013 Advanced Micro Devices, Inc. 4 * All rights reserved. 5 * 6 * The license below extends only to copyright in the software and shall 7 * not be construed as granting a license to any other intellectual 8 * property including but not limited to intellectual property relating --- 62 unchanged lines hidden (view full) --- 71 instQueue(_cpu, this, params), 72 ldstQueue(_cpu, this, params), 73 fuPool(params->fuPool), 74 commitToIEWDelay(params->commitToIEWDelay), 75 renameToIEWDelay(params->renameToIEWDelay), 76 issueToExecuteDelay(params->issueToExecuteDelay), 77 dispatchWidth(params->dispatchWidth), 78 issueWidth(params->issueWidth), |
79 wbWidth(params->wbWidth), 80 numThreads(params->numThreads) 81{ 82 if (dispatchWidth > Impl::MaxWidth) 83 fatal("dispatchWidth (%d) is larger than compiled limit (%d),\n" 84 "\tincrease MaxWidth in src/cpu/o3/impl.hh\n", 85 dispatchWidth, static_cast<int>(Impl::MaxWidth)); 86 if (issueWidth > Impl::MaxWidth) --- 16 unchanged lines hidden (view full) --- 103 instQueue.setIssueToExecuteQueue(&issueToExecQueue); 104 105 for (ThreadID tid = 0; tid < numThreads; tid++) { 106 dispatchStatus[tid] = Running; 107 stalls[tid].commit = false; 108 fetchRedirect[tid] = false; 109 } 110 |
111 updateLSQNextCycle = false; 112 |
113 skidBufferMax = (3 * (renameToIEWDelay * params->renameWidth)) + issueWidth; 114} 115 116template <class Impl> 117std::string 118DefaultIEW<Impl>::name() const 119{ 120 return cpu->name() + ".iew"; --- 504 unchanged lines hidden (view full) --- 625 // keep looking back to see where's the first time there's a 626 // free slot. 627 while ((*iewQueue)[wbCycle].insts[wbNumInst]) { 628 ++wbNumInst; 629 if (wbNumInst == wbWidth) { 630 ++wbCycle; 631 wbNumInst = 0; 632 } |
633 } 634 635 DPRINTF(IEW, "Current wb cycle: %i, width: %i, numInst: %i\nwbActual:%i\n", 636 wbCycle, wbWidth, wbNumInst, wbCycle * wbWidth + wbNumInst); 637 // Add finished instruction to queue to commit. 638 (*iewQueue)[wbCycle].insts[wbNumInst] = inst; 639 (*iewQueue)[wbCycle].size++; 640} --- 610 unchanged lines hidden (view full) --- 1251 inst->setExecuted(); 1252 1253 // Not sure if I should set this here or just let commit try to 1254 // commit any squashed instructions. I like the latter a bit more. 1255 inst->setCanCommit(); 1256 1257 ++iewExecSquashedInsts; 1258 |
1259 continue; 1260 } 1261 1262 Fault fault = NoFault; 1263 1264 // Execute instruction. 1265 // Note that if the instruction faults, it will be handled 1266 // at the commit stage. --- 222 unchanged lines hidden (view full) --- 1489 } 1490 1491 if (dependents) { 1492 producerInst[tid]++; 1493 consumerInst[tid]+= dependents; 1494 } 1495 writebackCount[tid]++; 1496 } |
1497 } 1498} 1499 1500template<class Impl> 1501void 1502DefaultIEW<Impl>::tick() 1503{ 1504 wbNumInst = 0; --- 186 unchanged lines hidden --- |