Commit 75d6cc81 by Alan Lawrence Committed by James Greenhalgh

[PATCH 1/2][AArch64] Implement AAPCS64 updates for alignment attribute

gcc/ChangeLog:

	* config/aarch64/aarch64.c (aarch64_function_arg_alignment):
	Rewrite, looking one level down for records and arrays.

From-SVN: r237224
parent 4ccab56d
2016-06-08 Alan Lawrence <alan.lawrence@arm.com>
* config/aarch64/aarch64.c (aarch64_function_arg_alignment):
Rewrite, looking one level down for records and arrays.
2016-06-08 David Malcolm <dmalcolm@redhat.com>
* pretty-print.c: Include "selftest.h".
......
......@@ -1961,22 +1961,23 @@ aarch64_vfp_is_call_candidate (cumulative_args_t pcum_v, machine_mode mode,
static unsigned int
aarch64_function_arg_alignment (machine_mode mode, const_tree type)
{
unsigned int alignment;
if (!type)
return GET_MODE_ALIGNMENT (mode);
if (integer_zerop (TYPE_SIZE (type)))
return 0;
if (type)
{
if (!integer_zerop (TYPE_SIZE (type)))
{
if (TYPE_MODE (type) == mode)
alignment = TYPE_ALIGN (type);
else
alignment = GET_MODE_ALIGNMENT (mode);
}
else
alignment = 0;
}
else
alignment = GET_MODE_ALIGNMENT (mode);
gcc_assert (TYPE_MODE (type) == mode);
if (!AGGREGATE_TYPE_P (type))
return TYPE_ALIGN (TYPE_MAIN_VARIANT (type));
if (TREE_CODE (type) == ARRAY_TYPE)
return TYPE_ALIGN (TREE_TYPE (type));
unsigned int alignment = 0;
for (tree field = TYPE_FIELDS (type); field; field = DECL_CHAIN (field))
alignment = std::max (alignment, DECL_ALIGN (field));
return alignment;
}
......
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