Get correct bit offset for big endian (SUBREG (REG))

From-SVN: r9299
This commit is contained in:
Michael Meissner 1995-04-03 20:19:05 +00:00
parent faae18abc2
commit 641916126a
1 changed files with 14 additions and 0 deletions

View File

@ -878,7 +878,21 @@ extract_bit_field (str_rtx, bitsize, bitnum, unsignedp,
tmode = mode;
while (GET_CODE (op0) == SUBREG)
{
int outer_size = GET_MODE_BITSIZE (GET_MODE (op0));
int inner_size = GET_MODE_BITSIZE (GET_MODE (SUBREG_REG (op0)));
offset += SUBREG_WORD (op0);
if (BYTES_BIG_ENDIAN && (outer_size < inner_size))
{
bitpos += inner_size - outer_size;
if (bitpos > unit)
{
offset += (bitpos / unit);
bitpos %= unit;
}
}
op0 = SUBREG_REG (op0);
}