]> git.ipfire.org Git - thirdparty/gcc.git/blame - gcc/config/i386/i386-protos.h
Remove enum before machine_mode
[thirdparty/gcc.git] / gcc / config / i386 / i386-protos.h
CommitLineData
188fc5b5 1/* Definitions of target machine for GCC for IA-32.
cbe34bb5 2 Copyright (C) 1988-2017 Free Software Foundation, Inc.
6baf1cc8 3
188fc5b5 4This file is part of GCC.
6baf1cc8 5
188fc5b5 6GCC is free software; you can redistribute it and/or modify
6baf1cc8 7it under the terms of the GNU General Public License as published by
2f83c7d6 8the Free Software Foundation; either version 3, or (at your option)
6baf1cc8
BS
9any later version.
10
188fc5b5 11GCC is distributed in the hope that it will be useful,
6baf1cc8
BS
12but WITHOUT ANY WARRANTY; without even the implied warranty of
13MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14GNU General Public License for more details.
15
16You should have received a copy of the GNU General Public License
2f83c7d6
NC
17along with GCC; see the file COPYING3. If not see
18<http://www.gnu.org/licenses/>. */
6baf1cc8 19
677f3fa8
JM
20/* In i386-common.c. */
21extern bool ix86_handle_option (struct gcc_options *opts,
22 struct gcc_options *opts_set ATTRIBUTE_UNUSED,
23 const struct cl_decoded_option *decoded,
24 location_t loc);
25
6baf1cc8 26/* Functions in i386.c */
2de710b9 27extern bool ix86_target_stack_probe (void);
19ed9d7b 28extern bool ix86_can_use_return_insn_p (void);
b96a374d 29extern void ix86_setup_frame_addresses (void);
6baf1cc8 30
b96a374d
AJ
31extern HOST_WIDE_INT ix86_initial_elimination_offset (int, int);
32extern void ix86_expand_prologue (void);
292b4434 33extern void ix86_maybe_emit_epilogue_vzeroupper (void);
b96a374d 34extern void ix86_expand_epilogue (int);
7458026b 35extern void ix86_expand_split_stack_prologue (void);
6baf1cc8 36
b96a374d
AJ
37extern void ix86_output_addr_vec_elt (FILE *, int);
38extern void ix86_output_addr_diff_elt (FILE *, int, int);
f88c65f7 39
237e9c04
RH
40extern enum calling_abi ix86_cfun_abi (void);
41extern enum calling_abi ix86_function_type_abi (const_tree);
42
d290bb1d
IE
43extern bool ix86_use_pseudo_pic_reg (void);
44
97db2bf7
ST
45extern void ix86_reset_previous_fndecl (void);
46
10e547d6
BS
47extern bool ix86_using_red_zone (void);
48
6baf1cc8 49#ifdef RTX_CODE
b96a374d
AJ
50extern int standard_80387_constant_p (rtx);
51extern const char *standard_80387_constant_opcode (rtx);
52extern rtx standard_80387_constant_rtx (int);
55284a77 53extern int standard_sse_constant_p (rtx, machine_mode);
84034c69 54extern const char *standard_sse_constant_opcode (rtx_insn *, rtx);
38302a21 55extern bool ix86_standard_x87sse_constant_load_p (const rtx_insn *, rtx);
19ed9d7b 56extern bool symbolic_reference_mentioned_p (rtx);
b96a374d 57extern bool extended_reg_mentioned_p (rtx);
647d790d 58extern bool x86_extended_QIreg_mentioned_p (rtx_insn *);
b96a374d 59extern bool x86_extended_reg_mentioned_p (rtx);
ef4bddc2
RS
60extern bool x86_maybe_negate_const_int (rtx *, machine_mode);
61extern machine_mode ix86_cc_mode (enum rtx_code, rtx, rtx);
b96a374d 62
ef4bddc2
RS
63extern int avx_vpermilp_parallel (rtx par, machine_mode mode);
64extern int avx_vperm2f128_parallel (rtx par, machine_mode mode);
8a67ca92 65
19ed9d7b 66extern bool ix86_expand_strlen (rtx, rtx, rtx, rtx);
3918b108 67extern bool ix86_expand_set_or_movmem (rtx, rtx, rtx, rtx, rtx, rtx,
82bb7d4e 68 rtx, rtx, rtx, rtx, bool);
b96a374d 69
b96a374d
AJ
70extern bool constant_address_p (rtx);
71extern bool legitimate_pic_operand_p (rtx);
19ed9d7b 72extern bool legitimate_pic_address_disp_p (rtx);
e3d62871 73extern bool ix86_force_load_from_GOT_p (rtx);
b96a374d 74extern void print_reg (rtx, int, FILE*);
6b3c42ae 75extern void ix86_print_operand (FILE *, rtx, int);
b96a374d 76
ef4bddc2 77extern void split_double_mode (machine_mode, rtx[], int, rtx[], rtx[]);
b96a374d 78
7d072037 79extern const char *output_set_got (rtx, rtx);
d8485bdb
TS
80extern const char *output_387_binary_op (rtx_insn *, rtx*);
81extern const char *output_387_reg_move (rtx_insn *, rtx*);
84034c69 82extern const char *output_fix_trunc (rtx_insn *, rtx*, bool);
d8485bdb 83extern const char *output_fp_compare (rtx_insn *, rtx*, bool, bool);
2de710b9
EB
84extern const char *output_adjust_stack_and_probe (rtx);
85extern const char *output_probe_stack_range (rtx, rtx);
b96a374d 86
b96a374d 87extern void ix86_expand_clear (rtx);
ef4bddc2
RS
88extern void ix86_expand_move (machine_mode, rtx[]);
89extern void ix86_expand_vector_move (machine_mode, rtx[]);
90extern void ix86_expand_vector_move_misalign (machine_mode, rtx[]);
ef719a44 91extern rtx ix86_fixup_binary_operands (enum rtx_code,
ef4bddc2 92 machine_mode, rtx[]);
ef719a44 93extern void ix86_fixup_binary_operands_no_copy (enum rtx_code,
ef4bddc2 94 machine_mode, rtx[]);
b96a374d 95extern void ix86_expand_binary_operator (enum rtx_code,
ef4bddc2 96 machine_mode, rtx[]);
42bace41 97extern void ix86_expand_vector_logical_operator (enum rtx_code,
ef4bddc2
RS
98 machine_mode, rtx[]);
99extern bool ix86_binary_operator_ok (enum rtx_code, machine_mode, rtx[]);
612b40cf
DM
100extern bool ix86_avoid_lea_for_add (rtx_insn *, rtx[]);
101extern bool ix86_use_lea_for_mov (rtx_insn *, rtx[]);
102extern bool ix86_avoid_lea_for_addr (rtx_insn *, rtx[]);
ef4bddc2 103extern void ix86_split_lea_for_addr (rtx_insn *, rtx[], machine_mode);
612b40cf 104extern bool ix86_lea_for_add_ok (rtx_insn *, rtx[]);
5e04b3b6 105extern bool ix86_vec_interleave_v2df_operator_ok (rtx operands[3], bool high);
6ff078d4 106extern bool ix86_dep_by_shift_count (const_rtx set_insn, const_rtx use_insn);
647d790d 107extern bool ix86_agi_dependent (rtx_insn *set_insn, rtx_insn *use_insn);
ef4bddc2 108extern void ix86_expand_unary_operator (enum rtx_code, machine_mode,
b96a374d 109 rtx[]);
ef4bddc2
RS
110extern rtx ix86_build_const_vector (machine_mode, bool, rtx);
111extern rtx ix86_build_signbit_mask (machine_mode, bool, bool);
174c12c7 112extern void ix86_split_convert_uns_si_sse (rtx[]);
ebff937c 113extern void ix86_expand_convert_uns_didf_sse (rtx, rtx);
7fb1431b 114extern void ix86_expand_convert_uns_sixf_sse (rtx, rtx);
ebff937c
SH
115extern void ix86_expand_convert_uns_sidf_sse (rtx, rtx);
116extern void ix86_expand_convert_uns_sisf_sse (rtx, rtx);
117extern void ix86_expand_convert_sign_didf_sse (rtx, rtx);
635c6321 118extern void ix86_expand_vector_convert_uns_vsivsf (rtx, rtx);
2f2da9e9 119extern rtx ix86_expand_adjust_ufix_to_sfix_si (rtx, rtx *);
0948ccb2 120extern enum ix86_fpcmp_strategy ix86_fp_comparison_strategy (enum rtx_code);
ef4bddc2 121extern void ix86_expand_fp_absneg_operator (enum rtx_code, machine_mode,
7cacf53e 122 rtx[]);
b99d6d2b
RH
123extern void ix86_expand_copysign (rtx []);
124extern void ix86_split_copysign_const (rtx []);
125extern void ix86_split_copysign_var (rtx []);
ef4bddc2
RS
126extern bool ix86_unary_operator_ok (enum rtx_code, machine_mode, rtx[]);
127extern bool ix86_match_ccmode (rtx, machine_mode);
dc91d892
UB
128extern void ix86_expand_branch (enum rtx_code, rtx, rtx, rtx);
129extern void ix86_expand_setcc (rtx, enum rtx_code, rtx, rtx);
19ed9d7b
UB
130extern bool ix86_expand_int_movcc (rtx[]);
131extern bool ix86_expand_fp_movcc (rtx[]);
ae46a07a 132extern bool ix86_expand_fp_vcond (rtx[]);
9fb93f89 133extern bool ix86_expand_int_vcond (rtx[]);
2205ed25 134extern void ix86_expand_vec_perm (rtx[]);
0772d476 135extern bool ix86_expand_vec_perm_const (rtx[]);
42fd8198
IE
136extern bool ix86_expand_mask_vec_cmp (rtx[]);
137extern bool ix86_expand_int_vec_cmp (rtx[]);
138extern bool ix86_expand_fp_vec_cmp (rtx[]);
f79fe06f 139extern void ix86_expand_sse_movcc (rtx, rtx, rtx, rtx);
7b532118 140extern void ix86_expand_sse_unpack (rtx, rtx, bool, bool);
19ed9d7b 141extern bool ix86_expand_int_addcc (rtx[]);
d9403b0d 142extern rtx ix86_expand_call (rtx, rtx, rtx, rtx, rtx, bool);
cfec3a7c 143extern void ix86_split_call_vzeroupper (rtx, rtx);
b96a374d
AJ
144extern void x86_initialize_trampoline (rtx, rtx, rtx);
145extern rtx ix86_zero_extend_to_Pmode (rtx);
146extern void ix86_split_long_move (rtx[]);
ef4bddc2
RS
147extern void ix86_split_ashl (rtx *, rtx, machine_mode);
148extern void ix86_split_ashr (rtx *, rtx, machine_mode);
149extern void ix86_split_lshr (rtx *, rtx, machine_mode);
b96a374d 150extern rtx ix86_find_base_term (rtx);
19ed9d7b 151extern bool ix86_check_movabs (rtx, int);
16734677 152extern bool ix86_check_no_addr_space (rtx);
ef4bddc2 153extern void ix86_split_idivmod (machine_mode, rtx[], bool);
b96a374d 154
ef4bddc2 155extern rtx assign_386_stack_local (machine_mode, enum ix86_stack_slot);
647d790d
DM
156extern int ix86_attr_length_immediate_default (rtx_insn *, bool);
157extern int ix86_attr_length_address_default (rtx_insn *);
158extern int ix86_attr_length_vex_default (rtx_insn *, bool, bool);
b96a374d 159
ef4bddc2 160extern machine_mode ix86_fp_compare_mode (enum rtx_code);
b96a374d 161
ef4bddc2 162extern rtx ix86_libcall_value (machine_mode);
b96a374d 163extern bool ix86_function_arg_regno_p (int);
135a687e 164extern void ix86_asm_output_function_label (FILE *, const char *, tree);
7c800926 165extern void ix86_call_abi_override (const_tree);
8a762fcb 166extern int ix86_reg_parm_stack_space (const_tree);
7c800926 167
7c82106f 168extern void ix86_split_fp_branch (enum rtx_code code, rtx, rtx,
3386d77e 169 rtx, rtx, rtx);
ef4bddc2
RS
170extern bool ix86_hard_regno_mode_ok (int, machine_mode);
171extern bool ix86_modes_tieable_p (machine_mode, machine_mode);
19ed9d7b 172extern bool ix86_secondary_memory_needed (enum reg_class, enum reg_class,
ef4bddc2
RS
173 machine_mode, int);
174extern bool ix86_cannot_change_mode_class (machine_mode,
175 machine_mode, enum reg_class);
ff97910d 176
d33d9e47
AI
177extern bool ix86_libc_has_function (enum function_class fn_class);
178
b96a374d
AJ
179extern void x86_order_regs_for_local_alloc (void);
180extern void x86_function_profiler (FILE *, int);
181extern void x86_emit_floatuns (rtx [2]);
5ae27cfa 182extern void ix86_emit_fp_unordered_jump (rtx);
397be6cf 183
c2fcfa4f 184extern void ix86_emit_i387_log1p (rtx, rtx);
2813f1b1 185extern void ix86_emit_i387_round (rtx, rtx);
ef4bddc2
RS
186extern void ix86_emit_swdivsf (rtx, rtx, rtx, machine_mode);
187extern void ix86_emit_swsqrtsf (rtx, rtx, machine_mode, bool);
c2fcfa4f 188
ef4bddc2 189extern enum rtx_code ix86_reverse_condition (enum rtx_code, machine_mode);
4211a8fb 190
4d81bf84 191extern void ix86_expand_lround (rtx, rtx);
c3a4177f 192extern void ix86_expand_lfloorceil (rtx, rtx, bool);
c7d32ff6 193extern void ix86_expand_rint (rtx, rtx);
d096ecdd
RG
194extern void ix86_expand_floorceil (rtx, rtx, bool);
195extern void ix86_expand_floorceildf_32 (rtx, rtx, bool);
f4ab7b99 196extern void ix86_expand_round_sse4 (rtx, rtx);
097f2964
RG
197extern void ix86_expand_round (rtx, rtx);
198extern void ix86_expand_rounddf_32 (rtx, rtx);
044928d6
RG
199extern void ix86_expand_trunc (rtx, rtx);
200extern void ix86_expand_truncdf_32 (rtx, rtx);
4d81bf84 201
77a3dbf6
RH
202extern void ix86_expand_vecop_qihi (enum rtx_code, rtx, rtx, rtx);
203
6baf1cc8 204#ifdef TREE_CODE
2767a7f2 205extern void init_cumulative_args (CUMULATIVE_ARGS *, tree, rtx, tree, int);
d347d97e 206#endif /* TREE_CODE */
6baf1cc8 207
d347d97e 208#endif /* RTX_CODE */
6baf1cc8
BS
209
210#ifdef TREE_CODE
df8a1d28 211extern int ix86_data_alignment (tree, int, bool);
ef4bddc2 212extern unsigned int ix86_local_alignment (tree, machine_mode,
76fe54f0 213 unsigned int);
ef4bddc2 214extern unsigned int ix86_minimum_alignment (tree, machine_mode,
ae58e548 215 unsigned int);
b96a374d 216extern int ix86_constant_alignment (tree, int);
b96a374d 217extern tree ix86_handle_shared_attribute (tree *, tree, tree, int, bool *);
5656a184 218extern tree ix86_handle_selectany_attribute (tree *, tree, tree, int, bool *);
b96a374d 219extern int x86_field_alignment (tree, int);
bf7b5747
ST
220extern tree ix86_valid_target_attribute_tree (tree,
221 struct gcc_options *,
222 struct gcc_options *);
b8ce4e94
KT
223extern unsigned int ix86_get_callcvt (const_tree);
224
6baf1cc8 225#endif
772c5265 226
5bf5a10b 227extern rtx ix86_tls_module_base (void);
f996902d 228
eb701deb
RH
229extern void ix86_expand_vector_init (bool, rtx, rtx);
230extern void ix86_expand_vector_set (bool, rtx, rtx, int);
231extern void ix86_expand_vector_extract (bool, rtx, rtx, int);
c0b0ee6f 232extern void ix86_expand_reduc (rtx (*)(rtx, rtx, rtx), rtx, rtx);
eb701deb 233
0fac5151 234extern void ix86_expand_vec_extract_even_odd (rtx, rtx, rtx, unsigned);
baca1278 235extern bool ix86_expand_pextr (rtx *);
3b84d61f 236extern bool ix86_expand_pinsr (rtx *);
ac357108
RH
237extern void ix86_expand_mul_widen_evenodd (rtx, rtx, rtx, bool, bool);
238extern void ix86_expand_mul_widen_hilo (rtx, rtx, rtx, bool, bool);
73e9d637 239extern void ix86_expand_sse2_mulv4si3 (rtx, rtx, rtx);
298301d9 240extern void ix86_expand_sse2_mulvxdi3 (rtx, rtx, rtx);
8f24613d 241extern void ix86_expand_sse2_abs (rtx, rtx);
0fac5151 242
d5e254e1
IE
243extern bool ix86_bnd_prefixed_insn_p (rtx);
244
ab442df7
MM
245/* In i386-c.c */
246extern void ix86_target_macros (void);
247extern void ix86_register_pragmas (void);
248
772c5265 249/* In winnt.c */
b96a374d
AJ
250extern void i386_pe_unique_section (tree, int);
251extern void i386_pe_declare_function_type (FILE *, const char *, int);
3ce9c824 252extern void i386_pe_record_external_function (tree, const char *);
da489f73 253extern void i386_pe_maybe_record_exported_symbol (tree, const char *, int);
b96a374d 254extern void i386_pe_encode_section_info (tree, rtx, int);
3101faab 255extern bool i386_pe_binds_local_p (const_tree);
b96a374d 256extern const char *i386_pe_strip_name_encoding_full (const char *);
3101faab 257extern bool i386_pe_valid_dllimport_attribute_p (const_tree);
da489f73
RH
258extern unsigned int i386_pe_section_type_flags (tree, const char *, int);
259extern void i386_pe_asm_named_section (const char *, unsigned int, tree);
260extern void i386_pe_asm_output_aligned_decl_common (FILE *, tree,
261 const char *,
262 HOST_WIDE_INT,
263 HOST_WIDE_INT);
264extern void i386_pe_file_end (void);
f81c9774
RH
265extern void i386_pe_start_function (FILE *, const char *, tree);
266extern void i386_pe_end_function (FILE *, const char *, tree);
a2b63a20 267extern void i386_pe_assemble_visibility (tree, int);
5234b8f5 268extern tree i386_pe_mangle_decl_assembler_name (tree, tree);
77754180 269extern tree i386_pe_mangle_assembler_name (const char *);
82c0e1a0 270extern void i386_pe_record_stub (const char *);
43d9ad1d 271
f81c9774
RH
272extern void i386_pe_seh_init (FILE *);
273extern void i386_pe_seh_end_prologue (FILE *);
ac44248e 274extern void i386_pe_seh_unwind_emit (FILE *, rtx_insn *);
bf1431e3
TG
275extern void i386_pe_seh_emit_except_personality (rtx);
276extern void i386_pe_seh_init_sections (void);
f81c9774 277
43d9ad1d
DS
278/* In winnt-cxx.c and winnt-stubs.c */
279extern void i386_pe_adjust_class_at_definition (tree);
280extern bool i386_pe_type_dllimport_p (tree);
281extern bool i386_pe_type_dllexport_p (tree);
282
463d5aa0
KT
283extern int i386_pe_reloc_rw_mask (void);
284
8fe75e43
RH
285extern rtx maybe_get_pool_constant (rtx);
286
287extern char internal_label_prefix[16];
288extern int internal_label_prefix_len;
289
f8071c05
L
290extern bool ix86_epilogue_uses (int);
291
8fe75e43
RH
292struct ix86_address
293{
294 rtx base, index, disp;
295 HOST_WIDE_INT scale;
00402c94 296 addr_space_t seg;
8fe75e43
RH
297};
298
299extern int ix86_decompose_address (rtx, struct ix86_address *);
cab54dfa 300extern int memory_address_length (rtx, bool);
7dcbf659
JH
301extern void x86_output_aligned_bss (FILE *, tree, const char *,
302 unsigned HOST_WIDE_INT, int);
901f29c8
RO
303extern void x86_elf_aligned_decl_common (FILE *, tree, const char *,
304 unsigned HOST_WIDE_INT, int);
8fe75e43
RH
305
306#ifdef RTX_CODE
307extern void ix86_fp_comparison_codes (enum rtx_code code, enum rtx_code *,
308 enum rtx_code *, enum rtx_code *);
309extern enum rtx_code ix86_fp_compare_code_to_integer (enum rtx_code);
310#endif
72ce3d4a 311extern int asm_preferred_eh_data_format (int, int);
7ab91c5f
L
312
313#ifdef HAVE_ATTR_cpu
314extern enum attr_cpu ix86_schedule;
315#endif
f81c9774 316
612b40cf 317extern const char * ix86_output_call_insn (rtx_insn *insn, rtx call_op);
97afef00 318extern bool ix86_operands_ok_for_move_multiple (rtx *operands, bool load,
b8506a8a 319 machine_mode mode);
894fd6f2
MK
320
321#ifdef RTX_CODE
322/* Target data for multipass lookahead scheduling.
323 Currently used for Core 2/i7 tuning. */
324struct ix86_first_cycle_multipass_data_
325{
326 /* The length (in bytes) of ifetch block in this solution. */
327 int ifetch_block_len;
328 /* Number of instructions in ifetch block in this solution. */
329 int ifetch_block_n_insns;
330 /* Bitmap to remember changes to ready_try for backtracking. */
331 sbitmap ready_try_change;
332 /* Size of the bitmap. */
333 int ready_try_change_size;
334};
335# define TARGET_SCHED_FIRST_CYCLE_MULTIPASS_DATA_T \
336 struct ix86_first_cycle_multipass_data_
337#endif /* RTX_CODE */
00402c94
RH
338
339const addr_space_t ADDR_SPACE_SEG_FS = 1;
340const addr_space_t ADDR_SPACE_SEG_GS = 2;
478167be
JJ
341
342namespace gcc { class context; }
343class rtl_opt_pass;
344
345extern rtl_opt_pass *make_pass_insert_vzeroupper (gcc::context *);
346extern rtl_opt_pass *make_pass_stv (gcc::context *);