Hi Guys, I am applying this patch as a further fix for PR 62254.
In the long run we will hopefully be dropping support for ARM v3 (and earlier) so this is more in the nature of a plaster than a real fix. Cheers Nick gcc/ChangeLog 2016-03-30 Nick Clifton <ni...@redhat.com> PR target/62254 * config/arm/arm.c (arm_reload_out_hi): Add code to handle the case where we are already provided with an SImode SUBREG. Index: gcc/config/arm/arm.c =================================================================== --- gcc/config/arm/arm.c (revision 234516) +++ gcc/config/arm/arm.c (working copy) @@ -15601,9 +15601,22 @@ architecture variant does not have an HImode register move. */ if (base == NULL) { - gcc_assert (REG_P (outval)); - emit_insn (gen_movsi (gen_rtx_SUBREG (SImode, ref, 0), - gen_rtx_SUBREG (SImode, outval, 0))); + gcc_assert (REG_P (outval) || SUBREG_P (outval)); + + if (REG_P (outval)) + { + emit_insn (gen_movsi (gen_rtx_SUBREG (SImode, ref, 0), + gen_rtx_SUBREG (SImode, outval, 0))); + } + else /* SUBREG_P (outval) */ + { + if (GET_MODE (SUBREG_REG (outval)) == SImode) + emit_insn (gen_movsi (gen_rtx_SUBREG (SImode, ref, 0), + SUBREG_REG (outval))); + else + /* FIXME: Handle other cases ? */ + gcc_unreachable (); + } return; } }