Matt Sinclair has submitted this change. (
https://gem5-review.googlesource.com/c/public/gem5/+/42213 )
Change subject: arch-vega: Update FLAT instructions to use offset
......................................................................
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 <[email protected]>
Reviewed-by: Matt Sinclair <[email protected]>
Maintainer: Matt Sinclair <[email protected]>
---
M src/arch/amdgpu/vega/insts/instructions.cc
M src/arch/amdgpu/vega/insts/op_encodings.hh
2 files changed, 20 insertions(+), 19 deletions(-)
Approvals:
Matt Sinclair: Looks good to me, approved; Looks good to me, approved
kokoro: Regressions pass
diff --git a/src/arch/amdgpu/vega/insts/instructions.cc
b/src/arch/amdgpu/vega/insts/instructions.cc
index 281fd95..0a01bf2 100644
--- a/src/arch/amdgpu/vega/insts/instructions.cc
+++ b/src/arch/amdgpu/vega/insts/instructions.cc
@@ -42461,7 +42461,7 @@
addr.read();
- calcAddr(gpuDynInst, addr);
+ calcAddr(gpuDynInst, addr, instData.OFFSET);
if (isFlatGlobal()) {
gpuDynInst->computeUnit()->globalMemoryPipe
@@ -42552,7 +42552,7 @@
addr.read();
- calcAddr(gpuDynInst, addr);
+ calcAddr(gpuDynInst, addr, instData.OFFSET);
if (isFlatGlobal()) {
gpuDynInst->computeUnit()->globalMemoryPipe
@@ -42644,7 +42644,7 @@
addr.read();
- calcAddr(gpuDynInst, addr);
+ calcAddr(gpuDynInst, addr, instData.OFFSET);
if (isFlatGlobal()) {
gpuDynInst->computeUnit()->globalMemoryPipe
@@ -42707,7 +42707,7 @@
addr.read();
- calcAddr(gpuDynInst, addr);
+ calcAddr(gpuDynInst, addr, instData.OFFSET);
if (isFlatGlobal()) {
gpuDynInst->computeUnit()->globalMemoryPipe
@@ -42770,7 +42770,7 @@
addr.read();
- calcAddr(gpuDynInst, addr);
+ calcAddr(gpuDynInst, addr, instData.OFFSET);
if (isFlatGlobal()) {
gpuDynInst->computeUnit()->globalMemoryPipe
@@ -42841,7 +42841,7 @@
addr.read();
- calcAddr(gpuDynInst, addr);
+ calcAddr(gpuDynInst, addr, instData.OFFSET);
if (isFlatGlobal()) {
gpuDynInst->computeUnit()->globalMemoryPipe
@@ -42920,7 +42920,7 @@
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 @@
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 @@
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 @@
}
}
- calcAddr(gpuDynInst, addr);
+ calcAddr(gpuDynInst, addr, instData.OFFSET);
if (isFlatGlobal()) {
gpuDynInst->computeUnit()->globalMemoryPipe
@@ -43178,7 +43178,7 @@
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 @@
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 @@
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 @@
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 @@
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 @@
}
}
- calcAddr(gpuDynInst, addr);
+ calcAddr(gpuDynInst, addr, instData.OFFSET);
if (isFlatGlobal()) {
gpuDynInst->computeUnit()->globalMemoryPipe.
@@ -43970,7 +43970,7 @@
addr.read();
data.read();
- calcAddr(gpuDynInst, addr);
+ calcAddr(gpuDynInst, addr, instData.OFFSET);
for (int lane = 0; lane < NumVecElemPerVecReg; ++lane) {
if (gpuDynInst->exec_mask[lane]) {
diff --git a/src/arch/amdgpu/vega/insts/op_encodings.hh
b/src/arch/amdgpu/vega/insts/op_encodings.hh
index ff98ff5..289a0ba 100644
--- a/src/arch/amdgpu/vega/insts/op_encodings.hh
+++ b/src/arch/amdgpu/vega/insts/op_encodings.hh
@@ -789,11 +789,12 @@
}
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);
3 is the latest approved patch-set.
No files were changed between the latest approved patch-set and the
submitted one.
--
To view, visit https://gem5-review.googlesource.com/c/public/gem5/+/42213
To unsubscribe, or for help writing mail filters, visit
https://gem5-review.googlesource.com/settings
Gerrit-Project: public/gem5
Gerrit-Branch: develop
Gerrit-Change-Id: I9fe36f028014889ef566055458c451442403a289
Gerrit-Change-Number: 42213
Gerrit-PatchSet: 7
Gerrit-Owner: Alex Dutu <[email protected]>
Gerrit-Reviewer: Matt Sinclair <[email protected]>
Gerrit-Reviewer: Matthew Poremba <[email protected]>
Gerrit-Reviewer: kokoro <[email protected]>
Gerrit-CC: Bobby R. Bruce <[email protected]>
Gerrit-CC: Kyle Roarty <[email protected]>
Gerrit-MessageType: merged
_______________________________________________
gem5-dev mailing list -- [email protected]
To unsubscribe send an email to [email protected]
%(web_page_url)slistinfo%(cgiext)s/%(_internal_name)s