target.h (struct gcc_target): New fields init_builtins and expand_builtin.
authorStan Shebs <shebs@apple.com>
Tue, 10 Jul 2001 06:18:36 +0000 (06:18 +0000)
committerStan Shebs <shebs@gcc.gnu.org>
Tue, 10 Jul 2001 06:18:36 +0000 (06:18 +0000)
* target.h (struct gcc_target): New fields init_builtins and
expand_builtin.
* target-def.h (TARGET_INIT_BUILTINS): New macro.
(TARGET_EXPAND_BUILTIN): New macro.
(TARGET_INITIALIZER): Add them.
* builtins.c: Include target.h.
(expand_builtin): Use targetm.expand_builtin.
(default_init_builtins): New function.
(default_expand_builtin): New function.
* expr.h (default_init_builtins): Declare.
(default_expand_builtin): Declare.
* c-common.c (c_common_nodes_and_builtins): Use
targetm.init_builtins.
* defaults.h (MD_INIT_BUILTINS): Remove.
* Makefile.in (builtins.o): Depend on target.h.

* config/arm/arm.c (TARGET_INIT_BUILTINS): Define.
(TARGET_EXPAND_BUILTIN): Define.
* config/arm/arm.h (MD_INIT_BUILTINS): Remove.
(MD_EXPAND_BUILTIN): Remove.

* config/c4x/c4x.c (TARGET_INIT_BUILTINS): Define.
(TARGET_EXPAND_BUILTIN): Define.
(c4x_init_builtins): Make endlink arg a local.
(c4x_print_operand): Fix typos in adjust_address usages.
* config/c4x/c4x-protos.h (c4x_init_builtins): Update decl.
* config/c4x/c4x.h (MD_INIT_BUILTINS): Remove.
(MD_EXPAND_BUILTIN): Remove.

* config/i386/i386.c (TARGET_INIT_BUILTINS): Define.
(TARGET_EXPAND_BUILTIN): Define.
(ix86_init_mmx_sse_builtins): New function, was ix86_init_builtins.
(ix86_init_builtins): Call new function only if TARGET_MMX.
* config/i386/i386-protos.h (ix86_init_mmx_sse_builtins): Declare.
* config/i386/i386.h (MD_INIT_BUILTINS): Remove.
(MD_EXPAND_BUILTIN): Remove.

* config/ia64/ia64.c (TARGET_INIT_BUILTINS): Define.
(TARGET_EXPAND_BUILTIN): Define.
* config/ia64/ia64.h (MD_INIT_BUILTINS): Remove.
(MD_EXPAND_BUILTIN): Remove.

* doc/tm.texi: Document these changes.

From-SVN: r43888

19 files changed:
gcc/ChangeLog
gcc/Makefile.in
gcc/builtins.c
gcc/c-common.c
gcc/config/arm/arm.c
gcc/config/arm/arm.h
gcc/config/c4x/c4x-protos.h
gcc/config/c4x/c4x.c
gcc/config/c4x/c4x.h
gcc/config/i386/i386-protos.h
gcc/config/i386/i386.c
gcc/config/i386/i386.h
gcc/config/ia64/ia64.c
gcc/config/ia64/ia64.h
gcc/defaults.h
gcc/doc/tm.texi
gcc/expr.h
gcc/target-def.h
gcc/target.h

