|
@@ -0,0 +1,43 @@
|
|
|
+diff -Nur gcc-7.2.0.orig/gcc/config/m68k/m68k.c gcc-7.2.0/gcc/config/m68k/m68k.c
|
|
|
+--- gcc-7.2.0.orig/gcc/config/m68k/m68k.c 2017-04-03 22:30:56.274463000 +0000
|
|
|
|
|
|
+@@ -182,6 +182,8 @@
|
|
|
+ const_tree, bool);
|
|
|
+ static bool m68k_cannot_force_const_mem (machine_mode mode, rtx x);
|
|
|
+ static bool m68k_output_addr_const_extra (FILE *, rtx);
|
|
|
++static machine_mode m68k_promote_function_mode (const_tree, machine_mode,
|
|
|
++ int *, const_tree, int);
|
|
|
+ static void m68k_init_sync_libfuncs (void) ATTRIBUTE_UNUSED;
|
|
|
+ static enum flt_eval_method
|
|
|
+ m68k_excess_precision (enum excess_precision_type);
|
|
|
+@@ -332,6 +334,9 @@
|
|
|
+ #undef TARGET_ATOMIC_TEST_AND_SET_TRUEVAL
|
|
|
+ #define TARGET_ATOMIC_TEST_AND_SET_TRUEVAL 128
|
|
|
+
|
|
|
++#undef TARGET_PROMOTE_FUNCTION_MODE
|
|
|
++#define TARGET_PROMOTE_FUNCTION_MODE m68k_promote_function_mode
|
|
|
++
|
|
|
+ static const struct attribute_spec m68k_attribute_table[] =
|
|
|
+ {
|
|
|
+ /* { name, min_len, max_len, decl_req, type_req, fn_type_req, handler,
|
|
|
+@@ -6571,4 +6576,20 @@
|
|
|
+ return FLT_EVAL_METHOD_UNPREDICTABLE;
|
|
|
+ }
|
|
|
+
|
|
|
++/* Implement TARGET_PROMOTE_FUNCTION_MODE. */
|
|
|
++
|
|
|
++static machine_mode
|
|
|
++m68k_promote_function_mode (const_tree type, machine_mode mode,
|
|
|
++ int *punsignedp ATTRIBUTE_UNUSED,
|
|
|
++ const_tree fntype ATTRIBUTE_UNUSED,
|
|
|
++ int for_return)
|
|
|
++{
|
|
|
++ /* Promote libcall arguments narrower than int to match the normal C
|
|
|
++ ABI (for which promotions are handled via
|
|
|
++ TARGET_PROMOTE_PROTOTYPES). */
|
|
|
++ if (type == NULL_TREE && !for_return && (mode == QImode || mode == HImode))
|
|
|
++ return SImode;
|
|
|
++ return mode;
|
|
|
++}
|
|
|
++
|
|
|
+ #include "gt-m68k.h"
|