arch-gcn3: Validate if scalar sources are scalar gprs
Scalar sources can either be a general-purpose register or a constant register that holds a single value. If we don't check for if the register is a general-purpose register, it's possible that we get a constant register, which then causes all of the register mapping code to break, as the constant registers aren't supposed to be mapped like the general-purpose registers are. This fix adds an isScalarReg check to the instruction encodings that were missing it. Change-Id: I3d7d5393aa324737301c3269cc227b60e8a159e4 Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/48344 Tested-by: kokoro <noreply+kokoro@google.com> Reviewed-by: Matt Sinclair <mattdsinclair@gmail.com> Reviewed-by: Bobby R. Bruce <bbruce@ucdavis.edu> Reviewed-by: Matthew Poremba <matthew.poremba@amd.com> Maintainer: Matt Sinclair <mattdsinclair@gmail.com>
This commit is contained in:
committed by
Matt Sinclair
parent
9a7fc4ff69
commit
1577897265
@@ -1277,12 +1277,12 @@ namespace Gcn3ISA
|
||||
|
||||
reg = extData.SRSRC;
|
||||
srcOps.emplace_back(reg, getOperandSize(opNum), true,
|
||||
true, false, false);
|
||||
isScalarReg(reg), false, false);
|
||||
opNum++;
|
||||
|
||||
reg = extData.SOFFSET;
|
||||
srcOps.emplace_back(reg, getOperandSize(opNum), true,
|
||||
true, false, false);
|
||||
isScalarReg(reg), false, false);
|
||||
opNum++;
|
||||
}
|
||||
|
||||
@@ -1368,12 +1368,12 @@ namespace Gcn3ISA
|
||||
|
||||
reg = extData.SRSRC;
|
||||
srcOps.emplace_back(reg, getOperandSize(opNum), true,
|
||||
true, false, false);
|
||||
isScalarReg(reg), false, false);
|
||||
opNum++;
|
||||
|
||||
reg = extData.SOFFSET;
|
||||
srcOps.emplace_back(reg, getOperandSize(opNum), true,
|
||||
true, false, false);
|
||||
isScalarReg(reg), false, false);
|
||||
opNum++;
|
||||
|
||||
// extData.VDATA moves in the reg list depending on the instruction
|
||||
@@ -1441,13 +1441,13 @@ namespace Gcn3ISA
|
||||
|
||||
reg = extData.SRSRC;
|
||||
srcOps.emplace_back(reg, getOperandSize(opNum), true,
|
||||
true, false, false);
|
||||
isScalarReg(reg), false, false);
|
||||
opNum++;
|
||||
|
||||
if (getNumOperands() == 4) {
|
||||
reg = extData.SSAMP;
|
||||
srcOps.emplace_back(reg, getOperandSize(opNum), true,
|
||||
true, false, false);
|
||||
isScalarReg(reg), false, false);
|
||||
opNum++;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user