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

Reply via email to