; Options for the S/390 / zSeries port of the compiler. ; Copyright (C) 2005-2018 Free Software Foundation, Inc. ; ; 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/s390/s390-opts.h ;; Definitions to add to the cl_target_option and gcc_options structures ;; whether -march was specified TargetVariable unsigned char s390_arch_specified ;; Flags derived from s390_arch TargetVariable int s390_arch_flags ;; whether -mtune was specified TargetVariable unsigned char s390_tune_specified ;; Flags derived from s390_tune TargetVariable int s390_tune_flags ;; Cpu cost table (this is actually a "const struct processor_cost *") Variable long s390_cost_pointer m31 Target Report RejectNegative Negative(m64) InverseMask(64BIT) 31 bit ABI. m64 Target Report RejectNegative Negative(m31) Mask(64BIT) 64 bit ABI. march= Target RejectNegative Joined Enum(processor_type) Var(s390_arch) Init(PROCESSOR_max) Save Generate code for given CPU. Enum Name(processor_type) Type(enum processor_type) EnumValue Enum(processor_type) String(z900) Value(PROCESSOR_2064_Z900) EnumValue Enum(processor_type) String(arch5) Value(PROCESSOR_2064_Z900) EnumValue Enum(processor_type) String(z990) Value(PROCESSOR_2084_Z990) EnumValue Enum(processor_type) String(arch6) Value(PROCESSOR_2084_Z990) EnumValue Enum(processor_type) String(z9-109) Value(PROCESSOR_2094_Z9_109) EnumValue Enum(processor_type) String(z9-ec) Value(PROCESSOR_2094_Z9_EC) EnumValue Enum(processor_type) String(arch7) Value(PROCESSOR_2094_Z9_EC) EnumValue Enum(processor_type) String(z10) Value(PROCESSOR_2097_Z10) EnumValue Enum(processor_type) String(arch8) Value(PROCESSOR_2097_Z10) EnumValue Enum(processor_type) String(z196) Value(PROCESSOR_2817_Z196) EnumValue Enum(processor_type) String(arch9) Value(PROCESSOR_2817_Z196) EnumValue Enum(processor_type) String(zEC12) Value(PROCESSOR_2827_ZEC12) EnumValue Enum(processor_type) String(arch10) Value(PROCESSOR_2827_ZEC12) EnumValue Enum(processor_type) String(z13) Value(PROCESSOR_2964_Z13) EnumValue Enum(processor_type) String(arch11) Value(PROCESSOR_2964_Z13) EnumValue Enum(processor_type) String(z14) Value(PROCESSOR_3906_Z14) EnumValue Enum(processor_type) String(arch12) Value(PROCESSOR_3906_Z14) EnumValue Enum(processor_type) String(native) Value(PROCESSOR_NATIVE) DriverOnly mbackchain Target Report Mask(BACKCHAIN) Save Maintain backchain pointer. mdebug Target Report Mask(DEBUG_ARG) Save Additional debug prints. mesa Target Report RejectNegative Negative(mzarch) InverseMask(ZARCH) ESA/390 architecture. mhard-dfp Target Report Mask(HARD_DFP) Save Enable decimal floating point hardware support. mhard-float Target Report RejectNegative Negative(msoft-float) InverseMask(SOFT_FLOAT, HARD_FLOAT) Save Enable hardware floating point. mhotpatch= Target RejectNegative Report Joined Var(s390_deferred_options) Defer Takes two non-negative integer numbers separated by a comma. Prepend the function label with the number of two-byte Nop instructions indicated by the first. Append Nop instructions covering the number of halfwords indicated by the second after the label. Nop instructions of the largest possible size are used (six, four or two bytes), beginning with the largest possible size. Using 0 for both values disables hotpatching. mlong-double-128 Target Report RejectNegative Negative(mlong-double-64) Mask(LONG_DOUBLE_128) Use 128-bit long double. mlong-double-64 Target Report RejectNegative Negative(mlong-double-128) InverseMask(LONG_DOUBLE_128) Use 64-bit long double. mhtm Target Report Mask(OPT_HTM) Save Use hardware transactional execution instructions. mvx Target Report Mask(OPT_VX) Save Use hardware vector facility instructions and enable the vector ABI. mpacked-stack Target Report Mask(PACKED_STACK) Save Use packed stack layout. msmall-exec Target Report Mask(SMALL_EXEC) Save Use bras for executable < 64k. msoft-float Target Report RejectNegative Negative(mhard-float) Mask(SOFT_FLOAT) Save Disable hardware floating point. mstack-guard= Target RejectNegative Negative(mno-stack-guard) Joined UInteger Var(s390_stack_guard) Save Set the max. number of bytes which has to be left to stack size before a trap instruction is triggered. mno-stack-guard Target RejectNegative Alias(mstack-guard=,0) Negative(mstack-guard=) Switches off the -mstack-guard= option. mstack-size= Target RejectNegative Joined UInteger Var(s390_stack_size) Save Emit extra code in the function prologue in order to trap if the stack size exceeds the given limit. mno-stack-size Target RejectNegative Alias(mstack-size=,0) Negative(mstack-size=) Switches off the -mstack-size= option. mtune= Target RejectNegative Joined Enum(processor_type) Var(s390_tune) Init(PROCESSOR_max) Save Schedule code for given CPU. mmvcle Target Report Mask(MVCLE) Save Use the mvcle instruction for block moves. mzvector Target Report Mask(ZVECTOR) Save Enable the z vector language extension providing the context-sensitive vector macro and enable the Altivec-style builtins in vecintrin.h. mwarn-dynamicstack Target Var(s390_warn_dynamicstack_p) Save Warn if a function uses alloca or creates an array with dynamic size. mwarn-framesize= Target RejectNegative Joined UInteger Var(s390_warn_framesize) Save Warn if a single function's framesize exceeds the given framesize. mzarch Target Report RejectNegative Negative(mesa) Mask(ZARCH) z/Architecture. mbranch-cost= Target Report Joined RejectNegative UInteger Var(s390_branch_cost) Init(1) Save Set the branch costs for conditional branch instructions. Reasonable values are small, non-negative integers. The default branch cost is 1. mlra Target Report Var(s390_lra_flag) Init(1) Save Use LRA instead of reload. mpic-data-is-text-relative Target Report Var(s390_pic_data_is_text_relative) Init(TARGET_DEFAULT_PIC_DATA_IS_TEXT_RELATIVE) Assume data segments are relative to text segment. mindirect-branch= Target Report RejectNegative Joined Enum(indirect_branch) Var(s390_indirect_branch) Init(indirect_branch_keep) Wrap all indirect branches into execute in order to disable branch prediction. mindirect-branch-jump= Target Report RejectNegative Joined Enum(indirect_branch) Var(s390_indirect_branch_jump) Init(indirect_branch_keep) Wrap indirect table jumps and computed gotos into execute in order to disable branch prediction. Using thunk or thunk-extern with this option requires the thunks to be considered signal handlers to order to generate correct CFI. For environments where unwinding (e.g. for exceptions) is required please use thunk-inline instead. mindirect-branch-call= Target Report RejectNegative Joined Enum(indirect_branch) Var(s390_indirect_branch_call) Init(indirect_branch_keep) Wrap all indirect calls into execute in order to disable branch prediction. mfunction-return= Target Report RejectNegative Joined Enum(indirect_branch) Var(s390_function_return) Init(indirect_branch_keep) Wrap all indirect return branches into execute in order to disable branch prediction. mfunction-return-mem= Target Report RejectNegative Joined Enum(indirect_branch) Var(s390_function_return_mem) Init(indirect_branch_keep) Wrap indirect return branches into execute in order to disable branch prediction. This affects only branches where the return address is going to be restored from memory. mfunction-return-reg= Target Report RejectNegative Joined Enum(indirect_branch) Var(s390_function_return_reg) Init(indirect_branch_keep) Wrap indirect return branches into execute in order to disable branch prediction. This affects only branches where the return address doesn't need to be restored from memory. Enum Name(indirect_branch) Type(enum indirect_branch) Known indirect branch choices (for use with the -mindirect-branch=/-mfunction-return= options): EnumValue Enum(indirect_branch) String(keep) Value(indirect_branch_keep) EnumValue Enum(indirect_branch) String(thunk) Value(indirect_branch_thunk) EnumValue Enum(indirect_branch) String(thunk-inline) Value(indirect_branch_thunk_inline) EnumValue Enum(indirect_branch) String(thunk-extern) Value(indirect_branch_thunk_extern) mindirect-branch-table Target Report Var(s390_indirect_branch_table) Init(TARGET_DEFAULT_INDIRECT_BRANCH_TABLE) Generate sections .s390_indirect_jump, .s390_indirect_call, .s390_return_reg, and .s390_return_mem to contain the indirect branch locations which have been patched as part of using one of the -mindirect-branch* or -mfunction-return* options. The sections consist of an array of 32 bit elements. Each entry holds the offset from the entry to the patched location. mfentry Target Report Var(flag_fentry) Emit profiling counter call at function entry before prologue. The compiled code will require a 64-bit CPU and glibc 2.29 or newer to run. mrecord-mcount Target Report Var(flag_record_mcount) Generate __mcount_loc section with all _mcount and __fentry__ calls. mnop-mcount Target Report Var(flag_nop_mcount) Generate mcount/__fentry__ calls as nops. To activate they need to be patched in.