cpu-minor: Separate the reg_index of VecClassReg and VecElemReg

In the RISC-V system, we need to VecClassReg to run RISC-V vector
instruction, and VecElemReg is not applicable because the element
length of vector can be resizable via vset*vl* instruction.

The change will seperate the reg_index for VecReg and VecElemReg to
ensure that have the space for VecReg when VecElemReg is not
applicable.

Change-Id: I99a82dec273baeee31df89a0ee0f5e87f3ff187c
This commit is contained in:
Roger Chang
2023-08-16 18:06:31 +08:00
parent c218104f52
commit 5c28113a06
2 changed files with 7 additions and 2 deletions

View File

@@ -62,10 +62,13 @@ Scoreboard::findIndex(const RegId& reg, Index &scoreboard_index)
ret = true;
break;
case VecRegClass:
case VecElemClass:
scoreboard_index = vecRegOffset + reg.index();
ret = true;
break;
case VecElemClass:
scoreboard_index = vecRegElemOffset + reg.index();
ret = true;
break;
case VecPredRegClass:
scoreboard_index = vecPredRegOffset + reg.index();
ret = true;

View File

@@ -71,6 +71,7 @@ class Scoreboard : public Named
const unsigned floatRegOffset;
const unsigned ccRegOffset;
const unsigned vecRegOffset;
const unsigned vecRegElemOffset;
const unsigned vecPredRegOffset;
const unsigned matRegOffset;
@@ -115,7 +116,8 @@ class Scoreboard : public Named
floatRegOffset(intRegOffset + reg_classes.at(IntRegClass)->numRegs()),
ccRegOffset(floatRegOffset + reg_classes.at(FloatRegClass)->numRegs()),
vecRegOffset(ccRegOffset + reg_classes.at(CCRegClass)->numRegs()),
vecPredRegOffset(vecRegOffset +
vecRegElemOffset(vecRegOffset + reg_classes.at(VecRegClass)->numRegs()),
vecPredRegOffset(vecRegElemOffset +
reg_classes.at(VecElemClass)->numRegs()),
matRegOffset(vecPredRegOffset +
reg_classes.at(VecPredRegClass)->numRegs()),