From: Richard Stallman Date: Sun, 19 Apr 1992 01:16:25 +0000 (+0000) Subject: *** empty log message *** X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=56a2f049100e12cc7a96480a6879c229778515ef;p=gcc.git *** empty log message *** From-SVN: r787 --- diff --git a/gcc/expmed.c b/gcc/expmed.c index 4b0f77daa6a..44dc7ec0310 100644 --- a/gcc/expmed.c +++ b/gcc/expmed.c @@ -200,13 +200,18 @@ store_bit_field (str_rtx, bitsize, bitnum, fieldmode, value, align, total_size) /* Note that the adjustment of BITPOS above has no effect on whether BITPOS is 0 in a REG bigger than a word. */ - if (GET_MODE_SIZE (fieldmode) >= UNITS_PER_WORD && GET_CODE (op0) != MEM + if (GET_MODE_SIZE (fieldmode) >= UNITS_PER_WORD + && (! STRICT_ALIGNMENT || GET_CODE (op0) != MEM) && bitpos == 0 && bitsize == GET_MODE_BITSIZE (fieldmode)) { /* Storing in a full-word or multi-word field in a register can be done with just SUBREG. */ if (GET_MODE (op0) != fieldmode) - op0 = gen_rtx (SUBREG, fieldmode, op0, offset); + if (GET_CODE (op0) == REG) + op0 = gen_rtx (SUBREG, fieldmode, op0, offset); + else + op0 = change_address (op0, fieldmode, + plus_constant (XEXP (op0, 0), offset)); emit_move_insn (op0, value); return value; }