From: Richard Stallman Date: Mon, 24 May 1993 07:45:54 +0000 (+0000) Subject: (subst): For subreg-of-constant, don't gen_lowpart X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=19808e22caa8929ed61043340b832b5c51d4012a;p=gcc.git (subst): For subreg-of-constant, don't gen_lowpart if it's a big-endian machine and constant is multi-word. From-SVN: r4554 --- diff --git a/gcc/combine.c b/gcc/combine.c index ca1567c6f0e..49e214eecbf 100644 --- a/gcc/combine.c +++ b/gcc/combine.c @@ -3085,8 +3085,16 @@ subst (x, from, to, in_dest, unique_copy) return temp; } + /* If we want a subreg of a constant, at offset 0, + take the low bits. On a little-endian machine, that's + always valid. On a big-endian machine, it's valid + only if the constant's mode fits in one word. */ if (CONSTANT_P (SUBREG_REG (x)) && subreg_lowpart_p (x) - && GET_MODE_SIZE (mode) < GET_MODE_SIZE (op0_mode)) + && GET_MODE_SIZE (mode) < GET_MODE_SIZE (op0_mode) +#if WORDS_BIG_ENDIAN + && GET_MODE_BITSIZE (op0_mode) < BITS_PER_WORD +#endif + ) return gen_lowpart_for_combine (mode, SUBREG_REG (x)); /* If we are narrowing the object, we need to see if we can simplify