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