cpu-minor: Separate the reg_index of VecClassReg and VecElemReg (#225)

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.
This commit is contained in:
Bobby R. Bruce
2023-08-24 10:13:21 -07:00
committed by GitHub
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()),