This is the mail archive of the binutils@sourceware.org mailing list for the binutils project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[PATCH 2/2, AArch64] change the gas verbose error reporting on by default


For AArch64 advanced SIMD assembly coding, there are some constraints on operand formats. For some instructions, only specific subtypes are accepted.

Take "fcvtn" for example,

without verbose error
==

./as-new -mno-verbose-error  -o 2.o 2.s

2.s: Assembler messages:
2.s:1: Error: operand mismatch -- `fcvtn v25.4s,v26.4s'

with verbose error
==
./as-new -mverbose-error -o 2.o 2.s
2.s: Assembler messages:
2.s:1: Error: operand mismatch -- `fcvtn v25.4s,v26.4s'
2.s:1: Info:    did you mean this?
2.s:1: Info:        fcvtn v25.4h,v26.4s
2.s:1: Info:    other valid variant(s):
2.s:1: Info:        fcvtn v25.2s,v26.2d

More heuristic and helpful messages are delivered to user.

This patch set verbose error default on for AArch64, and basically, only SIMD error report affected. I also run through gcc, gdb testsuite, no testcase affected.

Please review.

Thanks
Jiong

gas/

  * config/tc-aarch64.c (aarch64_opts): Add new option "mno-verbose-error".
  (verbose_error_p): Initialize to 1.
  * doc/c-aarch64.texi (AArch64 Options): Document -mverbose-error and
  -mno-verbose-error.

gas/testsuite/

  * gas/aarch64/illegal.d: Pass -mno-verbose-error.
  * gas/aarch64/verbose-error.s: Add more verbose message testcases.
  * gas/aarch64/verbose-error.l: Ditto.
