public inbox for binutils@sourceware.org
 help / color / mirror / Atom feed
From: Jens Remus <jremus@linux.ibm.com>
To: binutils@sourceware.org
Cc: Jens Remus <jremus@linux.ibm.com>,
	Andreas Krebbel <krebbel@linux.ibm.com>
Subject: [PATCH 12/14] s390: Allow to explicitly omit base register operand in assembly
Date: Thu, 15 Feb 2024 16:58:19 +0100	[thread overview]
Message-ID: <20240215155821.4065623-13-jremus@linux.ibm.com> (raw)
In-Reply-To: <20240215155821.4065623-1-jremus@linux.ibm.com>

The base register operand B may be omitted in D(B) by coding D and in
D(L,B) by coding D(L). The index register operand X may be omitted in
D(X,B) by coding D(B) or explicitly omitted by coding D(,B). In both
cases the omitted base register operand value defaults to zero.

Allow to explicitly omit the base register operand B in D(X,B) and
D(L,B) by coding D(X,) and D(L,). Default the omitted base register
operand value to zero.

gas/
	* config/tc-s390.c: Allow to explicitly omit the base register
	  operand in assembly.
	* NEWS: Mention that the base register now may be omitted on
	  s390.
	* gas/testsuite/gas/s390/zarch-base-index-0.s: Update test cases
	  for change to allow to explicitly omit the base register
	  operand in assembly.
	* gas/testsuite/gas/s390/zarch-base-index-0.d: Likewise.
	* gas/testsuite/gas/s390/zarch-base-index-0-err.s: Likewise.
	* gas/testsuite/gas/s390/zarch-base-index-0-err.l: Likewise.
	* gas/testsuite/gas/s390/zarch-omitted-base-index.s: Likewise.
	* gas/testsuite/gas/s390/zarch-omitted-base-index.d: Likewise.
	* gas/testsuite/gas/s390/zarch-omitted-base-index-err.s:
	  Likewise.
	* gas/testsuite/gas/s390/zarch-omitted-base-index-err.l:
	  Likewise.

Reviewed-by: Andreas Krebbel <krebbel@linux.ibm.com>
Signed-off-by: Jens Remus <jremus@linux.ibm.com>
---
 gas/NEWS                                      |   4 +
 gas/config/tc-s390.c                          |  10 +-
 .../gas/s390/zarch-base-index-0-err.l         | 156 ++++++------------
 .../gas/s390/zarch-base-index-0-err.s         |  19 ---
 gas/testsuite/gas/s390/zarch-base-index-0.d   |  19 +++
 gas/testsuite/gas/s390/zarch-base-index-0.s   |  38 ++---
 .../gas/s390/zarch-omitted-base-index-err.l   |  32 ++--
 .../gas/s390/zarch-omitted-base-index-err.s   |   2 -
 .../gas/s390/zarch-omitted-base-index.d       |   3 +
 .../gas/s390/zarch-omitted-base-index.s       |   2 +
 10 files changed, 120 insertions(+), 165 deletions(-)

diff --git a/gas/NEWS b/gas/NEWS
index e5572da5f7b8..f862547ac748 100644
--- a/gas/NEWS
+++ b/gas/NEWS
@@ -1,5 +1,9 @@
 -*- text -*-
 
+* The base register operand in D(X,B) and D(L,B) may be explicitly omitted
+  in assembly on s390. It can now be coded as D(X,) or D(L,) instead of D(X,0)
+  D(X,%r0), D(L,0), and D(L,%r0).
+
 * Warn when a register name type does not match the operand type on s390.
   Add support for s390-specific option "warn-regtype-mismatch=[strict|relaxed|
   no]" to override the register name type check behavior. The default
