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:
parent
3acf034c5a
commit
73f3f8411f
|
@ -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.
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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))
|
||||
|
|
Loading…
Reference in New Issue