From: Jeffrey A Law Date: Sat, 12 Jun 1999 02:42:16 +0000 (+0000) Subject: sparc.h (LEGITIMIZE_RELOAD_ADDRESS): Do nothing with operands that require PIC code... X-Git-Tag: prereleases/gcc-2.95-test~230 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=d9f77a641b15705a0980cf354660fb975751a4da;p=thirdparty%2Fgcc.git sparc.h (LEGITIMIZE_RELOAD_ADDRESS): Do nothing with operands that require PIC code sequences. � * sparc.h (LEGITIMIZE_RELOAD_ADDRESS): Do nothing with operands that require PIC code sequences. Fixes libstdc++ & libg++ failures on sparc platforms. From-SVN: r27493 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 83248e57030d..5e793da37113 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +Sat Jun 12 03:40:42 1999 Jeffrey A Law (law@cygnus.com) + + * sparc.h (LEGITIMIZE_RELOAD_ADDRESS): Do nothing with operands + that require PIC code sequences. + Fri Jun 11 03:17:51 1999 Jeffrey A Law (law@cygnus.com) * Makefile.in (libgcc2): Pass MAYBE_USE_COLLECT2 as an argument. diff --git a/gcc/config/sparc/sparc.h b/gcc/config/sparc/sparc.h index b00a145164dd..2c1a5b506dbe 100644 --- a/gcc/config/sparc/sparc.h +++ b/gcc/config/sparc/sparc.h @@ -2584,8 +2584,11 @@ extern struct rtx_def *legitimize_pic_address (); For Sparc 32, we wish to handle addresses by splitting them into HIGH+LO_SUM pairs, retaining the LO_SUM in the memory reference. - This cuts the number of extra insns by one. */ - + This cuts the number of extra insns by one. + + Do nothing when generating PIC code and the address is a + symbolic operand or requires a scratch register. */ + #define LEGITIMIZE_RELOAD_ADDRESS(X,MODE,OPNUM,TYPE,IND_LEVELS,WIN) \ do { \ /* Decompose SImode constants into hi+lo_sum. We do have to \ @@ -2593,7 +2596,10 @@ do { \ if (CONSTANT_P (X) \ && (MODE != TFmode || TARGET_V9) \ && GET_MODE (X) == SImode \ - && GET_CODE (X) != LO_SUM && GET_CODE (X) != HIGH) \ + && GET_CODE (X) != LO_SUM && GET_CODE (X) != HIGH \ + && ! (flag_pic \ + && (symbolic_operand (X, Pmode)) \ + || pic_address_needs_scratch (X))) \ { \ X = gen_rtx_LO_SUM (GET_MODE (X), \ gen_rtx_HIGH (GET_MODE (X), X), X); \