Mercurial > hg > CbC > CbC_gcc
comparison gcc/config/arm/arm-protos.h @ 145:1830386684a0
gcc-9.2.0
author | anatofuz |
---|---|
date | Thu, 13 Feb 2020 11:34:05 +0900 |
parents | 84e7813d76e9 |
children |
comparison
equal
deleted
inserted
replaced
131:84e7813d76e9 | 145:1830386684a0 |
---|---|
1 /* Prototypes for exported functions defined in arm.c and pe.c | 1 /* Prototypes for exported functions defined in arm.c and pe.c |
2 Copyright (C) 1999-2018 Free Software Foundation, Inc. | 2 Copyright (C) 1999-2020 Free Software Foundation, Inc. |
3 Contributed by Richard Earnshaw (rearnsha@arm.com) | 3 Contributed by Richard Earnshaw (rearnsha@arm.com) |
4 Minor hacks by Nick Clifton (nickc@cygnus.com) | 4 Minor hacks by Nick Clifton (nickc@cygnus.com) |
5 | 5 |
6 This file is part of GCC. | 6 This file is part of GCC. |
7 | 7 |
26 | 26 |
27 extern enum unwind_info_type arm_except_unwind_info (struct gcc_options *); | 27 extern enum unwind_info_type arm_except_unwind_info (struct gcc_options *); |
28 extern int use_return_insn (int, rtx); | 28 extern int use_return_insn (int, rtx); |
29 extern bool use_simple_return_p (void); | 29 extern bool use_simple_return_p (void); |
30 extern enum reg_class arm_regno_class (int); | 30 extern enum reg_class arm_regno_class (int); |
31 extern void arm_load_pic_register (unsigned long); | 31 extern bool arm_check_builtin_call (location_t , vec<location_t> , tree, |
32 tree, unsigned int, tree *); | |
33 extern void arm_load_pic_register (unsigned long, rtx); | |
32 extern int arm_volatile_func (void); | 34 extern int arm_volatile_func (void); |
33 extern void arm_expand_prologue (void); | 35 extern void arm_expand_prologue (void); |
34 extern void arm_expand_epilogue (bool); | 36 extern void arm_expand_epilogue (bool); |
35 extern void arm_declare_function_name (FILE *, const char *, tree); | 37 extern void arm_declare_function_name (FILE *, const char *, tree); |
36 extern void arm_asm_declare_function_name (FILE *, const char *, tree); | 38 extern void arm_asm_declare_function_name (FILE *, const char *, tree); |
55 extern void arm_atomic_assign_expand_fenv (tree *hold, tree *clear, tree *update); | 57 extern void arm_atomic_assign_expand_fenv (tree *hold, tree *clear, tree *update); |
56 extern rtx arm_simd_vect_par_cnst_half (machine_mode mode, bool high); | 58 extern rtx arm_simd_vect_par_cnst_half (machine_mode mode, bool high); |
57 extern bool arm_simd_check_vect_par_cnst_half_p (rtx op, machine_mode mode, | 59 extern bool arm_simd_check_vect_par_cnst_half_p (rtx op, machine_mode mode, |
58 bool high); | 60 bool high); |
59 extern void arm_emit_speculation_barrier_function (void); | 61 extern void arm_emit_speculation_barrier_function (void); |
62 extern void arm_decompose_di_binop (rtx, rtx, rtx *, rtx *, rtx *, rtx *); | |
63 extern bool arm_q_bit_access (void); | |
64 extern bool arm_ge_bits_access (void); | |
60 | 65 |
61 #ifdef RTX_CODE | 66 #ifdef RTX_CODE |
62 extern void arm_gen_unlikely_cbranch (enum rtx_code, machine_mode cc_mode, | 67 extern void arm_gen_unlikely_cbranch (enum rtx_code, machine_mode cc_mode, |
63 rtx label_ref); | 68 rtx label_ref); |
64 extern bool arm_vector_mode_supported_p (machine_mode); | 69 extern bool arm_vector_mode_supported_p (machine_mode); |
65 extern bool arm_small_register_classes_for_mode_p (machine_mode); | 70 extern bool arm_small_register_classes_for_mode_p (machine_mode); |
66 extern int const_ok_for_arm (HOST_WIDE_INT); | 71 extern int const_ok_for_arm (HOST_WIDE_INT); |
67 extern int const_ok_for_op (HOST_WIDE_INT, enum rtx_code); | 72 extern int const_ok_for_op (HOST_WIDE_INT, enum rtx_code); |
68 extern int const_ok_for_dimode_op (HOST_WIDE_INT, enum rtx_code); | 73 extern int const_ok_for_dimode_op (HOST_WIDE_INT, enum rtx_code); |
74 extern void thumb1_gen_const_int (rtx, HOST_WIDE_INT); | |
69 extern int arm_split_constant (RTX_CODE, machine_mode, rtx, | 75 extern int arm_split_constant (RTX_CODE, machine_mode, rtx, |
70 HOST_WIDE_INT, rtx, rtx, int); | 76 HOST_WIDE_INT, rtx, rtx, int); |
71 extern int legitimate_pic_operand_p (rtx); | 77 extern int legitimate_pic_operand_p (rtx); |
72 extern rtx legitimize_pic_address (rtx, machine_mode, rtx); | 78 extern rtx legitimize_pic_address (rtx, machine_mode, rtx, rtx, bool); |
73 extern rtx legitimize_tls_address (rtx, rtx); | 79 extern rtx legitimize_tls_address (rtx, rtx); |
74 extern bool arm_legitimate_address_p (machine_mode, rtx, bool); | 80 extern bool arm_legitimate_address_p (machine_mode, rtx, bool); |
75 extern int arm_legitimate_address_outer_p (machine_mode, rtx, RTX_CODE, int); | 81 extern int arm_legitimate_address_outer_p (machine_mode, rtx, RTX_CODE, int); |
76 extern int thumb_legitimate_offset_p (machine_mode, HOST_WIDE_INT); | 82 extern int thumb_legitimate_offset_p (machine_mode, HOST_WIDE_INT); |
77 extern int thumb1_legitimate_address_p (machine_mode, rtx, int); | 83 extern int thumb1_legitimate_address_p (machine_mode, rtx, int); |
78 extern bool ldm_stm_operation_p (rtx, bool, machine_mode mode, | 84 extern bool ldm_stm_operation_p (rtx, bool, machine_mode mode, |
79 bool, bool); | 85 bool, bool); |
86 extern bool clear_operation_p (rtx, bool); | |
80 extern int arm_const_double_rtx (rtx); | 87 extern int arm_const_double_rtx (rtx); |
81 extern int vfp3_const_double_rtx (rtx); | 88 extern int vfp3_const_double_rtx (rtx); |
82 extern int neon_immediate_valid_for_move (rtx, machine_mode, rtx *, int *); | 89 extern int neon_immediate_valid_for_move (rtx, machine_mode, rtx *, int *); |
83 extern int neon_immediate_valid_for_logic (rtx, machine_mode, int, rtx *, | 90 extern int neon_immediate_valid_for_logic (rtx, machine_mode, int, rtx *, |
84 int *); | 91 int *); |
107 | 114 |
108 extern int arm_coproc_mem_operand (rtx, bool); | 115 extern int arm_coproc_mem_operand (rtx, bool); |
109 extern int neon_vector_mem_operand (rtx, int, bool); | 116 extern int neon_vector_mem_operand (rtx, int, bool); |
110 extern int neon_struct_mem_operand (rtx); | 117 extern int neon_struct_mem_operand (rtx); |
111 | 118 |
119 extern rtx *neon_vcmla_lane_prepare_operands (rtx *); | |
120 | |
112 extern int tls_mentioned_p (rtx); | 121 extern int tls_mentioned_p (rtx); |
113 extern int symbol_mentioned_p (rtx); | 122 extern int symbol_mentioned_p (rtx); |
114 extern int label_mentioned_p (rtx); | 123 extern int label_mentioned_p (rtx); |
115 extern RTX_CODE minmax_code (rtx); | 124 extern RTX_CODE minmax_code (rtx); |
116 extern bool arm_sat_operator_match (rtx, rtx, int *, bool *); | 125 extern bool arm_sat_operator_match (rtx, rtx, int *, bool *); |
121 extern rtx arm_gen_load_multiple (int *, int, rtx, int, rtx, HOST_WIDE_INT *); | 130 extern rtx arm_gen_load_multiple (int *, int, rtx, int, rtx, HOST_WIDE_INT *); |
122 extern rtx arm_gen_store_multiple (int *, int, rtx, int, rtx, HOST_WIDE_INT *); | 131 extern rtx arm_gen_store_multiple (int *, int, rtx, int, rtx, HOST_WIDE_INT *); |
123 extern bool offset_ok_for_ldrd_strd (HOST_WIDE_INT); | 132 extern bool offset_ok_for_ldrd_strd (HOST_WIDE_INT); |
124 extern bool operands_ok_ldrd_strd (rtx, rtx, rtx, HOST_WIDE_INT, bool, bool); | 133 extern bool operands_ok_ldrd_strd (rtx, rtx, rtx, HOST_WIDE_INT, bool, bool); |
125 extern bool gen_operands_ldrd_strd (rtx *, bool, bool, bool); | 134 extern bool gen_operands_ldrd_strd (rtx *, bool, bool, bool); |
126 extern int arm_gen_movmemqi (rtx *); | 135 extern bool valid_operands_ldrd_strd (rtx *, bool); |
127 extern bool gen_movmem_ldrd_strd (rtx *); | 136 extern int arm_gen_cpymemqi (rtx *); |
137 extern bool gen_cpymem_ldrd_strd (rtx *); | |
128 extern machine_mode arm_select_cc_mode (RTX_CODE, rtx, rtx); | 138 extern machine_mode arm_select_cc_mode (RTX_CODE, rtx, rtx); |
129 extern machine_mode arm_select_dominance_cc_mode (rtx, rtx, | 139 extern machine_mode arm_select_dominance_cc_mode (rtx, rtx, |
130 HOST_WIDE_INT); | 140 HOST_WIDE_INT); |
131 extern rtx arm_gen_compare_reg (RTX_CODE, rtx, rtx, rtx); | 141 extern rtx arm_gen_compare_reg (RTX_CODE, rtx, rtx, rtx); |
132 extern rtx arm_gen_return_addr_mask (void); | 142 extern rtx arm_gen_return_addr_mask (void); |
134 extern void arm_reload_out_hi (rtx *); | 144 extern void arm_reload_out_hi (rtx *); |
135 extern int arm_max_const_double_inline_cost (void); | 145 extern int arm_max_const_double_inline_cost (void); |
136 extern int arm_const_double_inline_cost (rtx); | 146 extern int arm_const_double_inline_cost (rtx); |
137 extern bool arm_const_double_by_parts (rtx); | 147 extern bool arm_const_double_by_parts (rtx); |
138 extern bool arm_const_double_by_immediates (rtx); | 148 extern bool arm_const_double_by_immediates (rtx); |
149 extern rtx arm_load_function_descriptor (rtx funcdesc); | |
139 extern void arm_emit_call_insn (rtx, rtx, bool); | 150 extern void arm_emit_call_insn (rtx, rtx, bool); |
140 bool detect_cmse_nonsecure_call (tree); | 151 bool detect_cmse_nonsecure_call (tree); |
141 extern const char *output_call (rtx *); | 152 extern const char *output_call (rtx *); |
142 void arm_emit_movpair (rtx, rtx); | 153 void arm_emit_movpair (rtx, rtx); |
143 extern const char *output_mov_long_double_arm_from_arm (rtx *); | 154 extern const char *output_mov_long_double_arm_from_arm (rtx *); |
144 extern const char *output_move_double (rtx *, bool, int *count); | 155 extern const char *output_move_double (rtx *, bool, int *count); |
145 extern const char *output_move_quad (rtx *); | 156 extern const char *output_move_quad (rtx *); |
146 extern int arm_count_output_move_double_insns (rtx *); | 157 extern int arm_count_output_move_double_insns (rtx *); |
158 extern int arm_count_ldrdstrd_insns (rtx *, bool); | |
147 extern const char *output_move_vfp (rtx *operands); | 159 extern const char *output_move_vfp (rtx *operands); |
148 extern const char *output_move_neon (rtx *operands); | 160 extern const char *output_move_neon (rtx *operands); |
149 extern int arm_attr_length_move_neon (rtx_insn *); | 161 extern int arm_attr_length_move_neon (rtx_insn *); |
150 extern int arm_address_offset_is_imm (rtx_insn *); | 162 extern int arm_address_offset_is_imm (rtx_insn *); |
151 extern const char *output_add_immediate (rtx *); | 163 extern const char *output_add_immediate (rtx *); |
197 extern void thumb1_final_prescan_insn (rtx_insn *); | 209 extern void thumb1_final_prescan_insn (rtx_insn *); |
198 extern void thumb2_final_prescan_insn (rtx_insn *); | 210 extern void thumb2_final_prescan_insn (rtx_insn *); |
199 extern const char *thumb_load_double_from_address (rtx *); | 211 extern const char *thumb_load_double_from_address (rtx *); |
200 extern const char *thumb_output_move_mem_multiple (int, rtx *); | 212 extern const char *thumb_output_move_mem_multiple (int, rtx *); |
201 extern const char *thumb_call_via_reg (rtx); | 213 extern const char *thumb_call_via_reg (rtx); |
202 extern void thumb_expand_movmemqi (rtx *); | 214 extern void thumb_expand_cpymemqi (rtx *); |
203 extern rtx arm_return_addr (int, rtx); | 215 extern rtx arm_return_addr (int, rtx); |
204 extern void thumb_reload_out_hi (rtx *); | 216 extern void thumb_reload_out_hi (rtx *); |
205 extern void thumb_set_return_address (rtx, rtx); | 217 extern void thumb_set_return_address (rtx, rtx); |
206 extern const char *thumb1_output_casesi (rtx *); | 218 extern const char *thumb1_output_casesi (rtx *); |
207 extern const char *thumb2_output_casesi (rtx *); | 219 extern const char *thumb2_output_casesi (rtx *); |
321 log_op_non_short_circuit logical_op_non_short_circuit_thumb: 1; | 333 log_op_non_short_circuit logical_op_non_short_circuit_thumb: 1; |
322 log_op_non_short_circuit logical_op_non_short_circuit_arm: 1; | 334 log_op_non_short_circuit logical_op_non_short_circuit_arm: 1; |
323 /* Prefer 32-bit encoding instead of flag-setting 16-bit encoding. */ | 335 /* Prefer 32-bit encoding instead of flag-setting 16-bit encoding. */ |
324 enum {DISPARAGE_FLAGS_NEITHER, DISPARAGE_FLAGS_PARTIAL, DISPARAGE_FLAGS_ALL} | 336 enum {DISPARAGE_FLAGS_NEITHER, DISPARAGE_FLAGS_PARTIAL, DISPARAGE_FLAGS_ALL} |
325 disparage_flag_setting_t16_encodings: 2; | 337 disparage_flag_setting_t16_encodings: 2; |
326 enum {PREF_NEON_64_FALSE, PREF_NEON_64_TRUE} prefer_neon_for_64bits: 1; | |
327 /* Prefer to inline string operations like memset by using Neon. */ | 338 /* Prefer to inline string operations like memset by using Neon. */ |
328 enum {PREF_NEON_STRINGOPS_FALSE, PREF_NEON_STRINGOPS_TRUE} | 339 enum {PREF_NEON_STRINGOPS_FALSE, PREF_NEON_STRINGOPS_TRUE} |
329 string_ops_prefer_neon: 1; | 340 string_ops_prefer_neon: 1; |
330 /* Bitfield encoding the fusible pairs of instructions. Use FUSE_OPS | 341 /* Bitfield encoding the fusible pairs of instructions. Use FUSE_OPS |
331 in an initializer if multiple fusion operations are supported on a | 342 in an initializer if multiple fusion operations are supported on a |
373 /* Defined in gcc/common/config/arm-c.c. */ | 384 /* Defined in gcc/common/config/arm-c.c. */ |
374 extern void arm_lang_object_attributes_init (void); | 385 extern void arm_lang_object_attributes_init (void); |
375 extern void arm_register_target_pragmas (void); | 386 extern void arm_register_target_pragmas (void); |
376 extern void arm_cpu_cpp_builtins (struct cpp_reader *); | 387 extern void arm_cpu_cpp_builtins (struct cpp_reader *); |
377 | 388 |
389 /* Defined in arm-d.c */ | |
390 extern void arm_d_target_versions (void); | |
391 | |
378 extern bool arm_is_constant_pool_ref (rtx); | 392 extern bool arm_is_constant_pool_ref (rtx); |
379 | 393 |
380 /* The bits in this mask specify which instruction scheduling options should | 394 /* The bits in this mask specify which instruction scheduling options should |
381 be used. */ | 395 be used. */ |
382 extern unsigned int tune_flags; | 396 extern unsigned int tune_flags; |
462 extern int arm_arch_arm_hwdiv; | 476 extern int arm_arch_arm_hwdiv; |
463 extern int arm_arch_thumb_hwdiv; | 477 extern int arm_arch_thumb_hwdiv; |
464 | 478 |
465 /* Nonzero if chip disallows volatile memory access in IT block. */ | 479 /* Nonzero if chip disallows volatile memory access in IT block. */ |
466 extern int arm_arch_no_volatile_ce; | 480 extern int arm_arch_no_volatile_ce; |
467 | |
468 /* Nonzero if we should use Neon to handle 64-bits operations rather | |
469 than core registers. */ | |
470 extern int prefer_neon_for_64bits; | |
471 | 481 |
472 /* Structure defining the current overall architectural target and tuning. */ | 482 /* Structure defining the current overall architectural target and tuning. */ |
473 struct arm_build_target | 483 struct arm_build_target |
474 { | 484 { |
475 /* Name of the target CPU, if known, or NULL if the target CPU was not | 485 /* Name of the target CPU, if known, or NULL if the target CPU was not |
493 enum processor_type tune_core; | 503 enum processor_type tune_core; |
494 }; | 504 }; |
495 | 505 |
496 extern struct arm_build_target arm_active_target; | 506 extern struct arm_build_target arm_active_target; |
497 | 507 |
508 /* Table entry for a CPU alias. */ | |
509 struct cpu_alias | |
510 { | |
511 /* The alias name. */ | |
512 const char *const name; | |
513 /* True if the name should be displayed in help text listing cpu names. */ | |
514 bool visible; | |
515 }; | |
516 | |
517 /* Table entry for an architectural feature extension. */ | |
498 struct cpu_arch_extension | 518 struct cpu_arch_extension |
499 { | 519 { |
500 /* Feature name. */ | 520 /* Feature name. */ |
501 const char *const name; | 521 const char *const name; |
502 /* True if the option is negative (removes extensions). */ | 522 /* True if the option is negative (removes extensions). */ |
506 bool alias; | 526 bool alias; |
507 /* The modifier bits. */ | 527 /* The modifier bits. */ |
508 const enum isa_feature isa_bits[isa_num_bits]; | 528 const enum isa_feature isa_bits[isa_num_bits]; |
509 }; | 529 }; |
510 | 530 |
531 /* Common elements of both CPU and architectural options. */ | |
511 struct cpu_arch_option | 532 struct cpu_arch_option |
512 { | 533 { |
513 /* Name for this option. */ | 534 /* Name for this option. */ |
514 const char *name; | 535 const char *name; |
515 /* List of feature extensions permitted. */ | 536 /* List of feature extensions permitted. */ |
516 const struct cpu_arch_extension *extensions; | 537 const struct cpu_arch_extension *extensions; |
517 /* Standard feature bits. */ | 538 /* Standard feature bits. */ |
518 enum isa_feature isa_bits[isa_num_bits]; | 539 enum isa_feature isa_bits[isa_num_bits]; |
519 }; | 540 }; |
520 | 541 |
542 /* Table entry for an architecture entry. */ | |
521 struct arch_option | 543 struct arch_option |
522 { | 544 { |
523 /* Common option fields. */ | 545 /* Common option fields. */ |
524 cpu_arch_option common; | 546 cpu_arch_option common; |
525 /* Short string for this architecture. */ | 547 /* Short string for this architecture. */ |
530 const char profile; | 552 const char profile; |
531 /* Default tune target (in the absence of any more specific data). */ | 553 /* Default tune target (in the absence of any more specific data). */ |
532 enum processor_type tune_id; | 554 enum processor_type tune_id; |
533 }; | 555 }; |
534 | 556 |
557 /* Table entry for a CPU entry. */ | |
535 struct cpu_option | 558 struct cpu_option |
536 { | 559 { |
537 /* Common option fields. */ | 560 /* Common option fields. */ |
538 cpu_arch_option common; | 561 cpu_arch_option common; |
562 /* List of aliases for this CPU. */ | |
563 const struct cpu_alias *aliases; | |
539 /* Architecture upon which this CPU is based. */ | 564 /* Architecture upon which this CPU is based. */ |
540 enum arch_type arch; | 565 enum arch_type arch; |
541 }; | 566 }; |
542 | 567 |
543 extern const arch_option all_architectures[]; | 568 extern const arch_option all_architectures[]; |
550 void arm_parse_option_features (sbitmap, const cpu_arch_option *, | 575 void arm_parse_option_features (sbitmap, const cpu_arch_option *, |
551 const char *); | 576 const char *); |
552 | 577 |
553 void arm_initialize_isa (sbitmap, const enum isa_feature *); | 578 void arm_initialize_isa (sbitmap, const enum isa_feature *); |
554 | 579 |
580 const char * arm_gen_far_branch (rtx *, int, const char * , const char *); | |
581 | |
555 #endif /* ! GCC_ARM_PROTOS_H */ | 582 #endif /* ! GCC_ARM_PROTOS_H */ |