OSDN Git Service

* gcc.c-torture/execute/ieee/ieee.exp: Change sh-*-* to sh*-*-*.
[pf3gnuchains/gcc-fork.git] / gcc / target.h
index bc839c5..f7eca62 100644 (file)
@@ -44,9 +44,6 @@ 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.  */
@@ -72,29 +69,60 @@ struct gcc_target
     void (* named_section) PARAMS ((const char *, unsigned int));
 
     /* Output a constructor for a symbol with a given priority.  */
-    void (* constructor) PARAMS ((struct rtx_def *, int));
+    void (* constructor) PARAMS ((rtx, int));
 
     /* Output a destructor for a symbol with a given priority.  */
-    void (* destructor) PARAMS ((struct rtx_def *, int));
+    void (* destructor) PARAMS ((rtx, int));
   } asm_out;
 
+  /* Functions relating to instruction scheduling.  */
+  struct sched
+  {
+    /* Given the current cost, COST, of an insn, INSN, calculate and
+       return a new cost based on its relationship to DEP_INSN through
+       the dependence LINK.  The default is to make no adjustment.  */
+    int (* adjust_cost) PARAMS ((rtx insn, rtx link, rtx def_insn, int cost));
+
+    /* Adjust the priority of an insn as you see fit.  Returns the new
+       priority.  */
+    int (* adjust_priority) PARAMS ((rtx, int));
+
+    /* Function which returns the maximum number of insns that can be
+       scheduled in the same machine cycle.  This must be constant
+       over an entire compilation.  The default is 1.  */
+    int (* issue_rate) PARAMS ((void));
+
+    /* Calculate how much this insn affects how many more insns we
+       can emit this cycle.  Default is they all cost the same.  */
+    int (* variable_issue) PARAMS ((FILE *, int, rtx, int));
+    
+    /* Initialize machine-dependent scheduling code.  */
+    void (* md_init) PARAMS ((FILE *, int, int));
+
+    /* Finalize machine-dependent scheduling code.  */
+    void (* md_finish) PARAMS ((FILE *, int));
+
+    /* Reorder insns in a machine-dependent fashion, in two different
+       places.  Default does nothing.  */
+    int (* reorder)  PARAMS ((FILE *, int, rtx *, int *, int));
+    int (* reorder2) PARAMS ((FILE *, int, rtx *, int *, int));
+
+    /* cycle_display is a pointer to a function which can emit
+       data into the assembly stream about the current cycle.
+       Arguments are CLOCK, the data to emit, and LAST, the last
+       insn in the new chain we're building.  Returns a new LAST.
+       The default is to do nothing.  */
+    rtx (* cycle_display) PARAMS ((int clock, rtx last));
+  } sched;
+
   /* Given two decls, merge their attributes and return the result.  */
   tree (* merge_decl_attributes) PARAMS ((tree, tree));
 
   /* Given two types, merge their attributes and return the result.  */
   tree (* merge_type_attributes) PARAMS ((tree, tree));
 
-  /* Return nonzero if IDENTIFIER with arguments ARGS is a valid machine
-     specific attribute for DECL.  The attributes in ATTRIBUTES have
-     previously been assigned to DECL.  */
-  int (* valid_decl_attribute) PARAMS ((tree decl, tree attributes,
-                                       tree identifier, tree args));
-
-  /* Return nonzero if IDENTIFIER with arguments ARGS is a valid machine
-     specific attribute for TYPE.  The attributes in ATTRIBUTES have
-     previously been assigned to TYPE.  */
-  int (* valid_type_attribute) PARAMS ((tree type, tree attributes,
-                                       tree identifier, tree args));
+  /* Table of machine attributes and functions to handle them.  */
+  const struct attribute_spec *attribute_table;
 
   /* Return zero if the attributes on TYPE1 and TYPE2 are incompatible,
      one if they are compatible and two if they are nearly compatible
@@ -107,15 +135,16 @@ struct gcc_target
   /* Insert attributes on the newly created DECL.  */
   void (* insert_attributes) PARAMS ((tree decl, tree *attributes));
 
+  /* Return true if FNDECL (which has at least one machine attribute)
+     can be inlined despite its machine attributes, false otherwise.  */
+  bool (* function_attribute_inlinable_p) PARAMS ((tree fndecl));
+
   /* 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));
+  rtx (* expand_builtin) PARAMS ((tree exp, rtx target, rtx subtarget,
+                                 enum machine_mode mode, int ignore));
 
   /* Given a decl, a section name, and whether the decl initializer
      has relocs, choose attributes for the section.  */