diff options
-rw-r--r-- | gcc/ChangeLog | 4 | ||||
-rw-r--r-- | gcc/final.c | 5 |
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) |