target.h (struct gcc_target): New member external_libcall.

* target.h (struct gcc_target): New member external_libcall.
	* target-def.h (TARGET_ASM_EXTERNAL_LIBCALL): Provide default.
	(TARGET_ASM_OUT): Use it.
	* doc/tm.texi (TARGET_ASM_EXTERNAL_LIBCALL): Document.
	* targhooks.c: Convert to ISO C 90.
	(default_external_libcall): New function.
	* targhooks.h (default_external_libcall): Declare.
	* varasm.c (assemble_external_libcall): Use
	targetm.asm_out.external_libcall instead of
	ASM_OUTPUT_EXTERNAL_LIBCALL.
	* config/mips/mips-protos.h [TARGET_IRIX5 || TARGET_IRIX 6]
	(mips_output_external_libcall): Declare.
	* config/mips/mips.c (mips_output_external_libcall): Change
	definition guard.
	Change to match TARGET_ASM_EXTERNAL_LIBCALL.
	Only operate for O32 ABI.
	* config/mips/iris5.h (TARGET_ASM_EXTERNAL_LIBCALL): Define
	instead of ASM_OUTPUT_EXTERNAL_LIBCALL.
	* config/mips/iris6.h (ASM_OUTPUT_EXTERNAL_LIBCALL): Don't undef,
	superceded by TARGET_ASM_EXTERNAL_LIBCALL.

From-SVN: r71689
This commit is contained in:
Rainer Orth 2003-09-23 19:17:49 +00:00 committed by Rainer Orth
parent 8c8a95ffca
commit 6773a41c43
11 changed files with 68 additions and 35 deletions

View file

@ -1,3 +1,26 @@
2003-09-23 Rainer Orth <ro@TechFak.Uni-Bielefeld.DE>
* target.h (struct gcc_target): New member external_libcall.
* target-def.h (TARGET_ASM_EXTERNAL_LIBCALL): Provide default.
(TARGET_ASM_OUT): Use it.
* doc/tm.texi (TARGET_ASM_EXTERNAL_LIBCALL): Document.
* targhooks.c: Convert to ISO C 90.
(default_external_libcall): New function.
* targhooks.h (default_external_libcall): Declare.
* varasm.c (assemble_external_libcall): Use
targetm.asm_out.external_libcall instead of
ASM_OUTPUT_EXTERNAL_LIBCALL.
* config/mips/mips-protos.h [TARGET_IRIX5 || TARGET_IRIX 6]
(mips_output_external_libcall): Declare.
* config/mips/mips.c (mips_output_external_libcall): Change
definition guard.
Change to match TARGET_ASM_EXTERNAL_LIBCALL.
Only operate for O32 ABI.
* config/mips/iris5.h (TARGET_ASM_EXTERNAL_LIBCALL): Define
instead of ASM_OUTPUT_EXTERNAL_LIBCALL.
* config/mips/iris6.h (ASM_OUTPUT_EXTERNAL_LIBCALL): Don't undef,
superceded by TARGET_ASM_EXTERNAL_LIBCALL.
2003-09-22 Nathnael Nerode <neroden@gcc.gnu.org>
* config.host: Allow unknown hosts (not targets). Allow

View file

@ -215,8 +215,8 @@ do { \
} while (0)
/* Also do this for libcalls. */
#define ASM_OUTPUT_EXTERNAL_LIBCALL(FILE, FUN) \
mips_output_external_libcall (FILE, XSTR (FUN, 0))
#undef TARGET_ASM_EXTERNAL_LIBCALL
#define TARGET_ASM_EXTERNAL_LIBCALL mips_output_external_libcall
/* This does for functions what ASM_DECLARE_OBJECT_NAME does for variables.
This is used indirectly by ASM_OUTPUT_EXTERNAL. */

View file

@ -178,7 +178,6 @@ Boston, MA 02111-1307, USA. */
/* IRIX 5 stuff that we don't need for IRIX 6. */
/* ??? We do need this for the -mabi=32 switch though. */
#undef ASM_OUTPUT_UNDEF_FUNCTION
#undef ASM_OUTPUT_EXTERNAL_LIBCALL
#undef ASM_DECLARE_FUNCTION_SIZE
/* Stuff we need for IRIX 6 that isn't in IRIX 5. */

View file

