* varasm.c (output_constructor_bitfield): Fix thinkos in latest change.
From-SVN: r210856
This commit is contained in:
parent
0aadce7331
commit
4adf63f9c7
|
@ -1,3 +1,7 @@
|
||||||
|
2014-05-23 Eric Botcazou <ebotcazou@adacore.com>
|
||||||
|
|
||||||
|
* varasm.c (output_constructor_bitfield): Fix thinkos in latest change.
|
||||||
|
|
||||||
2014-05-23 Thomas Schwinge <thomas@codesourcery.com>
|
2014-05-23 Thomas Schwinge <thomas@codesourcery.com>
|
||||||
|
|
||||||
* gimple.h (enum gf_mask): Add and use GF_OMP_FOR_SIMD.
|
* gimple.h (enum gf_mask): Add and use GF_OMP_FOR_SIMD.
|
||||||
|
|
30
gcc/varasm.c
30
gcc/varasm.c
|
@ -5082,18 +5082,21 @@ output_constructor_bitfield (oc_local_state *local, unsigned int bit_offset)
|
||||||
this_time = MIN (end_offset - next_offset, BITS_PER_UNIT - next_bit);
|
this_time = MIN (end_offset - next_offset, BITS_PER_UNIT - next_bit);
|
||||||
if (BYTES_BIG_ENDIAN)
|
if (BYTES_BIG_ENDIAN)
|
||||||
{
|
{
|
||||||
/* On big-endian machine, take the most significant bits
|
/* On big-endian machine, take the most significant bits (of the
|
||||||
first (of the bits that are significant)
|
bits that are significant) first and put them into bytes from
|
||||||
and put them into bytes from the most significant end. */
|
the most significant end. */
|
||||||
shift = end_offset - next_offset - this_time;
|
shift = end_offset - next_offset - this_time;
|
||||||
|
|
||||||
/* Don't try to take a bunch of bits that cross
|
/* Don't try to take a bunch of bits that cross
|
||||||
the word boundary in the INTEGER_CST. We can
|
the word boundary in the INTEGER_CST. We can
|
||||||
only select bits from the LOW or HIGH part
|
only select bits from one element. */
|
||||||
not from both. */
|
|
||||||
if ((shift / HOST_BITS_PER_WIDE_INT)
|
if ((shift / HOST_BITS_PER_WIDE_INT)
|
||||||
!= ((shift + this_time) / HOST_BITS_PER_WIDE_INT))
|
!= ((shift + this_time - 1) / HOST_BITS_PER_WIDE_INT))
|
||||||
this_time = (shift + this_time) & (HOST_BITS_PER_WIDE_INT - 1);
|
{
|
||||||
|
const int end = shift + this_time - 1;
|
||||||
|
shift = end & -HOST_BITS_PER_WIDE_INT;
|
||||||
|
this_time = end - shift + 1;
|
||||||
|
}
|
||||||
|
|
||||||
/* Now get the bits from the appropriate constant word. */
|
/* Now get the bits from the appropriate constant word. */
|
||||||
value = TREE_INT_CST_ELT (local->val, shift / HOST_BITS_PER_WIDE_INT);
|
value = TREE_INT_CST_ELT (local->val, shift / HOST_BITS_PER_WIDE_INT);
|
||||||
|
@ -5107,19 +5110,18 @@ output_constructor_bitfield (oc_local_state *local, unsigned int bit_offset)
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
/* On little-endian machines,
|
/* On little-endian machines, take the least significant bits of
|
||||||
take first the least significant bits of the value
|
the value first and pack them starting at the least significant
|
||||||
and pack them starting at the least significant
|
|
||||||
bits of the bytes. */
|
bits of the bytes. */
|
||||||
shift = next_offset - byte_relative_ebitpos;
|
shift = next_offset - byte_relative_ebitpos;
|
||||||
|
|
||||||
/* Don't try to take a bunch of bits that cross
|
/* Don't try to take a bunch of bits that cross
|
||||||
the word boundary in the INTEGER_CST. We can
|
the word boundary in the INTEGER_CST. We can
|
||||||
only select bits from the LOW or HIGH part
|
only select bits from one element. */
|
||||||
not from both. */
|
|
||||||
if ((shift / HOST_BITS_PER_WIDE_INT)
|
if ((shift / HOST_BITS_PER_WIDE_INT)
|
||||||
!= ((shift + this_time) / HOST_BITS_PER_WIDE_INT))
|
!= ((shift + this_time - 1) / HOST_BITS_PER_WIDE_INT))
|
||||||
this_time = (HOST_BITS_PER_WIDE_INT - shift);
|
this_time
|
||||||
|
= HOST_BITS_PER_WIDE_INT - (shift & (HOST_BITS_PER_WIDE_INT - 1));
|
||||||
|
|
||||||
/* Now get the bits from the appropriate constant word. */
|
/* Now get the bits from the appropriate constant word. */
|
||||||
value = TREE_INT_CST_ELT (local->val, shift / HOST_BITS_PER_WIDE_INT);
|
value = TREE_INT_CST_ELT (local->val, shift / HOST_BITS_PER_WIDE_INT);
|
||||||
|
|
Loading…
Reference in New Issue