diff options
| author | rth <rth@138bc75d-0d04-0410-961f-82ee72b054a4> | 2002-04-12 22:47:34 +0000 |
|---|---|---|
| committer | rth <rth@138bc75d-0d04-0410-961f-82ee72b054a4> | 2002-04-12 22:47:34 +0000 |
| commit | 03035422ac77a68bdaa4563b6cafc7909e5f7d3c (patch) | |
| tree | 20073095e154766bb4d21c028a51e77ddd6319b4 | |
| parent | db8872471d22c1aa24f26b1d063454217ce51c16 (diff) | |
| download | ppe42-gcc-03035422ac77a68bdaa4563b6cafc7909e5f7d3c.tar.gz ppe42-gcc-03035422ac77a68bdaa4563b6cafc7909e5f7d3c.zip | |
* recog.c (offsettable_address_p): Match the logic in adjust_address.
* config/sparc/sparc.h (LEGITIMIZE_RELOAD_ADDRESS): Handle TFmode
in 64-bit mode only. Use only for 32-bit or MEDLOW.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@52250 138bc75d-0d04-0410-961f-82ee72b054a4
| -rw-r--r-- | gcc/ChangeLog | 7 | ||||
| -rw-r--r-- | gcc/config/sparc/sparc.h | 5 | ||||
| -rw-r--r-- | gcc/recog.c | 4 |
3 files changed, 13 insertions, 3 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 3fef2124387..805698266fc 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,10 @@ +2002-04-12 Richard Henderson <rth@redhat.com> + + * recog.c (offsettable_address_p): Match the logic in adjust_address. + + * config/sparc/sparc.h (LEGITIMIZE_RELOAD_ADDRESS): Handle TFmode + in 64-bit mode only. Use only for 32-bit or MEDLOW. + 2002-04-12 Rainer Orth <ro@TechFak.Uni-Bielefeld.DE> * config/alpha/osf.h (LINK_SPEC): Pass -S to silence ld warnings. diff --git a/gcc/config/sparc/sparc.h b/gcc/config/sparc/sparc.h index 3ebe6267e63..d48b8ddb07a 100644 --- a/gcc/config/sparc/sparc.h +++ b/gcc/config/sparc/sparc.h @@ -2336,12 +2336,13 @@ do { \ /* Decompose SImode constants into hi+lo_sum. We do have to \ rerecognize what we produce, so be careful. */ \ if (CONSTANT_P (X) \ - && (MODE != TFmode || TARGET_V9) \ + && (MODE != TFmode || TARGET_ARCH64) \ && GET_MODE (X) == SImode \ && GET_CODE (X) != LO_SUM && GET_CODE (X) != HIGH \ && ! (flag_pic \ && (symbolic_operand (X, Pmode) \ - || pic_address_needs_scratch (X)))) \ + || pic_address_needs_scratch (X))) \ + && sparc_cmodel <= CM_MEDLOW) \ { \ X = gen_rtx_LO_SUM (GET_MODE (X), \ gen_rtx_HIGH (GET_MODE (X), X), X); \ diff --git a/gcc/recog.c b/gcc/recog.c index 7987d20ea88..2720d8e07e3 100644 --- a/gcc/recog.c +++ b/gcc/recog.c @@ -1969,7 +1969,9 @@ offsettable_address_p (strictp, mode, y) of the specified mode. We assume that if Y and Y+c are valid addresses then so is Y+d for all 0<d<c. adjust_address will go inside a LO_SUM here, so we do so as well. */ - if (GET_CODE (y) == LO_SUM) + if (GET_CODE (y) == LO_SUM + && mode != BLKmode + && mode_sz <= GET_MODE_ALIGNMENT (mode) / BITS_PER_UNIT) z = gen_rtx_LO_SUM (GET_MODE (y), XEXP (y, 0), plus_constant (XEXP (y, 1), mode_sz - 1)); else |

