x86: drop identifier_chars[]
authorJan Beulich <jbeulich@suse.com>
Mon, 20 Mar 2023 15:59:06 +0000 (16:59 +0100)
committerJan Beulich <jbeulich@suse.com>
Mon, 20 Mar 2023 15:59:06 +0000 (16:59 +0100)
commit4795cd4a26bff8dd3ecf805b81077bdb3bd516c1
treef3d57ffe97a1b9eee675d91e11e8557a4ab27b2d
parentccb05c9c999f274c92b09f4b29c41d91cece88cf
x86: drop identifier_chars[]

It tries to resemble what's underlying is_part_of_name(), but doesn't
quite achieve that: '$' for example is unconditionally marked as part of
symbol names, but was included as identifier char for Intel syntax only.
Note that i386_att_operand() checks for the immediate prefix first, so
the wider coverage by starts_memory_operand() is has no real effect
there, but it does matter for something like

mov %fs:$dollar, %eax

which previously wasn't accepted (but which clearly is a memory
reference - there's no point in forcing people to parenthesize the
symbol name). Similarly including '%' as an identfier for Intel syntax
had no real significance to the rest of the assembler. If '%' was to be
valid in (unquoted) symbol names, LEX_PCT would need to be defined.

Note further that this also addresses the latent issue of a sub-target
defining LEX_AT or LEX_QM to zero: That would make '@' and/or '?' no
valid part of symbol names, but would have included them in what
is_identifier_char() considers a valid part of a name. (There's a minor
related issue which is actually being eliminated: te-interix.h allows
'@' only in the middle of symbol names, yet starts_memory_operand()
specifically looks at the first character of [possibly] a symbol name.)

In parse_real_register() there's no point also checking is_name_ender()
as at this point no character is marked solely LEX_END_NAME by any sub-
target. Checking is_name_beginner() is also pointless as the hash lookup
will fail anyway for a zero-length name.

While touching the check in parse_real_register() also drop the
"allow_naked_reg" part of the condition: This has only led to
inconsistent error messages.
gas/config/tc-i386.c