diff --git a/gas/config/tc-s390.c b/gas/config/tc-s390.c
index daa44bb3f816..85a86d590ad1 100644
--- a/gas/config/tc-s390.c
+++ b/gas/config/tc-s390.c
@@ -1683,13 +1683,17 @@ md_gather_operands (char *str,
       else
 	{
 	  /* We can find an 'early' closing parentheses in e.g. D(L) instead
-	     of D(L,B).  In this case the base register has to be skipped.  */
-	  if (*str == ')')
+	     of D(L,B). In this case the base register has to be skipped.
+	     Same if the base register has been explicilty omitted in e.g.
+	     D(X,) or D(L,).  */
+	  if (*str == ')' || (str[0] == ',' && str[1] == ')'))
 	    {
 	      operand = s390_operands + *(++opindex_ptr);
 
 	      if (!(operand->flags & S390_OPERAND_BASE))
-		as_bad (_("syntax error; ')' not allowed here"));
+		as_bad (_("syntax error; '%c' not allowed here"), *str);
+	      if (*str == ',')
+		str++;
 	      str++;
 	    }
 
diff --git a/gas/testsuite/gas/s390/zarch-base-index-0-err.l b/gas/testsuite/gas/s390/zarch-base-index-0-err.l
index 1762b6ec0813..e7d03ecdfe11 100644
--- a/gas/testsuite/gas/s390/zarch-base-index-0-err.l
+++ b/gas/testsuite/gas/s390/zarch-base-index-0-err.l
@@ -5,122 +5,70 @@
 .*:8: Error: syntax error; missing '\)' after base register
 .*:9: Error: bad expression
 .*:9: Error: syntax error; missing '\)' after base register
-.*:10: Error: bad expression
-.*:10: Error: syntax error; missing '\)' after base register
-.*:11: Error: bad expression
-.*:11: Error: syntax error; missing '\)' after base register
 .*:12: Error: bad expression
 .*:12: Error: syntax error; missing '\)' after base register
+.*:13: Error: bad expression
+.*:13: Error: syntax error; missing '\)' after base register
+.*:14: Error: bad expression
+.*:14: Error: syntax error; missing '\)' after base register
 .*:15: Error: bad expression
 .*:15: Error: syntax error; missing '\)' after base register
 .*:16: Error: bad expression
 .*:16: Error: syntax error; missing '\)' after base register
-.*:17: Error: bad expression
-.*:17: Error: syntax error; missing '\)' after base register
-.*:18: Error: bad expression
-.*:18: Error: syntax error; missing '\)' after base register
-.*:19: Error: bad expression
-.*:19: Error: syntax error; missing '\)' after base register
-.*:20: Error: bad expression
-.*:20: Error: syntax error; missing '\)' after base register
+.*:17: Error: operand out of range \(0 is not between 1 and 256\)
+.*:18: Error: missing operand
+.*:19: Error: missing operand
+.*:20: Error: missing operand
 .*:21: Error: bad expression
+.*:21: Error: operand out of range \(0 is not between 1 and 256\)
+.*:21: Error: operand out of range \(32 is not between 0 and 15\)
 .*:21: Error: syntax error; missing '\)' after base register
+.*:21: Error: syntax error; expected ','
 .*:21: Error: bad expression
+.*:21: Error: found 'r', expected: '\)'
 .*:21: Error: syntax error; missing '\)' after base register
-.*:22: Error: bad expression
-.*:22: Error: syntax error; missing '\)' after base register
-.*:23: Error: bad expression
-.*:23: Error: syntax error; missing '\)' after base register
-.*:24: Error: operand out of range \(0 is not between 1 and 256\)
-.*:25: Error: missing operand
-.*:26: Error: missing operand
+.*:21: Error: junk at end of line: `r2\)'
+.*:22: Error: syntax error; missing '\(' after displacement
+.*:23: Error: invalid length field specified
+.*:26: Error: operand out of range \(0 is not between 1 and 16\)
 .*:27: Error: missing operand
-.*:27: Error: bad expression
-.*:27: Error: syntax error; missing '\)' after base register
-.*:28: Error: bad expression
-.*:28: Error: operand out of range \(0 is not between 1 and 256\)
-.*:28: Error: operand out of range \(32 is not between 0 and 15\)
-.*:28: Error: syntax error; missing '\)' after base register
-.*:28: Error: syntax error; expected ','
-.*:28: Error: bad expression
-.*:28: Error: found 'r', expected: '\)'
-.*:28: Error: syntax error; missing '\)' after base register
-.*:28: Error: junk at end of line: `r2\)'
-.*:29: Error: syntax error; missing '\(' after displacement
-.*:30: Error: invalid length field specified
-.*:33: Error: bad expression
-.*:33: Error: syntax error; missing '\)' after base register
-.*:34: Error: bad expression
-.*:34: Error: syntax error; missing '\)' after base register
-.*:35: Error: bad expression
-.*:35: Error: syntax error; missing '\)' after base register
+.*:28: Error: missing operand
+.*:29: Error: missing operand
+.*:30: Error: bad expression
+.*:30: Error: operand out of range \(0 is not between 1 and 16\)
+.*:30: Error: operand out of range \(32 is not between 0 and 15\)
+.*:30: Error: syntax error; missing '\)' after base register
+.*:30: Error: syntax error; expected ','
+.*:30: Error: found ',', expected: '\)'
+.*:31: Error: syntax error; missing '\(' after displacement
+.*:32: Error: operand out of range \(0 is not between 1 and 16\)
+.*:33: Error: missing operand
+.*:34: Error: missing operand
+.*:35: Error: missing operand
 .*:36: Error: bad expression
-.*:36: Error: syntax error; missing '\)' after base register
-.*:37: Error: bad expression
-.*:37: Error: syntax error; missing '\)' after base register
-.*:38: Error: bad expression
-.*:38: Error: syntax error; missing '\)' after base register
-.*:39: Error: bad expression
-.*:39: Error: syntax error; missing '\)' after base register
-.*:39: Error: bad expression
-.*:39: Error: syntax error; missing '\)' after base register
-.*:40: Error: bad expression
-.*:40: Error: syntax error; missing '\)' after base register
-.*:41: Error: bad expression
-.*:41: Error: syntax error; missing '\)' after base register
+.*:36: Error: operand out of range \(0 is not between 1 and 16\)
+.*:36: Error: syntax error; expected ','
+.*:37: Error: syntax error; missing '\(' after displacement
+.*:38: Error: operand out of range \(0 is not between 1 and 16\)
+.*:38: Error: operand out of range \(0 is not between 1 and 16\)
+.*:39: Error: missing operand
+.*:39: Error: missing operand
+.*:40: Error: missing operand
+.*:40: Error: missing operand
+.*:41: Error: missing operand
+.*:41: Error: missing operand
+.*:42: Error: bad expression
 .*:42: Error: operand out of range \(0 is not between 1 and 16\)
-.*:43: Error: missing operand
-.*:44: Error: missing operand
-.*:45: Error: missing operand
-.*:45: Error: bad expression
-.*:45: Error: syntax error; missing '\)' after base register
+.*:42: Error: operand out of range \(32 is not between 0 and 15\)
+.*:42: Error: syntax error; missing '\)' after base register
+.*:42: Error: syntax error; expected ','
+.*:42: Error: bad expression
+.*:42: Error: missing '\)'
+.*:42: Error: operand out of range \(0 is not between 1 and 16\)
+.*:42: Error: syntax error; expected ','
+.*:43: Error: syntax error; missing '\(' after displacement
+.*:43: Error: syntax error; missing '\(' after displacement
 .*:46: Error: bad expression
-.*:46: Error: operand out of range \(0 is not between 1 and 16\)
-.*:46: Error: operand out of range \(32 is not between 0 and 15\)
 .*:46: Error: syntax error; missing '\)' after base register
-.*:46: Error: syntax error; expected ','
-.*:46: Error: found ',', expected: '\)'
-.*:47: Error: syntax error; missing '\(' after displacement
-.*:48: Error: operand out of range \(0 is not between 1 and 16\)
-.*:49: Error: missing operand
-.*:50: Error: missing operand
-.*:51: Error: missing operand
-.*:51: Error: bad expression
-.*:51: Error: syntax error; missing '\)' after base register
-.*:52: Error: bad expression
-.*:52: Error: operand out of range \(0 is not between 1 and 16\)
-.*:52: Error: syntax error; expected ','
-.*:53: Error: syntax error; missing '\(' after displacement
-.*:54: Error: operand out of range \(0 is not between 1 and 16\)
-.*:54: Error: operand out of range \(0 is not between 1 and 16\)
-.*:55: Error: missing operand
-.*:55: Error: missing operand
-.*:56: Error: missing operand
-.*:56: Error: missing operand
-.*:57: Error: missing operand
-.*:57: Error: bad expression
-.*:57: Error: syntax error; missing '\)' after base register
-.*:57: Error: missing operand
-.*:57: Error: bad expression
-.*:57: Error: syntax error; missing '\)' after base register
-.*:58: Error: bad expression
-.*:58: Error: operand out of range \(0 is not between 1 and 16\)
-.*:58: Error: operand out of range \(32 is not between 0 and 15\)
-.*:58: Error: syntax error; missing '\)' after base register
-.*:58: Error: syntax error; expected ','
-.*:58: Error: bad expression
-.*:58: Error: missing '\)'
-.*:58: Error: operand out of range \(0 is not between 1 and 16\)
-.*:58: Error: syntax error; expected ','
-.*:59: Error: syntax error; missing '\(' after displacement
-.*:59: Error: syntax error; missing '\(' after displacement
-.*:62: Error: bad expression
-.*:62: Error: syntax error; missing '\)' after base register
-.*:63: Error: bad expression
-.*:63: Error: syntax error; missing '\)' after base register
-.*:64: Error: bad expression
-.*:64: Error: syntax error; missing '\)' after base register
-.*:65: Error: bad expression
-.*:65: Error: syntax error; missing '\)' after base register
-.*:66: Error: bad expression
-.*:66: Error: syntax error; missing '\)' after base register
+.*:47: Error: bad expression
+.*:47: Error: syntax error; missing '\)' after base register
diff --git a/gas/testsuite/gas/s390/zarch-base-index-0-err.s b/gas/testsuite/gas/s390/zarch-base-index-0-err.s
index 175cc90b2699..472d24ef6273 100644
--- a/gas/testsuite/gas/s390/zarch-base-index-0-err.s
+++ b/gas/testsuite/gas/s390/zarch-base-index-0-err.s
@@ -5,21 +5,14 @@ foo:
 	mvi	16(),32			# syntax error: empty parentheses
 
 #		R1,D2(X2,B2)
-	a	%r1,16(%r2,)		# syntax error: explicitly omitted base
-	a	%r1,16(%r0,)		# syntax error: explicitly omitted base
-	a	%r1,16(0,)		# syntax error: explicitly omitted base
 	a	%r1,16(,)		# syntax error: explicitly omitted index & base
 	a	%r1,16()		# syntax error: empty parentheses
 
 #		D1(L1,B1),D2(B2)
-	mvc	16(1,),32(%r2)		# syntax error: explicitly omitted base
 	mvc	16(1,%r1),32()		# syntax error: empty parentheses
 	mvc	16(1,%r0),32()		# syntax error: empty parentheses
 	mvc	16(1,0),32()		# syntax error: empty parentheses
-	mvc	16(1,),32(%r0)		# syntax error: explicitly omitted base
-	mvc	16(1,),32(0)		# syntax error: explicitly omitted base
 	mvc	16(1,),32()		# syntax error: explicitly omitted base & empty parentheses
-	mvc	16(1,),32		# syntax error: explicitly omitted base
 	mvc	16(1),32()		# syntax error: empty parentheses
 	mvc	16(0,%r1),32(%r2)	# syntax error: length 0
 	mvc	16(,%r1),32(%r2)	# syntax error: explicitly omitted length
@@ -30,15 +23,6 @@ foo:
 	mvc	16(%r1),32(%r2)		# syntax error: omitted length
 
 #		D1(L1,B1),D2(L2,B2)
-	unpk	16(1,),32(2,%r2)	# syntax error: explicitly omitted base
-	unpk	16(1,%r1),32(2,)	# syntax error: explicitly omitted base
-	unpk	16(1,%r0),32(2,)	# syntax error: explicitly omitted base
-	unpk	16(1,0),32(2,)		# syntax error: explicitly omitted base
-	unpk	16(1,),32(2,%r0)	# syntax error: explicitly omitted base
-	unpk	16(1,),32(2,0)		# syntax error: explicitly omitted base
-	unpk	16(1,),32(2,)		# syntax error: explicitly omitted base
-	unpk	16(1,),32(2)		# syntax error: explicitly omitted base
-	unpk	16(1),32(2,)		# syntax error: explicitly omitted base
 	unpk	16(0,%r1),32(2,%r2)	# syntax error: length 0
 	unpk	16(,%r1),32(2,%r2)	# syntax error: explicitly omitted length
 	unpk	16(,1),32(2,%r2)	# syntax error: explicitly omitted length
@@ -59,8 +43,5 @@ foo:
 	unpk	16,32			# syntax error: missing lengths
 
 #		V1,D2(VX2,B2),M3
-	vgef	%v1,16(%v2,),0		# syntax error: explicitly omitted base
-	vgef	%v1,16(%v0,),0		# syntax error: explicitly omitted base
-	vgef	%v1,16(0,),0		# syntax error: explicitly omitted base
 	vgef	%v1,16(,),0		# syntax error: explicitly omitted index & base
 	vgef	%v1,16(),0		# syntax error: empty parentheses
diff --git a/gas/testsuite/gas/s390/zarch-base-index-0.d b/gas/testsuite/gas/s390/zarch-base-index-0.d
index 4dd913bff920..717eaac2423b 100644
--- a/gas/testsuite/gas/s390/zarch-base-index-0.d
+++ b/gas/testsuite/gas/s390/zarch-base-index-0.d
@@ -19,6 +19,9 @@ Disassembly of section .text:
 .*:	5a 10 30 10 [	 ]*a	%r1,16\(%r3\)
 .*:	5a 12 00 10 [	 ]*a	%r1,16\(%r2,0\)
 .*:	5a 12 00 10 [	 ]*a	%r1,16\(%r2,0\)
+.*:	5a 12 00 10 [	 ]*a	%r1,16\(%r2,0\)
+.*:	5a 10 00 10 [	 ]*a	%r1,16
+.*:	5a 10 00 10 [	 ]*a	%r1,16
 .*:	5a 10 00 10 [	 ]*a	%r1,16
 .*:	5a 10 00 10 [	 ]*a	%r1,16
 .*:	5a 10 00 10 [	 ]*a	%r1,16
@@ -34,6 +37,7 @@ Disassembly of section .text:
 .*:	d2 00 00 10 20 20 [	 ]*mvc	16\(1,0\),32\(%r2\)
 .*:	d2 00 00 10 20 20 [	 ]*mvc	16\(1,0\),32\(%r2\)
 .*:	d2 00 00 10 20 20 [	 ]*mvc	16\(1,0\),32\(%r2\)
+.*:	d2 00 00 10 20 20 [	 ]*mvc	16\(1,0\),32\(%r2\)
 .*:	d2 00 10 10 00 20 [	 ]*mvc	16\(1,%r1\),32
 .*:	d2 00 10 10 00 20 [	 ]*mvc	16\(1,%r1\),32
 .*:	d2 00 10 10 00 20 [	 ]*mvc	16\(1,%r1\),32
@@ -46,14 +50,26 @@ Disassembly of section .text:
 .*:	d2 00 00 10 00 20 [	 ]*mvc	16\(1,0\),32
 .*:	d2 00 00 10 00 20 [	 ]*mvc	16\(1,0\),32
 .*:	d2 00 00 10 00 20 [	 ]*mvc	16\(1,0\),32
+.*:	d2 00 00 10 00 20 [	 ]*mvc	16\(1,0\),32
+.*:	d2 00 00 10 00 20 [	 ]*mvc	16\(1,0\),32
+.*:	d2 00 00 10 00 20 [	 ]*mvc	16\(1,0\),32
 .*:	d2 00 00 00 00 00 [	 ]*mvc	0\(1,0\),0
 .*:	f3 01 10 10 20 20 [	 ]*unpk	16\(1,%r1\),32\(2,%r2\)
 .*:	f3 01 00 10 20 20 [	 ]*unpk	16\(1,0\),32\(2,%r2\)
 .*:	f3 01 00 10 20 20 [	 ]*unpk	16\(1,0\),32\(2,%r2\)
 .*:	f3 01 00 10 20 20 [	 ]*unpk	16\(1,0\),32\(2,%r2\)
+.*:	f3 01 00 10 20 20 [	 ]*unpk	16\(1,0\),32\(2,%r2\)
 .*:	f3 01 10 10 00 20 [	 ]*unpk	16\(1,%r1\),32\(2,0\)
 .*:	f3 01 10 10 00 20 [	 ]*unpk	16\(1,%r1\),32\(2,0\)
 .*:	f3 01 10 10 00 20 [	 ]*unpk	16\(1,%r1\),32\(2,0\)
+.*:	f3 01 10 10 00 20 [	 ]*unpk	16\(1,%r1\),32\(2,0\)
+.*:	f3 01 00 10 00 20 [	 ]*unpk	16\(1,0\),32\(2,0\)
+.*:	f3 01 00 10 00 20 [	 ]*unpk	16\(1,0\),32\(2,0\)
+.*:	f3 01 00 10 00 20 [	 ]*unpk	16\(1,0\),32\(2,0\)
+.*:	f3 01 00 10 00 20 [	 ]*unpk	16\(1,0\),32\(2,0\)
+.*:	f3 01 00 10 00 20 [	 ]*unpk	16\(1,0\),32\(2,0\)
+.*:	f3 01 00 10 00 20 [	 ]*unpk	16\(1,0\),32\(2,0\)
+.*:	f3 01 00 10 00 20 [	 ]*unpk	16\(1,0\),32\(2,0\)
 .*:	f3 01 00 10 00 20 [	 ]*unpk	16\(1,0\),32\(2,0\)
 .*:	f3 01 00 10 00 20 [	 ]*unpk	16\(1,0\),32\(2,0\)
 .*:	f3 01 00 10 00 20 [	 ]*unpk	16\(1,0\),32\(2,0\)
@@ -71,6 +87,9 @@ Disassembly of section .text:
 .*:	e7 10 30 10 00 13 [	 ]*vgef	%v1,16\(%r3\),0
 .*:	e7 12 00 10 00 13 [	 ]*vgef	%v1,16\(%v2,0\),0
 .*:	e7 12 00 10 00 13 [	 ]*vgef	%v1,16\(%v2,0\),0
+.*:	e7 12 00 10 00 13 [	 ]*vgef	%v1,16\(%v2,0\),0
+.*:	e7 10 00 10 00 13 [	 ]*vgef	%v1,16,0
+.*:	e7 10 00 10 00 13 [	 ]*vgef	%v1,16,0
 .*:	e7 10 00 10 00 13 [	 ]*vgef	%v1,16,0
 .*:	e7 10 00 10 00 13 [	 ]*vgef	%v1,16,0
 .*:	e7 10 00 10 00 13 [	 ]*vgef	%v1,16,0
diff --git a/gas/testsuite/gas/s390/zarch-base-index-0.s b/gas/testsuite/gas/s390/zarch-base-index-0.s
index 15c792d776fa..e34c626707e2 100644
--- a/gas/testsuite/gas/s390/zarch-base-index-0.s
+++ b/gas/testsuite/gas/s390/zarch-base-index-0.s
@@ -18,13 +18,13 @@ foo:
 	a	%r1,16(%r3)
 	a	%r1,16(%r2,%r0)
 	a	%r1,16(%r2,0)
-#	a	%r1,16(%r2,)		# syntax error: explicitly omitted base
+	a	%r1,16(%r2,)		# syntax error: explicitly omitted base
 	a	%r1,16(%r0,%r0)
 	a	%r1,16(%r0,0)
-#	a	%r1,16(%r0,)		# syntax error: explicitly omitted base
+	a	%r1,16(%r0,)		# syntax error: explicitly omitted base
 	a	%r1,16(0,%r0)
 	a	%r1,16(0,0)
-#	a	%r1,16(0,)		# syntax error: explicitly omitted base
+	a	%r1,16(0,)		# syntax error: explicitly omitted base
 	a	%r1,16(0,%r0)
 	a	%r1,16(,%r0)
 	a	%r1,16(,0)
@@ -39,7 +39,7 @@ foo:
 	mvc	16(1,%r1),32(%r2)
 	mvc	16(1,%r0),32(%r2)
 	mvc	16(1,0),32(%r2)
-#	mvc	16(1,),32(%r2)		# syntax error: explicitly omitted base
+	mvc	16(1,),32(%r2)
 	mvc	16(1),32(%r2)
 	mvc	16(1,%r1),32(%r0)
 	mvc	16(1,%r1),32(0)
@@ -53,10 +53,10 @@ foo:
 	mvc	16(1,0),32(0)
 #	mvc	16(1,0),32()		# syntax error: empty parentheses
 	mvc	16(1,0),32
-#	mvc	16(1,),32(%r0)		# syntax error: explicitly omitted base
-#	mvc	16(1,),32(0)		# syntax error: explicitly omitted base
+	mvc	16(1,),32(%r0)
+	mvc	16(1,),32(0)
 #	mvc	16(1,),32()		# syntax error: explicitly omitted base & empty parentheses
-#	mvc	16(1,),32		# syntax error: explicitly omitted base
+	mvc	16(1,),32
 	mvc	16(1),32(%r0)
 	mvc	16(1),32(0)
 #	mvc	16(1),32()		# syntax error: empty parentheses
@@ -67,27 +67,27 @@ foo:
 	unpk	16(1,%r1),32(2,%r2)
 	unpk	16(1,%r0),32(2,%r2)
 	unpk	16(1,0),32(2,%r2)
-#	unpk	16(1,),32(2,%r2)	# syntax error: explicitly omitted base
+	unpk	16(1,),32(2,%r2)
 	unpk	16(1),32(2,%r2)
 	unpk	16(1,%r1),32(2,%r0)
 	unpk	16(1,%r1),32(2,0)
-#	unpk	16(1,%r1),32(2,)	# syntax error: explicitly omitted base
+	unpk	16(1,%r1),32(2,)
 	unpk	16(1,%r1),32(2)
 	unpk	16(1,%r0),32(2,%r0)
 	unpk	16(1,%r0),32(2,0)
-#	unpk	16(1,%r0),32(2,)	# syntax error: explicitly omitted base
+	unpk	16(1,%r0),32(2,)
 	unpk	16(1,%r0),32(2)
 	unpk	16(1,0),32(2,%r0)
 	unpk	16(1,0),32(2,0)
-#	unpk	16(1,0),32(2,)		# syntax error: explicitly omitted base
+	unpk	16(1,0),32(2,)
 	unpk	16(1,0),32(2)
-#	unpk	16(1,),32(2,%r0)	# syntax error: explicitly omitted base
-#	unpk	16(1,),32(2,0)		# syntax error: explicitly omitted base
-#	unpk	16(1,),32(2,)		# syntax error: explicitly omitted base
-#	unpk	16(1,),32(2)		# syntax error: explicitly omitted base
+	unpk	16(1,),32(2,%r0)
+	unpk	16(1,),32(2,0)
+	unpk	16(1,),32(2,)
+	unpk	16(1,),32(2)
 	unpk	16(1),32(2,%r0)
 	unpk	16(1),32(2,0)
-#	unpk	16(1),32(2,)		# syntax error: explicitly omitted base
+	unpk	16(1),32(2,)
 	unpk	16(1),32(2)
 	unpk	0(1),0(2)
 
@@ -99,13 +99,13 @@ foo:
 	vgef	%v1,16(%r3),0
 	vgef	%v1,16(%v2,%r0),0
 	vgef	%v1,16(%v2,0),0
-#	vgef	%v1,16(%v2,),0		# syntax error: explicitly omitted base
+	vgef	%v1,16(%v2,),0
 	vgef	%v1,16(%v0,%r0),0
 	vgef	%v1,16(%v0,0),0
-#	vgef	%v1,16(%v0,),0		# syntax error: explicitly omitted base
+	vgef	%v1,16(%v0,),0
 	vgef	%v1,16(0,%r0),0
 	vgef	%v1,16(0,0),0
-#	vgef	%v1,16(0,),0		# syntax error: explicitly omitted base
+	vgef	%v1,16(0,),0
 	vgef	%v1,16(,%r0),0
 	vgef	%v1,16(,0),0
 #	vgef	%v1,16(,),0		# syntax error: explicitly omitted index & base
diff --git a/gas/testsuite/gas/s390/zarch-omitted-base-index-err.l b/gas/testsuite/gas/s390/zarch-omitted-base-index-err.l
index e4bd7a8c4171..f222fe00093e 100644
--- a/gas/testsuite/gas/s390/zarch-omitted-base-index-err.l
+++ b/gas/testsuite/gas/s390/zarch-omitted-base-index-err.l
@@ -3,23 +3,19 @@
 .*:5: Error: syntax error; missing '\)' after base register
 .*:8: Error: bad expression
 .*:8: Error: syntax error; missing '\)' after base register
-.*:9: Error: bad expression
-.*:9: Error: syntax error; missing '\)' after base register
+.*:11: Warning: operand 2: expected general register name as base register
 .*:12: Error: bad expression
 .*:12: Error: syntax error; missing '\)' after base register
-.*:13: Warning: operand 2: expected general register name as base register
-.*:14: Error: bad expression
-.*:14: Error: syntax error; missing '\)' after base register
-.*:17: Error: missing operand
-.*:18: Error: missing operand
-.*:19: Error: invalid length field specified
-.*:20: Error: bad expression
-.*:20: Error: operand out of range \(0 is not between 1 and 256\)
-.*:20: Error: operand out of range \(32 is not between 0 and 15\)
-.*:20: Error: syntax error; missing '\)' after base register
-.*:20: Error: syntax error; expected ','
-.*:20: Error: bad expression
-.*:20: Error: found 'r', expected: '\)'
-.*:20: Error: syntax error; missing '\)' after base register
-.*:20: Error: junk at end of line: `r2\)'
-.*:21: Error: syntax error; missing '\(' after displacement
+.*:15: Error: missing operand
+.*:16: Error: missing operand
+.*:17: Error: invalid length field specified
+.*:18: Error: bad expression
+.*:18: Error: operand out of range \(0 is not between 1 and 256\)
+.*:18: Error: operand out of range \(32 is not between 0 and 15\)
+.*:18: Error: syntax error; missing '\)' after base register
+.*:18: Error: syntax error; expected ','
+.*:18: Error: bad expression
+.*:18: Error: found 'r', expected: '\)'
+.*:18: Error: syntax error; missing '\)' after base register
+.*:18: Error: junk at end of line: `r2\)'
+.*:19: Error: syntax error; missing '\(' after displacement
diff --git a/gas/testsuite/gas/s390/zarch-omitted-base-index-err.s b/gas/testsuite/gas/s390/zarch-omitted-base-index-err.s
index dd0e9fe183f3..0114c6403756 100644
--- a/gas/testsuite/gas/s390/zarch-omitted-base-index-err.s
+++ b/gas/testsuite/gas/s390/zarch-omitted-base-index-err.s
@@ -5,11 +5,9 @@ foo:
 	clm	%r1,0b1000,16()
 
 #		R1,D2(X2,B2)
