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
This commit is contained in:
parent
134c192bb3
commit
da0dc81873
3 changed files with 47 additions and 25 deletions
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -587,31 +587,6 @@ enum reg_class
|
|||
#define FUNCTION_ARG_REGNO_P(REGNO) \
|
||||
((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. */
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue