]>
Commit | Line | Data |
---|---|---|
efb6037d | 1 | /* Frv prototypes. |
fbd26352 | 2 | Copyright (C) 1999-2019 Free Software Foundation, Inc. |
efb6037d | 3 | Contributed by Red Hat, Inc. |
4 | ||
187b36cf | 5 | This file is part of GCC. |
efb6037d | 6 | |
187b36cf | 7 | GCC is free software; you can redistribute it and/or modify |
efb6037d | 8 | it under the terms of the GNU General Public License as published by |
038d1e19 | 9 | the Free Software Foundation; either version 3, or (at your option) |
efb6037d | 10 | any later version. |
11 | ||
187b36cf | 12 | GCC is distributed in the hope that it will be useful, |
efb6037d | 13 | but WITHOUT ANY WARRANTY; without even the implied warranty of |
14 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
15 | GNU General Public License for more details. | |
16 | ||
17 | You should have received a copy of the GNU General Public License | |
038d1e19 | 18 | along with GCC; see the file COPYING3. If not see |
19 | <http://www.gnu.org/licenses/>. */ | |
efb6037d | 20 | |
efb6037d | 21 | /* Define functions defined in frv.c */ |
ab2e8833 | 22 | extern void frv_expand_prologue (void); |
d9b1ff5b | 23 | extern void frv_expand_epilogue (bool); |
ab2e8833 | 24 | extern frv_stack_t *frv_stack_info (void); |
25 | extern void frv_debug_stack (frv_stack_t *); | |
ab2e8833 | 26 | extern int frv_initial_elimination_offset (int, int); |
7f518cd8 | 27 | extern void frv_ifcvt_machdep_init (void *); |
efb6037d | 28 | |
29 | #ifdef RTX_CODE | |
3754d046 | 30 | extern int frv_legitimate_address_p_1 (machine_mode, rtx, |
3e7f6cce | 31 | int, int, int); |
32 | extern rtx frv_find_base_term (rtx); | |
efb6037d | 33 | |
34 | #ifdef TREE_CODE | |
ab2e8833 | 35 | extern void frv_init_cumulative_args (CUMULATIVE_ARGS *, tree, |
36 | rtx, tree, int); | |
efb6037d | 37 | |
eeea81f9 | 38 | extern bool frv_function_value_regno_p (const unsigned int); |
efb6037d | 39 | #endif /* TREE_CODE */ |
40 | ||
ab2e8833 | 41 | extern int frv_expand_block_move (rtx *); |
42 | extern int frv_expand_block_clear (rtx *); | |
43 | extern rtx frv_dynamic_chain_address (rtx); | |
44 | extern rtx frv_return_addr_rtx (int, rtx); | |
3754d046 | 45 | extern rtx frv_index_memory (rtx, machine_mode, int); |
efb6037d | 46 | extern const char *frv_asm_output_opcode |
ab2e8833 | 47 | (FILE *, const char *); |
ed3e6e5d | 48 | extern void frv_final_prescan_insn (rtx_insn *, rtx *, int); |
3754d046 | 49 | extern void frv_emit_move (machine_mode, rtx, rtx); |
ab2e8833 | 50 | extern int frv_emit_movsi (rtx, rtx); |
51 | extern const char *output_move_single (rtx *, rtx); | |
52 | extern const char *output_move_double (rtx *, rtx); | |
efb6037d | 53 | extern const char *output_condmove_single |
ab2e8833 | 54 | (rtx *, rtx); |
74f4459c | 55 | extern int frv_emit_cond_branch (rtx *); |
56 | extern int frv_emit_scc (rtx *); | |
ab2e8833 | 57 | extern rtx frv_split_scc (rtx, rtx, rtx, rtx, HOST_WIDE_INT); |
58 | extern int frv_emit_cond_move (rtx, rtx, rtx, rtx); | |
59 | extern rtx frv_split_cond_move (rtx *); | |
60 | extern rtx frv_split_minmax (rtx *); | |
61 | extern rtx frv_split_abs (rtx *); | |
62 | extern void frv_split_double_load (rtx, rtx); | |
63 | extern void frv_split_double_store (rtx, rtx); | |
99a10418 | 64 | #ifdef BB_HEAD |
e5a23585 | 65 | extern void frv_ifcvt_init_extra_fields (struct ce_if_block *); |
66 | extern void frv_ifcvt_modify_tests (struct ce_if_block *, rtx *, rtx *); | |
efb6037d | 67 | extern void frv_ifcvt_modify_multiple_tests |
e5a23585 | 68 | (struct ce_if_block *, basic_block, |
ab2e8833 | 69 | rtx *, rtx *); |
6b63fbbe | 70 | extern rtx frv_ifcvt_modify_insn (struct ce_if_block *, rtx, rtx_insn *); |
e5a23585 | 71 | extern void frv_ifcvt_modify_final (struct ce_if_block *); |
72 | extern void frv_ifcvt_modify_cancel (struct ce_if_block *); | |
efb6037d | 73 | #endif |
efb6037d | 74 | extern enum reg_class frv_secondary_reload_class |
a3eb7c77 | 75 | (enum reg_class, |
3754d046 | 76 | machine_mode, rtx); |
8deb3959 | 77 | extern int frv_class_max_nregs (enum reg_class rclass, |
3754d046 | 78 | machine_mode mode); |
79 | extern machine_mode frv_select_cc_mode (enum rtx_code, rtx, rtx); | |
efb6037d | 80 | #endif /* RTX_CODE */ |
81 | ||
2da3e390 | 82 | extern int frv_trampoline_size (void); |
ab2e8833 | 83 | extern int direct_return_p (void); |
52cce740 | 84 | extern int frv_issue_rate (void); |
85 | extern int frv_acc_group (rtx); | |
efb6037d | 86 | |
87 | #ifdef TREE_CODE | |
ab2e8833 | 88 | extern int frv_adjust_field_align (tree, int); |
efb6037d | 89 | #endif |
90 | ||
efb6037d | 91 | #ifdef RTX_CODE |
3754d046 | 92 | extern int integer_register_operand (rtx, machine_mode); |
93 | extern int frv_load_operand (rtx, machine_mode); | |
94 | extern int gpr_or_fpr_operand (rtx, machine_mode); | |
95 | extern int gpr_no_subreg_operand (rtx, machine_mode); | |
96 | extern int gpr_or_int6_operand (rtx, machine_mode); | |
97 | extern int fpr_or_int6_operand (rtx, machine_mode); | |
98 | extern int gpr_or_int_operand (rtx, machine_mode); | |
99 | extern int gpr_or_int12_operand (rtx, machine_mode); | |
100 | extern int gpr_fpr_or_int12_operand (rtx, machine_mode); | |
101 | extern int gpr_or_int10_operand (rtx, machine_mode); | |
102 | extern int move_source_operand (rtx, machine_mode); | |
103 | extern int move_destination_operand (rtx, machine_mode); | |
104 | extern int condexec_source_operand (rtx, machine_mode); | |
105 | extern int condexec_dest_operand (rtx, machine_mode); | |
106 | extern int lr_operand (rtx, machine_mode); | |
107 | extern int gpr_or_memory_operand (rtx, machine_mode); | |
108 | extern int fpr_or_memory_operand (rtx, machine_mode); | |
109 | extern int reg_or_0_operand (rtx, machine_mode); | |
110 | extern int fcc_operand (rtx, machine_mode); | |
111 | extern int icc_operand (rtx, machine_mode); | |
112 | extern int cc_operand (rtx, machine_mode); | |
113 | extern int fcr_operand (rtx, machine_mode); | |
114 | extern int icr_operand (rtx, machine_mode); | |
115 | extern int cr_operand (rtx, machine_mode); | |
116 | extern int call_operand (rtx, machine_mode); | |
117 | extern int fpr_operand (rtx, machine_mode); | |
118 | extern int even_reg_operand (rtx, machine_mode); | |
119 | extern int odd_reg_operand (rtx, machine_mode); | |
120 | extern int even_gpr_operand (rtx, machine_mode); | |
121 | extern int odd_gpr_operand (rtx, machine_mode); | |
122 | extern int quad_fpr_operand (rtx, machine_mode); | |
123 | extern int even_fpr_operand (rtx, machine_mode); | |
124 | extern int odd_fpr_operand (rtx, machine_mode); | |
125 | extern int dbl_memory_one_insn_operand (rtx, machine_mode); | |
126 | extern int dbl_memory_two_insn_operand (rtx, machine_mode); | |
127 | extern int int12_operand (rtx, machine_mode); | |
128 | extern int int6_operand (rtx, machine_mode); | |
129 | extern int int5_operand (rtx, machine_mode); | |
130 | extern int uint5_operand (rtx, machine_mode); | |
131 | extern int uint4_operand (rtx, machine_mode); | |
132 | extern int uint1_operand (rtx, machine_mode); | |
133 | extern int int_2word_operand (rtx, machine_mode); | |
134 | extern int pic_register_operand (rtx, machine_mode); | |
135 | extern int pic_symbolic_operand (rtx, machine_mode); | |
136 | extern int small_data_register_operand (rtx, machine_mode); | |
137 | extern int small_data_symbolic_operand (rtx, machine_mode); | |
138 | extern int upper_int16_operand (rtx, machine_mode); | |
139 | extern int uint16_operand (rtx, machine_mode); | |
140 | extern int symbolic_operand (rtx, machine_mode); | |
141 | extern int relational_operator (rtx, machine_mode); | |
142 | extern int signed_relational_operator (rtx, machine_mode); | |
143 | extern int unsigned_relational_operator (rtx, machine_mode); | |
144 | extern int float_relational_operator (rtx, machine_mode); | |
145 | extern int ccr_eqne_operator (rtx, machine_mode); | |
146 | extern int minmax_operator (rtx, machine_mode); | |
147 | extern int condexec_si_binary_operator (rtx, machine_mode); | |
148 | extern int condexec_si_media_operator (rtx, machine_mode); | |
149 | extern int condexec_si_divide_operator (rtx, machine_mode); | |
150 | extern int condexec_si_unary_operator (rtx, machine_mode); | |
151 | extern int condexec_sf_conv_operator (rtx, machine_mode); | |
152 | extern int condexec_sf_add_operator (rtx, machine_mode); | |
153 | extern int condexec_memory_operand (rtx, machine_mode); | |
154 | extern int intop_compare_operator (rtx, machine_mode); | |
155 | extern int acc_operand (rtx, machine_mode); | |
156 | extern int even_acc_operand (rtx, machine_mode); | |
157 | extern int quad_acc_operand (rtx, machine_mode); | |
158 | extern int accg_operand (rtx, machine_mode); | |
ab2e8833 | 159 | extern rtx frv_matching_accg_for_acc (rtx); |
d9b1ff5b | 160 | extern void frv_expand_fdpic_call (rtx *, bool, bool); |
3e7f6cce | 161 | extern rtx frv_gen_GPsym2reg (rtx, rtx); |
3754d046 | 162 | extern int frv_legitimate_memory_operand (rtx, machine_mode, int); |
52ba7179 | 163 | |
164 | /* Information about a relocation unspec. SYMBOL is the relocation symbol | |
165 | (a SYMBOL_REF or LABEL_REF), RELOC is the type of relocation and OFFSET | |
166 | is the constant addend. */ | |
167 | struct frv_unspec { | |
168 | rtx symbol; | |
169 | int reloc; | |
170 | HOST_WIDE_INT offset; | |
171 | }; | |
172 | ||
173 | extern bool frv_const_unspec_p (rtx, struct frv_unspec *); | |
174 | ||
efb6037d | 175 | #endif |
176 |