-	a	%r1,16(%r2,)
 	a	%r1,16()
 
 #		V1,D2(VX2,B2),M3
-	vgef	%v1,16(%v2,),0
 	vgef	%v1,16(%v2),0
 	vgef	%v1,16(),0
 
diff --git a/gas/testsuite/gas/s390/zarch-omitted-base-index.d b/gas/testsuite/gas/s390/zarch-omitted-base-index.d
index cb168a2fe187..2795a9d095cb 100644
--- a/gas/testsuite/gas/s390/zarch-omitted-base-index.d
+++ b/gas/testsuite/gas/s390/zarch-omitted-base-index.d
@@ -9,10 +9,12 @@ Disassembly of section .text:
 .*:	bd 18 20 10 [	 ]*clm	%r1,8,16\(%r2\)
 .*:	bd 18 00 10 [	 ]*clm	%r1,8,16
 .*:	5a 12 30 10 [	 ]*a	%r1,16\(%r2,%r3\)
+.*:	5a 12 00 10 [	 ]*a	%r1,16\(%r2,0\)
 .*:	5a 10 30 10 [	 ]*a	%r1,16\(%r3\)
 .*:	5a 10 30 10 [	 ]*a	%r1,16\(%r3\)
 .*:	5a 10 00 10 [	 ]*a	%r1,16
 .*:	e7 12 30 10 00 13 [	 ]*vgef	%v1,16\(%v2,%r3\),0
