diff options
author | Korey Sewell <ksewell@umich.edu> | 2011-06-19 21:43:40 -0400 |
---|---|---|
committer | Korey Sewell <ksewell@umich.edu> | 2011-06-19 21:43:40 -0400 |
commit | 561c33f0824a705cb360ecb4ae3bf8cfd490f007 (patch) | |
tree | 7fb92ebc9a8f09ceacb8ad8e60e60990a9939621 /src/cpu/inorder/cpu.cc | |
parent | c4deabfb97928f81acb0d66338426cb5f2687c37 (diff) | |
download | gem5-561c33f0824a705cb360ecb4ae3bf8cfd490f007.tar.xz |
inorder: dont handle multiple faults on same cycle
if a faulting instruction reaches an execution unit,
then ignore it and pass it through the pipeline.
Once we recognize the fault in the graduation unit,
dont allow a second fault to creep in on the same cycle.
Diffstat (limited to 'src/cpu/inorder/cpu.cc')
-rw-r--r-- | src/cpu/inorder/cpu.cc | 16 |
1 files changed, 13 insertions, 3 deletions
diff --git a/src/cpu/inorder/cpu.cc b/src/cpu/inorder/cpu.cc index 2623c6c1d..365b2f18a 100644 --- a/src/cpu/inorder/cpu.cc +++ b/src/cpu/inorder/cpu.cc @@ -196,7 +196,6 @@ InOrderCPU::InOrderCPU(Params *params) timeBuffer(2 , 2), removeInstsThisCycle(false), activityRec(params->name, NumStages, 10, params->activity), - stCondFails(0), #if FULL_SYSTEM system(params->system), #endif // FULL_SYSTEM @@ -372,7 +371,8 @@ InOrderCPU::InOrderCPU(Params *params) endOfSkedIt = skedCache.end(); frontEndSked = createFrontEndSked(); - + faultSked = createFaultSked(); + lastRunningCycle = curTick(); lockAddr = 0; @@ -417,8 +417,18 @@ InOrderCPU::createFrontEndSked() D.needs(FetchSeq, FetchSeqUnit::UpdateTargetPC); - DPRINTF(SkedCache, "Resource Sked created for instruction \"front_end\"\n"); + DPRINTF(SkedCache, "Resource Sked created for instruction Front End\n"); + + return res_sked; +} +RSkedPtr +InOrderCPU::createFaultSked() +{ + RSkedPtr res_sked = new ResourceSked(); + StageScheduler W(res_sked, NumStages - 1); + W.needs(Grad, GraduationUnit::CheckFault); + DPRINTF(SkedCache, "Resource Sked created for instruction Faults\n"); return res_sked; } |