]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
re PR target/9732 ([ppc32] Wrong code with -O2 -fPIC)
authorFranz Sirl <Franz.Sirl-kernel@lauterbach.com>
Tue, 25 Feb 2003 23:22:48 +0000 (23:22 +0000)
committerFranz Sirl <sirl@gcc.gnu.org>
Tue, 25 Feb 2003 23:22:48 +0000 (23:22 +0000)
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.

From-SVN: r63429

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

index 2c59dd79a1ca8b65df4d5b20d77f0f3f6b3fd874..97638d9d0f810dcbc22e6162f4c79e5669d8b481 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  Matthias Klose  <doko@debian.org>
 
        2003-02-07  Richard Henderson  <rth@redhat.com>
index 89808cca82012d311122c4e676f68b8aa1fbe616..521f092b3bea8cc97f6a1784ac0f2b00a18b3061 100644 (file)
@@ -7409,7 +7409,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;
 
@@ -8793,7 +8793,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;
@@ -9179,7 +9179,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 8c77dd558c063adf851f1249b5c4c523f310c26b..87c0f4abdd0252954077f247d681c61e055b9485 100644 (file)
@@ -960,6 +960,10 @@ extern int rs6000_altivec_abi;
     for (i = 32; i < 64; i++)                                          \
       fixed_regs[i] = call_used_regs[i]                                        \
         = 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)                                                        \