diff --git a/gcc/regclass.c b/gcc/regclass.c index 5a4d72fe4a1..544d78e2379 100644 --- a/gcc/regclass.c +++ b/gcc/regclass.c @@ -326,18 +326,14 @@ fix_register (name, fixed, call_used) /* 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; } } diff --git a/gcc/varasm.c b/gcc/varasm.c index b6b218b7922..890c9696671 100644 --- a/gcc/varasm.c +++ b/gcc/varasm.c @@ -191,7 +191,8 @@ make_function_rtl (decl) /* 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) @@ -218,7 +219,7 @@ 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; @@ -232,7 +233,7 @@ decode_reg_name (asmspec) 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; @@ -499,9 +500,9 @@ assemble_start_function (decl, fnname) #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. */