As discussed on gcc. Committed to trunk.
gcc/ Revert 2011-11-16 Andreas Krebbel <andreas.kreb...@de.ibm.com> PR middle-end/50325 * expmed.c (store_bit_field_1): Use extract_bit_field on big endian targets if the source cannot be exactly covered by word mode chunks. --- gcc/ChangeLog | 10 ++++++++++ gcc/expmed.c | 15 +++------------ 2 files changed, 13 insertions(+), 12 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index aea8611..854b00e 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,13 @@ +2011-11-21 David S. Miller <da...@davemloft.net> + + Revert + 2011-11-16 Andreas Krebbel <andreas.kreb...@de.ibm.com> + + PR middle-end/50325 + * expmed.c (store_bit_field_1): Use extract_bit_field on big + endian targets if the source cannot be exactly covered by word + mode chunks. + 2011-11-21 Jakub Jelinek <ja...@redhat.com> PR debug/50827 diff --git a/gcc/expmed.c b/gcc/expmed.c index ea42e9c..b3e6d6d 100644 --- a/gcc/expmed.c +++ b/gcc/expmed.c @@ -557,18 +557,9 @@ store_bit_field_1 (rtx str_rtx, unsigned HOST_WIDE_INT bitsize, 0) : (int) i * BITS_PER_WORD); rtx value_word = operand_subword_force (value, wordnum, fieldmode); - unsigned HOST_WIDE_INT new_bitsize = - MIN (BITS_PER_WORD, bitsize - i * BITS_PER_WORD); - - /* If the remaining chunk doesn't have full wordsize we have - to make sure that for big endian machines the higher order - bits are used. */ - if (new_bitsize < BITS_PER_WORD && BYTES_BIG_ENDIAN) - value_word = extract_bit_field (value_word, new_bitsize, 0, - true, false, NULL_RTX, - BLKmode, word_mode); - - if (!store_bit_field_1 (op0, new_bitsize, + + if (!store_bit_field_1 (op0, MIN (BITS_PER_WORD, + bitsize - i * BITS_PER_WORD), bitnum + bit_offset, bitregion_start, bitregion_end, word_mode, -- 1.7.6.401.g6a319