summaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
Diffstat (limited to 'gcc')
-rw-r--r--gcc/expr.c12
-rw-r--r--gcc/wide-int.cc12
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;