This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
Re: [m68k] Fix m68k-netbsdelf bootstrap
On Thu, Jan 15, 2004 at 01:13:09AM +0100, Bernardo Innocenti wrote:
> Gunther Nikl wrote:
> >On Wed, Jan 14, 2004 at 12:49:37AM +0100, Bernardo Innocenti wrote:
> >>Anyway, I like seeing "fp" in GCC's output as it helps reading
> >>the code. Could we add yet another hook in m68k.h such as
> >>
> >> #undef M68K_FP_REG_NAME
> >> #define M68K_FP_REG_NAME "fp"
> >
> > The problem I have with this is the fact %FP might be bound to a
> > different register, eg. with m68k-amigaos %FP == %A5.
>
> My upcoming patch should fix this too. I use this macro
> to print registers everywhere in m68k.c:
>
> /* Return a register name by index, handling fp nicely. */
> #define M68K_REGNAME(r) ( \
> ((r) == FRAME_POINTER_REGNUM && frame_pointer_needed) ? \
> M68K_FP_REG_NAME : reg_names[(r)])
>
> #define M68K_FP_REG_NAME REGISTER_PREFIX"fp"
>
> On second tought, this may actually be a *bug*. It would break
> on any target where FRAME_POINTER_REGNUM != 14 unless gas is
> also patched accordingly.
>
> A quick look at gas/config/tc-m68k.c reveals fp is hardly
> bound to a6.
m68k-amigaos modifies GAS and binds %fp to %a5, thus your M68K_REGNAME
macro would work.
> So it seems we need some ugly work-around:
>
> #if FRAME_POINTER_REGNUM == 14
> /* Return a register name by index, handling fp nicely. */
> # define M68K_REGNAME(r) ( \
> ((r) == FRAME_POINTER_REGNUM && frame_pointer_needed) ? \
> M68K_FP_REG_NAME : reg_names[(r)])
> #else
> /* GAS and possibly other assemblers hard-code fp to a6. */
> # define M68K_REGNAME(r) reg_names[(r)]
> #endif
This does only work if FRAME_POINTER_REGNUM is defined correctly
before, eg. in config.gcc. However, since FRAME_POINTER_REGNUM is
a compile-time constant you could move the check into the macro
definition to get the same result :-)
I prefer to see the real register name.
Gunher