X-Git-Url: http://git.sourceforge.jp/view?a=blobdiff_plain;ds=sidebyside;f=gcc%2Ftarget.h;h=be423b9194596de84548fd82363148536dbd5f66;hb=c445c8dabaa2550c4c9e2093e6bf438999d5b946;hp=6d62d5207e579cbeb20964d00e09183147b3a3dc;hpb=4bec06b342e6165f527b4d8b6e5c8645d3e12888;p=pf3gnuchains%2Fgcc-fork.git diff --git a/gcc/target.h b/gcc/target.h index 6d62d5207e5..be423b91945 100644 --- a/gcc/target.h +++ b/gcc/target.h @@ -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); + /* Returns a function declaration for a builtin that realizes the + vector conversion, or NULL_TREE if not available. */ + tree (* builtin_conversion) (unsigned, tree, 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,10 +497,14 @@ 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; @@ -538,6 +549,10 @@ struct gcc_target Ignored if NULL. */ const struct attribute_spec *attribute_table; + /* Return true iff attribute NAME expects a plain identifier as its first + argument. */ + bool (*attribute_takes_identifier_p) (const_tree name); + /* Return zero if the attributes on TYPE1 and TYPE2 are incompatible, one if they are compatible and two if they are nearly compatible (which causes a warning to be generated). */ @@ -629,6 +644,9 @@ struct gcc_target /* 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); @@ -637,6 +655,10 @@ struct gcc_target /* True if X is considered to be commutative. */ bool (* commutative_p) (const_rtx, int); + + /* True if ADDR is an address-expression whose effect depends + on the mode of the memory reference it is used in. */ + bool (* mode_dependent_address_p) (const_rtx addr); /* Given an invalid address X for a given machine mode, try machine-specific ways to make it legitimate. Return X or an invalid address on failure. */ @@ -748,6 +770,12 @@ struct gcc_target for further details. */ bool (* vector_mode_supported_p) (enum machine_mode mode); + /* True for MODE if the target expects that registers in this mode will + be allocated to registers in a small register class. The compiler is + allowed to use registers explicitly used in the rtl as spill registers + but it should prevent extending the lifetime of these registers. */ + bool (* small_register_classes_for_mode_p) (enum machine_mode mode); + /* Compute a (partial) cost for rtx X. Return true if the complete cost has been computed, and false if subexpressions should be scanned. In either case, *TOTAL contains the cost result. */ @@ -954,6 +982,10 @@ struct gcc_target calling the function FN_NAME. */ rtx (*libcall_value) (enum machine_mode, const_rtx); + /* Return true if REGNO is a possible register number for + a function value as seen by the caller. */ + bool (*function_value_regno_p) (const unsigned int); + /* Return an rtx for the argument pointer incoming to the current function. */ rtx (*internal_arg_pointer) (void); @@ -973,7 +1005,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); @@ -1017,7 +1049,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. */ @@ -1035,7 +1067,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); @@ -1115,7 +1147,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 *); @@ -1128,7 +1160,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 @@ -1160,8 +1192,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;