/* Decode the name and update the primary form of
the register info. */
- for (i = 0; i < FIRST_PSEUDO_REGISTER; i++)
- if (reg_names[i][0] && ! strcmp (reg_names[i], name))
- {
- fixed_regs[i] = fixed;
- call_used_regs[i] = call_used;
- break;
- }
-
- if (i == FIRST_PSEUDO_REGISTER)
+ if ((i = decode_reg_name (name)) >= 0)
+ {
+ fixed_regs[i] = fixed;
+ call_used_regs[i] = call_used;
+ }
+ else
{
warning ("unknown register name: %s", name);
- return;
}
}
\f
/* Decode an `asm' spec for a declaration as a register name.
Return the register number, or -1 if nothing specified,
- or -2 if the name is not a register. */
+ or -2 if the name is not a register. Accept an exact spelling,
+ a decimal number, or an optional prefix of '%' or '#'. */
int
decode_reg_name (asmspec)
if (reg_names[i][0] && ! strcmp (asmspec, reg_names[i]))
return i;
- if (asmspec[0] == '%')
+ if (asmspec[0] == '%' || asmspec[0] == '#')
for (i = 0; i < FIRST_PSEUDO_REGISTER; i++)
if (reg_names[i][0] && ! strcmp (asmspec + 1, reg_names[i]))
return i;
if (! strcmp (asmspec, table[i].name))
return table[i].number;
- if (asmspec[0] == '%')
+ if (asmspec[0] == '%' || asmspec[0] == '#')
for (i = 0; i < sizeof (table) / sizeof (table[0]); i++)
if (! strcmp (asmspec + 1, table[i].name))
return table[i].number;
#endif
#ifdef DBX_DEBUGGING_INFO
- /* Output SDB definition of the function. */
+ /* Output DBX definition of the function. */
if (write_symbols == DBX_DEBUG)
- dbxout_begin_function ();
+ dbxout_begin_function (decl);
#endif
/* Make function name accessible from other files, if appropriate. */