[AArch64] Unify callee save slot allocation for X29 and X30.
authorMarcus Shawcroft <marcus.shawcroft@arm.com>
Thu, 5 Jun 2014 12:57:01 +0000 (12:57 +0000)
committerMarcus Shawcroft <mshawcroft@gcc.gnu.org>
Thu, 5 Jun 2014 12:57:01 +0000 (12:57 +0000)
Co-Authored-By: Jiong Wang <jiong.wang@arm.com>
From-SVN: r211273

gcc/ChangeLog
gcc/config/aarch64/aarch64.c

index 777eb25a9103b6b3587d83a08cbfa52d5efc466e..525ef8ff03101dbe514bacba9a116eb6a8daaeb0 100644 (file)
@@ -1,3 +1,10 @@
+2014-06-05  Marcus Shawcroft  <marcus.shawcroft@arm.com>
+           Jiong Wang  <jiong.wang@arm.com>
+
+       * config/aarch64/aarch64.c (aarch64_layout_frame): Correct
+       initialization of R30 offset.  Update offset.  Iterate core
+       regisers upto X30.  Remove X29, X30 specific code.
+
 2014-06-05  Marcus Shawcroft  <marcus.shawcroft@arm.com>
            Jiong Wang  <jiong.wang@arm.com>
 
index a58d93ff613ebbdb921618312b74fa313f0346af..1aa951cddf89b25867bbf710727d9ae73cf61133 100644 (file)
@@ -1841,13 +1841,15 @@ aarch64_layout_frame (void)
 
   if (frame_pointer_needed)
     {
-      cfun->machine->frame.reg_offset[R30_REGNUM] = 0;
+      /* FP and LR are placed in the linkage record.  */
       cfun->machine->frame.reg_offset[R29_REGNUM] = 0;
+      cfun->machine->frame.reg_offset[R30_REGNUM] = UNITS_PER_WORD;
       cfun->machine->frame.hardfp_offset = 2 * UNITS_PER_WORD;
+      offset += 2 * UNITS_PER_WORD;
     }
 
   /* Now assign stack slots for them.  */
-  for (regno = R0_REGNUM; regno <= R28_REGNUM; regno++)
+  for (regno = R0_REGNUM; regno <= R30_REGNUM; regno++)
     if (cfun->machine->frame.reg_offset[regno] == SLOT_REQUIRED)
       {
        cfun->machine->frame.reg_offset[regno] = offset;
@@ -1861,18 +1863,6 @@ aarch64_layout_frame (void)
        offset += UNITS_PER_WORD;
       }
 
-  if (frame_pointer_needed)
-    {
-      cfun->machine->frame.reg_offset[R29_REGNUM] = offset;
-      offset += UNITS_PER_WORD;
-    }
-
-  if (cfun->machine->frame.reg_offset[R30_REGNUM] == SLOT_REQUIRED)
-    {
-      cfun->machine->frame.reg_offset[R30_REGNUM] = offset;
-      offset += UNITS_PER_WORD;
-    }
-
   cfun->machine->frame.padding0 =
     (AARCH64_ROUND_UP (offset, STACK_BOUNDARY / BITS_PER_UNIT) - offset);
   offset = AARCH64_ROUND_UP (offset, STACK_BOUNDARY / BITS_PER_UNIT);