diff options
author | Anatoly Sokolov <aesok@post.ru> | 2010-09-04 23:22:24 +0400 |
---|---|---|
committer | Anatoly Sokolov <aesok@gcc.gnu.org> | 2010-09-04 23:22:24 +0400 |
commit | 8c9cb6e652c706ec846ca83651a7a1c68067cc8f (patch) | |
tree | d710d9f436235f6acb4bfdad8605ec4f0af34d4d /gcc | |
parent | e060847174c062531afd9061761b516cb6229960 (diff) | |
download | gcc-8c9cb6e652c706ec846ca83651a7a1c68067cc8f.zip gcc-8c9cb6e652c706ec846ca83651a7a1c68067cc8f.tar.gz gcc-8c9cb6e652c706ec846ca83651a7a1c68067cc8f.tar.bz2 |
m32r.c (m32r_function_value, [...]): New functions.
* 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.
From-SVN: r163864
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 9 | ||||
-rw-r--r-- | gcc/config/m32r/m32r.c | 40 | ||||
-rw-r--r-- | gcc/config/m32r/m32r.h | 17 |
3 files changed, 50 insertions, 16 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index e5fe0a2..e3d4233 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,12 @@ +2010-09-04 Anatoly Sokolov <aesok@post.ru> + + * 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. + 2010-09-04 Jan Hubicka <jh@suse.cz> * gimple-fold.c (maybe_fold_reference): Use fold_const_aggregate_ref. diff --git a/gcc/config/m32r/m32r.c b/gcc/config/m32r/m32r.c index 3890da3..33e3bfb 100644 --- a/gcc/config/m32r/m32r.c +++ b/gcc/config/m32r/m32r.c @@ -82,6 +82,9 @@ static int m32r_issue_rate (void); 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 @@ static const struct attribute_spec m32r_attribute_table[] = #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 @@ m32r_return_in_memory (const_tree type, const_tree fntype ATTRIBUTE_UNUSED) 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. diff --git a/gcc/config/m32r/m32r.h b/gcc/config/m32r/m32r.h index 81fc19b..2ea0d31 100644 --- a/gcc/config/m32r/m32r.h +++ b/gcc/config/m32r/m32r.h @@ -1,6 +1,6 @@ /* Definitions of target machine for GNU compiler, Renesas M32R cpu. Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, - 2005, 2006, 2007, 2008, 2009 Free Software Foundation, Inc. + 2005, 2006, 2007, 2008, 2009, 2010 Free Software Foundation, Inc. This file is part of GCC. @@ -855,21 +855,6 @@ extern enum reg_class m32r_regno_reg_class[FIRST_PSEUDO_REGISTER]; /* 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 |