]> git.ipfire.org Git - thirdparty/gcc.git/blame - gcc/config/rs6000/rs6000-protos.h
* loop.c: Move comments describing BIV's and GIV's to top of file
[thirdparty/gcc.git] / gcc / config / rs6000 / rs6000-protos.h
CommitLineData
9ebbca7d 1/* Definitions of target machine for GNU compiler, for IBM RS/6000.
5de601cf 2 Copyright (C) 2000, 2001, 2002, 2003 Free Software Foundation, Inc.
9ebbca7d
GK
3 Contributed by Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
4
5de601cf 5 This file is part of GCC.
9ebbca7d 6
5de601cf
NC
7 GCC is free software; you can redistribute it and/or modify it
8 under the terms of the GNU General Public License as published
9 by the Free Software Foundation; either version 2, or (at your
10 option) any later version.
9ebbca7d 11
5de601cf
NC
12 GCC is distributed in the hope that it will be useful, but WITHOUT
13 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
14 or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
15 License for more details.
9ebbca7d 16
5de601cf
NC
17 You should have received a copy of the GNU General Public License
18 along with GCC; see the file COPYING. If not, write to the
19 Free Software Foundation, 59 Temple Place - Suite 330, Boston,
20 MA 02111-1307, USA. */
9ebbca7d 21
a5c76ee6
ZW
22#ifndef GCC_RS6000_PROTOS_H
23#define GCC_RS6000_PROTOS_H
24
9ebbca7d
GK
25/* Declare functions in rs6000.c */
26
27#ifdef RTX_CODE
28
29#ifdef TREE_CODE
b9599e46 30extern void init_cumulative_args PARAMS ((CUMULATIVE_ARGS *, tree, rtx, int, int));
e5faf155 31extern void rs6000_va_start PARAMS ((tree, rtx));
9ebbca7d
GK
32#endif /* TREE_CODE */
33
34extern struct rtx_def *rs6000_got_register PARAMS ((rtx));
35extern struct rtx_def *find_addr_reg PARAMS ((rtx));
36extern int any_operand PARAMS ((rtx, enum machine_mode));
37extern int short_cint_operand PARAMS ((rtx, enum machine_mode));
38extern int u_short_cint_operand PARAMS ((rtx, enum machine_mode));
39extern int non_short_cint_operand PARAMS ((rtx, enum machine_mode));
2bfcf297 40extern int exact_log2_cint_operand PARAMS ((rtx, enum machine_mode));
9ebbca7d
GK
41extern int gpc_reg_operand PARAMS ((rtx, enum machine_mode));
42extern int cc_reg_operand PARAMS ((rtx, enum machine_mode));
43extern int cc_reg_not_cr0_operand PARAMS ((rtx, enum machine_mode));
44extern int reg_or_short_operand PARAMS ((rtx, enum machine_mode));
45extern int reg_or_neg_short_operand PARAMS ((rtx, enum machine_mode));
768070a0 46extern int reg_or_aligned_short_operand PARAMS ((rtx, enum machine_mode));
9ebbca7d
GK
47extern int reg_or_u_short_operand PARAMS ((rtx, enum machine_mode));
48extern int reg_or_cint_operand PARAMS ((rtx, enum machine_mode));
f6bf7de2 49extern int reg_or_arith_cint_operand PARAMS ((rtx, enum machine_mode));
2bfcf297
DB
50extern int reg_or_add_cint64_operand PARAMS ((rtx, enum machine_mode));
51extern int reg_or_sub_cint64_operand PARAMS ((rtx, enum machine_mode));
1d328b19 52extern int reg_or_logical_cint_operand PARAMS ((rtx, enum machine_mode));
9ebbca7d
GK
53extern int got_operand PARAMS ((rtx, enum machine_mode));
54extern int got_no_const_operand PARAMS ((rtx, enum machine_mode));
55extern int num_insns_constant PARAMS ((rtx, enum machine_mode));
56extern int easy_fp_constant PARAMS ((rtx, enum machine_mode));
d744e06e
AH
57extern int easy_vector_constant PARAMS ((rtx, enum machine_mode));
58extern const char *output_vec_const_move PARAMS ((rtx *));
50a0b056 59extern int zero_fp_constant PARAMS ((rtx, enum machine_mode));
69ef87e2 60extern int zero_constant PARAMS ((rtx, enum machine_mode));
9ebbca7d
GK
61extern int volatile_mem_operand PARAMS ((rtx, enum machine_mode));
62extern int offsettable_mem_operand PARAMS ((rtx, enum machine_mode));
63extern int mem_or_easy_const_operand PARAMS ((rtx, enum machine_mode));
64extern int add_operand PARAMS ((rtx, enum machine_mode));
65extern int non_add_cint_operand PARAMS ((rtx, enum machine_mode));
66extern int non_logical_cint_operand PARAMS ((rtx, enum machine_mode));
9ebbca7d 67extern int logical_operand PARAMS ((rtx, enum machine_mode));
9ebbca7d 68extern int mask_operand PARAMS ((rtx, enum machine_mode));
0ba1b2ff 69extern int mask_operand_wrap PARAMS ((rtx, enum machine_mode));
9ebbca7d 70extern int mask64_operand PARAMS ((rtx, enum machine_mode));
0ba1b2ff
AM
71extern int mask64_2_operand PARAMS ((rtx, enum machine_mode));
72extern void build_mask64_2_operands PARAMS ((rtx, rtx *));
9ebbca7d 73extern int and64_operand PARAMS ((rtx, enum machine_mode));
0ba1b2ff 74extern int and64_2_operand PARAMS ((rtx, enum machine_mode));
9ebbca7d
GK
75extern int and_operand PARAMS ((rtx, enum machine_mode));
76extern int count_register_operand PARAMS ((rtx, enum machine_mode));
77extern int xer_operand PARAMS ((rtx, enum machine_mode));
78extern int reg_or_mem_operand PARAMS ((rtx, enum machine_mode));
79extern int lwa_operand PARAMS ((rtx, enum machine_mode));
80extern int call_operand PARAMS ((rtx, enum machine_mode));
81extern int current_file_function_operand PARAMS ((rtx, enum machine_mode));
82extern int input_operand PARAMS ((rtx, enum machine_mode));
83extern int small_data_operand PARAMS ((rtx, enum machine_mode));
b3656137 84extern int s8bit_cint_operand PARAMS ((rtx, enum machine_mode));
4d588c14 85extern bool legitimate_constant_pool_address_p PARAMS ((rtx));
9ebbca7d
GK
86extern int expand_block_move PARAMS ((rtx[]));
87extern int load_multiple_operation PARAMS ((rtx, enum machine_mode));
9caa3eb2 88extern const char * rs6000_output_load_multiple PARAMS ((rtx[]));
9ebbca7d
GK
89extern int store_multiple_operation PARAMS ((rtx, enum machine_mode));
90extern int branch_comparison_operator PARAMS ((rtx, enum machine_mode));
39a10a29
GK
91extern int branch_positive_comparison_operator
92 PARAMS ((rtx, enum machine_mode));
9ebbca7d
GK
93extern int scc_comparison_operator PARAMS ((rtx, enum machine_mode));
94extern int trap_comparison_operator PARAMS ((rtx, enum machine_mode));
dfbdccdb 95extern int boolean_operator PARAMS ((rtx, enum machine_mode));
1d328b19 96extern int boolean_or_operator PARAMS ((rtx, enum machine_mode));
50a0b056 97extern int min_max_operator PARAMS ((rtx, enum machine_mode));
9ebbca7d
GK
98extern int includes_lshift_p PARAMS ((rtx, rtx));
99extern int includes_rshift_p PARAMS ((rtx, rtx));
c5059423
AM
100extern int includes_rldic_lshift_p PARAMS ((rtx, rtx));
101extern int includes_rldicr_lshift_p PARAMS ((rtx, rtx));
9ebbca7d
GK
102extern int registers_ok_for_quad_peep PARAMS ((rtx, rtx));
103extern int addrs_ok_for_quad_peep PARAMS ((rtx, rtx));
46c07df8 104extern int altivec_in_gprs_p (rtx, rtx);
9ebbca7d
GK
105extern enum reg_class secondary_reload_class PARAMS ((enum reg_class,
106 enum machine_mode, rtx));
107extern int ccr_bit PARAMS ((rtx, int));
0ba1b2ff
AM
108extern int extract_MB PARAMS ((rtx));
109extern int extract_ME PARAMS ((rtx));
9ebbca7d
GK
110extern void print_operand PARAMS ((FILE *, rtx, int));
111extern void print_operand_address PARAMS ((FILE *, rtx));
39a10a29
GK
112extern enum rtx_code rs6000_reverse_condition PARAMS ((enum machine_mode,
113 enum rtx_code));
114extern void rs6000_emit_sCOND PARAMS ((enum rtx_code, rtx));
115extern void rs6000_emit_cbranch PARAMS ((enum rtx_code, rtx));
12a4e8c5 116extern char * output_cbranch PARAMS ((rtx, const char *, int, rtx));
2bfcf297 117extern rtx rs6000_emit_set_const PARAMS ((rtx, enum machine_mode, rtx, int));
50a0b056
GK
118extern int rs6000_emit_cmove PARAMS ((rtx, rtx, rtx, rtx));
119extern void rs6000_emit_minmax PARAMS ((rtx, enum rtx_code, rtx, rtx));
a9098fd0 120extern void output_toc PARAMS ((FILE *, rtx, int, enum machine_mode));
9ebbca7d
GK
121extern void rs6000_initialize_trampoline PARAMS ((rtx, rtx, rtx));
122extern struct rtx_def *rs6000_longcall_ref PARAMS ((rtx));
123extern void rs6000_fatal_bad_address PARAMS ((rtx));
124extern int stmw_operation PARAMS ((rtx, enum machine_mode));
2c4a9cff 125extern int mfcr_operation PARAMS ((rtx, enum machine_mode));
9ebbca7d
GK
126extern int mtcrf_operation PARAMS ((rtx, enum machine_mode));
127extern int lmw_operation PARAMS ((rtx, enum machine_mode));
128extern struct rtx_def *create_TOC_reference PARAMS ((rtx));
46c07df8 129extern void rs6000_split_altivec_in_gprs (rtx *);
fb4d4348 130extern void rs6000_emit_move PARAMS ((rtx, rtx, enum machine_mode));
9ebbca7d 131extern rtx rs6000_legitimize_address PARAMS ((rtx, rtx, enum machine_mode));
24ea750e
DJ
132extern rtx rs6000_legitimize_reload_address PARAMS ((rtx, enum machine_mode,
133 int, int, int, int *));
258bfae2 134extern int rs6000_legitimate_address PARAMS ((enum machine_mode, rtx, int));
4d588c14 135extern bool rs6000_mode_dependent_address PARAMS ((rtx));
608ab802 136extern rtx rs6000_return_addr PARAMS ((int, rtx));
28e510bd 137extern void rs6000_output_symbol_ref PARAMS ((FILE*, rtx));
ee890fe2
SS
138
139extern rtx rs6000_machopic_legitimize_pic_address PARAMS ((rtx orig, enum machine_mode mode, rtx reg));
140
9ebbca7d
GK
141#endif /* RTX_CODE */
142
143#ifdef TREE_CODE
144extern void function_arg_advance PARAMS ((CUMULATIVE_ARGS *, enum machine_mode,
145 tree, int));
146extern int function_arg_boundary PARAMS ((enum machine_mode, tree));
147extern struct rtx_def *function_arg PARAMS ((CUMULATIVE_ARGS *,
148 enum machine_mode, tree, int));
149extern int function_arg_partial_nregs PARAMS ((CUMULATIVE_ARGS *,
150 enum machine_mode, tree, int));
151extern int function_arg_pass_by_reference PARAMS ((CUMULATIVE_ARGS *,
152 enum machine_mode,
153 tree, int));
154extern void setup_incoming_varargs PARAMS ((CUMULATIVE_ARGS *,
155 enum machine_mode, tree,
156 int *, int));
a6ebc39a 157extern rtx rs6000_function_value (tree, tree);
ded9bf77 158extern rtx rs6000_libcall_value (enum machine_mode);
9ebbca7d 159extern struct rtx_def *rs6000_va_arg PARAMS ((tree, tree));
5e1bf043 160extern int function_ok_for_sibcall PARAMS ((tree));
9739c90c
JJ
161extern void rs6000_elf_declare_function_name
162 PARAMS ((FILE *, const char *, tree));
9ebbca7d
GK
163#ifdef ARGS_SIZE_RTX
164/* expr.h defines ARGS_SIZE_RTX and `enum direction' */
165extern enum direction function_arg_padding PARAMS ((enum machine_mode, tree));
166#endif /* ARGS_SIZE_RTX */
ee890fe2 167
9ebbca7d
GK
168#endif /* TREE_CODE */
169
170extern void optimization_options PARAMS ((int, int));
171extern void rs6000_override_options PARAMS ((const char *));
9ebbca7d 172extern int direct_return PARAMS ((void));
9ebbca7d 173extern union tree_node *rs6000_build_va_list PARAMS ((void));
9ebbca7d
GK
174extern int first_reg_to_save PARAMS ((void));
175extern int first_fp_reg_to_save PARAMS ((void));
176extern rs6000_stack_t *rs6000_stack_info PARAMS ((void));
9ebbca7d
GK
177extern void output_ascii PARAMS ((FILE *, const char *, int));
178extern void rs6000_gen_section_name PARAMS ((char **, const char *,
179 const char *));
180extern void output_function_profiler PARAMS ((FILE *, int));
411707f4 181extern void output_profile_hook PARAMS ((int));
9ebbca7d
GK
182extern int rs6000_trampoline_size PARAMS ((void));
183extern void toc_section PARAMS ((void));
184extern void sdata_section PARAMS ((void));
185extern void sdata2_section PARAMS ((void));
186extern void sbss_section PARAMS ((void));
187extern void private_data_section PARAMS ((void));
55710451
KG
188extern void read_only_data_section PARAMS ((void));
189extern void read_only_private_data_section PARAMS ((void));
9ebbca7d
GK
190extern int get_TOC_alias_set PARAMS ((void));
191extern int uses_TOC PARAMS ((void));
192extern void rs6000_emit_prologue PARAMS ((void));
193extern void rs6000_emit_load_toc_table PARAMS ((int));
194extern void rs6000_aix_emit_builtin_unwind_init PARAMS ((void));
195extern void rs6000_emit_epilogue PARAMS ((int));
196extern void debug_stack_info PARAMS ((rs6000_stack_t *));
9caa3eb2 197extern const char * output_isel PARAMS ((rtx *));
a3170dc6 198extern int vrsave_operation PARAMS ((rtx, enum machine_mode));
34bb030a
DE
199extern int rs6000_register_move_cost PARAMS ((enum machine_mode,
200 enum reg_class, enum reg_class));
201extern int rs6000_memory_move_cost PARAMS ((enum machine_mode,
202 enum reg_class, int));
c4501e62
JJ
203extern bool rs6000_tls_referenced_p PARAMS ((rtx));
204extern int rs6000_tls_symbol_ref PARAMS ((rtx, enum machine_mode));
ee890fe2 205
4c4eb375
GK
206/* Declare functions in rs6000-c.c */
207
e150159c
SS
208extern void rs6000_pragma_longcall PARAMS ((struct cpp_reader *));
209extern void rs6000_cpu_cpp_builtins PARAMS ((struct cpp_reader *));
a5c76ee6
ZW
210
211#endif /* rs6000-protos.h */