aboutsummaryrefslogtreecommitdiff
path: root/gcc/reload1.c
diff options
context:
space:
mode:
authorRichard Kenner <kenner@gcc.gnu.org>1997-05-18 08:50:22 -0400
committerRichard Kenner <kenner@gcc.gnu.org>1997-05-18 08:50:22 -0400
commit6e848450718f16cd67bb8677205034c22a130cbb (patch)
tree4778dd3432e8f407da1304c0d95df8cbf584e459 /gcc/reload1.c
parent2ae3dcac7b4c2901bda0ff9b4fc6768309c35f42 (diff)
downloadgcc-6e848450718f16cd67bb8677205034c22a130cbb.zip
gcc-6e848450718f16cd67bb8677205034c22a130cbb.tar.gz
gcc-6e848450718f16cd67bb8677205034c22a130cbb.tar.bz2
(reload_cse_regno_equal_p): Check for value using more than one
register on a big endian machine. From-SVN: r14088
Diffstat (limited to 'gcc/reload1.c')
-rw-r--r--gcc/reload1.c8
1 files changed, 8 insertions, 0 deletions
diff --git a/gcc/reload1.c b/gcc/reload1.c
index 199ae68..62ac6d7 100644
--- a/gcc/reload1.c
+++ b/gcc/reload1.c
@@ -7980,6 +7980,14 @@ reload_cse_regno_equal_p (regno, val, mode)
&& (GET_CODE (val) != CONST_INT
|| mode == GET_MODE (x)
|| (GET_MODE_SIZE (mode) < GET_MODE_SIZE (GET_MODE (x))
+ /* On a big endian machine if the value spans more than
+ one register then this register holds the high part of
+ it and we can't use it.
+
+ ??? We should also compare with the high part of the
+ value. */
+ && !(WORDS_BIG_ENDIAN
+ && HARD_REGNO_NREGS (regno, GET_MODE (x)) > 1)
&& TRULY_NOOP_TRUNCATION (GET_MODE_BITSIZE (mode),
GET_MODE_BITSIZE (GET_MODE (x))))))
return 1;