Mercurial > hg > CbC > CbC_gcc
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 |