aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorRichard Kenner <kenner@gcc.gnu.org>1995-10-26 18:15:29 -0400
committerRichard Kenner <kenner@gcc.gnu.org>1995-10-26 18:15:29 -0400
commit1b4d2764e3d7b87e1db457f2378d70c7fd35d031 (patch)
tree939ab542e548cd607a738859d961bee22af65766 /gcc
parenta89088491643926984b58ed8d7349de5b80d5c30 (diff)
downloadgcc-1b4d2764e3d7b87e1db457f2378d70c7fd35d031.zip
gcc-1b4d2764e3d7b87e1db457f2378d70c7fd35d031.tar.gz
gcc-1b4d2764e3d7b87e1db457f2378d70c7fd35d031.tar.bz2
(find_reloads_address): When check for out of range constant plus register...
(find_reloads_address): When check for out of range constant plus register, accept any hard register instead of just fp, ap, sp. From-SVN: r10521
Diffstat (limited to 'gcc')
-rw-r--r--gcc/reload.c18
1 files changed, 8 insertions, 10 deletions
diff --git a/gcc/reload.c b/gcc/reload.c
index 620c90d..b64cb63 100644
--- a/gcc/reload.c
+++ b/gcc/reload.c
@@ -4240,17 +4240,15 @@ find_reloads_address (mode, memrefloc, ad, loc, opnum, type, ind_levels)
return 0;
}
- /* If we have address of a stack slot but it's not valid
- (displacement is too large), compute the sum in a register. */
+ /* If we have address of a stack slot but it's not valid because the
+ displacement is too large, compute the sum in a register.
+ Handle all base registers here, not just fp/ap/sp, because on some
+ targets (namely SH) we can also get too large displacements from
+ big-endian corrections. */
else if (GET_CODE (ad) == PLUS
- && (XEXP (ad, 0) == frame_pointer_rtx
-#if HARD_FRAME_POINTER_REGNUM != FRAME_POINTER_REGNUM
- || XEXP (ad, 0) == hard_frame_pointer_rtx
-#endif
-#if FRAME_POINTER_REGNUM != ARG_POINTER_REGNUM
- || XEXP (ad, 0) == arg_pointer_rtx
-#endif
- || XEXP (ad, 0) == stack_pointer_rtx)
+ && GET_CODE (XEXP (ad, 0)) == REG
+ && REGNO (XEXP (ad, 0)) < FIRST_PSEUDO_REGISTER
+ && REG_OK_FOR_BASE_P (XEXP (ad, 0))
&& GET_CODE (XEXP (ad, 1)) == CONST_INT)
{
/* Unshare the MEM rtx so we can safely alter it. */