| 12345678910111213141516171819202122232425262728293031323334353637383940414243 | 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+++ gcc-7.2.0/gcc/config/m68k/m68k.c	2018-01-27 02:16:53.779367849 +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"
 |