Mesa (main): freedreno/isa: Add immed reg accessors
GitLab Mirror
gitlab-mirror at kemper.freedesktop.org
Fri Oct 15 16:29:52 UTC 2021
Module: Mesa
Branch: main
Commit: 0480595d03e95efbc7ca38083549c37d70de5ae0
URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=0480595d03e95efbc7ca38083549c37d70de5ae0
Author: Rob Clark <robdclark at chromium.org>
Date: Wed Oct 13 15:53:55 2021 -0700
freedreno/isa: Add immed reg accessors
This way we can assert that a src that we expect to be an immediate
actually is.
Signed-off-by: Rob Clark <robdclark at chromium.org>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/13353>
---
src/freedreno/isa/encode.c | 14 ++++++++++++++
src/freedreno/isa/ir3-cat1.xml | 2 +-
src/freedreno/isa/ir3-cat3.xml | 2 +-
src/freedreno/isa/ir3-cat6.xml | 36 ++++++++++++++++++------------------
src/freedreno/isa/ir3-common.xml | 4 ++--
5 files changed, 36 insertions(+), 22 deletions(-)
diff --git a/src/freedreno/isa/encode.c b/src/freedreno/isa/encode.c
index cbd7ef68e32..5b89353ec23 100644
--- a/src/freedreno/isa/encode.c
+++ b/src/freedreno/isa/encode.c
@@ -145,6 +145,20 @@ extract_ABSNEG(struct ir3_register *reg)
}
}
+static inline int32_t
+extract_reg_iim(struct ir3_register *reg)
+{
+ assert(reg->flags & IR3_REG_IMMED);
+ return reg->iim_val;
+}
+
+static inline uint32_t
+extract_reg_uim(struct ir3_register *reg)
+{
+ assert(reg->flags & IR3_REG_IMMED);
+ return reg->uim_val;
+}
+
/**
* This is a bit messy, to deal with the fact that the optional "s2en"
* src is the first src, shifting everything else up by one.
diff --git a/src/freedreno/isa/ir3-cat1.xml b/src/freedreno/isa/ir3-cat1.xml
index 384de201626..34a893b1cf5 100644
--- a/src/freedreno/isa/ir3-cat1.xml
+++ b/src/freedreno/isa/ir3-cat1.xml
@@ -207,7 +207,7 @@ SOFTWARE.
<field name="IMMED" low="0" high="31" type="uint"/>
<encode type="struct ir3_register *">
- <map name="IMMED">src->uim_val</map>
+ <map name="IMMED">extract_reg_uim(src)</map>
</encode>
</bitset>
diff --git a/src/freedreno/isa/ir3-cat3.xml b/src/freedreno/isa/ir3-cat3.xml
index 5e638e1543e..18491e2a1af 100644
--- a/src/freedreno/isa/ir3-cat3.xml
+++ b/src/freedreno/isa/ir3-cat3.xml
@@ -69,7 +69,7 @@ SOFTWARE.
<encode>
<map name="CONST">src->num >> 2</map>
<map name="SWIZ">src->num & 0x3</map>
- <map name="IMMED">src->uim_val</map>
+ <map name="IMMED">extract_reg_uim(src)</map>
</encode>
</bitset>
diff --git a/src/freedreno/isa/ir3-cat6.xml b/src/freedreno/isa/ir3-cat6.xml
index 5deb3287680..825f4426224 100644
--- a/src/freedreno/isa/ir3-cat6.xml
+++ b/src/freedreno/isa/ir3-cat6.xml
@@ -66,8 +66,8 @@ SOFTWARE.
<pattern pos="22" >0</pattern> <!-- Imm offset ldg form -->
<encode>
- <map name="OFF">src->srcs[1]->iim_val</map>
- <map name="SIZE">src->srcs[2]->uim_val</map>
+ <map name="OFF">extract_reg_iim(src->srcs[1])</map>
+ <map name="SIZE">extract_reg_uim(src->srcs[2])</map>
</encode>
</bitset>
@@ -101,9 +101,9 @@ SOFTWARE.
<encode>
<map name="SRC2">src->srcs[1]</map>
- <map name="SRC2_ADD_DWORD_SHIFT">src->srcs[2]->uim_val</map>
- <map name="OFF">src->srcs[3]->uim_val</map>
- <map name="SIZE">src->srcs[4]->uim_val</map>
+ <map name="SRC2_ADD_DWORD_SHIFT">extract_reg_uim(src->srcs[2])</map>
+ <map name="OFF">extract_reg_uim(src->srcs[3])</map>
+ <map name="SIZE">extract_reg_uim(src->srcs[4])</map>
</encode>
</bitset>
@@ -141,10 +141,10 @@ SOFTWARE.
<pattern pos="52" >0</pattern> <!-- Imm offset stg form -->
<encode>
- <map name="OFF_LO">src->srcs[1]->iim_val & 0xff</map>
- <map name="OFF_HI">src->srcs[1]->iim_val >> 8</map>
+ <map name="OFF_LO">extract_reg_iim(src->srcs[1]) & 0xff</map>
+ <map name="OFF_HI">extract_reg_iim(src->srcs[1]) >> 8</map>
<map name="SRC3">src->srcs[2]</map>
- <map name="SIZE">src->srcs[3]->uim_val</map>
+ <map name="SIZE">extract_reg_uim(src->srcs[3])</map>
</encode>
</bitset>
@@ -178,10 +178,10 @@ SOFTWARE.
<encode>
<map name="SRC2">src->srcs[1]</map>
- <map name="SRC2_ADD_DWORD_SHIFT">src->srcs[2]->uim_val</map>
- <map name="OFF">src->srcs[3]->uim_val</map>
+ <map name="SRC2_ADD_DWORD_SHIFT">extract_reg_uim(src->srcs[2])</map>
+ <map name="OFF">extract_reg_uim(src->srcs[3])</map>
<map name="SRC3">src->srcs[4]</map>
- <map name="SIZE">src->srcs[5]->uim_val</map>
+ <map name="SIZE">extract_reg_uim(src->srcs[5])</map>
</encode>
</bitset>
@@ -196,9 +196,9 @@ SOFTWARE.
<pattern low="40" high="48">xxxxxxxxx</pattern>
<pattern low="52" high="53">xx</pattern>
<encode>
- <map name="OFF">src->srcs[1]->uim_val</map>
+ <map name="OFF">extract_reg_uim(src->srcs[1])</map>
<map name="SRC">src->srcs[0]</map>
- <map name="SIZE">src->srcs[2]->uim_val</map>
+ <map name="SIZE">extract_reg_uim(src->srcs[2])</map>
</encode>
</bitset>
@@ -249,8 +249,8 @@ SOFTWARE.
<pattern low="52" high="53">xx</pattern>
<pattern low="54" high="58">11111</pattern> <!-- OPC -->
<encode>
- <map name="SIZE">src->srcs[1]->uim_val</map>
- <map name="OFF">src->srcs[0]->uim_val</map>
+ <map name="SIZE">extract_reg_uim(src->srcs[1])</map>
+ <map name="OFF">extract_reg_uim(src->srcs[0])</map>
</encode>
</bitset>
@@ -278,7 +278,7 @@ SOFTWARE.
<map name="OFF_LO">src->cat6.dst_offset & 0xff</map>
<map name="SRC">src->srcs[1]</map>
<map name="DST">src->srcs[0]</map>"
- <map name="SIZE">src->srcs[2]->uim_val</map>
+ <map name="SIZE">extract_reg_uim(src->srcs[2])</map>
</encode>
</bitset>
@@ -343,7 +343,7 @@ SOFTWARE.
<pattern low="52" high="53">xx</pattern>
<pattern low="54" high="58">11100</pattern> <!-- OPC -->
<encode>
- <map name="DST">src->srcs[0]->uim_val</map>
+ <map name="DST">extract_reg_uim(src->srcs[0])</map>
<map name="SRC">src->srcs[1]</map>
</encode>
</bitset>
@@ -902,7 +902,7 @@ SOFTWARE.
<encode type="struct ir3_register *">
<map name="GPR">src->num >> 2</map>
<map name="SWIZ">src->num & 0x3</map>
- <map name="IMMED">src->iim_val</map>
+ <map name="IMMED">extract_reg_iim(src)</map>
</encode>
</bitset>
diff --git a/src/freedreno/isa/ir3-common.xml b/src/freedreno/isa/ir3-common.xml
index b31ebc1de27..2b7868336b2 100644
--- a/src/freedreno/isa/ir3-common.xml
+++ b/src/freedreno/isa/ir3-common.xml
@@ -149,7 +149,7 @@ SOFTWARE.
<pattern low="11" high="13">100</pattern>
<field name="ABSNEG" low="14" high="15" type="#absneg"/>
<encode>
- <map name="IMMED">src->iim_val</map>
+ <map name="IMMED">extract_reg_iim(src)</map>
</encode>
</bitset>
@@ -175,7 +175,7 @@ SOFTWARE.
<pattern low="11" high="13">101</pattern>
<field name="ABSNEG" low="14" high="15" type="#absneg"/>
<encode>
- <map name="IMMED">src->uim_val</map>
+ <map name="IMMED">extract_reg_uim(src)</map>
</encode>
</bitset>
More information about the mesa-commit
mailing list