--- /tmp/arm.c 2008-03-17 14:24:39.590464969 +0100 +++ gcc-4.3.0/gcc/config/arm/arm.c 2008-03-17 14:12:21.614701982 +0100 @@ -15959,6 +15959,9 @@ int regno; int lo_mask = mask & 0xFF; int pushed_words = 0; + rtx e0; + rtx e1; + unsigned reg; gcc_assert (mask); @@ -16025,6 +16028,15 @@ return; } + else if (GET_CODE (e1) == PLUS + && GET_CODE (XEXP (e1, 0)) == REG + && REGNO (XEXP (e1, 0)) == SP_REGNUM + && GET_CODE (XEXP (e1, 1)) == CONST_INT) + { + /* Set reg to offset from sp. */ + asm_fprintf (asm_out_file, "\t.movsp %r, #%d\n", + REGNO (e0), (int)INTVAL(XEXP (e1, 1))); + } else { if (mask & 0xFF)