OSDN Git Service

2010-04-08 Christian Borntraeger <borntraeger@de.ibm.com>
[pf3gnuchains/gcc-fork.git] / gcc / target.h
index a243bcd..e4e82a3 100644 (file)
@@ -1,5 +1,5 @@
 /* Data structure definitions for a generic GCC target.
-   Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009
+   Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010
    Free Software Foundation, Inc.
 
    This program is free software; you can redistribute it and/or modify it
@@ -97,6 +97,9 @@ struct _dep;
 /* This is defined in ddg.h .  */
 struct ddg;
 
+/* This is defined in cfgloop.h .  */
+struct loop;
+
 /* Assembler instructions for creating various kinds of integer object.  */
 
 struct asm_int_op
@@ -235,6 +238,10 @@ struct gcc_target
        translation unit.  */
     void (*file_end) (void);
 
+    /* Output any boilerplace text needed at the end of a
+       translation unit before debug and unwind info is emitted.  */
+    void (*code_end) (void);
+
     /* Output an assembler pseudo-op to declare a library function name
        external.  */
     void (*external_libcall) (rtx);
@@ -467,14 +474,14 @@ struct gcc_target
 
     /* Returns a code for builtin that realizes vectorized version of
        function, or NULL_TREE if not available.  */
-    tree (* builtin_vectorized_function) (unsigned, tree, tree);
+    tree (* builtin_vectorized_function) (tree, tree, tree);
 
     /* Returns a code for builtin that realizes vectorized version of
        conversion, or NULL_TREE if not available.  */
     tree (* builtin_conversion) (unsigned, tree);
 
     /* Target builtin that implements vector widening multiplication.
-       builtin_mul_widen_eve computes the element-by-element products 
+       builtin_mul_widen_eve computes the element-by-element products
        for the even elements, and builtin_mul_widen_odd computes the
        element-by-element products for the odd elements.  */
     tree (* builtin_mul_widen_even) (tree);
@@ -490,16 +497,25 @@ struct gcc_target
 
     /* Target builtin that implements vector permute.  */
     tree (* builtin_vec_perm) (tree, tree*);
+
+    /* Return true if a vector created for builtin_vec_perm is valid.  */
+    bool (* builtin_vec_perm_ok) (tree, tree);
+
     /* Return true if the target supports misaligned store/load of a
        specific factor denoted in the third parameter.  The last parameter
        is true if the access is defined in a packed struct.  */
-    bool (* builtin_support_vector_misalignment) (enum machine_mode, 
+    bool (* builtin_support_vector_misalignment) (enum machine_mode,
                                                   const_tree, int, bool);
   } vectorize;
 
   /* The initial value of target_flags.  */
   int default_target_flags;
 
+  /* Allow target specific overriding of option settings after options have
+     been changed by an attribute or pragma or when it is reset at the
+     end of the code affected by an attribute or pragma.  */
+  void (* override_options_after_change) (void);
+
   /* Handle target switch CODE (an OPT_* value).  ARG is the argument
      passed to the switch; it is NULL if no argument was.  VALUE is the
      value of ARG if CODE specifies a UInteger option, otherwise it is
@@ -621,6 +637,12 @@ struct gcc_target
      already been generated.  */
   bool (* branch_target_register_callee_saved) (bool after_pe_gen);
 
+  /* Return true if the target supports conditional execution.  */
+  bool (* have_conditional_execution) (void);
+
+  /* Return a new value for loop unroll size.  */
+  unsigned (* loop_unroll_adjust) (unsigned nunroll, struct loop *loop);
+
   /* True if the constant X cannot be placed in the constant pool.  */
   bool (* cannot_force_const_mem) (rtx);
 
@@ -965,7 +987,7 @@ struct gcc_target
        then it should be for the callee; otherwise for the caller.  */
     rtx (*static_chain) (const_tree fndecl, bool incoming_p);
 
-    /* Fill in the trampoline at MEM with a call to FNDECL and a 
+    /* Fill in the trampoline at MEM with a call to FNDECL and a
        static chain value of CHAIN.  */
     void (*trampoline_init) (rtx mem, tree fndecl, rtx chain);
 
@@ -1009,7 +1031,7 @@ struct gcc_target
   /* Return the class for a secondary reload, and fill in extra information.  */
   enum reg_class (*secondary_reload) (bool, rtx, enum reg_class,
                                      enum machine_mode,
-                                     struct secondary_reload_info *);
+                                     secondary_reload_info *);
 
   /* This target hook allows the backend to perform additional
      processing while initializing for variable expansion.  */
@@ -1027,7 +1049,7 @@ struct gcc_target
   /* Return the smallest number of different values for which it is best to
      use a jump-table instead of a tree of conditional branches.  */
   unsigned int (* case_values_threshold) (void);
-  
+
   /* Retutn true if a function must have and use a frame pointer.  */
   bool (* frame_pointer_required) (void);
 
@@ -1107,7 +1129,7 @@ struct gcc_target
     /* Prefixes for proxy variable and template.  */
     const char *var_prefix;
     const char *tmpl_prefix;
-    
+
     /* Function to generate field definitions of the proxy variable.  */
     tree (*var_fields) (tree, tree *);
 
@@ -1120,7 +1142,7 @@ struct gcc_target
 
     /* Whether we can emit debug information for TLS vars.  */
     bool debug_form_tls_address;
-  } emutls;  
+  } emutls;
 
   struct target_option_hooks {
     /* Function to validate the attribute((option(...))) strings or NULL.  If
@@ -1152,8 +1174,8 @@ struct gcc_target
 
   /* For targets that need to mark extra registers as live on entry to
      the function, they should define this target hook and set their
-     bits in the bitmap passed in. */  
-  void (*live_on_entry) (bitmap); 
+     bits in the bitmap passed in. */
+  void (*live_on_entry) (bitmap);
 
   /* True if unwinding tables should be generated by default.  */
   bool unwind_tables_default;