--- /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)
