diff options
author | Anatoly Sokolov <aesok@post.ru> | 2010-11-06 22:47:21 +0300 |
---|---|---|
committer | Anatoly Sokolov <aesok@gcc.gnu.org> | 2010-11-06 22:47:21 +0300 |
commit | da0dc81873164e5d105e00b55deb9b4f961d26a4 (patch) | |
tree | 2c71bfa2d8abb961d9a7ead9c98f655268c540e6 /gcc | |
parent | 134c192bb33f87fc0b261b32d4e18a497c1e1b1c (diff) | |
download | gcc-da0dc81873164e5d105e00b55deb9b4f961d26a4.zip gcc-da0dc81873164e5d105e00b55deb9b4f961d26a4.tar.gz gcc-da0dc81873164e5d105e00b55deb9b4f961d26a4.tar.bz2 |
fr30.h (FUNCTION_VALUE_REGNO_P, [...]): Remove macros.
* config/fr30/fr30.h (FUNCTION_VALUE_REGNO_P, FUNCTION_VALUE,
LIBCALL_VALUE): Remove macros.
* config/fr30/fr30.c (TARGET_FUNCTION_VALUE, TARGET_LIBCALL_VALUE,
TARGET_FUNCTION_VALUE_REGNO_P): Define.
(fr30_function_value_regno_p, fr30_function_value,
fr30_libcall_value): New functions.
From-SVN: r166407
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 9 | ||||
-rw-r--r-- | gcc/config/fr30/fr30.c | 38 | ||||
-rw-r--r-- | gcc/config/fr30/fr30.h | 25 |
3 files changed, 47 insertions, 25 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 9809534..c214862 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,12 @@ +2010-11-06 Anatoly Sokolov <aesok@post.ru> + + * config/fr30/fr30.h (FUNCTION_VALUE_REGNO_P, FUNCTION_VALUE, + LIBCALL_VALUE): Remove macros. + * config/fr30/fr30.c (TARGET_FUNCTION_VALUE, TARGET_LIBCALL_VALUE, + TARGET_FUNCTION_VALUE_REGNO_P): Define. + (fr30_function_value_regno_p, fr30_function_value, + fr30_libcall_value): New functions. + 2010-11-06 Joern Rennecke <amylaar@spamcop.net> PR middle-end/46314 diff --git a/gcc/config/fr30/fr30.c b/gcc/config/fr30/fr30.c index 95bbd61..6aad850 100644 --- a/gcc/config/fr30/fr30.c +++ b/gcc/config/fr30/fr30.c @@ -124,6 +124,9 @@ static rtx fr30_function_arg (CUMULATIVE_ARGS *, enum machine_mode, static void fr30_function_arg_advance (CUMULATIVE_ARGS *, enum machine_mode, const_tree, bool); static bool fr30_frame_pointer_required (void); +static rtx fr30_function_value (const_tree, const_tree, bool); +static rtx fr30_libcall_value (enum machine_mode, const_rtx); +static bool fr30_function_value_regno_p (const unsigned int); static bool fr30_can_eliminate (const int, const int); static void fr30_asm_trampoline_template (FILE *); static void fr30_trampoline_init (rtx, tree, rtx); @@ -172,6 +175,13 @@ static const struct default_options fr30_option_optimization_table[] = #undef TARGET_FUNCTION_ARG_ADVANCE #define TARGET_FUNCTION_ARG_ADVANCE fr30_function_arg_advance +#undef TARGET_FUNCTION_VALUE +#define TARGET_FUNCTION_VALUE fr30_function_value +#undef TARGET_LIBCALL_VALUE +#define TARGET_LIBCALL_VALUE fr30_libcall_value +#undef TARGET_FUNCTION_VALUE_REGNO_P +#define TARGET_FUNCTION_VALUE_REGNO_P fr30_function_value_regno_p + #undef TARGET_SETUP_INCOMING_VARARGS #define TARGET_SETUP_INCOMING_VARARGS fr30_setup_incoming_varargs #undef TARGET_MUST_PASS_IN_STACK @@ -703,6 +713,34 @@ fr30_print_operand (FILE *file, rtx x, int code) } /*}}}*/ + +/* Implements TARGET_FUNCTION_VALUE. */ + +static rtx +fr30_function_value (const_tree valtype, + const_tree fntype_or_decli ATTRIBUTE_UNUSED, + bool outgoing ATTRIBUTE_UNUSED) +{ + return gen_rtx_REG (TYPE_MODE (valtype), RETURN_VALUE_REGNUM); +} + +/* Implements TARGET_LIBCALL_VALUE. */ + +static rtx +fr30_libcall_value (enum machine_mode mode, + const_rtx fun ATTRIBUTE_UNUSED) +{ + return gen_rtx_REG (mode, RETURN_VALUE_REGNUM); +} + +/* Implements TARGET_FUNCTION_VALUE_REGNO_P. */ + +static bool +fr30_function_value_regno_p (const unsigned int regno) +{ + return (regno == RETURN_VALUE_REGNUM); +} + /*{{{ Function arguments */ /* Return true if we should pass an argument on the stack rather than diff --git a/gcc/config/fr30/fr30.h b/gcc/config/fr30/fr30.h index ac42145..7798877 100644 --- a/gcc/config/fr30/fr30.h +++ b/gcc/config/fr30/fr30.h @@ -588,31 +588,6 @@ enum reg_class ((REGNO) >= FIRST_ARG_REGNUM && ((REGNO) < FIRST_ARG_REGNUM + FR30_NUM_ARG_REGS)) /*}}}*/ -/*{{{ How Scalar Function Values are Returned. */ - -#define FUNCTION_VALUE(VALTYPE, FUNC) \ - gen_rtx_REG (TYPE_MODE (VALTYPE), RETURN_VALUE_REGNUM) - -/* A C expression to create an RTX representing the place where a library - function returns a value of mode MODE. If the precise function being called - is known, FUNC is a tree node (`FUNCTION_DECL') for it; otherwise, FUNC is a - null pointer. This makes it possible to use a different value-returning - convention for specific functions when all their calls are known. - - Note that "library function" in this context means a compiler support - routine, used to perform arithmetic, whose name is known specially by the - compiler and was not mentioned in the C code being compiled. - - The definition of `LIBRARY_VALUE' need not be concerned aggregate data - types, because none of the library functions returns such types. */ -#define LIBCALL_VALUE(MODE) gen_rtx_REG (MODE, RETURN_VALUE_REGNUM) - -/* 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. */ - -#define FUNCTION_VALUE_REGNO_P(REGNO) ((REGNO) == RETURN_VALUE_REGNUM) - -/*}}}*/ /*{{{ How Large Values are Returned. */ /* Define this macro to be 1 if all structure and union return values must be |