Commit 1c445f03 by Nathan Sidwell Committed by Kazu Hirata

* gcc/config/m68k/linux.h

	(M68K_HONOR_TARGET_STRICT_ALIGNMENT): Redefine as 0.
	* config/m68k/m68k.c (TARGET_RETURN_IN_MEMORY): New.
	(m68k_return_in_memory): New.
	* gcc/config/m68k/m68k.h (M68K_HONOR_TARGET_STRICT_ALIGNMENT):
	New.

Co-Authored-By: Kazu Hirata <kazu@codesourcery.com>

From-SVN: r127858
parent 7f97f938
2007-08-28 Nathan Sidwell <nathan@codesourcery.com>
Kazu Hirata <kazu@codesourcery.com>
* gcc/config/m68k/linux.h
(M68K_HONOR_TARGET_STRICT_ALIGNMENT): Redefine as 0.
* config/m68k/m68k.c (TARGET_RETURN_IN_MEMORY): New.
(m68k_return_in_memory): New.
* gcc/config/m68k/m68k.h (M68K_HONOR_TARGET_STRICT_ALIGNMENT):
New.
2007-08-28 Uros Bizjak <ubizjak@gmail.com>
PR target/32661
......
......@@ -31,6 +31,8 @@ along with GCC; see the file COPYING3. If not see
#undef STRICT_ALIGNMENT
#define STRICT_ALIGNMENT 0
#undef M68K_HONOR_TARGET_STRICT_ALIGNMENT
#define M68K_HONOR_TARGET_STRICT_ALIGNMENT 0
/* Here are four prefixes that are used by asm_fprintf to
facilitate customization for alternate assembler syntaxes.
......
......@@ -134,6 +134,9 @@ static void m68k_compute_frame_layout (void);
static bool m68k_save_reg (unsigned int regno, bool interrupt_handler);
static bool m68k_ok_for_sibcall_p (tree, tree);
static bool m68k_rtx_costs (rtx, int, int, int *);
#if M68K_HONOR_TARGET_STRICT_ALIGNMENT
static bool m68k_return_in_memory (tree, tree);
#endif
/* Specify the identification number of the library being built */
......@@ -205,6 +208,11 @@ int m68k_last_compare_had_fp_operands;
#undef TARGET_FUNCTION_OK_FOR_SIBCALL
#define TARGET_FUNCTION_OK_FOR_SIBCALL m68k_ok_for_sibcall_p
#if M68K_HONOR_TARGET_STRICT_ALIGNMENT
#undef TARGET_RETURN_IN_MEMORY
#define TARGET_RETURN_IN_MEMORY m68k_return_in_memory
#endif
static const struct attribute_spec m68k_attribute_table[] =
{
/* { name, min_len, max_len, decl_req, type_req, fn_type_req, handler } */
......@@ -4386,3 +4394,25 @@ m68k_function_value (const_tree valtype, const_tree func ATTRIBUTE_UNUSED)
else
return gen_rtx_REG (mode, D0_REG);
}
/* Worker function for TARGET_RETURN_IN_MEMORY. */
#if M68K_HONOR_TARGET_STRICT_ALIGNMENT
static bool
m68k_return_in_memory (tree type, tree fntype ATTRIBUTE_UNUSED)
{
enum machine_mode mode = TYPE_MODE (type);
if (mode == BLKmode)
return true;
/* If TYPE's known alignment is less than the alignment of MODE that
would contain the structure, then return in memory. We need to
do so to maintain the compatibility between code compiled with
-mstrict-align and that compiled with -mno-strict-align. */
if (AGGREGATE_TYPE_P (type)
&& TYPE_ALIGN (type) < GET_MODE_ALIGNMENT (mode))
return true;
return false;
}
#endif
......@@ -310,6 +310,7 @@ along with GCC; see the file COPYING3. If not see
#define BIGGEST_ALIGNMENT (TARGET_ALIGN_INT ? 32 : 16)
#define STRICT_ALIGNMENT (TARGET_STRICT_ALIGNMENT)
#define M68K_HONOR_TARGET_STRICT_ALIGNMENT 1
#define INT_TYPE_SIZE (TARGET_SHORT ? 16 : 32)
......
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