+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.
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);
}
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. */