1 /* Definitions of target machine for GNU compiler.  TMS320C[34]x
2    Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2003, 2004, 2005
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, 51 Franklin Street, Fifth Floor,
23    Boston, MA 02110-1301, 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 rtx c4x_expand_builtin (tree, rtx, rtx, enum machine_mode, int);
60 
61 extern void c4x_init_builtins (void);
62 
63 #endif /* TREE_CODE and RTX_CODE*/
64 
65 
66 #ifdef RTX_CODE
67 extern struct rtx_def *c4x_gen_compare_reg (enum rtx_code, rtx, rtx);
68 
69 extern int c4x_legitimate_address_p (enum machine_mode, rtx, int);
70 
71 extern int c4x_hard_regno_mode_ok (unsigned int, enum machine_mode);
72 
73 extern int c4x_hard_regno_rename_ok (unsigned int, unsigned int);
74 
75 extern struct rtx_def *c4x_legitimize_address (rtx, enum machine_mode);
76 
77 extern void c4x_print_operand (FILE *, rtx, int);
78 
79 extern void c4x_print_operand_address (FILE *, rtx);
80 
81 extern enum reg_class c4x_preferred_reload_class (rtx, enum reg_class);
82 
83 extern struct rtx_def *c4x_operand_subword (rtx, int, int, enum machine_mode);
84 
85 extern char *c4x_output_cbranch (const char *, rtx);
86 
87 extern int c4x_label_conflict (rtx, rtx, rtx);
88 
89 extern int c4x_address_conflict (rtx, rtx, int, int);
90 
91 extern void c4x_rptb_insert (rtx insn);
92 
93 extern int c4x_rptb_nop_p (rtx);
94 
95 extern int c4x_rptb_rpts_p (rtx, rtx);
96 
97 extern int c4x_check_laj_p (rtx);
98 
99 extern int c4x_autoinc_operand (rtx, enum machine_mode);
100 
101 extern int reg_or_const_operand (rtx, enum machine_mode);
102 
103 extern int mixed_subreg_operand (rtx, enum machine_mode);
104 
105 extern int reg_imm_operand (rtx, enum machine_mode);
106 
107 extern int ar0_reg_operand (rtx, enum machine_mode);
108 
109 extern int ar0_mem_operand (rtx, enum machine_mode);
110 
111 extern int ar1_reg_operand (rtx, enum machine_mode);
112 
113 extern int ar1_mem_operand (rtx, enum machine_mode);
114 
115 extern int ar2_reg_operand (rtx, enum machine_mode);
116 
117 extern int ar2_mem_operand (rtx, enum machine_mode);
118 
119 extern int ar3_reg_operand (rtx, enum machine_mode);
120 
121 extern int ar3_mem_operand (rtx, enum machine_mode);
122 
123 extern int ar4_reg_operand (rtx, enum machine_mode);
124 
125 extern int ar4_mem_operand (rtx, enum machine_mode);
126 
127 extern int ar5_reg_operand (rtx, enum machine_mode);
128 
129 extern int ar5_mem_operand (rtx, enum machine_mode);
130 
131 extern int ar6_reg_operand (rtx, enum machine_mode);
132 
133 extern int ar6_mem_operand (rtx, enum machine_mode);
134 
135 extern int ar7_reg_operand (rtx, enum machine_mode);
136 
137 extern int ar7_mem_operand (rtx, enum machine_mode);
138 
139 extern int ir0_reg_operand (rtx, enum machine_mode);
140 
141 extern int ir0_mem_operand (rtx, enum machine_mode);
142 
143 extern int ir1_reg_operand (rtx, enum machine_mode);
144 
145 extern int ir1_mem_operand (rtx, enum machine_mode);
146 
147 extern int group1_reg_operand (rtx, enum machine_mode);
148 
149 extern int group1_mem_operand (rtx, enum machine_mode);
150 
151 extern int arx_reg_operand (rtx, enum machine_mode);
152 
153 extern int not_rc_reg (rtx, enum machine_mode);
154 
155 extern int not_modify_reg (rtx, enum machine_mode);
156 
157 extern int c4x_shiftable_constant (rtx);
158 
159 extern int c4x_immed_float_p (rtx);
160 
161 extern int c4x_a_register (rtx);
162 
163 extern int c4x_x_register (rtx);
164 
165 extern int c4x_H_constant (rtx);
166 
167 extern int c4x_I_constant (rtx);
168 
169 extern int c4x_J_constant (rtx);
170 
171 extern int c4x_K_constant (rtx);
172 
173 extern int c4x_L_constant (rtx);
174 
175 extern int c4x_N_constant (rtx);
176 
177 extern int c4x_O_constant (rtx);
178 
179 extern int c4x_Q_constraint (rtx);
180 
181 extern int c4x_R_constraint (rtx);
182 
183 extern int c4x_S_indirect (rtx);
184 
185 extern int c4x_S_constraint (rtx);
186 
187 extern int c4x_T_constraint (rtx);
188 
189 extern int c4x_U_constraint (rtx);
190 
191 extern void c4x_emit_libcall (rtx, enum rtx_code, enum machine_mode,
192 			      enum machine_mode, int, rtx *);
193 
194 extern void c4x_emit_libcall3 (rtx, enum rtx_code, enum machine_mode, rtx *);
195 
196 extern void c4x_emit_libcall_mulhi (rtx, enum rtx_code,
197 				    enum machine_mode, rtx *);
198 
199 extern int c4x_emit_move_sequence (rtx *, enum machine_mode);
200 
201 extern int legitimize_operands (enum rtx_code, rtx *, enum machine_mode);
202 
203 extern int valid_operands (enum rtx_code, rtx *, enum machine_mode);
204 
205 extern int valid_parallel_load_store (rtx *, enum machine_mode);
206 
207 extern int valid_parallel_operands_4 (rtx *, enum machine_mode);
208 
209 extern int valid_parallel_operands_5 (rtx *, enum machine_mode);
210 
211 extern int valid_parallel_operands_6 (rtx *, enum machine_mode);
212 
213 extern GTY(()) rtx smulhi3_libfunc;
214 extern GTY(()) rtx umulhi3_libfunc;
215 extern GTY(()) rtx fix_truncqfhi2_libfunc;
216 extern GTY(()) rtx fixuns_truncqfhi2_libfunc;
217 extern GTY(()) rtx fix_trunchfhi2_libfunc;
218 extern GTY(()) rtx fixuns_trunchfhi2_libfunc;
219 extern GTY(()) rtx floathiqf2_libfunc;
220 extern GTY(()) rtx floatunshiqf2_libfunc;
221 extern GTY(()) rtx floathihf2_libfunc;
222 extern GTY(()) rtx floatunshihf2_libfunc;
223 
224 extern GTY(()) rtx c4x_compare_op0;	/* Operand 0 for comparisons.  */
225 extern GTY(()) rtx c4x_compare_op1;	/* Operand 1 for comparisons.  */
226 
227 #endif /* RTX_CODE */
228 
229 /* Smallest class containing REGNO.  */
230 extern enum reg_class c4x_regclass_map[FIRST_PSEUDO_REGISTER];
231 extern enum machine_mode c4x_caller_save_map[FIRST_PSEUDO_REGISTER];
232 
233 extern void c4x_pr_CODE_SECTION (struct cpp_reader *);
234 extern void c4x_pr_DATA_SECTION (struct cpp_reader *);
235 extern void c4x_pr_FUNC_IS_PURE (struct cpp_reader *);
236 extern void c4x_pr_FUNC_NEVER_RETURNS (struct cpp_reader *);
237 extern void c4x_pr_INTERRUPT (struct cpp_reader *);
238 extern void c4x_pr_ignored (struct cpp_reader *);
239 extern void c4x_init_pragma (int (*) (tree *));
240 
241 extern GTY(()) tree code_tree;
242 extern GTY(()) tree data_tree;
243 extern GTY(()) tree pure_tree;
244 extern GTY(()) tree noreturn_tree;
245 extern GTY(()) tree interrupt_tree;
246 
247 #endif /* ! GCC_C4X_PROTOS_H */
248