+.*:	e7 12 00 10 00 13 [	 ]*vgef	%v1,16\(%v2,0\),0
 .*:	e7 10 30 10 00 13 [	 ]*vgef	%v1,16\(%r3\),0
 .*:	e7 10 30 10 00 13 [	 ]*vgef	%v1,16\(%r3\),0
 .*:	e7 10 00 10 00 13 [	 ]*vgef	%v1,16,0
@@ -20,3 +22,4 @@ Disassembly of section .text:
 .*:	d2 00 10 10 00 20 [	 ]*mvc	16\(1,%r1\),32
 .*:	d2 00 00 10 20 20 [	 ]*mvc	16\(1,0\),32\(%r2\)
 .*:	d2 00 00 10 00 20 [	 ]*mvc	16\(1,0\),32
+.*:	07 07 [	 ]*nopr	%r7
diff --git a/gas/testsuite/gas/s390/zarch-omitted-base-index.s b/gas/testsuite/gas/s390/zarch-omitted-base-index.s
index 8381319068bc..1d4d434c9483 100644
--- a/gas/testsuite/gas/s390/zarch-omitted-base-index.s
+++ b/gas/testsuite/gas/s390/zarch-omitted-base-index.s
@@ -7,12 +7,14 @@ foo:
 
 #		R1,D1(X2,B2)
 	a	%r1,16(%r2,%r3)
