cris.h (FUNCTION_ARG, [...]): Delete.

* config/cris/cris.h (FUNCTION_ARG, FUNCTION_INCOMING_ARG): Delete.
	(FUNCTION_ARG_ADVANCE): Delete.
	* config/cris/cris.c (cris_function_arg_1, cris_function_arg): New
	functions.
	(cris_function_incoming_arg, cris_function_arg_advance): New
	functions.
	(TARGET_FUNCTION_ARG, TARGET_FUNCTION_INCOMING_ARG): Define.
	(TARGET_FUNCTION_ARG_ADVANCE): Define.

From-SVN: r166045
This commit is contained in:
Nathan Froyd 2010-10-28 20:19:57 +00:00 committed by Nathan Froyd
parent 3acf034c5a
commit 73f3f8411f
3 changed files with 68 additions and 18 deletions

View File

@ -1,3 +1,14 @@
2010-10-28 Nathan Froyd <froydnj@codesourcery.com>
* config/cris/cris.h (FUNCTION_ARG, FUNCTION_INCOMING_ARG): Delete.
(FUNCTION_ARG_ADVANCE): Delete.
* config/cris/cris.c (cris_function_arg_1, cris_function_arg): New
functions.
(cris_function_incoming_arg, cris_function_arg_advance): New
functions.
(TARGET_FUNCTION_ARG, TARGET_FUNCTION_INCOMING_ARG): Define.
(TARGET_FUNCTION_ARG_ADVANCE): Define.
2010-10-28 Nathan Froyd <froydnj@codesourcery.com>
* config/lm32/lm32-protos.h (lm32_function_arg): Delete.

View File

@ -129,6 +129,12 @@ static bool cris_pass_by_reference (CUMULATIVE_ARGS *, enum machine_mode,
const_tree, bool);
static int cris_arg_partial_bytes (CUMULATIVE_ARGS *, enum machine_mode,
tree, bool);
static rtx cris_function_arg (CUMULATIVE_ARGS *, enum machine_mode,
const_tree, bool);
static rtx cris_function_incoming_arg (CUMULATIVE_ARGS *,
enum machine_mode, const_tree, bool);
static void cris_function_arg_advance (CUMULATIVE_ARGS *, enum machine_mode,
const_tree, bool);
static tree cris_md_asm_clobbers (tree, tree, tree);
static bool cris_handle_option (size_t, const char *, int);
@ -214,6 +220,12 @@ static const struct default_options cris_option_optimization_table[] =
#define TARGET_PASS_BY_REFERENCE cris_pass_by_reference
#undef TARGET_ARG_PARTIAL_BYTES
#define TARGET_ARG_PARTIAL_BYTES cris_arg_partial_bytes
#undef TARGET_FUNCTION_ARG
#define TARGET_FUNCTION_ARG cris_function_arg
#undef TARGET_FUNCTION_INCOMING_ARG
#define TARGET_FUNCTION_INCOMING_ARG cris_function_incoming_arg
#undef TARGET_FUNCTION_ARG_ADVANCE
#define TARGET_FUNCTION_ARG_ADVANCE cris_function_arg_advance
#undef TARGET_MD_ASM_CLOBBERS
#define TARGET_MD_ASM_CLOBBERS cris_md_asm_clobbers
#undef TARGET_DEFAULT_TARGET_FLAGS
@ -3891,6 +3903,51 @@ cris_arg_partial_bytes (CUMULATIVE_ARGS *ca, enum machine_mode mode,
return 0;
}
static rtx
cris_function_arg_1 (const CUMULATIVE_ARGS *ca,
enum machine_mode mode ATTRIBUTE_UNUSED,
const_tree type ATTRIBUTE_UNUSED,
bool named, bool incoming)
{
if ((!incoming || named) && ca->regs < CRIS_MAX_ARGS_IN_REGS)
return gen_rtx_REG (mode, CRIS_FIRST_ARG_REG + ca->regs);
else
return NULL_RTX;
}
/* Worker function for TARGET_FUNCTION_ARG.
The void_type_node is sent as a "closing" call. */
static rtx
cris_function_arg (CUMULATIVE_ARGS *ca, enum machine_mode mode,
const_tree type, bool named)
{
return cris_function_arg_1 (ca, mode, type, named, false);
}
/* Worker function for TARGET_FUNCTION_INCOMING_ARG.
The differences between this and the previous, is that this one checks
that an argument is named, since incoming stdarg/varargs arguments are
pushed onto the stack, and we don't have to check against the "closing"
void_type_node TYPE parameter. */
static rtx
cris_function_incoming_arg (CUMULATIVE_ARGS *ca, enum machine_mode mode,
const_tree type, bool named)
{
return cris_function_arg_1 (ca, mode, type, named, true);
}
/* Worker function for TARGET_FUNCTION_ARG_ADVANCE. */
static void
cris_function_arg_advance (CUMULATIVE_ARGS *ca, enum machine_mode mode,
const_tree type, bool named ATTRIBUTE_UNUSED)
{
ca->regs += (3 + CRIS_FUNCTION_ARG_SIZE (mode, type)) / 4;
}
/* Worker function for TARGET_MD_ASM_CLOBBERS. */
static tree

View File

@ -848,21 +848,6 @@ enum reg_class
/* Node: Register Arguments */
/* The void_type_node is sent as a "closing" call. */
#define FUNCTION_ARG(CUM, MODE, TYPE, NAMED) \
((CUM).regs < CRIS_MAX_ARGS_IN_REGS \
? gen_rtx_REG (MODE, (CRIS_FIRST_ARG_REG) + (CUM).regs) \
: NULL_RTX)
/* The differences between this and the previous, is that this one checks
that an argument is named, since incoming stdarg/varargs arguments are
pushed onto the stack, and we don't have to check against the "closing"
void_type_node TYPE parameter. */
#define FUNCTION_INCOMING_ARG(CUM, MODE, TYPE, NAMED) \
((NAMED) && (CUM).regs < CRIS_MAX_ARGS_IN_REGS \
? gen_rtx_REG (MODE, CRIS_FIRST_ARG_REG + (CUM).regs) \
: NULL_RTX)
/* Contrary to what you'd believe, defining FUNCTION_ARG_CALLEE_COPIES
seems like a (small total) loss, at least for gcc-2.7.2 compiling and
running gcc-2.1 (small win in size, small loss running -- 100.1%),
@ -880,9 +865,6 @@ struct cum_args {int regs;};
#define INIT_CUMULATIVE_ARGS(CUM, FNTYPE, LIBNAME, FNDECL, N_NAMED_ARGS) \
((CUM).regs = 0)
#define FUNCTION_ARG_ADVANCE(CUM, MODE, TYPE, NAMED) \
((CUM).regs += (3 + CRIS_FUNCTION_ARG_SIZE (MODE, TYPE)) / 4)
#define FUNCTION_ARG_REGNO_P(REGNO) \
((REGNO) >= CRIS_FIRST_ARG_REG \
&& (REGNO) < CRIS_FIRST_ARG_REG + (CRIS_MAX_ARGS_IN_REGS))