]> git.ipfire.org Git - thirdparty/gcc.git/blame - gcc/config/arm/arm-protos.h
arc-protos.h (arc_select_cc_mode, gen_compare_reg): Wrap in RTX_CODE macro guard.
[thirdparty/gcc.git] / gcc / config / arm / arm-protos.h
CommitLineData
eb3921e8 1/* Prototypes for exported functions defined in arm.c and pe.c
5b3e6663 2 Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007
9b66ebb1 3 Free Software Foundation, Inc.
eb3921e8
NC
4 Contributed by Richard Earnshaw (rearnsha@arm.com)
5 Minor hacks by Nick Clifton (nickc@cygnus.com)
6
4f448245 7 This file is part of GCC.
eb3921e8 8
4f448245
NC
9 GCC is free software; you can redistribute it and/or modify
10 it under the terms of the GNU General Public License as published by
2f83c7d6 11 the Free Software Foundation; either version 3, or (at your option)
4f448245 12 any later version.
eb3921e8 13
4f448245
NC
14 GCC is distributed in the hope that it will be useful,
15 but WITHOUT ANY WARRANTY; without even the implied warranty of
16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17 GNU General Public License for more details.
eb3921e8 18
4f448245 19 You should have received a copy of the GNU General Public License
2f83c7d6
NC
20 along with GCC; see the file COPYING3. If not see
21 <http://www.gnu.org/licenses/>. */
eb3921e8 22
8b97c5f8
ZW
23#ifndef GCC_ARM_PROTOS_H
24#define GCC_ARM_PROTOS_H
25
e32bac5b 26extern void arm_override_options (void);
a72d4945 27extern int use_return_insn (int, rtx);
e32bac5b 28extern int arm_regno_class (int);
e55ef7f4 29extern void arm_load_pic_register (unsigned long);
e32bac5b 30extern int arm_volatile_func (void);
a72d4945 31extern const char *arm_output_epilogue (rtx);
e32bac5b 32extern void arm_expand_prologue (void);
e32bac5b
RE
33extern const char *arm_strip_name_encoding (const char *);
34extern void arm_asm_output_labelref (FILE *, const char *);
5b3e6663 35extern void thumb2_asm_output_opcode (FILE *);
e32bac5b 36extern unsigned long arm_current_func_type (void);
b3f8d95d
MM
37extern HOST_WIDE_INT arm_compute_initial_elimination_offset (unsigned int,
38 unsigned int);
5848830f
PB
39extern HOST_WIDE_INT thumb_compute_initial_elimination_offset (unsigned int,
40 unsigned int);
2fa330b2 41extern unsigned int arm_dbx_register_number (unsigned int);
617a1b71
PB
42extern void arm_output_fn_unwind (FILE *, bool);
43
eb3921e8
NC
44
45#ifdef TREE_CODE
586de218 46extern int arm_return_in_memory (const_tree);
eb3921e8 47#endif
eb3921e8 48#ifdef RTX_CODE
f676971a 49extern bool arm_vector_mode_supported_p (enum machine_mode);
e32bac5b
RE
50extern int arm_hard_regno_mode_ok (unsigned int, enum machine_mode);
51extern int const_ok_for_arm (HOST_WIDE_INT);
a406f566
MM
52extern int arm_split_constant (RTX_CODE, enum machine_mode, rtx,
53 HOST_WIDE_INT, rtx, rtx, int);
a14b88bb
PB
54extern RTX_CODE arm_canonicalize_comparison (RTX_CODE, enum machine_mode,
55 rtx *);
e32bac5b
RE
56extern int legitimate_pic_operand_p (rtx);
57extern rtx legitimize_pic_address (rtx, enum machine_mode, rtx);
d3585b76 58extern rtx legitimize_tls_address (rtx, rtx);
1e1ab407 59extern int arm_legitimate_address_p (enum machine_mode, rtx, RTX_CODE, int);
5b3e6663
PB
60extern int thumb1_legitimate_address_p (enum machine_mode, rtx, int);
61extern int thumb2_legitimate_address_p (enum machine_mode, rtx, int);
e32bac5b
RE
62extern int thumb_legitimate_offset_p (enum machine_mode, HOST_WIDE_INT);
63extern rtx arm_legitimize_address (rtx, rtx, enum machine_mode);
6f5b4f3e 64extern rtx thumb_legitimize_address (rtx, rtx, enum machine_mode);
a132dad6
RE
65extern rtx thumb_legitimize_reload_address (rtx *, enum machine_mode, int, int,
66 int);
9b66ebb1 67extern int arm_const_double_rtx (rtx);
e32bac5b 68extern int neg_const_double_rtx_ok_for_fpa (rtx);
f1adb0a9 69extern int vfp3_const_double_rtx (rtx);
88f77cba
JB
70extern int neon_immediate_valid_for_move (rtx, enum machine_mode, rtx *, int *);
71extern int neon_immediate_valid_for_logic (rtx, enum machine_mode, int, rtx *,
72 int *);
73extern char *neon_output_logic_immediate (const char *, rtx *,
74 enum machine_mode, int, int);
75extern void neon_pairwise_reduce (rtx, rtx, enum machine_mode,
76 rtx (*) (rtx, rtx, rtx));
77extern void neon_expand_vector_init (rtx, rtx);
b617fc71
JB
78extern void neon_lane_bounds (rtx, HOST_WIDE_INT, HOST_WIDE_INT);
79extern void neon_const_bounds (rtx, HOST_WIDE_INT, HOST_WIDE_INT);
80extern HOST_WIDE_INT neon_element_bits (enum machine_mode);
88f77cba
JB
81extern void neon_reinterpret (rtx, rtx);
82extern void neon_emit_pair_result_insn (enum machine_mode,
83 rtx (*) (rtx, rtx, rtx, rtx),
84 rtx, rtx, rtx);
85extern void neon_disambiguate_copy (rtx *, rtx *, rtx *, unsigned int);
fe2d934b
PB
86extern enum reg_class coproc_secondary_reload_class (enum machine_mode, rtx,
87 bool);
d3585b76 88extern bool arm_tls_referenced_p (rtx);
8426b956 89extern bool arm_cannot_force_const_mem (rtx);
d5b7b3ae 90
e32bac5b 91extern int cirrus_memory_offset (rtx);
fdd695fd 92extern int arm_coproc_mem_operand (rtx, bool);
88f77cba
JB
93extern int neon_vector_mem_operand (rtx, bool);
94extern int neon_struct_mem_operand (rtx);
9b66ebb1
PB
95extern int arm_no_early_store_addr_dep (rtx, rtx);
96extern int arm_no_early_alu_shift_dep (rtx, rtx);
97extern int arm_no_early_alu_shift_value_dep (rtx, rtx);
98extern int arm_no_early_mul_dep (rtx, rtx);
c956e102 99extern int arm_mac_accumulator_is_mul_result (rtx, rtx);
e32bac5b 100
d3585b76 101extern int tls_mentioned_p (rtx);
e32bac5b
RE
102extern int symbol_mentioned_p (rtx);
103extern int label_mentioned_p (rtx);
104extern RTX_CODE minmax_code (rtx);
105extern int adjacent_mem_locations (rtx, rtx);
106extern int load_multiple_sequence (rtx *, int, int *, int *, HOST_WIDE_INT *);
107extern const char *emit_ldm_seq (rtx *, int);
108extern int store_multiple_sequence (rtx *, int, int *, int *, HOST_WIDE_INT *);
109extern const char * emit_stm_seq (rtx *, int);
50ed9cea
RH
110extern rtx arm_gen_load_multiple (int, int, rtx, int, int,
111 rtx, HOST_WIDE_INT *);
112extern rtx arm_gen_store_multiple (int, int, rtx, int, int,
113 rtx, HOST_WIDE_INT *);
70128ad9 114extern int arm_gen_movmemqi (rtx *);
e32bac5b
RE
115extern enum machine_mode arm_select_cc_mode (RTX_CODE, rtx, rtx);
116extern enum machine_mode arm_select_dominance_cc_mode (rtx, rtx,
117 HOST_WIDE_INT);
118extern rtx arm_gen_compare_reg (RTX_CODE, rtx, rtx);
119extern rtx arm_gen_return_addr_mask (void);
120extern void arm_reload_in_hi (rtx *);
121extern void arm_reload_out_hi (rtx *);
2075b05d 122extern int arm_const_double_inline_cost (rtx);
b4a58f80 123extern bool arm_const_double_by_parts (rtx);
e32bac5b 124extern const char *fp_immediate_constant (rtx);
9403b7f7 125extern void arm_emit_call_insn (rtx, rtx);
e32bac5b
RE
126extern const char *output_call (rtx *);
127extern const char *output_call_mem (rtx *);
128extern const char *output_mov_long_double_fpa_from_arm (rtx *);
129extern const char *output_mov_long_double_arm_from_fpa (rtx *);
130extern const char *output_mov_long_double_arm_from_arm (rtx *);
131extern const char *output_mov_double_fpa_from_arm (rtx *);
132extern const char *output_mov_double_arm_from_fpa (rtx *);
133extern const char *output_move_double (rtx *);
88f77cba 134extern const char *output_move_quad (rtx *);
5b3e6663 135extern const char *output_move_vfp (rtx *operands);
88f77cba 136extern const char *output_move_neon (rtx *operands);
e32bac5b
RE
137extern const char *output_add_immediate (rtx *);
138extern const char *arithmetic_instr (rtx, int);
139extern void output_ascii_pseudo_op (FILE *, const unsigned char *, int);
140extern const char *output_return_instruction (rtx, int, int);
141extern void arm_poke_function_name (FILE *, const char *);
142extern void arm_print_operand (FILE *, rtx, int);
143extern void arm_print_operand_address (FILE *, rtx);
144extern void arm_final_prescan_insn (rtx);
e32bac5b 145extern int arm_debugger_arg_offset (int, rtx);
25a65198 146extern bool arm_is_long_call_p (tree);
5a9335ef
NC
147extern int arm_emit_vector_const (FILE *, rtx);
148extern const char * arm_output_load_gr (rtx *);
8edfc4cc 149extern const char *vfp_output_fstmd (rtx *);
c9ca9b88 150extern void arm_set_return_address (rtx, rtx);
6555b6bd 151extern int arm_eliminable_register (rtx);
5b3e6663 152extern const char *arm_output_shift(rtx *, int);
d5b7b3ae 153
d3585b76
DJ
154extern bool arm_output_addr_const_extra (FILE *, rtx);
155
d5b7b3ae 156#if defined TREE_CODE
e32bac5b
RE
157extern rtx arm_function_arg (CUMULATIVE_ARGS *, enum machine_mode, tree, int);
158extern void arm_init_cumulative_args (CUMULATIVE_ARGS *, tree, rtx, tree);
586de218 159extern bool arm_pad_arg_upward (enum machine_mode, const_tree);
866af8a9 160extern bool arm_pad_reg_upward (enum machine_mode, tree, int);
5848830f 161extern bool arm_needs_doubleword_align (enum machine_mode, tree);
586de218 162extern rtx arm_function_value(const_tree, const_tree);
d5b7b3ae 163#endif
9f7bf991 164extern int arm_apply_result_size (void);
d5b7b3ae 165
f676971a 166#if defined AOF_ASSEMBLER
e32bac5b 167extern rtx aof_pic_entry (rtx);
e32bac5b
RE
168extern void aof_add_import (const char *);
169extern void aof_delete_import (const char *);
170extern void zero_init_section (void);
eb3921e8
NC
171#endif /* AOF_ASSEMBLER */
172
eb3921e8
NC
173#endif /* RTX_CODE */
174
e32bac5b 175extern int arm_float_words_big_endian (void);
3717da94 176
d5b7b3ae 177/* Thumb functions. */
e32bac5b 178extern void arm_init_expanders (void);
e32bac5b 179extern const char *thumb_unexpanded_epilogue (void);
5b3e6663
PB
180extern void thumb1_expand_prologue (void);
181extern void thumb1_expand_epilogue (void);
d5b7b3ae 182#ifdef TREE_CODE
e32bac5b 183extern int is_called_in_ARM_mode (tree);
d5b7b3ae 184#endif
e32bac5b 185extern int thumb_shiftable_const (unsigned HOST_WIDE_INT);
cd2b33d0 186#ifdef RTX_CODE
5b3e6663
PB
187extern void thumb1_final_prescan_insn (rtx);
188extern void thumb2_final_prescan_insn (rtx);
e32bac5b
RE
189extern const char *thumb_load_double_from_address (rtx *);
190extern const char *thumb_output_move_mem_multiple (int, rtx *);
b12a00f1 191extern const char *thumb_call_via_reg (rtx);
70128ad9 192extern void thumb_expand_movmemqi (rtx *);
e32bac5b
RE
193extern rtx arm_return_addr (int, rtx);
194extern void thumb_reload_out_hi (rtx *);
195extern void thumb_reload_in_hi (rtx *);
c9ca9b88 196extern void thumb_set_return_address (rtx, rtx);
5b3e6663 197extern const char *thumb2_output_casesi(rtx *);
d5b7b3ae
RE
198#endif
199
200/* Defined in pe.c. */
e32bac5b
RE
201extern int arm_dllexport_name_p (const char *);
202extern int arm_dllimport_name_p (const char *);
d5b7b3ae
RE
203
204#ifdef TREE_CODE
e32bac5b
RE
205extern void arm_pe_unique_section (tree, int);
206extern void arm_pe_encode_section_info (tree, rtx, int);
207extern int arm_dllexport_p (tree);
208extern int arm_dllimport_p (tree);
209extern void arm_mark_dllexport (tree);
210extern void arm_mark_dllimport (tree);
d5b7b3ae 211#endif
8b97c5f8 212
e32bac5b
RE
213extern void arm_pr_long_calls (struct cpp_reader *);
214extern void arm_pr_no_long_calls (struct cpp_reader *);
215extern void arm_pr_long_calls_off (struct cpp_reader *);
8b97c5f8 216
608063c3
JB
217extern const char *arm_mangle_type (tree);
218
88657302 219#endif /* ! GCC_ARM_PROTOS_H */