This is the mail archive of the
binutils@sourceware.org
mailing list for the binutils project.
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;
>
>