2012-07-24 Roland McGrath <mcgrathr@google.com>
authorrearnsha <rearnsha@138bc75d-0d04-0410-961f-82ee72b054a4>
Tue, 24 Jul 2012 11:53:14 +0000 (11:53 +0000)
committerrearnsha <rearnsha@138bc75d-0d04-0410-961f-82ee72b054a4>
Tue, 24 Jul 2012 11:53:14 +0000 (11:53 +0000)
* arm.c (arm_get_frame_offsets): Don't use fixed regs for
stack alignment padding.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@189807 138bc75d-0d04-0410-961f-82ee72b054a4

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

index 08722af..ecb96a5 100644 (file)
@@ -1,3 +1,8 @@
+2012-07-24  Roland McGrath  <mcgrathr@google.com>
+
+       * arm.c (arm_get_frame_offsets): Don't use fixed regs for 
+       stack alignment padding.
+
 2012-07-24  Uros Bizjak  <ubizjak@gmail.com>
 
        PR target/53961
index 376274a..ca84604 100644 (file)
@@ -16178,7 +16178,11 @@ arm_get_frame_offsets (void)
          else
            for (i = 4; i <= (TARGET_THUMB1 ? LAST_LO_REGNUM : 11); i++)
              {
-               if ((offsets->saved_regs_mask & (1 << i)) == 0)
+               /* Avoid fixed registers; they may be changed at
+                  arbitrary times so it's unsafe to restore them
+                  during the epilogue.  */
+               if (!fixed_regs[i]
+                   && (offsets->saved_regs_mask & (1 << i)) == 0)
                  {
                    reg = i;
                    break;