1 ; Options for the S/390 / zSeries port of the compiler.
3 ; Copyright (C) 2005-2025 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(arch15) Value(PROCESSOR_9175_Z17)
128 Enum(processor_type) String(z17) Value(PROCESSOR_9175_Z17)
131 Enum(processor_type) String(native) Value(PROCESSOR_NATIVE) DriverOnly
134 Target Mask(BACKCHAIN) Save
135 Maintain backchain pointer.
138 Target Mask(DEBUG_ARG) Save
139 Additional debug prints.
142 Target RejectNegative Negative(mzarch) InverseMask(ZARCH)
143 ESA/390 architecture.
146 Target Mask(HARD_DFP) Save
147 Enable decimal floating point hardware support.
150 Target RejectNegative Negative(msoft-float) InverseMask(SOFT_FLOAT, HARD_FLOAT) Save
151 Enable hardware floating point.
154 Target RejectNegative Joined Var(s390_deferred_options) Defer
155 Takes two non-negative integer numbers separated by a comma.
156 Prepend the function label with the number of two-byte Nop
157 instructions indicated by the first. Append Nop instructions
158 covering the number of halfwords indicated by the second after the
159 label. Nop instructions of the largest possible size are used
160 (six, four or two bytes), beginning with the largest possible
161 size. Using 0 for both values disables hotpatching.
164 Target RejectNegative Negative(mlong-double-64) Mask(LONG_DOUBLE_128)
165 Use 128-bit long double.
168 Target RejectNegative Negative(mlong-double-128) InverseMask(LONG_DOUBLE_128)
169 Use 64-bit long double.
172 Target Mask(OPT_HTM) Save
173 Use hardware transactional execution instructions.
176 Target Mask(OPT_VX) Save
177 Use hardware vector facility instructions and enable the vector ABI.
180 Target Mask(PACKED_STACK) Save
181 Use packed stack layout.
184 Target Mask(SMALL_EXEC) Save
185 Use bras for executable < 64k.
188 Target RejectNegative Negative(mhard-float) Mask(SOFT_FLOAT) Save
189 Disable hardware floating point.
192 Target RejectNegative Negative(mno-stack-guard) Joined UInteger Var(s390_stack_guard) Save
193 Set the max. number of bytes which has to be left to stack size before a trap instruction is triggered.
196 Target RejectNegative Alias(mstack-guard=,0) Negative(mstack-guard=)
197 Switches off the -mstack-guard= option.
200 Target RejectNegative Joined UInteger Var(s390_stack_size) Save
201 Emit extra code in the function prologue in order to trap if the stack size exceeds the given limit.
204 Target RejectNegative Alias(mstack-size=,0) Negative(mstack-size=)
205 Switches off the -mstack-size= option.
208 Target RejectNegative Joined Enum(processor_type) Var(s390_tune) Init(PROCESSOR_max) Save
209 Schedule code for given CPU.
212 Target Mask(MVCLE) Save
213 Use the mvcle instruction for block moves.
216 Target Mask(ZVECTOR) Save
217 Enable the z vector language extension providing the context-sensitive
218 vector macro and enable the Altivec-style builtins in vecintrin.h.
221 Target Var(s390_warn_dynamicstack_p) Save
222 Warn if a function uses alloca or creates an array with dynamic size.
225 Target RejectNegative Joined UInteger Var(s390_warn_framesize) Save
226 Warn if a single function's framesize exceeds the given framesize.
229 Target RejectNegative Negative(mesa) Mask(ZARCH)
233 Target Joined RejectNegative UInteger Var(s390_branch_cost) Init(1) Save
234 Set the branch costs for conditional branch instructions. Reasonable
235 values are small, non-negative integers. The default branch cost is
238 mpic-data-is-text-relative
239 Target Var(s390_pic_data_is_text_relative) Init(TARGET_DEFAULT_PIC_DATA_IS_TEXT_RELATIVE)
240 Assume data segments are relative to text segment.
244 Target RejectNegative Joined Enum(indirect_branch) Var(s390_indirect_branch) Init(indirect_branch_keep)
245 Wrap all indirect branches into execute in order to disable branch
248 mindirect-branch-jump=
249 Target RejectNegative Joined Enum(indirect_branch) Var(s390_indirect_branch_jump) Init(indirect_branch_keep)
250 Wrap indirect table jumps and computed gotos into execute in order to
251 disable branch prediction. Using thunk or thunk-extern with this
252 option requires the thunks to be considered signal handlers to order to
253 generate correct CFI. For environments where unwinding (e.g. for
254 exceptions) is required please use thunk-inline instead.
256 mindirect-branch-call=
257 Target RejectNegative Joined Enum(indirect_branch) Var(s390_indirect_branch_call) Init(indirect_branch_keep)
258 Wrap all indirect calls into execute in order to disable branch prediction.
261 Target RejectNegative Joined Enum(indirect_branch) Var(s390_function_return) Init(indirect_branch_keep)
262 Wrap all indirect return branches into execute in order to disable branch
265 mfunction-return-mem=
266 Target RejectNegative Joined Enum(indirect_branch) Var(s390_function_return_mem) 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 is
269 going to be restored from memory.
271 mfunction-return-reg=
272 Target RejectNegative Joined Enum(indirect_branch) Var(s390_function_return_reg) Init(indirect_branch_keep)
273 Wrap indirect return branches into execute in order to disable branch
274 prediction. This affects only branches where the return address
275 doesn't need to be restored from memory.
278 Name(indirect_branch) Type(enum indirect_branch)
279 Known indirect branch choices (for use with the -mindirect-branch=/-mfunction-return= options):
282 Enum(indirect_branch) String(keep) Value(indirect_branch_keep)
285 Enum(indirect_branch) String(thunk) Value(indirect_branch_thunk)
288 Enum(indirect_branch) String(thunk-inline) Value(indirect_branch_thunk_inline)
291 Enum(indirect_branch) String(thunk-extern) Value(indirect_branch_thunk_extern)
293 mindirect-branch-table
294 Target Var(s390_indirect_branch_table) Init(TARGET_DEFAULT_INDIRECT_BRANCH_TABLE)
295 Generate sections .s390_indirect_jump, .s390_indirect_call,
296 .s390_return_reg, and .s390_return_mem to contain the indirect branch
297 locations which have been patched as part of using one of the
298 -mindirect-branch* or -mfunction-return* options. The sections
299 consist of an array of 32 bit elements. Each entry holds the offset
300 from the entry to the patched location.
303 Target Var(flag_fentry)
304 Emit profiling counter call at function entry before prologue. The compiled
305 code will require a 64-bit CPU and glibc 2.29 or newer to run.
308 Target Var(flag_record_mcount)
309 Generate __mcount_loc section with all _mcount and __fentry__ calls.
312 Target Var(flag_nop_mcount)
313 Generate mcount/__fentry__ calls as nops. To activate they need to be
317 Target Undocumented Var(flag_vx_long_double_fma)
318 Emit fused multiply-add instructions for long doubles in vector registers
319 (wfmaxb, wfmsxb, wfnmaxb, wfnmsxb). Reassociation pass does not handle
320 fused multiply-adds, therefore code generated by the middle-end is prone to
321 having long fused multiply-add chains. This is not pipeline-friendly,
322 and the default behavior is to emit separate multiplication and addition
323 instructions for long doubles in vector registers, because measurements show
324 that this improves performance. This option allows overriding it for testing
327 munroll-only-small-loops
328 Target Undocumented Var(unroll_only_small_loops) Init(0) Save
329 ; Use conservative small loop unrolling.
332 Target Var(s390_preserve_args_p) Init(0)
333 Store all argument registers on the stack.
336 Target Var(s390_unaligned_symbols_p) Init(0)
337 Assume external symbols, whose natural alignment would be 1, to be
338 potentially unaligned. By default all symbols without explicit
339 alignment are assumed to reside on a 2 byte boundary as mandated by