Commit 2e1cdae5 by Marcus Shawcroft Committed by Marcus Shawcroft

[AArch64] Unify callee save slot allocation for X29 and X30.


Co-Authored-By: Jiong Wang <jiong.wang@arm.com>

From-SVN: r211273
parent 5ae98e82
2014-06-05 Marcus Shawcroft <marcus.shawcroft@arm.com> 2014-06-05 Marcus Shawcroft <marcus.shawcroft@arm.com>
Jiong Wang <jiong.wang@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>
* config/aarch64/aarch64.c (SLOT_NOT_REQUIRED, SLOT_REQUIRED): Define. * config/aarch64/aarch64.c (SLOT_NOT_REQUIRED, SLOT_REQUIRED): Define.
(aarch64_layout_frame): Use SLOT_NOT_REQUIRED and SLOT_REQUIRED. (aarch64_layout_frame): Use SLOT_NOT_REQUIRED and SLOT_REQUIRED.
(aarch64_register_saved_on_entry): Adjust test. (aarch64_register_saved_on_entry): Adjust test.
......
...@@ -1841,13 +1841,15 @@ aarch64_layout_frame (void) ...@@ -1841,13 +1841,15 @@ aarch64_layout_frame (void)
if (frame_pointer_needed) 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[R29_REGNUM] = 0;
cfun->machine->frame.reg_offset[R30_REGNUM] = UNITS_PER_WORD;
cfun->machine->frame.hardfp_offset = 2 * UNITS_PER_WORD; cfun->machine->frame.hardfp_offset = 2 * UNITS_PER_WORD;
offset += 2 * UNITS_PER_WORD;
} }
/* Now assign stack slots for them. */ /* 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) if (cfun->machine->frame.reg_offset[regno] == SLOT_REQUIRED)
{ {
cfun->machine->frame.reg_offset[regno] = offset; cfun->machine->frame.reg_offset[regno] = offset;
...@@ -1861,18 +1863,6 @@ aarch64_layout_frame (void) ...@@ -1861,18 +1863,6 @@ aarch64_layout_frame (void)
offset += UNITS_PER_WORD; 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 = cfun->machine->frame.padding0 =
(AARCH64_ROUND_UP (offset, STACK_BOUNDARY / BITS_PER_UNIT) - offset); (AARCH64_ROUND_UP (offset, STACK_BOUNDARY / BITS_PER_UNIT) - offset);
offset = AARCH64_ROUND_UP (offset, STACK_BOUNDARY / BITS_PER_UNIT); offset = AARCH64_ROUND_UP (offset, STACK_BOUNDARY / BITS_PER_UNIT);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment