mips.c (mips_promote_function_mode): New function.
authorSteve Ellcey <sellcey@imgtec.com>
Mon, 14 Dec 2015 23:56:28 +0000 (23:56 +0000)
committerSteve Ellcey <sje@gcc.gnu.org>
Mon, 14 Dec 2015 23:56:28 +0000 (23:56 +0000)
2015-12-14  Steve Ellcey  <sellcey@imgtec.com>

* config/mips/mips.c (mips_promote_function_mode): New function.
(TARGET_PROMOTE_FUNCTION_MODE): Define as above function.
(TARGET_PROMOTE_PROTOTYPES): Remove.

From-SVN: r231634

gcc/ChangeLog
gcc/config/mips/mips.c

index e7b2d6822bb34cb6489a106f02147367f9379280..c90899e4c0d31fa4aee9e4f2314f1276978dac88 100644 (file)
@@ -1,3 +1,9 @@
+2015-12-14  Steve Ellcey  <sellcey@imgtec.com>
+
+       * config/mips/mips.c (mips_promote_function_mode): New function.
+       (TARGET_PROMOTE_FUNCTION_MODE): Define as above function.
+       (TARGET_PROMOTE_PROTOTYPES): Remove.
+
 2015-12-14  Jason Merrill  <jason@redhat.com>
 
        PR c++/68309
index 6145944fbf7584fbafc6915cbe5fd855e1d21dc8..7744d1933372956fc8206c2f2a4070a494a7a86f 100644 (file)
@@ -19906,6 +19906,32 @@ mips_ira_change_pseudo_allocno_class (int regno, reg_class_t allocno_class)
     return GR_REGS;
   return allocno_class;
 }
+
+/* Implement TARGET_PROMOTE_FUNCTION_MODE */
+
+/* This function is equivalent to default_promote_function_mode_always_promote
+   except that it returns a promoted mode even if type is NULL_TREE.  This is
+   needed by libcalls which have no type (only a mode) such as fixed conversion
+   routines that take a signed or unsigned char/short argument and convert it
+   to a fixed type.  */
+
+static machine_mode
+mips_promote_function_mode (const_tree type ATTRIBUTE_UNUSED,
+                            machine_mode mode,
+                            int *punsignedp ATTRIBUTE_UNUSED,
+                            const_tree fntype ATTRIBUTE_UNUSED,
+                            int for_return ATTRIBUTE_UNUSED)
+{
+  int unsignedp;
+
+  if (type != NULL_TREE)
+    return promote_mode (type, mode, punsignedp);
+
+  unsignedp = *punsignedp;
+  PROMOTE_MODE (mode, unsignedp, type);
+  *punsignedp = unsignedp;
+  return mode;
+}
 \f
 /* Initialize the GCC target structure.  */
 #undef TARGET_ASM_ALIGNED_HI_OP
@@ -20010,10 +20036,7 @@ mips_ira_change_pseudo_allocno_class (int regno, reg_class_t allocno_class)
 #define TARGET_GIMPLIFY_VA_ARG_EXPR mips_gimplify_va_arg_expr
 
 #undef  TARGET_PROMOTE_FUNCTION_MODE
-#define TARGET_PROMOTE_FUNCTION_MODE default_promote_function_mode_always_promote
-#undef TARGET_PROMOTE_PROTOTYPES
-#define TARGET_PROMOTE_PROTOTYPES hook_bool_const_tree_true
-
+#define TARGET_PROMOTE_FUNCTION_MODE mips_promote_function_mode
 #undef TARGET_FUNCTION_VALUE
 #define TARGET_FUNCTION_VALUE mips_function_value
 #undef TARGET_LIBCALL_VALUE