@ -1,6 +1,6 @@
/* Prototypes of target machine for GNU compiler. MIPS version.
Copyright (C) 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
1999, 2001, 2002 Free Software Foundation, Inc.
1999, 2001, 2002, 2003 Free Software Foundation, Inc.
Contributed by A. Lichnewsky (lich@inria.inria.fr).
Changed by Michael Meissner (meissner@osf.org).
64 bit r4000 support by Ian Lance Taylor (ian@cygnus.com) and
@ -98,8 +98,8 @@ extern HOST_WIDE_INT mips_debugger_offset (rtx, HOST_WIDE_INT);
extern void print_operand (FILE *, rtx, int);
extern void print_operand_address (FILE *, rtx);
extern int mips_output_external (FILE *, tree, const char *);
#ifdef ASM_OUTPUT_UNDEF_FUNCTION
extern int mips_output_external_libcall (FILE *, const char *);
#if TARGET_IRIX5 || TARGET_IRIX6
extern void mips_output_external_libcall (rtx);
#endif
extern void mips_output_filename (FILE *, const char *);
extern void mips_output_lineno (FILE *, int);

View file

@ -5517,19 +5517,20 @@ mips_output_external (FILE *file ATTRIBUTE_UNUSED, tree decl, const char *name)
return 0;
}
#ifdef ASM_OUTPUT_UNDEF_FUNCTION
int
mips_output_external_libcall (FILE *file ATTRIBUTE_UNUSED, const char *name)
#if TARGET_IRIX5 || TARGET_IRIX6
void
mips_output_external_libcall (rtx fun)
{
register struct extern_list *p;
p = (struct extern_list *) ggc_alloc (sizeof (struct extern_list));
p->next = extern_head;
p->name = name;
p->size = -1;
extern_head = p;
return 0;
if (mips_abi == ABI_32)
{
p = (struct extern_list *) ggc_alloc (sizeof (struct extern_list));
p->next = extern_head;
p->name = XSTR (fun, 0);
p->size = -1;
extern_head = p;
}
}
#endif

View file

@ -6729,15 +6729,11 @@ This macro need not be defined if it does not need to output anything.
The GNU assembler and most Unix assemblers don't require anything.
@end defmac
@defmac ASM_OUTPUT_EXTERNAL_LIBCALL (@var{stream}, @var{symref})
A C statement (sans semicolon) to output on @var{stream} an assembler
@deftypefn {Target Hook} void TARGET_ASM_EXTERNAL_LIBCALL (rtx @var{symref})
This target hook is a function to output to @var{asm_out_file} an assembler
pseudo-op to declare a library function name external. The name of the
library function is given by @var{symref}, which has type @code{rtx} and
is a @code{symbol_ref}.
This macro need not be defined if it does not need to output anything.
The GNU assembler and most Unix assemblers don't require anything.
@end defmac
library function is given by @var{symref}, which is a @code{symbol_ref}.
@end deftypefn
@defmac ASM_OUTPUT_LABELREF (@var{stream}, @var{name})
A C statement (sans semicolon) to output to the stdio stream

View file

@ -166,6 +166,10 @@ Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
#define TARGET_ASM_FILE_START_FILE_DIRECTIVE false
#endif
#ifndef TARGET_ASM_EXTERNAL_LIBCALL
#define TARGET_ASM_EXTERNAL_LIBCALL default_external_libcall
#endif
#define TARGET_ASM_ALIGNED_INT_OP \
{TARGET_ASM_ALIGNED_HI_OP, \
TARGET_ASM_ALIGNED_SI_OP, \
@ -202,7 +206,8 @@ Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
TARGET_ASM_OUTPUT_MI_THUNK, \
TARGET_ASM_CAN_OUTPUT_MI_THUNK, \
TARGET_ASM_FILE_START, \
TARGET_ASM_FILE_END}
TARGET_ASM_FILE_END, \
TARGET_ASM_EXTERNAL_LIBCALL}
/* Scheduler hooks. All of these default to null pointers, which
haifa-sched.c looks for and handles. */

View file

@ -148,6 +148,10 @@ struct gcc_target
/* Output any boilerplate text needed at the end of a
translation unit. */
void (*file_end) (void);
/* Output an assembler pseudo-op to declare a library function name
external. */
void (*external_libcall) (rtx);
} asm_out;
/* Functions relating to instruction scheduling. */

View file

@ -61,9 +61,16 @@ Software Foundation, 59 Temple Place - Suite 330, Boston, MA
#include "tm_p.h"
#include "target-def.h"
void
default_external_libcall (rtx fun ATTRIBUTE_UNUSED)
{
#ifdef ASM_OUTPUT_EXTERNAL_LIBCALL
ASM_OUTPUT_EXTERNAL_LIBCALL(asm_out_file, fun);
#endif
}
bool
default_promote_function_args (fntype)
tree fntype ATTRIBUTE_UNUSED;
default_promote_function_args (tree fntype ATTRIBUTE_UNUSED)
{
#ifdef PROMOTE_FUNCTION_ARGS
return true;
@ -73,8 +80,7 @@ default_promote_function_args (fntype)
}
bool
default_promote_function_return (fntype)
tree fntype ATTRIBUTE_UNUSED;
default_promote_function_return (tree fntype ATTRIBUTE_UNUSED)
{
#ifdef PROMOTE_FUNCTION_RETURN
return true;
@ -84,8 +90,7 @@ default_promote_function_return (fntype)
}
bool
default_promote_prototypes (fntype)
tree fntype ATTRIBUTE_UNUSED;
default_promote_prototypes (tree fntype ATTRIBUTE_UNUSED)
{
if (PROMOTE_PROTOTYPES)
return true;

View file

@ -18,6 +18,8 @@ along with GCC; see the file COPYING. If not, write to the Free
Software Foundation, 59 Temple Place - Suite 330, Boston, MA
02111-1307, USA. */
extern void default_external_libcall (rtx);
extern bool default_promote_function_args (tree);
extern bool default_promote_function_return (tree);
extern bool default_promote_prototypes (tree);

View file

@ -1621,16 +1621,14 @@ assemble_external (tree decl ATTRIBUTE_UNUSED)
/* Similar, for calling a library function FUN. */
void
assemble_external_libcall (rtx fun ATTRIBUTE_UNUSED)
assemble_external_libcall (rtx fun)
{
#ifdef ASM_OUTPUT_EXTERNAL_LIBCALL
/* Declare library function name external when first used, if nec. */
if (! SYMBOL_REF_USED (fun))
{
SYMBOL_REF_USED (fun) = 1;
ASM_OUTPUT_EXTERNAL_LIBCALL (asm_out_file, fun);
(*targetm.asm_out.external_libcall) (fun);
}
#endif
}
/* Assemble a label named NAME. */