Detect illegal use of hash symbols in assembler mnemonics.

This commit is contained in:
Nick Clifton 1999-06-17 02:13:18 +00:00
parent df75f1af9c
commit 0f94f4c867
2 changed files with 29 additions and 3 deletions

View File

@ -1,3 +1,11 @@
1999-06-17 Nick Clifton <nickc@cygnus.com>
* config/tc-d10v.c (do_not_ignore_hash): New variable.
(get_operands): When parsing an expression after an '@' symbol
has been detected, do not ignore '#' symbols.
(md_operand): Only ignore '#' symbols if do_not_ignore_hash is
false.
1999-06-13 Ian Lance Taylor <ian@zembu.com>
From K. Richard Pixley <rich@noir.com>:

View File

@ -63,6 +63,8 @@ typedef struct _fixups
static Fixups FixUps[2];
static Fixups *fixups;
static int do_not_ignore_hash = 0;
/* True if instruction swapping warnings should be inhibited. */
static unsigned char flag_warn_suppress_instructionswap; /* --nowarnswap */
@ -393,7 +395,8 @@ get_operands (exp)
char *p = input_line_pointer;
int numops = 0;
int post = 0;
int uses_at = 0;
while (*p)
{
while (*p == ' ' || *p == '\t' || *p == ',')
@ -403,6 +406,8 @@ get_operands (exp)
if (*p == '@')
{
uses_at = 1;
p++;
exp[numops].X_op = O_absent;
if (*p == '(')
@ -437,7 +442,20 @@ get_operands (exp)
if (!register_name (&exp[numops]))
{
/* parse as an expression */
expression (&exp[numops]);
if (uses_at)
{
/* Any expression that involves the indirect addressing
cannot also involve immediate addressing. Therefore
the use of the hash character is illegal. */
int save = do_not_ignore_hash;
do_not_ignore_hash = 1;
expression (&exp[numops]);
do_not_ignore_hash = save;
}
else
expression (&exp[numops]);
}
if (strncasecmp (input_line_pointer, "@word", 5) == 0)
@ -1595,7 +1613,7 @@ void
md_operand (expressionP)
expressionS *expressionP;
{
if (*input_line_pointer == '#')
if (*input_line_pointer == '#' && ! do_not_ignore_hash)
{
input_line_pointer++;
expression (expressionP);