1; Options for the rs6000 port of the compiler
2;
3; Copyright (C) 2005-2016 Free Software Foundation, Inc.
4; Contributed by Aldy Hernandez <aldy@quesejoda.com>.
5;
6; This file is part of GCC.
7;
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.
12;
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.
17;
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/>.
21
22HeaderInclude
23config/rs6000/rs6000-opts.h
24
25;; ISA flag bits (on/off)
26Variable
27HOST_WIDE_INT rs6000_isa_flags = TARGET_DEFAULT
28
29TargetSave
30HOST_WIDE_INT x_rs6000_isa_flags
31
32;; Miscellaneous flag bits that were set explicitly by the user
33Variable
34HOST_WIDE_INT rs6000_isa_flags_explicit
35
36TargetSave
37HOST_WIDE_INT x_rs6000_isa_flags_explicit
38
39;; Current processor
40TargetVariable
41enum processor_type rs6000_cpu = PROCESSOR_PPC603
42
43;; Always emit branch hint bits.
44TargetVariable
45unsigned char rs6000_always_hint
46
47;; Schedule instructions for group formation.
48TargetVariable
49unsigned char rs6000_sched_groups
50
51;; Align branch targets.
52TargetVariable
53unsigned char rs6000_align_branch_targets
54
55;; Support for -msched-costly-dep option.
56TargetVariable
57enum rs6000_dependence_cost rs6000_sched_costly_dep = no_dep_costly
58
59;; Support for -minsert-sched-nops option.
60TargetVariable
61enum rs6000_nop_insertion rs6000_sched_insert_nops = sched_finish_none
62
63;; Non-zero to allow overriding loop alignment.
64TargetVariable
65unsigned char can_override_loop_align
66
67;; Which small data model to use (for System V targets only)
68TargetVariable
69enum rs6000_sdata_type rs6000_sdata = SDATA_DATA
70
71;; Bit size of immediate TLS offsets and string from which it is decoded.
72TargetVariable
73int rs6000_tls_size = 32
74
75;; ABI enumeration available for subtarget to use.
76TargetVariable
77enum rs6000_abi rs6000_current_abi = ABI_NONE
78
79;; Type of traceback to use.
80TargetVariable
81enum rs6000_traceback_type rs6000_traceback = traceback_default
82
83;; Control alignment for fields within structures.
84TargetVariable
85unsigned char rs6000_alignment_flags
86
87;; Code model for 64-bit linux.
88TargetVariable
89enum rs6000_cmodel rs6000_current_cmodel = CMODEL_SMALL
90
91;; What type of reciprocal estimation instructions to generate
92TargetVariable
93unsigned int rs6000_recip_control
94
95;; Mask of what builtin functions are allowed
96TargetVariable
97HOST_WIDE_INT rs6000_builtin_mask
98
99;; Debug flags
100TargetVariable
101unsigned int rs6000_debug
102
103;; This option existed in the past, but now is always on.
104mpowerpc
105Target RejectNegative Undocumented Ignore
106
107mpowerpc64
108Target Report Mask(POWERPC64) Var(rs6000_isa_flags)
109Use PowerPC-64 instruction set.
110
111mpowerpc-gpopt
112Target Report Mask(PPC_GPOPT) Var(rs6000_isa_flags)
113Use PowerPC General Purpose group optional instructions.
114
115mpowerpc-gfxopt
116Target Report Mask(PPC_GFXOPT) Var(rs6000_isa_flags)
117Use PowerPC Graphics group optional instructions.
118
119mmfcrf
120Target Report Mask(MFCRF) Var(rs6000_isa_flags)
121Use PowerPC V2.01 single field mfcr instruction.
122
123mpopcntb
124Target Report Mask(POPCNTB) Var(rs6000_isa_flags)
125Use PowerPC V2.02 popcntb instruction.
126
127mfprnd
128Target Report Mask(FPRND) Var(rs6000_isa_flags)
129Use PowerPC V2.02 floating point rounding instructions.
130
131mcmpb
132Target Report Mask(CMPB) Var(rs6000_isa_flags)
133Use PowerPC V2.05 compare bytes instruction.
134
135mmfpgpr
136Target Report Mask(MFPGPR) Var(rs6000_isa_flags)
137Use extended PowerPC V2.05 move floating point to/from GPR instructions.
138
139maltivec
140Target Report Mask(ALTIVEC) Var(rs6000_isa_flags)
141Use AltiVec instructions.
142
143maltivec=le
144Target Report RejectNegative Var(rs6000_altivec_element_order, 1) Save
145Generate AltiVec instructions using little-endian element order.
146
147maltivec=be
148Target Report RejectNegative Var(rs6000_altivec_element_order, 2)
149Generate AltiVec instructions using big-endian element order.
150
151mhard-dfp
152Target Report Mask(DFP) Var(rs6000_isa_flags)
153Use decimal floating point instructions.
154
155mmulhw
156Target Report Mask(MULHW) Var(rs6000_isa_flags)
157Use 4xx half-word multiply instructions.
158
159mdlmzb
160Target Report Mask(DLMZB) Var(rs6000_isa_flags)
161Use 4xx string-search dlmzb instruction.
162
163mmultiple
164Target Report Mask(MULTIPLE) Var(rs6000_isa_flags)
165Generate load/store multiple instructions.
166
167mstring
168Target Report Mask(STRING) Var(rs6000_isa_flags)
169Generate string instructions for block moves.
170
171msoft-float
172Target Report RejectNegative Mask(SOFT_FLOAT) Var(rs6000_isa_flags)
173Do not use hardware floating point.
174
175mhard-float
176Target Report RejectNegative InverseMask(SOFT_FLOAT, HARD_FLOAT) Var(rs6000_isa_flags)
177Use hardware floating point.
178
179mpopcntd
180Target Report Mask(POPCNTD) Var(rs6000_isa_flags)
181Use PowerPC V2.06 popcntd instruction.
182
183mfriz
184Target Report Var(TARGET_FRIZ) Init(-1) Save
185Under -ffast-math, generate a FRIZ instruction for (double)(long long) conversions.
186
187mveclibabi=
188Target RejectNegative Joined Var(rs6000_veclibabi_name)
189Vector library ABI to use.
190
191mvsx
192Target Report Mask(VSX) Var(rs6000_isa_flags)
193Use vector/scalar (VSX) instructions.
194
195mvsx-scalar-float
196Target Undocumented Report Var(TARGET_VSX_SCALAR_FLOAT) Init(1)
197; If -mpower8-vector, use VSX arithmetic instructions for SFmode (on by default)
198
199mvsx-scalar-double
200Target Undocumented Report Var(TARGET_VSX_SCALAR_DOUBLE) Init(1)
201; If -mvsx, use VSX arithmetic instructions for DFmode (on by default)
202
203mvsx-scalar-memory
204Target Undocumented Report Alias(mupper-regs-df)
205
206mvsx-align-128
207Target Undocumented Report Var(TARGET_VSX_ALIGN_128) Save
208; If -mvsx, set alignment to 128 bits instead of 32/64
209
210mallow-movmisalign
211Target Undocumented Var(TARGET_ALLOW_MOVMISALIGN) Init(-1) Save
212; Allow/disallow the movmisalign in DF/DI vectors
213
214mefficient-unaligned-vector
215Target Undocumented Report Mask(EFFICIENT_UNALIGNED_VSX) Var(rs6000_isa_flags)
216; Consider unaligned VSX accesses to be efficient/inefficient
217
218mallow-df-permute
219Target Undocumented Var(TARGET_ALLOW_DF_PERMUTE) Save
220; Allow/disallow permutation of DF/DI vectors
221
222msched-groups
223Target Undocumented Report Var(TARGET_SCHED_GROUPS) Init(-1) Save
224; Explicitly set/unset whether rs6000_sched_groups is set
225
226malways-hint
227Target Undocumented Report Var(TARGET_ALWAYS_HINT) Init(-1) Save
228; Explicitly set/unset whether rs6000_always_hint is set
229
230malign-branch-targets
231Target Undocumented Report Var(TARGET_ALIGN_BRANCH_TARGETS) Init(-1) Save
232; Explicitly set/unset whether rs6000_align_branch_targets is set
233
234mvectorize-builtins
235Target Undocumented Report Var(TARGET_VECTORIZE_BUILTINS) Init(-1) Save
236; Explicitly control whether we vectorize the builtins or not.
237
238mno-update
239Target Report RejectNegative Mask(NO_UPDATE) Var(rs6000_isa_flags)
240Do not generate load/store with update instructions.
241
242mupdate
243Target Report RejectNegative InverseMask(NO_UPDATE, UPDATE) Var(rs6000_isa_flags)
244Generate load/store with update instructions.
245
246msingle-pic-base
247Target Report Var(TARGET_SINGLE_PIC_BASE) Init(0)
248Do not load the PIC register in function prologues.
249
250mavoid-indexed-addresses
251Target Report Var(TARGET_AVOID_XFORM) Init(-1) Save
252Avoid generation of indexed load/store instructions when possible.
253
254mtls-markers
255Target Report Var(tls_markers) Init(1) Save
256Mark __tls_get_addr calls with argument info.
257
258msched-epilog
259Target Undocumented Var(TARGET_SCHED_PROLOG) Init(1) Save
260
261msched-prolog
262Target Report Var(TARGET_SCHED_PROLOG) Save
263Schedule the start and end of the procedure.
264
265maix-struct-return
266Target Report RejectNegative Var(aix_struct_return) Save
267Return all structures in memory (AIX default).
268
269msvr4-struct-return
270Target Report RejectNegative Var(aix_struct_return,0) Save
271Return small structures in registers (SVR4 default).
272
273mxl-compat
274Target Report Var(TARGET_XL_COMPAT) Save
275Conform more closely to IBM XLC semantics.
276
277mrecip
278Target Report
279Generate software reciprocal divide and square root for better throughput.
280
281mrecip=
282Target Report RejectNegative Joined Var(rs6000_recip_name)
283Generate software reciprocal divide and square root for better throughput.
284
285mrecip-precision
286Target Report Mask(RECIP_PRECISION) Var(rs6000_isa_flags)
287Assume that the reciprocal estimate instructions provide more accuracy.
288
289mno-fp-in-toc
290Target Report RejectNegative Var(TARGET_NO_FP_IN_TOC) Save
291Do not place floating point constants in TOC.
292
293mfp-in-toc
294Target Report RejectNegative Var(TARGET_NO_FP_IN_TOC,0) Save
295Place floating point constants in TOC.
296
297mno-sum-in-toc
298Target RejectNegative Var(TARGET_NO_SUM_IN_TOC) Save
299Do not place symbol+offset constants in TOC.
300
301msum-in-toc
302Target RejectNegative Var(TARGET_NO_SUM_IN_TOC,0) Save
303Place symbol+offset constants in TOC.
304
305;  Output only one TOC entry per module.  Normally linking fails if
306;   there are more than 16K unique variables/constants in an executable.  With
307;   this option, linking fails only if there are more than 16K modules, or
308;   if there are more than 16K unique variables/constant in a single module.
309;
310;   This is at the cost of having 2 extra loads and one extra store per
311;   function, and one less allocable register.
312mminimal-toc
313Target Report Mask(MINIMAL_TOC) Var(rs6000_isa_flags)
314Use only one TOC entry per procedure.
315
316mfull-toc
317Target Report
318Put everything in the regular TOC.
319
320mvrsave
321Target Report Var(TARGET_ALTIVEC_VRSAVE) Save
322Generate VRSAVE instructions when generating AltiVec code.
323
324mvrsave=no
325Target RejectNegative Alias(mvrsave) NegativeAlias
326Deprecated option.  Use -mno-vrsave instead.
327
328mvrsave=yes
329Target RejectNegative Alias(mvrsave)
330Deprecated option.  Use -mvrsave instead.
331
332mblock-move-inline-limit=
333Target Report Var(rs6000_block_move_inline_limit) Init(0) RejectNegative Joined UInteger Save
334Specify how many bytes should be moved inline before calling out to memcpy/memmove.
335
336misel
337Target Report Mask(ISEL) Var(rs6000_isa_flags)
338Generate isel instructions.
339
340misel=no
341Target RejectNegative Alias(misel) NegativeAlias
342Deprecated option.  Use -mno-isel instead.
343
344misel=yes
345Target RejectNegative Alias(misel)
346Deprecated option.  Use -misel instead.
347
348mspe
349Target Var(rs6000_spe) Save
350Generate SPE SIMD instructions on E500.
351
352mpaired
353Target Var(rs6000_paired_float) Save
354Generate PPC750CL paired-single instructions.
355
356mspe=no
357Target RejectNegative Alias(mspe) NegativeAlias
358Deprecated option.  Use -mno-spe instead.
359
360mspe=yes
361Target RejectNegative Alias(mspe)
362Deprecated option.  Use -mspe instead.
363
364mdebug=
365Target RejectNegative Joined
366-mdebug=	Enable debug output.
367
368mabi=altivec
369Target RejectNegative Var(rs6000_altivec_abi) Save
370Use the AltiVec ABI extensions.
371
372mabi=no-altivec
373Target RejectNegative Var(rs6000_altivec_abi, 0)
374Do not use the AltiVec ABI extensions.
375
376mabi=spe
377Target RejectNegative Var(rs6000_spe_abi) Save
378Use the SPE ABI extensions.
379
380mabi=no-spe
381Target RejectNegative Var(rs6000_spe_abi, 0)
382Do not use the SPE ABI extensions.
383
384mabi=elfv1
385Target RejectNegative Var(rs6000_elf_abi, 1) Save
386Use the ELFv1 ABI.
387
388mabi=elfv2
389Target RejectNegative Var(rs6000_elf_abi, 2)
390Use the ELFv2 ABI.
391
392; These are here for testing during development only, do not document
393; in the manual please.
394
395; If we want Darwin's struct-by-value-in-regs ABI.
396mabi=d64
397Target RejectNegative Undocumented Warn(using darwin64 ABI) Var(rs6000_darwin64_abi) Save
398
399mabi=d32
400Target RejectNegative Undocumented Warn(using old darwin ABI) Var(rs6000_darwin64_abi, 0)
401
402mabi=ieeelongdouble
403Target RejectNegative Undocumented Warn(using IEEE extended precision long double) Var(rs6000_ieeequad) Save
404
405mabi=ibmlongdouble
406Target RejectNegative Undocumented Warn(using IBM extended precision long double) Var(rs6000_ieeequad, 0)
407
408mcpu=
409Target RejectNegative Joined Var(rs6000_cpu_index) Init(-1) Enum(rs6000_cpu_opt_value) Save
410-mcpu=	Use features of and schedule code for given CPU.
411
412mtune=
413Target RejectNegative Joined Var(rs6000_tune_index) Init(-1) Enum(rs6000_cpu_opt_value) Save
414-mtune=	Schedule code for given CPU.
415
416mtraceback=
417Target RejectNegative Joined Enum(rs6000_traceback_type) Var(rs6000_traceback)
418-mtraceback=	Select full, part, or no traceback table.
419
420Enum
421Name(rs6000_traceback_type) Type(enum rs6000_traceback_type)
422
423EnumValue
424Enum(rs6000_traceback_type) String(full) Value(traceback_full)
425
426EnumValue
427Enum(rs6000_traceback_type) String(part) Value(traceback_part)
428
429EnumValue
430Enum(rs6000_traceback_type) String(no) Value(traceback_none)
431
432mlongcall
433Target Report Var(rs6000_default_long_calls) Save
434Avoid all range limits on call instructions.
435
436mgen-cell-microcode
437Target Report Var(rs6000_gen_cell_microcode) Init(-1) Save
438Generate Cell microcode.
439
440mwarn-cell-microcode
441Target Var(rs6000_warn_cell_microcode) Init(0) Warning Save
442Warn when a Cell microcoded instruction is emitted.
443
444mwarn-altivec-long
445Target Var(rs6000_warn_altivec_long) Init(1) Save
446Warn about deprecated 'vector long ...' AltiVec type usage.
447
448mfloat-gprs=
449Target RejectNegative Joined Enum(rs6000_float_gprs) Var(rs6000_float_gprs) Save
450-mfloat-gprs=	Select GPR floating point method.
451
452Enum
453Name(rs6000_float_gprs) Type(unsigned char)
454Valid arguments to -mfloat-gprs=:
455
456EnumValue
457Enum(rs6000_float_gprs) String(yes) Value(1)
458
459EnumValue
460Enum(rs6000_float_gprs) String(single) Value(1)
461
462EnumValue
463Enum(rs6000_float_gprs) String(double) Value(2)
464
465EnumValue
466Enum(rs6000_float_gprs) String(no) Value(0)
467
468mlong-double-
469Target RejectNegative Joined UInteger Var(rs6000_long_double_type_size) Save
470-mlong-double-<n>	Specify size of long double (64 or 128 bits).
471
472mlra
473Target Report Mask(LRA) Var(rs6000_isa_flags)
474Enable Local Register Allocation.
475
476msched-costly-dep=
477Target RejectNegative Joined Var(rs6000_sched_costly_dep_str)
478Determine which dependences between insns are considered costly.
479
480minsert-sched-nops=
481Target RejectNegative Joined Var(rs6000_sched_insert_nops_str)
482Specify which post scheduling nop insertion scheme to apply.
483
484malign-
485Target RejectNegative Joined Enum(rs6000_alignment_flags) Var(rs6000_alignment_flags)
486Specify alignment of structure fields default/natural.
487
488Enum
489Name(rs6000_alignment_flags) Type(unsigned char)
490Valid arguments to -malign-:
491
492EnumValue
493Enum(rs6000_alignment_flags) String(power) Value(MASK_ALIGN_POWER)
494
495EnumValue
496Enum(rs6000_alignment_flags) String(natural) Value(MASK_ALIGN_NATURAL)
497
498mprioritize-restricted-insns=
499Target RejectNegative Joined UInteger Var(rs6000_sched_restricted_insns_priority) Save
500Specify scheduling priority for dispatch slot restricted insns.
501
502msingle-float
503Target RejectNegative Var(rs6000_single_float) Save
504Single-precision floating point unit.
505
506mdouble-float
507Target RejectNegative Var(rs6000_double_float) Save
508Double-precision floating point unit.
509
510msimple-fpu
511Target RejectNegative Var(rs6000_simple_fpu) Save
512Floating point unit does not support divide & sqrt.
513
514mfpu=
515Target RejectNegative Joined Enum(fpu_type_t) Var(rs6000_fpu_type) Init(FPU_NONE)
516-mfpu=	Specify FP (sp, dp, sp-lite, dp-lite) (implies -mxilinx-fpu).
517
518Enum
519Name(fpu_type_t) Type(enum fpu_type_t)
520
521EnumValue
522Enum(fpu_type_t) String(none) Value(FPU_NONE)
523
524EnumValue
525Enum(fpu_type_t) String(sp_lite) Value(FPU_SF_LITE)
526
527EnumValue
528Enum(fpu_type_t) String(dp_lite) Value(FPU_DF_LITE)
529
530EnumValue
531Enum(fpu_type_t) String(sp_full) Value(FPU_SF_FULL)
532
533EnumValue
534Enum(fpu_type_t) String(dp_full) Value(FPU_DF_FULL)
535
536mxilinx-fpu
537Target Var(rs6000_xilinx_fpu) Save
538Specify Xilinx FPU.
539
540mpointers-to-nested-functions
541Target Report Var(TARGET_POINTERS_TO_NESTED_FUNCTIONS) Init(1) Save
542Use/do not use r11 to hold the static link in calls to functions via pointers.
543
544msave-toc-indirect
545Target Report Mask(SAVE_TOC_INDIRECT) Var(rs6000_isa_flags)
546Control whether we save the TOC in the prologue for indirect calls or generate the save inline.
547
548mvsx-timode
549Target Undocumented Mask(VSX_TIMODE) Var(rs6000_isa_flags)
550Allow 128-bit integers in VSX registers.
551
552mpower8-fusion
553Target Report Mask(P8_FUSION) Var(rs6000_isa_flags)
554Fuse certain integer operations together for better performance on power8.
555
556mpower8-fusion-sign
557Target Undocumented Mask(P8_FUSION_SIGN) Var(rs6000_isa_flags)
558Allow sign extension in fusion operations.
559
560mpower8-vector
561Target Report Mask(P8_VECTOR) Var(rs6000_isa_flags)
562Use/do not use vector and scalar instructions added in ISA 2.07.
563
564mcrypto
565Target Report Mask(CRYPTO) Var(rs6000_isa_flags)
566Use ISA 2.07 Category:Vector.AES and Category:Vector.SHA2 instructions.
567
568mdirect-move
569Target Report Mask(DIRECT_MOVE) Var(rs6000_isa_flags)
570Use ISA 2.07 direct move between GPR & VSX register instructions.
571
572mhtm
573Target Report Mask(HTM) Var(rs6000_isa_flags)
574Use ISA 2.07 transactional memory (HTM) instructions.
575
576mquad-memory
577Target Report Mask(QUAD_MEMORY) Var(rs6000_isa_flags)
578Generate the quad word memory instructions (lq/stq).
579
580mquad-memory-atomic
581Target Report Mask(QUAD_MEMORY_ATOMIC) Var(rs6000_isa_flags)
582Generate the quad word memory atomic instructions (lqarx/stqcx).
583
584mcompat-align-parm
585Target Report Var(rs6000_compat_align_parm) Init(0) Save
586Generate aggregate parameter passing code with at most 64-bit alignment.
587
588mupper-regs-df
589Target Report Mask(UPPER_REGS_DF) Var(rs6000_isa_flags)
590Allow double variables in upper registers with -mcpu=power7 or -mvsx.
591
592mupper-regs-sf
593Target Report Mask(UPPER_REGS_SF) Var(rs6000_isa_flags)
594Allow float variables in upper registers with -mcpu=power8 or -mpower8-vector.
595
596mupper-regs
597Target Report Var(TARGET_UPPER_REGS) Init(-1) Save
598Allow float/double variables in upper registers if cpu allows it.
599
600moptimize-swaps
601Target Undocumented Var(rs6000_optimize_swaps) Init(1) Save
602Analyze and remove doubleword swaps from VSX computations.
603
604mpower9-fusion
605Target Undocumented Report Mask(P9_FUSION) Var(rs6000_isa_flags)
606Fuse certain operations together for better performance on power9.
607
608mpower9-misc
609Target Undocumented Report Mask(P9_MISC) Var(rs6000_isa_flags)
610Use/do not use certain scalar instructions added in ISA 3.0.
611
612mpower9-vector
613Target Undocumented Report Mask(P9_VECTOR) Var(rs6000_isa_flags)
614Use/do not use vector instructions added in ISA 3.0.
615
616mpower9-dform-scalar
617Target Undocumented Mask(P9_DFORM_SCALAR) Var(rs6000_isa_flags)
618Use/do not use scalar register+offset memory instructions added in ISA 3.0.
619
620mpower9-dform-vector
621Target Undocumented Mask(P9_DFORM_VECTOR) Var(rs6000_isa_flags)
622Use/do not use vector register+offset memory instructions added in ISA 3.0.
623
624mpower9-dform
625Target Undocumented Report Var(TARGET_P9_DFORM_BOTH) Init(-1) Save
626Use/do not use register+offset memory instructions added in ISA 3.0.
627
628mpower9-minmax
629Target Undocumented Mask(P9_MINMAX) Var(rs6000_isa_flags)
630Use/do not use the new min/max instructions defined in ISA 3.0.
631
632mtoc-fusion
633Target Undocumented Mask(TOC_FUSION) Var(rs6000_isa_flags)
634Fuse medium/large code model toc references with the memory instruction.
635
636mmodulo
637Target Undocumented Report Mask(MODULO) Var(rs6000_isa_flags)
638Generate the integer modulo instructions.
639
640mfloat128
641Target Report Mask(FLOAT128) Var(rs6000_isa_flags)
642Enable/disable IEEE 128-bit floating point via the __float128 keyword.
643
644mfloat128-hardware
645Target Report Mask(FLOAT128_HW) Var(rs6000_isa_flags)
646Enable/disable using IEEE 128-bit floating point instructions.
647
648mfloat128-convert
649Target Undocumented Mask(FLOAT128_CVT) Var(rs6000_isa_flags)
650Enable/disable default conversions between __float128 & long double.
651