sparc-protos.h (function_arg_advance, [...]): Delete.
* config/sparc/sparc-protos.h (function_arg_advance, function-arg): Delete. * config/sparc/sparc.h (FUNCTION_ARG_ADVANCE, FUNCTION_ARG): Delete. (FUNCTION_INCOMING_ARG): Delete. * config/sparc/sparc.c (scan_record_type): Const-ify tree argument. (function_arg_slotno): Likewise. Take bool arguments. (sparc_arg_partial_bytes): Update call to it. (function_arg): Rename to... (sparc_function_arg_1): ...this. Take bool arguments. (sparc_function_arg, sparc_function_incoming_arg): New functions. (function_arg_advance): Rename to... (sparc_function_arg_advance): ...this. Take bool argument. (TARGET_FUNCTION_ARG_ADVANCE, TARGET_FUNCTION_ARG): Define. (TARGET_FUNCTION_INCOMING_ARG): Define. From-SVN: r165183
This commit is contained in:
parent
74f41f0282
commit
9adafb9fd1
@ -1,3 +1,20 @@
|
|||||||
|
2010-10-08 Nathan Froyd <froydnj@codesourcery.com>
|
||||||
|
|
||||||
|
* config/sparc/sparc-protos.h (function_arg_advance, function-arg):
|
||||||
|
Delete.
|
||||||
|
* config/sparc/sparc.h (FUNCTION_ARG_ADVANCE, FUNCTION_ARG): Delete.
|
||||||
|
(FUNCTION_INCOMING_ARG): Delete.
|
||||||
|
* config/sparc/sparc.c (scan_record_type): Const-ify tree argument.
|
||||||
|
(function_arg_slotno): Likewise. Take bool arguments.
|
||||||
|
(sparc_arg_partial_bytes): Update call to it.
|
||||||
|
(function_arg): Rename to...
|
||||||
|
(sparc_function_arg_1): ...this. Take bool arguments.
|
||||||
|
(sparc_function_arg, sparc_function_incoming_arg): New functions.
|
||||||
|
(function_arg_advance): Rename to...
|
||||||
|
(sparc_function_arg_advance): ...this. Take bool argument.
|
||||||
|
(TARGET_FUNCTION_ARG_ADVANCE, TARGET_FUNCTION_ARG): Define.
|
||||||
|
(TARGET_FUNCTION_INCOMING_ARG): Define.
|
||||||
|
|
||||||
2010-10-08 Nathan Froyd <froydnj@codesourcery.com>
|
2010-10-08 Nathan Froyd <froydnj@codesourcery.com>
|
||||||
|
|
||||||
* config/bfin/bfin-protos.h (function_arg, function_arg_advance):
|
* config/bfin/bfin-protos.h (function_arg, function_arg_advance):
|
||||||
|
@ -25,10 +25,6 @@ along with GCC; see the file COPYING3. If not see
|
|||||||
#define __SPARC_PROTOS_H__
|
#define __SPARC_PROTOS_H__
|
||||||
|
|
||||||
#ifdef TREE_CODE
|
#ifdef TREE_CODE
|
||||||
extern void function_arg_advance (CUMULATIVE_ARGS *,
|
|
||||||
enum machine_mode, tree, int);
|
|
||||||
extern struct rtx_def *function_arg (const CUMULATIVE_ARGS *,
|
|
||||||
enum machine_mode, tree, int, int);
|
|
||||||
#ifdef RTX_CODE
|
#ifdef RTX_CODE
|
||||||
extern void init_cumulative_args (CUMULATIVE_ARGS *, tree, rtx, tree);
|
extern void init_cumulative_args (CUMULATIVE_ARGS *, tree, rtx, tree);
|
||||||
#endif
|
#endif
|
||||||
|
@ -351,9 +351,9 @@ int sparc_indent_opcode = 0;
|
|||||||
static bool sparc_handle_option (size_t, const char *, int);
|
static bool sparc_handle_option (size_t, const char *, int);
|
||||||
static void sparc_option_override (void);
|
static void sparc_option_override (void);
|
||||||
static void sparc_init_modes (void);
|
static void sparc_init_modes (void);
|
||||||
static void scan_record_type (tree, int *, int *, int *);
|
static void scan_record_type (const_tree, int *, int *, int *);
|
||||||
static int function_arg_slotno (const CUMULATIVE_ARGS *, enum machine_mode,
|
static int function_arg_slotno (const CUMULATIVE_ARGS *, enum machine_mode,
|
||||||
tree, int, int, int *, int *);
|
const_tree, bool, bool, int *, int *);
|
||||||
|
|
||||||
static int supersparc_adjust_cost (rtx, rtx, rtx, int);
|
static int supersparc_adjust_cost (rtx, rtx, rtx, int);
|
||||||
static int hypersparc_adjust_cost (rtx, rtx, rtx, int);
|
static int hypersparc_adjust_cost (rtx, rtx, rtx, int);
|
||||||
@ -424,6 +424,14 @@ static rtx sparc_legitimize_address (rtx, rtx, enum machine_mode);
|
|||||||
static bool sparc_mode_dependent_address_p (const_rtx);
|
static bool sparc_mode_dependent_address_p (const_rtx);
|
||||||
static bool sparc_pass_by_reference (CUMULATIVE_ARGS *,
|
static bool sparc_pass_by_reference (CUMULATIVE_ARGS *,
|
||||||
enum machine_mode, const_tree, bool);
|
enum machine_mode, const_tree, bool);
|
||||||
|
static void sparc_function_arg_advance (CUMULATIVE_ARGS *,
|
||||||
|
enum machine_mode, const_tree, bool);
|
||||||
|
static rtx sparc_function_arg_1 (const CUMULATIVE_ARGS *,
|
||||||
|
enum machine_mode, const_tree, bool, bool);
|
||||||
|
static rtx sparc_function_arg (CUMULATIVE_ARGS *,
|
||||||
|
enum machine_mode, const_tree, bool);
|
||||||
|
static rtx sparc_function_incoming_arg (CUMULATIVE_ARGS *,
|
||||||
|
enum machine_mode, const_tree, bool);
|
||||||
static int sparc_arg_partial_bytes (CUMULATIVE_ARGS *,
|
static int sparc_arg_partial_bytes (CUMULATIVE_ARGS *,
|
||||||
enum machine_mode, tree, bool);
|
enum machine_mode, tree, bool);
|
||||||
static void sparc_dwarf_handle_frame_unspec (const char *, rtx, int);
|
static void sparc_dwarf_handle_frame_unspec (const char *, rtx, int);
|
||||||
@ -559,6 +567,12 @@ static bool fpu_option_set = false;
|
|||||||
#define TARGET_PASS_BY_REFERENCE sparc_pass_by_reference
|
#define TARGET_PASS_BY_REFERENCE sparc_pass_by_reference
|
||||||
#undef TARGET_ARG_PARTIAL_BYTES
|
#undef TARGET_ARG_PARTIAL_BYTES
|
||||||
#define TARGET_ARG_PARTIAL_BYTES sparc_arg_partial_bytes
|
#define TARGET_ARG_PARTIAL_BYTES sparc_arg_partial_bytes
|
||||||
|
#undef TARGET_FUNCTION_ARG_ADVANCE
|
||||||
|
#define TARGET_FUNCTION_ARG_ADVANCE sparc_function_arg_advance
|
||||||
|
#undef TARGET_FUNCTION_ARG
|
||||||
|
#define TARGET_FUNCTION_ARG sparc_function_arg
|
||||||
|
#undef TARGET_FUNCTION_INCOMING_ARG
|
||||||
|
#define TARGET_FUNCTION_INCOMING_ARG sparc_function_incoming_arg
|
||||||
|
|
||||||
#undef TARGET_EXPAND_BUILTIN_SAVEREGS
|
#undef TARGET_EXPAND_BUILTIN_SAVEREGS
|
||||||
#define TARGET_EXPAND_BUILTIN_SAVEREGS sparc_builtin_saveregs
|
#define TARGET_EXPAND_BUILTIN_SAVEREGS sparc_builtin_saveregs
|
||||||
@ -4938,7 +4952,8 @@ sparc_strict_argument_naming (CUMULATIVE_ARGS *ca ATTRIBUTE_UNUSED)
|
|||||||
Sub-fields are not taken into account for the PACKED_P predicate. */
|
Sub-fields are not taken into account for the PACKED_P predicate. */
|
||||||
|
|
||||||
static void
|
static void
|
||||||
scan_record_type (tree type, int *intregs_p, int *fpregs_p, int *packed_p)
|
scan_record_type (const_tree type, int *intregs_p, int *fpregs_p,
|
||||||
|
int *packed_p)
|
||||||
{
|
{
|
||||||
tree field;
|
tree field;
|
||||||
|
|
||||||
@ -4978,7 +4993,7 @@ scan_record_type (tree type, int *intregs_p, int *fpregs_p, int *packed_p)
|
|||||||
|
|
||||||
static int
|
static int
|
||||||
function_arg_slotno (const struct sparc_args *cum, enum machine_mode mode,
|
function_arg_slotno (const struct sparc_args *cum, enum machine_mode mode,
|
||||||
tree type, int named, int incoming_p,
|
const_tree type, bool named, bool incoming_p,
|
||||||
int *pregno, int *ppadding)
|
int *pregno, int *ppadding)
|
||||||
{
|
{
|
||||||
int regbase = (incoming_p
|
int regbase = (incoming_p
|
||||||
@ -5552,8 +5567,7 @@ function_arg_vector_value (int size, int regno)
|
|||||||
return regs;
|
return regs;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Handle the FUNCTION_ARG macro.
|
/* Determine where to put an argument to a function.
|
||||||
Determine where to put an argument to a function.
|
|
||||||
Value is zero to push the argument on the stack,
|
Value is zero to push the argument on the stack,
|
||||||
or a hard register in which to store the argument.
|
or a hard register in which to store the argument.
|
||||||
|
|
||||||
@ -5563,13 +5577,14 @@ function_arg_vector_value (int size, int regno)
|
|||||||
TYPE is the data type of the argument (as a tree).
|
TYPE is the data type of the argument (as a tree).
|
||||||
This is null for libcalls where that information may
|
This is null for libcalls where that information may
|
||||||
not be available.
|
not be available.
|
||||||
NAMED is nonzero if this argument is a named parameter
|
NAMED is true if this argument is a named parameter
|
||||||
(otherwise it is an extra parameter matching an ellipsis).
|
(otherwise it is an extra parameter matching an ellipsis).
|
||||||
INCOMING_P is zero for FUNCTION_ARG, nonzero for FUNCTION_INCOMING_ARG. */
|
INCOMING_P is false for TARGET_FUNCTION_ARG, true for
|
||||||
|
TARGET_FUNCTION_INCOMING_ARG. */
|
||||||
|
|
||||||
rtx
|
static rtx
|
||||||
function_arg (const struct sparc_args *cum, enum machine_mode mode,
|
sparc_function_arg_1 (const CUMULATIVE_ARGS *cum, enum machine_mode mode,
|
||||||
tree type, int named, int incoming_p)
|
const_tree type, bool named, bool incoming_p)
|
||||||
{
|
{
|
||||||
int regbase = (incoming_p
|
int regbase = (incoming_p
|
||||||
? SPARC_INCOMING_INT_ARG_FIRST
|
? SPARC_INCOMING_INT_ARG_FIRST
|
||||||
@ -5701,6 +5716,24 @@ function_arg (const struct sparc_args *cum, enum machine_mode mode,
|
|||||||
return gen_rtx_REG (mode, regno);
|
return gen_rtx_REG (mode, regno);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Handle the TARGET_FUNCTION_ARG target hook. */
|
||||||
|
|
||||||
|
static rtx
|
||||||
|
sparc_function_arg (CUMULATIVE_ARGS *cum, enum machine_mode mode,
|
||||||
|
const_tree type, bool named)
|
||||||
|
{
|
||||||
|
return sparc_function_arg_1 (cum, mode, type, named, false);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Handle the TARGET_FUNCTION_INCOMING_ARG target hook. */
|
||||||
|
|
||||||
|
static rtx
|
||||||
|
sparc_function_incoming_arg (CUMULATIVE_ARGS *cum, enum machine_mode mode,
|
||||||
|
const_tree type, bool named)
|
||||||
|
{
|
||||||
|
return sparc_function_arg_1 (cum, mode, type, named, true);
|
||||||
|
}
|
||||||
|
|
||||||
/* For an arg passed partly in registers and partly in memory,
|
/* For an arg passed partly in registers and partly in memory,
|
||||||
this is the number of bytes of registers used.
|
this is the number of bytes of registers used.
|
||||||
For args passed entirely in registers or entirely in memory, zero.
|
For args passed entirely in registers or entirely in memory, zero.
|
||||||
@ -5717,8 +5750,9 @@ sparc_arg_partial_bytes (CUMULATIVE_ARGS *cum, enum machine_mode mode,
|
|||||||
{
|
{
|
||||||
int slotno, regno, padding;
|
int slotno, regno, padding;
|
||||||
|
|
||||||
/* We pass 0 for incoming_p here, it doesn't matter. */
|
/* We pass false for incoming_p here, it doesn't matter. */
|
||||||
slotno = function_arg_slotno (cum, mode, type, named, 0, ®no, &padding);
|
slotno = function_arg_slotno (cum, mode, type, named, false,
|
||||||
|
®no, &padding);
|
||||||
|
|
||||||
if (slotno == -1)
|
if (slotno == -1)
|
||||||
return 0;
|
return 0;
|
||||||
@ -5816,19 +5850,19 @@ sparc_pass_by_reference (CUMULATIVE_ARGS *cum ATTRIBUTE_UNUSED,
|
|||||||
|| GET_MODE_SIZE (mode) > 16);
|
|| GET_MODE_SIZE (mode) > 16);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Handle the FUNCTION_ARG_ADVANCE macro.
|
/* Handle the TARGET_FUNCTION_ARG_ADVANCE hook.
|
||||||
Update the data in CUM to advance over an argument
|
Update the data in CUM to advance over an argument
|
||||||
of mode MODE and data type TYPE.
|
of mode MODE and data type TYPE.
|
||||||
TYPE is null for libcalls where that information may not be available. */
|
TYPE is null for libcalls where that information may not be available. */
|
||||||
|
|
||||||
void
|
static void
|
||||||
function_arg_advance (struct sparc_args *cum, enum machine_mode mode,
|
sparc_function_arg_advance (struct sparc_args *cum, enum machine_mode mode,
|
||||||
tree type, int named)
|
const_tree type, bool named)
|
||||||
{
|
{
|
||||||
int regno, padding;
|
int regno, padding;
|
||||||
|
|
||||||
/* We pass 0 for incoming_p here, it doesn't matter. */
|
/* We pass false for incoming_p here, it doesn't matter. */
|
||||||
function_arg_slotno (cum, mode, type, named, 0, ®no, &padding);
|
function_arg_slotno (cum, mode, type, named, false, ®no, &padding);
|
||||||
|
|
||||||
/* If argument requires leading padding, add it. */
|
/* If argument requires leading padding, add it. */
|
||||||
cum->words += padding;
|
cum->words += padding;
|
||||||
|
@ -1444,35 +1444,6 @@ struct sparc_args {
|
|||||||
#define INIT_CUMULATIVE_ARGS(CUM, FNTYPE, LIBNAME, FNDECL, N_NAMED_ARGS) \
|
#define INIT_CUMULATIVE_ARGS(CUM, FNTYPE, LIBNAME, FNDECL, N_NAMED_ARGS) \
|
||||||
init_cumulative_args (& (CUM), (FNTYPE), (LIBNAME), (FNDECL));
|
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))
|
|
||||||
|
|
||||||
/* Determine where to put an argument 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), 0)
|
|
||||||
|
|
||||||
/* Define where a function finds its arguments.
|
|
||||||
This is different from FUNCTION_ARG because of register windows. */
|
|
||||||
|
|
||||||
#define FUNCTION_INCOMING_ARG(CUM, MODE, TYPE, NAMED) \
|
|
||||||
function_arg (& (CUM), (MODE), (TYPE), (NAMED), 1)
|
|
||||||
|
|
||||||
/* If defined, a C expression which determines whether, and in which direction,
|
/* If defined, a C expression which determines whether, and in which direction,
|
||||||
to pad out an argument with extra space. The value should be of type
|
to pad out an argument with extra space. The value should be of type
|
||||||
`enum direction': either `upward' to pad above the argument,
|
`enum direction': either `upward' to pad above the argument,
|
||||||
|
Loading…
Reference in New Issue
Block a user