From 43935856ef8054d9ef447dc5b8c55029ddc2c966 Mon Sep 17 00:00:00 2001 From: hpenner Date: Tue, 26 Mar 2002 08:44:47 +0000 Subject: [PATCH] * config/s390/s390.c (s390_emit_epilogue): Change epilogue code to not restoring global registers. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@51374 138bc75d-0d04-0410-961f-82ee72b054a4 --- gcc/ChangeLog | 5 +++++ gcc/config/s390/s390.c | 24 +++++++++++++++++++++--- 2 files changed, 26 insertions(+), 3 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 347905c..c199e44 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2002-03-26 Hartmut Penner + + * config/s390/s390.c (s390_emit_epilogue): Change epilogue + code to not restoring global registers. + 2002-03-26 Neil Booth * Makefile.in (ggc-common.o): Update. diff --git a/gcc/config/s390/s390.c b/gcc/config/s390/s390.c index 2881aab..8c183e7 100644 --- a/gcc/config/s390/s390.c +++ b/gcc/config/s390/s390.c @@ -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. */ -- 2.7.4