diff --git a/gas/config/tc-aarch64.c b/gas/config/tc-aarch64.c
index 4b243ce..195e9ac 100644
--- a/gas/config/tc-aarch64.c
+++ b/gas/config/tc-aarch64.c
@@ -3517,9 +3517,9 @@ fix_new_aarch64 (fragS * frag,
 
 /* Diagnostics on operands errors.  */
 
-/* By default, output one-line error message only.
-   Enable the verbose error message by -merror-verbose.  */
-static int verbose_error_p = 0;
+/* By default, output verbose error message.
+   Disable the verbose error message by -mno-verbose-error.  */
+static int verbose_error_p = 1;
 
 #ifdef DEBUG_AARCH64
 /* N.B. this is only for the purpose of debugging.  */
@@ -7119,6 +7119,8 @@ static struct aarch64_option_table aarch64_opts[] = {
 #endif /* DEBUG_AARCH64 */
   {"mverbose-error", N_("output verbose error messages"), &verbose_error_p, 1,
    NULL},
+  {"mno-verbose-error", N_("do not output verbose error messages"),
+   &verbose_error_p, 0, NULL},
   {NULL, NULL, NULL, 0, NULL}
 };
 
diff --git a/gas/doc/c-aarch64.texi b/gas/doc/c-aarch64.texi
index 544d5ab..4e26616 100644
--- a/gas/doc/c-aarch64.texi
+++ b/gas/doc/c-aarch64.texi
@@ -44,6 +44,15 @@ be marked as being encoded for a big-endian processor.
 This option specifies that the output generated by the assembler should
 be marked as being encoded for a little-endian processor.
 
+@cindex @code{-mverbose-error} command line option, AArch64
+@item -mverbose-error
+This option enables verbose error messages for AArch64 gas.  This option
+is default on for AArch64 backend.
+
+@cindex @code{-mno-verbose-error} command line option, AArch64
+@item -mno-verbose-error
+This option disables verbose error messages in AArch64 gas.
+
 @cindex @code{-mabi=} command line option, AArch64
 @item -mabi=@var{abi}
 Specify which ABI the source code uses.  The recognized arguments
diff --git a/gas/testsuite/gas/aarch64/illegal.d b/gas/testsuite/gas/aarch64/illegal.d
index ade139c..904eace 100644
--- a/gas/testsuite/gas/aarch64/illegal.d
+++ b/gas/testsuite/gas/aarch64/illegal.d
@@ -1,4 +1,4 @@
 #name: Illegal Instructions
-#as:
+#as: -mno-verbose-error
 #source: illegal.s
 #error-output: illegal.l
diff --git a/gas/testsuite/gas/aarch64/verbose-error.l b/gas/testsuite/gas/aarch64/verbose-error.l
index b7f713e..3d2c99e 100644
--- a/gas/testsuite/gas/aarch64/verbose-error.l
+++ b/gas/testsuite/gas/aarch64/verbose-error.l
@@ -43,3 +43,135 @@
 [^:]*:16: Info:    other valid variant\(s\):
 [^:]*:16: Info:    	ldnp d3,d7,\[sp\],#16
 [^:]*:16: Info:    	ldnp q3,q7,\[sp\],#16
+[^:]*:18: Error: operand mismatch -- `suqadd v0.8b,v1.16b'
+[^:]*:18: Info:    did you mean this\?
+[^:]*:18: Info:    	suqadd v0.8b,v1.8b
+[^:]*:18: Info:    other valid variant\(s\):
+[^:]*:18: Info:    	suqadd v0.16b,v1.16b
+[^:]*:18: Info:    	suqadd v0.4h,v1.4h
+[^:]*:18: Info:    	suqadd v0.8h,v1.8h
+[^:]*:18: Info:    	suqadd v0.2s,v1.2s
+[^:]*:18: Info:    	suqadd v0.4s,v1.4s
+[^:]*:18: Info:    	suqadd v0.2d,v1.2d
+[^:]*:20: Error: operand mismatch -- `ursqrte v2.8b,v3.8b'
+[^:]*:20: Info:    did you mean this\?
+[^:]*:20: Info:    	ursqrte v2.2s,v3.2s
+[^:]*:20: Info:    other valid variant\(s\):
+[^:]*:20: Info:    	ursqrte v2.4s,v3.4s
+[^:]*:22: Error: operand mismatch -- `rev32 v4.2s,v5.2s'
+[^:]*:22: Info:    did you mean this\?
+[^:]*:22: Info:    	rev32 v4.8b,v5.8b
+[^:]*:22: Info:    other valid variant\(s\):
+[^:]*:22: Info:    	rev32 v4.16b,v5.16b
+[^:]*:22: Info:    	rev32 v4.4h,v5.4h
+[^:]*:22: Info:    	rev32 v4.8h,v5.8h
+[^:]*:24: Error: operand mismatch -- `frintn v6.8b,v7.8b'
+[^:]*:24: Info:    did you mean this\?
+[^:]*:24: Info:    	frintn v6.2s,v7.2s
+[^:]*:24: Info:    other valid variant\(s\):
+[^:]*:24: Info:    	frintn v6.4s,v7.4s
+[^:]*:24: Info:    	frintn v6.2d,v7.2d
+[^:]*:26: Error: operand mismatch -- `rev64 v8.2d,v9.2d'
+[^:]*:26: Info:    did you mean this\?
+[^:]*:26: Info:    	rev64 v8.8b,v9.8b
+[^:]*:26: Info:    other valid variant\(s\):
+[^:]*:26: Info:    	rev64 v8.16b,v9.16b
+[^:]*:26: Info:    	rev64 v8.4h,v9.4h
+[^:]*:26: Info:    	rev64 v8.8h,v9.8h
+[^:]*:26: Info:    	rev64 v8.2s,v9.2s
+[^:]*:26: Info:    	rev64 v8.4s,v9.4s
+[^:]*:28: Error: operand mismatch -- `rev16 v10.2s,v11.2s'
+[^:]*:28: Info:    did you mean this\?
+[^:]*:28: Info:    	rev16 v10.8b,v11.8b
+[^:]*:28: Info:    other valid variant\(s\):
+[^:]*:28: Info:    	rev16 v10.16b,v11.16b
+[^:]*:30: Error: operand mismatch -- `saddlp v12.8b,v13.8b'
+[^:]*:30: Info:    did you mean this\?
+[^:]*:30: Info:    	saddlp v12.4h,v13.8b
+[^:]*:30: Info:    other valid variant\(s\):
+[^:]*:30: Info:    	saddlp v12.8h,v13.16b
+[^:]*:30: Info:    	saddlp v12.2s,v13.4h
+[^:]*:30: Info:    	saddlp v12.4s,v13.8h
+[^:]*:30: Info:    	saddlp v12.1d,v13.2s
+[^:]*:30: Info:    	saddlp v12.2d,v13.4s
+[^:]*:32: Error: operand mismatch -- `shll v14.8b,v15.8h,#1'
+[^:]*:32: Info:    did you mean this\?
+[^:]*:32: Info:    	shll v14.8h,v15.8b,#1
+[^:]*:32: Info:    other valid variant\(s\):
+[^:]*:32: Info:    	shll v14.4s,v15.4h,#1
+[^:]*:32: Info:    	shll v14.2d,v15.2s,#1
+[^:]*:34: Error: operand mismatch -- `shll2 v14.8b,v15.8h,#1'
+[^:]*:34: Info:    did you mean this\?
+[^:]*:34: Info:    	shll2 v14.4s,v15.8h,#1
+[^:]*:34: Info:    other valid variant\(s\):
+[^:]*:34: Info:    	shll2 v14.8h,v15.16b,#1
+[^:]*:34: Info:    	shll2 v14.2d,v15.4s,#1
+[^:]*:36: Error: operand mismatch -- `fcvtxn v22.8b,v23.8b'
+[^:]*:36: Info:    did you mean this\?
+[^:]*:36: Info:    	fcvtxn v22.2s,v23.2d
+[^:]*:38: Error: operand mismatch -- `fcvtxn2 v24.8b,v25.8b'
+[^:]*:38: Info:    did you mean this\?
+[^:]*:38: Info:    	fcvtxn2 v24.4s,v25.2d
+[^:]*:40: Error: operand mismatch -- `fcvtn v25.4s,v26.4s'
+[^:]*:40: Info:    did you mean this\?
+[^:]*:40: Info:    	fcvtn v25.4h,v26.4s
+[^:]*:40: Info:    other valid variant\(s\):
+[^:]*:40: Info:    	fcvtn v25.2s,v26.2d
+[^:]*:42: Error: operand mismatch -- `fcvtn2 v27.4s,v28.4s'
+[^:]*:42: Info:    did you mean this\?
+[^:]*:42: Info:    	fcvtn2 v27.8h,v28.4s
+[^:]*:42: Info:    other valid variant\(s\):
+[^:]*:42: Info:    	fcvtn2 v27.4s,v28.2d
+[^:]*:44: Error: operand mismatch -- `fcvtl v29.8b,v30.8b'
+[^:]*:44: Info:    did you mean this\?
+[^:]*:44: Info:    	fcvtl v29.4s,v30.4h
+[^:]*:44: Info:    other valid variant\(s\):
+[^:]*:44: Info:    	fcvtl v29.2d,v30.2s
+[^:]*:46: Error: operand mismatch -- `fcvtl2 v1.2d,v2.2d'
+[^:]*:46: Info:    did you mean this\?
+[^:]*:46: Info:    	fcvtl2 v1.2d,v2.4s
+[^:]*:46: Info:    other valid variant\(s\):
+[^:]*:46: Info:    	fcvtl2 v1.4s,v2.8h
+[^:]*:48: Error: operand mismatch -- `sqadd v16.8b,v17.8h,v18.8h'
+[^:]*:48: Info:    did you mean this\?
+[^:]*:48: Info:    	sqadd v16.8h,v17.8h,v18.8h
+[^:]*:48: Info:    other valid variant\(s\):
+[^:]*:48: Info:    	sqadd v16.8b,v17.8b,v18.8b
+[^:]*:48: Info:    	sqadd v16.16b,v17.16b,v18.16b
+[^:]*:48: Info:    	sqadd v16.4h,v17.4h,v18.4h
+[^:]*:48: Info:    	sqadd v16.2s,v17.2s,v18.2s
+[^:]*:48: Info:    	sqadd v16.4s,v17.4s,v18.4s
+[^:]*:48: Info:    	sqadd v16.2d,v17.2d,v18.2d
+[^:]*:50: Error: operand mismatch -- `shadd v19.8b,v20.8h,v21.8h'
+[^:]*:50: Info:    did you mean this\?
+[^:]*:50: Info:    	shadd v19.8h,v20.8h,v21.8h
+[^:]*:50: Info:    other valid variant\(s\):
+[^:]*:50: Info:    	shadd v19.8b,v20.8b,v21.8b
+[^:]*:50: Info:    	shadd v19.16b,v20.16b,v21.16b
+[^:]*:50: Info:    	shadd v19.4h,v20.4h,v21.4h
+[^:]*:50: Info:    	shadd v19.2s,v20.2s,v21.2s
+[^:]*:50: Info:    	shadd v19.4s,v20.4s,v21.4s
+[^:]*:52: Error: operand mismatch -- `sha1su0 v1.16b,v2.16b,v3.16b'
+[^:]*:52: Info:    did you mean this\?
+[^:]*:52: Info:    	sha1su0 v1.4s,v2.4s,v3.4s
+[^:]*:54: Error: operand mismatch -- `shadd v1.2d,v2.2d,v3.2d'
+[^:]*:54: Info:    did you mean this\?
+[^:]*:54: Info:    	shadd v1.8b,v2.8b,v3.8b
+[^:]*:54: Info:    other valid variant\(s\):
+[^:]*:54: Info:    	shadd v1.16b,v2.16b,v3.16b
+[^:]*:54: Info:    	shadd v1.4h,v2.4h,v3.4h
+[^:]*:54: Info:    	shadd v1.8h,v2.8h,v3.8h
+[^:]*:54: Info:    	shadd v1.2s,v2.2s,v3.2s
+[^:]*:54: Info:    	shadd v1.4s,v2.4s,v3.4s
+[^:]*:56: Error: operand mismatch -- `sqdmulh v1.16b,v2.16b,v3.16b'
+[^:]*:56: Info:    did you mean this\?
+[^:]*:56: Info:    	sqdmulh v1.4h,v2.4h,v3.4h
+[^:]*:56: Info:    other valid variant\(s\):
+[^:]*:56: Info:    	sqdmulh v1.8h,v2.8h,v3.8h
+[^:]*:56: Info:    	sqdmulh v1.2s,v2.2s,v3.2s
+[^:]*:56: Info:    	sqdmulh v1.4s,v2.4s,v3.4s
+[^:]*:58: Error: operand mismatch -- `sqdmlal2 v1.16b,v2.16b,v3.16b'
+[^:]*:58: Info:    did you mean this\?
+[^:]*:58: Info:    	sqdmlal2 v1.4s,v2.8h,v3.8h
+[^:]*:58: Info:    other valid variant\(s\):
+[^:]*:58: Info:    	sqdmlal2 v1.2d,v2.4s,v3.4s
diff --git a/gas/testsuite/gas/aarch64/verbose-error.s b/gas/testsuite/gas/aarch64/verbose-error.s
index 5a2c2f1..a173b77 100644
--- a/gas/testsuite/gas/aarch64/verbose-error.s
+++ b/gas/testsuite/gas/aarch64/verbose-error.s
@@ -14,3 +14,45 @@
 	adds	w0, wsp, x0, uxtx #1
 	fmov	d0, s0
 	ldnp	h3, h7, [sp], #16
+	# QL_V2SAME
+	suqadd v0.8b, v1.16b
+	# QL_V2SAME
+	ursqrte v2.8b, v3.8b
+	# QL_V2SAMEBH
+	rev32 v4.2s, v5.2s
+	#QL_V2SAMESD
+	frintn v6.8b, v7.8b
+	#QL_V2SAMEBHS
+	rev64 v8.2d, v9.2d
+	#QL_V2SAMEB
+	rev16 v10.2s, v11.2s
+	#QL_V2PAIRWISELONGBHS
+	saddlp v12.8b, v13.8b
+	#QL_V2LONGBHS
+	shll v14.8b, v15.8h, #1
+	#QL_V2LONGBHS2
+	shll2 v14.8b, v15.8h, #1
+	#QL_V2NARRS
+	fcvtxn v22.8b, v23.8b
+	#QL_V2NARRS2
+	fcvtxn2 v24.8b, v25.8b
+	#QL_V2NARRHS
+	fcvtn v25.4s, v26.4s
+	#QL_V2NARRHS2
+	fcvtn2 v27.4s, v28.4s
+	#QL_V2LONGHS
+	fcvtl v29.8b, v30.8b
+	#QL_V2LONGHS2
+	fcvtl2 v1.2d, v2.2d
+	#QL_V3SAME
+	sqadd v16.8b, v17.8h, v18.8h
+	#QL_V3SAMEBHS
+	shadd v19.8b, v20.8h, v21.8h
+	#QL_V3SAME4S
+	sha1su0 v1.16b, v2.16b, v3.16b
+	#QL_V3SAMEEB
+	shadd v1.2d, v2.2d, v3.2d
+	#QL_V3SAMEEHS
+	sqdmulh v1.16b, v2.16b, v3.16b
+	#QL_V3LONGHS2
+	sqdmlal2 v1.16b, v2.16b, v3.16b

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]