From: Jim Wilson Date: Sun, 27 Feb 1994 22:46:49 +0000 (-0800) Subject: (store_fixed_bit_field): Adjust BITPOS so that it X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=3bd98790b02cccc5276f6def254c5dfa3e9dba36;p=gcc.git (store_fixed_bit_field): Adjust BITPOS so that it fits inside MODE before adjusting OFFSET to get an aligned address. From-SVN: r6658 --- diff --git a/gcc/expmed.c b/gcc/expmed.c index b6269c654dd..5a06dbf5dc2 100644 --- a/gcc/expmed.c +++ b/gcc/expmed.c @@ -569,6 +569,16 @@ store_fixed_bit_field (op0, offset, bitsize, bitpos, value, struct_align) total_bits = GET_MODE_BITSIZE (mode); + /* Make sure bitpos is valid for the chosen mode. Adjust BITPOS to + be be in the range 0 to total_bits-1, and put any excess bytes in + OFFSET. */ + if (bitpos >= total_bits) + { + offset += (bitpos / total_bits) * (total_bits / BITS_PER_UNIT); + bitpos -= ((bitpos / total_bits) * (total_bits / BITS_PER_UNIT) + * BITS_PER_UNIT); + } + /* Get ref to an aligned byte, halfword, or word containing the field. Adjust BITPOS to be position within a word, and OFFSET to be the offset of that word.