aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorUlrich Weigand <uweigand@de.ibm.com>2002-04-25 21:26:04 +0000
committerUlrich Weigand <uweigand@gcc.gnu.org>2002-04-25 21:26:04 +0000
commitcf5ee7207ddb206d1f01b902bb382d402ccdcacb (patch)
tree2db9a5f1bff91f15d90dabe51b6d7767879fc87b
parentd604bca36430702c878d4e4cca1e8e0ccee35124 (diff)
downloadgcc-cf5ee7207ddb206d1f01b902bb382d402ccdcacb.zip
gcc-cf5ee7207ddb206d1f01b902bb382d402ccdcacb.tar.gz
gcc-cf5ee7207ddb206d1f01b902bb382d402ccdcacb.tar.bz2
s390.c (s390_emit_epilogue): Always restore registers needed by the compiler...
* config/s390/s390.c (s390_emit_epilogue): Always restore registers needed by the compiler, even if they are used as global regs. From-SVN: r52768
-rw-r--r--gcc/ChangeLog5
-rw-r--r--gcc/config/s390/s390.c8
2 files changed, 13 insertions, 0 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 855042c..01b2e44 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,8 @@
+2002-04-25 Ulrich Weigand <uweigand@de.ibm.com>
+
+ * config/s390/s390.c (s390_emit_epilogue): Always restore registers
+ needed by the compiler, even if they are used as global regs.
+
2002-04-25 Matt Hiller <hiller@redhat.com>
* mips.c (mips_class_max_nregs, mips_register_move_cost): New
diff --git a/gcc/config/s390/s390.c b/gcc/config/s390/s390.c
index c052e04..ce51bcf 100644
--- a/gcc/config/s390/s390.c
+++ b/gcc/config/s390/s390.c
@@ -3255,6 +3255,14 @@ s390_emit_epilogue ()
i <= frame.last_save_gpr;
i++)
{
+ /* These registers are special and need to be
+ restored in any case. */
+ if (i == STACK_POINTER_REGNUM
+ || i == RETURN_REGNUM
+ || i == BASE_REGISTER
+ || (flag_pic && i == PIC_OFFSET_TABLE_REGNUM))
+ continue;
+
if (global_regs[i])
{
addr = plus_constant (frame_pointer,