comparison gcc/target.h @ 63:b7f97abdc517 gcc-4.6-20100522

update gcc from gcc-4.5.0 to gcc-4.6
author ryoma <e075725@ie.u-ryukyu.ac.jp>
date Mon, 24 May 2010 12:47:05 +0900
parents 77e2b8dfacca
children f6334be47118
comparison
equal deleted inserted replaced
56:3c8a44c06a95 63:b7f97abdc517
1 /* Data structure definitions for a generic GCC target. 1 /* Data structure definitions for a generic GCC target.
2 Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 2 Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010
3 Free Software Foundation, Inc. 3 Free Software Foundation, Inc.
4 4
5 This program is free software; you can redistribute it and/or modify it 5 This program is free software; you can redistribute it and/or modify it
6 under the terms of the GNU General Public License as published by the 6 under the terms of the GNU General Public License as published by the
7 Free Software Foundation; either version 3, or (at your option) any 7 Free Software Foundation; either version 3, or (at your option) any
95 struct _dep; 95 struct _dep;
96 96
97 /* This is defined in ddg.h . */ 97 /* This is defined in ddg.h . */
98 struct ddg; 98 struct ddg;
99 99
100 /* This is defined in cfgloop.h . */
101 struct loop;
102
100 /* Assembler instructions for creating various kinds of integer object. */ 103 /* Assembler instructions for creating various kinds of integer object. */
101 104
102 struct asm_int_op 105 struct asm_int_op
103 { 106 {
104 const char *hi; 107 const char *hi;
232 void (*file_start) (void); 235 void (*file_start) (void);
233 236
234 /* Output any boilerplate text needed at the end of a 237 /* Output any boilerplate text needed at the end of a
235 translation unit. */ 238 translation unit. */
236 void (*file_end) (void); 239 void (*file_end) (void);
240
241 /* Output any boilerplate text needed at the beginning of an
242 LTO output stream. */
243 void (*lto_start) (void);
244
245 /* Output any boilerplate text needed at the end of an
246 LTO output stream. */
247 void (*lto_end) (void);
248
249 /* Output any boilerplace text needed at the end of a
250 translation unit before debug and unwind info is emitted. */
251 void (*code_end) (void);
237 252
238 /* Output an assembler pseudo-op to declare a library function name 253 /* Output an assembler pseudo-op to declare a library function name
239 external. */ 254 external. */
240 void (*external_libcall) (rtx); 255 void (*external_libcall) (rtx);
241 256
465 function. */ 480 function. */
466 tree (* builtin_mask_for_load) (void); 481 tree (* builtin_mask_for_load) (void);
467 482
468 /* Returns a code for builtin that realizes vectorized version of 483 /* Returns a code for builtin that realizes vectorized version of
469 function, or NULL_TREE if not available. */ 484 function, or NULL_TREE if not available. */
470 tree (* builtin_vectorized_function) (unsigned, tree, tree); 485 tree (* builtin_vectorized_function) (tree, tree, tree);
471 486
472 /* Returns a code for builtin that realizes vectorized version of 487 /* Returns a function declaration for a builtin that realizes the
473 conversion, or NULL_TREE if not available. */ 488 vector conversion, or NULL_TREE if not available. */
474 tree (* builtin_conversion) (unsigned, tree); 489 tree (* builtin_conversion) (unsigned, tree, tree);
475 490
476 /* Target builtin that implements vector widening multiplication. 491 /* Target builtin that implements vector widening multiplication.
477 builtin_mul_widen_eve computes the element-by-element products 492 builtin_mul_widen_eve computes the element-by-element products
478 for the even elements, and builtin_mul_widen_odd computes the 493 for the even elements, and builtin_mul_widen_odd computes the
479 element-by-element products for the odd elements. */ 494 element-by-element products for the odd elements. */
539 tree (* merge_type_attributes) (tree, tree); 554 tree (* merge_type_attributes) (tree, tree);
540 555
541 /* Table of machine attributes and functions to handle them. 556 /* Table of machine attributes and functions to handle them.
542 Ignored if NULL. */ 557 Ignored if NULL. */
543 const struct attribute_spec *attribute_table; 558 const struct attribute_spec *attribute_table;
559
560 /* Return true iff attribute NAME expects a plain identifier as its first
561 argument. */
562 bool (*attribute_takes_identifier_p) (const_tree name);
544 563
545 /* Return zero if the attributes on TYPE1 and TYPE2 are incompatible, 564 /* Return zero if the attributes on TYPE1 and TYPE2 are incompatible,
546 one if they are compatible and two if they are nearly compatible 565 one if they are compatible and two if they are nearly compatible
547 (which causes a warning to be generated). */ 566 (which causes a warning to be generated). */
548 int (* comp_type_attributes) (const_tree type1, const_tree type2); 567 int (* comp_type_attributes) (const_tree type1, const_tree type2);
595 here. */ 614 here. */
596 tree (*resolve_overloaded_builtin) (unsigned int /*location_t*/, 615 tree (*resolve_overloaded_builtin) (unsigned int /*location_t*/,
597 tree decl, void *params); 616 tree decl, void *params);
598 617
599 /* Fold a target-specific builtin. */ 618 /* Fold a target-specific builtin. */
600 tree (* fold_builtin) (tree fndecl, tree arglist, bool ignore); 619 tree (* fold_builtin) (tree fndecl, int nargs, tree *argp, bool ignore);
601 620
602 /* Returns a code for a target-specific builtin that implements 621 /* Returns a code for a target-specific builtin that implements
603 reciprocal of the function, or NULL_TREE if not available. */ 622 reciprocal of the function, or NULL_TREE if not available. */
604 tree (* builtin_reciprocal) (unsigned, bool, bool); 623 tree (* builtin_reciprocal) (unsigned, bool, bool);
605 624
631 bool (* branch_target_register_callee_saved) (bool after_pe_gen); 650 bool (* branch_target_register_callee_saved) (bool after_pe_gen);
632 651
633 /* Return true if the target supports conditional execution. */ 652 /* Return true if the target supports conditional execution. */
634 bool (* have_conditional_execution) (void); 653 bool (* have_conditional_execution) (void);
635 654
655 /* Return a new value for loop unroll size. */
656 unsigned (* loop_unroll_adjust) (unsigned nunroll, struct loop *loop);
657
636 /* True if the constant X cannot be placed in the constant pool. */ 658 /* True if the constant X cannot be placed in the constant pool. */
637 bool (* cannot_force_const_mem) (rtx); 659 bool (* cannot_force_const_mem) (rtx);
638 660
639 /* True if the insn X cannot be duplicated. */ 661 /* True if the insn X cannot be duplicated. */
640 bool (* cannot_copy_insn_p) (rtx); 662 bool (* cannot_copy_insn_p) (rtx);
641 663
642 /* True if X is considered to be commutative. */ 664 /* True if X is considered to be commutative. */
643 bool (* commutative_p) (const_rtx, int); 665 bool (* commutative_p) (const_rtx, int);
666
667 /* True if ADDR is an address-expression whose effect depends
668 on the mode of the memory reference it is used in. */
669 bool (* mode_dependent_address_p) (const_rtx addr);
644 670
645 /* Given an invalid address X for a given machine mode, try machine-specific 671 /* Given an invalid address X for a given machine mode, try machine-specific
646 ways to make it legitimate. Return X or an invalid address on failure. */ 672 ways to make it legitimate. Return X or an invalid address on failure. */
647 rtx (* legitimize_address) (rtx, rtx, enum machine_mode); 673 rtx (* legitimize_address) (rtx, rtx, enum machine_mode);
648 674
749 775
750 /* Similarly for vector modes. "Supported" here is less strict. At 776 /* Similarly for vector modes. "Supported" here is less strict. At
751 least some operations are supported; need to check optabs or builtins 777 least some operations are supported; need to check optabs or builtins
752 for further details. */ 778 for further details. */
753 bool (* vector_mode_supported_p) (enum machine_mode mode); 779 bool (* vector_mode_supported_p) (enum machine_mode mode);
780
781 /* True for MODE if the target expects that registers in this mode will
782 be allocated to registers in a small register class. The compiler is
783 allowed to use registers explicitly used in the rtl as spill registers
784 but it should prevent extending the lifetime of these registers. */
785 bool (* small_register_classes_for_mode_p) (enum machine_mode mode);
754 786
755 /* Compute a (partial) cost for rtx X. Return true if the complete 787 /* Compute a (partial) cost for rtx X. Return true if the complete
756 cost has been computed, and false if subexpressions should be 788 cost has been computed, and false if subexpressions should be
757 scanned. In either case, *TOTAL contains the cost result. */ 789 scanned. In either case, *TOTAL contains the cost result. */
758 /* Note that CODE and OUTER_CODE ought to be RTX_CODE, but that's 790 /* Note that CODE and OUTER_CODE ought to be RTX_CODE, but that's
956 988
957 /* Return the rtx for the result of a libcall of mode MODE, 989 /* Return the rtx for the result of a libcall of mode MODE,
958 calling the function FN_NAME. */ 990 calling the function FN_NAME. */
959 rtx (*libcall_value) (enum machine_mode, const_rtx); 991 rtx (*libcall_value) (enum machine_mode, const_rtx);
960 992
993 /* Return true if REGNO is a possible register number for
994 a function value as seen by the caller. */
995 bool (*function_value_regno_p) (const unsigned int);
996
961 /* Return an rtx for the argument pointer incoming to the 997 /* Return an rtx for the argument pointer incoming to the
962 current function. */ 998 current function. */
963 rtx (*internal_arg_pointer) (void); 999 rtx (*internal_arg_pointer) (void);
964 1000
965 /* Update the current function stack boundary if needed. */ 1001 /* Update the current function stack boundary if needed. */
1019 const enum reg_class *(*ira_cover_classes) (void); 1055 const enum reg_class *(*ira_cover_classes) (void);
1020 1056
1021 /* Return the class for a secondary reload, and fill in extra information. */ 1057 /* Return the class for a secondary reload, and fill in extra information. */
1022 enum reg_class (*secondary_reload) (bool, rtx, enum reg_class, 1058 enum reg_class (*secondary_reload) (bool, rtx, enum reg_class,
1023 enum machine_mode, 1059 enum machine_mode,
1024 struct secondary_reload_info *); 1060 secondary_reload_info *);
1025 1061
1026 /* This target hook allows the backend to perform additional 1062 /* This target hook allows the backend to perform additional
1027 processing while initializing for variable expansion. */ 1063 processing while initializing for variable expansion. */
1028 void (* expand_to_rtl_hook) (void); 1064 void (* expand_to_rtl_hook) (void);
1029 1065