Commit 1447dc69 by Hartmut Penner Committed by Hartmut Penner

s390.c (s390_emit_epilogue): Change epilogue code to not restoring global registers.

      * config/s390/s390.c (s390_emit_epilogue): Change epilogue
        code to not restoring global registers.

From-SVN: r51374
parent f2a8c7f0
2002-03-26 Hartmut Penner <hpenner@de.ibm.com>
* config/s390/s390.c (s390_emit_epilogue): Change epilogue
code to not restoring global registers.
2002-03-26 Neil Booth <neil@daikokuya.demon.co.uk>
* Makefile.in (ggc-common.o): Update.
......
......@@ -3177,15 +3177,15 @@ s390_emit_epilogue ()
if (frame.save_fprs_p)
for (i = 24; i < 32; i++)
if (regs_ever_live[i])
if (regs_ever_live[i] && !global_regs[i])
restore_fpr (frame_pointer,
offset - 64 + (i-24) * 8, i);
}
else
{
if (regs_ever_live[18])
if (regs_ever_live[18] && !global_regs[18])
restore_fpr (frame_pointer, offset + STACK_POINTER_OFFSET - 16, 18);
if (regs_ever_live[19])
if (regs_ever_live[19] && !global_regs[19])
restore_fpr (frame_pointer, offset + STACK_POINTER_OFFSET - 8, 19);
}
......@@ -3198,6 +3198,24 @@ s390_emit_epilogue ()
if (frame.first_restore_gpr != -1)
{
rtx addr;
int i;
/* Check for global register and save them
to stack location from where they get restored. */
for (i = frame.first_restore_gpr;
i <= frame.last_save_gpr;
i++)
{
if (global_regs[i])
{
addr = plus_constant (frame_pointer,
offset + i * UNITS_PER_WORD);
addr = gen_rtx_MEM (Pmode, addr);
set_mem_alias_set (addr, s390_sr_alias_set);
emit_move_insn (addr, gen_rtx_REG (Pmode, i));
}
}
/* Fetch return address from stack before load multiple,
this will do good for scheduling. */
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment