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