; Options for the rs6000 port of the compiler ; ; Copyright (C) 2005-2020 Free Software Foundation, Inc. ; Contributed by Aldy Hernandez . ; ; This file is part of GCC. ; ; GCC is free software; you can redistribute it and/or modify it under ; the terms of the GNU General Public License as published by the Free ; Software Foundation; either version 3, or (at your option) any later ; version. ; ; GCC is distributed in the hope that it will be useful, but WITHOUT ; ANY WARRANTY; without even the implied warranty of MERCHANTABILITY ; or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public ; License for more details. ; ; You should have received a copy of the GNU General Public License ; along with GCC; see the file COPYING3. If not see ; . HeaderInclude config/rs6000/rs6000-opts.h ;; ISA flag bits (on/off) Variable HOST_WIDE_INT rs6000_isa_flags = TARGET_DEFAULT TargetSave HOST_WIDE_INT x_rs6000_isa_flags ;; Miscellaneous flag bits that were set explicitly by the user Variable HOST_WIDE_INT rs6000_isa_flags_explicit TargetSave HOST_WIDE_INT x_rs6000_isa_flags_explicit ;; Current processor TargetVariable enum processor_type rs6000_cpu = PROCESSOR_PPC603 ;; Current tuning TargetVariable enum processor_type rs6000_tune = PROCESSOR_PPC603 ;; Always emit branch hint bits. TargetVariable unsigned char rs6000_always_hint ;; Schedule instructions for group formation. TargetVariable unsigned char rs6000_sched_groups ;; Align branch targets. TargetVariable unsigned char rs6000_align_branch_targets ;; Support for -msched-costly-dep option. TargetVariable enum rs6000_dependence_cost rs6000_sched_costly_dep = no_dep_costly ;; Support for -minsert-sched-nops option. TargetVariable enum rs6000_nop_insertion rs6000_sched_insert_nops = sched_finish_none ;; Non-zero to allow overriding loop alignment. TargetVariable unsigned char can_override_loop_align ;; Which small data model to use (for System V targets only) TargetVariable enum rs6000_sdata_type rs6000_sdata = SDATA_DATA ;; Bit size of immediate TLS offsets and string from which it is decoded. TargetVariable int rs6000_tls_size = 32 ;; ABI enumeration available for subtarget to use. TargetVariable enum rs6000_abi rs6000_current_abi = ABI_NONE ;; Type of traceback to use. TargetVariable enum rs6000_traceback_type rs6000_traceback = traceback_default ;; Control alignment for fields within structures. TargetVariable unsigned char rs6000_alignment_flags ;; Code model for 64-bit linux. TargetVariable enum rs6000_cmodel rs6000_current_cmodel = CMODEL_SMALL ;; What type of reciprocal estimation instructions to generate TargetVariable unsigned int rs6000_recip_control ;; Mask of what builtin functions are allowed TargetVariable HOST_WIDE_INT rs6000_builtin_mask ;; Debug flags TargetVariable unsigned int rs6000_debug ;; Whether to enable the -mfloat128 stuff without necessarily enabling the ;; __float128 keyword. TargetSave unsigned char x_TARGET_FLOAT128_TYPE Variable unsigned char TARGET_FLOAT128_TYPE ;; This option existed in the past, but now is always on. mpowerpc Target RejectNegative Undocumented Ignore mpowerpc64 Target Report Mask(POWERPC64) Var(rs6000_isa_flags) Use PowerPC-64 instruction set. mpowerpc-gpopt Target Report Mask(PPC_GPOPT) Var(rs6000_isa_flags) Use PowerPC General Purpose group optional instructions. mpowerpc-gfxopt Target Report Mask(PPC_GFXOPT) Var(rs6000_isa_flags) Use PowerPC Graphics group optional instructions. mmfcrf Target Report Mask(MFCRF) Var(rs6000_isa_flags) Use PowerPC V2.01 single field mfcr instruction. mpopcntb Target Report Mask(POPCNTB) Var(rs6000_isa_flags) Use PowerPC V2.02 popcntb instruction. mfprnd Target Report Mask(FPRND) Var(rs6000_isa_flags) Use PowerPC V2.02 floating point rounding instructions. mcmpb Target Report Mask(CMPB) Var(rs6000_isa_flags) Use PowerPC V2.05 compare bytes instruction. ;; This option existed in the past, but now is always off. mno-mfpgpr Target RejectNegative Undocumented Ignore mmfpgpr Target RejectNegative Undocumented WarnRemoved maltivec Target Report Mask(ALTIVEC) Var(rs6000_isa_flags) Use AltiVec instructions. mfold-gimple Target Report Var(rs6000_fold_gimple) Init(1) Enable early gimple folding of builtins. mhard-dfp Target Report Mask(DFP) Var(rs6000_isa_flags) Use decimal floating point instructions. mmulhw Target Report Mask(MULHW) Var(rs6000_isa_flags) Use 4xx half-word multiply instructions. mdlmzb Target Report Mask(DLMZB) Var(rs6000_isa_flags) Use 4xx string-search dlmzb instruction. mmultiple Target Report Mask(MULTIPLE) Var(rs6000_isa_flags) Generate load/store multiple instructions. ;; This option existed in the past, but now is always off. mno-string Target RejectNegative Undocumented Ignore mstring Target RejectNegative Undocumented WarnRemoved msoft-float Target Report RejectNegative Mask(SOFT_FLOAT) Var(rs6000_isa_flags) Do not use hardware floating point. mhard-float Target Report RejectNegative InverseMask(SOFT_FLOAT, HARD_FLOAT) Var(rs6000_isa_flags) Use hardware floating point. mpopcntd Target Report Mask(POPCNTD) Var(rs6000_isa_flags) Use PowerPC V2.06 popcntd instruction. mfriz Target Report Var(TARGET_FRIZ) Init(-1) Save Under -ffast-math, generate a FRIZ instruction for (double)(long long) conversions. mveclibabi= Target RejectNegative Joined Var(rs6000_veclibabi_name) Vector library ABI to use. mvsx Target Report Mask(VSX) Var(rs6000_isa_flags) Use vector/scalar (VSX) instructions. mvsx-align-128 Target Undocumented Report Var(TARGET_VSX_ALIGN_128) Save ; If -mvsx, set alignment to 128 bits instead of 32/64 mallow-movmisalign Target Undocumented Var(TARGET_ALLOW_MOVMISALIGN) Init(-1) Save ; Allow the movmisalign in DF/DI vectors mefficient-unaligned-vsx Target Undocumented Report Mask(EFFICIENT_UNALIGNED_VSX) Var(rs6000_isa_flags) ; Consider unaligned VSX vector and fp accesses to be efficient msched-groups Target Undocumented Report Var(TARGET_SCHED_GROUPS) Init(-1) Save ; Explicitly set rs6000_sched_groups malways-hint Target Undocumented Report Var(TARGET_ALWAYS_HINT) Init(-1) Save ; Explicitly set rs6000_always_hint malign-branch-targets Target Undocumented Report Var(TARGET_ALIGN_BRANCH_TARGETS) Init(-1) Save ; Explicitly set rs6000_align_branch_targets mno-update Target Report RejectNegative Mask(NO_UPDATE) Var(rs6000_isa_flags) Do not generate load/store with update instructions. mupdate Target Report RejectNegative InverseMask(NO_UPDATE, UPDATE) Var(rs6000_isa_flags) Generate load/store with update instructions. msingle-pic-base Target Report Var(TARGET_SINGLE_PIC_BASE) Init(0) Do not load the PIC register in function prologues. mavoid-indexed-addresses Target Report Var(TARGET_AVOID_XFORM) Init(-1) Save Avoid generation of indexed load/store instructions when possible. msched-epilog Target Undocumented Var(TARGET_SCHED_PROLOG) Init(1) Save msched-prolog Target Report Var(TARGET_SCHED_PROLOG) Save Schedule the start and end of the procedure. maix-struct-return Target Report RejectNegative Var(aix_struct_return) Save Return all structures in memory (AIX default). msvr4-struct-return Target Report RejectNegative Var(aix_struct_return,0) Save Return small structures in registers (SVR4 default). mxl-compat Target Report Var(TARGET_XL_COMPAT) Save Conform more closely to IBM XLC semantics. mrecip Target Report Generate software reciprocal divide and square root for better throughput. mrecip= Target Report RejectNegative Joined Var(rs6000_recip_name) Generate software reciprocal divide and square root for better throughput. mrecip-precision Target Report Mask(RECIP_PRECISION) Var(rs6000_isa_flags) Assume that the reciprocal estimate instructions provide more accuracy. mno-fp-in-toc Target Report RejectNegative Var(TARGET_NO_FP_IN_TOC) Save Do not place floating point constants in TOC. mfp-in-toc Target Report RejectNegative Var(TARGET_NO_FP_IN_TOC,0) Save Place floating point constants in TOC. mno-sum-in-toc Target RejectNegative Var(TARGET_NO_SUM_IN_TOC) Save Do not place symbol+offset constants in TOC. msum-in-toc Target RejectNegative Var(TARGET_NO_SUM_IN_TOC,0) Save Place symbol+offset constants in TOC. ; Output only one TOC entry per module. Normally linking fails if ; there are more than 16K unique variables/constants in an executable. With ; this option, linking fails only if there are more than 16K modules, or ; if there are more than 16K unique variables/constant in a single module. ; ; This is at the cost of having 2 extra loads and one extra store per ; function, and one less allocable register. mminimal-toc Target Report Mask(MINIMAL_TOC) Var(rs6000_isa_flags) Use only one TOC entry per procedure. mfull-toc Target Report Put everything in the regular TOC. mvrsave Target Report Var(TARGET_ALTIVEC_VRSAVE) Save Generate VRSAVE instructions when generating AltiVec code. mvrsave=no Target RejectNegative Alias(mvrsave) NegativeAlias Warn(%<-mvrsave=no%> is deprecated; use %<-mno-vrsave%> instead) Deprecated option. Use -mno-vrsave instead. mvrsave=yes Target RejectNegative Alias(mvrsave) Warn(%<-mvrsave=yes%> is deprecated; use %<-mvrsave%> instead) Deprecated option. Use -mvrsave instead. mblock-move-inline-limit= Target Report Var(rs6000_block_move_inline_limit) Init(0) RejectNegative Joined UInteger Save Max number of bytes to move inline. mblock-compare-inline-limit= Target Report Var(rs6000_block_compare_inline_limit) Init(63) RejectNegative Joined UInteger Save Max number of bytes to compare without loops. mblock-compare-inline-loop-limit= Target Report Var(rs6000_block_compare_inline_loop_limit) Init(-1) RejectNegative Joined UInteger Save Max number of bytes to compare with loops. mstring-compare-inline-limit= Target Report Var(rs6000_string_compare_inline_limit) Init(64) RejectNegative Joined UInteger Save Max number of bytes to compare. misel Target Report Mask(ISEL) Var(rs6000_isa_flags) Generate isel instructions. mdebug= Target RejectNegative Joined -mdebug= Enable debug output. mabi=altivec Target RejectNegative Var(rs6000_altivec_abi) Save Use the AltiVec ABI extensions. mabi=no-altivec Target RejectNegative Var(rs6000_altivec_abi, 0) Do not use the AltiVec ABI extensions. mabi=elfv1 Target RejectNegative Var(rs6000_elf_abi, 1) Save Use the ELFv1 ABI. mabi=elfv2 Target RejectNegative Var(rs6000_elf_abi, 2) Use the ELFv2 ABI. ; These are here for testing during development only, do not document ; in the manual please. ; If we want Darwin's struct-by-value-in-regs ABI. mabi=d64 Target RejectNegative Undocumented Warn(using darwin64 ABI) Var(rs6000_darwin64_abi) Save mabi=d32 Target RejectNegative Undocumented Warn(using old darwin ABI) Var(rs6000_darwin64_abi, 0) mabi=ieeelongdouble Target RejectNegative Var(rs6000_ieeequad) Save mabi=ibmlongdouble Target RejectNegative Var(rs6000_ieeequad, 0) mcpu= Target RejectNegative Joined Var(rs6000_cpu_index) Init(-1) Enum(rs6000_cpu_opt_value) Save -mcpu= Use features of and schedule code for given CPU. mtune= Target RejectNegative Joined Var(rs6000_tune_index) Init(-1) Enum(rs6000_cpu_opt_value) Save -mtune= Schedule code for given CPU. mtraceback= Target RejectNegative Joined Enum(rs6000_traceback_type) Var(rs6000_traceback) -mtraceback=[full,part,no] Select type of traceback table. Enum Name(rs6000_traceback_type) Type(enum rs6000_traceback_type) EnumValue Enum(rs6000_traceback_type) String(full) Value(traceback_full) EnumValue Enum(rs6000_traceback_type) String(part) Value(traceback_part) EnumValue Enum(rs6000_traceback_type) String(no) Value(traceback_none) mlongcall Target Report Var(rs6000_default_long_calls) Save Avoid all range limits on call instructions. ; This option existed in the past, but now is always on. mgen-cell-microcode Target RejectNegative Undocumented Ignore mwarn-altivec-long Target Var(rs6000_warn_altivec_long) Init(1) Save Warn about deprecated 'vector long ...' AltiVec type usage. mlong-double- Target RejectNegative Joined UInteger Var(rs6000_long_double_type_size) Save Use -mlong-double-64 for 64-bit IEEE floating point format. Use -mlong-double-128 for 128-bit floating point format (either IEEE or IBM). ; This option existed in the past, but now is always on. mlra Target RejectNegative Undocumented Ignore msched-costly-dep= Target RejectNegative Joined Var(rs6000_sched_costly_dep_str) Determine which dependences between insns are considered costly. minsert-sched-nops= Target RejectNegative Joined Var(rs6000_sched_insert_nops_str) Specify which post scheduling nop insertion scheme to apply. malign- Target RejectNegative Joined Enum(rs6000_alignment_flags) Var(rs6000_alignment_flags) Specify alignment of structure fields default/natural. Enum Name(rs6000_alignment_flags) Type(unsigned char) Valid arguments to -malign-: EnumValue Enum(rs6000_alignment_flags) String(power) Value(MASK_ALIGN_POWER) EnumValue Enum(rs6000_alignment_flags) String(natural) Value(MASK_ALIGN_NATURAL) mprioritize-restricted-insns= Target RejectNegative Joined UInteger Var(rs6000_sched_restricted_insns_priority) Save Specify scheduling priority for dispatch slot restricted insns. mpointers-to-nested-functions Target Report Var(TARGET_POINTERS_TO_NESTED_FUNCTIONS) Init(1) Save Use r11 to hold the static link in calls to functions via pointers. msave-toc-indirect Target Report Mask(SAVE_TOC_INDIRECT) Var(rs6000_isa_flags) Save the TOC in the prologue for indirect calls rather than inline. ; This option existed in the past, but now is always the same as -mvsx. mvsx-timode Target RejectNegative Undocumented Ignore mpower8-fusion Target Report Mask(P8_FUSION) Var(rs6000_isa_flags) Fuse certain integer operations together for better performance on power8. mpower8-fusion-sign Target Undocumented Mask(P8_FUSION_SIGN) Var(rs6000_isa_flags) Allow sign extension in fusion operations. mpower8-vector Target Report Mask(P8_VECTOR) Var(rs6000_isa_flags) Use vector and scalar instructions added in ISA 2.07. mcrypto Target Report Mask(CRYPTO) Var(rs6000_isa_flags) Use ISA 2.07 Category:Vector.AES and Category:Vector.SHA2 instructions. mdirect-move Target Undocumented Mask(DIRECT_MOVE) Var(rs6000_isa_flags) WarnRemoved mhtm Target Report Mask(HTM) Var(rs6000_isa_flags) Use ISA 2.07 transactional memory (HTM) instructions. mquad-memory Target Report Mask(QUAD_MEMORY) Var(rs6000_isa_flags) Generate the quad word memory instructions (lq/stq). mquad-memory-atomic Target Report Mask(QUAD_MEMORY_ATOMIC) Var(rs6000_isa_flags) Generate the quad word memory atomic instructions (lqarx/stqcx). mcompat-align-parm Target Report Var(rs6000_compat_align_parm) Init(0) Save Generate aggregate parameter passing code with at most 64-bit alignment. moptimize-swaps Target Undocumented Var(rs6000_optimize_swaps) Init(1) Save Analyze and remove doubleword swaps from VSX computations. munroll-only-small-loops Target Undocumented Var(unroll_only_small_loops) Init(0) Save ; Use conservative small loop unrolling. mpower9-misc Target Undocumented Report Mask(P9_MISC) Var(rs6000_isa_flags) Use certain scalar instructions added in ISA 3.0. mpower9-vector Target Undocumented Report Mask(P9_VECTOR) Var(rs6000_isa_flags) Use vector instructions added in ISA 3.0. mpower9-minmax Target Undocumented Mask(P9_MINMAX) Var(rs6000_isa_flags) Use the new min/max instructions defined in ISA 3.0. mtoc-fusion Target Undocumented Mask(TOC_FUSION) Var(rs6000_isa_flags) Fuse medium/large code model toc references with the memory instruction. mmodulo Target Undocumented Report Mask(MODULO) Var(rs6000_isa_flags) Generate the integer modulo instructions. mfloat128 Target Report Mask(FLOAT128_KEYWORD) Var(rs6000_isa_flags) Enable IEEE 128-bit floating point via the __float128 keyword. mfloat128-hardware Target Report Mask(FLOAT128_HW) Var(rs6000_isa_flags) Enable using IEEE 128-bit floating point instructions. mfloat128-convert Target Undocumented Mask(FLOAT128_CVT) Var(rs6000_isa_flags) Enable default conversions between __float128 & long double. mstack-protector-guard= Target RejectNegative Joined Enum(stack_protector_guard) Var(rs6000_stack_protector_guard) Init(SSP_TLS) Use given stack-protector guard. Enum Name(stack_protector_guard) Type(enum stack_protector_guard) Valid arguments to -mstack-protector-guard=: EnumValue Enum(stack_protector_guard) String(tls) Value(SSP_TLS) EnumValue Enum(stack_protector_guard) String(global) Value(SSP_GLOBAL) mstack-protector-guard-reg= Target RejectNegative Joined Var(rs6000_stack_protector_guard_reg_str) Use the given base register for addressing the stack-protector guard. TargetVariable int rs6000_stack_protector_guard_reg = 0 mstack-protector-guard-offset= Target RejectNegative Joined Integer Var(rs6000_stack_protector_guard_offset_str) Use the given offset for addressing the stack-protector guard. TargetVariable long rs6000_stack_protector_guard_offset = 0 ;; -mno-speculate-indirect-jumps adds deliberate misprediction to indirect ;; branches via the CTR. mspeculate-indirect-jumps Target Undocumented Var(rs6000_speculate_indirect_jumps) Init(1) Save mfuture Target Report Mask(FUTURE) Var(rs6000_isa_flags) Use instructions for a future architecture. mprefixed Target Report Mask(PREFIXED) Var(rs6000_isa_flags) Generate (do not generate) prefixed memory instructions. mpcrel Target Report Mask(PCREL) Var(rs6000_isa_flags) Generate (do not generate) pc-relative memory addressing.