This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
Re: Remove FUNCTION_VALUE and FUNCTION_OUTGOING_VALUE macros
- From: Bob Wilson <bwilson at tensilica dot com>
- To: Anatoly Sokolov <aesok at post dot ru>
- Cc: GCC Patches <gcc-patches at gcc dot gnu dot org>
- Date: Wed, 16 Jul 2008 08:42:30 -0700
- Subject: Re: Remove FUNCTION_VALUE and FUNCTION_OUTGOING_VALUE macros
- References: <1845743630.20080713205257@post.ru>
Anatoly Sokolov wrote:
This patch removes obsolete FUNCTION_VALUE and FUNCTION_OUTGOING_VALUE macros
from xtensa target in GCC and introduces equivalent TARGET_FUNCTION_VALUE
target hook.
Please run gcc testsuite on this patch. I do not have access to xtensa
simulator.
2008-07-13 Anatoly Sokolov <aesok@post.ru>
* config/xtensa/xtensa.h (FUNCTION_OUTGOING_VALUE,
XTENSA_FUNCTION_VALUE, XTENSA_FUNCTION_VALUE): Remove.
* config/xtensa/xtensa.c (xtensa_function_value): New function.
(TARGET_FUNCTION_VALUE): Define.
This is OK and I've committed it. (I'm copying this to gcc-patches with an
unquoted copy of the patch attached, since it didn't look like you sent the
patch to the list.)
Index: xtensa.c
===================================================================
--- xtensa.c (revision 137850)
+++ xtensa.c (working copy)
@@ -142,6 +142,7 @@
static bool xtensa_rtx_costs (rtx, int, int, int *);
static tree xtensa_build_builtin_va_list (void);
static bool xtensa_return_in_memory (const_tree, const_tree);
+static rtx xtensa_function_value (const_tree, const_tree, bool);
static tree xtensa_gimplify_va_arg_expr (tree, tree, tree *, tree *);
static void xtensa_init_builtins (void);
static tree xtensa_fold_builtin (tree, tree, bool);
@@ -192,6 +193,8 @@
#undef TARGET_RETURN_IN_MEMORY
#define TARGET_RETURN_IN_MEMORY xtensa_return_in_memory
+#undef TARGET_FUNCTION_VALUE
+#define TARGET_FUNCTION_VALUE xtensa_function_value
#undef TARGET_SPLIT_COMPLEX_ARG
#define TARGET_SPLIT_COMPLEX_ARG hook_bool_const_tree_true
#undef TARGET_MUST_PASS_IN_STACK
@@ -3163,6 +3166,17 @@
> 4 * UNITS_PER_WORD);
}
+/* Worker function for TARGET_FUNCTION_VALUE. */
+
+rtx
+xtensa_function_value (const_tree valtype, const_tree func ATTRIBUTE_UNUSED,
+ bool outgoing)
+{
+ return gen_rtx_REG ((INTEGRAL_TYPE_P (valtype)
+ && TYPE_PRECISION (valtype) < BITS_PER_WORD)
+ ? SImode : TYPE_MODE (valtype),
+ outgoing ? GP_OUTGOING_RETURN : GP_RETURN);
+}
/* TRAMPOLINE_TEMPLATE: For Xtensa, the trampoline must perform an ENTRY
instruction with a minimal stack frame in order to get some free
Index: xtensa.h
===================================================================
--- xtensa.h (revision 137850)
+++ xtensa.h (working copy)
@@ -608,22 +608,6 @@
#define LIBCALL_OUTGOING_VALUE(MODE) \
XTENSA_LIBCALL_VALUE ((MODE), 1)
-/* 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 XTENSA_FUNCTION_VALUE(VALTYPE, FUNC, OUTGOINGP) \
- gen_rtx_REG ((INTEGRAL_TYPE_P (VALTYPE) \
- && TYPE_PRECISION (VALTYPE) < BITS_PER_WORD) \
- ? SImode: TYPE_MODE (VALTYPE), \
- OUTGOINGP ? GP_OUTGOING_RETURN : GP_RETURN)
-
-#define FUNCTION_VALUE(VALTYPE, FUNC) \
- XTENSA_FUNCTION_VALUE (VALTYPE, FUNC, 0)
-
-#define FUNCTION_OUTGOING_VALUE(VALTYPE, FUNC) \
- XTENSA_FUNCTION_VALUE (VALTYPE, FUNC, 1)
-
/* A C expression that is nonzero if REGNO is the number of a hard
register in which the values of called function may come back. A
register whose use for returning values is limited to serving as