Mesa (master): intel/tools: Manually set ARF register file/nr/subnr

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Fri Jul 31 20:40:48 UTC 2020


Module: Mesa
Branch: master
Commit: 90c18ec8db8bed6e1a12ce0a5209c5d4ff1abf99
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=90c18ec8db8bed6e1a12ce0a5209c5d4ff1abf99

Author: Matt Turner <mattst88 at gmail.com>
Date:   Wed Jul 15 22:21:09 2020 -0700

intel/tools: Manually set ARF register file/nr/subnr

brw_reg::subnr is in bytes, like the subnr field in the instruction
word, but we disassemble the subregister number in units of the type.
For example g0.3<1>F would have a subnr=12.

These non-terminals produce a brw_reg and feed into other non-terminals
that call brw_reg(), where they are passed the subnr that we set here.
brw_reg()'s subnr parameter is expected to be in terms of the register
type, and it is multiplied by the type size to calculate the subnr in
bytes.

In these non-terminals, we don't know the register type yet, so we
must store the subregister number as it was given to us in the .subnr
field and let the brw_reg() constructor handle the conversion to the
canonical byte-based subnr form when it knows the type.

Before this patch, subregister numbers applied to these registers would
be multiplied with the type size twice.

Reviewed-by: Sagar Ghuge <sagar.ghuge at intel.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/5956>

---

 src/intel/tools/i965_gram.y | 26 ++++++++++++++++----------
 1 file changed, 16 insertions(+), 10 deletions(-)

diff --git a/src/intel/tools/i965_gram.y b/src/intel/tools/i965_gram.y
index 44a25018c56..d2cb05cfb9b 100644
--- a/src/intel/tools/i965_gram.y
+++ b/src/intel/tools/i965_gram.y
@@ -1722,7 +1722,8 @@ indirectgenreg:
 directmsgreg:
 	MSGREG subregnum
 	{
-		$$ = brw_message_reg($1);
+		$$.file = BRW_MESSAGE_REGISTER_FILE;
+		$$.nr = $1;
 		$$.subnr = $2;
 	}
 	;
@@ -1799,7 +1800,9 @@ maskreg:
 			error(&@1, "Mask register number %d"
 				   " out of range\n", $1);
 
-		$$ = brw_mask_reg($2);
+		$$.file = BRW_ARCHITECTURE_REGISTER_FILE;
+		$$.nr = BRW_ARF_MASK;
+		$$.subnr = $2;
 	}
 	;
 
@@ -1815,7 +1818,8 @@ notifyreg:
 			error(&@2, "Notification sub register number %d"
 				   " out of range\n", $2);
 
-		$$ = brw_notification_reg();
+		$$.file = BRW_ARCHITECTURE_REGISTER_FILE;
+		$$.nr = BRW_ARF_NOTIFICATION_COUNT;
 		$$.subnr = $2;
 	}
 	;
@@ -1844,7 +1848,9 @@ controlreg:
 			error(&@2, "control sub register number %d"
 				   " out of range\n", $2);
 
-		$$ = brw_cr0_reg($2);
+		$$.file = BRW_ARCHITECTURE_REGISTER_FILE;
+		$$.nr = BRW_ARF_CONTROL;
+		$$.subnr = $2;
 	}
 	;
 
@@ -1859,15 +1865,12 @@ nullreg:
 threadcontrolreg:
 	THREADREG subregnum
 	{
-		if ($1 > 0)
-			error(&@1, "Thread control register number %d"
-				   " out of range\n", $1);
-
 		if ($2 > 7)
 			error(&@2, "Thread control sub register number %d"
 				   " out of range\n", $2);
 
-		$$ = brw_tdr_reg();
+		$$.file = BRW_ARCHITECTURE_REGISTER_FILE;
+		$$.nr = BRW_ARF_TDR;
 		$$.subnr = $2;
 	}
 	;
@@ -1889,6 +1892,7 @@ performancereg:
 
 		$$.file = BRW_ARCHITECTURE_REGISTER_FILE;
 		$$.nr = BRW_ARF_TIMESTAMP;
+		$$.subnr = $2;
 	}
 	;
 
@@ -1899,7 +1903,9 @@ channelenablereg:
 			error(&@1, "Channel enable register number %d"
 				   " out of range\n", $1);
 
-		$$ = brw_mask_reg($2);
+		$$.file = BRW_ARCHITECTURE_REGISTER_FILE;
+		$$.nr = BRW_ARF_MASK;
+		$$.subnr = $2;
 	}
 	;
 



More information about the mesa-commit mailing list