mips.h (LIBCALL_VALUE, [...]): Remove macros.
authorAnatoly Sokolov <aesok@post.ru>
Sun, 27 Mar 2011 19:43:13 +0000 (23:43 +0400)
committerAnatoly Sokolov <aesok@gcc.gnu.org>
Sun, 27 Mar 2011 19:43:13 +0000 (23:43 +0400)
        * config/mips/mips.h (LIBCALL_VALUE, FUNCTION_VALUE,
FUNCTION_VALUE_REGNO_P): Remove macros.
        * config/mips/mips-protos.h (mips_function_value): Remove.
        * config/mips/mips.c (mips_function_value): Rename to...
(mips_function_value_1): ... this. Make static.  Handle receiving
the function type in 'fn_decl_or_type' argument.
(mips_function_value, mips_libcall_value,
mips_function_value_regno_p): New function.
(TARGET_FUNCTION_VALUE, TARGET_LIBCALL_VALUE,
TARGET_FUNCTION_VALUE_REGNO_P): Define.

From-SVN: r171580

gcc/ChangeLog
gcc/config/mips/mips-protos.h
gcc/config/mips/mips.c
gcc/config/mips/mips.h

index ca0e3d69ef4a3e14bcf913839b255a2fd11c15dd..159cc114f9c506dc2a278ebe26cb6ba9364420a3 100644 (file)
@@ -1,3 +1,16 @@
+2011-03-27  Anatoly Sokolov  <aesok@post.ru>
+
+        * config/mips/mips.h (LIBCALL_VALUE, FUNCTION_VALUE,
+       FUNCTION_VALUE_REGNO_P): Remove macros.
+        * config/mips/mips-protos.h (mips_function_value): Remove.
+        * config/mips/mips.c (mips_function_value): Rename to...
+       (mips_function_value_1): ... this. Make static.  Handle receiving
+       the function type in 'fn_decl_or_type' argument.
+       (mips_function_value, mips_libcall_value,
+       mips_function_value_regno_p): New function.
+       (TARGET_FUNCTION_VALUE, TARGET_LIBCALL_VALUE,
+       TARGET_FUNCTION_VALUE_REGNO_P): Define.
+
 2011-03-27  H.J. Lu  <hongjiu.lu@intel.com>
 
        * config/i386/i386.c (flag_opts): Add -mavx256-split-unaligned-load
index 611459884cbdb3b85065352231c8eaf107c152d3..cda66861d5f089883c7aaf00e34abaeff323e9fb 100644 (file)
@@ -277,7 +277,6 @@ extern void mips_expand_prologue (void);
 extern void mips_expand_before_return (void);
 extern void mips_expand_epilogue (bool);
 extern bool mips_can_use_return_insn (void);
-extern rtx mips_function_value (const_tree, const_tree, enum machine_mode);
 
 extern bool mips_cannot_change_mode_class (enum machine_mode,
                                           enum machine_mode, enum reg_class);
index d1f6ad57fe07d92557d22948a19509be6c619b78..0692902e8458ac0c0d0191c2dc0180ac2042e7ec 100644 (file)
@@ -5247,17 +5247,24 @@ mips_return_fpr_pair (enum machine_mode mode,
 
 }
 
-/* Implement FUNCTION_VALUE and LIBCALL_VALUE.  For normal calls,
-   VALTYPE is the return type and MODE is VOIDmode.  For libcalls,
-   VALTYPE is null and MODE is the mode of the return value.  */
+/* Implement TARGET_FUNCTION_VALUE and TARGET_LIBCALL_VALUE.
+   For normal calls, VALTYPE is the return type and MODE is VOIDmode.
+   For libcalls, VALTYPE is null and MODE is the mode of the return value.  */
 