index abf5bd463976bf117d016ffd022c80646cd601fa..bd62dc46827620dbe39ed96a38c0fd262bb8dd7a 100644 (file)
@@ -1,3 +1,49 @@
+2001-07-09  Stan Shebs  <shebs@apple.com>
+
+       * target.h (struct gcc_target): New fields init_builtins and
+       expand_builtin.
+       * target-def.h (TARGET_INIT_BUILTINS): New macro.
+       (TARGET_EXPAND_BUILTIN): New macro.
+       (TARGET_INITIALIZER): Add them.
+       * builtins.c: Include target.h.
+       (expand_builtin): Use targetm.expand_builtin.
+       (default_init_builtins): New function.
+       (default_expand_builtin): New function.
+       * expr.h (default_init_builtins): Declare.
+       (default_expand_builtin): Declare.
+       * c-common.c (c_common_nodes_and_builtins): Use
+       targetm.init_builtins.
+       * defaults.h (MD_INIT_BUILTINS): Remove.
+       * Makefile.in (builtins.o): Depend on target.h.
+
+       * config/arm/arm.c (TARGET_INIT_BUILTINS): Define.
+       (TARGET_EXPAND_BUILTIN): Define.
+       * config/arm/arm.h (MD_INIT_BUILTINS): Remove.
+       (MD_EXPAND_BUILTIN): Remove.
+
+       * config/c4x/c4x.c (TARGET_INIT_BUILTINS): Define.
+       (TARGET_EXPAND_BUILTIN): Define.
+       (c4x_init_builtins): Make endlink arg a local.
+       (c4x_print_operand): Fix typos in adjust_address usages.
+       * config/c4x/c4x-protos.h (c4x_init_builtins): Update decl.
+       * config/c4x/c4x.h (MD_INIT_BUILTINS): Remove.
+       (MD_EXPAND_BUILTIN): Remove.
+
+       * config/i386/i386.c (TARGET_INIT_BUILTINS): Define.
+       (TARGET_EXPAND_BUILTIN): Define.
+       (ix86_init_mmx_sse_builtins): New function, was ix86_init_builtins.
+       (ix86_init_builtins): Call new function only if TARGET_MMX.
+       * config/i386/i386-protos.h (ix86_init_mmx_sse_builtins): Declare.
+       * config/i386/i386.h (MD_INIT_BUILTINS): Remove.
+       (MD_EXPAND_BUILTIN): Remove.
+
+       * config/ia64/ia64.c (TARGET_INIT_BUILTINS): Define.
+       (TARGET_EXPAND_BUILTIN): Define.
+       * config/ia64/ia64.h (MD_INIT_BUILTINS): Remove.
+       (MD_EXPAND_BUILTIN): Remove.
+
+       * doc/tm.texi: Document these changes.
+
 2001-07-09  Diego Novillo  <dnovillo@redhat.com>
 
        * basic-block.h (tree_node): Forward declare if needed.
index a2ef4e77214705f5edbefc334ce46ded6283df68..8d2fb1c51c2efd872b520c8ff6255967eb749276 100644 (file)
@@ -1377,7 +1377,7 @@ expr.o : expr.c $(CONFIG_H) $(SYSTEM_H) $(RTL_H) $(TREE_H) flags.h function.h \
    output.h typeclass.h hard-reg-set.h toplev.h hard-reg-set.h except.h \
    reload.h $(GGC_H) intl.h $(TM_P_H)
 builtins.o : builtins.c $(CONFIG_H) $(SYSTEM_H) $(RTL_H) $(TREE_H) flags.h \
-   function.h $(REGS_H) $(EXPR_H) insn-config.h \
+   $(TARGET_H) function.h $(REGS_H) $(EXPR_H) insn-config.h \
    $(RECOG_H) output.h typeclass.h hard-reg-set.h toplev.h hard-reg-set.h \
    except.h $(TM_P_H) $(PREDICT_H)
 calls.o : calls.c $(CONFIG_H) $(SYSTEM_H) $(RTL_H) $(TREE_H) flags.h $(EXPR_H) \
index f6f76baba15a6ca65df0e1fb7bb05ca68e0b3ab7..0c84715468024173cceefc907c97e2d8a435dd82 100644 (file)
@@ -38,6 +38,7 @@ Boston, MA 02111-1307, USA.  */
 #include "toplev.h"
 #include "predict.h"
 #include "tm_p.h"
+#include "target.h"
 
 #define CALLED_AS_BUILT_IN(NODE) \
    (!strncmp (IDENTIFIER_POINTER (DECL_NAME (NODE)), "__builtin_", 10))
@@ -3401,10 +3402,8 @@ expand_builtin (exp, target, subtarget, mode, ignore)
   tree arglist = TREE_OPERAND (exp, 1);
   enum built_in_function fcode = DECL_FUNCTION_CODE (fndecl);
 
-#ifdef MD_EXPAND_BUILTIN
   if (DECL_BUILT_IN_CLASS (fndecl) == BUILT_IN_MD)
-    return MD_EXPAND_BUILTIN (exp, target, subtarget, mode, ignore);
-#endif
+    return (*targetm.expand_builtin) (exp, target, subtarget, mode, ignore);
   
   /* When not optimizing, generate calls to library functions for a certain
      set of builtins.  */
@@ -3897,3 +3896,23 @@ validate_arglist VPARAMS ((tree arglist, ...))
     arglist = TREE_CHAIN (arglist);
   } while (1);
 }
