From 9463f902bf89da7bcb018d785bb92a2ce9d900a6 Mon Sep 17 00:00:00 2001 From: Yan Xu <934348725@qq.com> Date: Fri, 27 Dec 2024 10:23:35 +0800 Subject: [PATCH] cpu-o3: fix earlyscoreboard should not update by float and vector (#245) Change-Id: I264e4366cdb03f9ed1a34840879cad380bbae20d --- src/cpu/o3/FuncUnitConfig.py | 6 +++--- src/cpu/o3/issue_queue.cc | 13 +++++++------ 2 files changed, 10 insertions(+), 9 deletions(-) diff --git a/src/cpu/o3/FuncUnitConfig.py b/src/cpu/o3/FuncUnitConfig.py index d3512513bd..b7390f8d3c 100644 --- a/src/cpu/o3/FuncUnitConfig.py +++ b/src/cpu/o3/FuncUnitConfig.py @@ -44,7 +44,8 @@ from m5.objects.FuncUnit import * class IntMisc(FUDesc): - opList = [ OpDesc(opClass='No_OpClass') ] + opList = [ OpDesc(opClass='No_OpClass'), + OpDesc(opClass='VectorConfig') ] class IntALU(FUDesc): opList = [ OpDesc(opClass='IntAlu') ] @@ -126,8 +127,7 @@ class SIMD_Unit(FUDesc): OpDesc(opClass='VectorIntegerReduce'), OpDesc(opClass='VectorFloatReduce'), OpDesc(opClass='VectorMisc'), - OpDesc(opClass='VectorIntegerExtension'), - OpDesc(opClass='VectorConfig')] + OpDesc(opClass='VectorIntegerExtension')] class PredALU(FUDesc): opList = [ OpDesc(opClass='SimdPredAlu') ] diff --git a/src/cpu/o3/issue_queue.cc b/src/cpu/o3/issue_queue.cc index ec6361fe81..e5d09e8231 100644 --- a/src/cpu/o3/issue_queue.cc +++ b/src/cpu/o3/issue_queue.cc @@ -902,13 +902,14 @@ Scheduler::specWakeUpDependents(const DynInstPtr& inst, IssueQue* from_issue_que from_issue_queue->getName(), to->getName(), wakeDelay); if (wakeDelay == 0) { to->wakeUpDependents(inst, true); - for (int i = 0; i < inst->numDestRegs(); i++) { - PhysRegIdPtr dst = inst->renamedDestIdx(i); - if (dst->isFixedMapping()) [[unlikely]] { - continue; - ; + if (!(inst->isFloating() || inst->isVector())) { + for (int i = 0; i < inst->numDestRegs(); i++) { + PhysRegIdPtr dst = inst->renamedDestIdx(i); + if (dst->isFixedMapping()) [[unlikely]] { + continue; + } + earlyScoreboard[dst->flatIndex()] = true; } - earlyScoreboard[dst->flatIndex()] = true; } } else { auto wakeEvent = new SpecWakeupCompletion(inst, to);