sh-protos.h revision 1.1.1.1.4.2 1 1.1.1.1.4.2 yamt /* Definitions of target machine for GNU compiler for Renesas / SuperH SH.
2 1.1.1.1.4.2 yamt Copyright (C) 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2003,
3 1.1.1.1.4.2 yamt 2004, 2005, 2006, 2007, 2008, 2009
4 1.1.1.1.4.2 yamt Free Software Foundation, Inc.
5 1.1.1.1.4.2 yamt Contributed by Steve Chamberlain (sac (at) cygnus.com).
6 1.1.1.1.4.2 yamt Improved by Jim Wilson (wilson (at) cygnus.com).
7 1.1.1.1.4.2 yamt
8 1.1.1.1.4.2 yamt This file is part of GCC.
9 1.1.1.1.4.2 yamt
10 1.1.1.1.4.2 yamt GCC is free software; you can redistribute it and/or modify
11 1.1.1.1.4.2 yamt it under the terms of the GNU General Public License as published by
12 1.1.1.1.4.2 yamt the Free Software Foundation; either version 3, or (at your option)
13 1.1.1.1.4.2 yamt any later version.
14 1.1.1.1.4.2 yamt
15 1.1.1.1.4.2 yamt GCC is distributed in the hope that it will be useful,
16 1.1.1.1.4.2 yamt but WITHOUT ANY WARRANTY; without even the implied warranty of
17 1.1.1.1.4.2 yamt MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18 1.1.1.1.4.2 yamt GNU General Public License for more details.
19 1.1.1.1.4.2 yamt
20 1.1.1.1.4.2 yamt You should have received a copy of the GNU General Public License
21 1.1.1.1.4.2 yamt along with GCC; see the file COPYING3. If not see
22 1.1.1.1.4.2 yamt <http://www.gnu.org/licenses/>. */
23 1.1.1.1.4.2 yamt
24 1.1.1.1.4.2 yamt #ifndef GCC_SH_PROTOS_H
25 1.1.1.1.4.2 yamt #define GCC_SH_PROTOS_H
26 1.1.1.1.4.2 yamt
27 1.1.1.1.4.2 yamt enum sh_function_kind {
28 1.1.1.1.4.2 yamt /* A function with normal C ABI */
29 1.1.1.1.4.2 yamt FUNCTION_ORDINARY,
30 1.1.1.1.4.2 yamt /* A special function that guarantees that some otherwise call-clobbered
31 1.1.1.1.4.2 yamt registers are not clobbered. These can't go through the SH5 resolver,
32 1.1.1.1.4.2 yamt because it only saves argument passing registers. */
33 1.1.1.1.4.2 yamt SFUNC_GOT,
34 1.1.1.1.4.2 yamt /* A special function that should be linked statically. These are typically
35 1.1.1.1.4.2 yamt smaller or not much larger than a PLT entry.
36 1.1.1.1.4.2 yamt Some also have a non-standard ABI which precludes dynamic linking. */
37 1.1.1.1.4.2 yamt SFUNC_STATIC
38 1.1.1.1.4.2 yamt };
39 1.1.1.1.4.2 yamt
40 1.1.1.1.4.2 yamt #ifdef RTX_CODE
41 1.1.1.1.4.2 yamt extern rtx sh_fsca_sf2int (void);
42 1.1.1.1.4.2 yamt extern rtx sh_fsca_df2int (void);
43 1.1.1.1.4.2 yamt extern rtx sh_fsca_int2sf (void);
44 1.1.1.1.4.2 yamt
45 1.1.1.1.4.2 yamt /* Declare functions defined in sh.c and used in templates. */
46 1.1.1.1.4.2 yamt
47 1.1.1.1.4.2 yamt extern const char *output_branch (int, rtx, rtx *);
48 1.1.1.1.4.2 yamt extern const char *output_ieee_ccmpeq (rtx, rtx *);
49 1.1.1.1.4.2 yamt extern const char *output_branchy_insn (enum rtx_code, const char *, rtx, rtx *);
50 1.1.1.1.4.2 yamt extern const char *output_movedouble (rtx, rtx[], enum machine_mode);
51 1.1.1.1.4.2 yamt extern const char *output_movepcrel (rtx, rtx[], enum machine_mode);
52 1.1.1.1.4.2 yamt extern const char *output_far_jump (rtx, rtx);
53 1.1.1.1.4.2 yamt
54 1.1.1.1.4.2 yamt extern struct rtx_def *sfunc_uses_reg (rtx);
55 1.1.1.1.4.2 yamt extern int barrier_align (rtx);
56 1.1.1.1.4.2 yamt extern int sh_loop_align (rtx);
57 1.1.1.1.4.2 yamt extern int fp_zero_operand (rtx);
58 1.1.1.1.4.2 yamt extern int fp_one_operand (rtx);
59 1.1.1.1.4.2 yamt extern int fp_int_operand (rtx);
60 1.1.1.1.4.2 yamt extern rtx get_fpscr_rtx (void);
61 1.1.1.1.4.2 yamt extern bool sh_legitimate_index_p (enum machine_mode, rtx);
62 1.1.1.1.4.2 yamt extern rtx legitimize_pic_address (rtx, enum machine_mode, rtx);
63 1.1.1.1.4.2 yamt extern int nonpic_symbol_mentioned_p (rtx);
64 1.1.1.1.4.2 yamt extern void emit_sf_insn (rtx);
65 1.1.1.1.4.2 yamt extern void emit_df_insn (rtx);
66 1.1.1.1.4.2 yamt extern void print_operand_address (FILE *, rtx);
67 1.1.1.1.4.2 yamt extern void print_operand (FILE *, rtx, int);
68 1.1.1.1.4.2 yamt extern void output_pic_addr_const (FILE *, rtx);
69 1.1.1.1.4.2 yamt extern int expand_block_move (rtx *);
70 1.1.1.1.4.2 yamt extern int prepare_move_operands (rtx[], enum machine_mode mode);
71 1.1.1.1.4.2 yamt extern enum rtx_code prepare_cbranch_operands (rtx *, enum machine_mode mode,
72 1.1.1.1.4.2 yamt enum rtx_code comparison);
73 1.1.1.1.4.2 yamt extern void expand_cbranchsi4 (rtx *operands, enum rtx_code comparison, int);
74 1.1.1.1.4.2 yamt extern bool expand_cbranchdi4 (rtx *operands, enum rtx_code comparison);
75 1.1.1.1.4.2 yamt extern void sh_emit_scc_to_t (enum rtx_code, rtx, rtx);
76 1.1.1.1.4.2 yamt extern rtx sh_emit_cheap_store_flag (enum machine_mode, enum rtx_code, rtx, rtx);
77 1.1.1.1.4.2 yamt extern void sh_emit_compare_and_branch (rtx *, enum machine_mode);
78 1.1.1.1.4.2 yamt extern void sh_emit_compare_and_set (rtx *, enum machine_mode);
79 1.1.1.1.4.2 yamt extern int shift_insns_rtx (rtx);
80 1.1.1.1.4.2 yamt extern void gen_ashift (int, int, rtx);
81 1.1.1.1.4.2 yamt extern void gen_ashift_hi (int, int, rtx);
82 1.1.1.1.4.2 yamt extern void gen_shifty_op (int, rtx *);
83 1.1.1.1.4.2 yamt extern void gen_shifty_hi_op (int, rtx *);
84 1.1.1.1.4.2 yamt extern int expand_ashiftrt (rtx *);
85 1.1.1.1.4.2 yamt extern int sh_dynamicalize_shift_p (rtx);
86 1.1.1.1.4.2 yamt extern int shl_and_kind (rtx, rtx, int *);
87 1.1.1.1.4.2 yamt extern int shl_and_length (rtx);
88 1.1.1.1.4.2 yamt extern int shl_and_scr_length (rtx);
89 1.1.1.1.4.2 yamt extern int gen_shl_and (rtx, rtx, rtx, rtx);
90 1.1.1.1.4.2 yamt extern int shl_sext_kind (rtx, rtx, int *);
91 1.1.1.1.4.2 yamt extern int shl_sext_length (rtx);
92 1.1.1.1.4.2 yamt extern int gen_shl_sext (rtx, rtx, rtx, rtx);
93 1.1.1.1.4.2 yamt extern rtx gen_datalabel_ref (rtx);
94 1.1.1.1.4.2 yamt extern int regs_used (rtx, int);
95 1.1.1.1.4.2 yamt extern void fixup_addr_diff_vecs (rtx);
96 1.1.1.1.4.2 yamt extern int get_dest_uid (rtx, int);
97 1.1.1.1.4.2 yamt extern void final_prescan_insn (rtx, rtx *, int);
98 1.1.1.1.4.2 yamt extern int symbol_ref_operand (rtx, enum machine_mode);
99 1.1.1.1.4.2 yamt extern enum tls_model tls_symbolic_operand (rtx, enum machine_mode);
100 1.1.1.1.4.2 yamt extern int system_reg_operand (rtx, enum machine_mode);
101 1.1.1.1.4.2 yamt extern int general_movsrc_operand (rtx, enum machine_mode);
102 1.1.1.1.4.2 yamt extern int general_movdst_operand (rtx, enum machine_mode);
103 1.1.1.1.4.2 yamt extern int arith_reg_operand (rtx, enum machine_mode);
104 1.1.1.1.4.2 yamt extern int fp_arith_reg_operand (rtx, enum machine_mode);
105 1.1.1.1.4.2 yamt extern int arith_operand (rtx, enum machine_mode);
106 1.1.1.1.4.2 yamt extern int arith_reg_or_0_operand (rtx, enum machine_mode);
107 1.1.1.1.4.2 yamt extern int logical_operand (rtx, enum machine_mode);
108 1.1.1.1.4.2 yamt extern int tertiary_reload_operand (rtx, enum machine_mode);
109 1.1.1.1.4.2 yamt extern int fpscr_operand (rtx, enum machine_mode);
110 1.1.1.1.4.2 yamt extern int fpul_operand (rtx, enum machine_mode);
111 1.1.1.1.4.2 yamt extern int commutative_float_operator (rtx, enum machine_mode);
112 1.1.1.1.4.2 yamt extern int noncommutative_float_operator (rtx, enum machine_mode);
113 1.1.1.1.4.2 yamt extern int reg_unused_after (rtx, rtx);
114 1.1.1.1.4.2 yamt extern void expand_sf_unop (rtx (*)(rtx, rtx, rtx), rtx *);
115 1.1.1.1.4.2 yamt extern void expand_sf_binop (rtx (*)(rtx, rtx, rtx, rtx), rtx *);
116 1.1.1.1.4.2 yamt extern void expand_df_unop (rtx (*)(rtx, rtx, rtx), rtx *);
117 1.1.1.1.4.2 yamt extern void expand_df_binop (rtx (*)(rtx, rtx, rtx, rtx), rtx *);
118 1.1.1.1.4.2 yamt extern void expand_fp_branch (rtx (*)(void), rtx (*)(void));
119 1.1.1.1.4.2 yamt extern int sh_insn_length_adjustment (rtx);
120 1.1.1.1.4.2 yamt extern int sh_can_redirect_branch (rtx, rtx);
121 1.1.1.1.4.2 yamt extern void sh_expand_unop_v2sf (enum rtx_code, rtx, rtx);
122 1.1.1.1.4.2 yamt extern void sh_expand_binop_v2sf (enum rtx_code, rtx, rtx, rtx);
123 1.1.1.1.4.2 yamt extern int sh_expand_t_scc (rtx *);
124 1.1.1.1.4.2 yamt extern rtx sh_gen_truncate (enum machine_mode, rtx, int);
125 1.1.1.1.4.2 yamt extern bool sh_vector_mode_supported_p (enum machine_mode);
126 1.1.1.1.4.2 yamt #endif /* RTX_CODE */
127 1.1.1.1.4.2 yamt
128 1.1.1.1.4.2 yamt extern void sh_optimization_options (int, int);
129 1.1.1.1.4.2 yamt extern void sh_override_options (void);
130 1.1.1.1.4.2 yamt extern const char *output_jump_label_table (void);
131 1.1.1.1.4.2 yamt extern int sh_handle_pragma (int (*)(void), void (*)(int), const char *);
132 1.1.1.1.4.2 yamt extern struct rtx_def *get_fpscr_rtx (void);
133 1.1.1.1.4.2 yamt extern int sh_media_register_for_return (void);
134 1.1.1.1.4.2 yamt extern void sh_expand_prologue (void);
135 1.1.1.1.4.2 yamt extern void sh_expand_epilogue (bool);
136 1.1.1.1.4.2 yamt extern int sh_need_epilogue (void);
137 1.1.1.1.4.2 yamt extern void sh_set_return_address (rtx, rtx);
138 1.1.1.1.4.2 yamt extern int initial_elimination_offset (int, int);
139 1.1.1.1.4.2 yamt extern int fldi_ok (void);
140 1.1.1.1.4.2 yamt extern int sh_hard_regno_rename_ok (unsigned int, unsigned int);
141 1.1.1.1.4.2 yamt extern int sh_cfun_interrupt_handler_p (void);
142 1.1.1.1.4.2 yamt extern int sh_cfun_resbank_handler_p (void);
143 1.1.1.1.4.2 yamt extern int sh_attr_renesas_p (const_tree);
144 1.1.1.1.4.2 yamt extern int sh_cfun_attr_renesas_p (void);
145 1.1.1.1.4.2 yamt extern bool sh_cannot_change_mode_class
146 1.1.1.1.4.2 yamt (enum machine_mode, enum machine_mode, enum reg_class);
147 1.1.1.1.4.2 yamt extern void sh_mark_label (rtx, int);
148 1.1.1.1.4.2 yamt extern int sh_register_move_cost
149 1.1.1.1.4.2 yamt (enum machine_mode mode, enum reg_class, enum reg_class);
150 1.1.1.1.4.2 yamt extern int check_use_sfunc_addr (rtx, rtx);
151 1.1.1.1.4.2 yamt
152 1.1.1.1.4.2 yamt #ifdef HARD_CONST
153 1.1.1.1.4.2 yamt extern void fpscr_set_from_mem (int, HARD_REG_SET);
154 1.1.1.1.4.2 yamt #endif
155 1.1.1.1.4.2 yamt
156 1.1.1.1.4.2 yamt extern void sh_pr_interrupt (struct cpp_reader *);
157 1.1.1.1.4.2 yamt extern void sh_pr_trapa (struct cpp_reader *);
158 1.1.1.1.4.2 yamt extern void sh_pr_nosave_low_regs (struct cpp_reader *);
159 1.1.1.1.4.2 yamt extern rtx function_symbol (rtx, const char *, enum sh_function_kind);
160 1.1.1.1.4.2 yamt extern rtx sh_get_pr_initial_val (void);
161 1.1.1.1.4.2 yamt
162 1.1.1.1.4.2 yamt extern rtx sh_function_arg (CUMULATIVE_ARGS *, enum machine_mode, tree, int);
163 1.1.1.1.4.2 yamt extern void sh_function_arg_advance (CUMULATIVE_ARGS *, enum machine_mode, tree, int);
164 1.1.1.1.4.2 yamt extern int sh_pass_in_reg_p (CUMULATIVE_ARGS *, enum machine_mode, tree);
165 1.1.1.1.4.2 yamt extern void sh_init_cumulative_args (CUMULATIVE_ARGS *, tree, rtx, tree, signed int, enum machine_mode);
166 1.1.1.1.4.2 yamt extern bool sh_function_value_regno_p (const unsigned int);
167 1.1.1.1.4.2 yamt extern rtx sh_dwarf_register_span (rtx);
168 1.1.1.1.4.2 yamt
169 1.1.1.1.4.2 yamt extern rtx replace_n_hard_rtx (rtx, rtx *, int , int);
170 1.1.1.1.4.2 yamt extern int shmedia_cleanup_truncate (rtx *, void *);
171 1.1.1.1.4.2 yamt
172 1.1.1.1.4.2 yamt extern int sh_contains_memref_p (rtx);
173 1.1.1.1.4.2 yamt extern int sh_loads_bankedreg_p (rtx);
174 1.1.1.1.4.2 yamt extern rtx shmedia_prepare_call_address (rtx fnaddr, int is_sibcall);
175 1.1.1.1.4.2 yamt struct secondary_reload_info;
176 1.1.1.1.4.2 yamt extern enum reg_class sh_secondary_reload (bool, rtx, enum reg_class,
177 1.1.1.1.4.2 yamt enum machine_mode,
178 1.1.1.1.4.2 yamt struct secondary_reload_info *);
179 1.1.1.1.4.2 yamt extern int sh2a_get_function_vector_number (rtx);
180 1.1.1.1.4.2 yamt extern int sh2a_is_function_vector_call (rtx);
181 1.1.1.1.4.2 yamt extern void sh_fix_range (const char *);
182 1.1.1.1.4.2 yamt extern bool sh_hard_regno_mode_ok (unsigned int, enum machine_mode);
183 1.1.1.1.4.2 yamt #endif /* ! GCC_SH_PROTOS_H */
184 1.1.1.1.4.2 yamt
185 1.1.1.1.4.2 yamt #ifdef SYMBIAN
186 1.1.1.1.4.2 yamt extern const char * sh_symbian_strip_name_encoding (const char *);
187 1.1.1.1.4.2 yamt extern bool sh_symbian_is_dllexported_name (const char *);
188 1.1.1.1.4.2 yamt #ifdef TREE_CODE
189 1.1.1.1.4.2 yamt extern bool sh_symbian_is_dllexported (tree);
190 1.1.1.1.4.2 yamt extern int sh_symbian_import_export_class (tree, int);
191 1.1.1.1.4.2 yamt extern tree sh_symbian_handle_dll_attribute (tree *, tree, tree, int, bool *);
192 1.1.1.1.4.2 yamt #ifdef RTX_CODE
193 1.1.1.1.4.2 yamt extern void sh_symbian_encode_section_info (tree, rtx, int);
194 1.1.1.1.4.2 yamt #endif
195 1.1.1.1.4.2 yamt #endif
196 1.1.1.1.4.2 yamt #endif /* SYMBIAN */
197 1.1.1.1.4.2 yamt
198