+
+/* Default version of target-specific builtin setup that does nothing.  */
+
+void
+default_init_builtins ()
+{
+}
+
+/* Default target-specific builtin expander that does nothing.  */
+
+rtx
+default_expand_builtin (exp, target, subtarget, mode, ignore)
+     tree exp ATTRIBUTE_UNUSED;
+     rtx target ATTRIBUTE_UNUSED;
+     rtx subtarget ATTRIBUTE_UNUSED;
+     enum machine_mode mode ATTRIBUTE_UNUSED;
+     int ignore ATTRIBUTE_UNUSED;
+{
+  return NULL_RTX;
+}
index f1ee8b129b7abc0e1d904a186a4fa01a4702f384..0213843be9ed7c0f5385dd5e92298b355796d9be 100644 (file)
@@ -3009,7 +3009,7 @@ c_common_nodes_and_builtins ()
                                 c_language != clk_cplusplus)
                               ? const_string_type_node : const_ptr_type_node);
 
-  MD_INIT_BUILTINS;
+  (*targetm.init_builtins) ();
 
   /* This is special for C++ so functions can be overloaded.  */
   wchar_type_node = get_identifier (flag_short_wchar
index 48f0c5fb33db22c1ddbbc552182d21881287893f..35c520c31ec5944e72d6246357518d45fef584e7 100644 (file)
@@ -148,6 +148,12 @@ static void         arm_set_default_type_attributes        PARAMS ((tree));
 #undef TARGET_SET_DEFAULT_TYPE_ATTRIBUTES
 #define TARGET_SET_DEFAULT_TYPE_ATTRIBUTES arm_set_default_type_attributes
 
+#undef TARGET_INIT_BUILTINS
+#define TARGET_INIT_BUILTINS arm_init_builtins
+
+#undef TARGET_EXPAND_BUILTIN
+#define TARGET_EXPAND_BUILTIN arm_expand_builtin
+
 struct gcc_target targetm = TARGET_INITIALIZER;
 \f
 /* Obstack for minipool constant handling.  */
index 59884cdf3908c059d8286318424dece4691a3670..143e1d4614b40b7771e6da407c8178b1a7b14667 100644 (file)
@@ -2954,14 +2954,4 @@ enum arm_builtins
   ARM_BUILTIN_PREFETCH,
   ARM_BUILTIN_MAX
 };
-
-#define MD_INIT_BUILTINS       \
-  do                           \
-    {                          \
-      arm_init_builtins ();    \
-    }                          \
-  while (0)
-
-#define MD_EXPAND_BUILTIN(EXP, TARGET, SUBTARGET, MODE, IGNORE) \
-    arm_expand_builtin ((EXP), (TARGET), (SUBTARGET), (MODE), (IGNORE))
 #endif /* ! GCC_ARM_H */
index 44f47b657377c668f9b8908b6f207a3092b62d50..99ce1cc5470a930579408a68424e5616bcdc9f00 100644 (file)
@@ -69,10 +69,10 @@ extern void c4x_va_start PARAMS ((int, tree, rtx));
 
 extern struct rtx_def *c4x_va_arg PARAMS ((tree, tree));
 
-extern rtx c4x_expand_builtin PARAMS((tree, rtx, rtx,
-                                     enum machine_mode, int));
+extern rtx c4x_expand_builtin PARAMS ((tree, rtx, rtx,
+                                      enum machine_mode, int));
 
-extern void c4x_init_builtins PARAMS((tree));
+extern void c4x_init_builtins PARAMS ((void));
 
 #endif /* TREE_CODE and RTX_CODE*/
 
index c0500bef2f43d938e7d2d50e9feb547fd60577ef..02a3dcd22a7226eb629100b0d68ea5f07c6408ca 100644 (file)
@@ -199,6 +199,12 @@ static void c4x_insert_attributes PARAMS ((tree, tree *));
 #undef TARGET_INSERT_ATTRIBUTES
 #define TARGET_INSERT_ATTRIBUTES c4x_insert_attributes
 
