Implement -mmemcpy-strategy= and -mmemset-strategy= options
[official-gcc.git] / gcc / config / i386 / i386.opt
blob37e62f5bce816fa76c2422010c7820cc79751c4f
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
10 ; version.
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
15 ; for more details.
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/>.
21 HeaderInclude
22 config/i386/i386-opts.h
24 ; Bit flags that specify the ISA we are compiling for.
25 Variable
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.
30 Variable
31 HOST_WIDE_INT ix86_isa_flags_explicit
33 TargetVariable
34 int recip_mask = RECIP_MASK_DEFAULT
36 Variable
37 int recip_mask_explicit
39 TargetSave
40 int x_recip_mask_explicit
42 ;; Definitions to add to the cl_target_option structure
43 ;; -march= processor
44 TargetSave
45 unsigned char arch
47 ;; -mtune= processor
48 TargetSave
49 unsigned char tune
51 ;; CPU schedule model
52 TargetSave
53 unsigned char schedule
55 ;; branch cost
56 TargetSave
57 unsigned char branch_cost
59 ;; which flags were passed by the user
60 TargetSave
61 HOST_WIDE_INT x_ix86_isa_flags_explicit
63 ;; which flags were passed by the user
64 TargetSave
65 int ix86_target_flags_explicit
67 ;; whether -mtune was not specified
68 TargetSave
69 unsigned char tune_defaulted
71 ;; whether -march was specified
72 TargetSave
73 unsigned char arch_specified
75 ;; x86 options
76 m128bit-long-double
77 Target RejectNegative Report Mask(128BIT_LONG_DOUBLE) Save
78 sizeof(long double) is 16
80 m80387
81 Target Report Mask(80387) Save
82 Use hardware fp
84 m96bit-long-double
85 Target RejectNegative Report InverseMask(128BIT_LONG_DOUBLE) Save
86 sizeof(long double) is 12
88 mlong-double-80
89 Target Report RejectNegative InverseMask(LONG_DOUBLE_64) Save
90 Use 80-bit long double
92 mlong-double-64
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
100 malign-double
101 Target Report Mask(ALIGN_DOUBLE) Save
102 Align some doubles on dword boundary
104 malign-functions=
105 Target RejectNegative Joined UInteger
106 Function starts are aligned to this power of 2
108 malign-jumps=
109 Target RejectNegative Joined UInteger
110 Jump targets are aligned to this power of 2
112 malign-loops=
113 Target RejectNegative Joined UInteger
114 Loop code aligned to this power of 2
116 malign-stringops
117 Target RejectNegative Report InverseMask(NO_ALIGN_STRINGOPS, ALIGN_STRINGOPS) Save
118 Align destination of the string operations
120 march=
121 Target RejectNegative Joined Var(ix86_arch_string)
122 Generate code for given CPU
124 masm=
125 Target RejectNegative Joined Enum(asm_dialect) Var(ix86_asm_dialect) Init(ASM_ATT)
126 Use given assembler dialect
128 Enum
129 Name(asm_dialect) Type(enum asm_dialect)
130 Known assembler dialects (for use with the -masm-dialect= option):
132 EnumValue
133 Enum(asm_dialect) String(intel) Value(ASM_INTEL)
135 EnumValue
136 Enum(asm_dialect) String(att) Value(ASM_ATT)
138 mbranch-cost=
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
146 mcmodel=
147 Target RejectNegative Joined Enum(cmodel) Var(ix86_cmodel) Init(CM_32)
148 Use given x86-64 code model
150 Enum
151 Name(cmodel) Type(enum cmodel)
152 Known code models (for use with the -mcmodel= option):
154 EnumValue
155 Enum(cmodel) String(small) Value(CM_SMALL)
157 EnumValue
158 Enum(cmodel) String(medium) Value(CM_MEDIUM)
160 EnumValue
161 Enum(cmodel) String(large) Value(CM_LARGE)
163 EnumValue
164 Enum(cmodel) String(32) Value(CM_32)
166 EnumValue
167 Enum(cmodel) String(kernel) Value(CM_KERNEL)
169 maddress-mode=
170 Target RejectNegative Joined Enum(pmode) Var(ix86_pmode) Init(PMODE_SI)
171 Use given address mode
173 Enum
174 Name(pmode) Type(enum pmode)
175 Known address mode (for use with the -maddress-mode= option):
177 EnumValue
178 Enum(pmode) String(short) Value(PMODE_SI)
180 EnumValue
181 Enum(pmode) String(long) Value(PMODE_DI)
183 mcpu=
184 Target RejectNegative Joined Undocumented Alias(mtune=) Warn(%<-mcpu=%> is deprecated; use %<-mtune=%> or %<-march=%> instead)
186 mfancy-math-387
187 Target RejectNegative Report InverseMask(NO_FANCY_MATH_387, USE_FANCY_MATH_387) Save
188 Generate sin, cos, sqrt for FPU
190 mforce-drap
191 Target Report Var(ix86_force_drap)
192 Always use Dynamic Realigned Argument Pointer (DRAP) to realign stack
194 mfp-ret-in-387
195 Target Report Mask(FLOAT_RETURNS) Save
196 Return values of functions in FPU registers
198 mfpmath=
199 Target RejectNegative Joined Var(ix86_fpmath) Enum(fpmath_unit) Init(FPMATH_387) Save
200 Generate floating point mathematics using given instruction set
202 Enum
203 Name(fpmath_unit) Type(enum fpmath_unit)
204 Valid arguments to -mfpmath=:
206 EnumValue
207 Enum(fpmath_unit) String(387) Value(FPMATH_387)
209 EnumValue
210 Enum(fpmath_unit) String(sse) Value(FPMATH_SSE)
212 EnumValue
213 Enum(fpmath_unit) String(387,sse) Value({(enum fpmath_unit) (FPMATH_SSE | FPMATH_387)})
215 EnumValue
216 Enum(fpmath_unit) String(387+sse) Value({(enum fpmath_unit) (FPMATH_SSE | FPMATH_387)})
218 EnumValue
219 Enum(fpmath_unit) String(sse,387) Value({(enum fpmath_unit) (FPMATH_SSE | FPMATH_387)})
221 EnumValue
222 Enum(fpmath_unit) String(sse+387) Value({(enum fpmath_unit) (FPMATH_SSE | FPMATH_387)})
224 EnumValue
225 Enum(fpmath_unit) String(both) Value({(enum fpmath_unit) (FPMATH_SSE | FPMATH_387)})
227 mhard-float
228 Target RejectNegative Mask(80387) Save
229 Use hardware fp
231 mieee-fp
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
243 mintel-syntax
244 Target Undocumented Alias(masm=, intel, att) Warn(%<-mintel-syntax%> and %<-mno-intel-syntax%> are deprecated; use %<-masm=intel%> and %<-masm=att%> instead)
245 ;; Deprecated
247 mms-bitfields
248 Target Report Mask(MS_BITFIELD_LAYOUT) Save
249 Use native (MS) bitfield layout
251 mno-align-stringops
252 Target RejectNegative Report Mask(NO_ALIGN_STRINGOPS) Undocumented Save
254 mno-fancy-math-387
255 Target RejectNegative Report Mask(NO_FANCY_MATH_387) Undocumented Save
257 mno-push-args
258 Target RejectNegative Report Mask(NO_PUSH_ARGS) Undocumented Save
260 mno-red-zone
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
267 mpc32
268 Target RejectNegative Report
269 Set 80387 floating-point precision to 32-bit
271 mpc64
272 Target RejectNegative Report
273 Set 80387 floating-point precision to 64-bit
275 mpc80
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
287 mpush-args
288 Target Report InverseMask(NO_PUSH_ARGS, PUSH_ARGS) Save
289 Use push instructions to save outgoing arguments
291 mred-zone
292 Target RejectNegative Report InverseMask(NO_RED_ZONE, RED_ZONE) Save
293 Use red-zone in the x86-64 code
295 mregparm=
296 Target RejectNegative Joined UInteger Var(ix86_regparm)
297 Number of registers used to pass integer arguments
299 mrtd
300 Target Report Mask(RTD) Save
301 Alternate calling convention
303 msoft-float
304 Target InverseMask(80387) Save
305 Do not use hardware fp
307 msseregparm
308 Target RejectNegative Mask(SSEREGPARM) Save
309 Use SSE register passing conventions for SF and DF mode
311 mstackrealign
312 Target Report Var(ix86_force_align_arg_pointer) Init(-1)
313 Realign stack in prologue
315 mstack-arg-probe
316 Target Report Mask(STACK_PROBE) Save
317 Enable stack probing
319 mmemcpy-strategy=
320 Target RejectNegative Joined Var(ix86_tune_memcpy_strategy)
321 Specify memcpy expansion strategy when expected size is known
323 mmemset-strategy=
324 Target RejectNegative Joined Var(ix86_tune_memset_strategy)
325 Specify memset expansion strategy when expected size is known
327 mstringop-strategy=
328 Target RejectNegative Joined Enum(stringop_alg) Var(ix86_stringop_alg) Init(no_stringop)
329 Chose strategy to generate stringop using
331 Enum
332 Name(stringop_alg) Type(enum stringop_alg)
333 Valid arguments to -mstringop-strategy=:
335 EnumValue
336 Enum(stringop_alg) String(rep_byte) Value(rep_prefix_1_byte)
338 EnumValue
339 Enum(stringop_alg) String(libcall) Value(libcall)
341 EnumValue
342 Enum(stringop_alg) String(rep_4byte) Value(rep_prefix_4_byte)
344 EnumValue
345 Enum(stringop_alg) String(rep_8byte) Value(rep_prefix_8_byte)
347 EnumValue
348 Enum(stringop_alg) String(byte_loop) Value(loop_1_byte)
350 EnumValue
351 Enum(stringop_alg) String(loop) Value(loop)
353 EnumValue
354 Enum(stringop_alg) String(unrolled_loop) Value(unrolled_loop)
356 EnumValue
357 Enum(stringop_alg) String(vector_loop) Value(vector_loop)
359 mtls-dialect=
360 Target RejectNegative Joined Var(ix86_tls_dialect) Enum(tls_dialect) Init(TLS_DIALECT_GNU)
361 Use given thread-local storage dialect
363 Enum
364 Name(tls_dialect) Type(enum tls_dialect)
365 Known TLS dialects (for use with the -mtls-dialect= option):
367 EnumValue
368 Enum(tls_dialect) String(gnu) Value(TLS_DIALECT_GNU)
370 EnumValue
371 Enum(tls_dialect) String(gnu2) Value(TLS_DIALECT_GNU2)
373 mtls-direct-seg-refs
374 Target Report Mask(TLS_DIRECT_SEG_REFS)
375 Use direct references against %gs when accessing tls data
377 mtune=
378 Target RejectNegative Joined Var(ix86_tune_string)
379 Schedule code for given CPU
381 mtune-ctrl=
382 Target RejectNegative Joined Var(ix86_tune_ctrl_string)
383 Fine grain control of tune features
385 mabi=
386 Target RejectNegative Joined Var(ix86_abi) Enum(calling_abi) Init(SYSV_ABI)
387 Generate code that conforms to the given ABI
389 Enum
390 Name(calling_abi) Type(enum calling_abi)
391 Known ABIs (for use with the -mabi= option):
393 EnumValue
394 Enum(calling_abi) String(sysv) Value(SYSV_ABI)
396 EnumValue
397 Enum(calling_abi) String(ms) Value(MS_ABI)
399 mveclibabi=
400 Target RejectNegative Joined Var(ix86_veclibabi_type) Enum(ix86_veclibabi) Init(ix86_veclibabi_type_none)
401 Vector library ABI to use
403 Enum
404 Name(ix86_veclibabi) Type(enum ix86_veclibabi)
405 Known vectorization library ABIs (for use with the -mveclibabi= option):
407 EnumValue
408 Enum(ix86_veclibabi) String(svml) Value(ix86_veclibabi_type_svml)
410 EnumValue
411 Enum(ix86_veclibabi) String(acml) Value(ix86_veclibabi_type_acml)
413 mvect8-ret-in-mem
414 Target Report Mask(VECT8_RETURNS) Save
415 Return 8-byte vectors in memory
417 mrecip
418 Target Report Mask(RECIP) Save
419 Generate reciprocals instead of divss and sqrtss.
421 mrecip=
422 Target Report RejectNegative Joined Var(ix86_recip_name)
423 Control generation of reciprocal estimates.
425 mcld
426 Target Report Mask(CLD) Save
427 Generate cld instruction in the function prologue.
429 mvzeroupper
430 Target Report Mask(VZEROUPPER) Save
431 Generate vzeroupper instruction before a transfer of control flow out of
432 the function.
434 mdispatch-scheduler
435 Target RejectNegative Var(flag_dispatch_scheduler)
436 Do dispatch scheduling if processor is bdver1 or bdver2 or bdver3 and Haifa scheduling
437 is selected.
439 mprefer-avx128
440 Target Report Mask(PREFER_AVX128) SAVE
441 Use 128-bit AVX instructions instead of 256-bit AVX instructions in the auto-vectorizer.
443 ;; ISA support
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
453 mx32
454 Target RejectNegative Negative(m32) Report Mask(ABI_X32) Var(ix86_isa_flags) Save
455 Generate 32bit x86-64 code
457 mmmx
458 Target Report Mask(ISA_MMX) Var(ix86_isa_flags) Save
459 Support MMX built-in functions
461 m3dnow
462 Target Report Mask(ISA_3DNOW) Var(ix86_isa_flags) Save
463 Support 3DNow! built-in functions
465 m3dnowa
466 Target Undocumented Mask(ISA_3DNOW_A) Var(ix86_isa_flags) Save
467 Support Athlon 3Dnow! built-in functions
469 msse
470 Target Report Mask(ISA_SSE) Var(ix86_isa_flags) Save
471 Support MMX and SSE built-in functions and code generation
473 msse2
474 Target Report Mask(ISA_SSE2) Var(ix86_isa_flags) Save
475 Support MMX, SSE and SSE2 built-in functions and code generation
477 msse3
478 Target Report Mask(ISA_SSE3) Var(ix86_isa_flags) Save
479 Support MMX, SSE, SSE2 and SSE3 built-in functions and code generation
481 mssse3
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
485 msse4.1
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
489 msse4.2
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
493 msse4
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
497 mno-sse4
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
501 msse5
502 Target Undocumented Alias(mavx) Warn(%<-msse5%> was removed)
503 ;; Deprecated
505 mavx
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
509 mavx2
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
513 mfma
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
517 msse4a
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
521 mfma4
522 Target Report Mask(ISA_FMA4) Var(ix86_isa_flags) Save
523 Support FMA4 built-in functions and code generation 
525 mxop
526 Target Report Mask(ISA_XOP) Var(ix86_isa_flags) Save
527 Support XOP built-in functions and code generation 
529 mlwp
530 Target Report Mask(ISA_LWP) Var(ix86_isa_flags) Save
531 Support LWP built-in functions and code generation 
533 mabm
534 Target Report Mask(ISA_ABM) Var(ix86_isa_flags) Save
535 Support code generation of Advanced Bit Manipulation (ABM) instructions.
537 mpopcnt
538 Target Report Mask(ISA_POPCNT) Var(ix86_isa_flags) Save
539 Support code generation of popcnt instruction.
541 mbmi
542 Target Report Mask(ISA_BMI) Var(ix86_isa_flags) Save
543 Support BMI built-in functions and code generation
545 mbmi2
546 Target Report Mask(ISA_BMI2) Var(ix86_isa_flags) Save
547 Support BMI2 built-in functions and code generation
549 mlzcnt
550 Target Report Mask(ISA_LZCNT) Var(ix86_isa_flags) Save
551 Support LZCNT built-in function and code generation
553 mhle
554 Target Report Mask(ISA_HLE) Var(ix86_isa_flags) Save
555 Support Hardware Lock Elision prefixes
557 mrdseed
558 Target Report Mask(ISA_RDSEED) Var(ix86_isa_flags) Save
559 Support RDSEED instruction
561 mprfchw
562 Target Report Mask(ISA_PRFCHW) Var(ix86_isa_flags) Save
563 Support PREFETCHW instruction
565 madx
566 Target Report Mask(ISA_ADX) Var(ix86_isa_flags) Save
567 Support flag-preserving add-carry instructions
569 mfxsr
570 Target Report Mask(ISA_FXSR) Var(ix86_isa_flags) Save
571 Support FXSAVE and FXRSTOR instructions
573 mxsave
574 Target Report Mask(ISA_XSAVE) Var(ix86_isa_flags) Save
575 Support XSAVE and XRSTOR instructions
577 mxsaveopt
578 Target Report Mask(ISA_XSAVEOPT) Var(ix86_isa_flags) Save
579 Support XSAVEOPT instruction
581 mtbm
582 Target Report Mask(ISA_TBM) Var(ix86_isa_flags) Save
583 Support TBM built-in functions and code generation
585 mcx16
586 Target Report Mask(ISA_CX16) Var(ix86_isa_flags) Save
587 Support code generation of cmpxchg16b instruction.
589 msahf
590 Target Report Mask(ISA_SAHF) Var(ix86_isa_flags) Save
591 Support code generation of sahf instruction in 64bit x86-64 code.
593 mmovbe
594 Target Report Mask(ISA_MOVBE) Var(ix86_isa_flags) Save
595 Support code generation of movbe instruction.
597 mcrc32
598 Target Report Mask(ISA_CRC32) Var(ix86_isa_flags) Save
599 Support code generation of crc32 instruction.
601 maes
602 Target Report Mask(ISA_AES) Var(ix86_isa_flags) Save
603 Support AES built-in functions and code generation
605 mpclmul
606 Target Report Mask(ISA_PCLMUL) Var(ix86_isa_flags) Save
607 Support PCLMUL built-in functions and code generation
609 msse2avx
610 Target Report Var(ix86_sse2avx)
611 Encode SSE instructions with VEX prefix
613 mfsgsbase
614 Target Report Mask(ISA_FSGSBASE) Var(ix86_isa_flags) Save
615 Support FSGSBASE built-in functions and code generation
617 mrdrnd
618 Target Report Mask(ISA_RDRND) Var(ix86_isa_flags) Save
619 Support RDRND built-in functions and code generation
621 mf16c
622 Target Report Mask(ISA_F16C) Var(ix86_isa_flags) Save
623 Support F16C built-in functions and code generation
625 mfentry
626 Target Report Var(flag_fentry) Init(-1)
627 Emit profiling counter call at function entry before prologue.
629 m8bit-idiv
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
641 mrtm
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
649 Enum
650 Name(stack_protector_guard) Type(enum stack_protector_guard)
651 Known stack protector guard (for use with the -mstack-protector-guard= option):
653 EnumValue
654 Enum(stack_protector_guard) String(tls) Value(SSP_TLS)
656 EnumValue
657 Enum(stack_protector_guard) String(global) Value(SSP_GLOBAL)