]>
Commit | Line | Data |
---|---|---|
27529606 | 1 | /* Definitions of target machine for GNU compiler. TMS320C[34]x |
71d5e3f0 | 2 | Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999 |
3 | Free Software Foundation, Inc. | |
27529606 | 4 | |
5 | Contributed by Michael Hayes (m.hayes@elec.canterbury.ac.nz) | |
6 | and Herman Ten Brugge (Haj.Ten.Brugge@net.HCC.nl). | |
7 | ||
8 | This file is part of GNU CC. | |
9 | ||
10 | GNU CC is free software; you can redistribute it and/or modify | |
11 | it under the terms of the GNU General Public License as published by | |
12 | the Free Software Foundation; either version 2, or (at your option) | |
13 | any later version. | |
14 | ||
15 | GNU CC is distributed in the hope that it will be useful, | |
16 | but WITHOUT ANY WARRANTY; without even the implied warranty of | |
17 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
18 | GNU General Public License for more details. | |
19 | ||
20 | You should have received a copy of the GNU General Public License | |
21 | along with GNU CC; see the file COPYING. If not, write to | |
22 | the Free Software Foundation, 59 Temple Place - Suite 330, | |
23 | Boston, MA 02111-1307, USA. */ | |
24 | ||
1fcd08b1 | 25 | #ifndef GCC_C4X_PROTOS_H |
26 | #define GCC_C4X_PROTOS_H | |
27 | ||
27529606 | 28 | extern void c4x_override_options PARAMS ((void)); |
29 | ||
30 | extern void c4x_optimization_options PARAMS ((int, int)); | |
31 | ||
32 | extern void c4x_output_ascii PARAMS ((FILE *, const char *, int)); | |
33 | ||
5f21b6cd | 34 | extern int c4x_interrupt_function_p PARAMS ((void)); |
27529606 | 35 | |
5f21b6cd | 36 | extern void c4x_expand_prologue PARAMS ((void)); |
37 | ||
38 | extern void c4x_expand_epilogue PARAMS ((void)); | |
27529606 | 39 | |
40 | extern int c4x_null_epilogue_p PARAMS ((void)); | |
41 | ||
dc9a8d76 | 42 | extern void c4x_global_label (const char *); |
d26296cf | 43 | |
dc9a8d76 | 44 | extern void c4x_external_ref (const char *); |
d26296cf | 45 | |
46 | extern void c4x_file_end (FILE *); | |
47 | ||
27529606 | 48 | #ifdef TREE_CODE |
27529606 | 49 | extern void c4x_function_arg_advance PARAMS ((CUMULATIVE_ARGS *, |
50 | enum machine_mode, tree, int)); | |
51 | ||
52 | extern struct rtx_def *c4x_function_arg PARAMS ((CUMULATIVE_ARGS *, | |
53 | enum machine_mode, tree, | |
54 | int)); | |
55 | ||
27529606 | 56 | #endif /* TREE_CODE */ |
57 | ||
58 | ||
59 | #if defined(RTX_CODE) && defined(TREE_CODE) | |
60 | extern void c4x_init_cumulative_args PARAMS ((CUMULATIVE_ARGS *c, tree, rtx)); | |
61 | ||
62 | extern void c4x_va_start PARAMS ((int, tree, rtx)); | |
63 | ||
64 | extern struct rtx_def *c4x_va_arg PARAMS ((tree, tree)); | |
ee212a99 | 65 | |
fc2a2dcb | 66 | extern rtx c4x_expand_builtin PARAMS ((tree, rtx, rtx, |
67 | enum machine_mode, int)); | |
dd78529e | 68 | |
fc2a2dcb | 69 | extern void c4x_init_builtins PARAMS ((void)); |
dd78529e | 70 | |
27529606 | 71 | #endif /* TREE_CODE and RTX_CODE*/ |
72 | ||
73 | ||
74 | #ifdef RTX_CODE | |
75 | extern struct rtx_def *c4x_gen_compare_reg PARAMS ((enum rtx_code, rtx, rtx)); | |
76 | ||
77 | extern int c4x_check_legit_addr PARAMS ((enum machine_mode, rtx, int)); | |
78 | ||
5f21b6cd | 79 | extern int c4x_hard_regno_mode_ok PARAMS ((unsigned int, enum machine_mode)); |
792db0c2 | 80 | |
f67ce828 | 81 | extern int c4x_hard_regno_rename_ok PARAMS ((unsigned int, unsigned int)); |
82 | ||
27529606 | 83 | extern struct rtx_def *c4x_legitimize_address PARAMS ((rtx, |
84 | enum machine_mode)); | |
85 | ||
27529606 | 86 | extern int c4x_address_cost PARAMS ((rtx)); |
87 | ||
88 | extern void c4x_print_operand PARAMS ((FILE *, rtx, int)); | |
89 | ||
90 | extern void c4x_print_operand_address PARAMS ((FILE *, rtx)); | |
91 | ||
92 | extern enum reg_class c4x_preferred_reload_class PARAMS ((rtx, | |
93 | enum reg_class)); | |
94 | ||
95 | extern struct rtx_def *c4x_operand_subword PARAMS ((rtx, int, int, | |
96 | enum machine_mode)); | |
97 | ||
5f21b6cd | 98 | extern char *c4x_output_cbranch PARAMS ((const char *, rtx)); |
27529606 | 99 | |
100 | extern int c4x_label_conflict PARAMS ((rtx, rtx, rtx)); | |
101 | ||
102 | extern int c4x_address_conflict PARAMS ((rtx, rtx, int, int)); | |
103 | ||
27529606 | 104 | extern void c4x_process_after_reload PARAMS ((rtx)); |
105 | ||
5f21b6cd | 106 | extern void c4x_rptb_insert PARAMS ((rtx insn)); |
107 | ||
27529606 | 108 | extern int c4x_rptb_nop_p PARAMS ((rtx)); |
109 | ||
110 | extern int c4x_rptb_rpts_p PARAMS ((rtx, rtx)); | |
111 | ||
7b0df2aa | 112 | extern int c4x_check_laj_p PARAMS ((rtx)); |
113 | ||
27529606 | 114 | extern int c4x_autoinc_operand PARAMS ((rtx, enum machine_mode)); |
115 | ||
5f21b6cd | 116 | extern int any_operand PARAMS ((rtx, enum machine_mode)); |
117 | ||
27529606 | 118 | extern int fp_zero_operand PARAMS ((rtx, enum machine_mode)); |
119 | ||
120 | extern int const_operand PARAMS ((rtx, enum machine_mode)); | |
121 | ||
122 | extern int stik_const_operand PARAMS ((rtx, enum machine_mode)); | |
123 | ||
124 | extern int not_const_operand PARAMS ((rtx, enum machine_mode)); | |
125 | ||
126 | extern int parallel_operand PARAMS ((rtx, enum machine_mode)); | |
127 | ||
128 | extern int reg_or_const_operand PARAMS ((rtx, enum machine_mode)); | |
129 | ||
130 | extern int reg_operand PARAMS ((rtx, enum machine_mode)); | |
131 | ||
132 | extern int mixed_subreg_operand PARAMS ((rtx, enum machine_mode)); | |
133 | ||
134 | extern int reg_imm_operand PARAMS ((rtx, enum machine_mode)); | |
135 | ||
136 | extern int r0r1_reg_operand PARAMS ((rtx, enum machine_mode)); | |
137 | ||
138 | extern int r2r3_reg_operand PARAMS ((rtx, enum machine_mode)); | |
139 | ||
140 | extern int ext_low_reg_operand PARAMS ((rtx, enum machine_mode)); | |
141 | ||
142 | extern int ext_reg_operand PARAMS ((rtx, enum machine_mode)); | |
143 | ||
144 | extern int std_reg_operand PARAMS ((rtx, enum machine_mode)); | |
145 | ||
e877bdb9 | 146 | extern int std_or_reg_operand PARAMS ((rtx, enum machine_mode)); |
147 | ||
27529606 | 148 | extern int dst_operand PARAMS ((rtx, enum machine_mode)); |
149 | ||
150 | extern int src_operand PARAMS ((rtx, enum machine_mode)); | |
151 | ||
152 | extern int src_hi_operand PARAMS ((rtx, enum machine_mode)); | |
153 | ||
154 | extern int lsrc_operand PARAMS ((rtx, enum machine_mode)); | |
155 | ||
156 | extern int tsrc_operand PARAMS ((rtx, enum machine_mode)); | |
157 | ||
ffb0737e | 158 | extern int nonimmediate_src_operand PARAMS ((rtx, enum machine_mode)); |
159 | ||
160 | extern int nonimmediate_lsrc_operand PARAMS ((rtx, enum machine_mode)); | |
161 | ||
27529606 | 162 | extern int addr_reg_operand PARAMS ((rtx, enum machine_mode)); |
163 | ||
164 | extern int index_reg_operand PARAMS ((rtx, enum machine_mode)); | |
165 | ||
166 | extern int dp_reg_operand PARAMS ((rtx, enum machine_mode)); | |
167 | ||
168 | extern int sp_reg_operand PARAMS ((rtx, enum machine_mode)); | |
169 | ||
170 | extern int rc_reg_operand PARAMS ((rtx, enum machine_mode)); | |
171 | ||
172 | extern int st_reg_operand PARAMS ((rtx, enum machine_mode)); | |
173 | ||
174 | extern int symbolic_address_operand PARAMS ((rtx, enum machine_mode)); | |
175 | ||
176 | extern int ar0_reg_operand PARAMS ((rtx, enum machine_mode)); | |
177 | ||
178 | extern int ar0_mem_operand PARAMS ((rtx, enum machine_mode)); | |
179 | ||
180 | extern int ar1_reg_operand PARAMS ((rtx, enum machine_mode)); | |
181 | ||
182 | extern int ar1_mem_operand PARAMS ((rtx, enum machine_mode)); | |
183 | ||
184 | extern int ar2_reg_operand PARAMS ((rtx, enum machine_mode)); | |
185 | ||
186 | extern int ar2_mem_operand PARAMS ((rtx, enum machine_mode)); | |
187 | ||
188 | extern int ar3_reg_operand PARAMS ((rtx, enum machine_mode)); | |
189 | ||
190 | extern int ar3_mem_operand PARAMS ((rtx, enum machine_mode)); | |
191 | ||
192 | extern int ar4_reg_operand PARAMS ((rtx, enum machine_mode)); | |
193 | ||
194 | extern int ar4_mem_operand PARAMS ((rtx, enum machine_mode)); | |
195 | ||
196 | extern int ar5_reg_operand PARAMS ((rtx, enum machine_mode)); | |
197 | ||
198 | extern int ar5_mem_operand PARAMS ((rtx, enum machine_mode)); | |
199 | ||
200 | extern int ar6_reg_operand PARAMS ((rtx, enum machine_mode)); | |
201 | ||
202 | extern int ar6_mem_operand PARAMS ((rtx, enum machine_mode)); | |
203 | ||
204 | extern int ar7_reg_operand PARAMS ((rtx, enum machine_mode)); | |
205 | ||
206 | extern int ar7_mem_operand PARAMS ((rtx, enum machine_mode)); | |
207 | ||
208 | extern int ir0_reg_operand PARAMS ((rtx, enum machine_mode)); | |
209 | ||
210 | extern int ir0_mem_operand PARAMS ((rtx, enum machine_mode)); | |
211 | ||
212 | extern int ir1_reg_operand PARAMS ((rtx, enum machine_mode)); | |
213 | ||
214 | extern int ir1_mem_operand PARAMS ((rtx, enum machine_mode)); | |
215 | ||
216 | extern int group1_reg_operand PARAMS ((rtx, enum machine_mode)); | |
217 | ||
218 | extern int group1_mem_operand PARAMS ((rtx, enum machine_mode)); | |
219 | ||
220 | extern int arx_reg_operand PARAMS ((rtx, enum machine_mode)); | |
221 | ||
222 | extern int call_address_operand PARAMS ((rtx, enum machine_mode)); | |
223 | ||
224 | extern int par_ind_operand PARAMS ((rtx, enum machine_mode)); | |
225 | ||
226 | extern int not_rc_reg PARAMS ((rtx, enum machine_mode)); | |
227 | ||
228 | extern int not_modify_reg PARAMS ((rtx, enum machine_mode)); | |
229 | ||
230 | extern int c4x_shiftable_constant PARAMS ((rtx)); | |
231 | ||
232 | extern int c4x_H_constant PARAMS ((rtx)); | |
233 | ||
234 | extern int c4x_I_constant PARAMS ((rtx)); | |
235 | ||
236 | extern int c4x_J_constant PARAMS ((rtx)); | |
237 | ||
238 | extern int c4x_L_constant PARAMS ((rtx)); | |
239 | ||
240 | extern int c4x_Q_constraint PARAMS ((rtx)); | |
241 | ||
242 | extern int c4x_R_constraint PARAMS ((rtx)); | |
243 | ||
244 | extern int c4x_S_constraint PARAMS ((rtx)); | |
245 | ||
246 | extern int c4x_T_constraint PARAMS ((rtx)); | |
247 | ||
248 | extern int c4x_U_constraint PARAMS ((rtx)); | |
249 | ||
6cc56c00 | 250 | extern void c4x_emit_libcall PARAMS ((rtx, enum rtx_code, |
27529606 | 251 | enum machine_mode, |
252 | enum machine_mode, int, rtx *)); | |
253 | ||
6cc56c00 | 254 | extern void c4x_emit_libcall3 PARAMS ((rtx, enum rtx_code, |
27529606 | 255 | enum machine_mode, rtx *)); |
256 | ||
6cc56c00 | 257 | extern void c4x_emit_libcall_mulhi PARAMS ((rtx, enum rtx_code, |
27529606 | 258 | enum machine_mode, rtx *)); |
259 | ||
260 | extern int c4x_emit_move_sequence PARAMS ((rtx *, enum machine_mode)); | |
261 | ||
262 | extern int legitimize_operands PARAMS ((enum rtx_code, rtx *, | |
263 | enum machine_mode)); | |
264 | ||
265 | extern int valid_operands PARAMS ((enum rtx_code, rtx *, enum machine_mode)); | |
266 | ||
267 | extern int valid_parallel_load_store PARAMS ((rtx *, enum machine_mode)); | |
268 | ||
269 | extern int valid_parallel_operands_4 PARAMS ((rtx *, enum machine_mode)); | |
270 | ||
271 | extern int valid_parallel_operands_5 PARAMS ((rtx *, enum machine_mode)); | |
272 | ||
273 | extern int valid_parallel_operands_6 PARAMS ((rtx *, enum machine_mode)); | |
274 | ||
1f3233d1 | 275 | extern GTY(()) rtx smulhi3_libfunc; |
276 | extern GTY(()) rtx umulhi3_libfunc; | |
277 | extern GTY(()) rtx fix_truncqfhi2_libfunc; | |
278 | extern GTY(()) rtx fixuns_truncqfhi2_libfunc; | |
279 | extern GTY(()) rtx fix_trunchfhi2_libfunc; | |
280 | extern GTY(()) rtx fixuns_trunchfhi2_libfunc; | |
281 | extern GTY(()) rtx floathiqf2_libfunc; | |
282 | extern GTY(()) rtx floatunshiqf2_libfunc; | |
283 | extern GTY(()) rtx floathihf2_libfunc; | |
284 | extern GTY(()) rtx floatunshihf2_libfunc; | |
285 | ||
286 | extern GTY(()) rtx c4x_compare_op0; /* Operand 0 for comparisons. */ | |
287 | extern GTY(()) rtx c4x_compare_op1; /* Operand 1 for comparisons. */ | |
792db0c2 | 288 | |
27529606 | 289 | #endif /* RTX_CODE */ |
290 | ||
792db0c2 | 291 | /* Smallest class containing REGNO. */ |
30bf3329 | 292 | extern enum reg_class c4x_regclass_map[FIRST_PSEUDO_REGISTER]; |
293 | extern enum machine_mode c4x_caller_save_map[FIRST_PSEUDO_REGISTER]; | |
792db0c2 | 294 | |
295 | extern int c4x_rpts_cycles; /* Max cycles for RPTS. */ | |
296 | extern int c4x_cpu_version; /* Cpu version C30/31/32/40/44. */ | |
1fcd08b1 | 297 | |
be61f6d4 | 298 | #ifdef GCC_C_PRAGMA_H |
1fcd08b1 | 299 | extern void c4x_pr_CODE_SECTION PARAMS ((cpp_reader *)); |
300 | extern void c4x_pr_DATA_SECTION PARAMS ((cpp_reader *)); | |
301 | extern void c4x_pr_FUNC_IS_PURE PARAMS ((cpp_reader *)); | |
302 | extern void c4x_pr_FUNC_NEVER_RETURNS PARAMS ((cpp_reader *)); | |
303 | extern void c4x_pr_INTERRUPT PARAMS ((cpp_reader *)); | |
304 | extern void c4x_pr_ignored PARAMS ((cpp_reader *)); | |
cb991abf | 305 | extern void c4x_init_pragma PARAMS ((int (*) (tree *))); |
1fcd08b1 | 306 | #endif |
307 | ||
1f3233d1 | 308 | extern GTY(()) tree code_tree; |
309 | extern GTY(()) tree data_tree; | |
310 | extern GTY(()) tree pure_tree; | |
311 | extern GTY(()) tree noreturn_tree; | |
312 | extern GTY(()) tree interrupt_tree; | |
313 | ||
2a281353 | 314 | #endif /* ! GCC_C4X_PROTOS_H */ |