(make_extraction): Don't make an extraction that has the potential of
crossing a boundary. From-SVN: r6462
This commit is contained in:
parent
08d95f9128
commit
e737355637
@ -5120,6 +5120,16 @@ make_extraction (mode, inner, pos, pos_rtx, len,
|
||||
&& ! in_compare && ! spans_byte && unsignedp)
|
||||
return 0;
|
||||
|
||||
/* Unless we are allowed to span bytes, reject this if we would be
|
||||
spanning bytes or if the position is not a constant and the length
|
||||
is not 1. In all other cases, we would only be going outside
|
||||
out object in cases when an original shift would have been
|
||||
undefined. */
|
||||
if (! spans_byte
|
||||
&& ((pos_rtx == 0 && pos + len > GET_MODE_BITSIZE (is_mode))
|
||||
|| (pos_rtx != 0 && len != 1)))
|
||||
return 0;
|
||||
|
||||
/* Get the mode to use should INNER be a MEM, the mode for the position,
|
||||
and the mode for the result. */
|
||||
#ifdef HAVE_insv
|
||||
|
Loading…
Reference in New Issue
Block a user