summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gcc/ChangeLog4
-rw-r--r--gcc/final.c5
2 files changed, 7 insertions, 2 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 537635f8c0e..76452e286b5 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -67,6 +67,10 @@
(bfin_expand_builtin): Likewise.
Set tmode before use.
+ PR middle-end/44769
+ * final.c (split_double): Don't use BITS_PER_WORD directly in
+ shift count.
+
2010-11-12 Eric Botcazou <ebotcazou@adacore.com>
PR debug/46375
diff --git a/gcc/final.c b/gcc/final.c
index 060a24532c5..c4278ae4922 100644
--- a/gcc/final.c
+++ b/gcc/final.c
@@ -3807,10 +3807,11 @@ split_double (rtx value, rtx *first, rtx *second)
Sign extend each half to HOST_WIDE_INT. */
unsigned HOST_WIDE_INT low, high;
unsigned HOST_WIDE_INT mask, sign_bit, sign_extend;
+ unsigned bits_per_word = BITS_PER_WORD;
/* Set sign_bit to the most significant bit of a word. */
sign_bit = 1;
- sign_bit <<= BITS_PER_WORD - 1;
+ sign_bit <<= bits_per_word - 1;
/* Set mask so that all bits of the word are set. We could
have used 1 << BITS_PER_WORD instead of basing the
@@ -3833,7 +3834,7 @@ split_double (rtx value, rtx *first, rtx *second)
/* Pick the higher word, shifted to the least significant
bits, and sign-extend it. */
high = INTVAL (value);
- high >>= BITS_PER_WORD - 1;
+ high >>= bits_per_word - 1;
high >>= 1;
high &= mask;
if (high & sign_bit)