Commit 19808e22 by Richard Stallman

(subst): For subreg-of-constant, don't gen_lowpart

if it's a big-endian machine and constant is multi-word.

From-SVN: r4554
parent 87d11e43
...@@ -3085,8 +3085,16 @@ subst (x, from, to, in_dest, unique_copy) ...@@ -3085,8 +3085,16 @@ subst (x, from, to, in_dest, unique_copy)
return temp; 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) 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)); return gen_lowpart_for_combine (mode, SUBREG_REG (x));
/* If we are narrowing the object, we need to see if we can simplify /* If we are narrowing the object, we need to see if we can simplify
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment