+2005-10-12 Adrian Straetling <straetling@de.ibm.com>
+
+ * combine.c (make_extraction): Correct offset computation.
+
2005-10-12 Hans-Peter Nilsson <hp@axis.com>
* config/cris/t-linux (LIMITS_H_TEST): Define.
offset -= GET_MODE_SIZE (is_mode) - GET_MODE_SIZE (inner_mode);
/* If this is a constant position, we can move to the desired byte.
- Be careful not to go beyond the original object. */
+ Be careful not to go beyond the original object and maintain the
+ natural alignment of the memory. */
if (pos_rtx == 0)
{
enum machine_mode bfmode = smallest_mode_for_size (len, MODE_INT);
- offset += pos / GET_MODE_BITSIZE (bfmode);
+ offset += (pos / GET_MODE_BITSIZE (bfmode)) * GET_MODE_SIZE (bfmode);
pos %= GET_MODE_BITSIZE (bfmode);
}