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 extern void c4x_override_options
PARAMS ((void));
27 extern void c4x_optimization_options
PARAMS ((int, int));
29 extern void c4x_output_ascii
PARAMS ((FILE *, const char *, int));
31 extern int c4x_interrupt_function_p
PARAMS ((void));
33 extern void c4x_expand_prologue
PARAMS ((void));
35 extern void c4x_expand_epilogue
PARAMS ((void));
37 extern int c4x_null_epilogue_p
PARAMS ((void));
39 extern int c4x_handle_pragma
PARAMS ((int (* p_getc
) (void),
40 void (* p_ungetc
) (int),
43 extern void c4x_global_label (const char *);
45 extern void c4x_external_ref (const char *);
47 extern void c4x_file_end (FILE *);
50 extern void c4x_set_default_attributes
PARAMS ((tree
, tree
*));
52 extern void c4x_function_arg_advance
PARAMS ((CUMULATIVE_ARGS
*,
53 enum machine_mode
, tree
, int));
55 extern struct rtx_def
*c4x_function_arg
PARAMS ((CUMULATIVE_ARGS
*,
56 enum machine_mode
, tree
,
59 extern void c4x_encode_section_info
PARAMS ((tree
));
61 extern int c4x_valid_type_attribute_p
PARAMS ((tree
, tree
, tree
, tree
));
62 #endif /* TREE_CODE */
65 #if defined(RTX_CODE) && defined(TREE_CODE)
66 extern void c4x_init_cumulative_args
PARAMS ((CUMULATIVE_ARGS
*c
, tree
, rtx
));
68 extern void c4x_va_start
PARAMS ((int, tree
, rtx
));
70 extern struct rtx_def
*c4x_va_arg
PARAMS ((tree
, tree
));
71 #endif /* TREE_CODE and RTX_CODE*/
75 extern struct rtx_def
*c4x_gen_compare_reg
PARAMS ((enum rtx_code
, rtx
, rtx
));
77 extern int c4x_check_legit_addr
PARAMS ((enum machine_mode
, rtx
, int));
79 extern int c4x_hard_regno_mode_ok
PARAMS ((unsigned int, enum machine_mode
));
81 extern struct rtx_def
*c4x_legitimize_address
PARAMS ((rtx
,
84 extern struct rtx_def
*c4x_legitimize_reload_address
PARAMS ((rtx
, enum machine_mode
, rtx
));
86 extern int c4x_address_cost
PARAMS ((rtx
));
88 extern void c4x_print_operand
PARAMS ((FILE *, rtx
, int));
90 extern void c4x_print_operand_address
PARAMS ((FILE *, rtx
));
92 extern enum reg_class c4x_preferred_reload_class
PARAMS ((rtx
,
95 extern struct rtx_def
*c4x_operand_subword
PARAMS ((rtx
, int, int,
98 extern char *c4x_output_cbranch
PARAMS ((const char *, rtx
));
100 extern int c4x_label_conflict
PARAMS ((rtx
, rtx
, rtx
));
102 extern int c4x_address_conflict
PARAMS ((rtx
, rtx
, int, int));
104 extern int c4x_adjust_cost
PARAMS ((rtx
, rtx
, rtx
, 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_autoinc_operand
PARAMS ((rtx
, enum machine_mode
));
116 extern int any_operand
PARAMS ((rtx
, enum machine_mode
));
118 extern int fp_zero_operand
PARAMS ((rtx
, enum machine_mode
));
120 extern int const_operand
PARAMS ((rtx
, enum machine_mode
));
122 extern int stik_const_operand
PARAMS ((rtx
, enum machine_mode
));
124 extern int not_const_operand
PARAMS ((rtx
, enum machine_mode
));
126 extern int parallel_operand
PARAMS ((rtx
, enum machine_mode
));
128 extern int reg_or_const_operand
PARAMS ((rtx
, enum machine_mode
));
130 extern int reg_operand
PARAMS ((rtx
, enum machine_mode
));
132 extern int mixed_subreg_operand
PARAMS ((rtx
, enum machine_mode
));
134 extern int reg_imm_operand
PARAMS ((rtx
, enum machine_mode
));
136 extern int r0r1_reg_operand
PARAMS ((rtx
, enum machine_mode
));
138 extern int r2r3_reg_operand
PARAMS ((rtx
, enum machine_mode
));
140 extern int ext_low_reg_operand
PARAMS ((rtx
, enum machine_mode
));
142 extern int ext_reg_operand
PARAMS ((rtx
, enum machine_mode
));
144 extern int std_reg_operand
PARAMS ((rtx
, enum machine_mode
));
146 extern int std_or_reg_operand
PARAMS ((rtx
, enum machine_mode
));
148 extern int dst_operand
PARAMS ((rtx
, enum machine_mode
));
150 extern int src_operand
PARAMS ((rtx
, enum machine_mode
));
152 extern int src_hi_operand
PARAMS ((rtx
, enum machine_mode
));
154 extern int lsrc_operand
PARAMS ((rtx
, enum machine_mode
));
156 extern int tsrc_operand
PARAMS ((rtx
, enum machine_mode
));
158 extern int addr_reg_operand
PARAMS ((rtx
, enum machine_mode
));
160 extern int index_reg_operand
PARAMS ((rtx
, enum machine_mode
));
162 extern int dp_reg_operand
PARAMS ((rtx
, enum machine_mode
));
164 extern int sp_reg_operand
PARAMS ((rtx
, enum machine_mode
));
166 extern int rc_reg_operand
PARAMS ((rtx
, enum machine_mode
));
168 extern int st_reg_operand
PARAMS ((rtx
, enum machine_mode
));
170 extern int symbolic_address_operand
PARAMS ((rtx
, enum machine_mode
));
172 extern int ar0_reg_operand
PARAMS ((rtx
, enum machine_mode
));
174 extern int ar0_mem_operand
PARAMS ((rtx
, enum machine_mode
));
176 extern int ar1_reg_operand
PARAMS ((rtx
, enum machine_mode
));
178 extern int ar1_mem_operand
PARAMS ((rtx
, enum machine_mode
));
180 extern int ar2_reg_operand
PARAMS ((rtx
, enum machine_mode
));
182 extern int ar2_mem_operand
PARAMS ((rtx
, enum machine_mode
));
184 extern int ar3_reg_operand
PARAMS ((rtx
, enum machine_mode
));
186 extern int ar3_mem_operand
PARAMS ((rtx
, enum machine_mode
));
188 extern int ar4_reg_operand
PARAMS ((rtx
, enum machine_mode
));
190 extern int ar4_mem_operand
PARAMS ((rtx
, enum machine_mode
));
192 extern int ar5_reg_operand
PARAMS ((rtx
, enum machine_mode
));
194 extern int ar5_mem_operand
PARAMS ((rtx
, enum machine_mode
));
196 extern int ar6_reg_operand
PARAMS ((rtx
, enum machine_mode
));
198 extern int ar6_mem_operand
PARAMS ((rtx
, enum machine_mode
));
200 extern int ar7_reg_operand
PARAMS ((rtx
, enum machine_mode
));
202 extern int ar7_mem_operand
PARAMS ((rtx
, enum machine_mode
));
204 extern int ir0_reg_operand
PARAMS ((rtx
, enum machine_mode
));
206 extern int ir0_mem_operand
PARAMS ((rtx
, enum machine_mode
));
208 extern int ir1_reg_operand
PARAMS ((rtx
, enum machine_mode
));
210 extern int ir1_mem_operand
PARAMS ((rtx
, enum machine_mode
));
212 extern int group1_reg_operand
PARAMS ((rtx
, enum machine_mode
));
214 extern int group1_mem_operand
PARAMS ((rtx
, enum machine_mode
));
216 extern int arx_reg_operand
PARAMS ((rtx
, enum machine_mode
));
218 extern int call_address_operand
PARAMS ((rtx
, enum machine_mode
));
220 extern int par_ind_operand
PARAMS ((rtx
, enum machine_mode
));
222 extern int not_rc_reg
PARAMS ((rtx
, enum machine_mode
));
224 extern int not_modify_reg
PARAMS ((rtx
, enum machine_mode
));
226 extern int c4x_shiftable_constant
PARAMS ((rtx
));
228 extern int c4x_H_constant
PARAMS ((rtx
));
230 extern int c4x_I_constant
PARAMS ((rtx
));
232 extern int c4x_J_constant
PARAMS ((rtx
));
234 extern int c4x_L_constant
PARAMS ((rtx
));
236 extern int c4x_Q_constraint
PARAMS ((rtx
));
238 extern int c4x_R_constraint
PARAMS ((rtx
));
240 extern int c4x_S_constraint
PARAMS ((rtx
));
242 extern int c4x_T_constraint
PARAMS ((rtx
));
244 extern int c4x_U_constraint
PARAMS ((rtx
));
246 extern void c4x_emit_libcall
PARAMS ((rtx
, enum rtx_code
,
248 enum machine_mode
, int, rtx
*));
250 extern void c4x_emit_libcall3
PARAMS ((rtx
, enum rtx_code
,
251 enum machine_mode
, rtx
*));
253 extern void c4x_emit_libcall_mulhi
PARAMS ((rtx
, enum rtx_code
,
254 enum machine_mode
, rtx
*));
256 extern int c4x_emit_move_sequence
PARAMS ((rtx
*, enum machine_mode
));
258 extern int legitimize_operands
PARAMS ((enum rtx_code
, rtx
*,
261 extern int valid_operands
PARAMS ((enum rtx_code
, rtx
*, enum machine_mode
));
263 extern int valid_parallel_load_store
PARAMS ((rtx
*, enum machine_mode
));
265 extern int valid_parallel_operands_4
PARAMS ((rtx
*, enum machine_mode
));
267 extern int valid_parallel_operands_5
PARAMS ((rtx
*, enum machine_mode
));
269 extern int valid_parallel_operands_6
PARAMS ((rtx
*, enum machine_mode
));
271 extern rtx smulhi3_libfunc
;
272 extern rtx umulhi3_libfunc
;
273 extern rtx fix_truncqfhi2_libfunc
;
274 extern rtx fixuns_truncqfhi2_libfunc
;
275 extern rtx fix_trunchfhi2_libfunc
;
276 extern rtx fixuns_trunchfhi2_libfunc
;
277 extern rtx floathiqf2_libfunc
;
278 extern rtx floatunshiqf2_libfunc
;
279 extern rtx floathihf2_libfunc
;
280 extern rtx floatunshihf2_libfunc
;
282 extern struct rtx_def
*c4x_compare_op0
; /* Operand 0 for comparisons. */
283 extern struct rtx_def
*c4x_compare_op1
; /* Operand 1 for comparisons. */
285 #endif /* RTX_CODE */
287 /* Smallest class containing REGNO. */
288 extern enum reg_class c4x_regclass_map
[];
289 extern enum machine_mode c4x_caller_save_map
[];
291 extern int c4x_rpts_cycles
; /* Max cycles for RPTS. */
292 extern int c4x_cpu_version
; /* Cpu version C30/31/32/40/44. */