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]

Re: [PATCH] x86: prefer specific error messages over more generic ones


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.


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