calls.c, [...]: Call targetm.calls.function_arg...
* calls.c, dse.c, expr.c, function.c: Call targetm.calls.function_arg, targetm.calls.function_incoming_arg, and targetm.calls.function_arg_advance instead of FUNCTION_ARG, FUNCTION_INCOMING_ARG, and FUNCTION_ARG_ADVANCE, respectively. * target.h (struct gcc_target): Add function_arg_advance, function_arg, and function_incoming_arg fields. * target-def.h (TARGET_FUNCTION_ARG_ADVANCE, TARGET_FUNCTION_ARG): (TARGET_FUNCTION_INCOMING_ARG): Define. (TARGET_CALLS): Add TARGET_FUNCTION_ARG_ADVANCE, TARGET_FUNCTION_ARG, and TARGET_FUNCTION_INCOMING_ARG. * targhooks.h (default_function_arg_advance): Declare. (default_function_arg, default_function_incoming_arg): Declare. * targhooks.c (default_function_arg_advance): New function. (default_function_arg, default_function_incoming_arg): New function. * config/i386/i386.c (function_arg_advance): Rename to... (ix86_function_arg_advance): ...this. Make static. (function_arg): Rename to... (ix86_function_arg): ...this. Make static. (TARGET_FUNCTION_ARG_ADVANCE): Define. (TARGET_FUNCTION_ARG): Define. * config/i386/i386.h (FUNCTION_ARG_ADVANCE): Delete. (FUNCTION_ARG): Delete. * config/i386/i386-protos.h (function_arg_advance): Delete prototype. (function_arg): Delete prototype. From-SVN: r161530
This commit is contained in:
parent
0e228dd907
commit
3c07301f6b
12 changed files with 184 additions and 76 deletions
|
@ -1,3 +1,30 @@
|
|||
2010-06-29 Nathan Froyd <froydnj@codesourcery.com>
|
||||
|
||||
* calls.c, dse.c, expr.c, function.c: Call targetm.calls.function_arg,
|
||||
targetm.calls.function_incoming_arg, and
|
||||
targetm.calls.function_arg_advance instead of FUNCTION_ARG,
|
||||
FUNCTION_INCOMING_ARG, and FUNCTION_ARG_ADVANCE, respectively.
|
||||
* target.h (struct gcc_target): Add function_arg_advance,
|
||||
function_arg, and function_incoming_arg fields.
|
||||
* target-def.h (TARGET_FUNCTION_ARG_ADVANCE, TARGET_FUNCTION_ARG):
|
||||
(TARGET_FUNCTION_INCOMING_ARG): Define.
|
||||
(TARGET_CALLS): Add TARGET_FUNCTION_ARG_ADVANCE, TARGET_FUNCTION_ARG,
|
||||
and TARGET_FUNCTION_INCOMING_ARG.
|
||||
* targhooks.h (default_function_arg_advance): Declare.
|
||||
(default_function_arg, default_function_incoming_arg): Declare.
|
||||
* targhooks.c (default_function_arg_advance): New function.
|
||||
(default_function_arg, default_function_incoming_arg): New function.
|
||||
* config/i386/i386.c (function_arg_advance): Rename to...
|
||||
(ix86_function_arg_advance): ...this. Make static.
|
||||
(function_arg): Rename to...
|
||||
(ix86_function_arg): ...this. Make static.
|
||||
(TARGET_FUNCTION_ARG_ADVANCE): Define.
|
||||
(TARGET_FUNCTION_ARG): Define.
|
||||
* config/i386/i386.h (FUNCTION_ARG_ADVANCE): Delete.
|
||||
(FUNCTION_ARG): Delete.
|
||||
* config/i386/i386-protos.h (function_arg_advance): Delete prototype.
|
||||
(function_arg): Delete prototype.
|
||||
|
||||
2010-06-29 Nathan Froyd <froydnj@codesourcery.com>
|
||||
|
||||
* reginfo.c (init_reg_sets_1): Adjust comments.
|
||||
|
|
49
gcc/calls.c
49
gcc/calls.c
|
@ -228,7 +228,7 @@ prepare_call_address (tree fndecl, rtx funexp, rtx static_chain_value,
|
|||
It is zero if this call doesn't want a structure value.
|
||||
|
||||
NEXT_ARG_REG is the rtx that results from executing
|
||||
FUNCTION_ARG (args_so_far, VOIDmode, void_type_node, 1)
|
||||
targetm.calls.function_arg (&args_so_far, VOIDmode, void_type_node, true)
|
||||
just after all the args have had their registers assigned.
|
||||
This could be whatever you like, but normally it is the first
|
||||
arg-register beyond those used for args in this call,
|
||||
|
@ -1127,17 +1127,18 @@ initialize_argument_information (int num_actuals ATTRIBUTE_UNUSED,
|
|||
args[i].unsignedp = unsignedp;
|
||||
args[i].mode = mode;
|
||||
|
||||
args[i].reg = FUNCTION_ARG (*args_so_far, mode, type,
|
||||
argpos < n_named_args);
|
||||
#ifdef FUNCTION_INCOMING_ARG
|
||||
args[i].reg = targetm.calls.function_arg (args_so_far, mode, type,
|
||||
argpos < n_named_args);
|
||||
|
||||
/* If this is a sibling call and the machine has register windows, the
|
||||
register window has to be unwinded before calling the routine, so
|
||||
arguments have to go into the incoming registers. */
|
||||
args[i].tail_call_reg = FUNCTION_INCOMING_ARG (*args_so_far, mode, type,
|
||||
argpos < n_named_args);
|
||||
#else
|
||||
args[i].tail_call_reg = args[i].reg;
|
||||
#endif
|
||||
if (targetm.calls.function_incoming_arg != targetm.calls.function_arg)
|
||||
args[i].tail_call_reg
|
||||
= targetm.calls.function_incoming_arg (args_so_far, mode, type,
|
||||
argpos < n_named_args);
|
||||
else
|
||||
args[i].tail_call_reg = args[i].reg;
|
||||
|
||||
if (args[i].reg)
|
||||
args[i].partial
|
||||
|
@ -1192,8 +1193,8 @@ initialize_argument_information (int num_actuals ATTRIBUTE_UNUSED,
|
|||
/* Increment ARGS_SO_FAR, which has info about which arg-registers
|
||||
have been used, etc. */
|
||||
|
||||
FUNCTION_ARG_ADVANCE (*args_so_far, TYPE_MODE (type), type,
|
||||
argpos < n_named_args);
|
||||
targetm.calls.function_arg_advance (args_so_far, TYPE_MODE (type),
|
||||
type, argpos < n_named_args);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -2828,14 +2829,15 @@ expand_call (tree exp, rtx target, int ignore)
|
|||
|
||||
/* Set up next argument register. For sibling calls on machines
|
||||
with register windows this should be the incoming register. */
|
||||
#ifdef FUNCTION_INCOMING_ARG
|
||||
if (pass == 0)
|
||||
next_arg_reg = FUNCTION_INCOMING_ARG (args_so_far, VOIDmode,
|
||||
void_type_node, 1);
|
||||
next_arg_reg = targetm.calls.function_incoming_arg (&args_so_far,
|
||||
VOIDmode,
|
||||
void_type_node,
|
||||
true);
|
||||
else
|
||||
#endif
|
||||
next_arg_reg = FUNCTION_ARG (args_so_far, VOIDmode,
|
||||
void_type_node, 1);
|
||||
next_arg_reg = targetm.calls.function_arg (&args_so_far,
|
||||
VOIDmode, void_type_node,
|
||||
true);
|
||||
|
||||
/* All arguments and registers used for the call must be set up by
|
||||
now! */
|
||||
|
@ -3422,7 +3424,8 @@ emit_library_call_value_1 (int retval, rtx orgfun, rtx value,
|
|||
argvec[count].mode = Pmode;
|
||||
argvec[count].partial = 0;
|
||||
|
||||
argvec[count].reg = FUNCTION_ARG (args_so_far, Pmode, NULL_TREE, 1);
|
||||
argvec[count].reg = targetm.calls.function_arg (&args_so_far,
|
||||
Pmode, NULL_TREE, true);
|
||||
gcc_assert (targetm.calls.arg_partial_bytes (&args_so_far, Pmode,
|
||||
NULL_TREE, 1) == 0);
|
||||
|
||||
|
@ -3438,7 +3441,7 @@ emit_library_call_value_1 (int retval, rtx orgfun, rtx value,
|
|||
|| reg_parm_stack_space > 0)
|
||||
args_size.constant += argvec[count].locate.size.constant;
|
||||
|
||||
FUNCTION_ARG_ADVANCE (args_so_far, Pmode, (tree) 0, 1);
|
||||
targetm.calls.function_arg_advance (&args_so_far, Pmode, (tree) 0, true);
|
||||
|
||||
count++;
|
||||
}
|
||||
|
@ -3497,7 +3500,8 @@ emit_library_call_value_1 (int retval, rtx orgfun, rtx value,
|
|||
argvec[count].value = val;
|
||||
argvec[count].mode = mode;
|
||||
|
||||
argvec[count].reg = FUNCTION_ARG (args_so_far, mode, NULL_TREE, 1);
|
||||
argvec[count].reg = targetm.calls.function_arg (&args_so_far, mode,
|
||||
NULL_TREE, true);
|
||||
|
||||
argvec[count].partial
|
||||
= targetm.calls.arg_partial_bytes (&args_so_far, mode, NULL_TREE, 1);
|
||||
|
@ -3517,7 +3521,7 @@ emit_library_call_value_1 (int retval, rtx orgfun, rtx value,
|
|||
|| reg_parm_stack_space > 0)
|
||||
args_size.constant += argvec[count].locate.size.constant;
|
||||
|
||||
FUNCTION_ARG_ADVANCE (args_so_far, mode, (tree) 0, 1);
|
||||
targetm.calls.function_arg_advance (&args_so_far, mode, (tree) 0, true);
|
||||
}
|
||||
|
||||
/* If this machine requires an external definition for library
|
||||
|
@ -3826,7 +3830,8 @@ emit_library_call_value_1 (int retval, rtx orgfun, rtx value,
|
|||
build_function_type (tfom, NULL_TREE),
|
||||
original_args_size.constant, args_size.constant,
|
||||
struct_value_size,
|
||||
FUNCTION_ARG (args_so_far, VOIDmode, void_type_node, 1),
|
||||
targetm.calls.function_arg (&args_so_far,
|
||||
VOIDmode, void_type_node, true),
|
||||
valreg,
|
||||
old_inhibit_defer_pop + 1, call_fusage, flags, & args_so_far);
|
||||
|
||||
|
|
|
@ -180,9 +180,6 @@ extern void ix86_expand_truncdf_32 (rtx, rtx);
|
|||
|
||||
#ifdef TREE_CODE
|
||||
extern void init_cumulative_args (CUMULATIVE_ARGS *, tree, rtx, tree);
|
||||
extern rtx function_arg (CUMULATIVE_ARGS *, enum machine_mode, tree, int);
|
||||
extern void function_arg_advance (CUMULATIVE_ARGS *, enum machine_mode,
|
||||
tree, int);
|
||||
#endif /* TREE_CODE */
|
||||
|
||||
#endif /* RTX_CODE */
|
||||
|
|
|
@ -6061,9 +6061,13 @@ function_arg_advance_ms_64 (CUMULATIVE_ARGS *cum, HOST_WIDE_INT bytes,
|
|||
}
|
||||
}
|
||||
|
||||
void
|
||||
function_arg_advance (CUMULATIVE_ARGS *cum, enum machine_mode mode,
|
||||
tree type, int named)
|
||||
/* Update the data in CUM to advance over an argument of mode MODE and
|
||||
data type TYPE. (TYPE is null for libcalls where that information
|
||||
may not be available.) */
|
||||
|
||||
static void
|
||||
ix86_function_arg_advance (CUMULATIVE_ARGS *cum, enum machine_mode mode,
|
||||
const_tree type, int named)
|
||||
{
|
||||
HOST_WIDE_INT bytes, words;
|
||||
|
||||
|
@ -6298,9 +6302,19 @@ function_arg_ms_64 (CUMULATIVE_ARGS *cum, enum machine_mode mode,
|
|||
return gen_reg_or_parallel (mode, orig_mode, regno);
|
||||
}
|
||||
|
||||
rtx
|
||||
function_arg (CUMULATIVE_ARGS *cum, enum machine_mode omode,
|
||||
tree type, int named)
|
||||
/* Return where to put the arguments to a function.
|
||||
Return zero to push the argument on the stack, or a hard register in which to store the argument.
|
||||
|
||||
MODE is the argument's machine mode. TYPE is the data type of the
|
||||
argument. It is null for libcalls where that information may not be
|
||||
available. CUM gives information about the preceding args and about
|
||||
the function being called. NAMED is nonzero if this argument is a
|
||||
named parameter (otherwise it is an extra parameter matching an
|
||||
ellipsis). */
|
||||
|
||||
static rtx
|
||||
ix86_function_arg (const CUMULATIVE_ARGS *cum, enum machine_mode omode,
|
||||
const_tree type, int named)
|
||||
{
|
||||
enum machine_mode mode = omode;
|
||||
HOST_WIDE_INT bytes, words;
|
||||
|
@ -30874,6 +30888,10 @@ ix86_enum_va_list (int idx, const char **pname, tree *ptree)
|
|||
#define TARGET_SETUP_INCOMING_VARARGS ix86_setup_incoming_varargs
|
||||
#undef TARGET_MUST_PASS_IN_STACK
|
||||
#define TARGET_MUST_PASS_IN_STACK ix86_must_pass_in_stack
|
||||
#undef TARGET_FUNCTION_ARG_ADVANCE
|
||||
#define TARGET_FUNCTION_ARG_ADVANCE ix86_function_arg_advance
|
||||
#undef TARGET_FUNCTION_ARG
|
||||
#define TARGET_FUNCTION_ARG ix86_function_arg
|
||||
#undef TARGET_PASS_BY_REFERENCE
|
||||
#define TARGET_PASS_BY_REFERENCE ix86_pass_by_reference
|
||||
#undef TARGET_INTERNAL_ARG_POINTER
|
||||
|
|
|
@ -1591,29 +1591,6 @@ typedef struct ix86_args {
|
|||
#define INIT_CUMULATIVE_ARGS(CUM, FNTYPE, LIBNAME, FNDECL, N_NAMED_ARGS) \
|
||||
init_cumulative_args (&(CUM), (FNTYPE), (LIBNAME), (FNDECL))
|
||||
|
||||
/* Update the data in CUM to advance over an argument
|
||||
of mode MODE and data type TYPE.
|
||||
(TYPE is null for libcalls where that information may not be available.) */
|
||||
|
||||
#define FUNCTION_ARG_ADVANCE(CUM, MODE, TYPE, NAMED) \
|
||||
function_arg_advance (&(CUM), (MODE), (TYPE), (NAMED))
|
||||
|
||||
/* Define where to put the arguments to a function.
|
||||
Value is zero to push the argument on the stack,
|
||||
or a hard register in which to store the argument.
|
||||
|
||||
MODE is the argument's machine mode.
|
||||
TYPE is the data type of the argument (as a tree).
|
||||
This is null for libcalls where that information may
|
||||
not be available.
|
||||
CUM is a variable of type CUMULATIVE_ARGS which gives info about
|
||||
the preceding args and about the function being called.
|
||||
NAMED is nonzero if this argument is a named parameter
|
||||
(otherwise it is an extra parameter matching an ellipsis). */
|
||||
|
||||
#define FUNCTION_ARG(CUM, MODE, TYPE, NAMED) \
|
||||
function_arg (&(CUM), (MODE), (TYPE), (NAMED))
|
||||
|
||||
/* Output assembler code to FILE to increment profiler label # LABELNO
|
||||
for profiling a function entry. */
|
||||
|
||||
|
|
|
@ -2326,7 +2326,8 @@ get_call_args (rtx call_insn, tree fn, rtx *args, int nargs)
|
|||
arg = TREE_CHAIN (arg), idx++)
|
||||
{
|
||||
enum machine_mode mode = TYPE_MODE (TREE_VALUE (arg));
|
||||
rtx reg = FUNCTION_ARG (args_so_far, mode, NULL_TREE, 1), link, tmp;
|
||||
rtx reg, link, tmp;
|
||||
reg = targetm.calls.function_arg (&args_so_far, mode, NULL_TREE, true);
|
||||
if (!reg || !REG_P (reg) || GET_MODE (reg) != mode
|
||||
|| GET_MODE_CLASS (mode) != MODE_INT)
|
||||
return false;
|
||||
|
@ -2360,7 +2361,7 @@ get_call_args (rtx call_insn, tree fn, rtx *args, int nargs)
|
|||
if (tmp)
|
||||
args[idx] = tmp;
|
||||
|
||||
FUNCTION_ARG_ADVANCE (args_so_far, mode, NULL_TREE, 1);
|
||||
targetm.calls.function_arg_advance (&args_so_far, mode, NULL_TREE, true);
|
||||
}
|
||||
if (arg != void_list_node || idx != nargs)
|
||||
return false;
|
||||
|
|
|
@ -1276,12 +1276,14 @@ block_move_libcall_safe_for_call_parm (void)
|
|||
for ( ; arg != void_list_node ; arg = TREE_CHAIN (arg))
|
||||
{
|
||||
enum machine_mode mode = TYPE_MODE (TREE_VALUE (arg));
|
||||
rtx tmp = FUNCTION_ARG (args_so_far, mode, NULL_TREE, 1);
|
||||
rtx tmp = targetm.calls.function_arg (&args_so_far, mode,
|
||||
NULL_TREE, true);
|
||||
if (!tmp || !REG_P (tmp))
|
||||
return false;
|
||||
if (targetm.calls.arg_partial_bytes (&args_so_far, mode, NULL, 1))
|
||||
return false;
|
||||
FUNCTION_ARG_ADVANCE (args_so_far, mode, NULL_TREE, 1);
|
||||
targetm.calls.function_arg_advance (&args_so_far, mode,
|
||||
NULL_TREE, true);
|
||||
}
|
||||
}
|
||||
return true;
|
||||
|
|
|
@ -2374,13 +2374,10 @@ assign_parm_find_entry_rtl (struct assign_parm_data_all *all,
|
|||
return;
|
||||
}
|
||||
|
||||
#ifdef FUNCTION_INCOMING_ARG
|
||||
entry_parm = FUNCTION_INCOMING_ARG (all->args_so_far, data->promoted_mode,
|
||||
data->passed_type, data->named_arg);
|
||||
#else
|
||||
entry_parm = FUNCTION_ARG (all->args_so_far, data->promoted_mode,
|
||||
data->passed_type, data->named_arg);
|
||||
#endif
|
||||
entry_parm = targetm.calls.function_incoming_arg (&all->args_so_far,
|
||||
data->promoted_mode,
|
||||
data->passed_type,
|
||||
data->named_arg);
|
||||
|
||||
if (entry_parm == 0)
|
||||
data->promoted_mode = data->passed_mode;
|
||||
|
@ -2404,13 +2401,9 @@ assign_parm_find_entry_rtl (struct assign_parm_data_all *all,
|
|||
if (targetm.calls.pretend_outgoing_varargs_named (&all->args_so_far))
|
||||
{
|
||||
rtx tem;
|
||||
#ifdef FUNCTION_INCOMING_ARG
|
||||
tem = FUNCTION_INCOMING_ARG (all->args_so_far, data->promoted_mode,
|
||||
data->passed_type, true);
|
||||
#else
|
||||
tem = FUNCTION_ARG (all->args_so_far, data->promoted_mode,
|
||||
data->passed_type, true);
|
||||
#endif
|
||||
tem = targetm.calls.function_incoming_arg (&all->args_so_far,
|
||||
data->promoted_mode,
|
||||
data->passed_type, true);
|
||||
in_regs = tem != NULL;
|
||||
}
|
||||
}
|
||||
|
@ -3275,8 +3268,8 @@ assign_parms (tree fndecl)
|
|||
set_decl_incoming_rtl (parm, data.entry_parm, data.passed_pointer);
|
||||
|
||||
/* Update info on where next arg arrives in registers. */
|
||||
FUNCTION_ARG_ADVANCE (all.args_so_far, data.promoted_mode,
|
||||
data.passed_type, data.named_arg);
|
||||
targetm.calls.function_arg_advance (&all.args_so_far, data.promoted_mode,
|
||||
data.passed_type, data.named_arg);
|
||||
|
||||
assign_parm_adjust_stack_rtl (&data);
|
||||
|
||||
|
@ -3465,8 +3458,8 @@ gimplify_parameters (void)
|
|||
continue;
|
||||
|
||||
/* Update info on where next arg arrives in registers. */
|
||||
FUNCTION_ARG_ADVANCE (all.args_so_far, data.promoted_mode,
|
||||
data.passed_type, data.named_arg);
|
||||
targetm.calls.function_arg_advance (&all.args_so_far, data.promoted_mode,
|
||||
data.passed_type, data.named_arg);
|
||||
|
||||
/* ??? Once upon a time variable_size stuffed parameter list
|
||||
SAVE_EXPRs (amongst others) onto a pending sizes list. This
|
||||
|
|
|
@ -712,6 +712,22 @@
|
|||
#define TARGET_CALLEE_COPIES hook_bool_CUMULATIVE_ARGS_mode_tree_bool_false
|
||||
#define TARGET_ARG_PARTIAL_BYTES hook_int_CUMULATIVE_ARGS_mode_tree_bool_0
|
||||
|
||||
#ifndef TARGET_FUNCTION_ARG_ADVANCE
|
||||
#define TARGET_FUNCTION_ARG_ADVANCE default_function_arg_advance
|
||||
#endif
|
||||
|
||||
#ifndef TARGET_FUNCTION_ARG
|
||||
#define TARGET_FUNCTION_ARG default_function_arg
|
||||
#endif
|
||||
|
||||
#ifndef TARGET_FUNCTION_INCOMING_ARG
|
||||
#ifndef FUNCTION_INCOMING_ARG
|
||||
#define TARGET_FUNCTION_INCOMING_ARG TARGET_FUNCTION_ARG
|
||||
#else
|
||||
#define TARGET_FUNCTION_INCOMING_ARG default_function_incoming_arg
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#define TARGET_FUNCTION_VALUE default_function_value
|
||||
#define TARGET_LIBCALL_VALUE default_libcall_value
|
||||
#define TARGET_FUNCTION_VALUE_REGNO_P default_function_value_regno_p
|
||||
|
@ -739,6 +755,9 @@
|
|||
TARGET_MUST_PASS_IN_STACK, \
|
||||
TARGET_CALLEE_COPIES, \
|
||||
TARGET_ARG_PARTIAL_BYTES, \
|
||||
TARGET_FUNCTION_ARG_ADVANCE, \
|
||||
TARGET_FUNCTION_ARG, \
|
||||
TARGET_FUNCTION_INCOMING_ARG, \
|
||||
TARGET_INVALID_ARG_FOR_UNPROTOTYPED_FN, \
|
||||
TARGET_FUNCTION_VALUE, \
|
||||
TARGET_LIBCALL_VALUE, \
|
||||
|
|
20
gcc/target.h
20
gcc/target.h
|
@ -1020,6 +1020,26 @@ struct gcc_target
|
|||
int (* arg_partial_bytes) (CUMULATIVE_ARGS *ca, enum machine_mode mode,
|
||||
tree type, bool named);
|
||||
|
||||
/* Update the state in CA to advance past an argument in the
|
||||
argument list. The values MODE, TYPE, and NAMED describe that
|
||||
argument. */
|
||||
void (*function_arg_advance) (CUMULATIVE_ARGS *ca,
|
||||
enum machine_mode mode, const_tree type,
|
||||
bool named);
|
||||
|
||||
/* Return zero if the argument described by the state of CA should
|
||||
be placed on a stack, or a hard register in which to store the
|
||||
argument. The values MODE, TYPE, and NAMED describe that
|
||||
argument. */
|
||||
rtx (*function_arg) (const CUMULATIVE_ARGS *ca,
|
||||
enum machine_mode mode, const_tree type, bool named);
|
||||
|
||||
/* Likewise, but for machines with register windows. Return the
|
||||
location where the argument will appear to the callee. */
|
||||
rtx (*function_incoming_arg) (const CUMULATIVE_ARGS *ca,
|
||||
enum machine_mode mode,
|
||||
const_tree type, bool named);
|
||||
|
||||
/* Return the diagnostic message string if function without a prototype
|
||||
is not allowed for this 'val' argument; NULL otherwise. */
|
||||
const char *(*invalid_arg_for_unprototyped_fn) (const_tree typelist,
|
||||
|
|
|
@ -543,6 +543,49 @@ hook_int_CUMULATIVE_ARGS_mode_tree_bool_0 (
|
|||
return 0;
|
||||
}
|
||||
|
||||
void
|
||||
default_function_arg_advance (CUMULATIVE_ARGS *ca ATTRIBUTE_UNUSED,
|
||||
enum machine_mode mode ATTRIBUTE_UNUSED,
|
||||
const_tree type ATTRIBUTE_UNUSED,
|
||||
bool named ATTRIBUTE_UNUSED)
|
||||
{
|
||||
#ifdef FUNCTION_ARG_ADVANCE
|
||||
CUMULATIVE_ARGS args = *ca;
|
||||
FUNCTION_ARG_ADVANCE (args, mode, CONST_CAST_TREE (type), named);
|
||||
*ca = args;
|
||||
#else
|
||||
gcc_unreachable ();
|
||||
#endif
|
||||
}
|
||||
|
||||
rtx
|
||||
default_function_arg (const CUMULATIVE_ARGS *ca ATTRIBUTE_UNUSED,
|
||||
enum machine_mode mode ATTRIBUTE_UNUSED,
|
||||
const_tree type ATTRIBUTE_UNUSED,
|
||||
bool named ATTRIBUTE_UNUSED)
|
||||
{
|
||||
#ifdef FUNCTION_ARG
|
||||
return FUNCTION_ARG (*(CONST_CAST (CUMULATIVE_ARGS *, ca)), mode,
|
||||
CONST_CAST_TREE (type), named);
|
||||
#else
|
||||
gcc_unreachable ();
|
||||
#endif
|
||||
}
|
||||
|
||||
rtx
|
||||
default_function_incoming_arg (const CUMULATIVE_ARGS *ca ATTRIBUTE_UNUSED,
|
||||
enum machine_mode mode ATTRIBUTE_UNUSED,
|
||||
const_tree type ATTRIBUTE_UNUSED,
|
||||
bool named ATTRIBUTE_UNUSED)
|
||||
{
|
||||
#ifdef FUNCTION_INCOMING_ARG
|
||||
return FUNCTION_INCOMING_ARG (*(CONST_CAST (CUMULATIVE_ARGS *, ca)), mode,
|
||||
CONST_CAST_TREE (type), named);
|
||||
#else
|
||||
gcc_unreachable ();
|
||||
#endif
|
||||
}
|
||||
|
||||
void
|
||||
hook_void_bitmap (bitmap regs ATTRIBUTE_UNUSED)
|
||||
{
|
||||
|
|
|
@ -101,6 +101,12 @@ extern int hook_int_CUMULATIVE_ARGS_mode_tree_bool_0
|
|||
(CUMULATIVE_ARGS *, enum machine_mode, tree, bool);
|
||||
extern const char *hook_invalid_arg_for_unprototyped_fn
|
||||
(const_tree, const_tree, const_tree);
|
||||
extern void default_function_arg_advance
|
||||
(CUMULATIVE_ARGS *, enum machine_mode, const_tree, bool);
|
||||
extern rtx default_function_arg
|
||||
(const CUMULATIVE_ARGS *, enum machine_mode, const_tree, bool);
|
||||
extern rtx default_function_incoming_arg
|
||||
(const CUMULATIVE_ARGS *, enum machine_mode, const_tree, bool);
|
||||
extern bool hook_bool_const_rtx_commutative_p (const_rtx, int);
|
||||
extern rtx default_function_value (const_tree, const_tree, bool);
|
||||
extern rtx default_libcall_value (enum machine_mode, const_rtx);
|
||||
|
|
Loading…
Add table
Reference in a new issue