From ada760269525e77f9db65aca382070df63094eef Mon Sep 17 00:00:00 2001 From: law Date: Sat, 12 Jun 1999 02:44:18 +0000 Subject: [PATCH] ` * sparc.h (LEGITIMIZE_RELOAD_ADDRESS): Do nothing with operands that require PIC code sequences. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@27495 138bc75d-0d04-0410-961f-82ee72b054a4 --- gcc/config/sparc/sparc.h | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/gcc/config/sparc/sparc.h b/gcc/config/sparc/sparc.h index b00a145..2c1a5b5 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); \ -- 2.7.4