-rtx
-mips_function_value (const_tree valtype, const_tree func, enum machine_mode mode)
+static rtx
+mips_function_value_1 (const_tree valtype, const_tree fn_decl_or_type,
+                      enum machine_mode mode)
 {
   if (valtype)
     {
       tree fields[2];
       int unsigned_p;
+      const_tree func;
+
+      if (fn_decl_or_type && DECL_P (fn_decl_or_type))
+       func = fn_decl_or_type;
+      else
+       func = NULL;
 
       mode = TYPE_MODE (valtype);
       unsigned_p = TYPE_UNSIGNED (valtype);
@@ -5324,6 +5331,41 @@ mips_function_value (const_tree valtype, const_tree func, enum machine_mode mode
   return gen_rtx_REG (mode, GP_RETURN);
 }
 
+/* Implement TARGET_FUNCTION_VALUE.  */
+
+static rtx
+mips_function_value (const_tree valtype, const_tree fn_decl_or_type,
+                    bool outgoing ATTRIBUTE_UNUSED)
+{
+  return mips_function_value_1 (valtype, fn_decl_or_type, VOIDmode);
+}
+
+/* Implement TARGET_LIBCALL_VALUE.  */
+
+static rtx
+mips_libcall_value (enum machine_mode mode, const_rtx fun ATTRIBUTE_UNUSED)
+{
+  return mips_function_value_1 (NULL_TREE, NULL_TREE, mode);
+}
+
+/* Implement TARGET_FUNCTION_VALUE_REGNO_P.
+
+   On the MIPS, R2 R3 and F0 F2 are the only register thus used.
+   Currently, R2 and F0 are only implemented here (C has no complex type).  */
+
+static bool
+mips_function_value_regno_p (const unsigned int regno)
+{
+  if (regno == GP_RETURN
+      || regno == FP_RETURN
+      || (LONG_DOUBLE_TYPE_SIZE == 128
+         && FP_RETURN != GP_RETURN
+         && regno == FP_RETURN + 2))
+    return true;
+
+  return false;
+}
+
 /* Implement TARGET_RETURN_IN_MEMORY.  Under the o32 and o64 ABIs,
    all BLKmode objects are returned in memory.  Under the n32, n64
    and embedded ABIs, small structures are returned in a register.
@@ -16481,6 +16523,12 @@ mips_shift_truncation_mask (enum machine_mode mode)
 #undef TARGET_PROMOTE_PROTOTYPES
 #define TARGET_PROMOTE_PROTOTYPES hook_bool_const_tree_true
 
+#undef TARGET_FUNCTION_VALUE
+#define TARGET_FUNCTION_VALUE mips_function_value
+#undef TARGET_LIBCALL_VALUE
+#define TARGET_LIBCALL_VALUE mips_libcall_value
+#undef TARGET_FUNCTION_VALUE_REGNO_P
+#define TARGET_FUNCTION_VALUE_REGNO_P mips_function_value_regno_p
 #undef TARGET_RETURN_IN_MEMORY
 #define TARGET_RETURN_IN_MEMORY mips_return_in_memory
 #undef TARGET_RETURN_IN_MSB
index 9600dcb28fd0d93d1ac6497075c19cc91ce081cb..55bdec8be067bd865f5887ff93703b5138b37181 100644 (file)
@@ -2150,20 +2150,6 @@ enum reg_class
 #define FP_ARG_FIRST (FP_REG_FIRST + 12)
 #define FP_ARG_LAST  (FP_ARG_FIRST + MAX_ARGS_IN_REGISTERS - 1)
 
-#define LIBCALL_VALUE(MODE) \
-  mips_function_value (NULL_TREE, NULL_TREE, MODE)
-
-#define FUNCTION_VALUE(VALTYPE, FUNC) \
-  mips_function_value (VALTYPE, FUNC, VOIDmode)
-
-/* 1 if N is a possible register number for a function value.
-   On the MIPS, R2 R3 and F0 F2 are the only register thus used.
-   Currently, R2 and F0 are only implemented here (C has no complex type)  */
-
-#define FUNCTION_VALUE_REGNO_P(N) ((N) == GP_RETURN || (N) == FP_RETURN \
-  || (LONG_DOUBLE_TYPE_SIZE == 128 && FP_RETURN != GP_RETURN \
-      && (N) == FP_RETURN + 2))
-
 /* 1 if N is a possible register number for function argument passing.
    We have no FP argument registers when soft-float.  When FP registers
    are 32 bits, we can't directly reference the odd numbered ones.  */