diff options
author | ro <ro@138bc75d-0d04-0410-961f-82ee72b054a4> | 2003-09-23 19:17:49 +0000 |
---|---|---|
committer | ro <ro@138bc75d-0d04-0410-961f-82ee72b054a4> | 2003-09-23 19:17:49 +0000 |
commit | 864af2096282bb2fa49507287362ec575701fe2e (patch) | |
tree | 715dfc6d43d67f4a0e0c332509b5531869b36669 /gcc | |
parent | d6541b10200ae57ba3dedeb4dad0868f846b0a6e (diff) | |
download | gcc-864af2096282bb2fa49507287362ec575701fe2e.tar.gz |
* 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.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@71689 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 23 | ||||
-rw-r--r-- | gcc/config/mips/iris5.h | 4 | ||||
-rw-r--r-- | gcc/config/mips/iris6.h | 1 | ||||
-rw-r--r-- | gcc/config/mips/mips-protos.h | 6 | ||||
-rw-r--r-- | gcc/config/mips/mips.c | 21 | ||||
-rw-r--r-- | gcc/doc/tm.texi | 12 | ||||
-rw-r--r-- | gcc/target-def.h | 7 | ||||
-rw-r--r-- | gcc/target.h | 4 | ||||
-rw-r--r-- | gcc/targhooks.c | 17 | ||||
-rw-r--r-- | gcc/targhooks.h | 2 | ||||
-rw-r--r-- | gcc/varasm.c | 6 |
11 files changed, 68 insertions, 35 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index bb152c8a997..6790ecc0de9 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -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 diff --git a/gcc/config/mips/iris5.h b/gcc/config/mips/iris5.h index 51f80dcac87..00802c2e39a 100644 --- a/gcc/config/mips/iris5.h +++ b/gcc/config/mips/iris5.h @@ -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. */ diff --git a/gcc/config/mips/iris6.h b/gcc/config/mips/iris6.h index cf68b418c3d..5ba1e120b72 100644 --- a/gcc/config/mips/iris6.h +++ b/gcc/config/mips/iris6.h @@ -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. */ diff --git a/gcc/config/mips/mips-protos.h b/gcc/config/mips/mips-protos.h index 89a8cb2a420..27f3159d421 100644 --- a/gcc/config/mips/mips-protos.h +++ b/gcc/config/mips/mips-protos.h @@ -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); diff --git a/gcc/config/mips/mips.c b/gcc/config/mips/mips.c index 8bd2139d9ef..0f0a6803813 100644 --- a/gcc/config/mips/mips.c +++ b/gcc/config/mips/mips.c @@ -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 diff --git a/gcc/doc/tm.texi b/gcc/doc/tm.texi index ef49a688033..582953b7bb5 100644 --- a/gcc/doc/tm.texi +++ b/gcc/doc/tm.texi @@ -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 diff --git a/gcc/target-def.h b/gcc/target-def.h index da6003eff5c..aa2d96a5904 100644 --- a/gcc/target-def.h +++ b/gcc/target-def.h @@ -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. */ diff --git a/gcc/target.h b/gcc/target.h index 3a7ea78af38..7ccca94150b 100644 --- a/gcc/target.h +++ b/gcc/target.h @@ -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. */ diff --git a/gcc/targhooks.c b/gcc/targhooks.c index 97d0642540b..b1955690818 100644 --- a/gcc/targhooks.c +++ b/gcc/targhooks.c @@ -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; diff --git a/gcc/targhooks.h b/gcc/targhooks.h index 335134b81b1..0d7b276a9a4 100644 --- a/gcc/targhooks.h +++ b/gcc/targhooks.h @@ -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); diff --git a/gcc/varasm.c b/gcc/varasm.c index d0bdbc15bdc..059ba5027aa 100644 --- a/gcc/varasm.c +++ b/gcc/varasm.c @@ -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. */ |