egcs 980315 bug on powerpc-unknown-linux-gnulibc1

Jeffrey A Law law@cygnus.com
Thu May 21 02:50:00 GMT 1998


  In message < 9805191958.AA22380@rios1.watson.ibm.com >you write:
  > 	rs6000.c:rs6000_output_load_toc_table() -- non-TARGET_RELOCATABLE
  > branch -- does something similar and there it is:
  > 
  >       asm_fprintf (file, "\t{cau|addis} %s,%s,", reg_names[reg], reg_names[
  > 0]);
  >       assemble_name (file, buf);
  >       asm_fprintf (file, "@ha\n");
  > 
  > which really is "lis".  It looks like someone was trying to avoid two
  > different syntax formats, but that was a waste of time because two lines
  > later it needs to support both anyway.  The new mnemonic form should just
  > duplicate the code and use "lis" there as well for consitency instead of
  > trying to use {cau|addis} choice.
Let's deal with this one separately, since it's just a cleanup.  OK?

  > 	My only concern about rs6000.c:output_function_profiler() is that
  > it explicitly uses r11 earlier (to gain GOT addressibility?)  I guess it is
  > using r11 as a scratch.  From my understanding of GOT, it definitely does
  > not make sense to *add* the GOT relocation high address to a value in a
  > register.
Actually, those other uses are in different if/else arms and are
not executed for the two cases we're proposing to fix.

This also probably points to at least one reason why profiling
doesn't work with nested functions -- r11 is the static chain, and
we're clobbering it in the profiling code. :-)  I think Meissner
mentioned this recently.

jeff



More information about the Gcc-bugs mailing list