4.4.1-12
This commit is contained in:
parent
a291f05d00
commit
d022d11749
@ -1,2 +1,2 @@
|
||||
fastjar-0.97.tar.gz
|
||||
gcc-4.4.1-20090909.tar.bz2
|
||||
gcc-4.4.1-20090910.tar.bz2
|
||||
|
34
gcc.spec
34
gcc.spec
@ -1,9 +1,9 @@
|
||||
%global DATE 20090909
|
||||
%global SVNREV 151553
|
||||
%global DATE 20090910
|
||||
%global SVNREV 151593
|
||||
%global gcc_version 4.4.1
|
||||
# Note, gcc_release must be integer, if you want to add suffixes to
|
||||
# %{release}, append them after %{gcc_release} on Release: line.
|
||||
%global gcc_release 11
|
||||
%global gcc_release 12
|
||||
%global _unpackaged_files_terminate_build 0
|
||||
%global multilib_64_archs sparc64 ppc64 s390x x86_64
|
||||
%global include_gappletviewer 1
|
||||
@ -161,6 +161,8 @@ Patch17: gcc44-pr38757.patch
|
||||
Patch18: gcc44-libstdc++-docs.patch
|
||||
Patch19: gcc44-vta-cfgexpand-ptr-mode-pr41248.patch
|
||||
Patch20: gcc44-vta-cselib-subreg-of-value-more-pr41276.patch
|
||||
Patch21: gcc44-powerpc-libgcc_s_so.patch
|
||||
Patch22: gcc44-pr41175.patch
|
||||
|
||||
Patch1000: fastjar-0.97-segfault.patch
|
||||
|
||||
@ -468,6 +470,8 @@ which are required to compile with the GNAT.
|
||||
%endif
|
||||
%patch19 -p0 -b .vta-cfgexpand-ptr-mode-pr41248~
|
||||
%patch20 -p0 -b .gcc44-vta-cselib-subreg-of-value-more-pr41276~
|
||||
%patch21 -p0 -b .powerpc-libgcc_s_so~
|
||||
%patch22 -p0 -b .pr41175~
|
||||
|
||||
# This testcase doesn't compile.
|
||||
rm libjava/testsuite/libjava.lang/PR35020*
|
||||
@ -870,6 +874,22 @@ ln -sf /lib64/libgcc_s.so.1 $FULLPATH/64/libgcc_s.so
|
||||
%ifarch %{multilib_64_archs}
|
||||
ln -sf /lib/libgcc_s.so.1 $FULLPATH/32/libgcc_s.so
|
||||
%endif
|
||||
%ifarch ppc
|
||||
rm -f $FULLPATH/libgcc_s.so
|
||||
echo '/* GNU ld script
|
||||
Use the shared library, but some functions are only in
|
||||
the static library, so try that secondarily. */
|
||||
OUTPUT_FORMAT(elf32-powerpc)
|
||||
GROUP ( /lib/libgcc_s.so.1 libgcc.a )' > $FULLPATH/libgcc_s.so
|
||||
%endif
|
||||
%ifarch ppc64
|
||||
rm -f $FULLPATH/32/libgcc_s.so
|
||||
echo '/* GNU ld script
|
||||
Use the shared library, but some functions are only in
|
||||
the static library, so try that secondarily. */
|
||||
OUTPUT_FORMAT(elf32-powerpc)
|
||||
GROUP ( /lib/libgcc_s.so.1 libgcc.a )' > $FULLPATH/32/libgcc_s.so
|
||||
%endif
|
||||
|
||||
mv -f %{buildroot}%{_prefix}/%{_lib}/libgomp.spec $FULLPATH/
|
||||
|
||||
@ -1807,6 +1827,14 @@ fi
|
||||
%doc rpm.doc/changelogs/libmudflap/ChangeLog*
|
||||
|
||||
%changelog
|
||||
* Thu Sep 10 2009 Jakub Jelinek <jakub@redhat.com> 4.4.1-12
|
||||
- update from gcc-4_4-branch
|
||||
- PRs bootstrap/41180, target/41315
|
||||
- fix ICE in tree-ssa-phiprop.c (#522277, PR tree-optimization/39827)
|
||||
- ppc64 bswap fix
|
||||
- fix ppc/ppc64 -mmultiple and out of line gpr/fpr saving bugs
|
||||
(#519409, PR target/40677, PR target/41175)
|
||||
|
||||
* Wed Sep 9 2009 Jakub Jelinek <jakub@redhat.com> 4.4.1-11
|
||||
- fix ICE in tls_mem_loc_descriptor (#521991)
|
||||
|
||||
|
136
gcc44-powerpc-libgcc_s_so.patch
Normal file
136
gcc44-powerpc-libgcc_s_so.patch
Normal file
@ -0,0 +1,136 @@
|
||||
svn diff -r151567:151568 svn+ssh://gcc.gnu.org/svn/gcc/trunk
|
||||
|
||||
2009-09-09 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
* config/t-slibgcc-elf-ver (SHLIB_MAKE_SOLINK, SHLIB_INSTALL_SOLINK):
|
||||
New variables.
|
||||
(SHLIB_LINK, SHLIB_INSTALL): Use them.
|
||||
* config/t-slibgcc-libgcc: New file.
|
||||
* config.gcc (powerpc*-*-linux*, powerpc*-*-gnu*): Use it.
|
||||
|
||||
--- gcc/config.gcc (revision 151567)
|
||||
+++ gcc/config.gcc (revision 151568)
|
||||
@@ -1738,12 +1738,12 @@ powerpc64-*-linux*)
|
||||
tm_file="rs6000/secureplt.h ${tm_file}"
|
||||
fi
|
||||
extra_options="${extra_options} rs6000/sysv4.opt rs6000/linux64.opt"
|
||||
- tmake_file="t-dfprules rs6000/t-fprules ${tmake_file} rs6000/t-ppccomm rs6000/t-linux64 rs6000/t-fprules-softfp soft-fp/t-softfp"
|
||||
+ tmake_file="t-dfprules rs6000/t-fprules ${tmake_file} t-slibgcc-libgcc rs6000/t-ppccomm rs6000/t-linux64 rs6000/t-fprules-softfp soft-fp/t-softfp"
|
||||
;;
|
||||
powerpc64-*-gnu*)
|
||||
tm_file="${cpu_type}/${cpu_type}.h elfos.h svr4.h freebsd-spec.h gnu.h rs6000/sysv4.h rs6000/linux64.h rs6000/gnu.h"
|
||||
extra_options="${extra_options} rs6000/sysv4.opt rs6000/linux64.opt"
|
||||
- tmake_file="rs6000/t-fprules t-slibgcc-elf-ver t-gnu rs6000/t-linux64 rs6000/t-fprules-softfp soft-fp/t-softfp"
|
||||
+ tmake_file="rs6000/t-fprules t-slibgcc-elf-ver t-slibgcc-libgcc t-gnu rs6000/t-linux64 rs6000/t-fprules-softfp soft-fp/t-softfp"
|
||||
;;
|
||||
powerpc-*-darwin*)
|
||||
extra_options="${extra_options} rs6000/darwin.opt"
|
||||
@@ -1820,22 +1820,22 @@ powerpc-*-rtems*)
|
||||
powerpc-*-linux*altivec*)
|
||||
tm_file="${tm_file} dbxelf.h elfos.h svr4.h freebsd-spec.h rs6000/sysv4.h rs6000/linux.h rs6000/linuxaltivec.h"
|
||||
extra_options="${extra_options} rs6000/sysv4.opt"
|
||||
- tmake_file="rs6000/t-fprules rs6000/t-fprules-softfp soft-fp/t-softfp rs6000/t-ppcos ${tmake_file} rs6000/t-ppccomm"
|
||||
+ tmake_file="rs6000/t-fprules rs6000/t-fprules-softfp soft-fp/t-softfp rs6000/t-ppcos ${tmake_file} t-slibgcc-libgcc rs6000/t-ppccomm"
|
||||
;;
|
||||
powerpc-*-linux*spe*)
|
||||
tm_file="${tm_file} dbxelf.h elfos.h svr4.h freebsd-spec.h rs6000/sysv4.h rs6000/linux.h rs6000/linuxspe.h rs6000/e500.h"
|
||||
extra_options="${extra_options} rs6000/sysv4.opt"
|
||||
- tmake_file="t-dfprules rs6000/t-fprules rs6000/t-fprules-softfp soft-fp/t-softfp rs6000/t-ppcos ${tmake_file} rs6000/t-ppccomm"
|
||||
+ tmake_file="t-dfprules rs6000/t-fprules rs6000/t-fprules-softfp soft-fp/t-softfp rs6000/t-ppcos ${tmake_file} t-slibgcc-libgcc rs6000/t-ppccomm"
|
||||
;;
|
||||
powerpc-*-linux*paired*)
|
||||
tm_file="${tm_file} dbxelf.h elfos.h svr4.h freebsd-spec.h rs6000/sysv4.h rs6000/linux.h rs6000/750cl.h"
|
||||
extra_options="${extra_options} rs6000/sysv4.opt"
|
||||
- tmake_file="rs6000/t-fprules rs6000/t-fprules-softfp soft-fp/t-softfp rs6000/t-ppcos ${tmake_file} rs6000/t-ppccomm"
|
||||
+ tmake_file="rs6000/t-fprules rs6000/t-fprules-softfp soft-fp/t-softfp rs6000/t-ppcos ${tmake_file} t-slibgcc-libgcc rs6000/t-ppccomm"
|
||||
;;
|
||||
powerpc-*-linux*)
|
||||
tm_file="${tm_file} dbxelf.h elfos.h svr4.h freebsd-spec.h rs6000/sysv4.h"
|
||||
extra_options="${extra_options} rs6000/sysv4.opt"
|
||||
- tmake_file="t-dfprules rs6000/t-fprules rs6000/t-ppcos ${tmake_file} rs6000/t-ppccomm"
|
||||
+ tmake_file="t-dfprules rs6000/t-fprules rs6000/t-ppcos ${tmake_file} t-slibgcc-libgcc rs6000/t-ppccomm"
|
||||
case ${enable_targets}:${cpu_is_64bit} in
|
||||
*powerpc64* | all:* | *:yes)
|
||||
if test x$cpu_is_64bit = xyes; then
|
||||
@@ -1857,14 +1857,14 @@ powerpc-*-linux*)
|
||||
powerpc-*-gnu-gnualtivec*)
|
||||
tm_file="${cpu_type}/${cpu_type}.h elfos.h svr4.h freebsd-spec.h gnu.h rs6000/sysv4.h rs6000/linux.h rs6000/linuxaltivec.h rs6000/gnu.h"
|
||||
extra_options="${extra_options} rs6000/sysv4.opt"
|
||||
- tmake_file="rs6000/t-fprules rs6000/t-fprules-fpbit rs6000/t-ppcos t-slibgcc-elf-ver t-gnu rs6000/t-ppccomm"
|
||||
+ tmake_file="rs6000/t-fprules rs6000/t-fprules-fpbit rs6000/t-ppcos t-slibgcc-elf-ver t-slibgcc-libgcc t-gnu rs6000/t-ppccomm"
|
||||
if test x$enable_threads = xyes; then
|
||||
thread_file='posix'
|
||||
fi
|
||||
;;
|
||||
powerpc-*-gnu*)
|
||||
tm_file="${cpu_type}/${cpu_type}.h elfos.h svr4.h freebsd-spec.h gnu.h rs6000/sysv4.h rs6000/linux.h rs6000/gnu.h"
|
||||
- tmake_file="rs6000/t-fprules rs6000/t-fprules-fpbit rs6000/t-ppcos t-slibgcc-elf-ver t-gnu rs6000/t-ppccomm"
|
||||
+ tmake_file="rs6000/t-fprules rs6000/t-fprules-fpbit rs6000/t-ppcos t-slibgcc-elf-ver t-slibgcc-libgcc t-gnu rs6000/t-ppccomm"
|
||||
extra_options="${extra_options} rs6000/sysv4.opt"
|
||||
if test x$enable_threads = xyes; then
|
||||
thread_file='posix'
|
||||
--- gcc/config/t-slibgcc-libgcc (revision 0)
|
||||
+++ gcc/config/t-slibgcc-libgcc (revision 151568)
|
||||
@@ -0,0 +1,32 @@
|
||||
+# Copyright (C) 2009 Free Software Foundation, Inc.
|
||||
+#
|
||||
+# This file is part of GCC.
|
||||
+#
|
||||
+# GCC is free software; you can redistribute it and/or modify
|
||||
+# it under the terms of the GNU General Public License as published by
|
||||
+# the Free Software Foundation; either version 3, or (at your option)
|
||||
+# any later version.
|
||||
+#
|
||||
+# GCC is distributed in the hope that it will be useful,
|
||||
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
+# GNU General Public License for more details.
|
||||
+#
|
||||
+# You should have received a copy of the GNU General Public License
|
||||
+# along with GCC; see the file COPYING3. If not see
|
||||
+# <http://www.gnu.org/licenses/>.
|
||||
+
|
||||
+# Instead of creating $(SHLIB_SOLINK) symlink create a GNU ld
|
||||
+# linker script which sources in both $(SHLIB_SONAME) and libgcc.a.
|
||||
+# This is needed on targets where libgcc.a contains routines that aren't in
|
||||
+# $(SHLIB_SONAME) and are needed for shared libraries.
|
||||
+
|
||||
+SHLIB_MAKE_SOLINK = \
|
||||
+ (echo "/* GNU ld script"; \
|
||||
+ echo " Use the shared library, but some functions are only in"; \
|
||||
+ echo " the static library. */"; \
|
||||
+ echo "GROUP ( $(SHLIB_SONAME) libgcc.a )" \
|
||||
+ ) > $(SHLIB_DIR)/$(SHLIB_SOLINK)
|
||||
+SHLIB_INSTALL_SOLINK = \
|
||||
+ $(INSTALL_DATA) $(SHLIB_DIR)/$(SHLIB_SOLINK) \
|
||||
+ $$(DESTDIR)$$(slibdir)$(SHLIB_SLIBDIR_QUAL)/$(SHLIB_SOLINK)
|
||||
--- gcc/config/t-slibgcc-elf-ver (revision 151567)
|
||||
+++ gcc/config/t-slibgcc-elf-ver (revision 151568)
|
||||
@@ -28,6 +28,9 @@ SHLIB_OBJS = @shlib_objs@
|
||||
SHLIB_DIR = @multilib_dir@
|
||||
SHLIB_SLIBDIR_QUAL = @shlib_slibdir_qual@
|
||||
SHLIB_LC = -lc
|
||||
+SHLIB_MAKE_SOLINK = $(LN_S) $(SHLIB_SONAME) $(SHLIB_DIR)/$(SHLIB_SOLINK)
|
||||
+SHLIB_INSTALL_SOLINK = $(LN_S) $(SHLIB_SONAME) \
|
||||
+ $$(DESTDIR)$$(slibdir)$(SHLIB_SLIBDIR_QUAL)/$(SHLIB_SOLINK)
|
||||
|
||||
SHLIB_LINK = $(GCC_FOR_TARGET) $(LIBGCC2_CFLAGS) -shared -nodefaultlibs \
|
||||
-Wl,--soname=$(SHLIB_SONAME) \
|
||||
@@ -40,7 +43,7 @@ SHLIB_LINK = $(GCC_FOR_TARGET) $(LIBGCC2
|
||||
$(SHLIB_DIR)/$(SHLIB_SONAME).backup; \
|
||||
else true; fi && \
|
||||
mv $(SHLIB_DIR)/$(SHLIB_SONAME).tmp $(SHLIB_DIR)/$(SHLIB_SONAME) && \
|
||||
- $(LN_S) $(SHLIB_SONAME) $(SHLIB_DIR)/$(SHLIB_SOLINK)
|
||||
+ $(SHLIB_MAKE_SOLINK)
|
||||
# $(slibdir) double quoted to protect it from expansion while building
|
||||
# libgcc.mk. We want this delayed until actual install time.
|
||||
SHLIB_INSTALL = \
|
||||
@@ -48,7 +51,6 @@ SHLIB_INSTALL = \
|
||||
$(INSTALL_DATA) $(SHLIB_DIR)/$(SHLIB_SONAME) \
|
||||
$$(DESTDIR)$$(slibdir)$(SHLIB_SLIBDIR_QUAL)/$(SHLIB_SONAME); \
|
||||
rm -f $$(DESTDIR)$$(slibdir)$(SHLIB_SLIBDIR_QUAL)/$(SHLIB_SOLINK); \
|
||||
- $(LN_S) $(SHLIB_SONAME) \
|
||||
- $$(DESTDIR)$$(slibdir)$(SHLIB_SLIBDIR_QUAL)/$(SHLIB_SOLINK)
|
||||
+ $(SHLIB_INSTALL_SOLINK)
|
||||
SHLIB_MKMAP = $(srcdir)/mkmap-symver.awk
|
||||
SHLIB_MAPFILES = $(srcdir)/libgcc-std.ver
|
236
gcc44-pr41175.patch
Normal file
236
gcc44-pr41175.patch
Normal file
@ -0,0 +1,236 @@
|
||||
2009-09-10 Nathan Froyd <froydnj@codesourcery.com>
|
||||
|
||||
PR target/40677
|
||||
PR target/41175
|
||||
* config/rs6000/rs6000.c (no_global_regs_above): Fix precedence
|
||||
problem.
|
||||
(rs6000_savres_routine_sym): Fix computation for cache selector.
|
||||
Mark the generated symbol as a function.
|
||||
(rs6000_emit_prologue): Correct use of call_used_regs.
|
||||
(rs6000_emit_epilogue): Adjust computation of restore_lr.
|
||||
Duplicate restoration of LR and execute the appropriate one
|
||||
depending on whether GPRs are being restored inline.
|
||||
* config/rs6000/rs6000.md (*save_gpregs_<mode>): Use explicit
|
||||
match for register 11.
|
||||
(*save_fpregs_<mode>): Likewise.
|
||||
(*restore_gpregs_<mode>): Likewise.
|
||||
(*return_and_restore_gpregs_<mode>): Likewise.
|
||||
(*return_and_restore_fpregs_<mode>): Likewise.
|
||||
* config/rs6000/spe.md (*save_gpregs_spe): Use explicit match for
|
||||
register 11.
|
||||
(*restore_gpregs_spe): Likewise.
|
||||
(*return_and_restore_gpregs_spe): Likewise.
|
||||
|
||||
--- gcc/config/rs6000/spe.md.jj 2009-08-31 23:30:14.352526952 +0200
|
||||
+++ gcc/config/rs6000/spe.md 2009-09-09 20:46:08.391404851 +0200
|
||||
@@ -3156,9 +3156,9 @@
|
||||
[(match_parallel 0 "any_parallel_operand"
|
||||
[(clobber (reg:P 65))
|
||||
(use (match_operand:P 1 "symbol_ref_operand" "s"))
|
||||
- (use (match_operand:P 2 "gpc_reg_operand" "r"))
|
||||
- (set (match_operand:V2SI 3 "memory_operand" "=m")
|
||||
- (match_operand:V2SI 4 "gpc_reg_operand" "r"))])]
|
||||
+ (use (reg:P 11))
|
||||
+ (set (match_operand:V2SI 2 "memory_operand" "=m")
|
||||
+ (match_operand:V2SI 3 "gpc_reg_operand" "r"))])]
|
||||
"TARGET_SPE_ABI"
|
||||
"bl %z1"
|
||||
[(set_attr "type" "branch")
|
||||
@@ -3168,9 +3168,9 @@
|
||||
[(match_parallel 0 "any_parallel_operand"
|
||||
[(clobber (reg:P 65))
|
||||
(use (match_operand:P 1 "symbol_ref_operand" "s"))
|
||||
- (use (match_operand:P 2 "gpc_reg_operand" "r"))
|
||||
- (set (match_operand:V2SI 3 "gpc_reg_operand" "=r")
|
||||
- (match_operand:V2SI 4 "memory_operand" "m"))])]
|
||||
+ (use (reg:P 11))
|
||||
+ (set (match_operand:V2SI 2 "gpc_reg_operand" "=r")
|
||||
+ (match_operand:V2SI 3 "memory_operand" "m"))])]
|
||||
"TARGET_SPE_ABI"
|
||||
"bl %z1"
|
||||
[(set_attr "type" "branch")
|
||||
@@ -3181,9 +3181,9 @@
|
||||
[(return)
|
||||
(clobber (reg:P 65))
|
||||
(use (match_operand:P 1 "symbol_ref_operand" "s"))
|
||||
- (use (match_operand:P 2 "gpc_reg_operand" "r"))
|
||||
- (set (match_operand:V2SI 3 "gpc_reg_operand" "=r")
|
||||
- (match_operand:V2SI 4 "memory_operand" "m"))])]
|
||||
+ (use (reg:P 11))
|
||||
+ (set (match_operand:V2SI 2 "gpc_reg_operand" "=r")
|
||||
+ (match_operand:V2SI 3 "memory_operand" "m"))])]
|
||||
"TARGET_SPE_ABI"
|
||||
"b %z1"
|
||||
[(set_attr "type" "branch")
|
||||
--- gcc/config/rs6000/rs6000.c.jj 2009-09-09 20:45:10.794535794 +0200
|
||||
+++ gcc/config/rs6000/rs6000.c 2009-09-09 20:46:57.195401830 +0200
|
||||
@@ -18011,7 +18011,8 @@ static bool
|
||||
no_global_regs_above (int first, bool gpr)
|
||||
{
|
||||
int i;
|
||||
- for (i = first; i < gpr ? 32 : 64 ; i++)
|
||||
+ int last = gpr ? 32 : 64;
|
||||
+ for (i = first; i < last; i++)
|
||||
if (global_regs[i])
|
||||
return false;
|
||||
return true;
|
||||
@@ -18037,11 +18038,11 @@ rs6000_savres_routine_sym (rs6000_stack_
|
||||
int regno = gpr ? info->first_gp_reg_save : (info->first_fp_reg_save - 32);
|
||||
rtx sym;
|
||||
int select = ((savep ? 1 : 0) << 2
|
||||
- | (gpr
|
||||
+ | (TARGET_SPE_ABI
|
||||
/* On the SPE, we never have any FPRs, but we do have
|
||||
32/64-bit versions of the routines. */
|
||||
- ? (TARGET_SPE_ABI && info->spe_64bit_regs_used ? 1 : 0)
|
||||
- : 0) << 1
|
||||
+ ? (info->spe_64bit_regs_used ? 1 : 0)
|
||||
+ : (gpr ? 1 : 0)) << 1
|
||||
| (exitp ? 1: 0));
|
||||
|
||||
/* Don't generate bogus routine names. */
|
||||
@@ -18076,6 +18077,7 @@ rs6000_savres_routine_sym (rs6000_stack_
|
||||
|
||||
sym = savres_routine_syms[regno-FIRST_SAVRES_REGISTER][select]
|
||||
= gen_rtx_SYMBOL_REF (Pmode, ggc_strdup (name));
|
||||
+ SYMBOL_REF_FLAGS (sym) |= SYMBOL_FLAG_FUNCTION;
|
||||
}
|
||||
|
||||
return sym;
|
||||
@@ -18289,7 +18291,7 @@ rs6000_emit_prologue (void)
|
||||
int using_store_multiple;
|
||||
int using_static_chain_p = (cfun->static_chain_decl != NULL_TREE
|
||||
&& df_regs_ever_live_p (STATIC_CHAIN_REGNUM)
|
||||
- && !call_used_regs[STATIC_CHAIN_REGNUM]);
|
||||
+ && call_used_regs[STATIC_CHAIN_REGNUM]);
|
||||
HOST_WIDE_INT sp_offset = 0;
|
||||
|
||||
if (TARGET_FIX_AND_CONTINUE)
|
||||
@@ -19095,8 +19097,9 @@ rs6000_emit_epilogue (int sibcall)
|
||||
|| (cfun->calls_alloca
|
||||
&& !frame_pointer_needed));
|
||||
restore_lr = (info->lr_save_p
|
||||
- && restoring_GPRs_inline
|
||||
- && restoring_FPRs_inline);
|
||||
+ && (restoring_GPRs_inline
|
||||
+ || (restoring_FPRs_inline
|
||||
+ && info->first_fp_reg_save < 64)));
|
||||
|
||||
if (WORLD_SAVE_P (info))
|
||||
{
|
||||
@@ -19383,7 +19386,7 @@ rs6000_emit_epilogue (int sibcall)
|
||||
|
||||
/* Get the old lr if we saved it. If we are restoring registers
|
||||
out-of-line, then the out-of-line routines can do this for us. */
|
||||
- if (restore_lr)
|
||||
+ if (restore_lr && restoring_GPRs_inline)
|
||||
{
|
||||
rtx mem = gen_frame_mem_offset (Pmode, frame_reg_rtx,
|
||||
info->lr_save_offset + sp_offset);
|
||||
@@ -19403,7 +19406,7 @@ rs6000_emit_epilogue (int sibcall)
|
||||
|
||||
/* Set LR here to try to overlap restores below. LR is always saved
|
||||
above incoming stack, so it never needs REG_CFA_RESTORE. */
|
||||
- if (restore_lr)
|
||||
+ if (restore_lr && restoring_GPRs_inline)
|
||||
emit_move_insn (gen_rtx_REG (Pmode, LR_REGNO),
|
||||
gen_rtx_REG (Pmode, 0));
|
||||
|
||||
@@ -19639,6 +19642,18 @@ rs6000_emit_epilogue (int sibcall)
|
||||
}
|
||||
}
|
||||
|
||||
+ if (restore_lr && !restoring_GPRs_inline)
|
||||
+ {
|
||||
+ rtx mem = gen_frame_mem_offset (Pmode, frame_reg_rtx,
|
||||
+ info->lr_save_offset + sp_offset);
|
||||
+
|
||||
+ emit_move_insn (gen_rtx_REG (Pmode, 0), mem);
|
||||
+ }
|
||||
+
|
||||
+ if (restore_lr && !restoring_GPRs_inline)
|
||||
+ emit_move_insn (gen_rtx_REG (Pmode, LR_REGNO),
|
||||
+ gen_rtx_REG (Pmode, 0));
|
||||
+
|
||||
/* Restore fpr's if we need to do it without calling a function. */
|
||||
if (restoring_FPRs_inline)
|
||||
for (i = 0; i < 64 - info->first_fp_reg_save; i++)
|
||||
--- gcc/config/rs6000/rs6000.md.jj 2009-08-31 23:30:14.383526862 +0200
|
||||
+++ gcc/config/rs6000/rs6000.md 2009-09-09 21:03:19.667779689 +0200
|
||||
@@ -15289,9 +15289,9 @@
|
||||
[(match_parallel 0 "any_parallel_operand"
|
||||
[(clobber (reg:P 65))
|
||||
(use (match_operand:P 1 "symbol_ref_operand" "s"))
|
||||
- (use (match_operand:P 2 "gpc_reg_operand" "r"))
|
||||
- (set (match_operand:P 3 "memory_operand" "=m")
|
||||
- (match_operand:P 4 "gpc_reg_operand" "r"))])]
|
||||
+ (use (reg:P 11))
|
||||
+ (set (match_operand:P 2 "memory_operand" "=m")
|
||||
+ (match_operand:P 3 "gpc_reg_operand" "r"))])]
|
||||
""
|
||||
"bl %z1"
|
||||
[(set_attr "type" "branch")
|
||||
@@ -15301,9 +15301,9 @@
|
||||
[(match_parallel 0 "any_parallel_operand"
|
||||
[(clobber (reg:P 65))
|
||||
(use (match_operand:P 1 "symbol_ref_operand" "s"))
|
||||
- (use (match_operand:P 2 "gpc_reg_operand" "r"))
|
||||
- (set (match_operand:DF 3 "memory_operand" "=m")
|
||||
- (match_operand:DF 4 "gpc_reg_operand" "f"))])]
|
||||
+ (use (reg:P 11))
|
||||
+ (set (match_operand:DF 2 "memory_operand" "=m")
|
||||
+ (match_operand:DF 3 "gpc_reg_operand" "f"))])]
|
||||
""
|
||||
"bl %z1"
|
||||
[(set_attr "type" "branch")
|
||||
@@ -15394,11 +15394,11 @@
|
||||
|
||||
(define_insn "*restore_gpregs_<mode>"
|
||||
[(match_parallel 0 "any_parallel_operand"
|
||||
- [(clobber (match_operand:P 1 "register_operand" "=l"))
|
||||
- (use (match_operand:P 2 "symbol_ref_operand" "s"))
|
||||
- (use (match_operand:P 3 "gpc_reg_operand" "r"))
|
||||
- (set (match_operand:P 4 "gpc_reg_operand" "=r")
|
||||
- (match_operand:P 5 "memory_operand" "m"))])]
|
||||
+ [(clobber (match_operand:P 1 "register_operand" "=l"))
|
||||
+ (use (match_operand:P 2 "symbol_ref_operand" "s"))
|
||||
+ (use (reg:P 11))
|
||||
+ (set (match_operand:P 3 "gpc_reg_operand" "=r")
|
||||
+ (match_operand:P 4 "memory_operand" "m"))])]
|
||||
""
|
||||
"bl %z2"
|
||||
[(set_attr "type" "branch")
|
||||
@@ -15406,12 +15406,12 @@
|
||||
|
||||
(define_insn "*return_and_restore_gpregs_<mode>"
|
||||
[(match_parallel 0 "any_parallel_operand"
|
||||
- [(return)
|
||||
+ [(return)
|
||||
(clobber (match_operand:P 1 "register_operand" "=l"))
|
||||
(use (match_operand:P 2 "symbol_ref_operand" "s"))
|
||||
- (use (match_operand:P 3 "gpc_reg_operand" "r"))
|
||||
- (set (match_operand:P 4 "gpc_reg_operand" "=r")
|
||||
- (match_operand:P 5 "memory_operand" "m"))])]
|
||||
+ (use (reg:P 11))
|
||||
+ (set (match_operand:P 3 "gpc_reg_operand" "=r")
|
||||
+ (match_operand:P 4 "memory_operand" "m"))])]
|
||||
""
|
||||
"b %z2"
|
||||
[(set_attr "type" "branch")
|
||||
@@ -15419,12 +15419,12 @@
|
||||
|
||||
(define_insn "*return_and_restore_fpregs_<mode>"
|
||||
[(match_parallel 0 "any_parallel_operand"
|
||||
- [(return)
|
||||
+ [(return)
|
||||
(clobber (match_operand:P 1 "register_operand" "=l"))
|
||||
(use (match_operand:P 2 "symbol_ref_operand" "s"))
|
||||
- (use (match_operand:P 3 "gpc_reg_operand" "r"))
|
||||
- (set (match_operand:DF 4 "gpc_reg_operand" "=f")
|
||||
- (match_operand:DF 5 "memory_operand" "m"))])]
|
||||
+ (use (reg:P 11))
|
||||
+ (set (match_operand:DF 3 "gpc_reg_operand" "=f")
|
||||
+ (match_operand:DF 4 "memory_operand" "m"))])]
|
||||
""
|
||||
"b %z2"
|
||||
[(set_attr "type" "branch")
|
Loading…
Reference in New Issue
Block a user