X-Git-Url: http://git.sourceforge.jp/view?a=blobdiff_plain;f=gcc%2Ftarget.h;h=e6e6ba83155c2b84c57c70cf00caf4676e8741ae;hb=300b0e0817a85c8c855f265eeb6e7bdea3160645;hp=0f775f1de157291e20f4f85f6424f74c39e923b9;hpb=567925e3b55e2cc7285b116f6460365f12e530ed;p=pf3gnuchains%2Fgcc-fork.git diff --git a/gcc/target.h b/gcc/target.h index 0f775f1de15..e6e6ba83155 100644 --- a/gcc/target.h +++ b/gcc/target.h @@ -52,6 +52,21 @@ Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. struct stdarg_info; +/* The struct used by the secondary_reload target hook. */ +typedef struct secondary_reload_info +{ + /* icode is actually an enum insn_code, but we don't want to force every + file that includes target.h to include optabs.h . */ + int icode; + int extra_cost; /* Cost for using (a) scratch register(s) to be taken + into account by copy_cost. */ + /* The next two members are for the use of the backward + compatibility hook. */ + struct secondary_reload_info *prev_sri; + int t_icode; /* Actually an enum insn_code - see above. */ +} secondary_reload_info; + + struct gcc_target { /* Functions that output assembler for the target. */ @@ -87,6 +102,10 @@ struct gcc_target this is only a placeholder for an omitted FDE. */ void (* unwind_label) (FILE *, tree, int, int); + /* Output code that will emit a label to divide up the exception + table. */ + void (* except_table_label) (FILE *); + /* Emit any directives required to unwind this instruction. */ void (* unwind_emit) (FILE *, rtx); @@ -112,35 +131,31 @@ struct gcc_target /* Output the assembler code for function exit. */ void (* function_epilogue) (FILE *, HOST_WIDE_INT); + /* Initialize target-specific sections. */ + void (* init_sections) (void); + /* Tell assembler to change to section NAME with attributes FLAGS. If DECL is non-NULL, it is the VAR_DECL or FUNCTION_DECL with which this section is associated. */ void (* named_section) (const char *name, unsigned int flags, tree decl); - /* Switch to the section that holds the exception table. */ - void (* exception_section) (void); - - /* Switch to the section that holds the exception frames. */ - void (* eh_frame_section) (void); + /* Return a section for EXP. It may be a DECL or a constant. RELOC + is nonzero if runtime relocations must be applied; bit 1 will be + set if the runtime relocations require non-local name resolution. + ALIGN is the required alignment of the data. */ + section *(* select_section) (tree, int, unsigned HOST_WIDE_INT); - /* Select and switch to a section for EXP. It may be a DECL or a - constant. RELOC is nonzero if runtime relocations must be applied; - bit 1 will be set if the runtime relocations require non-local - name resolution. ALIGN is the required alignment of the data. */ - void (* select_section) (tree, int, unsigned HOST_WIDE_INT); - - /* Select and switch to a section for X with MODE. ALIGN is - the desired alignment of the data. */ - void (* select_rtx_section) (enum machine_mode, rtx, - unsigned HOST_WIDE_INT); + /* Return a section for X. MODE is X's mode and ALIGN is its + alignment in bits. */ + section *(* select_rtx_section) (enum machine_mode, rtx, + unsigned HOST_WIDE_INT); /* Select a unique section name for DECL. RELOC is the same as for SELECT_SECTION. */ void (* unique_section) (tree, int); - /* Tell assembler to switch to the readonly data section associated - with function DECL. */ - void (* function_rodata_section) (tree); + /* Return the readonly data section associated with function DECL. */ + section *(* function_rodata_section) (tree); /* Output a constructor for a symbol with a given priority. */ void (* constructor) (rtx, int); @@ -183,6 +198,9 @@ struct gcc_target linker to not dead code strip this symbol. */ void (*mark_decl_preserved) (const char *); + /* Output the definition of a section anchor. */ + void (*output_anchor) (rtx); + /* Output a DTP-relative reference to a TLS symbol. */ void (*output_dwarf_dtprel) (FILE *file, int size, rtx x); @@ -341,6 +359,9 @@ struct gcc_target Microsoft Visual C++ bitfield layout rules. */ bool (* ms_bitfield_layout_p) (tree record_type); + /* True if the target supports decimal floating point. */ + bool (* decimal_float_supported_p) (void); + /* Return true if anonymous bitfields affect structure alignment. */ bool (* align_anon_bitfield) (void); @@ -351,6 +372,10 @@ struct gcc_target rtx (* expand_builtin) (tree exp, rtx target, rtx subtarget, enum machine_mode mode, int ignore); + /* Expand a target-specific library builtin. */ + rtx (* expand_library_builtin) (tree exp, rtx target, rtx subtarget, + enum machine_mode mode, int ignore); + /* Select a replacement for a target-specific builtin. This is done *before* regular type checking, and so allows the target to implement a crude form of function overloading. The result is a complete @@ -359,7 +384,7 @@ struct gcc_target /* Fold a target-specific builtin. */ tree (* fold_builtin) (tree fndecl, tree arglist, bool ignore); - + /* For a vendor-specific fundamental TYPE, return a pointer to a statically-allocated string containing the C++ mangling for TYPE. In all other cases, return NULL. */ @@ -399,6 +424,16 @@ struct gcc_target /* Given an address RTX, undo the effects of LEGITIMIZE_ADDRESS. */ rtx (* delegitimize_address) (rtx); + /* True if the given constant can be put into an object_block. */ + bool (* use_blocks_for_constant_p) (enum machine_mode, rtx); + + /* The minimum and maximum byte offsets for anchored addresses. */ + HOST_WIDE_INT min_anchor_offset; + HOST_WIDE_INT max_anchor_offset; + + /* True if section anchors can be used to access the given symbol. */ + bool (* use_anchors_for_symbol_p) (rtx); + /* True if it is OK to do sibling call optimization for the specified call expression EXP. DECL will be the called function, or NULL if this is an indirect call. */ @@ -422,6 +457,11 @@ struct gcc_target return the mask that they apply. Return 0 otherwise. */ unsigned HOST_WIDE_INT (* shift_truncation_mask) (enum machine_mode mode); + /* Return the number of divisions in the given MODE that should be present, + so that it is profitable to turn the division into a multiplication by + the reciprocal. */ + unsigned int (* min_divisions_for_recip_mul) (enum machine_mode mode); + /* True if MODE is valid for a pointer in __attribute__((mode("MODE"))). */ bool (* valid_pointer_mode) (enum machine_mode mode); @@ -555,7 +595,7 @@ struct gcc_target 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 { bool (*promote_function_args) (tree fntype); @@ -606,7 +646,7 @@ struct gcc_target /* Return the diagnostic message string if function without a prototype is not allowed for this 'val' argument; NULL otherwise. */ - const char *(*invalid_arg_for_unprototyped_fn) (tree typelist, + const char *(*invalid_arg_for_unprototyped_fn) (tree typelist, tree funcdecl, tree val); /* Return an rtx for the return value location of the function @@ -631,6 +671,11 @@ struct gcc_target is not permitted on TYPE1 and TYPE2, NULL otherwise. */ const char *(*invalid_binary_op) (int op, tree type1, tree type2); + /* 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 *); + /* Functions specific to the C++ frontend. */ struct cxx { /* Return the integer type used for guard variables. */ @@ -658,7 +703,7 @@ struct gcc_target visibility has been explicitly specified. If the target needs to specify a visibility other than that of the containing class, use this hook to set DECL_VISIBILITY and - DECL_VISIBILITY_SPECIFIED. */ + DECL_VISIBILITY_SPECIFIED. */ void (*determine_class_data_visibility) (tree decl); /* Returns true (the default) if virtual tables and other similar implicit class data objects are always COMDAT if they @@ -672,9 +717,14 @@ struct gcc_target /* 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). */ + target modifications). */ void (*adjust_class_at_definition) (tree type); } cxx; + + /* 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); /* True if unwinding tables should be generated by default. */ bool unwind_tables_default; @@ -684,6 +734,10 @@ struct gcc_target /* True if arbitrary sections are supported. */ bool have_named_sections; + /* True if we can create zeroed data by switching to a BSS section + and then using ASM_OUTPUT_SKIP to allocate the space. */ + bool have_switchable_bss_sections; + /* True if "native" constructors and destructors are supported, false if we're using collect2 for the job. */ bool have_ctors_dtors;