x86: move register check in immediate operand parsing

i386_finalize_immediate() is used for both AT&T and Intel immediate
operand handling. Move an AT&T-only check to i386_immediate(), which at
the same time allows it to cover other cases as well, giving an overall
better / more consistent diagnostic.
This commit is contained in:
Jan Beulich 2021-05-07 12:02:40 +02:00
parent 87ed972dc3
commit 9aac24b1a8
2 changed files with 13 additions and 7 deletions

View File

@ -1,3 +1,9 @@
2021-05-07 Jan Beulich <jbeulich@suse.com>
* config/tc-i386.c (i386_finalize_immediate): Move register
check ...
(i386_immediate): ... here.
2021-05-07 Jan Beulich <jbeulich@suse.com>
* config/tc-i386.c (optimize_imm): Drop redundant masking.

View File

@ -10690,10 +10690,16 @@ i386_immediate (char *imm_start)
{
free (gotfree_input_line);
if (exp->X_op == O_constant || exp->X_op == O_register)
if (exp->X_op == O_constant)
exp->X_op = O_illegal;
}
if (exp_seg == reg_section)
{
as_bad (_("illegal immediate register operand %s"), imm_start);
return 0;
}
return i386_finalize_immediate (exp_seg, exp, types, imm_start);
}
@ -10731,12 +10737,6 @@ i386_finalize_immediate (segT exp_seg ATTRIBUTE_UNUSED, expressionS *exp,
return 0;
}
#endif
else if (!intel_syntax && exp_seg == reg_section)
{
if (imm_start)
as_bad (_("illegal immediate register operand %s"), imm_start);
return 0;
}
else
{
/* This is an address. The size of the address will be