rs6000.c (rs6000_stack_info): For ABI_V4/ABI_SOLARIS -fpic...
authorGeoff Keating <geoffk@cygnus.com>
Thu, 5 Aug 1999 06:59:54 +0000 (00:59 -0600)
committerJeff Law <law@gcc.gnu.org>
Thu, 5 Aug 1999 06:59:54 +0000 (00:59 -0600)
        * rs6000.c (rs6000_stack_info): For ABI_V4/ABI_SOLARIS -fpic, always
        allocate space in the stack frame for the PIC register.

From-SVN: r28525

gcc/ChangeLog
gcc/config/rs6000/rs6000.c

index cc55b5e8fd171e33718b170ba518eb324d56fc00..7b37f795a3a93b216e9c45889ac23a361b6e5591 100644 (file)
@@ -1,3 +1,8 @@
+Thu Aug  5 00:56:30 1999  Geoffrey Keating   <geoffk@cygnus.com>
+
+       * rs6000.c (rs6000_stack_info): For ABI_V4/ABI_SOLARIS -fpic, always
+       allocate space in the stack frame for the PIC register.
+
 Thu Aug  5 00:20:47 1999  Jeffrey A Law  (law@cygnus.com)
 
        * m68k.md (xordi3, anddi3): These patterns are not available on
index 865ec9254e61e1713383fb4d0d57e4d4da4d89e0..2f49b37afb6d7c1ef8fb1dc4a405f0d26d2d848a 100644 (file)
@@ -3644,7 +3644,14 @@ rs6000_stack_info ()
 
   /* Calculate which registers need to be saved & save area size */
   info_ptr->first_gp_reg_save = first_reg_to_save ();
-  info_ptr->gp_size = reg_size * (32 - info_ptr->first_gp_reg_save);
+  /* Assume that we will have to save PIC_OFFSET_TABLE_REGNUM, 
+     even if it currently looks like we won't.  */
+  if (flag_pic == 1 
+      && (abi == ABI_V4 || abi == ABI_SOLARIS)
+      && info_ptr->first_gp_reg_save > PIC_OFFSET_TABLE_REGNUM)
+    info_ptr->gp_size = reg_size * (32 - PIC_OFFSET_TABLE_REGNUM);
+  else
+    info_ptr->gp_size = reg_size * (32 - info_ptr->first_gp_reg_save);
 
   info_ptr->first_fp_reg_save = first_fp_reg_to_save ();
   info_ptr->fp_size = 8 * (64 - info_ptr->first_fp_reg_save);