Merge from mainline (gomp-merge-2005-02-26).
[official-gcc.git] / gcc / config / frv / frv-protos.h
blob534188eade13cfdd5885554b32aeaebb88fe15dd
1 /* Frv prototypes.
2 Copyright (C) 1999, 2000, 2001, 2003, 2004, 2005 Free Software Foundation,
3 Inc.
4 Contributed by Red Hat, Inc.
6 This file is part of GCC.
8 GCC is free software; you can redistribute it and/or modify
9 it under the terms of the GNU General Public License as published by
10 the Free Software Foundation; either version 2, or (at your option)
11 any later version.
13 GCC is distributed in the hope that it will be useful,
14 but WITHOUT ANY WARRANTY; without even the implied warranty of
15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 GNU General Public License for more details.
18 You should have received a copy of the GNU General Public License
19 along with GCC; see the file COPYING. If not, write to
20 the Free Software Foundation, 59 Temple Place - Suite 330,
21 Boston, MA 02111-1307, USA. */
23 /* Define the information needed to generate branch and scc insns. This is
24 stored from the compare operation. Note that we can't use "rtx" here
25 since it hasn't been defined! */
27 /* Define global data defined in frv.c. */
28 extern const char *frv_branch_cost_string; /* -mbranch-cost option */
29 extern int frv_branch_cost_int; /* value of -mbranch_cost */
31 extern const char *frv_cpu_string; /* -mcpu= option */
33 extern const char *frv_condexec_insns_str; /* -mcond-exec-insns= option */
34 extern int frv_condexec_insns; /* value of -mcond-exec-insns */
36 extern const char *frv_condexec_temps_str; /* -mcond-exec-temps= option */
37 extern int frv_condexec_temps; /* value of -mcond-exec-temps */
39 extern const char *frv_sched_lookahead_str; /* -msched-lookahead= option */
40 extern int frv_sched_lookahead; /* value -msched-lookahead= */
42 /* CPU type. This must be identical to the cpu enumeration in frv.md. */
43 typedef enum frv_cpu
45 FRV_CPU_GENERIC,
46 FRV_CPU_FR550,
47 FRV_CPU_FR500,
48 FRV_CPU_FR450,
49 FRV_CPU_FR405,
50 FRV_CPU_FR400,
51 FRV_CPU_FR300,
52 FRV_CPU_SIMPLE,
53 FRV_CPU_TOMCAT
54 } frv_cpu_t;
56 extern frv_cpu_t frv_cpu_type; /* value of -mcpu= */
58 /* Define functions defined in frv.c */
59 extern void frv_expand_prologue (void);
60 extern void frv_expand_epilogue (bool);
61 extern void frv_override_options (void);
62 extern void frv_optimization_options (int, int);
63 extern void frv_conditional_register_usage (void);
64 extern frv_stack_t *frv_stack_info (void);
65 extern void frv_debug_stack (frv_stack_t *);
66 extern int frv_frame_pointer_required (void);
67 extern int frv_initial_elimination_offset (int, int);
69 #ifdef RTX_CODE
70 extern int frv_legitimate_address_p (enum machine_mode, rtx,
71 int, int, int);
72 extern rtx frv_legitimize_address (rtx, rtx, enum machine_mode);
73 extern rtx frv_find_base_term (rtx);
75 #ifdef TREE_CODE
76 extern void frv_init_cumulative_args (CUMULATIVE_ARGS *, tree,
77 rtx, tree, int);
79 extern int frv_function_arg_boundary (enum machine_mode, tree);
80 extern rtx frv_function_arg (CUMULATIVE_ARGS *,
81 enum machine_mode,
82 tree, int, int);
84 extern void frv_function_arg_advance (CUMULATIVE_ARGS *,
85 enum machine_mode,
86 tree, int);
88 extern void frv_expand_builtin_va_start (tree, rtx);
89 #endif /* TREE_CODE */
91 extern int frv_expand_block_move (rtx *);
92 extern int frv_expand_block_clear (rtx *);
93 extern rtx frv_dynamic_chain_address (rtx);
94 extern rtx frv_return_addr_rtx (int, rtx);
95 extern rtx frv_index_memory (rtx, enum machine_mode, int);
96 extern const char *frv_asm_output_opcode
97 (FILE *, const char *);
98 extern void frv_final_prescan_insn (rtx, rtx *, int);
99 extern void frv_print_operand (FILE *, rtx, int);
100 extern void frv_print_operand_address (FILE *, rtx);
101 extern void frv_emit_move (enum machine_mode, rtx, rtx);
102 extern int frv_emit_movsi (rtx, rtx);
103 extern const char *output_move_single (rtx *, rtx);
104 extern const char *output_move_double (rtx *, rtx);
105 extern const char *output_condmove_single
106 (rtx *, rtx);
107 extern int frv_emit_cond_branch (enum rtx_code, rtx);
108 extern int frv_emit_scc (enum rtx_code, rtx);
109 extern rtx frv_split_scc (rtx, rtx, rtx, rtx, HOST_WIDE_INT);
110 extern int frv_emit_cond_move (rtx, rtx, rtx, rtx);
111 extern rtx frv_split_cond_move (rtx *);
112 extern rtx frv_split_minmax (rtx *);
113 extern rtx frv_split_abs (rtx *);
114 extern void frv_split_double_load (rtx, rtx);
115 extern void frv_split_double_store (rtx, rtx);
116 #ifdef BB_HEAD
117 extern void frv_ifcvt_init_extra_fields (ce_if_block_t *);
118 extern void frv_ifcvt_modify_tests (ce_if_block_t *, rtx *, rtx *);
119 extern void frv_ifcvt_modify_multiple_tests
120 (ce_if_block_t *, basic_block,
121 rtx *, rtx *);
122 extern rtx frv_ifcvt_modify_insn (ce_if_block_t *, rtx, rtx);
123 extern void frv_ifcvt_modify_final (ce_if_block_t *);
124 extern void frv_ifcvt_modify_cancel (ce_if_block_t *);
125 #endif
126 extern int frv_trampoline_size (void);
127 extern void frv_initialize_trampoline (rtx, rtx, rtx);
128 extern enum reg_class frv_secondary_reload_class
129 (enum reg_class class,
130 enum machine_mode mode,
131 rtx x, int);
132 extern int frv_class_likely_spilled_p (enum reg_class class);
133 extern int frv_hard_regno_mode_ok (int, enum machine_mode);
134 extern int frv_hard_regno_nregs (int, enum machine_mode);
135 extern int frv_class_max_nregs (enum reg_class class,
136 enum machine_mode mode);
137 extern int frv_legitimate_constant_p (rtx);
138 extern enum machine_mode frv_select_cc_mode (enum rtx_code, rtx, rtx);
139 #endif /* RTX_CODE */
141 extern int direct_return_p (void);
142 extern int frv_register_move_cost (enum reg_class, enum reg_class);
143 extern int frv_issue_rate (void);
144 extern int frv_acc_group (rtx);
146 #ifdef TREE_CODE
147 extern int frv_adjust_field_align (tree, int);
148 #endif
150 extern void fixup_section (void);
151 extern void sdata_section (void);
152 extern void sbss_section (void);
153 extern void data_section (void);
155 #ifdef RTX_CODE
156 extern int integer_register_operand (rtx, enum machine_mode);
157 extern int frv_load_operand (rtx, enum machine_mode);
158 extern int gpr_or_fpr_operand (rtx, enum machine_mode);
159 extern int gpr_no_subreg_operand (rtx, enum machine_mode);
160 extern int gpr_or_int6_operand (rtx, enum machine_mode);
161 extern int fpr_or_int6_operand (rtx, enum machine_mode);
162 extern int gpr_or_int_operand (rtx, enum machine_mode);
163 extern int gpr_or_int12_operand (rtx, enum machine_mode);
164 extern int gpr_fpr_or_int12_operand (rtx, enum machine_mode);
165 extern int gpr_or_int10_operand (rtx, enum machine_mode);
166 extern int move_source_operand (rtx, enum machine_mode);
167 extern int move_destination_operand (rtx, enum machine_mode);
168 extern int condexec_source_operand (rtx, enum machine_mode);
169 extern int condexec_dest_operand (rtx, enum machine_mode);
170 extern int lr_operand (rtx, enum machine_mode);
171 extern int gpr_or_memory_operand (rtx, enum machine_mode);
172 extern int fpr_or_memory_operand (rtx, enum machine_mode);
173 extern int reg_or_0_operand (rtx, enum machine_mode);
174 extern int fcc_operand (rtx, enum machine_mode);
175 extern int icc_operand (rtx, enum machine_mode);
176 extern int cc_operand (rtx, enum machine_mode);
177 extern int fcr_operand (rtx, enum machine_mode);
178 extern int icr_operand (rtx, enum machine_mode);
179 extern int cr_operand (rtx, enum machine_mode);
180 extern int call_operand (rtx, enum machine_mode);
181 extern int fpr_operand (rtx, enum machine_mode);
182 extern int even_reg_operand (rtx, enum machine_mode);
183 extern int odd_reg_operand (rtx, enum machine_mode);
184 extern int even_gpr_operand (rtx, enum machine_mode);
185 extern int odd_gpr_operand (rtx, enum machine_mode);
186 extern int quad_fpr_operand (rtx, enum machine_mode);
187 extern int even_fpr_operand (rtx, enum machine_mode);
188 extern int odd_fpr_operand (rtx, enum machine_mode);
189 extern int dbl_memory_one_insn_operand (rtx, enum machine_mode);
190 extern int dbl_memory_two_insn_operand (rtx, enum machine_mode);
191 extern int int12_operand (rtx, enum machine_mode);
192 extern int int6_operand (rtx, enum machine_mode);
193 extern int int5_operand (rtx, enum machine_mode);
194 extern int uint5_operand (rtx, enum machine_mode);
195 extern int uint4_operand (rtx, enum machine_mode);
196 extern int uint1_operand (rtx, enum machine_mode);
197 extern int int_2word_operand (rtx, enum machine_mode);
198 extern int pic_register_operand (rtx, enum machine_mode);
199 extern int pic_symbolic_operand (rtx, enum machine_mode);
200 extern int small_data_register_operand (rtx, enum machine_mode);
201 extern int small_data_symbolic_operand (rtx, enum machine_mode);
202 extern int upper_int16_operand (rtx, enum machine_mode);
203 extern int uint16_operand (rtx, enum machine_mode);
204 extern int symbolic_operand (rtx, enum machine_mode);
205 extern int relational_operator (rtx, enum machine_mode);
206 extern int signed_relational_operator (rtx, enum machine_mode);
207 extern int unsigned_relational_operator (rtx, enum machine_mode);
208 extern int float_relational_operator (rtx, enum machine_mode);
209 extern int ccr_eqne_operator (rtx, enum machine_mode);
210 extern int minmax_operator (rtx, enum machine_mode);
211 extern int condexec_si_binary_operator (rtx, enum machine_mode);
212 extern int condexec_si_media_operator (rtx, enum machine_mode);
213 extern int condexec_si_divide_operator (rtx, enum machine_mode);
214 extern int condexec_si_unary_operator (rtx, enum machine_mode);
215 extern int condexec_sf_conv_operator (rtx, enum machine_mode);
216 extern int condexec_sf_add_operator (rtx, enum machine_mode);
217 extern int condexec_memory_operand (rtx, enum machine_mode);
218 extern int intop_compare_operator (rtx, enum machine_mode);
219 extern int acc_operand (rtx, enum machine_mode);
220 extern int even_acc_operand (rtx, enum machine_mode);
221 extern int quad_acc_operand (rtx, enum machine_mode);
222 extern int accg_operand (rtx, enum machine_mode);
223 extern rtx frv_matching_accg_for_acc (rtx);
224 extern void frv_expand_fdpic_call (rtx *, bool, bool);
225 extern rtx frv_gen_GPsym2reg (rtx, rtx);
226 extern void frv_output_dwarf_dtprel (FILE *, int, rtx);
227 #endif