aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorMarcus Shawcroft <marcus.shawcroft@arm.com>2014-06-05 11:59:05 +0000
committerMarcus Shawcroft <mshawcroft@gcc.gnu.org>2014-06-05 11:59:05 +0000
commit8799637aad7dbb838f262ce23f34ddd457a7ee99 (patch)
tree4f689c635acc0843857b2a657b706d8a3d92f848 /gcc
parent348344209225bfbed267e2e0b9fd8d88660b8b4e (diff)
downloadgcc-8799637aad7dbb838f262ce23f34ddd457a7ee99.zip
gcc-8799637aad7dbb838f262ce23f34ddd457a7ee99.tar.gz
gcc-8799637aad7dbb838f262ce23f34ddd457a7ee99.tar.bz2
[AArch64] Relocate saved_varargs_size.
From-SVN: r211270
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog12
-rw-r--r--gcc/config/aarch64/aarch64.c14
-rw-r--r--gcc/config/aarch64/aarch64.h12
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 <marcus.shawcroft@arm.com>
+ * 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 <marcus.shawcroft@arm.com>
+
* 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