diff options
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/expr.c | 12 | ||||
-rw-r--r-- | gcc/wide-int.cc | 12 |
2 files changed, 8 insertions, 16 deletions
diff --git a/gcc/expr.c b/gcc/expr.c index 8c153594a0c..2405bb1d017 100644 --- a/gcc/expr.c +++ b/gcc/expr.c @@ -4765,14 +4765,12 @@ expand_assignment (tree to, tree from, bool nontemporal) && (bitpos == 0 || bitpos == mode_bitsize / 2)) result = store_expr (from, XEXP (to_rtx, bitpos != 0), false, nontemporal); - else if (bitpos + bitsize <= mode_bitsize / 2 - && bitpos+bitsize <= mode_bitsize) + else if (bitpos + bitsize <= mode_bitsize / 2) result = store_field (XEXP (to_rtx, 0), bitsize, bitpos, bitregion_start, bitregion_end, mode1, from, get_alias_set (to), nontemporal); - else if (bitpos >= mode_bitsize / 2 - && bitpos+bitsize <= mode_bitsize) + else if (bitpos >= mode_bitsize / 2) result = store_field (XEXP (to_rtx, 1), bitsize, bitpos - mode_bitsize / 2, bitregion_start, bitregion_end, @@ -4791,12 +4789,8 @@ expand_assignment (tree to, tree from, bool nontemporal) } else { - HOST_WIDE_INT extra = 0; - if (bitpos+bitsize > mode_bitsize) - extra = bitpos+bitsize - mode_bitsize; rtx temp = assign_stack_temp (GET_MODE (to_rtx), - GET_MODE_SIZE (GET_MODE (to_rtx)) - + extra); + GET_MODE_SIZE (GET_MODE (to_rtx))); write_complex_part (temp, XEXP (to_rtx, 0), false); write_complex_part (temp, XEXP (to_rtx, 1), true); result = store_field (temp, bitsize, bitpos, diff --git a/gcc/wide-int.cc b/gcc/wide-int.cc index 5b08d1092b4..f22b348797b 100644 --- a/gcc/wide-int.cc +++ b/gcc/wide-int.cc @@ -748,18 +748,16 @@ unsigned int wi::shifted_mask (HOST_WIDE_INT *val, unsigned int start, unsigned int width, bool negate, unsigned int prec) { - gcc_assert (start < 4 * MAX_BITSIZE_MODE_ANY_INT); - - if (start + width > prec) - width = prec - start; - unsigned int end = start + width; - - if (width == 0) + if (start >= prec || width == 0) { val[0] = negate ? -1 : 0; return 1; } + if (width > prec - start) + width = prec - start; + unsigned int end = start + width; + unsigned int i = 0; while (i < start / HOST_BITS_PER_WIDE_INT) val[i++] = negate ? -1 : 0; |