OSDN Git Service

* config/ia64/ia64.c (ia64_expand_call): Force function address
[pf3gnuchains/gcc-fork.git] / gcc / target.h
index 8acfb7a..8d77dfd 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.  */
@@ -247,6 +251,18 @@ struct gcc_target
        scheduling.  */
     void (* init_dfa_bubbles) (void);
     rtx (* dfa_bubble) (int);
+    /* The following member value is a pointer to a function called
+       by the insn scheduler.  It should return true if there exists a
+       dependence which is considered costly by the target, between 
+       the insn passed as the first parameter, and the insn passed as 
+       the second parameter.  The third parameter is the INSN_DEPEND 
+       link that represents the dependence between the two insns.  The
+       fourth argument is the cost of the dependence as estimated by
+       the scheduler.  The last argument is the distance in cycles 
+       between the already scheduled insn (first parameter) and the
+       the second insn (second parameter).
+    */
+    bool (* is_costly_dependence) PARAMS ((rtx, rtx, rtx, int, int));
   } sched;
 
   /* Given two decls, merge their attributes and return the result.  */
@@ -285,6 +301,9 @@ struct gcc_target
   rtx (* expand_builtin) (tree exp, rtx target, rtx subtarget,
                          enum machine_mode mode, int ignore);
 
+  /* Make any adjustments to libfunc names needed for this target.  */
+  void (* init_libfuncs) (void);
+
   /* Given a decl, a section name, and whether the decl initializer
      has relocs, choose attributes for the section.  */
   /* ??? Should be merged with SELECT_SECTION and UNIQUE_SECTION.  */
@@ -386,6 +405,23 @@ struct gcc_target
   /* True if output_file_directive should be called for main_input_filename
      at the beginning of assembly output.  */
   bool file_start_file_directive;
+
+  /* Functions relating to calls - argument passing, returns, etc.  */
+  struct calls {
+    bool (*promote_function_args) (tree fntype);
+    bool (*promote_function_return) (tree fntype);
+    bool (*promote_prototypes) (tree fntype);
+    rtx (*struct_value_rtx) (tree fndecl, int incoming);
+    bool (*return_in_memory) (tree type, tree fndecl);
+    rtx (*expand_builtin_saveregs) (void);
+    /* Returns pretend_argument_size.  */
+    void (*setup_incoming_varargs) (CUMULATIVE_ARGS *ca, enum machine_mode mode,
+                                   tree type, int *pretend_arg_size, int second_time);
+    bool (*strict_argument_naming) (CUMULATIVE_ARGS *ca);
+    /* Returns true if we should use SETUP_INCOMING_VARARGS and/or
+       STRICT_ARGUMENT_NAMING.  */
+    bool (*pretend_outgoing_varargs_named) (CUMULATIVE_ARGS *ca);
+  } calls;
 };
 
 extern struct gcc_target targetm;