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