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
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/>.
23 config/rs6000/rs6000-opts.h
27 enum processor_type rs6000_cpu = PROCESSOR_PPC603
29 ;; Always emit branch hint bits.
31 unsigned char rs6000_always_hint
33 ;; Schedule instructions for group formation.
35 unsigned char rs6000_sched_groups
37 ;; Align branch targets.
39 unsigned char rs6000_align_branch_targets
41 ;; Support for -msched-costly-dep option.
43 enum rs6000_dependence_cost rs6000_sched_costly_dep = no_dep_costly
45 ;; Support for -minsert-sched-nops option.
47 enum rs6000_nop_insertion rs6000_sched_insert_nops = sched_finish_none
49 ;; Non-zero to allow overriding loop alignment.
51 unsigned char can_override_loop_align
53 ;; Which small data model to use (for System V targets only)
55 enum rs6000_sdata_type rs6000_sdata = SDATA_DATA
57 ;; Bit size of immediate TLS offsets and string from which it is decoded.
59 int rs6000_tls_size = 32
61 ;; ABI enumeration available for subtarget to use.
63 enum rs6000_abi rs6000_current_abi = ABI_NONE
65 ;; Type of traceback to use.
67 enum rs6000_traceback_type rs6000_traceback = traceback_default
69 ;; Control alignment for fields within structures.
71 unsigned char rs6000_alignment_flags
73 ;; Code model for 64-bit linux.
75 enum rs6000_cmodel rs6000_current_cmodel = CMODEL_SMALL
77 ;; What type of reciprocal estimation instructions to generate
79 unsigned int rs6000_recip_control
81 ;; Mask of what builtin functions are allowed
83 unsigned int rs6000_builtin_mask
87 unsigned int rs6000_debug
89 ;; Save for target_flags_explicit
91 int rs6000_target_flags_explicit
94 Target Report RejectNegative Mask(POWER)
95 Use POWER instruction set
98 Target Report RejectNegative
99 Do not use POWER instruction set
102 Target Report Mask(POWER2)
103 Use POWER2 instruction set
106 Target Report RejectNegative Mask(POWERPC)
107 Use PowerPC instruction set
110 Target Report RejectNegative
111 Do not use PowerPC instruction set
114 Target Report Mask(POWERPC64)
115 Use PowerPC-64 instruction set
118 Target Report Mask(PPC_GPOPT) Save
119 Use PowerPC General Purpose group optional instructions
122 Target Report Mask(PPC_GFXOPT) Save
123 Use PowerPC Graphics group optional instructions
126 Target Report Mask(MFCRF) Save
127 Use PowerPC V2.01 single field mfcr instruction
130 Target Report Mask(POPCNTB) Save
131 Use PowerPC V2.02 popcntb instruction
134 Target Report Mask(FPRND) Save
135 Use PowerPC V2.02 floating point rounding instructions
138 Target Report Mask(CMPB) Save
139 Use PowerPC V2.05 compare bytes instruction
142 Target Report Mask(MFPGPR) Save
143 Use extended PowerPC V2.05 move floating point to/from GPR instructions
146 Target Report Mask(ALTIVEC) Save
147 Use AltiVec instructions
150 Target Report Mask(DFP) Save
151 Use decimal floating point instructions
154 Target Report Mask(MULHW) Save
155 Use 4xx half-word multiply instructions
158 Target Report Mask(DLMZB) Save
159 Use 4xx string-search dlmzb instruction
162 Target Report Mask(MULTIPLE) Save
163 Generate load/store multiple instructions
166 Target Report Mask(STRING) Save
167 Generate string instructions for block moves
170 Target Report RejectNegative Mask(NEW_MNEMONICS)
171 Use new mnemonics for PowerPC architecture
174 Target Report RejectNegative InverseMask(NEW_MNEMONICS)
175 Use old mnemonics for PowerPC architecture
178 Target Report RejectNegative Mask(SOFT_FLOAT)
179 Do not use hardware floating point
182 Target Report RejectNegative InverseMask(SOFT_FLOAT, HARD_FLOAT)
183 Use hardware floating point
186 Target Report Mask(POPCNTD) Save
187 Use PowerPC V2.06 popcntd instruction
190 Target Report Var(TARGET_FRIZ) Init(-1) Save
191 Under -ffast-math, generate a FRIZ instruction for (double)(long long) conversions
194 Target RejectNegative Joined Var(rs6000_veclibabi_name)
195 Vector library ABI to use
198 Target Report Mask(VSX) Save
199 Use vector/scalar (VSX) instructions
202 Target Undocumented Report Var(TARGET_VSX_SCALAR_DOUBLE) Init(-1)
203 ; If -mvsx, use VSX arithmetic instructions for scalar double (on by default)
206 Target Undocumented Report Var(TARGET_VSX_SCALAR_MEMORY)
207 ; If -mvsx, use VSX scalar memory reference instructions for scalar double (off by default)
210 Target Undocumented Report Var(TARGET_VSX_ALIGN_128)
211 ; If -mvsx, set alignment to 128 bits instead of 32/64
214 Target Undocumented Var(TARGET_ALLOW_MOVMISALIGN) Init(-1)
215 ; Allow/disallow the movmisalign in DF/DI vectors
218 Target Undocumented Var(TARGET_ALLOW_DF_PERMUTE)
219 ; Allow/disallow permutation of DF/DI vectors
222 Target Undocumented Report Var(TARGET_SCHED_GROUPS) Init(-1)
223 ; Explicitly set/unset whether rs6000_sched_groups is set
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
234 Target Undocumented Report Var(TARGET_VECTORIZE_BUILTINS) Init(-1)
235 ; Explicitly control whether we vectorize the builtins or not.
238 Target Report RejectNegative Mask(NO_UPDATE) Save
239 Do not generate load/store with update instructions
242 Target Report RejectNegative InverseMask(NO_UPDATE, UPDATE)
243 Generate load/store with update instructions
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
254 Target Report Var(tls_markers) Init(1) Save
255 Mark __tls_get_addr calls with argument info
258 Target Undocumented Var(TARGET_SCHED_PROLOG) Init(1) Save
261 Target Report Var(TARGET_SCHED_PROLOG) Save
262 Schedule the start and end of the procedure
265 Target Report RejectNegative Var(aix_struct_return) Save
266 Return all structures in memory (AIX default)
269 Target Report RejectNegative Var(aix_struct_return,0) Save
270 Return small structures in registers (SVR4 default)
273 Target Report Var(TARGET_XL_COMPAT) Save
274 Conform more closely to IBM XLC semantics
278 Generate software reciprocal divide and square root for better throughput.
281 Target Report RejectNegative Joined Var(rs6000_recip_name)
282 Generate software reciprocal divide and square root for better throughput.
285 Target Report Mask(RECIP_PRECISION) Save
286 Assume that the reciprocal estimate instructions provide more accuracy.
289 Target Report RejectNegative Var(TARGET_NO_FP_IN_TOC) Save
290 Do not place floating point constants in TOC
293 Target Report RejectNegative Var(TARGET_NO_FP_IN_TOC,0) Save
294 Place floating point constants in TOC
297 Target RejectNegative Var(TARGET_NO_SUM_IN_TOC) Save
298 Do not place symbol+offset constants 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.
312 Target Report Mask(MINIMAL_TOC)
313 Use only one TOC entry per procedure
317 Put everything in the regular TOC
320 Target Report Var(TARGET_ALTIVEC_VRSAVE) Save
321 Generate VRSAVE instructions when generating AltiVec code
324 Target RejectNegative Alias(mvrsave) NegativeAlias
325 Deprecated option. Use -mno-vrsave instead
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
336 Target Report Mask(ISEL) Save
337 Generate isel instructions
340 Target RejectNegative Alias(misel) NegativeAlias
341 Deprecated option. Use -mno-isel instead
344 Target RejectNegative Alias(misel)
345 Deprecated option. Use -misel instead
348 Target Var(rs6000_spe) Save
349 Generate SPE SIMD instructions on E500
352 Target Var(rs6000_paired_float) Save
353 Generate PPC750CL paired-single instructions
356 Target RejectNegative Alias(mspe) NegativeAlias
357 Deprecated option. Use -mno-spe instead
360 Target RejectNegative Alias(mspe)
361 Deprecated option. Use -mspe instead
364 Target RejectNegative Joined
365 -mdebug= Enable debug output
368 Target RejectNegative Var(rs6000_altivec_abi) Save
369 Use the AltiVec ABI extensions
372 Target RejectNegative Var(rs6000_altivec_abi, 0)
373 Do not use the AltiVec ABI extensions
376 Target RejectNegative Var(rs6000_spe_abi) Save
377 Use the SPE ABI extensions
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.
388 Target RejectNegative Undocumented Warn(using darwin64 ABI) Var(rs6000_darwin64_abi) Save
391 Target RejectNegative Undocumented Warn(using old darwin ABI) Var(rs6000_darwin64_abi, 0)
394 Target RejectNegative Undocumented Warn(using IEEE extended precision long double) Var(rs6000_ieeequad) Save
397 Target RejectNegative Undocumented Warn(using IBM extended precision long double) Var(rs6000_ieeequad, 0)
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
404 Target RejectNegative Joined Var(rs6000_tune_index) Init(-1) Enum(rs6000_cpu_opt_value) Save
405 -mtune= Schedule code for given CPU
408 Target RejectNegative Joined Enum(rs6000_traceback_type) Var(rs6000_traceback)
409 -mtraceback= Select full, part, or no traceback table
412 Name(rs6000_traceback_type) Type(enum rs6000_traceback_type)
415 Enum(rs6000_traceback_type) String(full) Value(traceback_full)
418 Enum(rs6000_traceback_type) String(part) Value(traceback_part)
421 Enum(rs6000_traceback_type) String(no) Value(traceback_none)
424 Target Report Var(rs6000_default_long_calls) Save
425 Avoid all range limits on call instructions
428 Target Report Var(rs6000_gen_cell_microcode) Init(-1) Save
429 Generate Cell microcode
432 Target Var(rs6000_warn_cell_microcode) Init(0) Warning Save
433 Warn when a Cell microcoded instruction is emitted
436 Target Var(rs6000_warn_altivec_long) Init(1) Save
437 Warn about deprecated 'vector long ...' AltiVec type usage
440 Target RejectNegative Joined Enum(rs6000_float_gprs) Var(rs6000_float_gprs) Save
441 -mfloat-gprs= Select GPR floating point method
444 Name(rs6000_float_gprs) Type(unsigned char)
445 Valid arguments to -mfloat-gprs=:
448 Enum(rs6000_float_gprs) String(yes) Value(1)
451 Enum(rs6000_float_gprs) String(single) Value(1)
454 Enum(rs6000_float_gprs) String(double) Value(2)
457 Enum(rs6000_float_gprs) String(no) Value(0)
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)
464 Target RejectNegative Joined Var(rs6000_sched_costly_dep_str)
465 Determine which dependences between insns are considered costly
468 Target RejectNegative Joined Var(rs6000_sched_insert_nops_str)
469 Specify which post scheduling nop insertion scheme to apply
472 Target RejectNegative Joined Enum(rs6000_alignment_flags) Var(rs6000_alignment_flags)
473 Specify alignment of structure fields default/natural
476 Name(rs6000_alignment_flags) Type(unsigned char)
477 Valid arguments to -malign-:
480 Enum(rs6000_alignment_flags) String(power) Value(MASK_ALIGN_POWER)
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
490 Target RejectNegative Var(rs6000_single_float) Save
491 Single-precision floating point unit
494 Target RejectNegative Var(rs6000_double_float) Save
495 Double-precision floating point unit
498 Target RejectNegative Var(rs6000_simple_fpu) Save
499 Floating point unit does not support divide & sqrt
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)
506 Name(fpu_type_t) Type(enum fpu_type_t)
509 Enum(fpu_type_t) String(none) Value(FPU_NONE)
512 Enum(fpu_type_t) String(sp_lite) Value(FPU_SF_LITE)
515 Enum(fpu_type_t) String(dp_lite) Value(FPU_DF_LITE)
518 Enum(fpu_type_t) String(sp_full) Value(FPU_SF_FULL)
521 Enum(fpu_type_t) String(dp_full) Value(FPU_DF_FULL)
524 Target Var(rs6000_xilinx_fpu) Save
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.
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