OSDN Git Service

alloc-pool.c, c-lex.c, c-pragma.h, c-semantics.c, cfghooks.c,
[pf3gnuchains/gcc-fork.git] / gcc / config / c4x / c4x-protos.h
1 /* Definitions of target machine for GNU compiler.  TMS320C[34]x
2    Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2003, 2004
3    Free Software Foundation, Inc.
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 GCC.
9
10    GCC 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    GCC 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 GCC; 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
25 #ifndef GCC_C4X_PROTOS_H
26 #define GCC_C4X_PROTOS_H
27
28 extern void c4x_override_options (void);
29
30 extern void c4x_optimization_options (int, int);
31
32 extern void c4x_output_ascii (FILE *, const char *, int);
33
34 extern int c4x_interrupt_function_p (void);
35
36 extern void c4x_expand_prologue (void);
37
38 extern void c4x_expand_epilogue (void);
39
40 extern int c4x_null_epilogue_p (void);
41
42 extern void c4x_global_label (const char *);
43
44 extern void c4x_external_ref (const char *);
45
46 #ifdef TREE_CODE
47 extern void c4x_function_arg_advance (CUMULATIVE_ARGS *, 
48                                       enum machine_mode, tree, int);
49
50 extern struct rtx_def *c4x_function_arg (CUMULATIVE_ARGS *,
51                                          enum machine_mode, tree, int);
52
53 #endif /* TREE_CODE */
54
55
56 #if defined(RTX_CODE) && defined(TREE_CODE)
57 extern void c4x_init_cumulative_args (CUMULATIVE_ARGS *c, tree, rtx);
58
59 extern struct rtx_def *c4x_va_arg (tree, tree);
60
61 extern rtx c4x_expand_builtin (tree, rtx, rtx, enum machine_mode, int);
62
63 extern void c4x_init_builtins (void);
64
65 #endif /* TREE_CODE and RTX_CODE*/
66
67
68 #ifdef RTX_CODE
69 extern struct rtx_def *c4x_gen_compare_reg (enum rtx_code, rtx, rtx);
70
71 extern int c4x_legitimate_address_p (enum machine_mode, rtx, int);
72
73 extern int c4x_hard_regno_mode_ok (unsigned int, enum machine_mode);
74
75 extern int c4x_hard_regno_rename_ok (unsigned int, unsigned int);
76
77 extern struct rtx_def *c4x_legitimize_address (rtx, enum machine_mode);
78
79 extern void c4x_print_operand (FILE *, rtx, int);
80
81 extern void c4x_print_operand_address (FILE *, rtx);
82
83 extern enum reg_class c4x_preferred_reload_class (rtx, enum reg_class);
84
85 extern struct rtx_def *c4x_operand_subword (rtx, int, int, enum machine_mode);
86
87 extern char *c4x_output_cbranch (const char *, rtx);
88
89 extern int c4x_label_conflict (rtx, rtx, rtx);
90
91 extern int c4x_address_conflict (rtx, rtx, int, int);
92
93 extern void c4x_rptb_insert (rtx insn);
94
95 extern int c4x_rptb_nop_p (rtx);
96
97 extern int c4x_rptb_rpts_p (rtx, rtx);
98
99 extern int c4x_check_laj_p (rtx);
100
101 extern int c4x_autoinc_operand (rtx, enum machine_mode);
102
103 extern int any_operand (rtx, enum machine_mode);
104
105 extern int fp_zero_operand (rtx, enum machine_mode);
106
107 extern int const_operand (rtx, enum machine_mode);
108
109 extern int stik_const_operand (rtx, enum machine_mode);
110
111 extern int not_const_operand (rtx, enum machine_mode);
112
113 extern int parallel_operand (rtx, enum machine_mode);
114
115 extern int reg_or_const_operand (rtx, enum machine_mode);
116
117 extern int reg_operand (rtx, enum machine_mode);
118
119 extern int mixed_subreg_operand (rtx, enum machine_mode);
120
121 extern int reg_imm_operand (rtx, enum machine_mode);
122
123 extern int r0r1_reg_operand (rtx, enum machine_mode);
124
125 extern int r2r3_reg_operand (rtx, enum machine_mode);
126
127 extern int ext_low_reg_operand (rtx, enum machine_mode);
128
129 extern int ext_reg_operand (rtx, enum machine_mode);
130
131 extern int std_reg_operand (rtx, enum machine_mode);
132
133 extern int std_or_reg_operand (rtx, enum machine_mode);
134
135 extern int dst_operand (rtx, enum machine_mode);
136
137 extern int src_operand (rtx, enum machine_mode);
138
139 extern int src_hi_operand (rtx, enum machine_mode);
140
141 extern int lsrc_operand (rtx, enum machine_mode);
142
143 extern int tsrc_operand (rtx, enum machine_mode);
144
145 extern int nonimmediate_src_operand (rtx, enum machine_mode);
146
147 extern int nonimmediate_lsrc_operand (rtx, enum machine_mode);
148
149 extern int addr_reg_operand (rtx, enum machine_mode);
150
151 extern int index_reg_operand (rtx, enum machine_mode);
152
153 extern int dp_reg_operand (rtx, enum machine_mode);
154
155 extern int sp_reg_operand (rtx, enum machine_mode);
156
157 extern int rc_reg_operand (rtx, enum machine_mode);
158
159 extern int st_reg_operand (rtx, enum machine_mode);
160
161 extern int symbolic_address_operand (rtx, enum machine_mode);
162
163 extern int ar0_reg_operand (rtx, enum machine_mode);
164
165 extern int ar0_mem_operand (rtx, enum machine_mode);
166
167 extern int ar1_reg_operand (rtx, enum machine_mode);
168
169 extern int ar1_mem_operand (rtx, enum machine_mode);
170
171 extern int ar2_reg_operand (rtx, enum machine_mode);
172
173 extern int ar2_mem_operand (rtx, enum machine_mode);
174
175 extern int ar3_reg_operand (rtx, enum machine_mode);
176
177 extern int ar3_mem_operand (rtx, enum machine_mode);
178
179 extern int ar4_reg_operand (rtx, enum machine_mode);
180
181 extern int ar4_mem_operand (rtx, enum machine_mode);
182
183 extern int ar5_reg_operand (rtx, enum machine_mode);
184
185 extern int ar5_mem_operand (rtx, enum machine_mode);
186
187 extern int ar6_reg_operand (rtx, enum machine_mode);
188
189 extern int ar6_mem_operand (rtx, enum machine_mode);
190
191 extern int ar7_reg_operand (rtx, enum machine_mode);
192
193 extern int ar7_mem_operand (rtx, enum machine_mode);
194
195 extern int ir0_reg_operand (rtx, enum machine_mode);
196
197 extern int ir0_mem_operand (rtx, enum machine_mode);
198
199 extern int ir1_reg_operand (rtx, enum machine_mode);
200
201 extern int ir1_mem_operand (rtx, enum machine_mode);
202
203 extern int group1_reg_operand (rtx, enum machine_mode);
204
205 extern int group1_mem_operand (rtx, enum machine_mode);
206
207 extern int arx_reg_operand (rtx, enum machine_mode);
208
209 extern int call_address_operand (rtx, enum machine_mode);
210
211 extern int par_ind_operand (rtx, enum machine_mode);
212
213 extern int not_rc_reg (rtx, enum machine_mode);
214
215 extern int not_modify_reg (rtx, enum machine_mode);
216
217 extern int c4x_shiftable_constant (rtx);
218
219 extern int c4x_H_constant (rtx);
220
221 extern int c4x_I_constant (rtx);
222
223 extern int c4x_J_constant (rtx);
224
225 extern int c4x_L_constant (rtx);
226
227 extern int c4x_Q_constraint (rtx);
228
229 extern int c4x_R_constraint (rtx);
230
231 extern int c4x_S_constraint (rtx);
232
233 extern int c4x_T_constraint (rtx);
234
235 extern int c4x_U_constraint (rtx);
236
237 extern void c4x_emit_libcall (rtx, enum rtx_code, enum machine_mode,
238                               enum machine_mode, int, rtx *);
239
240 extern void c4x_emit_libcall3 (rtx, enum rtx_code, enum machine_mode, rtx *);
241
242 extern void c4x_emit_libcall_mulhi (rtx, enum rtx_code,
243                                     enum machine_mode, rtx *);
244
245 extern int c4x_emit_move_sequence (rtx *, enum machine_mode);
246
247 extern int legitimize_operands (enum rtx_code, rtx *, enum machine_mode);
248
249 extern int valid_operands (enum rtx_code, rtx *, enum machine_mode);
250
251 extern int valid_parallel_load_store (rtx *, enum machine_mode);
252
253 extern int valid_parallel_operands_4 (rtx *, enum machine_mode);
254
255 extern int valid_parallel_operands_5 (rtx *, enum machine_mode);
256
257 extern int valid_parallel_operands_6 (rtx *, enum machine_mode);
258
259 extern GTY(()) rtx smulhi3_libfunc;
260 extern GTY(()) rtx umulhi3_libfunc;
261 extern GTY(()) rtx fix_truncqfhi2_libfunc;
262 extern GTY(()) rtx fixuns_truncqfhi2_libfunc;
263 extern GTY(()) rtx fix_trunchfhi2_libfunc;
264 extern GTY(()) rtx fixuns_trunchfhi2_libfunc;
265 extern GTY(()) rtx floathiqf2_libfunc;
266 extern GTY(()) rtx floatunshiqf2_libfunc;
267 extern GTY(()) rtx floathihf2_libfunc;
268 extern GTY(()) rtx floatunshihf2_libfunc;
269
270 extern GTY(()) rtx c4x_compare_op0;     /* Operand 0 for comparisons.  */
271 extern GTY(()) rtx c4x_compare_op1;     /* Operand 1 for comparisons.  */
272
273 #endif /* RTX_CODE */
274
275 /* Smallest class containing REGNO.  */
276 extern enum reg_class c4x_regclass_map[FIRST_PSEUDO_REGISTER];
277 extern enum machine_mode c4x_caller_save_map[FIRST_PSEUDO_REGISTER];
278
279 extern int c4x_rpts_cycles;             /* Max cycles for RPTS.  */
280 extern int c4x_cpu_version;             /* Cpu version C30/31/32/40/44.  */
281
282 extern void c4x_pr_CODE_SECTION (struct cpp_reader *);
283 extern void c4x_pr_DATA_SECTION (struct cpp_reader *);
284 extern void c4x_pr_FUNC_IS_PURE (struct cpp_reader *);
285 extern void c4x_pr_FUNC_NEVER_RETURNS (struct cpp_reader *);
286 extern void c4x_pr_INTERRUPT (struct cpp_reader *);
287 extern void c4x_pr_ignored (struct cpp_reader *);
288 extern void c4x_init_pragma (int (*) (tree *));
289
290 extern GTY(()) tree code_tree;
291 extern GTY(()) tree data_tree;
292 extern GTY(()) tree pure_tree;
293 extern GTY(()) tree noreturn_tree;
294 extern GTY(()) tree interrupt_tree;
295
296 #endif /* ! GCC_C4X_PROTOS_H */