+#undef TARGET_INIT_BUILTINS
+#define TARGET_INIT_BUILTINS c4x_init_builtins
+
+#undef TARGET_EXPAND_BUILTIN
+#define TARGET_EXPAND_BUILTIN c4x_expand_builtin
+
 struct gcc_target targetm = TARGET_INITIALIZER;
 \f
 /* Called to register all of our global variables with the garbage
@@ -1925,7 +1931,7 @@ c4x_print_operand (file, op, letter)
           if (GET_CODE(op1) == CONST_INT || GET_CODE(op1) == SYMBOL_REF)
            {
              asm_fprintf (file, "\t%s\t@", TARGET_C3X ? "ldp" : "ldpk");
-             output_address (XEXP (adjust_address (op, VOIDmodem, 1), 0));
+             output_address (XEXP (adjust_address (op, VOIDmode, 1), 0));
              asm_fprintf (file, "\n");
            }
        }
@@ -1947,7 +1953,7 @@ c4x_print_operand (file, op, letter)
       if (code == MEM && c4x_autoinc_operand (op, Pmode))
        break;
       else if (code == MEM)
-       output_address (XEXP (adjust_address (op, 1), VOIDmode, 0));
+       output_address (XEXP (adjust_address (op, VOIDmode, 1), 0));
       else if (code == REG)
        fprintf (file, "%s", reg_names[REGNO (op) + 1]);
       else
@@ -5037,9 +5043,10 @@ c4x_adjust_cost (insn, link, dep_insn, cost)
 }
 
 void
-c4x_init_builtins (endlink)
-     tree endlink;
+c4x_init_builtins ()
 {
+  tree endlink = void_list_node;
+
   builtin_function ("fast_ftoi",
                    build_function_type 
                    (integer_type_node,
index c515337aa3d9df4c808bdee05f38317b3daccb88..102346f6a04352e4dbee2eb1336c1ab2b88d0c54 100644 (file)
@@ -2744,10 +2744,3 @@ enum c4x_builtins
   C4X_BUILTIN_FRIEEE,  /*      frieee     (only C4x)   */
   C4X_BUILTIN_RCPF     /*      fast_invf  (only C4x)   */
 };
