OSDN Git Service

2003-02-25 Franz Sirl <Franz.Sirl-kernel@lauterbach.com>
authorsirl <sirl@138bc75d-0d04-0410-961f-82ee72b054a4>
Tue, 25 Feb 2003 23:11:55 +0000 (23:11 +0000)
committersirl <sirl@138bc75d-0d04-0410-961f-82ee72b054a4>
Tue, 25 Feb 2003 23:11:55 +0000 (23:11 +0000)
PR target/9732
* config/rs6000/rs6000.c (first_reg_to_save): Handle
PIC_OFFSET_TABLE_REGNUM for -fPIC too.
(rs6000_emit_prologue): Likewise.
(rs6000_emit_epilogue): Likewise.
* config/rs6000/rs6000.h (CONDITIONAL_REGISTER_USAGE): Make
PIC_OFFSET_TABLE_REGNUM a fixed register for -fPIC.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@63423 138bc75d-0d04-0410-961f-82ee72b054a4

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

index eb767ce..3bc23a7 100644 (file)
@@ -1,3 +1,13 @@
+2003-02-25  Franz Sirl  <Franz.Sirl-kernel@lauterbach.com>
+
+       PR target/9732
+       * config/rs6000/rs6000.c (first_reg_to_save): Handle
+       PIC_OFFSET_TABLE_REGNUM for -fPIC too.
+       (rs6000_emit_prologue): Likewise.
+       (rs6000_emit_epilogue): Likewise.
+       * config/rs6000/rs6000.h (CONDITIONAL_REGISTER_USAGE): Make
+       PIC_OFFSET_TABLE_REGNUM a fixed register for -fPIC.
+
 2003-02-25  Richard Henderson  <rth@redhat.com>
 
        * real.c (real_to_integer2): Force overflow result only for
index c26c446..9189614 100644 (file)
@@ -8918,7 +8918,7 @@ first_reg_to_save ()
     if (regs_ever_live[first_reg] 
        && (! call_used_regs[first_reg]
            || (first_reg == RS6000_PIC_OFFSET_TABLE_REGNUM
-               && ((DEFAULT_ABI == ABI_V4 && flag_pic == 1)
+               && ((DEFAULT_ABI == ABI_V4 && flag_pic != 0)
                    || (DEFAULT_ABI == ABI_DARWIN && flag_pic)))))
       break;
 
@@ -10503,7 +10503,7 @@ rs6000_emit_prologue ()
        if ((regs_ever_live[info->first_gp_reg_save+i] 
             && ! call_used_regs[info->first_gp_reg_save+i])
            || (i+info->first_gp_reg_save == RS6000_PIC_OFFSET_TABLE_REGNUM
-               && ((DEFAULT_ABI == ABI_V4 && flag_pic == 1)
+               && ((DEFAULT_ABI == ABI_V4 && flag_pic != 0)
                    || (DEFAULT_ABI == ABI_DARWIN && flag_pic))))
          {
            rtx addr, reg, mem;
@@ -10919,7 +10919,7 @@ rs6000_emit_epilogue (sibcall)
       if ((regs_ever_live[info->first_gp_reg_save+i] 
           && ! call_used_regs[info->first_gp_reg_save+i])
          || (i+info->first_gp_reg_save == RS6000_PIC_OFFSET_TABLE_REGNUM
-             && ((DEFAULT_ABI == ABI_V4 && flag_pic == 1)
+             && ((DEFAULT_ABI == ABI_V4 && flag_pic != 0)
                  || (DEFAULT_ABI == ABI_DARWIN && flag_pic))))
        {
          rtx addr = gen_rtx_PLUS (Pmode, frame_reg_rtx, 
index 744b6bc..da04dc0 100644 (file)
@@ -990,6 +990,10 @@ extern int rs6000_default_long_calls;
         = call_really_used_regs[i] = 1;                                        \
   if (DEFAULT_ABI == ABI_V4                                            \
       && PIC_OFFSET_TABLE_REGNUM != INVALID_REGNUM                     \
+      && flag_pic == 2)                                                        \
+    fixed_regs[RS6000_PIC_OFFSET_TABLE_REGNUM] = 1;                    \
+  if (DEFAULT_ABI == ABI_V4                                            \
+      && PIC_OFFSET_TABLE_REGNUM != INVALID_REGNUM                     \
       && flag_pic == 1)                                                        \
     fixed_regs[RS6000_PIC_OFFSET_TABLE_REGNUM]                         \
       = call_used_regs[RS6000_PIC_OFFSET_TABLE_REGNUM]                 \