]>
Commit | Line | Data |
---|---|---|
188fc5b5 | 1 | /* Definitions of target machine for GCC for IA-32. |
0e4970d7 | 2 | Copyright (C) 1988, 1992, 1994, 1995, 1996, 1996, 1997, 1998, 1999, |
283334f0 | 3 | 2000, 2001, 2002, 2003, 2004 Free Software Foundation, Inc. |
6baf1cc8 | 4 | |
188fc5b5 | 5 | This file is part of GCC. |
6baf1cc8 | 6 | |
188fc5b5 | 7 | GCC is free software; you can redistribute it and/or modify |
6baf1cc8 BS |
8 | it under the terms of the GNU General Public License as published by |
9 | the Free Software Foundation; either version 2, or (at your option) | |
10 | any later version. | |
11 | ||
188fc5b5 | 12 | GCC is distributed in the hope that it will be useful, |
6baf1cc8 BS |
13 | but WITHOUT ANY WARRANTY; without even the implied warranty of |
14 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
15 | GNU General Public License for more details. | |
16 | ||
17 | You should have received a copy of the GNU General Public License | |
188fc5b5 | 18 | along with GCC; see the file COPYING. If not, write to |
6baf1cc8 | 19 | the Free Software Foundation, 59 Temple Place - Suite 330, |
892a2d68 | 20 | Boston, MA 02111-1307, USA. */ |
6baf1cc8 BS |
21 | |
22 | /* Functions in i386.c */ | |
b96a374d AJ |
23 | extern void override_options (void); |
24 | extern void optimization_options (int, int); | |
6baf1cc8 | 25 | |
b96a374d AJ |
26 | extern int ix86_can_use_return_insn_p (void); |
27 | extern int ix86_frame_pointer_required (void); | |
28 | extern void ix86_setup_frame_addresses (void); | |
6baf1cc8 | 29 | |
b96a374d AJ |
30 | extern void ix86_file_end (void); |
31 | extern HOST_WIDE_INT ix86_initial_elimination_offset (int, int); | |
32 | extern void ix86_expand_prologue (void); | |
33 | extern void ix86_expand_epilogue (int); | |
6baf1cc8 | 34 | |
b96a374d AJ |
35 | extern void ix86_output_addr_vec_elt (FILE *, int); |
36 | extern void ix86_output_addr_diff_elt (FILE *, int, int); | |
f88c65f7 | 37 | |
6baf1cc8 | 38 | #ifdef RTX_CODE |
b96a374d AJ |
39 | extern int ix86_aligned_p (rtx); |
40 | ||
41 | extern int standard_80387_constant_p (rtx); | |
42 | extern const char *standard_80387_constant_opcode (rtx); | |
43 | extern rtx standard_80387_constant_rtx (int); | |
44 | extern int standard_sse_constant_p (rtx); | |
45 | extern int symbolic_reference_mentioned_p (rtx); | |
46 | extern bool extended_reg_mentioned_p (rtx); | |
47 | extern bool x86_extended_QIreg_mentioned_p (rtx); | |
48 | extern bool x86_extended_reg_mentioned_p (rtx); | |
49 | ||
50 | extern int any_fp_register_operand (rtx, enum machine_mode); | |
51 | extern int register_and_not_any_fp_reg_operand (rtx, enum machine_mode); | |
52 | ||
53 | extern int fp_register_operand (rtx, enum machine_mode); | |
54 | extern int register_and_not_fp_reg_operand (rtx, enum machine_mode); | |
55 | ||
56 | extern int x86_64_general_operand (rtx, enum machine_mode); | |
57 | extern int x86_64_szext_general_operand (rtx, enum machine_mode); | |
58 | extern int x86_64_nonmemory_operand (rtx, enum machine_mode); | |
59 | extern int x86_64_szext_nonmemory_operand (rtx, enum machine_mode); | |
60 | extern int x86_64_immediate_operand (rtx, enum machine_mode); | |
61 | extern int x86_64_zext_immediate_operand (rtx, enum machine_mode); | |
b96a374d AJ |
62 | extern int symbolic_operand (rtx, enum machine_mode); |
63 | extern int tls_symbolic_operand (rtx, enum machine_mode); | |
64 | extern int global_dynamic_symbolic_operand (rtx, enum machine_mode); | |
65 | extern int local_dynamic_symbolic_operand (rtx, enum machine_mode); | |
66 | extern int initial_exec_symbolic_operand (rtx, enum machine_mode); | |
67 | extern int local_exec_symbolic_operand (rtx, enum machine_mode); | |
68 | extern int pic_symbolic_operand (rtx, enum machine_mode); | |
69 | extern int call_insn_operand (rtx, enum machine_mode); | |
70 | extern int sibcall_insn_operand (rtx, enum machine_mode); | |
71 | extern int constant_call_address_operand (rtx, enum machine_mode); | |
72 | extern int const0_operand (rtx, enum machine_mode); | |
73 | extern int const1_operand (rtx, enum machine_mode); | |
74 | extern int const248_operand (rtx, enum machine_mode); | |
75 | extern int incdec_operand (rtx, enum machine_mode); | |
76 | extern int reg_no_sp_operand (rtx, enum machine_mode); | |
77 | extern int mmx_reg_operand (rtx, enum machine_mode); | |
78 | extern int general_no_elim_operand (rtx, enum machine_mode); | |
79 | extern int nonmemory_no_elim_operand (rtx, enum machine_mode); | |
80 | extern int q_regs_operand (rtx, enum machine_mode); | |
81 | extern int non_q_regs_operand (rtx, enum machine_mode); | |
82 | extern int sse_comparison_operator (rtx, enum machine_mode); | |
83 | extern int fcmov_comparison_operator (rtx, enum machine_mode); | |
84 | extern int cmp_fp_expander_operand (rtx, enum machine_mode); | |
85 | extern int ix86_comparison_operator (rtx, enum machine_mode); | |
86 | extern int ext_register_operand (rtx, enum machine_mode); | |
87 | extern int binary_fp_operator (rtx, enum machine_mode); | |
88 | extern int mult_operator (rtx, enum machine_mode); | |
89 | extern int div_operator (rtx, enum machine_mode); | |
90 | extern int arith_or_logical_operator (rtx, enum machine_mode); | |
91 | extern int promotable_binary_operator (rtx, enum machine_mode); | |
92 | extern int memory_displacement_operand (rtx, enum machine_mode); | |
93 | extern int cmpsi_operand (rtx, enum machine_mode); | |
94 | extern int long_memory_operand (rtx, enum machine_mode); | |
95 | extern int aligned_operand (rtx, enum machine_mode); | |
96 | extern enum machine_mode ix86_cc_mode (enum rtx_code, rtx, rtx); | |
97 | ||
70128ad9 AO |
98 | extern int ix86_expand_movmem (rtx, rtx, rtx, rtx); |
99 | extern int ix86_expand_clrmem (rtx, rtx, rtx); | |
b96a374d AJ |
100 | extern int ix86_expand_strlen (rtx, rtx, rtx, rtx); |
101 | ||
102 | extern bool legitimate_constant_p (rtx); | |
103 | extern bool constant_address_p (rtx); | |
104 | extern bool legitimate_pic_operand_p (rtx); | |
105 | extern int legitimate_pic_address_disp_p (rtx); | |
106 | extern int legitimate_address_p (enum machine_mode, rtx, int); | |
b96a374d AJ |
107 | extern rtx legitimize_address (rtx, rtx, enum machine_mode); |
108 | ||
109 | extern void print_reg (rtx, int, FILE*); | |
110 | extern void print_operand (FILE*, rtx, int); | |
111 | extern void print_operand_address (FILE*, rtx); | |
112 | extern bool output_addr_const_extra (FILE*, rtx); | |
113 | ||
114 | extern void split_di (rtx[], int, rtx[], rtx[]); | |
115 | extern void split_ti (rtx[], int, rtx[], rtx[]); | |
116 | ||
117 | extern const char *output_set_got (rtx); | |
118 | extern const char *output_387_binary_op (rtx, rtx*); | |
5ea9cb6e | 119 | extern const char *output_387_reg_move (rtx, rtx*); |
b96a374d AJ |
120 | extern const char *output_fix_trunc (rtx, rtx*); |
121 | extern const char *output_fp_compare (rtx, rtx*, int, int); | |
122 | ||
123 | extern void i386_dwarf_output_addr_const (FILE*, rtx); | |
124 | extern void i386_output_dwarf_dtprel (FILE*, int, rtx); | |
125 | ||
126 | extern void ix86_expand_clear (rtx); | |
127 | extern void ix86_expand_move (enum machine_mode, rtx[]); | |
128 | extern void ix86_expand_vector_move (enum machine_mode, rtx[]); | |
129 | extern void ix86_expand_binary_operator (enum rtx_code, | |
130 | enum machine_mode, rtx[]); | |
131 | extern int ix86_binary_operator_ok (enum rtx_code, enum machine_mode, rtx[]); | |
132 | extern void ix86_expand_unary_operator (enum rtx_code, enum machine_mode, | |
133 | rtx[]); | |
134 | extern int ix86_unary_operator_ok (enum rtx_code, enum machine_mode, rtx[]); | |
135 | extern int ix86_match_ccmode (rtx, enum machine_mode); | |
136 | extern rtx ix86_expand_compare (enum rtx_code, rtx *, rtx *); | |
137 | extern int ix86_use_fcomi_compare (enum rtx_code); | |
138 | extern void ix86_expand_branch (enum rtx_code, rtx); | |
139 | extern int ix86_expand_setcc (enum rtx_code, rtx); | |
140 | extern int ix86_expand_int_movcc (rtx[]); | |
141 | extern int ix86_expand_fp_movcc (rtx[]); | |
142 | extern int ix86_expand_int_addcc (rtx[]); | |
143 | extern void ix86_expand_call (rtx, rtx, rtx, rtx, rtx, int); | |
144 | extern void x86_initialize_trampoline (rtx, rtx, rtx); | |
145 | extern rtx ix86_zero_extend_to_Pmode (rtx); | |
146 | extern void ix86_split_long_move (rtx[]); | |
147 | extern void ix86_split_ashldi (rtx *, rtx); | |
148 | extern void ix86_split_ashrdi (rtx *, rtx); | |
149 | extern void ix86_split_lshrdi (rtx *, rtx); | |
150 | extern rtx ix86_find_base_term (rtx); | |
7e6dc358 | 151 | extern int ix86_check_movabs (rtx, int); |
b96a374d AJ |
152 | |
153 | extern rtx assign_386_stack_local (enum machine_mode, int); | |
154 | extern int ix86_attr_length_immediate_default (rtx, int); | |
155 | extern int ix86_attr_length_address_default (rtx); | |
156 | ||
157 | extern enum machine_mode ix86_fp_compare_mode (enum rtx_code); | |
158 | ||
159 | extern int x86_64_sign_extended_value (rtx); | |
160 | extern int x86_64_zero_extended_value (rtx); | |
161 | extern rtx ix86_libcall_value (enum machine_mode); | |
162 | extern bool ix86_function_value_regno_p (int); | |
163 | extern bool ix86_function_arg_regno_p (int); | |
164 | extern int ix86_function_arg_boundary (enum machine_mode, tree); | |
165 | extern int ix86_return_in_memory (tree); | |
166 | extern void ix86_va_start (tree, rtx); | |
167 | extern rtx ix86_va_arg (tree, tree); | |
b96a374d AJ |
168 | |
169 | extern rtx ix86_force_to_memory (enum machine_mode, rtx); | |
170 | extern void ix86_free_from_memory (enum machine_mode); | |
171 | extern void ix86_split_fp_branch (enum rtx_code code, rtx, rtx, rtx, rtx, rtx); | |
172 | extern int ix86_hard_regno_mode_ok (int, enum machine_mode); | |
173 | extern int ix86_register_move_cost (enum machine_mode, enum reg_class, | |
174 | enum reg_class); | |
175 | extern int ix86_secondary_memory_needed (enum reg_class, enum reg_class, | |
176 | enum machine_mode, int); | |
177 | extern enum reg_class ix86_preferred_reload_class (rtx, enum reg_class); | |
178 | extern int ix86_memory_move_cost (enum machine_mode, enum reg_class, int); | |
b96a374d AJ |
179 | extern void emit_i387_cw_initialization (rtx, rtx); |
180 | extern bool ix86_fp_jump_nontrivial_p (enum rtx_code); | |
181 | extern void x86_order_regs_for_local_alloc (void); | |
182 | extern void x86_function_profiler (FILE *, int); | |
183 | extern void x86_emit_floatuns (rtx [2]); | |
5ae27cfa | 184 | extern void ix86_emit_fp_unordered_jump (rtx); |
397be6cf | 185 | |
c2fcfa4f UB |
186 | extern void ix86_emit_i387_log1p (rtx, rtx); |
187 | ||
3c5cb3e4 | 188 | extern enum rtx_code ix86_reverse_condition (enum rtx_code, enum machine_mode); |
4211a8fb | 189 | |
6baf1cc8 | 190 | #ifdef TREE_CODE |
b96a374d AJ |
191 | extern void init_cumulative_args (CUMULATIVE_ARGS *, tree, rtx, tree); |
192 | extern rtx function_arg (CUMULATIVE_ARGS *, enum machine_mode, tree, int); | |
193 | extern int function_arg_pass_by_reference (CUMULATIVE_ARGS *, | |
194 | enum machine_mode, tree, int); | |
195 | extern void function_arg_advance (CUMULATIVE_ARGS *, enum machine_mode, | |
196 | tree, int); | |
197 | extern rtx ix86_function_value (tree); | |
198 | extern void ix86_init_builtins (void); | |
199 | extern rtx ix86_expand_builtin (tree, rtx, rtx, enum machine_mode, int); | |
6baf1cc8 BS |
200 | #endif |
201 | ||
202 | #endif | |
203 | ||
204 | #ifdef TREE_CODE | |
b96a374d | 205 | extern int ix86_return_pops_args (tree, tree, int); |
b96a374d AJ |
206 | |
207 | extern int ix86_data_alignment (tree, int); | |
208 | extern int ix86_local_alignment (tree, int); | |
209 | extern int ix86_constant_alignment (tree, int); | |
210 | extern tree ix86_handle_dll_attribute (tree *, tree, tree, int, bool *); | |
211 | extern tree ix86_handle_shared_attribute (tree *, tree, tree, int, bool *); | |
212 | ||
213 | extern unsigned int i386_pe_section_type_flags (tree, const char *, int); | |
214 | extern void i386_pe_asm_named_section (const char *, unsigned int); | |
215 | extern int x86_field_alignment (tree, int); | |
6baf1cc8 | 216 | #endif |
772c5265 | 217 | |
b96a374d AJ |
218 | extern rtx ix86_tls_get_addr (void); |
219 | extern bool ix86_must_pass_in_stack (enum machine_mode mode, tree); | |
f996902d | 220 | |
997404de | 221 | extern void ix86_expand_vector_init (rtx, rtx); |
772c5265 | 222 | /* In winnt.c */ |
b96a374d AJ |
223 | extern int i386_pe_dllexport_name_p (const char *); |
224 | extern int i386_pe_dllimport_name_p (const char *); | |
225 | extern void i386_pe_unique_section (tree, int); | |
226 | extern void i386_pe_declare_function_type (FILE *, const char *, int); | |
227 | extern void i386_pe_record_external_function (const char *); | |
228 | extern void i386_pe_record_exported_symbol (const char *, int); | |
229 | extern void i386_pe_asm_file_end (FILE *); | |
230 | extern void i386_pe_encode_section_info (tree, rtx, int); | |
231 | extern const char *i386_pe_strip_name_encoding (const char *); | |
232 | extern const char *i386_pe_strip_name_encoding_full (const char *); | |
233 | extern void i386_pe_output_labelref (FILE *, const char *); |