[AArch64][SVE 01/32] Remove parse_neon_operand_type

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.

gas/
	* config/tc-aarch64.c (parse_neon_operand_type): Delete.
	(parse_typed_reg): Call parse_neon_type_for_operand directly.
This commit is contained in:
Richard Sandiford 2016-09-21 16:47:57 +01:00
parent 3d0ec88224
commit a235d3aece
2 changed files with 9 additions and 27 deletions

View File

@ -1,3 +1,8 @@
2016-09-21 Richard Sandiford <richard.sandiford@arm.com>
* config/tc-aarch64.c (parse_neon_operand_type): Delete.
(parse_typed_reg): Call parse_neon_type_for_operand directly.
2016-09-15 Claudiu Zissulescu <claziss@synopsys.com>
* testsuite/gas/arc/textinsnxop.d: New file.

View File

@ -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;