target.h (struct gcc_target): New member external_libcall.
authorRainer Orth <ro@TechFak.Uni-Bielefeld.DE>
Tue, 23 Sep 2003 19:17:49 +0000 (19:17 +0000)
committerRainer Orth <ro@gcc.gnu.org>
Tue, 23 Sep 2003 19:17:49 +0000 (19:17 +0000)
* 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

gcc/ChangeLog
gcc/config/mips/iris5.h
gcc/config/mips/iris6.h
gcc/config/mips/mips-protos.h
gcc/config/mips/mips.c
gcc/doc/tm.texi
gcc/target-def.h
gcc/target.h
gcc/targhooks.c
gcc/targhooks.h
gcc/varasm.c

index bb152c8a99786ced4e439c9948f21f6d3c34eee2..6790ecc0de9eec2167c06ce2f88640ad96bd8ca1 100644 (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
index 51f80dcac8777112f64bb43ea4fac7334d1b1b7a..00802c2e39ab6ae6bf1a013d27bbd09679d1321f 100644 (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.  */
index cf68b418c3d24ac85d95e78f6a3f8d022920ba39..5ba1e120b7266c505df1d5055c7e1e8463710cfd 100644 (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.  */
index 89a8cb2a4208387e048ec14452fe0123bb8a88f2..27f3159d421e985f35b4260effa7de1f69171239 100644 (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);
index 8bd2139d9efbd54b0bf1928f95143272d044b1db..0f0a6803813694971acc9b319c6f8306f2cad2ec 100644 (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
 \f
index ef49a688033453a2127fb1db01db11feae4fdc2c..582953b7bb5a1ee1ffa455b3c92c50e2260da341 100644 (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
index da6003eff5c717f7d0024635faf5b757cbca39b0..aa2d96a59048e4d5e670e2bbb9e545bacd397d4c 100644 (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.  */
index 3a7ea78af38cd25729125c6cec48d7887b1c762b..7ccca94150b25c508cd05ec0b0d7acc3bc4d7203 100644 (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.  */
index 97d0642540be16f7dacd8b3a66f005ebafa87567..b1955690818ec187dd90ff038e979db7d0474090 100644 (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;
index 335134b81b18306b7658721110e2c1655fea67b7..0d7b276a9a417841c72ceee00d51bc78e3450a1a 100644 (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);
index d0bdbc15bdcf1f12ffd049cce50a09b1e586bda5..059ba5027aa12849867534de58c144057d6a8c07 100644 (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.  */