+	a	%r1,16(%r2,)
 	a	%r1,16(,%r3)
 	a	%r1,16(%r3)
 	a	%r1,16
 
 #		V1,D2(VX2,B2),M3
 	vgef	%v1,16(%v2,%r3),0
+	vgef	%v1,16(%v2,),0
 	vgef	%v1,16(,%r3),0
 	vgef	%v1,16(%r3),0
 	vgef	%v1,16,0
-- 
2.40.1


  parent reply	other threads:[~2024-02-15 15:58 UTC|newest]

Thread overview: 16+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-02-15 15:58 [PATCH 00/14] s390: Enhancements to working with addressing operands Jens Remus
2024-02-15 15:58 ` [PATCH 01/14] s390: Lower severity of assembler syntax errors from fatal to error Jens Remus
2024-02-15 15:58 ` [PATCH 02/14] s390: Enhance handling of syntax errors in assembler Jens Remus
2024-02-15 15:58 ` [PATCH 03/14] s390: Do not erroneously use base operand value for length operand Jens Remus
2024-02-15 15:58 ` [PATCH 04/14] s390: Correct setting of highgprs flag in ELF output Jens Remus
2024-02-15 15:58 ` [PATCH 05/14] s390: Assemble processor specific test cases for their processor Jens Remus
2024-02-15 15:58 ` [PATCH 06/14] s390: Add comments to assembler operand parsing logic Jens Remus
2024-02-15 15:58 ` [PATCH 07/14] s390: Add test cases for base/index register 0 Jens Remus
2024-02-15 15:58 ` [PATCH 08/14] s390: Add test case for disassembler option warn-areg-zero Jens Remus
2024-02-15 15:58 ` [PATCH 09/14] s390: Revise s390-specific assembler option descriptions Jens Remus
2024-02-15 15:58 ` [PATCH 10/14] s390: Warn when register name type does not match operand Jens Remus
2024-02-15 15:58 ` [PATCH 11/14] s390: Print base register 0 as "0" in disassembly Jens Remus
2024-02-15 15:58 ` Jens Remus [this message]
2024-02-15 15:58 ` [PATCH 13/14] s390: Provide operand number in assembler warning and error messages Jens Remus
2024-02-15 15:58 ` [PATCH 14/14] s390: Be more verbose about missing operand type Jens Remus
2024-03-01 12:24 ` [PATCH 00/14] s390: Enhancements to working with addressing operands Jens Remus

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20240215155821.4065623-13-jremus@linux.ibm.com \
    --to=jremus@linux.ibm.com \
    --cc=binutils@sourceware.org \
    --cc=krebbel@linux.ibm.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).