* config/tc-mn10300.c (md_assemble): Handle MN10300_OPERAND_REG_LIST.
So GCC can use movm in prologue/epilogues.
This commit is contained in:
parent
99246e03f9
commit
7f02192d13
2 changed files with 76 additions and 2 deletions
|
@ -1,3 +1,7 @@
|
||||||
|
Tue Nov 19 13:35:22 1996 Jeffrey A Law (law@cygnus.com)
|
||||||
|
|
||||||
|
* config/tc-mn10300.c (md_assemble): Handle MN10300_OPERAND_REG_LIST.
|
||||||
|
|
||||||
Mon Nov 18 15:26:55 1996 Jeffrey A Law (law@cygnus.com)
|
Mon Nov 18 15:26:55 1996 Jeffrey A Law (law@cygnus.com)
|
||||||
|
|
||||||
* config/tc-mn10300.c (mn10300_insert_operand): Provide prototype
|
* config/tc-mn10300.c (mn10300_insert_operand): Provide prototype
|
||||||
|
|
|
@ -465,7 +465,7 @@ md_assemble (str)
|
||||||
|
|
||||||
errmsg = NULL;
|
errmsg = NULL;
|
||||||
|
|
||||||
while (*str == ' ' || *str == ',' || *str == '[' || *str == ']')
|
while (*str == ' ' || *str == ',')
|
||||||
++str;
|
++str;
|
||||||
|
|
||||||
/* Gather the operand. */
|
/* Gather the operand. */
|
||||||
|
@ -547,6 +547,76 @@ md_assemble (str)
|
||||||
*input_line_pointer = c;
|
*input_line_pointer = c;
|
||||||
goto keep_going;
|
goto keep_going;
|
||||||
}
|
}
|
||||||
|
else if (operand->flags & MN10300_OPERAND_REG_LIST)
|
||||||
|
{
|
||||||
|
unsigned int value = 0;
|
||||||
|
if (*input_line_pointer != '[')
|
||||||
|
{
|
||||||
|
input_line_pointer = hold;
|
||||||
|
str = hold;
|
||||||
|
goto error;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Eat the '['. */
|
||||||
|
input_line_pointer++;
|
||||||
|
|
||||||
|
/* A null register list can not be specified. */
|
||||||
|
if (*input_line_pointer == ']')
|
||||||
|
{
|
||||||
|
input_line_pointer = hold;
|
||||||
|
str = hold;
|
||||||
|
goto error;
|
||||||
|
}
|
||||||
|
|
||||||
|
while (*input_line_pointer != ']')
|
||||||
|
{
|
||||||
|
char *start;
|
||||||
|
char c;
|
||||||
|
|
||||||
|
if (*input_line_pointer == ',')
|
||||||
|
input_line_pointer++;
|
||||||
|
|
||||||
|
start = input_line_pointer;
|
||||||
|
c = get_symbol_end ();
|
||||||
|
|
||||||
|
if (strcmp (start, "d2") == 0)
|
||||||
|
{
|
||||||
|
value |= 0x80;
|
||||||
|
*input_line_pointer = c;
|
||||||
|
}
|
||||||
|
else if (strcmp (start, "d3") == 0)
|
||||||
|
{
|
||||||
|
value |= 0x40;
|
||||||
|
*input_line_pointer = c;
|
||||||
|
}
|
||||||
|
else if (strcmp (start, "a2") == 0)
|
||||||
|
{
|
||||||
|
value |= 0x20;
|
||||||
|
*input_line_pointer = c;
|
||||||
|
}
|
||||||
|
else if (strcmp (start, "a3") == 0)
|
||||||
|
{
|
||||||
|
value |= 0x10;
|
||||||
|
*input_line_pointer = c;
|
||||||
|
}
|
||||||
|
else if (strcmp (start, "other") == 0)
|
||||||
|
{
|
||||||
|
value |= 0x08;
|
||||||
|
*input_line_pointer = c;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
input_line_pointer = hold;
|
||||||
|
str = hold;
|
||||||
|
goto error;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
input_line_pointer++;
|
||||||
|
mn10300_insert_operand (&insn, &extension, operand,
|
||||||
|
value, (char *) NULL, 0, 0);
|
||||||
|
goto keep_going;
|
||||||
|
|
||||||
|
}
|
||||||
else if (data_register_name (&ex))
|
else if (data_register_name (&ex))
|
||||||
{
|
{
|
||||||
input_line_pointer = hold;
|
input_line_pointer = hold;
|
||||||
|
@ -649,7 +719,7 @@ keep_going:
|
||||||
str = input_line_pointer;
|
str = input_line_pointer;
|
||||||
input_line_pointer = hold;
|
input_line_pointer = hold;
|
||||||
|
|
||||||
while (*str == ' ' || *str == ',' || *str == '[' || *str == ']')
|
while (*str == ' ' || *str == ',')
|
||||||
++str;
|
++str;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue