Mesa (main): freedreno/isa: Fix ldg/stg "halfness"

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Tue Oct 19 16:23:38 UTC 2021


Module: Mesa
Branch: main
Commit: 22a203aa4c7aa2ae51e9cabe537ad20c191bfa5f
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=22a203aa4c7aa2ae51e9cabe537ad20c191bfa5f

Author: Rob Clark <robdclark at chromium.org>
Date:   Mon Oct 18 16:15:26 2021 -0700

freedreno/isa: Fix ldg/stg "halfness"

Whether the load dst or store src is a half reg is determined by the
type field, similar to cat5.

Signed-off-by: Rob Clark <robdclark at chromium.org>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/13426>

---

 src/freedreno/isa/ir3-cat5.xml   | 10 +---------
 src/freedreno/isa/ir3-cat6.xml   | 14 ++++++++------
 src/freedreno/isa/ir3-common.xml |  8 ++++++++
 3 files changed, 17 insertions(+), 15 deletions(-)

diff --git a/src/freedreno/isa/ir3-cat5.xml b/src/freedreno/isa/ir3-cat5.xml
index 38fa5b77c40..a129b75fb03 100644
--- a/src/freedreno/isa/ir3-cat5.xml
+++ b/src/freedreno/isa/ir3-cat5.xml
@@ -85,15 +85,7 @@ SOFTWARE.
 	<display>
 		{SY}{JP}{NAME}{3D}{A}{O}{P}{S} {TYPE}({WRMASK}){DST_HALF}{DST}{SRC1}{SRC2}{SAMP}{TEX}
 	</display>
-	<derived name="DST_HALF" type="bool" display="h">
-		<expr>
-			({TYPE} == 0) /* f16 */ ||
-			({TYPE} == 2) /* u16 */ ||
-			({TYPE} == 4) /* s16 */ ||
-			({TYPE} == 6) /* u8 */  ||
-			({TYPE} == 7) /* s8 */
-		</expr>
-	</derived>
+	<derived name="DST_HALF" expr="#type-half" type="bool" display="h"/>
 	<field name="FULL" pos="0" type="bool"/>
 	<derived name="HALF" expr="#multisrc-half" type="bool" display="h"/>
 	<field name="SRC1" low="1" high="8" type="#cat5-src1">
diff --git a/src/freedreno/isa/ir3-cat6.xml b/src/freedreno/isa/ir3-cat6.xml
index 825f4426224..7c1b2516f10 100644
--- a/src/freedreno/isa/ir3-cat6.xml
+++ b/src/freedreno/isa/ir3-cat6.xml
@@ -32,6 +32,8 @@ SOFTWARE.
 	<field   pos="59"          name="JP" type="bool" display="(jp)"/>
 	<field   pos="60"          name="SY" type="bool" display="(sy)"/>
 	<pattern low="61" high="63">110</pattern>  <!-- cat6 -->
+	<!-- is load dst / store src a half-reg? -->
+	<derived name="TYPE_HALF" expr="#type-half" type="bool" display="h"/>
 	<encode>
 		<map name="TYPE">src->cat6.type</map>
 	</encode>
@@ -59,7 +61,7 @@ SOFTWARE.
 	</doc>
 
 	<display>
-		{SY}{JP}{NAME}.{TYPE} {DST}, g[{SRC1}{OFF}], {SIZE}
+		{SY}{JP}{NAME}.{TYPE} {TYPE_HALF}{DST}, g[{SRC1}{OFF}], {SIZE}
 	</display>
 
 	<field low="1" high="13" name="OFF" type="offset"/>
@@ -79,12 +81,12 @@ SOFTWARE.
 	<gen min="600"/>
 
 	<display>
-		{SY}{JP}{NAME}.{TYPE} {DST}, g[{SRC1}+({SRC2}{OFF})<<{SRC2_BYTE_SHIFT}], {SIZE}
+		{SY}{JP}{NAME}.{TYPE} {TYPE_HALF}{DST}, g[{SRC1}+({SRC2}{OFF})<<{SRC2_BYTE_SHIFT}], {SIZE}
 	</display>
 
 	<override>
 		<display>
-			{SY}{JP}{NAME}.{TYPE} {DST}, g[{SRC1}+{SRC2}<<{SRC2_BYTE_SHIFT}{OFF}<<2], {SIZE}
+			{SY}{JP}{NAME}.{TYPE} {TYPE_HALF}{DST}, g[{SRC1}+{SRC2}<<{SRC2_BYTE_SHIFT}{OFF}<<2], {SIZE}
 		</display>
 		<expr>{SRC2_ADD_DWORD_SHIFT} > 0</expr>
 	</override>
@@ -129,7 +131,7 @@ SOFTWARE.
 	</doc>
 
 	<display>
-		{SY}{JP}{NAME}.{TYPE} g[{SRC1}{OFF}], {SRC3}, {SIZE}
+		{SY}{JP}{NAME}.{TYPE} g[{SRC1}{OFF}], {TYPE_HALF}{SRC3}, {SIZE}
 	</display>
 
 	<derived name="OFF" width="13" type="offset">
@@ -156,12 +158,12 @@ SOFTWARE.
 	<gen min="600"/>
 
 	<display>
-		{SY}{JP}{NAME}.{TYPE} g[{SRC1}+({SRC2}{OFF})<<{DST_BYTE_SHIFT}], {SRC3}, {SIZE}
+		{SY}{JP}{NAME}.{TYPE} g[{SRC1}+({SRC2}{OFF})<<{DST_BYTE_SHIFT}], {TYPE_HALF}{SRC3}, {SIZE}
 	</display>
 
 	<override>
 		<display>
-			{SY}{JP}{NAME}.{TYPE} g[{SRC1}+{SRC2}<<{DST_BYTE_SHIFT}{OFF}<<2], {SRC3}, {SIZE}
+			{SY}{JP}{NAME}.{TYPE} g[{SRC1}+{SRC2}<<{DST_BYTE_SHIFT}{OFF}<<2], {TYPE_HALF}{SRC3}, {SIZE}
 		</display>
 		<expr>{SRC2_ADD_DWORD_SHIFT} > 0</expr>
 	</override>
diff --git a/src/freedreno/isa/ir3-common.xml b/src/freedreno/isa/ir3-common.xml
index 2b7868336b2..b6717b557e3 100644
--- a/src/freedreno/isa/ir3-common.xml
+++ b/src/freedreno/isa/ir3-common.xml
@@ -308,6 +308,14 @@ SOFTWARE.
 	<value val="7" display="s8"/>
 </enum>
 
+<expr name="#type-half">
+	({TYPE} == 0) /* f16 */ ||
+	({TYPE} == 2) /* u16 */ ||
+	({TYPE} == 4) /* s16 */ ||
+	({TYPE} == 6) /* u8 */  ||
+	({TYPE} == 7) /* s8 */
+</expr>
+
 <enum name="#absneg">
 	<value val="0" display=""/>
 	<value val="1" display="(neg)"/>



More information about the mesa-commit mailing list