]> git.ipfire.org Git - thirdparty/gcc.git/blame - gcc/config/i386/i386-protos.h
host-hpux.c: Change copyright header to refer to version 3 of the GNU General Public...
[thirdparty/gcc.git] / gcc / config / i386 / i386-protos.h
CommitLineData
188fc5b5 1/* Definitions of target machine for GCC for IA-32.
0e4970d7 2 Copyright (C) 1988, 1992, 1994, 1995, 1996, 1996, 1997, 1998, 1999,
5234b8f5 3 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007
5bf5a10b 4 Free Software Foundation, Inc.
6baf1cc8 5
188fc5b5 6This file is part of GCC.
6baf1cc8 7
188fc5b5 8GCC is free software; you can redistribute it and/or modify
6baf1cc8 9it under the terms of the GNU General Public License as published by
2f83c7d6 10the Free Software Foundation; either version 3, or (at your option)
6baf1cc8
BS
11any later version.
12
188fc5b5 13GCC is distributed in the hope that it will be useful,
6baf1cc8
BS
14but WITHOUT ANY WARRANTY; without even the implied warranty of
15MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16GNU General Public License for more details.
17
18You should have received a copy of the GNU General Public License
2f83c7d6
NC
19along with GCC; see the file COPYING3. If not see
20<http://www.gnu.org/licenses/>. */
6baf1cc8
BS
21
22/* Functions in i386.c */
b96a374d
AJ
23extern void override_options (void);
24extern void optimization_options (int, int);
6baf1cc8 25
b96a374d
AJ
26extern int ix86_can_use_return_insn_p (void);
27extern int ix86_frame_pointer_required (void);
28extern void ix86_setup_frame_addresses (void);
6baf1cc8 29
b96a374d
AJ
30extern void ix86_file_end (void);
31extern HOST_WIDE_INT ix86_initial_elimination_offset (int, int);
32extern void ix86_expand_prologue (void);
33extern void ix86_expand_epilogue (int);
6baf1cc8 34
b96a374d
AJ
35extern void ix86_output_addr_vec_elt (FILE *, int);
36extern void ix86_output_addr_diff_elt (FILE *, int, int);
f88c65f7 37
6baf1cc8 38#ifdef RTX_CODE
b96a374d
AJ
39extern int ix86_aligned_p (rtx);
40
41extern int standard_80387_constant_p (rtx);
42extern const char *standard_80387_constant_opcode (rtx);
43extern rtx standard_80387_constant_rtx (int);
44extern int standard_sse_constant_p (rtx);
5656a184 45extern const char *standard_sse_constant_opcode (rtx, rtx);
b96a374d
AJ
46extern int symbolic_reference_mentioned_p (rtx);
47extern bool extended_reg_mentioned_p (rtx);
48extern bool x86_extended_QIreg_mentioned_p (rtx);
49extern bool x86_extended_reg_mentioned_p (rtx);
b96a374d
AJ
50extern enum machine_mode ix86_cc_mode (enum rtx_code, rtx, rtx);
51
8c996513
JH
52extern int ix86_expand_movmem (rtx, rtx, rtx, rtx, rtx, rtx);
53extern int ix86_expand_setmem (rtx, rtx, rtx, rtx, rtx, rtx);
b96a374d
AJ
54extern int ix86_expand_strlen (rtx, rtx, rtx, rtx);
55
56extern bool legitimate_constant_p (rtx);
57extern bool constant_address_p (rtx);
58extern bool legitimate_pic_operand_p (rtx);
59extern int legitimate_pic_address_disp_p (rtx);
60extern int legitimate_address_p (enum machine_mode, rtx, int);
b96a374d
AJ
61extern rtx legitimize_address (rtx, rtx, enum machine_mode);
62
63extern void print_reg (rtx, int, FILE*);
64extern void print_operand (FILE*, rtx, int);
65extern void print_operand_address (FILE*, rtx);
66extern bool output_addr_const_extra (FILE*, rtx);
67
68extern void split_di (rtx[], int, rtx[], rtx[]);
69extern void split_ti (rtx[], int, rtx[], rtx[]);
70
7d072037 71extern const char *output_set_got (rtx, rtx);
b96a374d 72extern const char *output_387_binary_op (rtx, rtx*);
5ea9cb6e 73extern const char *output_387_reg_move (rtx, rtx*);
9199f050 74extern const char *output_fix_trunc (rtx, rtx*, int);
b96a374d
AJ
75extern const char *output_fp_compare (rtx, rtx*, int, int);
76
b96a374d
AJ
77extern void ix86_expand_clear (rtx);
78extern void ix86_expand_move (enum machine_mode, rtx[]);
79extern void ix86_expand_vector_move (enum machine_mode, rtx[]);
c38573a8 80extern void ix86_expand_vector_move_misalign (enum machine_mode, rtx[]);
6b79c03c 81extern void ix86_expand_push (enum machine_mode, rtx);
ef719a44
RH
82extern rtx ix86_fixup_binary_operands (enum rtx_code,
83 enum machine_mode, rtx[]);
84extern void ix86_fixup_binary_operands_no_copy (enum rtx_code,
85 enum machine_mode, rtx[]);
b96a374d
AJ
86extern void ix86_expand_binary_operator (enum rtx_code,
87 enum machine_mode, rtx[]);
88extern int ix86_binary_operator_ok (enum rtx_code, enum machine_mode, rtx[]);
89extern void ix86_expand_unary_operator (enum rtx_code, enum machine_mode,
90 rtx[]);
174c12c7
RH
91extern rtx ix86_build_const_vector (enum machine_mode, bool, rtx);
92extern void ix86_split_convert_uns_si_sse (rtx[]);
ebff937c
SH
93extern void ix86_expand_convert_uns_didf_sse (rtx, rtx);
94extern void ix86_expand_convert_uns_sidf_sse (rtx, rtx);
95extern void ix86_expand_convert_uns_sisf_sse (rtx, rtx);
96extern void ix86_expand_convert_sign_didf_sse (rtx, rtx);
046625fa 97extern rtx ix86_build_signbit_mask (enum machine_mode, bool, bool);
7cacf53e
RH
98extern void ix86_expand_fp_absneg_operator (enum rtx_code, enum machine_mode,
99 rtx[]);
b99d6d2b
RH
100extern void ix86_expand_copysign (rtx []);
101extern void ix86_split_copysign_const (rtx []);
102extern void ix86_split_copysign_var (rtx []);
b96a374d
AJ
103extern int ix86_unary_operator_ok (enum rtx_code, enum machine_mode, rtx[]);
104extern int ix86_match_ccmode (rtx, enum machine_mode);
105extern rtx ix86_expand_compare (enum rtx_code, rtx *, rtx *);
106extern int ix86_use_fcomi_compare (enum rtx_code);
107extern void ix86_expand_branch (enum rtx_code, rtx);
108extern int ix86_expand_setcc (enum rtx_code, rtx);
109extern int ix86_expand_int_movcc (rtx[]);
110extern int ix86_expand_fp_movcc (rtx[]);
ae46a07a 111extern bool ix86_expand_fp_vcond (rtx[]);
9fb93f89 112extern bool ix86_expand_int_vcond (rtx[]);
89d67cca 113extern void ix86_expand_sse_unpack (rtx[], bool, bool);
e5ac0b9b 114extern void ix86_expand_sse4_unpack (rtx[], bool, bool);
b96a374d
AJ
115extern int ix86_expand_int_addcc (rtx[]);
116extern void ix86_expand_call (rtx, rtx, rtx, rtx, rtx, int);
117extern void x86_initialize_trampoline (rtx, rtx, rtx);
118extern rtx ix86_zero_extend_to_Pmode (rtx);
119extern void ix86_split_long_move (rtx[]);
28356f52
JB
120extern void ix86_split_ashl (rtx *, rtx, enum machine_mode);
121extern void ix86_split_ashr (rtx *, rtx, enum machine_mode);
122extern void ix86_split_lshr (rtx *, rtx, enum machine_mode);
b96a374d 123extern rtx ix86_find_base_term (rtx);
7e6dc358 124extern int ix86_check_movabs (rtx, int);
b96a374d 125
ff680eb1 126extern rtx assign_386_stack_local (enum machine_mode, enum ix86_stack_slot);
b96a374d
AJ
127extern int ix86_attr_length_immediate_default (rtx, int);
128extern int ix86_attr_length_address_default (rtx);
129
130extern enum machine_mode ix86_fp_compare_mode (enum rtx_code);
131
b96a374d
AJ
132extern rtx ix86_libcall_value (enum machine_mode);
133extern bool ix86_function_value_regno_p (int);
134extern bool ix86_function_arg_regno_p (int);
135extern int ix86_function_arg_boundary (enum machine_mode, tree);
136extern int ix86_return_in_memory (tree);
29173496 137extern int ix86_sol10_return_in_memory (tree);
b96a374d
AJ
138extern void ix86_va_start (tree, rtx);
139extern rtx ix86_va_arg (tree, tree);
b96a374d
AJ
140
141extern rtx ix86_force_to_memory (enum machine_mode, rtx);
142extern void ix86_free_from_memory (enum machine_mode);
7c82106f
UB
143extern void ix86_split_fp_branch (enum rtx_code code, rtx, rtx,
144 rtx, rtx, rtx, rtx);
c1c5b5e3
RH
145extern bool ix86_hard_regno_mode_ok (int, enum machine_mode);
146extern bool ix86_modes_tieable_p (enum machine_mode, enum machine_mode);
b96a374d
AJ
147extern int ix86_register_move_cost (enum machine_mode, enum reg_class,
148 enum reg_class);
149extern int ix86_secondary_memory_needed (enum reg_class, enum reg_class,
150 enum machine_mode, int);
1272914c
RH
151extern bool ix86_cannot_change_mode_class (enum machine_mode,
152 enum machine_mode, enum reg_class);
b96a374d 153extern enum reg_class ix86_preferred_reload_class (rtx, enum reg_class);
b5c82fa1 154extern enum reg_class ix86_preferred_output_reload_class (rtx, enum reg_class);
b96a374d 155extern int ix86_memory_move_cost (enum machine_mode, enum reg_class, int);
ff680eb1
UB
156extern int ix86_mode_needed (int, rtx);
157extern void emit_i387_cw_initialization (int);
b96a374d
AJ
158extern bool ix86_fp_jump_nontrivial_p (enum rtx_code);
159extern void x86_order_regs_for_local_alloc (void);
160extern void x86_function_profiler (FILE *, int);
161extern void x86_emit_floatuns (rtx [2]);
5ae27cfa 162extern void ix86_emit_fp_unordered_jump (rtx);
397be6cf 163
c2fcfa4f 164extern void ix86_emit_i387_log1p (rtx, rtx);
6b889d89
UB
165extern void ix86_emit_swdivsf (rtx, rtx, rtx, enum machine_mode);
166extern void ix86_emit_swsqrtsf (rtx, rtx, enum machine_mode, bool);
c2fcfa4f 167
3c5cb3e4 168extern enum rtx_code ix86_reverse_condition (enum rtx_code, enum machine_mode);
4211a8fb 169
4d81bf84 170extern void ix86_expand_lround (rtx, rtx);
c3a4177f 171extern void ix86_expand_lfloorceil (rtx, rtx, bool);
c7d32ff6 172extern void ix86_expand_rint (rtx, rtx);
d096ecdd
RG
173extern void ix86_expand_floorceil (rtx, rtx, bool);
174extern void ix86_expand_floorceildf_32 (rtx, rtx, bool);
097f2964
RG
175extern void ix86_expand_round (rtx, rtx);
176extern void ix86_expand_rounddf_32 (rtx, rtx);
044928d6
RG
177extern void ix86_expand_trunc (rtx, rtx);
178extern void ix86_expand_truncdf_32 (rtx, rtx);
4d81bf84 179
6baf1cc8 180#ifdef TREE_CODE
b96a374d
AJ
181extern void init_cumulative_args (CUMULATIVE_ARGS *, tree, rtx, tree);
182extern rtx function_arg (CUMULATIVE_ARGS *, enum machine_mode, tree, int);
b96a374d
AJ
183extern void function_arg_advance (CUMULATIVE_ARGS *, enum machine_mode,
184 tree, int);
6baf1cc8
BS
185#endif
186
187#endif
188
189#ifdef TREE_CODE
b96a374d 190extern int ix86_return_pops_args (tree, tree, int);
b96a374d
AJ
191
192extern int ix86_data_alignment (tree, int);
193extern int ix86_local_alignment (tree, int);
194extern int ix86_constant_alignment (tree, int);
b96a374d 195extern tree ix86_handle_shared_attribute (tree *, tree, tree, int, bool *);
5656a184 196extern tree ix86_handle_selectany_attribute (tree *, tree, tree, int, bool *);
b96a374d 197extern int x86_field_alignment (tree, int);
6baf1cc8 198#endif
772c5265 199
b96a374d 200extern rtx ix86_tls_get_addr (void);
5bf5a10b 201extern rtx ix86_tls_module_base (void);
f996902d 202
eb701deb
RH
203extern void ix86_expand_vector_init (bool, rtx, rtx);
204extern void ix86_expand_vector_set (bool, rtx, rtx, int);
205extern void ix86_expand_vector_extract (bool, rtx, rtx, int);
2ab1754e 206extern void ix86_expand_reduc_v4sf (rtx (*)(rtx, rtx, rtx), rtx, rtx);
eb701deb 207
772c5265 208/* In winnt.c */
b96a374d
AJ
209extern void i386_pe_unique_section (tree, int);
210extern void i386_pe_declare_function_type (FILE *, const char *, int);
3ce9c824 211extern void i386_pe_record_external_function (tree, const char *);
da489f73 212extern void i386_pe_maybe_record_exported_symbol (tree, const char *, int);
b96a374d 213extern void i386_pe_encode_section_info (tree, rtx, int);
da489f73 214extern bool i386_pe_binds_local_p (tree);
b96a374d 215extern const char *i386_pe_strip_name_encoding_full (const char *);
43d9ad1d 216extern bool i386_pe_valid_dllimport_attribute_p (tree);
da489f73
RH
217extern unsigned int i386_pe_section_type_flags (tree, const char *, int);
218extern void i386_pe_asm_named_section (const char *, unsigned int, tree);
219extern void i386_pe_asm_output_aligned_decl_common (FILE *, tree,
220 const char *,
221 HOST_WIDE_INT,
222 HOST_WIDE_INT);
223extern void i386_pe_file_end (void);
5234b8f5 224extern tree i386_pe_mangle_decl_assembler_name (tree, tree);
43d9ad1d
DS
225
226/* In winnt-cxx.c and winnt-stubs.c */
227extern void i386_pe_adjust_class_at_definition (tree);
228extern bool i386_pe_type_dllimport_p (tree);
229extern bool i386_pe_type_dllexport_p (tree);
230
8fe75e43
RH
231extern rtx maybe_get_pool_constant (rtx);
232
233extern char internal_label_prefix[16];
234extern int internal_label_prefix_len;
235
236enum ix86_address_seg { SEG_DEFAULT, SEG_FS, SEG_GS };
237struct ix86_address
238{
239 rtx base, index, disp;
240 HOST_WIDE_INT scale;
241 enum ix86_address_seg seg;
242};
243
244extern int ix86_decompose_address (rtx, struct ix86_address *);
245extern int memory_address_length (rtx addr);
7dcbf659
JH
246extern void x86_output_aligned_bss (FILE *, tree, const char *,
247 unsigned HOST_WIDE_INT, int);
248extern void x86_elf_aligned_common (FILE *, const char *,
249 unsigned HOST_WIDE_INT, int);
8fe75e43
RH
250
251#ifdef RTX_CODE
252extern void ix86_fp_comparison_codes (enum rtx_code code, enum rtx_code *,
253 enum rtx_code *, enum rtx_code *);
254extern enum rtx_code ix86_fp_compare_code_to_integer (enum rtx_code);
dc4d7240 255extern rtx construct_plt_address (rtx);
8fe75e43 256#endif
72ce3d4a 257extern int asm_preferred_eh_data_format (int, int);