From 4db3bddcbe4773beea800c88ff740c9f5ee900c5 Mon Sep 17 00:00:00 2001 From: Richard Kenner Date: Wed, 31 Aug 1994 18:54:44 -0400 Subject: [PATCH] (store_split_bit_field): Always adjust arg to extract_fixed_bit_field in BYTES_BIG_ENDIAN case. From-SVN: r8005 --- gcc/expmed.c | 19 ++++++------------- 1 file changed, 6 insertions(+), 13 deletions(-) diff --git a/gcc/expmed.c b/gcc/expmed.c index 026b6503ec5..86612597f2d 100644 --- a/gcc/expmed.c +++ b/gcc/expmed.c @@ -740,19 +740,12 @@ store_split_bit_field (op0, bitsize, bitpos, value, align) >> (bitsize - bitsdone - thissize)) & (((HOST_WIDE_INT) 1 << thissize) - 1)); else - { - /* The args are chosen so that the last part - includes the lsb. */ - int bit_offset = 0; - /* If the value isn't in memory, then it must be right aligned - if a register, so skip past the padding on the left. If it - is in memory, then there is no padding on the left. */ - if (GET_CODE (value) != MEM) - bit_offset = BITS_PER_WORD - bitsize; - part = extract_fixed_bit_field (word_mode, value, 0, thissize, - bit_offset + bitsdone, - NULL_RTX, 1, align); - } + /* The args are chosen so that the last part includes the lsb. + Give extract_bit_field the value it needs (with endianness + compensation) to fetch the piece we want. */ + part = extract_fixed_bit_field (word_mode, value, 0, thissize, + BITS_PER_WORD - bitsize + bitsdone, + NULL_RTX, 1, align); #else /* Fetch successively more significant portions. */ if (GET_CODE (value) == CONST_INT) -- 2.30.2