This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[Installed] Patch to sh64 trampolines


The sh.md initialize_trampoline expander introduces references
to r0.  This can cause spill failures if reload needs r0 for
some other instruction between the set of r0 and the call itself.

There doesn't seem to be any need to introduce r0 so early:
the relevant insn operand has a 'z' constraint, so reload
should do the right thing.

Tested on sh64-elf, fixes many -fpic and -fPIC failures for
-m5-compact.  Approved by Alex off-list.

Richard


	* config/sh/sh.md (initialize_trampoline): Do not force the
	trampoline address into R0_REGS here.

Index: config/sh/sh.md
===================================================================
RCS file: /cvs/gcc/gcc/gcc/config/sh/sh.md,v
retrieving revision 1.125
diff -c -d -p -F^[(a-zA-Z0-9_^#] -r1.125 sh.md
*** config/sh/sh.md	31 Oct 2002 12:53:06 -0000	1.125
--- config/sh/sh.md	15 Nov 2002 11:03:27 -0000
*************** (define_expand "initialize_trampoline"
*** 3572,3580 ****
  {
    rtx sfun, tramp;
  
    sfun = force_reg (Pmode, gen_rtx_SYMBOL_REF (Pmode, \"__init_trampoline\"));
-   tramp = gen_rtx_REG (SImode, R0_REG);
-   emit_move_insn (tramp, operands[0]);
    emit_move_insn (gen_rtx_REG (SImode, R2_REG), operands[1]);
    emit_move_insn (gen_rtx_REG (SImode, R3_REG), operands[2]);
  
--- 3566,3573 ----
  {
    rtx sfun, tramp;
  
+   tramp = force_reg (Pmode, operands[0]);
    sfun = force_reg (Pmode, gen_rtx_SYMBOL_REF (Pmode, \"__init_trampoline\"));
    emit_move_insn (gen_rtx_REG (SImode, R2_REG), operands[1]);
    emit_move_insn (gen_rtx_REG (SImode, R3_REG), operands[2]);
  


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]