1 /* Definitions of target machine for GNU compiler. TMS320C[34]x
2 Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999
3 Free Software Foundation, Inc.
5 Contributed by Michael Hayes (m.hayes@elec.canterbury.ac.nz)
6 and Herman Ten Brugge (Haj.Ten.Brugge@net.HCC.nl).
8 This file is part of GNU CC.
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)
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.
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. */
25 #ifndef GCC_C4X_PROTOS_H
26 #define GCC_C4X_PROTOS_H
28 extern void c4x_override_options PARAMS ((void));
30 extern void c4x_optimization_options PARAMS ((int, int));
32 extern void c4x_output_ascii PARAMS ((FILE *, const char *, int));
34 extern int c4x_interrupt_function_p PARAMS ((void));
36 extern void c4x_expand_prologue PARAMS ((void));
38 extern void c4x_expand_epilogue PARAMS ((void));
40 extern int c4x_null_epilogue_p PARAMS ((void));
42 extern void c4x_global_label (const char *);
44 extern void c4x_external_ref (const char *);
46 extern void c4x_file_end (FILE *);
49 extern void c4x_function_arg_advance PARAMS ((CUMULATIVE_ARGS *,
50 enum machine_mode, tree, int));
52 extern struct rtx_def *c4x_function_arg PARAMS ((CUMULATIVE_ARGS *,
53 enum machine_mode, tree,
56 extern void c4x_encode_section_info PARAMS ((tree));
58 #endif /* TREE_CODE */
61 #if defined(RTX_CODE) && defined(TREE_CODE)
62 extern void c4x_init_cumulative_args PARAMS ((CUMULATIVE_ARGS *c, tree, rtx));
64 extern void c4x_va_start PARAMS ((int, tree, rtx));
66 extern struct rtx_def *c4x_va_arg PARAMS ((tree, tree));
68 extern rtx c4x_expand_builtin PARAMS ((tree, rtx, rtx,
69 enum machine_mode, int));
71 extern void c4x_init_builtins PARAMS ((void));
73 #endif /* TREE_CODE and RTX_CODE*/
77 extern struct rtx_def *c4x_gen_compare_reg PARAMS ((enum rtx_code, rtx, rtx));
79 extern int c4x_check_legit_addr PARAMS ((enum machine_mode, rtx, int));
81 extern int c4x_hard_regno_mode_ok PARAMS ((unsigned int, enum machine_mode));
83 extern int c4x_hard_regno_rename_ok PARAMS ((unsigned int, unsigned int));
85 extern struct rtx_def *c4x_legitimize_address PARAMS ((rtx,
88 extern int c4x_address_cost PARAMS ((rtx));
90 extern void c4x_print_operand PARAMS ((FILE *, rtx, int));
92 extern void c4x_print_operand_address PARAMS ((FILE *, rtx));
94 extern enum reg_class c4x_preferred_reload_class PARAMS ((rtx,
97 extern struct rtx_def *c4x_operand_subword PARAMS ((rtx, int, int,
100 extern char *c4x_output_cbranch PARAMS ((const char *, rtx));
102 extern int c4x_label_conflict PARAMS ((rtx, rtx, rtx));
104 extern int c4x_address_conflict PARAMS ((rtx, rtx, int, int));
106 extern void c4x_process_after_reload PARAMS ((rtx));
108 extern void c4x_rptb_insert PARAMS ((rtx insn));
110 extern int c4x_rptb_nop_p PARAMS ((rtx));
112 extern int c4x_rptb_rpts_p PARAMS ((rtx, rtx));
114 extern int c4x_check_laj_p PARAMS ((rtx));
116 extern int c4x_autoinc_operand PARAMS ((rtx, enum machine_mode));
118 extern int any_operand PARAMS ((rtx, enum machine_mode));
120 extern int fp_zero_operand PARAMS ((rtx, enum machine_mode));
122 extern int const_operand PARAMS ((rtx, enum machine_mode));
124 extern int stik_const_operand PARAMS ((rtx, enum machine_mode));
126 extern int not_const_operand PARAMS ((rtx, enum machine_mode));
128 extern int parallel_operand PARAMS ((rtx, enum machine_mode));
130 extern int reg_or_const_operand PARAMS ((rtx, enum machine_mode));
132 extern int reg_operand PARAMS ((rtx, enum machine_mode));
134 extern int mixed_subreg_operand PARAMS ((rtx, enum machine_mode));
136 extern int reg_imm_operand PARAMS ((rtx, enum machine_mode));
138 extern int r0r1_reg_operand PARAMS ((rtx, enum machine_mode));
140 extern int r2r3_reg_operand PARAMS ((rtx, enum machine_mode));
142 extern int ext_low_reg_operand PARAMS ((rtx, enum machine_mode));
144 extern int ext_reg_operand PARAMS ((rtx, enum machine_mode));
146 extern int std_reg_operand PARAMS ((rtx, enum machine_mode));
148 extern int std_or_reg_operand PARAMS ((rtx, enum machine_mode));
150 extern int dst_operand PARAMS ((rtx, enum machine_mode));
152 extern int src_operand PARAMS ((rtx, enum machine_mode));
154 extern int src_hi_operand PARAMS ((rtx, enum machine_mode));
156 extern int lsrc_operand PARAMS ((rtx, enum machine_mode));
158 extern int tsrc_operand PARAMS ((rtx, enum machine_mode));
160 extern int addr_reg_operand PARAMS ((rtx, enum machine_mode));
162 extern int index_reg_operand PARAMS ((rtx, enum machine_mode));
164 extern int dp_reg_operand PARAMS ((rtx, enum machine_mode));
166 extern int sp_reg_operand PARAMS ((rtx, enum machine_mode));
168 extern int rc_reg_operand PARAMS ((rtx, enum machine_mode));
170 extern int st_reg_operand PARAMS ((rtx, enum machine_mode));
172 extern int symbolic_address_operand PARAMS ((rtx, enum machine_mode));
174 extern int ar0_reg_operand PARAMS ((rtx, enum machine_mode));
176 extern int ar0_mem_operand PARAMS ((rtx, enum machine_mode));
178 extern int ar1_reg_operand PARAMS ((rtx, enum machine_mode));
180 extern int ar1_mem_operand PARAMS ((rtx, enum machine_mode));
182 extern int ar2_reg_operand PARAMS ((rtx, enum machine_mode));
184 extern int ar2_mem_operand PARAMS ((rtx, enum machine_mode));
186 extern int ar3_reg_operand PARAMS ((rtx, enum machine_mode));
188 extern int ar3_mem_operand PARAMS ((rtx, enum machine_mode));
190 extern int ar4_reg_operand PARAMS ((rtx, enum machine_mode));
192 extern int ar4_mem_operand PARAMS ((rtx, enum machine_mode));
194 extern int ar5_reg_operand PARAMS ((rtx, enum machine_mode));
196 extern int ar5_mem_operand PARAMS ((rtx, enum machine_mode));
198 extern int ar6_reg_operand PARAMS ((rtx, enum machine_mode));
200 extern int ar6_mem_operand PARAMS ((rtx, enum machine_mode));
202 extern int ar7_reg_operand PARAMS ((rtx, enum machine_mode));
204 extern int ar7_mem_operand PARAMS ((rtx, enum machine_mode));
206 extern int ir0_reg_operand PARAMS ((rtx, enum machine_mode));
208 extern int ir0_mem_operand PARAMS ((rtx, enum machine_mode));
210 extern int ir1_reg_operand PARAMS ((rtx, enum machine_mode));
212 extern int ir1_mem_operand PARAMS ((rtx, enum machine_mode));
214 extern int group1_reg_operand PARAMS ((rtx, enum machine_mode));
216 extern int group1_mem_operand PARAMS ((rtx, enum machine_mode));
218 extern int arx_reg_operand PARAMS ((rtx, enum machine_mode));
220 extern int call_address_operand PARAMS ((rtx, enum machine_mode));
222 extern int par_ind_operand PARAMS ((rtx, enum machine_mode));
224 extern int not_rc_reg PARAMS ((rtx, enum machine_mode));
226 extern int not_modify_reg PARAMS ((rtx, enum machine_mode));
228 extern int c4x_shiftable_constant PARAMS ((rtx));
230 extern int c4x_H_constant PARAMS ((rtx));
232 extern int c4x_I_constant PARAMS ((rtx));
234 extern int c4x_J_constant PARAMS ((rtx));
236 extern int c4x_L_constant PARAMS ((rtx));
238 extern int c4x_Q_constraint PARAMS ((rtx));
240 extern int c4x_R_constraint PARAMS ((rtx));
242 extern int c4x_S_constraint PARAMS ((rtx));
244 extern int c4x_T_constraint PARAMS ((rtx));
246 extern int c4x_U_constraint PARAMS ((rtx));
248 extern void c4x_emit_libcall PARAMS ((rtx, enum rtx_code,
250 enum machine_mode, int, rtx *));
252 extern void c4x_emit_libcall3 PARAMS ((rtx, enum rtx_code,
253 enum machine_mode, rtx *));
255 extern void c4x_emit_libcall_mulhi PARAMS ((rtx, enum rtx_code,
256 enum machine_mode, rtx *));
258 extern int c4x_emit_move_sequence PARAMS ((rtx *, enum machine_mode));
260 extern int legitimize_operands PARAMS ((enum rtx_code, rtx *,
263 extern int valid_operands PARAMS ((enum rtx_code, rtx *, enum machine_mode));
265 extern int valid_parallel_load_store PARAMS ((rtx *, enum machine_mode));
267 extern int valid_parallel_operands_4 PARAMS ((rtx *, enum machine_mode));
269 extern int valid_parallel_operands_5 PARAMS ((rtx *, enum machine_mode));
271 extern int valid_parallel_operands_6 PARAMS ((rtx *, enum machine_mode));
273 extern rtx smulhi3_libfunc;
274 extern rtx umulhi3_libfunc;
275 extern rtx fix_truncqfhi2_libfunc;
276 extern rtx fixuns_truncqfhi2_libfunc;
277 extern rtx fix_trunchfhi2_libfunc;
278 extern rtx fixuns_trunchfhi2_libfunc;
279 extern rtx floathiqf2_libfunc;
280 extern rtx floatunshiqf2_libfunc;
281 extern rtx floathihf2_libfunc;
282 extern rtx floatunshihf2_libfunc;
284 extern struct rtx_def *c4x_compare_op0; /* Operand 0 for comparisons. */
285 extern struct rtx_def *c4x_compare_op1; /* Operand 1 for comparisons. */
287 #endif /* RTX_CODE */
289 /* Smallest class containing REGNO. */
290 extern enum reg_class c4x_regclass_map[];
291 extern enum machine_mode c4x_caller_save_map[];
293 extern int c4x_rpts_cycles; /* Max cycles for RPTS. */
294 extern int c4x_cpu_version; /* Cpu version C30/31/32/40/44. */
296 #ifdef GCC_C_PRAGMA_H
297 extern void c4x_pr_CODE_SECTION PARAMS ((cpp_reader *));
298 extern void c4x_pr_DATA_SECTION PARAMS ((cpp_reader *));
299 extern void c4x_pr_FUNC_IS_PURE PARAMS ((cpp_reader *));
300 extern void c4x_pr_FUNC_NEVER_RETURNS PARAMS ((cpp_reader *));
301 extern void c4x_pr_INTERRUPT PARAMS ((cpp_reader *));
302 extern void c4x_pr_ignored PARAMS ((cpp_reader *));
303 extern void c4x_init_pragma PARAMS ((int (*) (tree *)));
304 extern tree code_tree, data_tree, pure_tree, noreturn_tree, interrupt_tree;
307 #endif /* ! GCC_C4X_PROTOS_H */