From 2e1cdae5dbcb268dc3fc451fa4179a5c8ee0b0f4 Mon Sep 17 00:00:00 2001 From: Marcus Shawcroft Date: Thu, 5 Jun 2014 12:57:01 +0000 Subject: [PATCH] [AArch64] Unify callee save slot allocation for X29 and X30. Co-Authored-By: Jiong Wang From-SVN: r211273 --- gcc/ChangeLog | 7 +++++++ gcc/config/aarch64/aarch64.c | 18 ++++-------------- 2 files changed, 11 insertions(+), 14 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 777eb25a910..525ef8ff031 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,10 @@ +2014-06-05 Marcus Shawcroft + Jiong Wang + + * 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 Jiong Wang diff --git a/gcc/config/aarch64/aarch64.c b/gcc/config/aarch64/aarch64.c index a58d93ff613..1aa951cddf8 100644 --- a/gcc/config/aarch64/aarch64.c +++ b/gcc/config/aarch64/aarch64.c @@ -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); -- 2.30.2