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