1 ; Options for the IA-32 and AMD64 ports of the compiler.
3 ; Copyright (C) 2005-2013 Free Software Foundation, Inc.
5 ; This file is part of GCC.
7 ; GCC is free software; you can redistribute it and/or modify it under
8 ; the terms of the GNU General Public License as published by the Free
9 ; Software Foundation; either version 3, or (at your option) any later
12 ; GCC is distributed in the hope that it will be useful, but WITHOUT ANY
13 ; WARRANTY; without even the implied warranty of MERCHANTABILITY or
14 ; FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
17 ; You should have received a copy of the GNU General Public License
18 ; along with GCC; see the file COPYING3. If not see
19 ; <http://www.gnu.org/licenses/>.
22 config/i386/i386-opts.h
24 ; Bit flags that specify the ISA we are compiling for.
26 HOST_WIDE_INT ix86_isa_flags = TARGET_64BIT_DEFAULT | TARGET_SUBTARGET_ISA_DEFAULT
28 ; A mask of ix86_isa_flags that includes bit X if X was set or cleared
29 ; on the command line.
31 HOST_WIDE_INT ix86_isa_flags_explicit
34 int recip_mask = RECIP_MASK_DEFAULT
37 int recip_mask_explicit
40 int x_recip_mask_explicit
42 ;; Definitions to add to the cl_target_option structure
53 unsigned char schedule
57 unsigned char branch_cost
59 ;; which flags were passed by the user
61 HOST_WIDE_INT x_ix86_isa_flags_explicit
63 ;; which flags were passed by the user
65 int ix86_target_flags_explicit
67 ;; whether -mtune was not specified
69 unsigned char tune_defaulted
71 ;; whether -march was specified
73 unsigned char arch_specified
77 Target RejectNegative Report Mask(128BIT_LONG_DOUBLE) Save
78 sizeof(long double) is 16
81 Target Report Mask(80387) Save
85 Target RejectNegative Report InverseMask(128BIT_LONG_DOUBLE) Save
86 sizeof(long double) is 12
89 Target Report RejectNegative InverseMask(LONG_DOUBLE_64) Save
90 Use 80-bit long double
93 Target Report RejectNegative Mask(LONG_DOUBLE_64) Save
94 Use 64-bit long double
96 maccumulate-outgoing-args
97 Target Report Mask(ACCUMULATE_OUTGOING_ARGS) Save
98 Reserve space for outgoing arguments in the function prologue
101 Target Report Mask(ALIGN_DOUBLE) Save
102 Align some doubles on dword boundary
105 Target RejectNegative Joined UInteger
106 Function starts are aligned to this power of 2
109 Target RejectNegative Joined UInteger
110 Jump targets are aligned to this power of 2
113 Target RejectNegative Joined UInteger
114 Loop code aligned to this power of 2
117 Target RejectNegative Report InverseMask(NO_ALIGN_STRINGOPS, ALIGN_STRINGOPS) Save
118 Align destination of the string operations
121 Target RejectNegative Joined Var(ix86_arch_string)
122 Generate code for given CPU
125 Target RejectNegative Joined Enum(asm_dialect) Var(ix86_asm_dialect) Init(ASM_ATT)
126 Use given assembler dialect
129 Name(asm_dialect) Type(enum asm_dialect)
130 Known assembler dialects (for use with the -masm-dialect= option):
133 Enum(asm_dialect) String(intel) Value(ASM_INTEL)
136 Enum(asm_dialect) String(att) Value(ASM_ATT)
139 Target RejectNegative Joined UInteger Var(ix86_branch_cost)
140 Branches are this expensive (1-5, arbitrary units)
142 mlarge-data-threshold=
143 Target RejectNegative Joined UInteger Var(ix86_section_threshold) Init(DEFAULT_LARGE_SECTION_THRESHOLD)
144 Data greater than given threshold will go into .ldata section in x86-64 medium model
147 Target RejectNegative Joined Enum(cmodel) Var(ix86_cmodel) Init(CM_32)
148 Use given x86-64 code model
151 Name(cmodel) Type(enum cmodel)
152 Known code models (for use with the -mcmodel= option):
155 Enum(cmodel) String(small) Value(CM_SMALL)
158 Enum(cmodel) String(medium) Value(CM_MEDIUM)
161 Enum(cmodel) String(large) Value(CM_LARGE)
164 Enum(cmodel) String(32) Value(CM_32)
167 Enum(cmodel) String(kernel) Value(CM_KERNEL)
170 Target RejectNegative Joined Enum(pmode) Var(ix86_pmode) Init(PMODE_SI)
171 Use given address mode
174 Name(pmode) Type(enum pmode)
175 Known address mode (for use with the -maddress-mode= option):
178 Enum(pmode) String(short) Value(PMODE_SI)
181 Enum(pmode) String(long) Value(PMODE_DI)
184 Target RejectNegative Joined Undocumented Alias(mtune=) Warn(%<-mcpu=%> is deprecated; use %<-mtune=%> or %<-march=%> instead)
187 Target RejectNegative Report InverseMask(NO_FANCY_MATH_387, USE_FANCY_MATH_387) Save
188 Generate sin, cos, sqrt for FPU
191 Target Report Var(ix86_force_drap)
192 Always use Dynamic Realigned Argument Pointer (DRAP) to realign stack
195 Target Report Mask(FLOAT_RETURNS) Save
196 Return values of functions in FPU registers
199 Target RejectNegative Joined Var(ix86_fpmath) Enum(fpmath_unit) Init(FPMATH_387) Save
200 Generate floating point mathematics using given instruction set
203 Name(fpmath_unit) Type(enum fpmath_unit)
204 Valid arguments to -mfpmath=:
207 Enum(fpmath_unit) String(387) Value(FPMATH_387)
210 Enum(fpmath_unit) String(sse) Value(FPMATH_SSE)
213 Enum(fpmath_unit) String(387,sse) Value({(enum fpmath_unit) (FPMATH_SSE | FPMATH_387)})
216 Enum(fpmath_unit) String(387+sse) Value({(enum fpmath_unit) (FPMATH_SSE | FPMATH_387)})
219 Enum(fpmath_unit) String(sse,387) Value({(enum fpmath_unit) (FPMATH_SSE | FPMATH_387)})
222 Enum(fpmath_unit) String(sse+387) Value({(enum fpmath_unit) (FPMATH_SSE | FPMATH_387)})
225 Enum(fpmath_unit) String(both) Value({(enum fpmath_unit) (FPMATH_SSE | FPMATH_387)})
228 Target RejectNegative Mask(80387) Save
232 Target Report Mask(IEEE_FP) Save
233 Use IEEE math for fp comparisons
235 minline-all-stringops
236 Target Report Mask(INLINE_ALL_STRINGOPS) Save
237 Inline all known string operations
239 minline-stringops-dynamically
240 Target Report Mask(INLINE_STRINGOPS_DYNAMICALLY) Save
241 Inline memset/memcpy string operations, but perform inline version only for small blocks
244 Target Undocumented Alias(masm=, intel, att) Warn(%<-mintel-syntax%> and %<-mno-intel-syntax%> are deprecated; use %<-masm=intel%> and %<-masm=att%> instead)
248 Target Report Mask(MS_BITFIELD_LAYOUT) Save
249 Use native (MS) bitfield layout
252 Target RejectNegative Report Mask(NO_ALIGN_STRINGOPS) Undocumented Save
255 Target RejectNegative Report Mask(NO_FANCY_MATH_387) Undocumented Save
258 Target RejectNegative Report Mask(NO_PUSH_ARGS) Undocumented Save
261 Target RejectNegative Report Mask(NO_RED_ZONE) Undocumented Save
263 momit-leaf-frame-pointer
264 Target Report Mask(OMIT_LEAF_FRAME_POINTER) Save
265 Omit the frame pointer in leaf functions
268 Target RejectNegative Report
269 Set 80387 floating-point precision to 32-bit
272 Target RejectNegative Report
273 Set 80387 floating-point precision to 64-bit
276 Target RejectNegative Report
277 Set 80387 floating-point precision to 80-bit
279 mpreferred-stack-boundary=
280 Target RejectNegative Joined UInteger Var(ix86_preferred_stack_boundary_arg)
281 Attempt to keep stack aligned to this power of 2
283 mincoming-stack-boundary=
284 Target RejectNegative Joined UInteger Var(ix86_incoming_stack_boundary_arg)
285 Assume incoming stack aligned to this power of 2
288 Target Report InverseMask(NO_PUSH_ARGS, PUSH_ARGS) Save
289 Use push instructions to save outgoing arguments
292 Target RejectNegative Report InverseMask(NO_RED_ZONE, RED_ZONE) Save
293 Use red-zone in the x86-64 code
296 Target RejectNegative Joined UInteger Var(ix86_regparm)
297 Number of registers used to pass integer arguments
300 Target Report Mask(RTD) Save
301 Alternate calling convention
304 Target InverseMask(80387) Save
305 Do not use hardware fp
308 Target RejectNegative Mask(SSEREGPARM) Save
309 Use SSE register passing conventions for SF and DF mode
312 Target Report Var(ix86_force_align_arg_pointer) Init(-1)
313 Realign stack in prologue
316 Target Report Mask(STACK_PROBE) Save
320 Target RejectNegative Joined Var(ix86_tune_memcpy_strategy)
321 Specify memcpy expansion strategy when expected size is known
324 Target RejectNegative Joined Var(ix86_tune_memset_strategy)
325 Specify memset expansion strategy when expected size is known
328 Target RejectNegative Joined Enum(stringop_alg) Var(ix86_stringop_alg) Init(no_stringop)
329 Chose strategy to generate stringop using
332 Name(stringop_alg) Type(enum stringop_alg)
333 Valid arguments to -mstringop-strategy=:
336 Enum(stringop_alg) String(rep_byte) Value(rep_prefix_1_byte)
339 Enum(stringop_alg) String(libcall) Value(libcall)
342 Enum(stringop_alg) String(rep_4byte) Value(rep_prefix_4_byte)
345 Enum(stringop_alg) String(rep_8byte) Value(rep_prefix_8_byte)
348 Enum(stringop_alg) String(byte_loop) Value(loop_1_byte)
351 Enum(stringop_alg) String(loop) Value(loop)
354 Enum(stringop_alg) String(unrolled_loop) Value(unrolled_loop)
357 Enum(stringop_alg) String(vector_loop) Value(vector_loop)
360 Target RejectNegative Joined Var(ix86_tls_dialect) Enum(tls_dialect) Init(TLS_DIALECT_GNU)
361 Use given thread-local storage dialect
364 Name(tls_dialect) Type(enum tls_dialect)
365 Known TLS dialects (for use with the -mtls-dialect= option):
368 Enum(tls_dialect) String(gnu) Value(TLS_DIALECT_GNU)
371 Enum(tls_dialect) String(gnu2) Value(TLS_DIALECT_GNU2)
374 Target Report Mask(TLS_DIRECT_SEG_REFS)
375 Use direct references against %gs when accessing tls data
378 Target RejectNegative Joined Var(ix86_tune_string)
379 Schedule code for given CPU
382 Target RejectNegative Joined Var(ix86_tune_ctrl_string)
383 Fine grain control of tune features
386 Target RejectNegative Joined Var(ix86_abi) Enum(calling_abi) Init(SYSV_ABI)
387 Generate code that conforms to the given ABI
390 Name(calling_abi) Type(enum calling_abi)
391 Known ABIs (for use with the -mabi= option):
394 Enum(calling_abi) String(sysv) Value(SYSV_ABI)
397 Enum(calling_abi) String(ms) Value(MS_ABI)
400 Target RejectNegative Joined Var(ix86_veclibabi_type) Enum(ix86_veclibabi) Init(ix86_veclibabi_type_none)
401 Vector library ABI to use
404 Name(ix86_veclibabi) Type(enum ix86_veclibabi)
405 Known vectorization library ABIs (for use with the -mveclibabi= option):
408 Enum(ix86_veclibabi) String(svml) Value(ix86_veclibabi_type_svml)
411 Enum(ix86_veclibabi) String(acml) Value(ix86_veclibabi_type_acml)
414 Target Report Mask(VECT8_RETURNS) Save
415 Return 8-byte vectors in memory
418 Target Report Mask(RECIP) Save
419 Generate reciprocals instead of divss and sqrtss.
422 Target Report RejectNegative Joined Var(ix86_recip_name)
423 Control generation of reciprocal estimates.
426 Target Report Mask(CLD) Save
427 Generate cld instruction in the function prologue.
430 Target Report Mask(VZEROUPPER) Save
431 Generate vzeroupper instruction before a transfer of control flow out of
435 Target RejectNegative Var(flag_dispatch_scheduler)
436 Do dispatch scheduling if processor is bdver1 or bdver2 or bdver3 and Haifa scheduling
440 Target Report Mask(PREFER_AVX128) SAVE
441 Use 128-bit AVX instructions instead of 256-bit AVX instructions in the auto-vectorizer.
446 Target RejectNegative Negative(m64) Report InverseMask(ISA_64BIT) Var(ix86_isa_flags) Save
447 Generate 32bit i386 code
450 Target RejectNegative Negative(mx32) Report Mask(ABI_64) Var(ix86_isa_flags) Save
451 Generate 64bit x86-64 code
454 Target RejectNegative Negative(m32) Report Mask(ABI_X32) Var(ix86_isa_flags) Save
455 Generate 32bit x86-64 code
458 Target Report Mask(ISA_MMX) Var(ix86_isa_flags) Save
459 Support MMX built-in functions
462 Target Report Mask(ISA_3DNOW) Var(ix86_isa_flags) Save
463 Support 3DNow! built-in functions
466 Target Undocumented Mask(ISA_3DNOW_A) Var(ix86_isa_flags) Save
467 Support Athlon 3Dnow! built-in functions
470 Target Report Mask(ISA_SSE) Var(ix86_isa_flags) Save
471 Support MMX and SSE built-in functions and code generation
474 Target Report Mask(ISA_SSE2) Var(ix86_isa_flags) Save
475 Support MMX, SSE and SSE2 built-in functions and code generation
478 Target Report Mask(ISA_SSE3) Var(ix86_isa_flags) Save
479 Support MMX, SSE, SSE2 and SSE3 built-in functions and code generation
482 Target Report Mask(ISA_SSSE3) Var(ix86_isa_flags) Save
483 Support MMX, SSE, SSE2, SSE3 and SSSE3 built-in functions and code generation
486 Target Report Mask(ISA_SSE4_1) Var(ix86_isa_flags) Save
487 Support MMX, SSE, SSE2, SSE3, SSSE3 and SSE4.1 built-in functions and code generation
490 Target Report Mask(ISA_SSE4_2) Var(ix86_isa_flags) Save
491 Support MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1 and SSE4.2 built-in functions and code generation
494 Target RejectNegative Report Mask(ISA_SSE4_2) Var(ix86_isa_flags) Save
495 Support MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1 and SSE4.2 built-in functions and code generation
498 Target RejectNegative Report InverseMask(ISA_SSE4_1) Var(ix86_isa_flags) Save
499 Do not support SSE4.1 and SSE4.2 built-in functions and code generation
502 Target Undocumented Alias(mavx) Warn(%<-msse5%> was removed)
506 Target Report Mask(ISA_AVX) Var(ix86_isa_flags) Save
507 Support MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2 and AVX built-in functions and code generation
510 Target Report Mask(ISA_AVX2) Var(ix86_isa_flags) Save
511 Support MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, AVX and AVX2 built-in functions and code generation
514 Target Report Mask(ISA_FMA) Var(ix86_isa_flags) Save
515 Support MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, AVX and FMA built-in functions and code generation
518 Target Report Mask(ISA_SSE4A) Var(ix86_isa_flags) Save
519 Support MMX, SSE, SSE2, SSE3 and SSE4A built-in functions and code generation
522 Target Report Mask(ISA_FMA4) Var(ix86_isa_flags) Save
523 Support FMA4 built-in functions and code generation
526 Target Report Mask(ISA_XOP) Var(ix86_isa_flags) Save
527 Support XOP built-in functions and code generation
530 Target Report Mask(ISA_LWP) Var(ix86_isa_flags) Save
531 Support LWP built-in functions and code generation
534 Target Report Mask(ISA_ABM) Var(ix86_isa_flags) Save
535 Support code generation of Advanced Bit Manipulation (ABM) instructions.
538 Target Report Mask(ISA_POPCNT) Var(ix86_isa_flags) Save
539 Support code generation of popcnt instruction.
542 Target Report Mask(ISA_BMI) Var(ix86_isa_flags) Save
543 Support BMI built-in functions and code generation
546 Target Report Mask(ISA_BMI2) Var(ix86_isa_flags) Save
547 Support BMI2 built-in functions and code generation
550 Target Report Mask(ISA_LZCNT) Var(ix86_isa_flags) Save
551 Support LZCNT built-in function and code generation
554 Target Report Mask(ISA_HLE) Var(ix86_isa_flags) Save
555 Support Hardware Lock Elision prefixes
558 Target Report Mask(ISA_RDSEED) Var(ix86_isa_flags) Save
559 Support RDSEED instruction
562 Target Report Mask(ISA_PRFCHW) Var(ix86_isa_flags) Save
563 Support PREFETCHW instruction
566 Target Report Mask(ISA_ADX) Var(ix86_isa_flags) Save
567 Support flag-preserving add-carry instructions
570 Target Report Mask(ISA_FXSR) Var(ix86_isa_flags) Save
571 Support FXSAVE and FXRSTOR instructions
574 Target Report Mask(ISA_XSAVE) Var(ix86_isa_flags) Save
575 Support XSAVE and XRSTOR instructions
578 Target Report Mask(ISA_XSAVEOPT) Var(ix86_isa_flags) Save
579 Support XSAVEOPT instruction
582 Target Report Mask(ISA_TBM) Var(ix86_isa_flags) Save
583 Support TBM built-in functions and code generation
586 Target Report Mask(ISA_CX16) Var(ix86_isa_flags) Save
587 Support code generation of cmpxchg16b instruction.
590 Target Report Mask(ISA_SAHF) Var(ix86_isa_flags) Save
591 Support code generation of sahf instruction in 64bit x86-64 code.
594 Target Report Mask(ISA_MOVBE) Var(ix86_isa_flags) Save
595 Support code generation of movbe instruction.
598 Target Report Mask(ISA_CRC32) Var(ix86_isa_flags) Save
599 Support code generation of crc32 instruction.
602 Target Report Mask(ISA_AES) Var(ix86_isa_flags) Save
603 Support AES built-in functions and code generation
606 Target Report Mask(ISA_PCLMUL) Var(ix86_isa_flags) Save
607 Support PCLMUL built-in functions and code generation
610 Target Report Var(ix86_sse2avx)
611 Encode SSE instructions with VEX prefix
614 Target Report Mask(ISA_FSGSBASE) Var(ix86_isa_flags) Save
615 Support FSGSBASE built-in functions and code generation
618 Target Report Mask(ISA_RDRND) Var(ix86_isa_flags) Save
619 Support RDRND built-in functions and code generation
622 Target Report Mask(ISA_F16C) Var(ix86_isa_flags) Save
623 Support F16C built-in functions and code generation
626 Target Report Var(flag_fentry) Init(-1)
627 Emit profiling counter call at function entry before prologue.
630 Target Report Mask(USE_8BIT_IDIV) Save
631 Expand 32bit/64bit integer divide into 8bit unsigned integer divide with run-time check
633 mavx256-split-unaligned-load
634 Target Report Mask(AVX256_SPLIT_UNALIGNED_LOAD) Save
635 Split 32-byte AVX unaligned load
637 mavx256-split-unaligned-store
638 Target Report Mask(AVX256_SPLIT_UNALIGNED_STORE) Save
639 Split 32-byte AVX unaligned store
642 Target Report Mask(ISA_RTM) Var(ix86_isa_flags) Save
643 Support RTM built-in functions and code generation
645 mstack-protector-guard=
646 Target RejectNegative Joined Enum(stack_protector_guard) Var(ix86_stack_protector_guard) Init(SSP_TLS)
647 Use given stack-protector guard
650 Name(stack_protector_guard) Type(enum stack_protector_guard)
651 Known stack protector guard (for use with the -mstack-protector-guard= option):
654 Enum(stack_protector_guard) String(tls) Value(SSP_TLS)
657 Enum(stack_protector_guard) String(global) Value(SSP_GLOBAL)