i386-protos.h revision 117395
190075Sobrien/* Definitions of target machine for GNU compiler for IA-32.
290075Sobrien   Copyright (C) 1988, 1992, 1994, 1995, 1996, 1996, 1997, 1998, 1999,
390075Sobrien   2000, 2001 Free Software Foundation, Inc.
490075Sobrien
590075SobrienThis file is part of GNU CC.
690075Sobrien
790075SobrienGNU CC is free software; you can redistribute it and/or modify
890075Sobrienit under the terms of the GNU General Public License as published by
990075Sobrienthe Free Software Foundation; either version 2, or (at your option)
1090075Sobrienany later version.
1190075Sobrien
1290075SobrienGNU CC is distributed in the hope that it will be useful,
1390075Sobrienbut WITHOUT ANY WARRANTY; without even the implied warranty of
1490075SobrienMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
1590075SobrienGNU General Public License for more details.
1690075Sobrien
1790075SobrienYou should have received a copy of the GNU General Public License
1890075Sobrienalong with GNU CC; see the file COPYING.  If not, write to
1990075Sobrienthe Free Software Foundation, 59 Temple Place - Suite 330,
2090075SobrienBoston, MA 02111-1307, USA.  */
2190075Sobrien
2290075Sobrien/* Functions in i386.c */
2390075Sobrienextern void override_options PARAMS ((void));
2490075Sobrienextern void optimization_options PARAMS ((int, int));
2590075Sobrien
2690075Sobrienextern int ix86_can_use_return_insn_p PARAMS ((void));
2790075Sobrienextern int ix86_frame_pointer_required PARAMS ((void));
2890075Sobrienextern void ix86_setup_frame_addresses PARAMS ((void));
2990075Sobrien
3090075Sobrienextern void ix86_asm_file_end PARAMS ((FILE *));
3190075Sobrienextern HOST_WIDE_INT ix86_initial_elimination_offset PARAMS((int, int));
3290075Sobrienextern void ix86_expand_prologue PARAMS ((void));
3390075Sobrienextern void ix86_expand_epilogue PARAMS ((int));
3490075Sobrien
3590075Sobrienextern void ix86_output_addr_vec_elt PARAMS ((FILE *, int));
3690075Sobrienextern void ix86_output_addr_diff_elt PARAMS ((FILE *, int, int));
3790075Sobrien
3890075Sobrien#ifdef RTX_CODE
3990075Sobrienextern int ix86_aligned_p PARAMS ((rtx));
4090075Sobrien
4190075Sobrienextern int standard_80387_constant_p PARAMS ((rtx));
4290075Sobrienextern int standard_sse_constant_p PARAMS ((rtx));
4390075Sobrienextern int symbolic_reference_mentioned_p PARAMS ((rtx));
4490075Sobrien
45117395Skanextern int any_fp_register_operand PARAMS ((rtx, enum machine_mode));
46117395Skanextern int register_and_not_any_fp_reg_operand PARAMS ((rtx, enum machine_mode));
47117395Skan
48117395Skanextern int fp_register_operand PARAMS ((rtx, enum machine_mode));
49117395Skanextern int register_and_not_fp_reg_operand PARAMS ((rtx, enum machine_mode));
50117395Skan
5190075Sobrienextern int x86_64_general_operand PARAMS ((rtx, enum machine_mode));
5290075Sobrienextern int x86_64_szext_general_operand PARAMS ((rtx, enum machine_mode));
5390075Sobrienextern int x86_64_nonmemory_operand PARAMS ((rtx, enum machine_mode));
5490075Sobrienextern int x86_64_szext_nonmemory_operand PARAMS ((rtx, enum machine_mode));
5590075Sobrienextern int x86_64_immediate_operand PARAMS ((rtx, enum machine_mode));
5690075Sobrienextern int x86_64_zext_immediate_operand PARAMS ((rtx, enum machine_mode));
5790075Sobrienextern int const_int_1_operand PARAMS ((rtx, enum machine_mode));
5890075Sobrienextern int symbolic_operand PARAMS ((rtx, enum machine_mode));
59117395Skanextern int tls_symbolic_operand PARAMS ((rtx, enum machine_mode));
60117395Skanextern int global_dynamic_symbolic_operand PARAMS ((rtx, enum machine_mode));
61117395Skanextern int local_dynamic_symbolic_operand PARAMS ((rtx, enum machine_mode));
62117395Skanextern int initial_exec_symbolic_operand PARAMS ((rtx, enum machine_mode));
63117395Skanextern int local_exec_symbolic_operand PARAMS ((rtx, enum machine_mode));
6490075Sobrienextern int pic_symbolic_operand PARAMS ((rtx, enum machine_mode));
6590075Sobrienextern int call_insn_operand PARAMS ((rtx, enum machine_mode));
6690075Sobrienextern int constant_call_address_operand PARAMS ((rtx, enum machine_mode));
6790075Sobrienextern int const0_operand PARAMS ((rtx, enum machine_mode));
6890075Sobrienextern int const1_operand PARAMS ((rtx, enum machine_mode));
6990075Sobrienextern int const248_operand PARAMS ((rtx, enum machine_mode));
7090075Sobrienextern int incdec_operand PARAMS ((rtx, enum machine_mode));
7190075Sobrienextern int reg_no_sp_operand PARAMS ((rtx, enum machine_mode));
7290075Sobrienextern int mmx_reg_operand PARAMS ((rtx, enum machine_mode));
7390075Sobrienextern int general_no_elim_operand PARAMS ((rtx, enum machine_mode));
7490075Sobrienextern int nonmemory_no_elim_operand PARAMS ((rtx, enum machine_mode));
7590075Sobrienextern int q_regs_operand PARAMS ((rtx, enum machine_mode));
7690075Sobrienextern int non_q_regs_operand PARAMS ((rtx, enum machine_mode));
7790075Sobrienextern int sse_comparison_operator PARAMS ((rtx, enum machine_mode));
7890075Sobrienextern int fcmov_comparison_operator PARAMS ((rtx, enum machine_mode));
7990075Sobrienextern int cmp_fp_expander_operand PARAMS ((rtx, enum machine_mode));
8090075Sobrienextern int ix86_comparison_operator PARAMS ((rtx, enum machine_mode));
8190075Sobrienextern int ext_register_operand PARAMS ((rtx, enum machine_mode));
8290075Sobrienextern int binary_fp_operator PARAMS ((rtx, enum machine_mode));
8390075Sobrienextern int mult_operator PARAMS ((rtx, enum machine_mode));
8490075Sobrienextern int div_operator PARAMS ((rtx, enum machine_mode));
8590075Sobrienextern int arith_or_logical_operator PARAMS ((rtx, enum machine_mode));
8690075Sobrienextern int promotable_binary_operator PARAMS ((rtx, enum machine_mode));
8790075Sobrienextern int memory_displacement_operand PARAMS ((rtx, enum machine_mode));
8890075Sobrienextern int cmpsi_operand PARAMS ((rtx, enum machine_mode));
8990075Sobrienextern int long_memory_operand PARAMS ((rtx, enum machine_mode));
9090075Sobrienextern int aligned_operand PARAMS ((rtx, enum machine_mode));
9190075Sobrienextern enum machine_mode ix86_cc_mode PARAMS ((enum rtx_code, rtx, rtx));
9290075Sobrien
9390075Sobrienextern int ix86_expand_movstr PARAMS ((rtx, rtx, rtx, rtx));
9490075Sobrienextern int ix86_expand_clrstr PARAMS ((rtx, rtx, rtx));
9590075Sobrienextern int ix86_expand_strlen PARAMS ((rtx, rtx, rtx, rtx));
9690075Sobrien
97117395Skanextern bool legitimate_constant_p PARAMS ((rtx));
98117395Skanextern bool constant_address_p PARAMS ((rtx));
99117395Skanextern bool legitimate_pic_operand_p PARAMS ((rtx));
10090075Sobrienextern int legitimate_pic_address_disp_p PARAMS ((rtx));
10190075Sobrienextern int legitimate_address_p PARAMS ((enum machine_mode, rtx, int));
10290075Sobrienextern rtx legitimize_pic_address PARAMS ((rtx, rtx));
10390075Sobrienextern rtx legitimize_address PARAMS ((rtx, rtx, enum machine_mode));
10490075Sobrien
10590075Sobrienextern void print_reg PARAMS ((rtx, int, FILE*));
10690075Sobrienextern void print_operand PARAMS ((FILE*, rtx, int));
10790075Sobrienextern void print_operand_address PARAMS ((FILE*, rtx));
108117395Skanextern bool output_addr_const_extra PARAMS ((FILE*, rtx));
10990075Sobrien
11090075Sobrienextern void split_di PARAMS ((rtx[], int, rtx[], rtx[]));
11190075Sobrienextern void split_ti PARAMS ((rtx[], int, rtx[], rtx[]));
11290075Sobrien
113117395Skanextern const char *output_set_got PARAMS ((rtx));
11490075Sobrienextern const char *output_387_binary_op PARAMS ((rtx, rtx*));
11590075Sobrienextern const char *output_fix_trunc PARAMS ((rtx, rtx*));
11690075Sobrienextern const char *output_fp_compare PARAMS ((rtx, rtx*, int, int));
11790075Sobrien
11890075Sobrienextern void i386_dwarf_output_addr_const PARAMS ((FILE*, rtx));
119117395Skanextern void i386_output_dwarf_dtprel PARAMS ((FILE*, int, rtx));
12090075Sobrienextern rtx i386_simplify_dwarf_addr PARAMS ((rtx));
12190075Sobrien
12290075Sobrienextern void ix86_expand_clear PARAMS ((rtx));
12390075Sobrienextern void ix86_expand_move PARAMS ((enum machine_mode, rtx[]));
12490075Sobrienextern void ix86_expand_vector_move PARAMS ((enum machine_mode, rtx[]));
12590075Sobrienextern void ix86_expand_binary_operator PARAMS ((enum rtx_code,
12690075Sobrien					       enum machine_mode, rtx[]));
12790075Sobrienextern int ix86_binary_operator_ok PARAMS ((enum rtx_code, enum machine_mode,
12890075Sobrien					  rtx[]));
12990075Sobrienextern void ix86_expand_unary_operator PARAMS ((enum rtx_code, enum machine_mode,
13090075Sobrien					      rtx[]));
13190075Sobrienextern int ix86_unary_operator_ok PARAMS ((enum rtx_code, enum machine_mode,
13290075Sobrien					 rtx[]));
13390075Sobrienextern int ix86_match_ccmode PARAMS ((rtx, enum machine_mode));
13490075Sobrienextern rtx ix86_expand_compare PARAMS ((enum rtx_code, rtx *, rtx *));
13590075Sobrienextern int ix86_use_fcomi_compare PARAMS ((enum rtx_code));
13690075Sobrienextern void ix86_expand_branch PARAMS ((enum rtx_code, rtx));
13790075Sobrienextern int ix86_expand_setcc PARAMS ((enum rtx_code, rtx));
13890075Sobrienextern int ix86_expand_int_movcc PARAMS ((rtx[]));
13990075Sobrienextern int ix86_expand_fp_movcc PARAMS ((rtx[]));
140117395Skanextern void ix86_expand_call PARAMS ((rtx, rtx, rtx, rtx, rtx));
14190075Sobrienextern void x86_initialize_trampoline PARAMS ((rtx, rtx, rtx));
14290075Sobrienextern rtx ix86_zero_extend_to_Pmode PARAMS ((rtx));
14390075Sobrienextern void ix86_split_long_move PARAMS ((rtx[]));
14490075Sobrienextern void ix86_split_ashldi PARAMS ((rtx *, rtx));
14590075Sobrienextern void ix86_split_ashrdi PARAMS ((rtx *, rtx));
14690075Sobrienextern void ix86_split_lshrdi PARAMS ((rtx *, rtx));
14790075Sobrienextern int ix86_address_cost PARAMS ((rtx));
14890075Sobrienextern rtx ix86_find_base_term PARAMS ((rtx));
149117395Skanextern int ix86_check_movabs PARAMS ((rtx, int));
15090075Sobrien
15190075Sobrienextern rtx assign_386_stack_local PARAMS ((enum machine_mode, int));
15290075Sobrienextern int ix86_attr_length_immediate_default PARAMS ((rtx, int));
15390075Sobrienextern int ix86_attr_length_address_default PARAMS ((rtx));
15490075Sobrien
15590075Sobrienextern enum machine_mode ix86_fp_compare_mode PARAMS ((enum rtx_code));
15690075Sobrien
15790075Sobrienextern int x86_64_sign_extended_value PARAMS ((rtx));
15890075Sobrienextern int x86_64_zero_extended_value PARAMS ((rtx));
15990075Sobrienextern rtx ix86_libcall_value PARAMS ((enum machine_mode));
16090075Sobrienextern bool ix86_function_value_regno_p PARAMS ((int));
16190075Sobrienextern bool ix86_function_arg_regno_p PARAMS ((int));
16290075Sobrienextern int ix86_function_arg_boundary PARAMS ((enum machine_mode, tree));
16390075Sobrienextern int ix86_return_in_memory PARAMS ((tree));
164117395Skanextern void ix86_va_start PARAMS ((tree, rtx));
16590075Sobrienextern rtx ix86_va_arg PARAMS ((tree, tree));
16690075Sobrienextern void ix86_setup_incoming_varargs PARAMS ((CUMULATIVE_ARGS *,
16790075Sobrien						 enum machine_mode,
16890075Sobrien						 tree, int *, int));
16990075Sobrien
17090075Sobrienextern rtx ix86_force_to_memory PARAMS ((enum machine_mode, rtx));
17190075Sobrienextern void ix86_free_from_memory PARAMS ((enum machine_mode));
17290075Sobrienextern void ix86_split_fp_branch PARAMS ((enum rtx_code code, rtx,
17390075Sobrien					  rtx, rtx, rtx, rtx));
17490075Sobrienextern int ix86_hard_regno_mode_ok PARAMS ((int, enum machine_mode));
17590075Sobrienextern int ix86_register_move_cost PARAMS ((enum machine_mode, enum reg_class,
17690075Sobrien					    enum reg_class));
17790075Sobrienextern int ix86_secondary_memory_needed PARAMS ((enum reg_class,
17890075Sobrien						 enum reg_class,
17990075Sobrien						 enum machine_mode, int));
18090075Sobrienextern enum reg_class ix86_preferred_reload_class PARAMS ((rtx,
18190075Sobrien							   enum reg_class));
18290075Sobrienextern int ix86_memory_move_cost PARAMS ((enum machine_mode, enum reg_class,
18390075Sobrien					  int));
18490075Sobrienextern void ix86_set_move_mem_attrs PARAMS ((rtx, rtx, rtx, rtx, rtx));
18590075Sobrienextern void emit_i387_cw_initialization PARAMS ((rtx, rtx));
18690075Sobrienextern bool ix86_fp_jump_nontrivial_p PARAMS ((enum rtx_code));
18796263Sobrienextern void x86_order_regs_for_local_alloc PARAMS ((void));
188117395Skanextern void x86_function_profiler PARAMS ((FILE *, int));
18990075Sobrien
19090075Sobrien
19190075Sobrien#ifdef TREE_CODE
19290075Sobrienextern void init_cumulative_args PARAMS ((CUMULATIVE_ARGS *, tree, rtx));
19390075Sobrienextern rtx function_arg PARAMS ((CUMULATIVE_ARGS *, enum machine_mode, tree, int));
194117395Skanextern int function_arg_pass_by_reference PARAMS ((CUMULATIVE_ARGS *,
195117395Skan						   enum machine_mode,
196117395Skan						   tree, int));
19790075Sobrienextern void function_arg_advance PARAMS ((CUMULATIVE_ARGS *, enum machine_mode,
19890075Sobrien					tree, int));
19990075Sobrienextern rtx ix86_function_value PARAMS ((tree));
20090075Sobrienextern void ix86_init_builtins PARAMS ((void));
20190075Sobrienextern rtx ix86_expand_builtin PARAMS ((tree, rtx, rtx, enum machine_mode, int));
20290075Sobrien#endif
20390075Sobrien
20490075Sobrien#endif
20590075Sobrien
20690075Sobrien#ifdef TREE_CODE
20790075Sobrienextern int ix86_return_pops_args PARAMS ((tree, tree, int));
20890075Sobrienextern tree ix86_build_va_list PARAMS ((void));
20990075Sobrien
21090075Sobrienextern int ix86_data_alignment PARAMS ((tree, int));
21190075Sobrienextern int ix86_local_alignment PARAMS ((tree, int));
21290075Sobrienextern int ix86_constant_alignment PARAMS ((tree, int));
21390075Sobrienextern tree ix86_handle_dll_attribute PARAMS ((tree *, tree, tree, int, bool *));
21490075Sobrienextern tree ix86_handle_shared_attribute PARAMS ((tree *, tree, tree, int, bool *));
21590075Sobrien
21690075Sobrienextern unsigned int i386_pe_section_type_flags PARAMS ((tree, const char *,
21790075Sobrien							int));
21890075Sobrienextern void i386_pe_asm_named_section PARAMS ((const char *, unsigned int));
219102780Skanextern int x86_field_alignment PARAMS ((tree, int));
22090075Sobrien#endif
221117395Skan
222117395Skanextern rtx ix86_tls_get_addr PARAMS ((void));
223117395Skanextern void x86_machine_dependent_reorg PARAMS ((rtx));
224117395Skan
225117395Skan/* In winnt.c  */
226117395Skanextern int i386_pe_dllexport_name_p PARAMS ((const char *));
227117395Skanextern int i386_pe_dllimport_name_p PARAMS ((const char *));
228117395Skanextern void i386_pe_unique_section PARAMS ((tree, int));
229117395Skanextern void i386_pe_declare_function_type PARAMS ((FILE *, const char *, int));
230117395Skanextern void i386_pe_record_external_function PARAMS ((const char *));
231117395Skanextern void i386_pe_record_exported_symbol PARAMS ((const char *, int));
232117395Skanextern void i386_pe_asm_file_end PARAMS ((FILE *));
233117395Skanextern void i386_pe_encode_section_info PARAMS ((tree, int));
234117395Skanextern const char *i386_pe_strip_name_encoding PARAMS ((const char *));
235117395Skanextern const char *i386_pe_strip_name_encoding_full PARAMS ((const char *));
236