aboutsummaryrefslogtreecommitdiff
path: root/gcc/reload.c
diff options
context:
space:
mode:
authorJ"orn Rennecke <amylaar@cygnus.co.uk>1998-01-28 19:09:41 +0000
committerJeff Law <law@gcc.gnu.org>1998-01-28 12:09:41 -0700
commitd2c92f5a43a4541115e0b8eadf024ed7004e1386 (patch)
tree1c0035b1008301f0c1636f9a9b2ab3bf5c8484e0 /gcc/reload.c
parent90ad3ab77dfe645679ac8aee9e5d5bd303dc1d25 (diff)
downloadgcc-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/reload.c')
-rw-r--r--gcc/reload.c11
1 files changed, 9 insertions, 2 deletions
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 ();