diff options
| author | sirl <sirl@138bc75d-0d04-0410-961f-82ee72b054a4> | 2003-02-25 23:11:55 +0000 |
|---|---|---|
| committer | sirl <sirl@138bc75d-0d04-0410-961f-82ee72b054a4> | 2003-02-25 23:11:55 +0000 |
| commit | 29c25da405566b107d43bc46eb0ed6b094fc9b97 (patch) | |
| tree | 5b1471a85fa181b5a5a2f3d4232a349c2d9b0ee8 | |
| parent | 2d8a350e34aa34fc8d5f9dadc38b2c188921b880 (diff) | |
| download | ppe42-gcc-29c25da405566b107d43bc46eb0ed6b094fc9b97.tar.gz ppe42-gcc-29c25da405566b107d43bc46eb0ed6b094fc9b97.zip | |
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.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@63423 138bc75d-0d04-0410-961f-82ee72b054a4
| -rw-r--r-- | gcc/ChangeLog | 10 | ||||
| -rw-r--r-- | gcc/config/rs6000/rs6000.c | 6 | ||||
| -rw-r--r-- | gcc/config/rs6000/rs6000.h | 4 |
3 files changed, 17 insertions, 3 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index eb767ceeb57..3bc23a7ecf4 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -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 diff --git a/gcc/config/rs6000/rs6000.c b/gcc/config/rs6000/rs6000.c index c26c4463b34..9189614484a 100644 --- a/gcc/config/rs6000/rs6000.c +++ b/gcc/config/rs6000/rs6000.c @@ -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, diff --git a/gcc/config/rs6000/rs6000.h b/gcc/config/rs6000/rs6000.h index 744b6bc4aa1..da04dc02fe7 100644 --- a/gcc/config/rs6000/rs6000.h +++ b/gcc/config/rs6000/rs6000.h @@ -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] \ |

