Commit b9599e46 by Franz Sirl Committed by Franz Sirl

rs6000.c (init_cumulative_args): Add and handle LIBCALL argument.

2003-06-18  Franz Sirl  <Franz.Sirl-kernel@lauterbach.com>

	* config/rs6000/rs6000.c (init_cumulative_args): Add and handle LIBCALL
	argument.
	(function_arg): Handle CALL_LIBCALL flag.
	* config/rs6000/rs6000-protos.h (init_cumulative_args): Update
	prototype.
	* config/rs6000/rs6000.h (CALL_LIBCALL): New macro.
	(INIT_CUMULATIVE_LIBCALL_ARGS): New macro.
	(INIT_CUMULATIVE_ARGS): Add LIBCALL argument.
	(INIT_CUMULATIVE_INCOMING_ARGS): Likewise.

From-SVN: r68139
parent 903caebf
2003-06-18 Franz Sirl <Franz.Sirl-kernel@lauterbach.com>
* config/rs6000/rs6000.c (init_cumulative_args): Add and handle LIBCALL
argument.
(function_arg): Handle CALL_LIBCALL flag.
* config/rs6000/rs6000-protos.h (init_cumulative_args): Update
prototype.
* config/rs6000/rs6000.h (CALL_LIBCALL): New macro.
(INIT_CUMULATIVE_LIBCALL_ARGS): New macro.
(INIT_CUMULATIVE_ARGS): Add LIBCALL argument.
(INIT_CUMULATIVE_INCOMING_ARGS): Likewise.
2003-06-18 Neil Booth <neil@daikokuya.co.uk>
* Makefile.in: Update.
......
......@@ -27,7 +27,7 @@
#ifdef RTX_CODE
#ifdef TREE_CODE
extern void init_cumulative_args PARAMS ((CUMULATIVE_ARGS *, tree, rtx, int));
extern void init_cumulative_args PARAMS ((CUMULATIVE_ARGS *, tree, rtx, int, int));
extern void rs6000_va_start PARAMS ((tree, rtx));
#endif /* TREE_CODE */
......
......@@ -3639,11 +3639,12 @@ rs6000_emit_move (dest, source, mode)
so we never return a PARALLEL. */
void
init_cumulative_args (cum, fntype, libname, incoming)
init_cumulative_args (cum, fntype, libname, incoming, libcall)
CUMULATIVE_ARGS *cum;
tree fntype;
rtx libname ATTRIBUTE_UNUSED;
int incoming;
int libcall;
{
static CUMULATIVE_ARGS zero_cumulative;
......@@ -3652,7 +3653,7 @@ init_cumulative_args (cum, fntype, libname, incoming)
cum->fregno = FP_ARG_MIN_REG;
cum->vregno = ALTIVEC_ARG_MIN_REG;
cum->prototype = (fntype && TYPE_ARG_TYPES (fntype));
cum->call_cookie = CALL_NORMAL;
cum->call_cookie = libcall ? CALL_LIBCALL : CALL_NORMAL;
cum->sysv_gregno = GP_ARG_MIN_REG;
cum->stdarg = fntype
&& (TYPE_ARG_TYPES (fntype) != 0
......@@ -3901,7 +3902,7 @@ rs6000_spe_function_arg (CUMULATIVE_ARGS *cum, enum machine_mode mode, tree type
If this is floating-point and no prototype is specified, we use
both an FP and integer register (or possibly FP reg and stack). Library
functions (when TYPE is zero) always have the proper types for args,
functions (when CALL_LIBCALL is set) always have the proper types for args,
so we can pass the FP value just in one register. emit_library_function
doesn't support PARALLEL anyway. */
......@@ -3922,7 +3923,8 @@ function_arg (cum, mode, type, named)
{
if (abi == ABI_V4
&& cum->nargs_prototype < 0
&& type && (cum->prototype || TARGET_NO_PROTOTYPE))
&& (cum->call_cookie & CALL_LIBCALL) == 0
&& (cum->prototype || TARGET_NO_PROTOTYPE))
{
/* For the SPE, we need to crxor CR6 always. */
if (TARGET_SPE_ABI)
......
......@@ -1665,6 +1665,7 @@ typedef struct rs6000_stack {
#define CALL_V4_CLEAR_FP_ARGS 0x00000002 /* V.4, no FP args passed */
#define CALL_V4_SET_FP_ARGS 0x00000004 /* V.4, FP args were passed */
#define CALL_LONG 0x00000008 /* always call indirect */
#define CALL_LIBCALL 0x00000010 /* libcall */
/* 1 if N is a possible register number for a function value
as seen by the caller.
......@@ -1743,13 +1744,18 @@ typedef struct rs6000_args
For a library call, FNTYPE is 0. */
#define INIT_CUMULATIVE_ARGS(CUM,FNTYPE,LIBNAME,INDIRECT) \
init_cumulative_args (&CUM, FNTYPE, LIBNAME, FALSE)
init_cumulative_args (&CUM, FNTYPE, LIBNAME, FALSE, FALSE)
/* Similar, but when scanning the definition of a procedure. We always
set NARGS_PROTOTYPE large so we never return an EXPR_LIST. */
#define INIT_CUMULATIVE_INCOMING_ARGS(CUM,FNTYPE,LIBNAME) \
init_cumulative_args (&CUM, FNTYPE, LIBNAME, TRUE)
init_cumulative_args (&CUM, FNTYPE, LIBNAME, TRUE, FALSE)
/* Like INIT_CUMULATIVE_ARGS' but only used for outgoing libcalls. */
#define INIT_CUMULATIVE_LIBCALL_ARGS(CUM, MODE, LIBNAME) \
init_cumulative_args (&CUM, NULL_TREE, LIBNAME, FALSE, TRUE)
/* Update the data in CUM to advance over an argument
of mode MODE and data type TYPE.
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment