Commit 41272e2a by Andreas Krebbel Committed by Andreas Krebbel

re PR middle-end/50325 (76 new fails with rev. 177691)

2011-11-16  Andreas Krebbel  <Andreas.Krebbel@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.

From-SVN: r181405
parent f2a176dc
2011-11-16 Andreas Krebbel <Andreas.Krebbel@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-15 Joseph Myers <joseph@codesourcery.com> 2011-11-15 Joseph Myers <joseph@codesourcery.com>
* config/i386/i386elf.h (ASM_OUTPUT_ASCII): Change STRING_LIMIT to * config/i386/i386elf.h (ASM_OUTPUT_ASCII): Change STRING_LIMIT to
...@@ -543,7 +543,8 @@ store_bit_field_1 (rtx str_rtx, unsigned HOST_WIDE_INT bitsize, ...@@ -543,7 +543,8 @@ store_bit_field_1 (rtx str_rtx, unsigned HOST_WIDE_INT bitsize,
is not allowed. */ is not allowed. */
fieldmode = GET_MODE (value); fieldmode = GET_MODE (value);
if (fieldmode == VOIDmode) if (fieldmode == VOIDmode)
fieldmode = smallest_mode_for_size (nwords * BITS_PER_WORD, MODE_INT); fieldmode = smallest_mode_for_size (nwords *
BITS_PER_WORD, MODE_INT);
last = get_last_insn (); last = get_last_insn ();
for (i = 0; i < nwords; i++) for (i = 0; i < nwords; i++)
...@@ -557,9 +558,18 @@ store_bit_field_1 (rtx str_rtx, unsigned HOST_WIDE_INT bitsize, ...@@ -557,9 +558,18 @@ store_bit_field_1 (rtx str_rtx, unsigned HOST_WIDE_INT bitsize,
0) 0)
: (int) i * BITS_PER_WORD); : (int) i * BITS_PER_WORD);
rtx value_word = operand_subword_force (value, wordnum, fieldmode); rtx value_word = operand_subword_force (value, wordnum, fieldmode);
unsigned HOST_WIDE_INT new_bitsize =
if (!store_bit_field_1 (op0, MIN (BITS_PER_WORD, MIN (BITS_PER_WORD, bitsize - i * 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,
bitnum + bit_offset, bitnum + bit_offset,
bitregion_start, bitregion_end, bitregion_start, bitregion_end,
word_mode, word_mode,
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment