OSDN Git Service

testsuite/24614
[pf3gnuchains/gcc-fork.git] / gcc / target.h
index 65e50ca..0f775f1 100644 (file)
@@ -393,6 +393,9 @@ struct gcc_target
   /* True if the insn X cannot be duplicated.  */
   bool (* cannot_copy_insn_p) (rtx);
 
+  /* True if X is considered to be commutative.  */
+  bool (* commutative_p) (rtx, int);
+
   /* Given an address RTX, undo the effects of LEGITIMIZE_ADDRESS.  */
   rtx (* delegitimize_address) (rtx);
 
@@ -446,6 +449,10 @@ struct gcc_target
      invalid addresses.  */
   int (* address_cost) (rtx x);
 
+  /* Return where to allocate pseudo for a given hard register initial
+     value.  */
+  rtx (* allocate_initial_value) (rtx x);
+
   /* Given a register, this hook should return a parallel of registers
      to represent where to find the register pieces.  Define this hook
      if the register and its mode are represented in Dwarf in
@@ -543,6 +550,11 @@ struct gcc_target
   /* Returns NULL if target supports the insn within a doloop block,
      otherwise it returns an error message.  */
   const char * (*invalid_within_doloop) (rtx);
+
+  /* DECL is a variable or function with __attribute__((dllimport))
+     specified.  Use this hook if the target needs to add extra validation
+     checks to  handle_dll_attribute ().  */
+  bool (* valid_dllimport_attribute_p) (tree decl);
     
   /* Functions relating to calls - argument passing, returns, etc.  */
   struct calls {
@@ -596,6 +608,15 @@ struct gcc_target
        is not allowed for this 'val' argument; NULL otherwise. */
     const char *(*invalid_arg_for_unprototyped_fn) (tree typelist, 
                                                    tree funcdecl, tree val);
+
+    /* Return an rtx for the return value location of the function
+       specified by FN_DECL_OR_TYPE with a return type of RET_TYPE.  */
+    rtx (*function_value) (tree ret_type, tree fn_decl_or_type,
+                          bool outgoing);
+
+    /* Return an rtx for the argument pointer incoming to the
+       current function.  */
+    rtx (*internal_arg_pointer) (void);
   } calls;
 
   /* Return the diagnostic message string if conversion from FROMTYPE
@@ -648,6 +669,11 @@ struct gcc_target
     /* Returns true if __aeabi_atexit should be used to register static
        destructors.  */
     bool (*use_aeabi_atexit) (void);
+    /* TYPE is a C++ class (i.e., RECORD_TYPE or UNION_TYPE) that
+       has just been defined.  Use this hook to make adjustments to the
+       class  (eg, tweak visibility or perform any other required
+       target modifications).  */  
+    void (*adjust_class_at_definition) (tree type);
   } cxx;
 
   /* True if unwinding tables should be generated by default.  */