From 8799637aad7dbb838f262ce23f34ddd457a7ee99 Mon Sep 17 00:00:00 2001 From: Marcus Shawcroft Date: Thu, 5 Jun 2014 11:59:05 +0000 Subject: [PATCH] [AArch64] Relocate saved_varargs_size. From-SVN: r211270 --- gcc/ChangeLog | 12 ++++++++++++ gcc/config/aarch64/aarch64.c | 14 +++++++------- gcc/config/aarch64/aarch64.h | 12 +++++++----- 3 files changed, 26 insertions(+), 12 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index e2b8562..dccab5e 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,5 +1,17 @@ 2014-06-05 Marcus Shawcroft + * config/aarch64/aarch64.h (machine_function): Move + saved_varargs_size from here... + (aarch64_frameGTY): ... to here. + + * config/aarch64/aarch64.c (aarch64_expand_prologue) + (aarch64_expand_epilogue, aarch64_final_eh_return_addr) + (aarch64_initial_elimination_offset) + (aarch64_setup_incoming_varargs): Adjust location of + saved_varargs_size. + +2014-06-05 Marcus Shawcroft + * config/aarch64/aarch64.c (aarch64_expand_prologue): Update stack layout comment. diff --git a/gcc/config/aarch64/aarch64.c b/gcc/config/aarch64/aarch64.c index 7c59e8b..80530c6 100644 --- a/gcc/config/aarch64/aarch64.c +++ b/gcc/config/aarch64/aarch64.c @@ -2130,9 +2130,9 @@ aarch64_expand_prologue (void) rtx insn; aarch64_layout_frame (); - original_frame_size = get_frame_size () + cfun->machine->saved_varargs_size; - gcc_assert ((!cfun->machine->saved_varargs_size || cfun->stdarg) - && (cfun->stdarg || !cfun->machine->saved_varargs_size)); + original_frame_size = get_frame_size () + cfun->machine->frame.saved_varargs_size; + gcc_assert ((!cfun->machine->frame.saved_varargs_size || cfun->stdarg) + && (cfun->stdarg || !cfun->machine->frame.saved_varargs_size)); frame_size = (original_frame_size + cfun->machine->frame.saved_regs_size + crtl->outgoing_args_size); offset = frame_size = AARCH64_ROUND_UP (frame_size, @@ -2296,7 +2296,7 @@ aarch64_expand_epilogue (bool for_sibcall) rtx cfa_reg; aarch64_layout_frame (); - original_frame_size = get_frame_size () + cfun->machine->saved_varargs_size; + original_frame_size = get_frame_size () + cfun->machine->frame.saved_varargs_size; frame_size = (original_frame_size + cfun->machine->frame.saved_regs_size + crtl->outgoing_args_size); offset = frame_size = AARCH64_ROUND_UP (frame_size, @@ -2495,7 +2495,7 @@ aarch64_final_eh_return_addr (void) { HOST_WIDE_INT original_frame_size, frame_size, offset, fp_offset; aarch64_layout_frame (); - original_frame_size = get_frame_size () + cfun->machine->saved_varargs_size; + original_frame_size = get_frame_size () + cfun->machine->frame.saved_varargs_size; frame_size = (original_frame_size + cfun->machine->frame.saved_regs_size + crtl->outgoing_args_size); offset = frame_size = AARCH64_ROUND_UP (frame_size, @@ -4258,7 +4258,7 @@ aarch64_initial_elimination_offset (unsigned from, unsigned to) aarch64_layout_frame (); frame_size = (get_frame_size () + cfun->machine->frame.saved_regs_size + crtl->outgoing_args_size - + cfun->machine->saved_varargs_size); + + cfun->machine->frame.saved_varargs_size); frame_size = AARCH64_ROUND_UP (frame_size, STACK_BOUNDARY / BITS_PER_UNIT); offset = frame_size; @@ -6959,7 +6959,7 @@ aarch64_setup_incoming_varargs (cumulative_args_t cum_v, enum machine_mode mode, /* We don't save the size into *PRETEND_SIZE because we want to avoid any complication of having crtl->args.pretend_args_size changed. */ - cfun->machine->saved_varargs_size + cfun->machine->frame.saved_varargs_size = (AARCH64_ROUND_UP (gr_saved * UNITS_PER_WORD, STACK_BOUNDARY / BITS_PER_UNIT) + vr_saved * UNITS_PER_VREG); diff --git a/gcc/config/aarch64/aarch64.h b/gcc/config/aarch64/aarch64.h index ced5a5e..392d095 100644 --- a/gcc/config/aarch64/aarch64.h +++ b/gcc/config/aarch64/aarch64.h @@ -514,6 +514,13 @@ extern enum aarch64_processor aarch64_tune; struct GTY (()) aarch64_frame { HOST_WIDE_INT reg_offset[FIRST_PSEUDO_REGISTER]; + + /* The number of extra stack bytes taken up by register varargs. + This area is allocated by the callee at the very top of the + frame. This value is rounded up to a multiple of + STACK_BOUNDARY. */ + HOST_WIDE_INT saved_varargs_size; + HOST_WIDE_INT saved_regs_size; /* Padding if needed after the all the callee save registers have been saved. */ @@ -526,11 +533,6 @@ struct GTY (()) aarch64_frame typedef struct GTY (()) machine_function { struct aarch64_frame frame; - - /* The number of extra stack bytes taken up by register varargs. - This area is allocated by the callee at the very top of the frame. */ - HOST_WIDE_INT saved_varargs_size; - } machine_function; #endif -- 2.7.4