1; Options for the S/390 / zSeries port of the compiler. 2 3; Copyright (C) 2005-2022 Free Software Foundation, Inc. 4; 5; This file is part of GCC. 6; 7; GCC is free software; you can redistribute it and/or modify it under 8; the terms of the GNU General Public License as published by the Free 9; Software Foundation; either version 3, or (at your option) any later 10; version. 11; 12; GCC is distributed in the hope that it will be useful, but WITHOUT ANY 13; WARRANTY; without even the implied warranty of MERCHANTABILITY or 14; FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 15; for more details. 16; 17; You should have received a copy of the GNU General Public License 18; along with GCC; see the file COPYING3. If not see 19; <http://www.gnu.org/licenses/>. 20 21HeaderInclude 22config/s390/s390-opts.h 23 24;; Definitions to add to the cl_target_option and gcc_options structures 25 26;; whether -march was specified 27TargetVariable 28unsigned char s390_arch_specified 29 30;; Flags derived from s390_arch 31TargetVariable 32int s390_arch_flags 33 34;; whether -mtune was specified 35TargetVariable 36unsigned char s390_tune_specified 37 38;; Flags derived from s390_tune 39TargetVariable 40int s390_tune_flags 41 42;; Cpu cost table (this is actually a "const struct processor_cost *") 43Variable 44long s390_cost_pointer 45 46m31 47Target RejectNegative Negative(m64) InverseMask(64BIT) 4831 bit ABI. 49 50m64 51Target RejectNegative Negative(m31) Mask(64BIT) 5264 bit ABI. 53 54march= 55Target RejectNegative Joined Enum(processor_type) Var(s390_arch) Init(PROCESSOR_max) Save 56Generate code for given CPU. 57 58Enum 59Name(processor_type) Type(enum processor_type) 60 61EnumValue 62Enum(processor_type) String(z900) Value(PROCESSOR_2064_Z900) 63 64EnumValue 65Enum(processor_type) String(arch5) Value(PROCESSOR_2064_Z900) 66 67EnumValue 68Enum(processor_type) String(z990) Value(PROCESSOR_2084_Z990) 69 70EnumValue 71Enum(processor_type) String(arch6) Value(PROCESSOR_2084_Z990) 72 73EnumValue 74Enum(processor_type) String(z9-109) Value(PROCESSOR_2094_Z9_109) 75 76EnumValue 77Enum(processor_type) String(z9-ec) Value(PROCESSOR_2094_Z9_EC) 78 79EnumValue 80Enum(processor_type) String(arch7) Value(PROCESSOR_2094_Z9_EC) 81 82EnumValue 83Enum(processor_type) String(z10) Value(PROCESSOR_2097_Z10) 84 85EnumValue 86Enum(processor_type) String(arch8) Value(PROCESSOR_2097_Z10) 87 88EnumValue 89Enum(processor_type) String(z196) Value(PROCESSOR_2817_Z196) 90 91EnumValue 92Enum(processor_type) String(arch9) Value(PROCESSOR_2817_Z196) 93 94EnumValue 95Enum(processor_type) String(zEC12) Value(PROCESSOR_2827_ZEC12) 96 97EnumValue 98Enum(processor_type) String(arch10) Value(PROCESSOR_2827_ZEC12) 99 100EnumValue 101Enum(processor_type) String(z13) Value(PROCESSOR_2964_Z13) 102 103EnumValue 104Enum(processor_type) String(arch11) Value(PROCESSOR_2964_Z13) 105 106EnumValue 107Enum(processor_type) String(z14) Value(PROCESSOR_3906_Z14) 108 109EnumValue 110Enum(processor_type) String(arch12) Value(PROCESSOR_3906_Z14) 111 112EnumValue 113Enum(processor_type) String(z15) Value(PROCESSOR_8561_Z15) 114 115EnumValue 116Enum(processor_type) String(arch13) Value(PROCESSOR_8561_Z15) 117 118EnumValue 119Enum(processor_type) String(arch14) Value(PROCESSOR_3931_Z16) 120 121EnumValue 122Enum(processor_type) String(z16) Value(PROCESSOR_3931_Z16) 123 124EnumValue 125Enum(processor_type) String(native) Value(PROCESSOR_NATIVE) DriverOnly 126 127mbackchain 128Target Mask(BACKCHAIN) Save 129Maintain backchain pointer. 130 131mdebug 132Target Mask(DEBUG_ARG) Save 133Additional debug prints. 134 135mesa 136Target RejectNegative Negative(mzarch) InverseMask(ZARCH) 137ESA/390 architecture. 138 139mhard-dfp 140Target Mask(HARD_DFP) Save 141Enable decimal floating point hardware support. 142 143mhard-float 144Target RejectNegative Negative(msoft-float) InverseMask(SOFT_FLOAT, HARD_FLOAT) Save 145Enable hardware floating point. 146 147mhotpatch= 148Target RejectNegative Joined Var(s390_deferred_options) Defer 149Takes two non-negative integer numbers separated by a comma. 150Prepend the function label with the number of two-byte Nop 151instructions indicated by the first. Append Nop instructions 152covering the number of halfwords indicated by the second after the 153label. Nop instructions of the largest possible size are used 154(six, four or two bytes), beginning with the largest possible 155size. Using 0 for both values disables hotpatching. 156 157mlong-double-128 158Target RejectNegative Negative(mlong-double-64) Mask(LONG_DOUBLE_128) 159Use 128-bit long double. 160 161mlong-double-64 162Target RejectNegative Negative(mlong-double-128) InverseMask(LONG_DOUBLE_128) 163Use 64-bit long double. 164 165mhtm 166Target Mask(OPT_HTM) Save 167Use hardware transactional execution instructions. 168 169mvx 170Target Mask(OPT_VX) Save 171Use hardware vector facility instructions and enable the vector ABI. 172 173mpacked-stack 174Target Mask(PACKED_STACK) Save 175Use packed stack layout. 176 177msmall-exec 178Target Mask(SMALL_EXEC) Save 179Use bras for executable < 64k. 180 181msoft-float 182Target RejectNegative Negative(mhard-float) Mask(SOFT_FLOAT) Save 183Disable hardware floating point. 184 185mstack-guard= 186Target RejectNegative Negative(mno-stack-guard) Joined UInteger Var(s390_stack_guard) Save 187Set the max. number of bytes which has to be left to stack size before a trap instruction is triggered. 188 189mno-stack-guard 190Target RejectNegative Alias(mstack-guard=,0) Negative(mstack-guard=) 191Switches off the -mstack-guard= option. 192 193mstack-size= 194Target RejectNegative Joined UInteger Var(s390_stack_size) Save 195Emit extra code in the function prologue in order to trap if the stack size exceeds the given limit. 196 197mno-stack-size 198Target RejectNegative Alias(mstack-size=,0) Negative(mstack-size=) 199Switches off the -mstack-size= option. 200 201mtune= 202Target RejectNegative Joined Enum(processor_type) Var(s390_tune) Init(PROCESSOR_max) Save 203Schedule code for given CPU. 204 205mmvcle 206Target Mask(MVCLE) Save 207Use the mvcle instruction for block moves. 208 209mzvector 210Target Mask(ZVECTOR) Save 211Enable the z vector language extension providing the context-sensitive 212vector macro and enable the Altivec-style builtins in vecintrin.h. 213 214mwarn-dynamicstack 215Target Var(s390_warn_dynamicstack_p) Save 216Warn if a function uses alloca or creates an array with dynamic size. 217 218mwarn-framesize= 219Target RejectNegative Joined UInteger Var(s390_warn_framesize) Save 220Warn if a single function's framesize exceeds the given framesize. 221 222mzarch 223Target RejectNegative Negative(mesa) Mask(ZARCH) 224z/Architecture. 225 226mbranch-cost= 227Target Joined RejectNegative UInteger Var(s390_branch_cost) Init(1) Save 228Set the branch costs for conditional branch instructions. Reasonable 229values are small, non-negative integers. The default branch cost is 2301. 231 232mlra 233Target Var(s390_lra_flag) Init(1) Save 234Use LRA instead of reload. 235 236mpic-data-is-text-relative 237Target Var(s390_pic_data_is_text_relative) Init(TARGET_DEFAULT_PIC_DATA_IS_TEXT_RELATIVE) 238Assume data segments are relative to text segment. 239 240 241mindirect-branch= 242Target RejectNegative Joined Enum(indirect_branch) Var(s390_indirect_branch) Init(indirect_branch_keep) 243Wrap all indirect branches into execute in order to disable branch 244prediction. 245 246mindirect-branch-jump= 247Target RejectNegative Joined Enum(indirect_branch) Var(s390_indirect_branch_jump) Init(indirect_branch_keep) 248Wrap indirect table jumps and computed gotos into execute in order to 249disable branch prediction. Using thunk or thunk-extern with this 250option requires the thunks to be considered signal handlers to order to 251generate correct CFI. For environments where unwinding (e.g. for 252exceptions) is required please use thunk-inline instead. 253 254mindirect-branch-call= 255Target RejectNegative Joined Enum(indirect_branch) Var(s390_indirect_branch_call) Init(indirect_branch_keep) 256Wrap all indirect calls into execute in order to disable branch prediction. 257 258mfunction-return= 259Target RejectNegative Joined Enum(indirect_branch) Var(s390_function_return) Init(indirect_branch_keep) 260Wrap all indirect return branches into execute in order to disable branch 261prediction. 262 263mfunction-return-mem= 264Target RejectNegative Joined Enum(indirect_branch) Var(s390_function_return_mem) Init(indirect_branch_keep) 265Wrap indirect return branches into execute in order to disable branch 266prediction. This affects only branches where the return address is 267going to be restored from memory. 268 269mfunction-return-reg= 270Target RejectNegative Joined Enum(indirect_branch) Var(s390_function_return_reg) Init(indirect_branch_keep) 271Wrap indirect return branches into execute in order to disable branch 272prediction. This affects only branches where the return address 273doesn't need to be restored from memory. 274 275Enum 276Name(indirect_branch) Type(enum indirect_branch) 277Known indirect branch choices (for use with the -mindirect-branch=/-mfunction-return= options): 278 279EnumValue 280Enum(indirect_branch) String(keep) Value(indirect_branch_keep) 281 282EnumValue 283Enum(indirect_branch) String(thunk) Value(indirect_branch_thunk) 284 285EnumValue 286Enum(indirect_branch) String(thunk-inline) Value(indirect_branch_thunk_inline) 287 288EnumValue 289Enum(indirect_branch) String(thunk-extern) Value(indirect_branch_thunk_extern) 290 291mindirect-branch-table 292Target Var(s390_indirect_branch_table) Init(TARGET_DEFAULT_INDIRECT_BRANCH_TABLE) 293Generate sections .s390_indirect_jump, .s390_indirect_call, 294.s390_return_reg, and .s390_return_mem to contain the indirect branch 295locations which have been patched as part of using one of the 296-mindirect-branch* or -mfunction-return* options. The sections 297consist of an array of 32 bit elements. Each entry holds the offset 298from the entry to the patched location. 299 300mfentry 301Target Var(flag_fentry) 302Emit profiling counter call at function entry before prologue. The compiled 303code will require a 64-bit CPU and glibc 2.29 or newer to run. 304 305mrecord-mcount 306Target Var(flag_record_mcount) 307Generate __mcount_loc section with all _mcount and __fentry__ calls. 308 309mnop-mcount 310Target Var(flag_nop_mcount) 311Generate mcount/__fentry__ calls as nops. To activate they need to be 312patched in. 313 314mvx-long-double-fma 315Target Undocumented Var(flag_vx_long_double_fma) 316Emit fused multiply-add instructions for long doubles in vector registers 317(wfmaxb, wfmsxb, wfnmaxb, wfnmsxb). Reassociation pass does not handle 318fused multiply-adds, therefore code generated by the middle-end is prone to 319having long fused multiply-add chains. This is not pipeline-friendly, 320and the default behavior is to emit separate multiplication and addition 321instructions for long doubles in vector registers, because measurements show 322that this improves performance. This option allows overriding it for testing 323purposes. 324