1 ; Options for the S/390 / zSeries port of the compiler.
3 ; Copyright (C) 2005-2024 Free Software Foundation, Inc.
5 ; This file is part of GCC.
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
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
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/>.
22 config/s390/s390-opts.h
24 ;; Definitions to add to the cl_target_option and gcc_options structures
26 ;; whether -march was specified
28 unsigned char s390_arch_specified
30 ;; Flags derived from s390_arch
34 ;; whether -mtune was specified
36 unsigned char s390_tune_specified
38 ;; Flags derived from s390_tune
42 ;; Cpu cost table (this is actually a "const struct processor_cost *")
44 long s390_cost_pointer
47 Target RejectNegative Negative(m64) InverseMask(64BIT)
51 Target RejectNegative Negative(m31) Mask(64BIT)
55 Target RejectNegative Joined Enum(processor_type) Var(s390_arch) Init(PROCESSOR_max) Save
56 Generate code for given CPU.
59 Name(processor_type) Type(enum processor_type)
62 Enum(processor_type) String(z900) Value(PROCESSOR_2064_Z900)
65 Enum(processor_type) String(arch5) Value(PROCESSOR_2064_Z900)
68 Enum(processor_type) String(z990) Value(PROCESSOR_2084_Z990)
71 Enum(processor_type) String(arch6) Value(PROCESSOR_2084_Z990)
74 Enum(processor_type) String(z9-109) Value(PROCESSOR_2094_Z9_109)
77 Enum(processor_type) String(z9-ec) Value(PROCESSOR_2094_Z9_EC)
80 Enum(processor_type) String(arch7) Value(PROCESSOR_2094_Z9_EC)
83 Enum(processor_type) String(z10) Value(PROCESSOR_2097_Z10)
86 Enum(processor_type) String(arch8) Value(PROCESSOR_2097_Z10)
89 Enum(processor_type) String(z196) Value(PROCESSOR_2817_Z196)
92 Enum(processor_type) String(arch9) Value(PROCESSOR_2817_Z196)
95 Enum(processor_type) String(zEC12) Value(PROCESSOR_2827_ZEC12)
98 Enum(processor_type) String(arch10) Value(PROCESSOR_2827_ZEC12)
101 Enum(processor_type) String(z13) Value(PROCESSOR_2964_Z13)
104 Enum(processor_type) String(arch11) Value(PROCESSOR_2964_Z13)
107 Enum(processor_type) String(z14) Value(PROCESSOR_3906_Z14)
110 Enum(processor_type) String(arch12) Value(PROCESSOR_3906_Z14)
113 Enum(processor_type) String(z15) Value(PROCESSOR_8561_Z15)
116 Enum(processor_type) String(arch13) Value(PROCESSOR_8561_Z15)
119 Enum(processor_type) String(arch14) Value(PROCESSOR_3931_Z16)
122 Enum(processor_type) String(z16) Value(PROCESSOR_3931_Z16)
125 Enum(processor_type) String(native) Value(PROCESSOR_NATIVE) DriverOnly
128 Target Mask(BACKCHAIN) Save
129 Maintain backchain pointer.
132 Target Mask(DEBUG_ARG) Save
133 Additional debug prints.
136 Target RejectNegative Negative(mzarch) InverseMask(ZARCH)
137 ESA/390 architecture.
140 Target Mask(HARD_DFP) Save
141 Enable decimal floating point hardware support.
144 Target RejectNegative Negative(msoft-float) InverseMask(SOFT_FLOAT, HARD_FLOAT) Save
145 Enable hardware floating point.
148 Target RejectNegative Joined Var(s390_deferred_options) Defer
149 Takes two non-negative integer numbers separated by a comma.
150 Prepend the function label with the number of two-byte Nop
151 instructions indicated by the first. Append Nop instructions
152 covering the number of halfwords indicated by the second after the
153 label. Nop instructions of the largest possible size are used
154 (six, four or two bytes), beginning with the largest possible
155 size. Using 0 for both values disables hotpatching.
158 Target RejectNegative Negative(mlong-double-64) Mask(LONG_DOUBLE_128)
159 Use 128-bit long double.
162 Target RejectNegative Negative(mlong-double-128) InverseMask(LONG_DOUBLE_128)
163 Use 64-bit long double.
166 Target Mask(OPT_HTM) Save
167 Use hardware transactional execution instructions.
170 Target Mask(OPT_VX) Save
171 Use hardware vector facility instructions and enable the vector ABI.
174 Target Mask(PACKED_STACK) Save
175 Use packed stack layout.
178 Target Mask(SMALL_EXEC) Save
179 Use bras for executable < 64k.
182 Target RejectNegative Negative(mhard-float) Mask(SOFT_FLOAT) Save
183 Disable hardware floating point.
186 Target RejectNegative Negative(mno-stack-guard) Joined UInteger Var(s390_stack_guard) Save
187 Set the max. number of bytes which has to be left to stack size before a trap instruction is triggered.
190 Target RejectNegative Alias(mstack-guard=,0) Negative(mstack-guard=)
191 Switches off the -mstack-guard= option.
194 Target RejectNegative Joined UInteger Var(s390_stack_size) Save
195 Emit extra code in the function prologue in order to trap if the stack size exceeds the given limit.
198 Target RejectNegative Alias(mstack-size=,0) Negative(mstack-size=)
199 Switches off the -mstack-size= option.
202 Target RejectNegative Joined Enum(processor_type) Var(s390_tune) Init(PROCESSOR_max) Save
203 Schedule code for given CPU.
206 Target Mask(MVCLE) Save
207 Use the mvcle instruction for block moves.
210 Target Mask(ZVECTOR) Save
211 Enable the z vector language extension providing the context-sensitive
212 vector macro and enable the Altivec-style builtins in vecintrin.h.
215 Target Var(s390_warn_dynamicstack_p) Save
216 Warn if a function uses alloca or creates an array with dynamic size.
219 Target RejectNegative Joined UInteger Var(s390_warn_framesize) Save
220 Warn if a single function's framesize exceeds the given framesize.
223 Target RejectNegative Negative(mesa) Mask(ZARCH)
227 Target Joined RejectNegative UInteger Var(s390_branch_cost) Init(1) Save
228 Set the branch costs for conditional branch instructions. Reasonable
229 values are small, non-negative integers. The default branch cost is
232 mpic-data-is-text-relative
233 Target Var(s390_pic_data_is_text_relative) Init(TARGET_DEFAULT_PIC_DATA_IS_TEXT_RELATIVE)
234 Assume data segments are relative to text segment.
238 Target RejectNegative Joined Enum(indirect_branch) Var(s390_indirect_branch) Init(indirect_branch_keep)
239 Wrap all indirect branches into execute in order to disable branch
242 mindirect-branch-jump=
243 Target RejectNegative Joined Enum(indirect_branch) Var(s390_indirect_branch_jump) Init(indirect_branch_keep)
244 Wrap indirect table jumps and computed gotos into execute in order to
245 disable branch prediction. Using thunk or thunk-extern with this
246 option requires the thunks to be considered signal handlers to order to
247 generate correct CFI. For environments where unwinding (e.g. for
248 exceptions) is required please use thunk-inline instead.
250 mindirect-branch-call=
251 Target RejectNegative Joined Enum(indirect_branch) Var(s390_indirect_branch_call) Init(indirect_branch_keep)
252 Wrap all indirect calls into execute in order to disable branch prediction.
255 Target RejectNegative Joined Enum(indirect_branch) Var(s390_function_return) Init(indirect_branch_keep)
256 Wrap all indirect return branches into execute in order to disable branch
259 mfunction-return-mem=
260 Target RejectNegative Joined Enum(indirect_branch) Var(s390_function_return_mem) Init(indirect_branch_keep)
261 Wrap indirect return branches into execute in order to disable branch
262 prediction. This affects only branches where the return address is
263 going to be restored from memory.
265 mfunction-return-reg=
266 Target RejectNegative Joined Enum(indirect_branch) Var(s390_function_return_reg) Init(indirect_branch_keep)
267 Wrap indirect return branches into execute in order to disable branch
268 prediction. This affects only branches where the return address
269 doesn't need to be restored from memory.
272 Name(indirect_branch) Type(enum indirect_branch)
273 Known indirect branch choices (for use with the -mindirect-branch=/-mfunction-return= options):
276 Enum(indirect_branch) String(keep) Value(indirect_branch_keep)
279 Enum(indirect_branch) String(thunk) Value(indirect_branch_thunk)
282 Enum(indirect_branch) String(thunk-inline) Value(indirect_branch_thunk_inline)
285 Enum(indirect_branch) String(thunk-extern) Value(indirect_branch_thunk_extern)
287 mindirect-branch-table
288 Target Var(s390_indirect_branch_table) Init(TARGET_DEFAULT_INDIRECT_BRANCH_TABLE)
289 Generate sections .s390_indirect_jump, .s390_indirect_call,
290 .s390_return_reg, and .s390_return_mem to contain the indirect branch
291 locations which have been patched as part of using one of the
292 -mindirect-branch* or -mfunction-return* options. The sections
293 consist of an array of 32 bit elements. Each entry holds the offset
294 from the entry to the patched location.
297 Target Var(flag_fentry)
298 Emit profiling counter call at function entry before prologue. The compiled
299 code will require a 64-bit CPU and glibc 2.29 or newer to run.
302 Target Var(flag_record_mcount)
303 Generate __mcount_loc section with all _mcount and __fentry__ calls.
306 Target Var(flag_nop_mcount)
307 Generate mcount/__fentry__ calls as nops. To activate they need to be
311 Target Undocumented Var(flag_vx_long_double_fma)
312 Emit fused multiply-add instructions for long doubles in vector registers
313 (wfmaxb, wfmsxb, wfnmaxb, wfnmsxb). Reassociation pass does not handle
314 fused multiply-adds, therefore code generated by the middle-end is prone to
315 having long fused multiply-add chains. This is not pipeline-friendly,
316 and the default behavior is to emit separate multiplication and addition
317 instructions for long doubles in vector registers, because measurements show
318 that this improves performance. This option allows overriding it for testing
321 munroll-only-small-loops
322 Target Undocumented Var(unroll_only_small_loops) Init(0) Save
323 ; Use conservative small loop unrolling.
326 Target Var(s390_preserve_args_p) Init(0)
327 Store all argument registers on the stack.
330 Target Var(s390_unaligned_symbols_p) Init(0)
331 Assume external symbols, whose natural alignment would be 1, to be
332 potentially unaligned. By default all symbols without explicit
333 alignment are assumed to reside on a 2 byte boundary as mandated by