Mercurial > hg > CbC > CbC_gcc
comparison gcc/config/mips/mips-protos.h @ 111:04ced10e8804
gcc 7
author | kono |
---|---|
date | Fri, 27 Oct 2017 22:46:09 +0900 |
parents | f6334be47118 |
children | 84e7813d76e9 |
comparison
equal
deleted
inserted
replaced
68:561a7518be6b | 111:04ced10e8804 |
---|---|
1 /* Prototypes of target machine for GNU compiler. MIPS version. | 1 /* Prototypes of target machine for GNU compiler. MIPS version. |
2 Copyright (C) 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, | 2 Copyright (C) 1989-2017 Free Software Foundation, Inc. |
3 1999, 2001, 2002, 2003, 2004, 2005, 2007, 2008, 2009, 2010, 2011 | |
4 Free Software Foundation, Inc. | |
5 Contributed by A. Lichnewsky (lich@inria.inria.fr). | 3 Contributed by A. Lichnewsky (lich@inria.inria.fr). |
6 Changed by Michael Meissner (meissner@osf.org). | 4 Changed by Michael Meissner (meissner@osf.org). |
7 64-bit r4000 support by Ian Lance Taylor (ian@cygnus.com) and | 5 64-bit r4000 support by Ian Lance Taylor (ian@cygnus.com) and |
8 Brendan Eich (brendan@microunity.com). | 6 Brendan Eich (brendan@microunity.com). |
9 | 7 |
54 | 52 |
55 SYMBOL_PC_RELATIVE | 53 SYMBOL_PC_RELATIVE |
56 The symbol's value will be calculated using a MIPS16 PC-relative | 54 The symbol's value will be calculated using a MIPS16 PC-relative |
57 calculation. | 55 calculation. |
58 | 56 |
59 SYMBOL_FORCE_TO_MEM | |
60 The symbol's value must be forced to memory and loaded from there. | |
61 | |
62 SYMBOL_GOT_PAGE_OFST | 57 SYMBOL_GOT_PAGE_OFST |
63 The symbol's value will be calculated by loading an address | 58 The symbol's value will be calculated by loading an address |
64 from the GOT and then applying a 16-bit offset. | 59 from the GOT and then applying a 16-bit offset. |
65 | 60 |
66 SYMBOL_GOT_DISP | 61 SYMBOL_GOT_DISP |
70 An UNSPEC wrapper around a SYMBOL_GOT_PAGE_OFST. It represents the | 65 An UNSPEC wrapper around a SYMBOL_GOT_PAGE_OFST. It represents the |
71 offset from _gp of the GOT entry. | 66 offset from _gp of the GOT entry. |
72 | 67 |
73 SYMBOL_GOTOFF_DISP | 68 SYMBOL_GOTOFF_DISP |
74 An UNSPEC wrapper around a SYMBOL_GOT_DISP. It represents the | 69 An UNSPEC wrapper around a SYMBOL_GOT_DISP. It represents the |
75 the offset from _gp of the symbol's GOT entry. | 70 offset from _gp of the symbol's GOT entry. |
76 | 71 |
77 SYMBOL_GOTOFF_CALL | 72 SYMBOL_GOTOFF_CALL |
78 Like SYMBOL_GOTOFF_DISP, but used when calling a global function. | 73 Like SYMBOL_GOTOFF_DISP, but used when calling a global function. |
79 The GOT entry is allowed to point to a stub rather than to the | 74 The GOT entry is allowed to point to a stub rather than to the |
80 function itself. | 75 function itself. |
92 SYMBOL_GOTTPREL | 87 SYMBOL_GOTTPREL |
93 SYMBOL_TPREL | 88 SYMBOL_TPREL |
94 UNSPEC wrappers around SYMBOL_TLS, corresponding to the | 89 UNSPEC wrappers around SYMBOL_TLS, corresponding to the |
95 thread-local storage relocation operators. | 90 thread-local storage relocation operators. |
96 | 91 |
97 SYMBOL_32_HIGH | |
98 For a 32-bit symbolic address X, this is the value of %hi(X). | |
99 | |
100 SYMBOL_64_HIGH | 92 SYMBOL_64_HIGH |
101 For a 64-bit symbolic address X, this is the value of | 93 For a 64-bit symbolic address X, this is the value of |
102 (%highest(X) << 16) + %higher(X). | 94 (%highest(X) << 16) + %higher(X). |
103 | 95 |
104 SYMBOL_64_MID | 96 SYMBOL_64_MID |
114 low 16 bits of that address. */ | 106 low 16 bits of that address. */ |
115 enum mips_symbol_type { | 107 enum mips_symbol_type { |
116 SYMBOL_ABSOLUTE, | 108 SYMBOL_ABSOLUTE, |
117 SYMBOL_GP_RELATIVE, | 109 SYMBOL_GP_RELATIVE, |
118 SYMBOL_PC_RELATIVE, | 110 SYMBOL_PC_RELATIVE, |
119 SYMBOL_FORCE_TO_MEM, | |
120 SYMBOL_GOT_PAGE_OFST, | 111 SYMBOL_GOT_PAGE_OFST, |
121 SYMBOL_GOT_DISP, | 112 SYMBOL_GOT_DISP, |
122 SYMBOL_GOTOFF_PAGE, | 113 SYMBOL_GOTOFF_PAGE, |
123 SYMBOL_GOTOFF_DISP, | 114 SYMBOL_GOTOFF_DISP, |
124 SYMBOL_GOTOFF_CALL, | 115 SYMBOL_GOTOFF_CALL, |
127 SYMBOL_TLSGD, | 118 SYMBOL_TLSGD, |
128 SYMBOL_TLSLDM, | 119 SYMBOL_TLSLDM, |
129 SYMBOL_DTPREL, | 120 SYMBOL_DTPREL, |
130 SYMBOL_GOTTPREL, | 121 SYMBOL_GOTTPREL, |
131 SYMBOL_TPREL, | 122 SYMBOL_TPREL, |
132 SYMBOL_32_HIGH, | |
133 SYMBOL_64_HIGH, | 123 SYMBOL_64_HIGH, |
134 SYMBOL_64_MID, | 124 SYMBOL_64_MID, |
135 SYMBOL_64_LOW, | 125 SYMBOL_64_LOW, |
136 SYMBOL_HALF | 126 SYMBOL_HALF |
137 }; | 127 }; |
179 MIPS_CALL_NORMAL, | 169 MIPS_CALL_NORMAL, |
180 MIPS_CALL_SIBCALL, | 170 MIPS_CALL_SIBCALL, |
181 MIPS_CALL_EPILOGUE | 171 MIPS_CALL_EPILOGUE |
182 }; | 172 }; |
183 | 173 |
174 /* Controls the conditions under which certain instructions are split. | |
175 | |
176 SPLIT_IF_NECESSARY | |
177 Only perform splits that are necessary for correctness | |
178 (because no unsplit version exists). | |
179 | |
180 SPLIT_FOR_SPEED | |
181 Perform splits that are necessary for correctness or | |
182 beneficial for code speed. | |
183 | |
184 SPLIT_FOR_SIZE | |
185 Perform splits that are necessary for correctness or | |
186 beneficial for code size. */ | |
187 enum mips_split_type { | |
188 SPLIT_IF_NECESSARY, | |
189 SPLIT_FOR_SPEED, | |
190 SPLIT_FOR_SIZE | |
191 }; | |
192 | |
184 extern bool mips_symbolic_constant_p (rtx, enum mips_symbol_context, | 193 extern bool mips_symbolic_constant_p (rtx, enum mips_symbol_context, |
185 enum mips_symbol_type *); | 194 enum mips_symbol_type *); |
186 extern int mips_regno_mode_ok_for_base_p (int, enum machine_mode, bool); | 195 extern int mips_regno_mode_ok_for_base_p (int, machine_mode, bool); |
187 extern bool mips_stack_address_p (rtx, enum machine_mode); | 196 extern bool mips_stack_address_p (rtx, machine_mode); |
188 extern int mips_address_insns (rtx, enum machine_mode, bool); | 197 extern int mips_address_insns (rtx, machine_mode, bool); |
189 extern int mips_const_insns (rtx); | 198 extern int mips_const_insns (rtx); |
190 extern int mips_split_const_insns (rtx); | 199 extern int mips_split_const_insns (rtx); |
191 extern int mips_load_store_insns (rtx, rtx); | 200 extern int mips_split_128bit_const_insns (rtx); |
192 extern int mips_idiv_insns (void); | 201 extern int mips_load_store_insns (rtx, rtx_insn *); |
193 extern rtx mips_emit_move (rtx, rtx); | 202 extern int mips_idiv_insns (machine_mode); |
203 extern rtx_insn *mips_emit_move (rtx, rtx); | |
204 #ifdef RTX_CODE | |
205 extern void mips_emit_binary (enum rtx_code, rtx, rtx, rtx); | |
206 #endif | |
194 extern rtx mips_pic_base_register (rtx); | 207 extern rtx mips_pic_base_register (rtx); |
195 extern rtx mips_got_load (rtx, rtx, enum mips_symbol_type); | 208 extern rtx mips_got_load (rtx, rtx, enum mips_symbol_type); |
196 extern bool mips_split_symbol (rtx, rtx, enum machine_mode, rtx *); | 209 extern bool mips_split_symbol (rtx, rtx, machine_mode, rtx *); |
197 extern rtx mips_unspec_address (rtx, enum mips_symbol_type); | 210 extern rtx mips_unspec_address (rtx, enum mips_symbol_type); |
211 extern rtx mips_strip_unspec_address (rtx); | |
198 extern void mips_move_integer (rtx, rtx, unsigned HOST_WIDE_INT); | 212 extern void mips_move_integer (rtx, rtx, unsigned HOST_WIDE_INT); |
199 extern bool mips_legitimize_move (enum machine_mode, rtx, rtx); | 213 extern bool mips_legitimize_move (machine_mode, rtx, rtx); |
200 | |
201 extern int m16_uimm3_b (rtx, enum machine_mode); | |
202 extern int m16_simm4_1 (rtx, enum machine_mode); | |
203 extern int m16_nsimm4_1 (rtx, enum machine_mode); | |
204 extern int m16_simm5_1 (rtx, enum machine_mode); | |
205 extern int m16_nsimm5_1 (rtx, enum machine_mode); | |
206 extern int m16_uimm5_4 (rtx, enum machine_mode); | |
207 extern int m16_nuimm5_4 (rtx, enum machine_mode); | |
208 extern int m16_simm8_1 (rtx, enum machine_mode); | |
209 extern int m16_nsimm8_1 (rtx, enum machine_mode); | |
210 extern int m16_uimm8_1 (rtx, enum machine_mode); | |
211 extern int m16_nuimm8_1 (rtx, enum machine_mode); | |
212 extern int m16_uimm8_m1_1 (rtx, enum machine_mode); | |
213 extern int m16_uimm8_4 (rtx, enum machine_mode); | |
214 extern int m16_nuimm8_4 (rtx, enum machine_mode); | |
215 extern int m16_simm8_8 (rtx, enum machine_mode); | |
216 extern int m16_nsimm8_8 (rtx, enum machine_mode); | |
217 | 214 |
218 extern rtx mips_subword (rtx, bool); | 215 extern rtx mips_subword (rtx, bool); |
219 extern bool mips_split_64bit_move_p (rtx, rtx); | 216 extern bool mips_split_move_p (rtx, rtx, enum mips_split_type); |
220 extern void mips_split_doubleword_move (rtx, rtx); | 217 extern void mips_split_move (rtx, rtx, enum mips_split_type); |
218 extern bool mips_split_move_insn_p (rtx, rtx, rtx); | |
219 extern void mips_split_move_insn (rtx, rtx, rtx); | |
220 extern void mips_split_128bit_move (rtx, rtx); | |
221 extern bool mips_split_128bit_move_p (rtx, rtx); | |
222 extern void mips_split_msa_copy_d (rtx, rtx, rtx, rtx (*)(rtx, rtx, rtx)); | |
223 extern void mips_split_msa_insert_d (rtx, rtx, rtx, rtx); | |
224 extern void mips_split_msa_fill_d (rtx, rtx); | |
221 extern const char *mips_output_move (rtx, rtx); | 225 extern const char *mips_output_move (rtx, rtx); |
222 extern bool mips_cfun_has_cprestore_slot_p (void); | 226 extern bool mips_cfun_has_cprestore_slot_p (void); |
223 extern bool mips_cprestore_address_p (rtx, bool); | 227 extern bool mips_cprestore_address_p (rtx, bool); |
224 extern void mips_save_gp_to_cprestore_slot (rtx, rtx, rtx, rtx); | 228 extern void mips_save_gp_to_cprestore_slot (rtx, rtx, rtx, rtx); |
225 extern void mips_restore_gp_from_cprestore_slot (rtx); | 229 extern void mips_restore_gp_from_cprestore_slot (rtx); |
229 extern void mips_expand_vcondv2sf (rtx, rtx, rtx, enum rtx_code, rtx, rtx); | 233 extern void mips_expand_vcondv2sf (rtx, rtx, rtx, enum rtx_code, rtx, rtx); |
230 extern void mips_expand_conditional_move (rtx *); | 234 extern void mips_expand_conditional_move (rtx *); |
231 extern void mips_expand_conditional_trap (rtx); | 235 extern void mips_expand_conditional_trap (rtx); |
232 #endif | 236 #endif |
233 extern bool mips_use_pic_fn_addr_reg_p (const_rtx); | 237 extern bool mips_use_pic_fn_addr_reg_p (const_rtx); |
234 extern rtx mips_expand_call (enum mips_call_type, rtx, rtx, rtx, rtx, bool); | 238 extern rtx_insn *mips_expand_call (enum mips_call_type, rtx, rtx, rtx, rtx, |
239 bool); | |
235 extern void mips_split_call (rtx, rtx); | 240 extern void mips_split_call (rtx, rtx); |
236 extern bool mips_get_pic_call_symbol (rtx *, int); | 241 extern bool mips_get_pic_call_symbol (rtx *, int); |
237 extern void mips_expand_fcc_reload (rtx, rtx, rtx); | |
238 extern void mips_set_return_address (rtx, rtx); | 242 extern void mips_set_return_address (rtx, rtx); |
243 extern bool mips_move_by_pieces_p (unsigned HOST_WIDE_INT, unsigned int); | |
244 extern bool mips_store_by_pieces_p (unsigned HOST_WIDE_INT, unsigned int); | |
239 extern bool mips_expand_block_move (rtx, rtx, rtx); | 245 extern bool mips_expand_block_move (rtx, rtx, rtx); |
240 extern void mips_expand_synci_loop (rtx, rtx); | 246 extern void mips_expand_synci_loop (rtx, rtx); |
241 | 247 |
242 extern void mips_init_cumulative_args (CUMULATIVE_ARGS *, tree); | 248 extern void mips_init_cumulative_args (CUMULATIVE_ARGS *, tree); |
243 extern bool mips_pad_arg_upward (enum machine_mode, const_tree); | 249 extern bool mips_pad_reg_upward (machine_mode, tree); |
244 extern bool mips_pad_reg_upward (enum machine_mode, tree); | |
245 | 250 |
246 extern bool mips_expand_ext_as_unaligned_load (rtx, rtx, HOST_WIDE_INT, | 251 extern bool mips_expand_ext_as_unaligned_load (rtx, rtx, HOST_WIDE_INT, |
247 HOST_WIDE_INT); | 252 HOST_WIDE_INT, bool); |
248 extern bool mips_expand_ins_as_unaligned_store (rtx, rtx, HOST_WIDE_INT, | 253 extern bool mips_expand_ins_as_unaligned_store (rtx, rtx, HOST_WIDE_INT, |
249 HOST_WIDE_INT); | 254 HOST_WIDE_INT); |
250 extern bool mips_mem_fits_mode_p (enum machine_mode mode, rtx x); | 255 extern bool mips_mem_fits_mode_p (machine_mode mode, rtx x); |
251 extern void mips_order_regs_for_local_alloc (void); | |
252 extern HOST_WIDE_INT mips_debugger_offset (rtx, HOST_WIDE_INT); | 256 extern HOST_WIDE_INT mips_debugger_offset (rtx, HOST_WIDE_INT); |
253 | 257 |
254 extern void mips_push_asm_switch (struct mips_asm_switch *); | 258 extern void mips_push_asm_switch (struct mips_asm_switch *); |
255 extern void mips_pop_asm_switch (struct mips_asm_switch *); | 259 extern void mips_pop_asm_switch (struct mips_asm_switch *); |
256 extern void mips_output_external (FILE *, tree, const char *); | 260 extern void mips_output_external (FILE *, tree, const char *); |
257 extern void mips_output_ascii (FILE *, const char *, size_t); | 261 extern void mips_output_ascii (FILE *, const char *, size_t); |
262 extern const char *mips_output_tls_reloc_directive (rtx *); | |
258 extern void mips_output_aligned_decl_common (FILE *, tree, const char *, | 263 extern void mips_output_aligned_decl_common (FILE *, tree, const char *, |
259 unsigned HOST_WIDE_INT, | 264 unsigned HOST_WIDE_INT, |
260 unsigned int); | 265 unsigned int); |
261 extern void mips_declare_common_object (FILE *, const char *, | 266 extern void mips_declare_common_object (FILE *, const char *, |
262 const char *, unsigned HOST_WIDE_INT, | 267 const char *, unsigned HOST_WIDE_INT, |
263 unsigned int, bool); | 268 unsigned int, bool); |
264 extern void mips_declare_object (FILE *, const char *, const char *, | 269 extern void mips_declare_object (FILE *, const char *, const char *, |
265 const char *, ...) ATTRIBUTE_PRINTF_4; | 270 const char *, ...) ATTRIBUTE_PRINTF_4; |
266 extern void mips_declare_object_name (FILE *, const char *, tree); | 271 extern void mips_declare_object_name (FILE *, const char *, tree); |
267 extern void mips_finish_declare_object (FILE *, tree, int, int); | 272 extern void mips_finish_declare_object (FILE *, tree, int, int); |
273 extern void mips_set_text_contents_type (FILE *, const char *, | |
274 unsigned long, bool); | |
268 | 275 |
269 extern bool mips_small_data_pattern_p (rtx); | 276 extern bool mips_small_data_pattern_p (rtx); |
270 extern rtx mips_rewrite_small_data (rtx); | 277 extern rtx mips_rewrite_small_data (rtx); |
271 extern HOST_WIDE_INT mips_initial_elimination_offset (int, int); | 278 extern HOST_WIDE_INT mips_initial_elimination_offset (int, int); |
272 extern rtx mips_return_addr (int, rtx); | 279 extern rtx mips_return_addr (int, rtx); |
275 extern void mips_emit_save_slot_move (rtx, rtx, rtx); | 282 extern void mips_emit_save_slot_move (rtx, rtx, rtx); |
276 extern void mips_expand_prologue (void); | 283 extern void mips_expand_prologue (void); |
277 extern void mips_expand_before_return (void); | 284 extern void mips_expand_before_return (void); |
278 extern void mips_expand_epilogue (bool); | 285 extern void mips_expand_epilogue (bool); |
279 extern bool mips_can_use_return_insn (void); | 286 extern bool mips_can_use_return_insn (void); |
280 extern rtx mips_function_value (const_tree, const_tree, enum machine_mode); | 287 |
281 | 288 extern bool mips_const_vector_same_val_p (rtx, machine_mode); |
282 extern bool mips_cannot_change_mode_class (enum machine_mode, | 289 extern bool mips_const_vector_same_bytes_p (rtx, machine_mode); |
283 enum machine_mode, enum reg_class); | 290 extern bool mips_const_vector_same_int_p (rtx, machine_mode, HOST_WIDE_INT, |
291 HOST_WIDE_INT); | |
292 extern bool mips_const_vector_shuffle_set_p (rtx, machine_mode); | |
293 extern bool mips_const_vector_bitimm_set_p (rtx, machine_mode); | |
294 extern bool mips_const_vector_bitimm_clr_p (rtx, machine_mode); | |
295 extern rtx mips_msa_vec_parallel_const_half (machine_mode, bool); | |
296 extern rtx mips_gen_const_int_vector (machine_mode, HOST_WIDE_INT); | |
284 extern bool mips_dangerous_for_la25_p (rtx); | 297 extern bool mips_dangerous_for_la25_p (rtx); |
285 extern bool mips_modes_tieable_p (enum machine_mode, enum machine_mode); | |
286 extern enum reg_class mips_secondary_reload_class (enum reg_class, | 298 extern enum reg_class mips_secondary_reload_class (enum reg_class, |
287 enum machine_mode, | 299 machine_mode, |
288 rtx, bool); | 300 rtx, bool); |
289 extern int mips_class_max_nregs (enum reg_class, enum machine_mode); | 301 extern int mips_class_max_nregs (enum reg_class, machine_mode); |
290 | 302 |
291 extern int mips_adjust_insn_length (rtx, int); | 303 extern machine_mode mips_hard_regno_caller_save_mode (unsigned int, |
304 unsigned int, | |
305 machine_mode); | |
306 extern int mips_adjust_insn_length (rtx_insn *, int); | |
292 extern void mips_output_load_label (rtx); | 307 extern void mips_output_load_label (rtx); |
293 extern const char *mips_output_conditional_branch (rtx, rtx *, const char *, | 308 extern const char *mips_output_conditional_branch (rtx_insn *, rtx *, |
294 const char *); | 309 const char *, const char *); |
295 extern const char *mips_output_order_conditional_branch (rtx, rtx *, bool); | 310 extern const char *mips_output_order_conditional_branch (rtx_insn *, rtx *, |
311 bool); | |
312 extern const char *mips_output_equal_conditional_branch (rtx_insn *, rtx *, | |
313 bool); | |
314 extern const char *mips_output_jump (rtx *, int, int, bool); | |
296 extern const char *mips_output_sync (void); | 315 extern const char *mips_output_sync (void); |
297 extern const char *mips_output_sync_loop (rtx, rtx *); | 316 extern const char *mips_output_sync_loop (rtx_insn *, rtx *); |
298 extern unsigned int mips_sync_loop_insns (rtx, rtx *); | 317 extern unsigned int mips_sync_loop_insns (rtx_insn *, rtx *); |
299 extern const char *mips_output_division (const char *, rtx *); | 318 extern const char *mips_output_division (const char *, rtx *); |
300 extern unsigned int mips_hard_regno_nregs (int, enum machine_mode); | 319 extern const char *mips_msa_output_division (const char *, rtx *); |
301 extern bool mips_linked_madd_p (rtx, rtx); | 320 extern const char *mips_output_probe_stack_range (rtx, rtx); |
302 extern bool mips_store_data_bypass_p (rtx, rtx); | 321 extern bool mips_hard_regno_rename_ok (unsigned int, unsigned int); |
322 extern bool mips_linked_madd_p (rtx_insn *, rtx_insn *); | |
323 extern bool mips_store_data_bypass_p (rtx_insn *, rtx_insn *); | |
324 extern int mips_dspalu_bypass_p (rtx, rtx); | |
303 extern rtx mips_prefetch_cookie (rtx, rtx); | 325 extern rtx mips_prefetch_cookie (rtx, rtx); |
304 | 326 |
305 extern void irix_asm_output_align (FILE *, unsigned); | |
306 extern const char *current_section_name (void); | 327 extern const char *current_section_name (void); |
307 extern unsigned int current_section_flags (void); | 328 extern unsigned int current_section_flags (void); |
308 extern bool mips_use_ins_ext_p (rtx, HOST_WIDE_INT, HOST_WIDE_INT); | 329 extern bool mips_use_ins_ext_p (rtx, HOST_WIDE_INT, HOST_WIDE_INT); |
309 | 330 |
310 extern const char *mips16e_output_save_restore (rtx, HOST_WIDE_INT); | 331 extern const char *mips16e_output_save_restore (rtx, HOST_WIDE_INT); |
311 extern bool mips16e_save_restore_pattern_p (rtx, HOST_WIDE_INT, | 332 extern bool mips16e_save_restore_pattern_p (rtx, HOST_WIDE_INT, |
312 struct mips16e_save_restore_info *); | 333 struct mips16e_save_restore_info *); |
313 | 334 |
314 extern bool mask_low_and_shift_p (enum machine_mode, rtx, rtx, int); | 335 extern bool mask_low_and_shift_p (machine_mode, rtx, rtx, int); |
315 extern int mask_low_and_shift_len (enum machine_mode, rtx, rtx); | 336 extern int mask_low_and_shift_len (machine_mode, rtx, rtx); |
316 extern bool and_operands_ok (enum machine_mode, rtx, rtx); | 337 extern bool and_operands_ok (machine_mode, rtx, rtx); |
338 extern bool mips_fmadd_bypass (rtx_insn *, rtx_insn *); | |
317 | 339 |
318 union mips_gen_fn_ptrs | 340 union mips_gen_fn_ptrs |
319 { | 341 { |
320 rtx (*fn_6) (rtx, rtx, rtx, rtx, rtx, rtx); | 342 rtx (*fn_6) (rtx, rtx, rtx, rtx, rtx, rtx); |
321 rtx (*fn_5) (rtx, rtx, rtx, rtx, rtx); | 343 rtx (*fn_5) (rtx, rtx, rtx, rtx, rtx); |
324 | 346 |
325 extern void mips_expand_atomic_qihi (union mips_gen_fn_ptrs, | 347 extern void mips_expand_atomic_qihi (union mips_gen_fn_ptrs, |
326 rtx, rtx, rtx, rtx); | 348 rtx, rtx, rtx, rtx); |
327 | 349 |
328 extern void mips_expand_vector_init (rtx, rtx); | 350 extern void mips_expand_vector_init (rtx, rtx); |
351 extern bool mips_expand_vec_perm_const (rtx op[4]); | |
352 extern void mips_expand_vec_unpack (rtx op[2], bool, bool); | |
353 extern void mips_expand_vec_reduc (rtx, rtx, rtx (*)(rtx, rtx, rtx)); | |
354 extern void mips_expand_vec_minmax (rtx, rtx, rtx, | |
355 rtx (*) (rtx, rtx, rtx), bool); | |
356 | |
357 extern int mips_ldst_scaled_shift (machine_mode); | |
358 extern bool mips_signed_immediate_p (unsigned HOST_WIDE_INT, int, int); | |
359 extern bool mips_unsigned_immediate_p (unsigned HOST_WIDE_INT, int, int); | |
360 extern const char *umips_output_save_restore (bool, rtx); | |
361 extern bool umips_save_restore_pattern_p (bool, rtx); | |
362 extern bool umips_load_store_pair_p (bool, rtx *); | |
363 extern void umips_output_load_store_pair (bool, rtx *); | |
364 extern bool umips_movep_target_p (rtx, rtx); | |
365 extern bool umips_12bit_offset_address_p (rtx, machine_mode); | |
366 extern bool mips_9bit_offset_address_p (rtx, machine_mode); | |
367 extern bool lwsp_swsp_address_p (rtx, machine_mode); | |
368 extern bool m16_based_address_p (rtx, machine_mode, | |
369 int (*)(rtx_def*, machine_mode)); | |
370 extern rtx mips_expand_thread_pointer (rtx); | |
371 extern void mips16_expand_get_fcsr (rtx); | |
372 extern void mips16_expand_set_fcsr (rtx); | |
329 | 373 |
330 extern bool mips_eh_uses (unsigned int); | 374 extern bool mips_eh_uses (unsigned int); |
331 extern bool mips_epilogue_uses (unsigned int); | 375 extern bool mips_epilogue_uses (unsigned int); |
332 extern void mips_final_prescan_insn (rtx, rtx *, int); | 376 extern void mips_final_prescan_insn (rtx_insn *, rtx *, int); |
333 extern int mips_trampoline_code_size (void); | 377 extern int mips_trampoline_code_size (void); |
334 extern void mips_function_profiler (FILE *); | 378 extern void mips_function_profiler (FILE *); |
379 extern bool mips_load_store_bonding_p (rtx *, machine_mode, bool); | |
335 | 380 |
336 typedef rtx (*mulsidi3_gen_fn) (rtx, rtx, rtx); | 381 typedef rtx (*mulsidi3_gen_fn) (rtx, rtx, rtx); |
337 #ifdef RTX_CODE | 382 #ifdef RTX_CODE |
338 extern mulsidi3_gen_fn mips_mulsidi3_gen_fn (enum rtx_code); | 383 extern mulsidi3_gen_fn mips_mulsidi3_gen_fn (enum rtx_code); |
339 #endif | 384 #endif |
340 | 385 |
386 extern void mips_register_frame_header_opt (void); | |
387 extern void mips_expand_vec_cond_expr (machine_mode, machine_mode, rtx *); | |
388 | |
341 #endif /* ! GCC_MIPS_PROTOS_H */ | 389 #endif /* ! GCC_MIPS_PROTOS_H */ |