2012-07-27 Segher Boessenkool <segher@kernel.crashing.org>
[official-gcc.git] / gcc / config / rs6000 / rs6000.opt
blobfd3a27237f07fcb282d2f6f7606dac2d7b7684ce
1 ; Options for the rs6000 port of the compiler
3 ; Copyright (C) 2005-2012 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 ;; Current processor
26 TargetVariable
27 enum processor_type rs6000_cpu = PROCESSOR_PPC603
29 ;; Always emit branch hint bits.
30 TargetVariable
31 unsigned char rs6000_always_hint
33 ;; Schedule instructions for group formation.
34 TargetVariable
35 unsigned char rs6000_sched_groups
37 ;; Align branch targets.
38 TargetVariable
39 unsigned char rs6000_align_branch_targets
41 ;; Support for -msched-costly-dep option.
42 TargetVariable
43 enum rs6000_dependence_cost rs6000_sched_costly_dep = no_dep_costly
45 ;; Support for -minsert-sched-nops option.
46 TargetVariable
47 enum rs6000_nop_insertion rs6000_sched_insert_nops = sched_finish_none
49 ;; Non-zero to allow overriding loop alignment.
50 TargetVariable
51 unsigned char can_override_loop_align
53 ;; Which small data model to use (for System V targets only)
54 TargetVariable
55 enum rs6000_sdata_type rs6000_sdata = SDATA_DATA
57 ;; Bit size of immediate TLS offsets and string from which it is decoded.
58 TargetVariable
59 int rs6000_tls_size = 32
61 ;; ABI enumeration available for subtarget to use.
62 TargetVariable
63 enum rs6000_abi rs6000_current_abi = ABI_NONE
65 ;; Type of traceback to use.
66 TargetVariable
67 enum rs6000_traceback_type rs6000_traceback = traceback_default
69 ;; Control alignment for fields within structures.
70 TargetVariable
71 unsigned char rs6000_alignment_flags
73 ;; Code model for 64-bit linux.
74 TargetVariable
75 enum rs6000_cmodel rs6000_current_cmodel = CMODEL_SMALL
77 ;; What type of reciprocal estimation instructions to generate
78 TargetVariable
79 unsigned int rs6000_recip_control
81 ;; Mask of what builtin functions are allowed
82 TargetVariable
83 unsigned int rs6000_builtin_mask
85 ;; Debug flags
86 TargetVariable
87 unsigned int rs6000_debug
89 ;; Save for target_flags_explicit
90 TargetSave
91 int rs6000_target_flags_explicit
93 mpower
94 Target Report RejectNegative Mask(POWER)
95 Use POWER instruction set
97 mno-power
98 Target Report RejectNegative
99 Do not use POWER instruction set
101 mpower2
102 Target Report Mask(POWER2)
103 Use POWER2 instruction set
105 mpowerpc
106 Target Report RejectNegative Mask(POWERPC)
107 Use PowerPC instruction set
109 mno-powerpc
110 Target Report RejectNegative
111 Do not use PowerPC instruction set
113 mpowerpc64
114 Target Report Mask(POWERPC64)
115 Use PowerPC-64 instruction set
117 mpowerpc-gpopt
118 Target Report Mask(PPC_GPOPT) Save
119 Use PowerPC General Purpose group optional instructions
121 mpowerpc-gfxopt
122 Target Report Mask(PPC_GFXOPT) Save
123 Use PowerPC Graphics group optional instructions
125 mmfcrf
126 Target Report Mask(MFCRF) Save
127 Use PowerPC V2.01 single field mfcr instruction
129 mpopcntb
130 Target Report Mask(POPCNTB) Save
131 Use PowerPC V2.02 popcntb instruction
133 mfprnd
134 Target Report Mask(FPRND) Save
135 Use PowerPC V2.02 floating point rounding instructions
137 mcmpb
138 Target Report Mask(CMPB) Save
139 Use PowerPC V2.05 compare bytes instruction
141 mmfpgpr
142 Target Report Mask(MFPGPR) Save
143 Use extended PowerPC V2.05 move floating point to/from GPR instructions
145 maltivec
146 Target Report Mask(ALTIVEC) Save
147 Use AltiVec instructions
149 mhard-dfp
150 Target Report Mask(DFP) Save
151 Use decimal floating point instructions
153 mmulhw
154 Target Report Mask(MULHW) Save
155 Use 4xx half-word multiply instructions
157 mdlmzb
158 Target Report Mask(DLMZB) Save
159 Use 4xx string-search dlmzb instruction
161 mmultiple
162 Target Report Mask(MULTIPLE) Save
163 Generate load/store multiple instructions
165 mstring
166 Target Report Mask(STRING) Save
167 Generate string instructions for block moves
169 mnew-mnemonics
170 Target Report RejectNegative Mask(NEW_MNEMONICS)
171 Use new mnemonics for PowerPC architecture
173 mold-mnemonics
174 Target Report RejectNegative InverseMask(NEW_MNEMONICS)
175 Use old mnemonics for PowerPC architecture
177 msoft-float
178 Target Report RejectNegative Mask(SOFT_FLOAT)
179 Do not use hardware floating point
181 mhard-float
182 Target Report RejectNegative InverseMask(SOFT_FLOAT, HARD_FLOAT)
183 Use hardware floating point
185 mpopcntd
186 Target Report Mask(POPCNTD) Save
187 Use PowerPC V2.06 popcntd instruction
189 mfriz
190 Target Report Var(TARGET_FRIZ) Init(-1) Save
191 Under -ffast-math, generate a FRIZ instruction for (double)(long long) conversions
193 mveclibabi=
194 Target RejectNegative Joined Var(rs6000_veclibabi_name)
195 Vector library ABI to use
197 mvsx
198 Target Report Mask(VSX) Save
199 Use vector/scalar (VSX) instructions
201 mvsx-scalar-double
202 Target Undocumented Report Var(TARGET_VSX_SCALAR_DOUBLE) Init(-1)
203 ; If -mvsx, use VSX arithmetic instructions for scalar double (on by default)
205 mvsx-scalar-memory
206 Target Undocumented Report Var(TARGET_VSX_SCALAR_MEMORY)
207 ; If -mvsx, use VSX scalar memory reference instructions for scalar double (off by default)
209 mvsx-align-128
210 Target Undocumented Report Var(TARGET_VSX_ALIGN_128)
211 ; If -mvsx, set alignment to 128 bits instead of 32/64
213 mallow-movmisalign
214 Target Undocumented Var(TARGET_ALLOW_MOVMISALIGN) Init(-1)
215 ; Allow/disallow the movmisalign in DF/DI vectors
217 mallow-df-permute
218 Target Undocumented Var(TARGET_ALLOW_DF_PERMUTE)
219 ; Allow/disallow permutation of DF/DI vectors
221 msched-groups
222 Target Undocumented Report Var(TARGET_SCHED_GROUPS) Init(-1)
223 ; Explicitly set/unset whether rs6000_sched_groups is set
225 malways-hint
226 Target Undocumented Report Var(TARGET_ALWAYS_HINT) Init(-1)
227 ; Explicitly set/unset whether rs6000_always_hint is set
229 malign-branch-targets
230 Target Undocumented Report Var(TARGET_ALIGN_BRANCH_TARGETS) Init(-1)
231 ; Explicitly set/unset whether rs6000_align_branch_targets is set
233 mvectorize-builtins
234 Target Undocumented Report Var(TARGET_VECTORIZE_BUILTINS) Init(-1)
235 ; Explicitly control whether we vectorize the builtins or not.
237 mno-update
238 Target Report RejectNegative Mask(NO_UPDATE) Save
239 Do not generate load/store with update instructions
241 mupdate
242 Target Report RejectNegative InverseMask(NO_UPDATE, UPDATE)
243 Generate load/store with update instructions
245 msingle-pic-base
246 Target Report Var(TARGET_SINGLE_PIC_BASE) Init(0)
247 Do not load the PIC register in function prologues
249 mavoid-indexed-addresses
250 Target Report Var(TARGET_AVOID_XFORM) Init(-1) Save
251 Avoid generation of indexed load/store instructions when possible
253 mtls-markers
254 Target Report Var(tls_markers) Init(1) Save
255 Mark __tls_get_addr calls with argument info
257 msched-epilog
258 Target Undocumented Var(TARGET_SCHED_PROLOG) Init(1) Save
260 msched-prolog
261 Target Report Var(TARGET_SCHED_PROLOG) Save
262 Schedule the start and end of the procedure
264 maix-struct-return
265 Target Report RejectNegative Var(aix_struct_return) Save
266 Return all structures in memory (AIX default)
268 msvr4-struct-return
269 Target Report RejectNegative Var(aix_struct_return,0) Save
270 Return small structures in registers (SVR4 default)
272 mxl-compat
273 Target Report Var(TARGET_XL_COMPAT) Save
274 Conform more closely to IBM XLC semantics
276 mrecip
277 Target Report
278 Generate software reciprocal divide and square root for better throughput.
280 mrecip=
281 Target Report RejectNegative Joined Var(rs6000_recip_name)
282 Generate software reciprocal divide and square root for better throughput.
284 mrecip-precision
285 Target Report Mask(RECIP_PRECISION) Save
286 Assume that the reciprocal estimate instructions provide more accuracy.
288 mno-fp-in-toc
289 Target Report RejectNegative Var(TARGET_NO_FP_IN_TOC) Save
290 Do not place floating point constants in TOC
292 mfp-in-toc
293 Target Report RejectNegative Var(TARGET_NO_FP_IN_TOC,0) Save
294 Place floating point constants in TOC
296 mno-sum-in-toc
297 Target RejectNegative Var(TARGET_NO_SUM_IN_TOC) Save
298 Do not place symbol+offset constants in TOC
300 msum-in-toc
301 Target RejectNegative Var(TARGET_NO_SUM_IN_TOC,0) Save
302 Place symbol+offset constants in TOC
304 ;  Output only one TOC entry per module.  Normally linking fails if
305 ;   there are more than 16K unique variables/constants in an executable.  With
306 ;   this option, linking fails only if there are more than 16K modules, or
307 ;   if there are more than 16K unique variables/constant in a single module.
309 ;   This is at the cost of having 2 extra loads and one extra store per
310 ;   function, and one less allocable register.
311 mminimal-toc
312 Target Report Mask(MINIMAL_TOC)
313 Use only one TOC entry per procedure
315 mfull-toc
316 Target Report
317 Put everything in the regular TOC
319 mvrsave
320 Target Report Var(TARGET_ALTIVEC_VRSAVE) Save
321 Generate VRSAVE instructions when generating AltiVec code
323 mvrsave=no
324 Target RejectNegative Alias(mvrsave) NegativeAlias
325 Deprecated option.  Use -mno-vrsave instead
327 mvrsave=yes
328 Target RejectNegative Alias(mvrsave)
329 Deprecated option.  Use -mvrsave instead
331 mblock-move-inline-limit=
332 Target Report Var(rs6000_block_move_inline_limit) Init(0) RejectNegative Joined UInteger Save
333 Specify how many bytes should be moved inline before calling out to memcpy/memmove
335 misel
336 Target Report Mask(ISEL) Save
337 Generate isel instructions
339 misel=no
340 Target RejectNegative Alias(misel) NegativeAlias
341 Deprecated option.  Use -mno-isel instead
343 misel=yes
344 Target RejectNegative Alias(misel)
345 Deprecated option.  Use -misel instead
347 mspe
348 Target Var(rs6000_spe) Save
349 Generate SPE SIMD instructions on E500
351 mpaired
352 Target Var(rs6000_paired_float) Save
353 Generate PPC750CL paired-single instructions
355 mspe=no
356 Target RejectNegative Alias(mspe) NegativeAlias
357 Deprecated option.  Use -mno-spe instead
359 mspe=yes
360 Target RejectNegative Alias(mspe)
361 Deprecated option.  Use -mspe instead
363 mdebug=
364 Target RejectNegative Joined
365 -mdebug=        Enable debug output
367 mabi=altivec
368 Target RejectNegative Var(rs6000_altivec_abi) Save
369 Use the AltiVec ABI extensions
371 mabi=no-altivec
372 Target RejectNegative Var(rs6000_altivec_abi, 0)
373 Do not use the AltiVec ABI extensions
375 mabi=spe
376 Target RejectNegative Var(rs6000_spe_abi) Save
377 Use the SPE ABI extensions
379 mabi=no-spe
380 Target RejectNegative Var(rs6000_spe_abi, 0)
381 Do not use the SPE ABI extensions
383 ; These are here for testing during development only, do not document
384 ; in the manual please.
386 ; If we want Darwin's struct-by-value-in-regs ABI.
387 mabi=d64
388 Target RejectNegative Undocumented Warn(using darwin64 ABI) Var(rs6000_darwin64_abi) Save
390 mabi=d32
391 Target RejectNegative Undocumented Warn(using old darwin ABI) Var(rs6000_darwin64_abi, 0)
393 mabi=ieeelongdouble
394 Target RejectNegative Undocumented Warn(using IEEE extended precision long double) Var(rs6000_ieeequad) Save
396 mabi=ibmlongdouble
397 Target RejectNegative Undocumented Warn(using IBM extended precision long double) Var(rs6000_ieeequad, 0)
399 mcpu=
400 Target RejectNegative Joined Var(rs6000_cpu_index) Init(-1) Enum(rs6000_cpu_opt_value) Save
401 -mcpu=  Use features of and schedule code for given CPU
403 mtune=
404 Target RejectNegative Joined Var(rs6000_tune_index) Init(-1) Enum(rs6000_cpu_opt_value) Save
405 -mtune= Schedule code for given CPU
407 mtraceback=
408 Target RejectNegative Joined Enum(rs6000_traceback_type) Var(rs6000_traceback)
409 -mtraceback=    Select full, part, or no traceback table
411 Enum
412 Name(rs6000_traceback_type) Type(enum rs6000_traceback_type)
414 EnumValue
415 Enum(rs6000_traceback_type) String(full) Value(traceback_full)
417 EnumValue
418 Enum(rs6000_traceback_type) String(part) Value(traceback_part)
420 EnumValue
421 Enum(rs6000_traceback_type) String(no) Value(traceback_none)
423 mlongcall
424 Target Report Var(rs6000_default_long_calls) Save
425 Avoid all range limits on call instructions
427 mgen-cell-microcode
428 Target Report Var(rs6000_gen_cell_microcode) Init(-1) Save
429 Generate Cell microcode
431 mwarn-cell-microcode
432 Target Var(rs6000_warn_cell_microcode) Init(0) Warning Save
433 Warn when a Cell microcoded instruction is emitted
435 mwarn-altivec-long
436 Target Var(rs6000_warn_altivec_long) Init(1) Save
437 Warn about deprecated 'vector long ...' AltiVec type usage
439 mfloat-gprs=
440 Target RejectNegative Joined Enum(rs6000_float_gprs) Var(rs6000_float_gprs) Save
441 -mfloat-gprs=   Select GPR floating point method
443 Enum
444 Name(rs6000_float_gprs) Type(unsigned char)
445 Valid arguments to -mfloat-gprs=:
447 EnumValue
448 Enum(rs6000_float_gprs) String(yes) Value(1)
450 EnumValue
451 Enum(rs6000_float_gprs) String(single) Value(1)
453 EnumValue
454 Enum(rs6000_float_gprs) String(double) Value(2)
456 EnumValue
457 Enum(rs6000_float_gprs) String(no) Value(0)
459 mlong-double-
460 Target RejectNegative Joined UInteger Var(rs6000_long_double_type_size) Save
461 -mlong-double-<n>       Specify size of long double (64 or 128 bits)
463 msched-costly-dep=
464 Target RejectNegative Joined Var(rs6000_sched_costly_dep_str)
465 Determine which dependences between insns are considered costly
467 minsert-sched-nops=
468 Target RejectNegative Joined Var(rs6000_sched_insert_nops_str)
469 Specify which post scheduling nop insertion scheme to apply
471 malign-
472 Target RejectNegative Joined Enum(rs6000_alignment_flags) Var(rs6000_alignment_flags)
473 Specify alignment of structure fields default/natural
475 Enum
476 Name(rs6000_alignment_flags) Type(unsigned char)
477 Valid arguments to -malign-:
479 EnumValue
480 Enum(rs6000_alignment_flags) String(power) Value(MASK_ALIGN_POWER)
482 EnumValue
483 Enum(rs6000_alignment_flags) String(natural) Value(MASK_ALIGN_NATURAL)
485 mprioritize-restricted-insns=
486 Target RejectNegative Joined UInteger Var(rs6000_sched_restricted_insns_priority) Save
487 Specify scheduling priority for dispatch slot restricted insns
489 msingle-float
490 Target RejectNegative Var(rs6000_single_float) Save
491 Single-precision floating point unit
493 mdouble-float
494 Target RejectNegative Var(rs6000_double_float) Save
495 Double-precision floating point unit
497 msimple-fpu
498 Target RejectNegative Var(rs6000_simple_fpu) Save
499 Floating point unit does not support divide & sqrt
501 mfpu=
502 Target RejectNegative Joined Enum(fpu_type_t) Var(rs6000_fpu_type) Init(FPU_NONE)
503 -mfpu=  Specify FP (sp, dp, sp-lite, dp-lite) (implies -mxilinx-fpu)
505 Enum
506 Name(fpu_type_t) Type(enum fpu_type_t)
508 EnumValue
509 Enum(fpu_type_t) String(none) Value(FPU_NONE)
511 EnumValue
512 Enum(fpu_type_t) String(sp_lite) Value(FPU_SF_LITE)
514 EnumValue
515 Enum(fpu_type_t) String(dp_lite) Value(FPU_DF_LITE)
517 EnumValue
518 Enum(fpu_type_t) String(sp_full) Value(FPU_SF_FULL)
520 EnumValue
521 Enum(fpu_type_t) String(dp_full) Value(FPU_DF_FULL)
523 mxilinx-fpu
524 Target Var(rs6000_xilinx_fpu) Save
525 Specify Xilinx FPU.
527 mpointers-to-nested-functions
528 Target Report Var(TARGET_POINTERS_TO_NESTED_FUNCTIONS) Init(1) Save
529 Use/do not use r11 to hold the static link in calls to functions via pointers.
531 msave-toc-indirect
532 Target Report Var(TARGET_SAVE_TOC_INDIRECT) Save
533 Control whether we save the TOC in the prologue for indirect calls or generate the save inline