arm.c (thumb_legitimate_addres_p): Allow any constant offset from the soft-frame...
authorRichard Earnshaw <rearnsha@arm.com>
Sat, 4 Nov 2006 14:26:34 +0000 (14:26 +0000)
committerRichard Earnshaw <rearnsha@gcc.gnu.org>
Sat, 4 Nov 2006 14:26:34 +0000 (14:26 +0000)
* arm.c (thumb_legitimate_addres_p): Allow any constant offset
from the soft-frame, argument and virtual registers.

From-SVN: r118481

gcc/ChangeLog
gcc/config/arm/arm.c

index e6d68f92754142edde4b21db409c915e50051c8a..d77ae3e67dfb93f6a7c58b110942424b7a722895 100644 (file)
@@ -1,3 +1,8 @@
+2006-11-04  Richard Earnshaw  <rearnsha@arm.com>
+
+       * arm.c (thumb_legitimate_addres_p): Allow any constant offset
+       from the soft-frame, argument and virtual registers.
+
 2006-11-04  Uros Bizjak  <ubizjak@gmail.com>
 
        * config/i386/i386.md (*movxf_nointeger, *movxf_integer): Enable
index 6527f5556da40433225ad1ff696a0d71f34df4d0..4342c4682f2127ef23e3201e6ac8c7480d513c7a 100644 (file)
@@ -3799,7 +3799,10 @@ thumb_legitimate_address_p (enum machine_mode mode, rtx x, int strict_p)
        return 1;
 
       else if (GET_CODE (XEXP (x, 0)) == REG
-              && REGNO (XEXP (x, 0)) == FRAME_POINTER_REGNUM
+              && (REGNO (XEXP (x, 0)) == FRAME_POINTER_REGNUM
+                  || REGNO (XEXP (x, 0)) == ARG_POINTER_REGNUM
+                  || (REGNO (XEXP (x, 0)) >= FIRST_VIRTUAL_REGISTER
+                      && REGNO (XEXP (x, 0)) <= LAST_VIRTUAL_REGISTER))
               && GET_MODE_SIZE (mode) >= 4
               && GET_CODE (XEXP (x, 1)) == CONST_INT
               && (INTVAL (XEXP (x, 1)) & 3) == 0)