-
-#define MD_INIT_BUILTINS do { \
-    c4x_init_builtins (void_list_node); \
-  } while (0)
-
-#define MD_EXPAND_BUILTIN(EXP, TARGET, SUBTARGET, MODE, IGNORE) \
-    c4x_expand_builtin ((EXP), (TARGET), (SUBTARGET), (MODE), (IGNORE))
index 78fcf3b3a70df2b6fcb3c0ffd1f3c996921fb4e1..f98b95ba2fd6336c3c3627d8b0a484b2a458a06b 100644 (file)
@@ -163,6 +163,7 @@ extern rtx function_arg PARAMS ((CUMULATIVE_ARGS *, enum machine_mode, tree, int
 extern void function_arg_advance PARAMS ((CUMULATIVE_ARGS *, enum machine_mode,
                                        tree, int));
 extern void ix86_init_builtins PARAMS ((void));
+extern void ix86_init_mmx_sse_builtins PARAMS ((void));
 extern rtx ix86_expand_builtin PARAMS ((tree, rtx, rtx, enum machine_mode, int));
 #endif
 
index 45728491c2b873569a65b9a46e269a92deb27ea2..9b32180f22394882d98bf2437db778382d98a0c1 100644 (file)
@@ -624,6 +624,12 @@ static int ix86_comp_type_attributes PARAMS ((tree, tree));
 #undef TARGET_COMP_TYPE_ATTRIBUTES
 #define TARGET_COMP_TYPE_ATTRIBUTES ix86_comp_type_attributes
 
+#undef TARGET_INIT_BUILTINS
+#define TARGET_INIT_BUILTINS ix86_init_builtins
+
+#undef TARGET_EXPAND_BUILTIN
+#define TARGET_EXPAND_BUILTIN ix86_expand_builtin
+
 #if defined (OSF_OS) || defined (TARGET_OSF1ELF)
    static void ix86_osf_output_function_prologue PARAMS ((FILE *,
                                                          HOST_WIDE_INT));
@@ -9340,11 +9346,19 @@ static struct builtin_description bdesc_1arg[] =
 
 };
 
-/* Expand all the target specific builtins.  This is not called if TARGET_MMX
+/* Set up all the target-specific builtins.  */
+void
+ix86_init_builtins ()
+{
+  if (TARGET_MMX)
+    ix86_init_mmx_sse_builtins ();
+}
+
+/* Set up all the MMX/SSE builtins.  This is not called if TARGET_MMX
    is zero.  Otherwise, if TARGET_SSE is not set, only expand the MMX
    builtins.  */
 void
-ix86_init_builtins ()
+ix86_init_mmx_sse_builtins ()
 {
   struct builtin_description * d;
   size_t i;
index ee5b615e59e72ec4ee3946d587e2c6707ecba738..5869602ef51e56fcc400d1ba2b0aa6eb556e35c6 100644 (file)
@@ -2176,21 +2176,6 @@ enum ix86_builtins
 
   IX86_BUILTIN_MAX
 };
-
-/* Initialize the target-specific builtin functions.  Only do something
-   if TARGET_MMX is nonzero; we take care in ix86_init_builtins not to
-   enable any SSE builtins if TARGET_SSE is zero.  */
-#define MD_INIT_BUILTINS       \
-  do                           \
-    {                          \
-      if (TARGET_MMX)          \
-       ix86_init_builtins ();  \
-    }                          \
-  while (0)
-
-/* Expand a target-specific builtin function.  */
-#define MD_EXPAND_BUILTIN(EXP, TARGET, SUBTARGET, MODE, IGNORE) \
-  ix86_expand_builtin (EXP, TARGET, SUBTARGET, MODE, IGNORE)
 \f
 /* Define this macro if references to a symbol must be treated
    differently depending on something about the variable or
index a09a7b7b471f1fb6d591685cd1ceb28d37dbe67b..394c910e9cff4236b503f228c4a22e20c1f7a576 100644 (file)
@@ -145,6 +145,12 @@ static void ia64_output_function_end_prologue PARAMS ((FILE *));
 #undef TARGET_VALID_TYPE_ATTRIBUTE
 #define TARGET_VALID_TYPE_ATTRIBUTE ia64_valid_type_attribute
 
+#undef TARGET_INIT_BUILTINS
+#define TARGET_INIT_BUILTINS ia64_init_builtins
+
+#undef TARGET_EXPAND_BUILTIN
+#define TARGET_EXPAND_BUILTIN ia64_expand_builtin
+
 #undef TARGET_ASM_FUNCTION_PROLOGUE
 #define TARGET_ASM_FUNCTION_PROLOGUE ia64_output_function_prologue
 #undef TARGET_ASM_FUNCTION_END_PROLOGUE
index e22aff3006aff99d66788dae9f766837e8315d38..218b9a017de1adbf8799a3d1520047bb7cdcd7b9 100644 (file)
@@ -2859,11 +2859,4 @@ enum fetchop_code {
   IA64_ADD_OP, IA64_SUB_OP, IA64_OR_OP, IA64_AND_OP, IA64_XOR_OP, IA64_NAND_OP
 };
 
-#define MD_INIT_BUILTINS do { \
-    ia64_init_builtins (); \
-  } while (0)
-
-#define MD_EXPAND_BUILTIN(EXP, TARGET, SUBTARGET, MODE, IGNORE) \
-    ia64_expand_builtin ((EXP), (TARGET), (SUBTARGET), (MODE), (IGNORE))
-
 /* End of ia64.h */
index c22f9cd997f34125f510b1dac3d9802537ec4708..a1001b992591a8514dacd0c48a6eb6abd8b0d3fe 100644 (file)
@@ -364,12 +364,4 @@ do {                                                               \
 #define TARGET_ALLOWS_PROFILING_WITHOUT_FRAME_POINTER true
 #endif
 
-/* Define this macro if you have any machine-specific builtin
-   functions that need to be defined.  It should be a C expression
-   that performs the necessary setup. */
-
-#ifndef MD_INIT_BUILTINS
-#define MD_INIT_BUILTINS
-#endif
-
 #endif  /* ! GCC_DEFAULTS_H */
index 665ce356a28a993de79b6e70db3175cba0240faa..a06e47cd64456e2da80f20b0762509a1023dacd7 100644 (file)
@@ -8663,10 +8663,9 @@ A C expression to cancel any machine dependent modifications in
 converting code to conditional execution in the basic blocks
 @code{TEST_BB}, @code{THEN_BB}, @code{ELSE_BB}, and @code{JOIN_BB}.
 
-@findex MD_INIT_BUILTINS
-@item MD_INIT_BUILTINS
-Define this macro if you have any machine-specific built-in functions that
-need to be defined.  It should be a C expression that performs the
+@deftypefn {Target Hook} void TARGET_INIT_BUILTINS ()
+Define this hook if you have any machine-specific built-in functions
+that need to be defined.  It should be a function that performs the
 necessary setup.
 
 Machine specific built-in functions can be useful to expand special machine
@@ -8678,17 +8677,17 @@ To create a built-in function, call the function @code{builtin_function}
 which is defined by the language front end.  You can use any type nodes set
 up by @code{build_common_tree_nodes} and @code{build_common_tree_nodes_2};
 only language front ends that use these two functions will use
-@samp{MD_INIT_BUILTINS}.
+@samp{TARGET_INIT_BUILTINS}.
 
-@findex MD_EXPAND_BUILTIN
-@item MD_EXPAND_BUILTIN(@var{exp}, @var{target}, @var{subtarget}, @var{mode}, @var{ignore})
+@deftypefn {Target Hook} rtx TARGET_EXPAND_BUILTIN (tree @var{exp}, rtx @var{target}, rtx @var{subtarget}, enum machine_mode @var{mode}, int @var{ignore})
 
 Expand a call to a machine specific built-in function that was set up by
-@samp{MD_INIT_BUILTINS}.  @var{exp} is the expression for the function call;
-the result should go to @var{target} if that is convenient, and have mode
-@var{mode} if that is convenient.  @var{subtarget} may be used as the target
-for computing one of @var{exp}'s operands.  @var{ignore} is nonzero if the value
-is to be ignored.
-This macro should return the result of the call to the built-in function.
+@samp{TARGET_INIT_BUILTINS}.  @var{exp} is the expression for the
+function call; the result should go to @var{target} if that is
+convenient, and have mode @var{mode} if that is convenient.
+@var{subtarget} may be used as the target for computing one of
+@var{exp}'s operands.  @var{ignore} is nonzero if the value is to be
+ignored.  This function should return the result of the call to the
+built-in function.
 
 @end table
index cf2cb268ef350f8cc418d45573cc7fa798f4cebb..f43b08ca291f7c6631066493dff7e6778782a903 100644 (file)
@@ -907,6 +907,9 @@ extern rtx expand_builtin PARAMS ((tree, rtx, rtx, enum machine_mode, int));
 extern void std_expand_builtin_va_start PARAMS ((int, tree, rtx));
 extern rtx std_expand_builtin_va_arg PARAMS ((tree, tree));
 extern rtx expand_builtin_va_arg PARAMS ((tree, tree));
+extern void default_init_builtins PARAMS ((void));
+extern rtx default_expand_builtin PARAMS ((tree, rtx, rtx,
+                                          enum machine_mode, int));
 #endif
 
 extern void expand_builtin_setjmp_setup PARAMS ((rtx, rtx));
index ca24c5f8753c58c8265fd60deff7f4f8037f3d8f..264d22bda1af59fb2ad96c0eb719cbba365b86f0 100644 (file)
@@ -49,6 +49,10 @@ Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
 #define TARGET_SET_DEFAULT_TYPE_ATTRIBUTES default_set_default_type_attributes
 #define TARGET_INSERT_ATTRIBUTES default_insert_attributes
 
+/* In builtins.c.  */
+#define TARGET_INIT_BUILTINS default_init_builtins
+#define TARGET_EXPAND_BUILTIN default_expand_builtin
+
 /* The whole shebang.  */
 #define TARGET_INITIALIZER                     \
 {                                              \
@@ -59,5 +63,7 @@ Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
   TARGET_VALID_TYPE_ATTRIBUTE,                 \
   TARGET_COMP_TYPE_ATTRIBUTES,                 \
   TARGET_SET_DEFAULT_TYPE_ATTRIBUTES,          \
-  TARGET_INSERT_ATTRIBUTES                     \
+  TARGET_INSERT_ATTRIBUTES,                    \
+  TARGET_INIT_BUILTINS,                                \
+  TARGET_EXPAND_BUILTIN                                \
 }
index 126147d46b1448f68f2815e5fb97ecbbda45d2fd..fdd0bb16aaa5ff8496c0125727690745328fca3e 100644 (file)
@@ -44,6 +44,9 @@ Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
    to gradually reduce the amount of conditional compilation that is
    scattered throughout GCC.  */
 
+/* Forward declaration for the benefit of prototypes.  */
+struct rtx_def;
+
 struct gcc_target
 {
   /* Functions that output assembler for the target.  */
@@ -93,6 +96,16 @@ struct gcc_target
 
   /* Insert attributes on the newly created DECL.  */
   void (* insert_attributes) PARAMS ((tree decl, tree *attributes));
+
+  /* Set up target-specific built-in functions.  */
+  void (* init_builtins) PARAMS ((void));
+
+  /* Expand a target-specific builtin.  */
+  struct rtx_def * (* expand_builtin) PARAMS ((tree exp,
+                                              struct rtx_def *target,
+                                              struct rtx_def *subtarget,
+                                              enum machine_mode mode,
+                                              int ignore));
 };
 
 extern struct gcc_target targetm;