arch-vega: Update FLAT instructions to use offset
In Vega, flat instructions use an offset when computing the address (section 9.4 of chapter 9 'Flat Memory Instructions' in Vega ISA manual). This is different from the GCN3 baseline. Change-Id: I9fe36f028014889ef566055458c451442403a289 Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/42213 Tested-by: kokoro <noreply+kokoro@google.com> Reviewed-by: Matt Sinclair <mattdsinclair@gmail.com> Maintainer: Matt Sinclair <mattdsinclair@gmail.com>
This commit is contained in:
committed by
Matt Sinclair
parent
2bb8d6bc0c
commit
49f7565904
@@ -42461,7 +42461,7 @@ namespace VegaISA
|
||||
|
||||
addr.read();
|
||||
|
||||
calcAddr(gpuDynInst, addr);
|
||||
calcAddr(gpuDynInst, addr, instData.OFFSET);
|
||||
|
||||
if (isFlatGlobal()) {
|
||||
gpuDynInst->computeUnit()->globalMemoryPipe
|
||||
@@ -42552,7 +42552,7 @@ namespace VegaISA
|
||||
|
||||
addr.read();
|
||||
|
||||
calcAddr(gpuDynInst, addr);
|
||||
calcAddr(gpuDynInst, addr, instData.OFFSET);
|
||||
|
||||
if (isFlatGlobal()) {
|
||||
gpuDynInst->computeUnit()->globalMemoryPipe
|
||||
@@ -42644,7 +42644,7 @@ namespace VegaISA
|
||||
|
||||
addr.read();
|
||||
|
||||
calcAddr(gpuDynInst, addr);
|
||||
calcAddr(gpuDynInst, addr, instData.OFFSET);
|
||||
|
||||
if (isFlatGlobal()) {
|
||||
gpuDynInst->computeUnit()->globalMemoryPipe
|
||||
@@ -42707,7 +42707,7 @@ namespace VegaISA
|
||||
|
||||
addr.read();
|
||||
|
||||
calcAddr(gpuDynInst, addr);
|
||||
calcAddr(gpuDynInst, addr, instData.OFFSET);
|
||||
|
||||
if (isFlatGlobal()) {
|
||||
gpuDynInst->computeUnit()->globalMemoryPipe
|
||||
@@ -42770,7 +42770,7 @@ namespace VegaISA
|
||||
|
||||
addr.read();
|
||||
|
||||
calcAddr(gpuDynInst, addr);
|
||||
calcAddr(gpuDynInst, addr, instData.OFFSET);
|
||||
|
||||
if (isFlatGlobal()) {
|
||||
gpuDynInst->computeUnit()->globalMemoryPipe
|
||||
@@ -42841,7 +42841,7 @@ namespace VegaISA
|
||||
|
||||
addr.read();
|
||||
|
||||
calcAddr(gpuDynInst, addr);
|
||||
calcAddr(gpuDynInst, addr, instData.OFFSET);
|
||||
|
||||
if (isFlatGlobal()) {
|
||||
gpuDynInst->computeUnit()->globalMemoryPipe
|
||||
@@ -42920,7 +42920,7 @@ namespace VegaISA
|
||||
data.read();
|
||||
|
||||
|
||||
calcAddr(gpuDynInst, addr);
|
||||
calcAddr(gpuDynInst, addr, instData.OFFSET);
|
||||
|
||||
for (int lane = 0; lane < NumVecElemPerVecReg; ++lane) {
|
||||
if (gpuDynInst->exec_mask[lane]) {
|
||||
@@ -42983,7 +42983,7 @@ namespace VegaISA
|
||||
addr.read();
|
||||
data.read();
|
||||
|
||||
calcAddr(gpuDynInst, addr);
|
||||
calcAddr(gpuDynInst, addr, instData.OFFSET);
|
||||
|
||||
for (int lane = 0; lane < NumVecElemPerVecReg; ++lane) {
|
||||
if (gpuDynInst->exec_mask[lane]) {
|
||||
@@ -43046,7 +43046,7 @@ namespace VegaISA
|
||||
addr.read();
|
||||
data.read();
|
||||
|
||||
calcAddr(gpuDynInst, addr);
|
||||
calcAddr(gpuDynInst, addr, instData.OFFSET);
|
||||
|
||||
for (int lane = 0; lane < NumVecElemPerVecReg; ++lane) {
|
||||
if (gpuDynInst->exec_mask[lane]) {
|
||||
@@ -43117,7 +43117,7 @@ namespace VegaISA
|
||||
}
|
||||
}
|
||||
|
||||
calcAddr(gpuDynInst, addr);
|
||||
calcAddr(gpuDynInst, addr, instData.OFFSET);
|
||||
|
||||
if (isFlatGlobal()) {
|
||||
gpuDynInst->computeUnit()->globalMemoryPipe
|
||||
@@ -43178,7 +43178,7 @@ namespace VegaISA
|
||||
data1.read();
|
||||
data2.read();
|
||||
|
||||
calcAddr(gpuDynInst, addr);
|
||||
calcAddr(gpuDynInst, addr, instData.OFFSET);
|
||||
|
||||
for (int lane = 0; lane < NumVecElemPerVecReg; ++lane) {
|
||||
if (gpuDynInst->exec_mask[lane]) {
|
||||
@@ -43252,7 +43252,7 @@ namespace VegaISA
|
||||
data2.read();
|
||||
data3.read();
|
||||
|
||||
calcAddr(gpuDynInst, addr);
|
||||
calcAddr(gpuDynInst, addr, instData.OFFSET);
|
||||
|
||||
for (int lane = 0; lane < NumVecElemPerVecReg; ++lane) {
|
||||
if (gpuDynInst->exec_mask[lane]) {
|
||||
@@ -43329,7 +43329,7 @@ namespace VegaISA
|
||||
addr.read();
|
||||
data.read();
|
||||
|
||||
calcAddr(gpuDynInst, addr);
|
||||
calcAddr(gpuDynInst, addr, instData.OFFSET);
|
||||
|
||||
for (int lane = 0; lane < NumVecElemPerVecReg; ++lane) {
|
||||
if (gpuDynInst->exec_mask[lane]) {
|
||||
@@ -43417,7 +43417,7 @@ namespace VegaISA
|
||||
data.read();
|
||||
cmp.read();
|
||||
|
||||
calcAddr(gpuDynInst, addr);
|
||||
calcAddr(gpuDynInst, addr, instData.OFFSET);
|
||||
|
||||
for (int lane = 0; lane < NumVecElemPerVecReg; ++lane) {
|
||||
if (gpuDynInst->exec_mask[lane]) {
|
||||
@@ -43501,7 +43501,7 @@ namespace VegaISA
|
||||
addr.read();
|
||||
data.read();
|
||||
|
||||
calcAddr(gpuDynInst, addr);
|
||||
calcAddr(gpuDynInst, addr, instData.OFFSET);
|
||||
for (int lane = 0; lane < NumVecElemPerVecReg; ++lane) {
|
||||
if (gpuDynInst->exec_mask[lane]) {
|
||||
(reinterpret_cast<VecElemU32*>(gpuDynInst->a_data))[lane]
|
||||
@@ -43894,7 +43894,7 @@ namespace VegaISA
|
||||
}
|
||||
}
|
||||
|
||||
calcAddr(gpuDynInst, addr);
|
||||
calcAddr(gpuDynInst, addr, instData.OFFSET);
|
||||
|
||||
if (isFlatGlobal()) {
|
||||
gpuDynInst->computeUnit()->globalMemoryPipe.
|
||||
@@ -43970,7 +43970,7 @@ namespace VegaISA
|
||||
addr.read();
|
||||
data.read();
|
||||
|
||||
calcAddr(gpuDynInst, addr);
|
||||
calcAddr(gpuDynInst, addr, instData.OFFSET);
|
||||
|
||||
for (int lane = 0; lane < NumVecElemPerVecReg; ++lane) {
|
||||
if (gpuDynInst->exec_mask[lane]) {
|
||||
|
||||
@@ -789,11 +789,12 @@ namespace VegaISA
|
||||
}
|
||||
|
||||
void
|
||||
calcAddr(GPUDynInstPtr gpuDynInst, ConstVecOperandU64 &addr)
|
||||
calcAddr(GPUDynInstPtr gpuDynInst, ConstVecOperandU64 &addr,
|
||||
ScalarRegU32 offset)
|
||||
{
|
||||
for (int lane = 0; lane < NumVecElemPerVecReg; ++lane) {
|
||||
if (gpuDynInst->exec_mask[lane]) {
|
||||
gpuDynInst->addr.at(lane) = addr[lane];
|
||||
gpuDynInst->addr.at(lane) = addr[lane] + offset;
|
||||
}
|
||||
}
|
||||
gpuDynInst->resolveFlatSegment(gpuDynInst->exec_mask);
|
||||
|
||||
Reference in New Issue
Block a user