arch-vega: Make VGPR-offset for global SGPR-base signed
The VGPR-offset used when SGPR-base addressing is used can be signed in Vega. These are global instructions of the format: `global_load_dword v0, v1, s[0:1]`. This is not explicitly stated in the ISA manual however based on compiler output the offset can be negative. This changeset assigns the offset to a signed 32-bit integer and the compiler takes care of the signedness in the expression which calculates the final address. This fixes a bad address calculation in a rocPRIM unit test. Change-Id: I271edfbb4c6344cb1a6a69a0fd3df58a6198d599 Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/67412 Reviewed-by: Bobby Bruce <bbruce@ucdavis.edu> Maintainer: Bobby Bruce <bbruce@ucdavis.edu> Tested-by: kokoro <noreply+kokoro@google.com>
This commit is contained in:
@@ -1007,8 +1007,9 @@ namespace VegaISA
|
||||
// mask any upper bits from the vaddr.
|
||||
for (int lane = 0; lane < NumVecElemPerVecReg; ++lane) {
|
||||
if (gpuDynInst->exec_mask[lane]) {
|
||||
ScalarRegI32 voffset = vaddr[lane];
|
||||
gpuDynInst->addr.at(lane) =
|
||||
saddr.rawData() + (vaddr[lane] & 0xffffffff) + offset;
|
||||
saddr.rawData() + voffset + offset;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user