This is the mail archive of the
binutils@sourceware.org
mailing list for the binutils project.
Re: [PATCH] x86: prefer specific error messages over more generic ones
- From: "H.J. Lu" <hjl dot tools at gmail dot com>
- To: Jan Beulich <JBeulich at suse dot com>
- Cc: binutils at sourceware dot org
- Date: Mon, 30 Jul 2012 09:14:14 -0700
- Subject: Re: [PATCH] x86: prefer specific error messages over more generic ones
- References: <500ECC4F0200007800090391@nat28.tlf.novell.com>
On Tue, Jul 24, 2012 at 7:24 AM, Jan Beulich <JBeulich@suse.com> wrote:
> At the point where check_VecOperands()/VEX_check_operands() get run,
> all other instruction attributes already matched, so any mismatch here
> will tell the user more precisely what is wrong than using an eventual
> (and very likely to occur) more generic error encountered on a
> subsequent iteration through the template matching loop.
>
> 2012-07-24 Jan Beulich <jbeulich@suse.com>
>
> * config/tc-i386.c (match_template): New local variable
> 'specific_error'. Set it from i.error after failed
> check_VecOperands or VEX_check_operands. Use it if set in
> preference to i.error when actually issuing disagnostic.
>
> --- a/gas/config/tc-i386.c
> +++ b/gas/config/tc-i386.c
> @@ -4015,6 +4015,7 @@ match_template (void)
> unsigned int j;
> unsigned int found_cpu_match;
> unsigned int check_register;
> + enum i386_error specific_error = 0;
>
> #if MAX_OPERANDS != 5
> # error "MAX_OPERANDS must be 5."
> @@ -4311,13 +4312,12 @@ check_reverse:
> continue;
> }
>
> - /* Check if vector operands are valid. */
> - if (check_VecOperands (t))
> - continue;
> -
> - /* Check if VEX operands are valid. */
> - if (VEX_check_operands (t))
> - continue;
> + /* Check if vector and VEX operands are valid. */
> + if (check_VecOperands (t) || VEX_check_operands (t))
> + {
> + specific_error = i.error;
> + continue;
> + }
>
> /* We've found a match; break out of loop. */
> break;
> @@ -4327,7 +4327,7 @@ check_reverse:
> {
> /* We found no match. */
> const char *err_msg;
> - switch (i.error)
> + switch (specific_error ? specific_error : i.error)
> {
> default:
> abort ();
OK. Please update testsuite if needed.
Thanks.
--
H.J.