+Mon Nov 22 23:53:50 1999 J"orn Rennecke <amylaar@cygnus.co.uk>
+
+ * combine.c (combine_simplify_rtx): When handling a SUBREG,
+ take SUBREG_WORD into account.
+ (if_then_else_cond): Likewise.
+
1999-11-22 Jason Merrill <jason@casey.cygnus.com>
* gmon.c, i386/gmon-sol2.c, sparc/gmon-sol2.c: Remove advertising
since we are saying that the high bits don't matter. */
if (CONSTANT_P (SUBREG_REG (x)) && GET_MODE (SUBREG_REG (x)) == VOIDmode
&& GET_MODE_SIZE (mode) > GET_MODE_SIZE (op0_mode))
- return SUBREG_REG (x);
+ {
+ if (GET_MODE_SIZE (GET_MODE (SUBREG_REG (x))) > UNITS_PER_WORD
+ && (WORDS_BIG_ENDIAN || SUBREG_WORD (x) != 0))
+ return operand_subword (SUBREG_REG (x), SUBREG_WORD (x), 0, mode);
+ return SUBREG_REG (x);
+ }
/* Note that we cannot do any narrowing for non-constants since
we might have been counting on using the fact that some bits were
&& 0 != (cond0 = if_then_else_cond (SUBREG_REG (x),
&true0, &false0)))
{
+ if (GET_MODE_SIZE (GET_MODE (SUBREG_REG (x))) > UNITS_PER_WORD
+ && (WORDS_BIG_ENDIAN || SUBREG_WORD (x) != 0))
+ {
+ true0 = operand_subword (true0, SUBREG_WORD (x), 0, mode);
+ false0 = operand_subword (false0, SUBREG_WORD (x), 0, mode);
+ }
*ptrue = force_to_mode (true0, mode, GET_MODE_MASK (mode), NULL_RTX, 0);
*pfalse
= force_to_mode (false0, mode, GET_MODE_MASK (mode), NULL_RTX, 0);