Rebase.
[official-gcc.git] / gcc / config / rs6000 / rs6000.opt
blob4c1a02a524ad56c6feaa768c6eea2673d943e72b
1 ; Options for the rs6000 port of the compiler
3 ; Copyright (C) 2005-2014 Free Software Foundation, Inc.
4 ; Contributed by Aldy Hernandez <aldy@quesejoda.com>.
6 ; This file is part of GCC.
8 ; GCC is free software; you can redistribute it and/or modify it under
9 ; the terms of the GNU General Public License as published by the Free
10 ; Software Foundation; either version 3, or (at your option) any later
11 ; version.
13 ; GCC is distributed in the hope that it will be useful, but WITHOUT
14 ; ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
15 ; or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public
16 ; License for more details.
18 ; You should have received a copy of the GNU General Public License
19 ; along with GCC; see the file COPYING3.  If not see
20 ; <http://www.gnu.org/licenses/>.
22 HeaderInclude
23 config/rs6000/rs6000-opts.h
25 ;; ISA flag bits (on/off)
26 Variable
27 HOST_WIDE_INT rs6000_isa_flags = TARGET_DEFAULT
29 TargetSave
30 HOST_WIDE_INT x_rs6000_isa_flags
32 ;; Miscellaneous flag bits that were set explicitly by the user
33 Variable
34 HOST_WIDE_INT rs6000_isa_flags_explicit
36 TargetSave
37 HOST_WIDE_INT x_rs6000_isa_flags_explicit
39 ;; Current processor
40 TargetVariable
41 enum processor_type rs6000_cpu = PROCESSOR_PPC603
43 ;; Always emit branch hint bits.
44 TargetVariable
45 unsigned char rs6000_always_hint
47 ;; Schedule instructions for group formation.
48 TargetVariable
49 unsigned char rs6000_sched_groups
51 ;; Align branch targets.
52 TargetVariable
53 unsigned char rs6000_align_branch_targets
55 ;; Support for -msched-costly-dep option.
56 TargetVariable
57 enum rs6000_dependence_cost rs6000_sched_costly_dep = no_dep_costly
59 ;; Support for -minsert-sched-nops option.
60 TargetVariable
61 enum rs6000_nop_insertion rs6000_sched_insert_nops = sched_finish_none
63 ;; Non-zero to allow overriding loop alignment.
64 TargetVariable
65 unsigned char can_override_loop_align
67 ;; Which small data model to use (for System V targets only)
68 TargetVariable
69 enum rs6000_sdata_type rs6000_sdata = SDATA_DATA
71 ;; Bit size of immediate TLS offsets and string from which it is decoded.
72 TargetVariable
73 int rs6000_tls_size = 32
75 ;; ABI enumeration available for subtarget to use.
76 TargetVariable
77 enum rs6000_abi rs6000_current_abi = ABI_NONE
79 ;; Type of traceback to use.
80 TargetVariable
81 enum rs6000_traceback_type rs6000_traceback = traceback_default
83 ;; Control alignment for fields within structures.
84 TargetVariable
85 unsigned char rs6000_alignment_flags
87 ;; Code model for 64-bit linux.
88 TargetVariable
89 enum rs6000_cmodel rs6000_current_cmodel = CMODEL_SMALL
91 ;; What type of reciprocal estimation instructions to generate
92 TargetVariable
93 unsigned int rs6000_recip_control
95 ;; Mask of what builtin functions are allowed
96 TargetVariable
97 HOST_WIDE_INT rs6000_builtin_mask
99 ;; Debug flags
100 TargetVariable
101 unsigned int rs6000_debug
103 ;; This option existed in the past, but now is always on.
104 mpowerpc
105 Target RejectNegative Undocumented Ignore
107 mpowerpc64
108 Target Report Mask(POWERPC64) Var(rs6000_isa_flags)
109 Use PowerPC-64 instruction set
111 mpowerpc-gpopt
112 Target Report Mask(PPC_GPOPT) Var(rs6000_isa_flags)
113 Use PowerPC General Purpose group optional instructions
115 mpowerpc-gfxopt
116 Target Report Mask(PPC_GFXOPT) Var(rs6000_isa_flags)
117 Use PowerPC Graphics group optional instructions
119 mmfcrf
120 Target Report Mask(MFCRF) Var(rs6000_isa_flags)
121 Use PowerPC V2.01 single field mfcr instruction
123 mpopcntb
124 Target Report Mask(POPCNTB) Var(rs6000_isa_flags)
125 Use PowerPC V2.02 popcntb instruction
127 mfprnd
128 Target Report Mask(FPRND) Var(rs6000_isa_flags)
129 Use PowerPC V2.02 floating point rounding instructions
131 mcmpb
132 Target Report Mask(CMPB) Var(rs6000_isa_flags)
133 Use PowerPC V2.05 compare bytes instruction
135 mmfpgpr
136 Target Report Mask(MFPGPR) Var(rs6000_isa_flags)
137 Use extended PowerPC V2.05 move floating point to/from GPR instructions
139 maltivec
140 Target Report Mask(ALTIVEC) Var(rs6000_isa_flags)
141 Use AltiVec instructions
143 maltivec=le
144 Target Report RejectNegative Var(rs6000_altivec_element_order, 1) Save
145 Generate Altivec instructions using little-endian element order
147 maltivec=be
148 Target Report RejectNegative Var(rs6000_altivec_element_order, 2)
149 Generate Altivec instructions using big-endian element order
151 mhard-dfp
152 Target Report Mask(DFP) Var(rs6000_isa_flags)
153 Use decimal floating point instructions
155 mmulhw
156 Target Report Mask(MULHW) Var(rs6000_isa_flags)
157 Use 4xx half-word multiply instructions
159 mdlmzb
160 Target Report Mask(DLMZB) Var(rs6000_isa_flags)
161 Use 4xx string-search dlmzb instruction
163 mmultiple
164 Target Report Mask(MULTIPLE) Var(rs6000_isa_flags)
165 Generate load/store multiple instructions
167 mstring
168 Target Report Mask(STRING) Var(rs6000_isa_flags)
169 Generate string instructions for block moves
171 msoft-float
172 Target Report RejectNegative Mask(SOFT_FLOAT) Var(rs6000_isa_flags)
173 Do not use hardware floating point
175 mhard-float
176 Target Report RejectNegative InverseMask(SOFT_FLOAT, HARD_FLOAT) Var(rs6000_isa_flags)
177 Use hardware floating point
179 mpopcntd
180 Target Report Mask(POPCNTD) Var(rs6000_isa_flags)
181 Use PowerPC V2.06 popcntd instruction
183 mfriz
184 Target Report Var(TARGET_FRIZ) Init(-1) Save
185 Under -ffast-math, generate a FRIZ instruction for (double)(long long) conversions
187 mveclibabi=
188 Target RejectNegative Joined Var(rs6000_veclibabi_name)
189 Vector library ABI to use
191 mvsx
192 Target Report Mask(VSX) Var(rs6000_isa_flags)
193 Use vector/scalar (VSX) instructions
195 mvsx-scalar-float
196 Target Undocumented Report Var(TARGET_VSX_SCALAR_FLOAT) Init(1)
197 ; If -mpower8-vector, use VSX arithmetic instructions for SFmode (on by default)
199 mvsx-scalar-double
200 Target Undocumented Report Var(TARGET_VSX_SCALAR_DOUBLE) Init(1)
201 ; If -mvsx, use VSX arithmetic instructions for DFmode (on by default)
203 mvsx-scalar-memory
204 Target Undocumented Report Alias(mupper-regs-df)
206 mvsx-align-128
207 Target Undocumented Report Var(TARGET_VSX_ALIGN_128)
208 ; If -mvsx, set alignment to 128 bits instead of 32/64
210 mallow-movmisalign
211 Target Undocumented Var(TARGET_ALLOW_MOVMISALIGN) Init(-1)
212 ; Allow/disallow the movmisalign in DF/DI vectors
214 mallow-df-permute
215 Target Undocumented Var(TARGET_ALLOW_DF_PERMUTE)
216 ; Allow/disallow permutation of DF/DI vectors
218 msched-groups
219 Target Undocumented Report Var(TARGET_SCHED_GROUPS) Init(-1)
220 ; Explicitly set/unset whether rs6000_sched_groups is set
222 malways-hint
223 Target Undocumented Report Var(TARGET_ALWAYS_HINT) Init(-1)
224 ; Explicitly set/unset whether rs6000_always_hint is set
226 malign-branch-targets
227 Target Undocumented Report Var(TARGET_ALIGN_BRANCH_TARGETS) Init(-1)
228 ; Explicitly set/unset whether rs6000_align_branch_targets is set
230 mvectorize-builtins
231 Target Undocumented Report Var(TARGET_VECTORIZE_BUILTINS) Init(-1)
232 ; Explicitly control whether we vectorize the builtins or not.
234 mno-update
235 Target Report RejectNegative Mask(NO_UPDATE) Var(rs6000_isa_flags)
236 Do not generate load/store with update instructions
238 mupdate
239 Target Report RejectNegative InverseMask(NO_UPDATE, UPDATE) Var(rs6000_isa_flags)
240 Generate load/store with update instructions
242 msingle-pic-base
243 Target Report Var(TARGET_SINGLE_PIC_BASE) Init(0)
244 Do not load the PIC register in function prologues
246 mavoid-indexed-addresses
247 Target Report Var(TARGET_AVOID_XFORM) Init(-1) Save
248 Avoid generation of indexed load/store instructions when possible
250 mtls-markers
251 Target Report Var(tls_markers) Init(1) Save
252 Mark __tls_get_addr calls with argument info
254 msched-epilog
255 Target Undocumented Var(TARGET_SCHED_PROLOG) Init(1) Save
257 msched-prolog
258 Target Report Var(TARGET_SCHED_PROLOG) Save
259 Schedule the start and end of the procedure
261 maix-struct-return
262 Target Report RejectNegative Var(aix_struct_return) Save
263 Return all structures in memory (AIX default)
265 msvr4-struct-return
266 Target Report RejectNegative Var(aix_struct_return,0) Save
267 Return small structures in registers (SVR4 default)
269 mxl-compat
270 Target Report Var(TARGET_XL_COMPAT) Save
271 Conform more closely to IBM XLC semantics
273 mrecip
274 Target Report
275 Generate software reciprocal divide and square root for better throughput.
277 mrecip=
278 Target Report RejectNegative Joined Var(rs6000_recip_name)
279 Generate software reciprocal divide and square root for better throughput.
281 mrecip-precision
282 Target Report Mask(RECIP_PRECISION) Var(rs6000_isa_flags)
283 Assume that the reciprocal estimate instructions provide more accuracy.
285 mno-fp-in-toc
286 Target Report RejectNegative Var(TARGET_NO_FP_IN_TOC) Save
287 Do not place floating point constants in TOC
289 mfp-in-toc
290 Target Report RejectNegative Var(TARGET_NO_FP_IN_TOC,0) Save
291 Place floating point constants in TOC
293 mno-sum-in-toc
294 Target RejectNegative Var(TARGET_NO_SUM_IN_TOC) Save
295 Do not place symbol+offset constants in TOC
297 msum-in-toc
298 Target RejectNegative Var(TARGET_NO_SUM_IN_TOC,0) Save
299 Place symbol+offset constants in TOC
301 ;  Output only one TOC entry per module.  Normally linking fails if
302 ;   there are more than 16K unique variables/constants in an executable.  With
303 ;   this option, linking fails only if there are more than 16K modules, or
304 ;   if there are more than 16K unique variables/constant in a single module.
306 ;   This is at the cost of having 2 extra loads and one extra store per
307 ;   function, and one less allocable register.
308 mminimal-toc
309 Target Report Mask(MINIMAL_TOC) Var(rs6000_isa_flags)
310 Use only one TOC entry per procedure
312 mfull-toc
313 Target Report
314 Put everything in the regular TOC
316 mvrsave
317 Target Report Var(TARGET_ALTIVEC_VRSAVE) Save
318 Generate VRSAVE instructions when generating AltiVec code
320 mvrsave=no
321 Target RejectNegative Alias(mvrsave) NegativeAlias
322 Deprecated option.  Use -mno-vrsave instead
324 mvrsave=yes
325 Target RejectNegative Alias(mvrsave)
326 Deprecated option.  Use -mvrsave instead
328 mblock-move-inline-limit=
329 Target Report Var(rs6000_block_move_inline_limit) Init(0) RejectNegative Joined UInteger Save
330 Specify how many bytes should be moved inline before calling out to memcpy/memmove
332 misel
333 Target Report Mask(ISEL) Var(rs6000_isa_flags)
334 Generate isel instructions
336 misel=no
337 Target RejectNegative Alias(misel) NegativeAlias
338 Deprecated option.  Use -mno-isel instead
340 misel=yes
341 Target RejectNegative Alias(misel)
342 Deprecated option.  Use -misel instead
344 mspe
345 Target Var(rs6000_spe) Save
346 Generate SPE SIMD instructions on E500
348 mpaired
349 Target Var(rs6000_paired_float) Save
350 Generate PPC750CL paired-single instructions
352 mspe=no
353 Target RejectNegative Alias(mspe) NegativeAlias
354 Deprecated option.  Use -mno-spe instead
356 mspe=yes
357 Target RejectNegative Alias(mspe)
358 Deprecated option.  Use -mspe instead
360 mdebug=
361 Target RejectNegative Joined
362 -mdebug=        Enable debug output
364 mabi=altivec
365 Target RejectNegative Var(rs6000_altivec_abi) Save
366 Use the AltiVec ABI extensions
368 mabi=no-altivec
369 Target RejectNegative Var(rs6000_altivec_abi, 0)
370 Do not use the AltiVec ABI extensions
372 mabi=spe
373 Target RejectNegative Var(rs6000_spe_abi) Save
374 Use the SPE ABI extensions
376 mabi=no-spe
377 Target RejectNegative Var(rs6000_spe_abi, 0)
378 Do not use the SPE ABI extensions
380 mabi=elfv1
381 Target RejectNegative Var(rs6000_elf_abi, 1) Save
382 Use the ELFv1 ABI
384 mabi=elfv2
385 Target RejectNegative Var(rs6000_elf_abi, 2)
386 Use the ELFv2 ABI
388 ; These are here for testing during development only, do not document
389 ; in the manual please.
391 ; If we want Darwin's struct-by-value-in-regs ABI.
392 mabi=d64
393 Target RejectNegative Undocumented Warn(using darwin64 ABI) Var(rs6000_darwin64_abi) Save
395 mabi=d32
396 Target RejectNegative Undocumented Warn(using old darwin ABI) Var(rs6000_darwin64_abi, 0)
398 mabi=ieeelongdouble
399 Target RejectNegative Undocumented Warn(using IEEE extended precision long double) Var(rs6000_ieeequad) Save
401 mabi=ibmlongdouble
402 Target RejectNegative Undocumented Warn(using IBM extended precision long double) Var(rs6000_ieeequad, 0)
404 mcpu=
405 Target RejectNegative Joined Var(rs6000_cpu_index) Init(-1) Enum(rs6000_cpu_opt_value) Save
406 -mcpu=  Use features of and schedule code for given CPU
408 mtune=
409 Target RejectNegative Joined Var(rs6000_tune_index) Init(-1) Enum(rs6000_cpu_opt_value) Save
410 -mtune= Schedule code for given CPU
412 mtraceback=
413 Target RejectNegative Joined Enum(rs6000_traceback_type) Var(rs6000_traceback)
414 -mtraceback=    Select full, part, or no traceback table
416 Enum
417 Name(rs6000_traceback_type) Type(enum rs6000_traceback_type)
419 EnumValue
420 Enum(rs6000_traceback_type) String(full) Value(traceback_full)
422 EnumValue
423 Enum(rs6000_traceback_type) String(part) Value(traceback_part)
425 EnumValue
426 Enum(rs6000_traceback_type) String(no) Value(traceback_none)
428 mlongcall
429 Target Report Var(rs6000_default_long_calls) Save
430 Avoid all range limits on call instructions
432 mgen-cell-microcode
433 Target Report Var(rs6000_gen_cell_microcode) Init(-1) Save
434 Generate Cell microcode
436 mwarn-cell-microcode
437 Target Var(rs6000_warn_cell_microcode) Init(0) Warning Save
438 Warn when a Cell microcoded instruction is emitted
440 mwarn-altivec-long
441 Target Var(rs6000_warn_altivec_long) Init(1) Save
442 Warn about deprecated 'vector long ...' AltiVec type usage
444 mfloat-gprs=
445 Target RejectNegative Joined Enum(rs6000_float_gprs) Var(rs6000_float_gprs) Save
446 -mfloat-gprs=   Select GPR floating point method
448 Enum
449 Name(rs6000_float_gprs) Type(unsigned char)
450 Valid arguments to -mfloat-gprs=:
452 EnumValue
453 Enum(rs6000_float_gprs) String(yes) Value(1)
455 EnumValue
456 Enum(rs6000_float_gprs) String(single) Value(1)
458 EnumValue
459 Enum(rs6000_float_gprs) String(double) Value(2)
461 EnumValue
462 Enum(rs6000_float_gprs) String(no) Value(0)
464 mlong-double-
465 Target RejectNegative Joined UInteger Var(rs6000_long_double_type_size) Save
466 -mlong-double-<n>       Specify size of long double (64 or 128 bits)
468 mlra
469 Target Report Var(rs6000_lra_flag) Init(0) Save
470 Use LRA instead of reload
472 msched-costly-dep=
473 Target RejectNegative Joined Var(rs6000_sched_costly_dep_str)
474 Determine which dependences between insns are considered costly
476 minsert-sched-nops=
477 Target RejectNegative Joined Var(rs6000_sched_insert_nops_str)
478 Specify which post scheduling nop insertion scheme to apply
480 malign-
481 Target RejectNegative Joined Enum(rs6000_alignment_flags) Var(rs6000_alignment_flags)
482 Specify alignment of structure fields default/natural
484 Enum
485 Name(rs6000_alignment_flags) Type(unsigned char)
486 Valid arguments to -malign-:
488 EnumValue
489 Enum(rs6000_alignment_flags) String(power) Value(MASK_ALIGN_POWER)
491 EnumValue
492 Enum(rs6000_alignment_flags) String(natural) Value(MASK_ALIGN_NATURAL)
494 mprioritize-restricted-insns=
495 Target RejectNegative Joined UInteger Var(rs6000_sched_restricted_insns_priority) Save
496 Specify scheduling priority for dispatch slot restricted insns
498 msingle-float
499 Target RejectNegative Var(rs6000_single_float) Save
500 Single-precision floating point unit
502 mdouble-float
503 Target RejectNegative Var(rs6000_double_float) Save
504 Double-precision floating point unit
506 msimple-fpu
507 Target RejectNegative Var(rs6000_simple_fpu) Save
508 Floating point unit does not support divide & sqrt
510 mfpu=
511 Target RejectNegative Joined Enum(fpu_type_t) Var(rs6000_fpu_type) Init(FPU_NONE)
512 -mfpu=  Specify FP (sp, dp, sp-lite, dp-lite) (implies -mxilinx-fpu)
514 Enum
515 Name(fpu_type_t) Type(enum fpu_type_t)
517 EnumValue
518 Enum(fpu_type_t) String(none) Value(FPU_NONE)
520 EnumValue
521 Enum(fpu_type_t) String(sp_lite) Value(FPU_SF_LITE)
523 EnumValue
524 Enum(fpu_type_t) String(dp_lite) Value(FPU_DF_LITE)
526 EnumValue
527 Enum(fpu_type_t) String(sp_full) Value(FPU_SF_FULL)
529 EnumValue
530 Enum(fpu_type_t) String(dp_full) Value(FPU_DF_FULL)
532 mxilinx-fpu
533 Target Var(rs6000_xilinx_fpu) Save
534 Specify Xilinx FPU.
536 mpointers-to-nested-functions
537 Target Report Var(TARGET_POINTERS_TO_NESTED_FUNCTIONS) Init(1) Save
538 Use/do not use r11 to hold the static link in calls to functions via pointers.
540 msave-toc-indirect
541 Target Report Var(TARGET_SAVE_TOC_INDIRECT) Save
542 Control whether we save the TOC in the prologue for indirect calls or generate the save inline
544 mvsx-timode
545 Target Undocumented Mask(VSX_TIMODE) Var(rs6000_isa_flags)
546 Allow 128-bit integers in VSX registers
548 mpower8-fusion
549 Target Report Mask(P8_FUSION) Var(rs6000_isa_flags)
550 Fuse certain integer operations together for better performance on power8
552 mpower8-fusion-sign
553 Target Undocumented Mask(P8_FUSION_SIGN) Var(rs6000_isa_flags)
554 Allow sign extension in fusion operations
556 mpower8-vector
557 Target Report Mask(P8_VECTOR) Var(rs6000_isa_flags)
558 Use/do not use vector and scalar instructions added in ISA 2.07.
560 mcrypto
561 Target Report Mask(CRYPTO) Var(rs6000_isa_flags)
562 Use ISA 2.07 crypto instructions
564 mdirect-move
565 Target Report Mask(DIRECT_MOVE) Var(rs6000_isa_flags)
566 Use ISA 2.07 direct move between GPR & VSX register instructions
568 mhtm
569 Target Report Mask(HTM) Var(rs6000_isa_flags)
570 Use ISA 2.07 transactional memory (HTM) instructions
572 mquad-memory
573 Target Report Mask(QUAD_MEMORY) Var(rs6000_isa_flags)
574 Generate the quad word memory instructions (lq/stq).
576 mquad-memory-atomic
577 Target Report Mask(QUAD_MEMORY_ATOMIC) Var(rs6000_isa_flags)
578 Generate the quad word memory atomic instructions (lqarx/stqcx).
580 mcompat-align-parm
581 Target Report Var(rs6000_compat_align_parm) Init(0) Save
582 Generate aggregate parameter passing code with at most 64-bit alignment.
584 mupper-regs-df
585 Target Undocumented Mask(UPPER_REGS_DF) Var(rs6000_isa_flags)
586 Allow double variables in upper registers with -mcpu=power7 or -mvsx
588 mupper-regs-sf
589 Target Undocumented Mask(UPPER_REGS_SF) Var(rs6000_isa_flags)
590 Allow float variables in upper registers with -mcpu=power8 or -mp8-vector