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: [AArch64][SVE 01/32] Remove parse_neon_operand_type


On 23/08/16 10:06, Richard Sandiford wrote:
> A false return from parse_neon_operand_type had an overloaded
> meaning: either the parsing failed, or there was nothing to parse
> (which isn't necessarily an error).  The only caller, parse_typed_reg,
> would therefore not consume the suffix if it was invalid but instead
> (successfully) parse the register without a suffix.  It would still
> leave inst.parsing_error with an error about the invalid suffix.
> 
> It seems wrong for a successful parse to leave an error message,
> so this patch makes parse_typed_reg return PARSE_FAIL instead.
> 
> The patch doesn't seem to make much difference in practice.
> Most possible follow-on errors use set_first_error and so the
> error about the suffix tended to win despite the successful parse.
> 
> OK to install?
> 
> Thanks,
> Richard
> 
> 
> gas/
> 	* config/tc-aarch64.c (parse_neon_operand_type): Delete.
> 	(parse_typed_reg): Call parse_neon_type_for_operand directly.
> 

OK.

R.

> diff --git a/gas/config/tc-aarch64.c b/gas/config/tc-aarch64.c
> index 34fdc53..ce8e713 100644
> --- a/gas/config/tc-aarch64.c
> +++ b/gas/config/tc-aarch64.c
> @@ -821,31 +821,6 @@ elt_size:
>    return TRUE;
>  }
>  
> -/* Parse a single type, e.g. ".8b", leading period included.
> -   Only applicable to Vn registers.
> -
> -   Return TRUE on success; otherwise return FALSE.  */
> -static bfd_boolean
> -parse_neon_operand_type (struct neon_type_el *vectype, char **ccp)
> -{
> -  char *str = *ccp;
> -
> -  if (*str == '.')
> -    {
> -      if (! parse_neon_type_for_operand (vectype, &str))
> -	{
> -	  first_error (_("vector type expected"));
> -	  return FALSE;
> -	}
> -    }
> -  else
> -    return FALSE;
> -
> -  *ccp = str;
> -
> -  return TRUE;
> -}
> -
>  /* Parse a register of the type TYPE.
>  
>     Return PARSE_FAIL if the string pointed by *CCP is not a valid register
> @@ -889,9 +864,11 @@ parse_typed_reg (char **ccp, aarch64_reg_type type, aarch64_reg_type *rtype,
>      }
>    type = reg->type;
>  
> -  if (type == REG_TYPE_VN
> -      && parse_neon_operand_type (&parsetype, &str))
> +  if (type == REG_TYPE_VN && *str == '.')
>      {
> +      if (!parse_neon_type_for_operand (&parsetype, &str))
> +	return PARSE_FAIL;
> +
>        /* Register if of the form Vn.[bhsdq].  */
>        is_typed_vecreg = TRUE;
>  
> 


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