Patchwork [M32R] Hookize FUNCTION_VALUE, LIBCALL_VALUE and FUNCTION_VALUE_REGNO_P

login
register
mail settings
Submitter Anatoly Sokolov
Date Sept. 3, 2010, 3:07 p.m.
Message ID <1557246000.20100903190741@post.ru>
Download mbox | patch
Permalink /patch/63689/
State New
Headers show

Comments

Anatoly Sokolov - Sept. 3, 2010, 3:07 p.m.
Hello.

  This patch removes obsolete FUNCTION_VALUE, LIBCALL_VALUE and
FUNCTION_VALUE_REGNO_P macros from M32R back end in the GCC and introduces
equivalent TARGET_FUNCTION_VALUE, TARGET_LIBCALL_VALUE and
TARGET_FUNCTION_VALUE_REGNO_P target hooks.

  Regression tested on m32r-unknown-elf.

  OK to install?

        * config/m32r/m32r.c (m32r_function_value, m32r_libcall_value,
        m32r_function_value_regno_p): New functions.
        (TARGET_FUNCTION_VALUE, TARGET_LIBCALL_VALUE,
        TARGET_FUNCTION_VALUE_REGNO_P): Declare.
        * config/m32r/m32r.h: (FUNCTION_VALUE, LIBCALL_VALUE,
        FUNCTION_VALUE_REGNO_P): Remove.




Anatoly.
Richard Henderson - Sept. 3, 2010, 7:03 p.m.
On 09/03/2010 08:07 AM, Anatoly Sokolov wrote:
>         * config/m32r/m32r.c (m32r_function_value, m32r_libcall_value,
>         m32r_function_value_regno_p): New functions.
>         (TARGET_FUNCTION_VALUE, TARGET_LIBCALL_VALUE,
>         TARGET_FUNCTION_VALUE_REGNO_P): Declare.
>         * config/m32r/m32r.h: (FUNCTION_VALUE, LIBCALL_VALUE,
>         FUNCTION_VALUE_REGNO_P): Remove.

Ok.


r~
Nick Clifton - Sept. 6, 2010, 8:57 a.m.
Hi Anatoly,

>    OK to install?
>
>          * config/m32r/m32r.c (m32r_function_value, m32r_libcall_value,
>          m32r_function_value_regno_p): New functions.
>          (TARGET_FUNCTION_VALUE, TARGET_LIBCALL_VALUE,
>          TARGET_FUNCTION_VALUE_REGNO_P): Declare.
>          * config/m32r/m32r.h: (FUNCTION_VALUE, LIBCALL_VALUE,
>          FUNCTION_VALUE_REGNO_P): Remove.

Approved - please apply.

Patch

Index: gcc/config/m32r/m32r.c
===================================================================
--- gcc/config/m32r/m32r.c      (revision 163821)
+++ gcc/config/m32r/m32r.c      (working copy)
@@ -82,6 +82,9 @@ 
 static void m32r_encode_section_info (tree, rtx, int);
 static bool m32r_in_small_data_p (const_tree);
 static bool m32r_return_in_memory (const_tree, const_tree);
+static rtx m32r_function_value (const_tree, const_tree, bool);
+static rtx m32r_libcall_value (enum machine_mode, const_rtx);
+static bool m32r_function_value_regno_p (const unsigned int);
 static void m32r_setup_incoming_varargs (CUMULATIVE_ARGS *, enum machine_mode,
                                         tree, int *, int);
 static void init_idents (void);
@@ -158,6 +161,14 @@ 
 #define TARGET_PROMOTE_PROTOTYPES hook_bool_const_tree_true
 #undef  TARGET_RETURN_IN_MEMORY
 #define TARGET_RETURN_IN_MEMORY m32r_return_in_memory
+
+#undef TARGET_FUNCTION_VALUE
+#define TARGET_FUNCTION_VALUE m32r_function_value
+#undef TARGET_LIBCALL_VALUE
+#define TARGET_LIBCALL_VALUE m32r_libcall_value
+#undef TARGET_FUNCTION_VALUE_REGNO_P
+#define TARGET_FUNCTION_VALUE_REGNO_P m32r_function_value_regno_p
+
 #undef  TARGET_SETUP_INCOMING_VARARGS
 #define TARGET_SETUP_INCOMING_VARARGS m32r_setup_incoming_varargs
 #undef  TARGET_MUST_PASS_IN_STACK
@@ -1246,6 +1257,35 @@ 
   return m32r_pass_by_reference (NULL, TYPE_MODE (type), type, false);
 }
 
+/* Worker function for TARGET_FUNCTION_VALUE.  */
+
+static rtx
+m32r_function_value (const_tree valtype,
+                     const_tree fn_decl_or_type ATTRIBUTE_UNUSED,
+                     bool outgoing ATTRIBUTE_UNUSED)
+{
+  return gen_rtx_REG (TYPE_MODE (valtype), 0);
+}
+
+/* Worker function for TARGET_LIBCALL_VALUE.  */
+
+static rtx
+m32r_libcall_value (enum machine_mode mode,
+                    const_rtx fun ATTRIBUTE_UNUSED)
+{
+  return gen_rtx_REG (mode, 0);
+}
+
+/* Worker function for TARGET_FUNCTION_VALUE_REGNO_P.
+
+  ??? What about r1 in DI/DF values.  */
+
+static bool
+m32r_function_value_regno_p (const unsigned int regno)
+{
+  return (regno == 0);
+}
+
 /* Do any needed setup for a variadic function.  For the M32R, we must
    create a register parameter block, and then copy any anonymous arguments
    in registers to memory.
Index: gcc/config/m32r/m32r.h
===================================================================
--- gcc/config/m32r/m32r.h      (revision 163821)
+++ gcc/config/m32r/m32r.h      (working copy)
@@ -855,21 +855,6 @@ 
 
 /* Function results.  */
 
-/* Define how to find the value returned by a function.
-   VALTYPE is the data type of the value (as a tree).
-   If the precise function being called is known, FUNC is its FUNCTION_DECL;
-   otherwise, FUNC is 0.  */
-#define FUNCTION_VALUE(VALTYPE, FUNC) gen_rtx_REG (TYPE_MODE (VALTYPE), 0)
-
-/* Define how to find the value returned by a library function
-   assuming the value has mode MODE.  */
-#define LIBCALL_VALUE(MODE) gen_rtx_REG (MODE, 0)
-
-/* 1 if N is a possible register number for a function value
-   as seen by the caller.  */
-/* ??? What about r1 in DI/DF values.  */
-#define FUNCTION_VALUE_REGNO_P(N) ((N) == 0)
-
 /* Tell GCC to use TARGET_RETURN_IN_MEMORY.  */
 #define DEFAULT_PCC_STRUCT_RETURN 0