diff options
author | J"orn Rennecke <amylaar@cygnus.co.uk> | 1998-01-28 19:09:41 +0000 |
---|---|---|
committer | Jeff Law <law@gcc.gnu.org> | 1998-01-28 12:09:41 -0700 |
commit | d2c92f5a43a4541115e0b8eadf024ed7004e1386 (patch) | |
tree | 1c0035b1008301f0c1636f9a9b2ab3bf5c8484e0 /gcc | |
parent | 90ad3ab77dfe645679ac8aee9e5d5bd303dc1d25 (diff) | |
download | gcc-d2c92f5a43a4541115e0b8eadf024ed7004e1386.zip gcc-d2c92f5a43a4541115e0b8eadf024ed7004e1386.tar.gz gcc-d2c92f5a43a4541115e0b8eadf024ed7004e1386.tar.bz2 |
reload.c (push_reload): If WORD_REGISTER_OPERATIONS...
* reload.c (push_reload): If WORD_REGISTER_OPERATIONS, reload the
SUBREG_REG if the word count is unchanged, also in the input reload
case. Disable non-applicable sanity checks.
From-SVN: r17541
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/reload.c | 11 |
2 files changed, 15 insertions, 2 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 5095ab2..c84c110 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +Wed Jan 28 20:11:06 1998 J"orn Rennecke <amylaar@cygnus.co.uk> + + * reload.c (push_reload): If WORD_REGISTER_OPERATIONS, reload the + SUBREG_REG if the word count is unchanged, also in the input reload + case. Disable non-applicable sanity checks. + Wed Jan 28 20:08:26 1998 Jeffrey A Law (law@cygnus.com) * config/t-svr4 (TARGET_LIBGCC2_CFLAGS): Add -fPIC. diff --git a/gcc/reload.c b/gcc/reload.c index 2fcdd5a..6006357 100644 --- a/gcc/reload.c +++ b/gcc/reload.c @@ -886,6 +886,13 @@ push_reload (in, out, inloc, outloc, class, && INTEGRAL_MODE_P (GET_MODE (SUBREG_REG (in))) && LOAD_EXTEND_OP (GET_MODE (SUBREG_REG (in))) != NIL) #endif +#ifdef WORD_REGISTER_OPERATIONS + || ((GET_MODE_SIZE (inmode) + < GET_MODE_SIZE (GET_MODE (SUBREG_REG (in)))) + && ((GET_MODE_SIZE (inmode) - 1) / UNITS_PER_WORD == + ((GET_MODE_SIZE (GET_MODE (SUBREG_REG (in))) - 1) + / UNITS_PER_WORD))) +#endif )) || (GET_CODE (SUBREG_REG (in)) == REG && REGNO (SUBREG_REG (in)) < FIRST_PSEUDO_REGISTER @@ -923,7 +930,7 @@ push_reload (in, out, inloc, outloc, class, in_subreg_loc = inloc; inloc = &SUBREG_REG (in); in = *inloc; -#ifndef LOAD_EXTEND_OP +#if ! defined (LOAD_EXTEND_OP) && ! defined (WORD_REGISTER_OPERATIONS) if (GET_CODE (in) == MEM) /* This is supposed to happen only for paradoxical subregs made by combine.c. (SUBREG (MEM)) isn't supposed to occur other ways. */ @@ -1027,7 +1034,7 @@ push_reload (in, out, inloc, outloc, class, out_subreg_loc = outloc; outloc = &SUBREG_REG (out); out = *outloc; -#ifndef LOAD_EXTEND_OP +#if ! defined (LOAD_EXTEND_OP) && ! defined (WORD_REGISTER_OPERATIONS) if (GET_CODE (out) == MEM && GET_MODE_SIZE (GET_MODE (out)) > GET_MODE_SIZE (outmode)) abort (); |