+2017-08-24 Richard Sandiford <richard.sandiford@linaro.org>
+ Alan Hayward <alan.hayward@arm.com>
+ David Sherwood <david.sherwood@arm.com>
+
+ * combine.c (make_extraction): Use subreg_offset_from_lsb.
+
2017-08-23 Daniel Santos <daniel.santos@pobox.com>
* config/i386/i386.h (ix86_frame::stack_realign_allocate_offset):
return a new hard register. */
if (pos || in_dest)
{
- HOST_WIDE_INT final_word = pos / BITS_PER_WORD;
-
- if (WORDS_BIG_ENDIAN
- && GET_MODE_SIZE (inner_mode) > UNITS_PER_WORD)
- final_word = ((GET_MODE_SIZE (inner_mode)
- - GET_MODE_SIZE (tmode))
- / UNITS_PER_WORD) - final_word;
-
- final_word *= UNITS_PER_WORD;
- if (BYTES_BIG_ENDIAN &&
- GET_MODE_SIZE (inner_mode) > GET_MODE_SIZE (tmode))
- final_word += (GET_MODE_SIZE (inner_mode)
- - GET_MODE_SIZE (tmode)) % UNITS_PER_WORD;
+ unsigned int offset
+ = subreg_offset_from_lsb (tmode, inner_mode, pos);
/* Avoid creating invalid subregs, for example when
simplifying (x>>32)&255. */
- if (!validate_subreg (tmode, inner_mode, inner, final_word))
+ if (!validate_subreg (tmode, inner_mode, inner, offset))
return NULL_RTX;
- new_rtx = gen_rtx_SUBREG (tmode, inner, final_word);
+ new_rtx = gen_rtx_SUBREG (tmode, inner, offset);
}
else
new_rtx = gen_lowpart (tmode, inner);