i386-protos.h revision 96263
1235537Sgber/* Definitions of target machine for GNU compiler for IA-32.
2235537Sgber   Copyright (C) 1988, 1992, 1994, 1995, 1996, 1996, 1997, 1998, 1999,
3235537Sgber   2000, 2001 Free Software Foundation, Inc.
4235537Sgber
5235537SgberThis file is part of GNU CC.
6235537Sgber
7235537SgberGNU CC is free software; you can redistribute it and/or modify
8235537Sgberit under the terms of the GNU General Public License as published by
9235537Sgberthe Free Software Foundation; either version 2, or (at your option)
10235537Sgberany later version.
11235537Sgber
12235537SgberGNU CC is distributed in the hope that it will be useful,
13235537Sgberbut WITHOUT ANY WARRANTY; without even the implied warranty of
14235537SgberMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15235537SgberGNU General Public License for more details.
16235537Sgber
17235537SgberYou should have received a copy of the GNU General Public License
18235537Sgberalong with GNU CC; see the file COPYING.  If not, write to
19235537Sgberthe Free Software Foundation, 59 Temple Place - Suite 330,
20235537SgberBoston, MA 02111-1307, USA.  */
21235537Sgber
22235537Sgber/* Functions in i386.c */
23235537Sgberextern void override_options PARAMS ((void));
24235537Sgberextern void optimization_options PARAMS ((int, int));
25235537Sgber
26235537Sgberextern int ix86_can_use_return_insn_p PARAMS ((void));
27235537Sgberextern int ix86_frame_pointer_required PARAMS ((void));
28235537Sgberextern void ix86_setup_frame_addresses PARAMS ((void));
29235537Sgber
30235537Sgberextern void ix86_asm_file_end PARAMS ((FILE *));
31235537Sgberextern void load_pic_register PARAMS ((void));
32235537Sgberextern HOST_WIDE_INT ix86_initial_elimination_offset PARAMS((int, int));
33235537Sgberextern void ix86_expand_prologue PARAMS ((void));
34235537Sgberextern void ix86_expand_epilogue PARAMS ((int));
35235537Sgber
36235537Sgberextern void ix86_output_function_block_profiler PARAMS ((FILE *, int));
37235537Sgberextern void ix86_output_block_profiler PARAMS ((FILE *, int));
38235537Sgber
39235537Sgberextern void ix86_output_addr_vec_elt PARAMS ((FILE *, int));
40235537Sgberextern void ix86_output_addr_diff_elt PARAMS ((FILE *, int, int));
41235537Sgber
42235537Sgber#ifdef RTX_CODE
43235537Sgberextern int ix86_aligned_p PARAMS ((rtx));
44235537Sgber
45235537Sgberextern int standard_80387_constant_p PARAMS ((rtx));
46235537Sgberextern int standard_sse_constant_p PARAMS ((rtx));
47235537Sgberextern int symbolic_reference_mentioned_p PARAMS ((rtx));
48235537Sgber
49235537Sgberextern int x86_64_general_operand PARAMS ((rtx, enum machine_mode));
50235537Sgberextern int x86_64_szext_general_operand PARAMS ((rtx, enum machine_mode));
51235537Sgberextern int x86_64_nonmemory_operand PARAMS ((rtx, enum machine_mode));
52235537Sgberextern int x86_64_szext_nonmemory_operand PARAMS ((rtx, enum machine_mode));
53235537Sgberextern int x86_64_immediate_operand PARAMS ((rtx, enum machine_mode));
54235537Sgberextern int x86_64_zext_immediate_operand PARAMS ((rtx, enum machine_mode));
55235537Sgberextern int const_int_1_operand PARAMS ((rtx, enum machine_mode));
56235537Sgberextern int symbolic_operand PARAMS ((rtx, enum machine_mode));
57235537Sgberextern int pic_symbolic_operand PARAMS ((rtx, enum machine_mode));
58235537Sgberextern int call_insn_operand PARAMS ((rtx, enum machine_mode));
59235537Sgberextern int constant_call_address_operand PARAMS ((rtx, enum machine_mode));
60235537Sgberextern int const0_operand PARAMS ((rtx, enum machine_mode));
61235537Sgberextern int const1_operand PARAMS ((rtx, enum machine_mode));
62235537Sgberextern int const248_operand PARAMS ((rtx, enum machine_mode));
63235537Sgberextern int incdec_operand PARAMS ((rtx, enum machine_mode));
64235537Sgberextern int reg_no_sp_operand PARAMS ((rtx, enum machine_mode));
65235537Sgberextern int mmx_reg_operand PARAMS ((rtx, enum machine_mode));
66235537Sgberextern int general_no_elim_operand PARAMS ((rtx, enum machine_mode));
67235537Sgberextern int nonmemory_no_elim_operand PARAMS ((rtx, enum machine_mode));
68235537Sgberextern int q_regs_operand PARAMS ((rtx, enum machine_mode));
69235537Sgberextern int non_q_regs_operand PARAMS ((rtx, enum machine_mode));
70235537Sgberextern int sse_comparison_operator PARAMS ((rtx, enum machine_mode));
71235537Sgberextern int fcmov_comparison_operator PARAMS ((rtx, enum machine_mode));
72235537Sgberextern int cmp_fp_expander_operand PARAMS ((rtx, enum machine_mode));
73235537Sgberextern int ix86_comparison_operator PARAMS ((rtx, enum machine_mode));
74235537Sgberextern int ext_register_operand PARAMS ((rtx, enum machine_mode));
75235537Sgberextern int binary_fp_operator PARAMS ((rtx, enum machine_mode));
76235537Sgberextern int mult_operator PARAMS ((rtx, enum machine_mode));
77235537Sgberextern int div_operator PARAMS ((rtx, enum machine_mode));
78235537Sgberextern int arith_or_logical_operator PARAMS ((rtx, enum machine_mode));
79235537Sgberextern int promotable_binary_operator PARAMS ((rtx, enum machine_mode));
80235537Sgberextern int memory_displacement_operand PARAMS ((rtx, enum machine_mode));
81235537Sgberextern int cmpsi_operand PARAMS ((rtx, enum machine_mode));
82235537Sgberextern int long_memory_operand PARAMS ((rtx, enum machine_mode));
83235537Sgberextern int aligned_operand PARAMS ((rtx, enum machine_mode));
84235537Sgberextern enum machine_mode ix86_cc_mode PARAMS ((enum rtx_code, rtx, rtx));
85235537Sgber
86235537Sgberextern int ix86_expand_movstr PARAMS ((rtx, rtx, rtx, rtx));
87235537Sgberextern int ix86_expand_clrstr PARAMS ((rtx, rtx, rtx));
88235537Sgberextern int ix86_expand_strlen PARAMS ((rtx, rtx, rtx, rtx));
89235537Sgber
90235537Sgberextern int legitimate_pic_address_disp_p PARAMS ((rtx));
91235537Sgberextern int legitimate_address_p PARAMS ((enum machine_mode, rtx, int));
92235537Sgberextern rtx legitimize_pic_address PARAMS ((rtx, rtx));
93235537Sgberextern rtx legitimize_address PARAMS ((rtx, rtx, enum machine_mode));
94235537Sgber
95235537Sgberextern void print_reg PARAMS ((rtx, int, FILE*));
96235537Sgberextern void print_operand PARAMS ((FILE*, rtx, int));
97235537Sgberextern void print_operand_address PARAMS ((FILE*, rtx));
98235537Sgber
99235537Sgberextern void split_di PARAMS ((rtx[], int, rtx[], rtx[]));
100235537Sgberextern void split_ti PARAMS ((rtx[], int, rtx[], rtx[]));
101235537Sgber
102235537Sgberextern const char *output_387_binary_op PARAMS ((rtx, rtx*));
103235537Sgberextern const char *output_fix_trunc PARAMS ((rtx, rtx*));
104235537Sgberextern const char *output_fp_compare PARAMS ((rtx, rtx*, int, int));
105235537Sgber
106235537Sgberextern void i386_dwarf_output_addr_const PARAMS ((FILE*, rtx));
107235537Sgberextern rtx i386_simplify_dwarf_addr PARAMS ((rtx));
108235537Sgber
109235537Sgberextern void ix86_expand_clear PARAMS ((rtx));
110235537Sgberextern void ix86_expand_move PARAMS ((enum machine_mode, rtx[]));
111235537Sgberextern void ix86_expand_vector_move PARAMS ((enum machine_mode, rtx[]));
112235537Sgberextern void ix86_expand_binary_operator PARAMS ((enum rtx_code,
113235537Sgber					       enum machine_mode, rtx[]));
114235537Sgberextern int ix86_binary_operator_ok PARAMS ((enum rtx_code, enum machine_mode,
115235537Sgber					  rtx[]));
116235537Sgberextern void ix86_expand_unary_operator PARAMS ((enum rtx_code, enum machine_mode,
117235537Sgber					      rtx[]));
118235537Sgberextern int ix86_unary_operator_ok PARAMS ((enum rtx_code, enum machine_mode,
119235537Sgber					 rtx[]));
120235537Sgberextern int ix86_match_ccmode PARAMS ((rtx, enum machine_mode));
121235537Sgberextern rtx ix86_expand_compare PARAMS ((enum rtx_code, rtx *, rtx *));
122235537Sgberextern int ix86_use_fcomi_compare PARAMS ((enum rtx_code));
123235537Sgberextern void ix86_expand_branch PARAMS ((enum rtx_code, rtx));
124235537Sgberextern int ix86_expand_setcc PARAMS ((enum rtx_code, rtx));
125235537Sgberextern int ix86_expand_int_movcc PARAMS ((rtx[]));
126235537Sgberextern int ix86_expand_fp_movcc PARAMS ((rtx[]));
127235537Sgberextern void x86_initialize_trampoline PARAMS ((rtx, rtx, rtx));
128235537Sgberextern rtx ix86_zero_extend_to_Pmode PARAMS ((rtx));
129235537Sgberextern void ix86_split_long_move PARAMS ((rtx[]));
130235537Sgberextern void ix86_split_ashldi PARAMS ((rtx *, rtx));
131235537Sgberextern void ix86_split_ashrdi PARAMS ((rtx *, rtx));
132235537Sgberextern void ix86_split_lshrdi PARAMS ((rtx *, rtx));
133235537Sgberextern int ix86_address_cost PARAMS ((rtx));
134235537Sgberextern rtx ix86_find_base_term PARAMS ((rtx));
135235537Sgber
136235537Sgberextern rtx assign_386_stack_local PARAMS ((enum machine_mode, int));
137235537Sgberextern int ix86_attr_length_immediate_default PARAMS ((rtx, int));
138235537Sgberextern int ix86_attr_length_address_default PARAMS ((rtx));
139235537Sgber
140235537Sgberextern enum machine_mode ix86_fp_compare_mode PARAMS ((enum rtx_code));
141235537Sgber
142235537Sgberextern int x86_64_sign_extended_value PARAMS ((rtx));
143235537Sgberextern int x86_64_zero_extended_value PARAMS ((rtx));
144235537Sgberextern rtx ix86_libcall_value PARAMS ((enum machine_mode));
145235537Sgberextern bool ix86_function_value_regno_p PARAMS ((int));
146235537Sgberextern bool ix86_function_arg_regno_p PARAMS ((int));
147235537Sgberextern int ix86_function_arg_boundary PARAMS ((enum machine_mode, tree));
148235537Sgberextern int ix86_return_in_memory PARAMS ((tree));
149235537Sgberextern void ix86_va_start PARAMS ((int, tree, rtx));
150235537Sgberextern rtx ix86_va_arg PARAMS ((tree, tree));
151235537Sgberextern void ix86_setup_incoming_varargs PARAMS ((CUMULATIVE_ARGS *,
152235537Sgber						 enum machine_mode,
153235537Sgber						 tree, int *, int));
154235537Sgber
155235537Sgberextern rtx ix86_force_to_memory PARAMS ((enum machine_mode, rtx));
156235537Sgberextern void ix86_free_from_memory PARAMS ((enum machine_mode));
157235537Sgberextern void ix86_split_fp_branch PARAMS ((enum rtx_code code, rtx,
158235537Sgber					  rtx, rtx, rtx, rtx));
159235537Sgberextern int ix86_hard_regno_mode_ok PARAMS ((int, enum machine_mode));
160235537Sgberextern int ix86_register_move_cost PARAMS ((enum machine_mode, enum reg_class,
161235537Sgber					    enum reg_class));
162235537Sgberextern int ix86_secondary_memory_needed PARAMS ((enum reg_class,
163235537Sgber						 enum reg_class,
164235537Sgber						 enum machine_mode, int));
165235537Sgberextern enum reg_class ix86_preferred_reload_class PARAMS ((rtx,
166235537Sgber							   enum reg_class));
167235537Sgberextern int ix86_memory_move_cost PARAMS ((enum machine_mode, enum reg_class,
168235537Sgber					  int));
169235537Sgberextern void ix86_set_move_mem_attrs PARAMS ((rtx, rtx, rtx, rtx, rtx));
170235537Sgberextern void emit_i387_cw_initialization PARAMS ((rtx, rtx));
171235537Sgberextern bool ix86_fp_jump_nontrivial_p PARAMS ((enum rtx_code));
172235537Sgberextern void x86_order_regs_for_local_alloc PARAMS ((void));
173235537Sgber
174235537Sgber
175235537Sgber#ifdef TREE_CODE
176235537Sgberextern void init_cumulative_args PARAMS ((CUMULATIVE_ARGS *, tree, rtx));
177235537Sgberextern rtx function_arg PARAMS ((CUMULATIVE_ARGS *, enum machine_mode, tree, int));
178235537Sgberextern void function_arg_advance PARAMS ((CUMULATIVE_ARGS *, enum machine_mode,
179235537Sgber					tree, int));
180235537Sgberextern rtx ix86_function_value PARAMS ((tree));
181235537Sgberextern void ix86_init_builtins PARAMS ((void));
182235537Sgberextern rtx ix86_expand_builtin PARAMS ((tree, rtx, rtx, enum machine_mode, int));
183235537Sgber#endif
184235537Sgber
185235537Sgber#endif
186235537Sgber
187235537Sgber#ifdef TREE_CODE
188235537Sgberextern int ix86_return_pops_args PARAMS ((tree, tree, int));
189235537Sgberextern tree ix86_build_va_list PARAMS ((void));
190235537Sgber
191235537Sgberextern int ix86_data_alignment PARAMS ((tree, int));
192235537Sgberextern int ix86_local_alignment PARAMS ((tree, int));
193235537Sgberextern int ix86_constant_alignment PARAMS ((tree, int));
194235537Sgberextern tree ix86_handle_dll_attribute PARAMS ((tree *, tree, tree, int, bool *));
195235537Sgberextern tree ix86_handle_shared_attribute PARAMS ((tree *, tree, tree, int, bool *));
196235537Sgber
197235537Sgberextern unsigned int i386_pe_section_type_flags PARAMS ((tree, const char *,
198235537Sgber							int));
199235537Sgberextern void i386_pe_asm_named_section PARAMS ((const char *, unsigned int));
200235537Sgber#endif
201235537Sgber