]> git.ipfire.org Git - thirdparty/gcc.git/blob - gcc/config/s390/s390.opt
lra: Reallow reloading user hard registers if the insn is not asm [PR 120983]
[thirdparty/gcc.git] / gcc / config / s390 / s390.opt
1 ; Options for the S/390 / zSeries port of the compiler.
2
3 ; Copyright (C) 2005-2025 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
21 HeaderInclude
22 config/s390/s390-opts.h
23
24 ;; Definitions to add to the cl_target_option and gcc_options structures
25
26 ;; whether -march was specified
27 TargetVariable
28 unsigned char s390_arch_specified
29
30 ;; Flags derived from s390_arch
31 TargetVariable
32 int s390_arch_flags
33
34 ;; whether -mtune was specified
35 TargetVariable
36 unsigned char s390_tune_specified
37
38 ;; Flags derived from s390_tune
39 TargetVariable
40 int s390_tune_flags
41
42 ;; Cpu cost table (this is actually a "const struct processor_cost *")
43 Variable
44 long s390_cost_pointer
45
46 m31
47 Target RejectNegative Negative(m64) InverseMask(64BIT)
48 31 bit ABI.
49
50 m64
51 Target RejectNegative Negative(m31) Mask(64BIT)
52 64 bit ABI.
53
54 march=
55 Target RejectNegative Joined Enum(processor_type) Var(s390_arch) Init(PROCESSOR_max) Save
56 Generate code for given CPU.
57
58 Enum
59 Name(processor_type) Type(enum processor_type)
60
61 EnumValue
62 Enum(processor_type) String(z900) Value(PROCESSOR_2064_Z900)
63
64 EnumValue
65 Enum(processor_type) String(arch5) Value(PROCESSOR_2064_Z900)
66
67 EnumValue
68 Enum(processor_type) String(z990) Value(PROCESSOR_2084_Z990)
69
70 EnumValue
71 Enum(processor_type) String(arch6) Value(PROCESSOR_2084_Z990)
72
73 EnumValue
74 Enum(processor_type) String(z9-109) Value(PROCESSOR_2094_Z9_109)
75
76 EnumValue
77 Enum(processor_type) String(z9-ec) Value(PROCESSOR_2094_Z9_EC)
78
79 EnumValue
80 Enum(processor_type) String(arch7) Value(PROCESSOR_2094_Z9_EC)
81
82 EnumValue
83 Enum(processor_type) String(z10) Value(PROCESSOR_2097_Z10)
84
85 EnumValue
86 Enum(processor_type) String(arch8) Value(PROCESSOR_2097_Z10)
87
88 EnumValue
89 Enum(processor_type) String(z196) Value(PROCESSOR_2817_Z196)
90
91 EnumValue
92 Enum(processor_type) String(arch9) Value(PROCESSOR_2817_Z196)
93
94 EnumValue
95 Enum(processor_type) String(zEC12) Value(PROCESSOR_2827_ZEC12)
96
97 EnumValue
98 Enum(processor_type) String(arch10) Value(PROCESSOR_2827_ZEC12)
99
100 EnumValue
101 Enum(processor_type) String(z13) Value(PROCESSOR_2964_Z13)
102
103 EnumValue
104 Enum(processor_type) String(arch11) Value(PROCESSOR_2964_Z13)
105
106 EnumValue
107 Enum(processor_type) String(z14) Value(PROCESSOR_3906_Z14)
108
109 EnumValue
110 Enum(processor_type) String(arch12) Value(PROCESSOR_3906_Z14)
111
112 EnumValue
113 Enum(processor_type) String(z15) Value(PROCESSOR_8561_Z15)
114
115 EnumValue
116 Enum(processor_type) String(arch13) Value(PROCESSOR_8561_Z15)
117
118 EnumValue
119 Enum(processor_type) String(arch14) Value(PROCESSOR_3931_Z16)
120
121 EnumValue
122 Enum(processor_type) String(z16) Value(PROCESSOR_3931_Z16)
123
124 EnumValue
125 Enum(processor_type) String(arch15) Value(PROCESSOR_9175_Z17)
126
127 EnumValue
128 Enum(processor_type) String(z17) Value(PROCESSOR_9175_Z17)
129
130 EnumValue
131 Enum(processor_type) String(native) Value(PROCESSOR_NATIVE) DriverOnly
132
133 mbackchain
134 Target Mask(BACKCHAIN) Save
135 Maintain backchain pointer.
136
137 mdebug
138 Target Mask(DEBUG_ARG) Save
139 Additional debug prints.
140
141 mesa
142 Target RejectNegative Negative(mzarch) InverseMask(ZARCH)
143 ESA/390 architecture.
144
145 mhard-dfp
146 Target Mask(HARD_DFP) Save
147 Enable decimal floating point hardware support.
148
149 mhard-float
150 Target RejectNegative Negative(msoft-float) InverseMask(SOFT_FLOAT, HARD_FLOAT) Save
151 Enable hardware floating point.
152
153 mhotpatch=
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.
162
163 mlong-double-128
164 Target RejectNegative Negative(mlong-double-64) Mask(LONG_DOUBLE_128)
165 Use 128-bit long double.
166
167 mlong-double-64
168 Target RejectNegative Negative(mlong-double-128) InverseMask(LONG_DOUBLE_128)
169 Use 64-bit long double.
170
171 mhtm
172 Target Mask(OPT_HTM) Save
173 Use hardware transactional execution instructions.
174
175 mvx
176 Target Mask(OPT_VX) Save
177 Use hardware vector facility instructions and enable the vector ABI.
178
179 mpacked-stack
180 Target Mask(PACKED_STACK) Save
181 Use packed stack layout.
182
183 msmall-exec
184 Target Mask(SMALL_EXEC) Save
185 Use bras for executable < 64k.
186
187 msoft-float
188 Target RejectNegative Negative(mhard-float) Mask(SOFT_FLOAT) Save
189 Disable hardware floating point.
190
191 mstack-guard=
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.
194
195 mno-stack-guard
196 Target RejectNegative Alias(mstack-guard=,0) Negative(mstack-guard=)
197 Switches off the -mstack-guard= option.
198
199 mstack-size=
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.
202
203 mno-stack-size
204 Target RejectNegative Alias(mstack-size=,0) Negative(mstack-size=)
205 Switches off the -mstack-size= option.
206
207 mtune=
208 Target RejectNegative Joined Enum(processor_type) Var(s390_tune) Init(PROCESSOR_max) Save
209 Schedule code for given CPU.
210
211 mmvcle
212 Target Mask(MVCLE) Save
213 Use the mvcle instruction for block moves.
214
215 mzvector
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.
219
220 mwarn-dynamicstack
221 Target Var(s390_warn_dynamicstack_p) Save
222 Warn if a function uses alloca or creates an array with dynamic size.
223
224 mwarn-framesize=
225 Target RejectNegative Joined UInteger Var(s390_warn_framesize) Save
226 Warn if a single function's framesize exceeds the given framesize.
227
228 mzarch
229 Target RejectNegative Negative(mesa) Mask(ZARCH)
230 z/Architecture.
231
232 mbranch-cost=
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
236 1.
237
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.
241
242
243 mindirect-branch=
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
246 prediction.
247
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.
255
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.
259
260 mfunction-return=
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
263 prediction.
264
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.
270
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.
276
277 Enum
278 Name(indirect_branch) Type(enum indirect_branch)
279 Known indirect branch choices (for use with the -mindirect-branch=/-mfunction-return= options):
280
281 EnumValue
282 Enum(indirect_branch) String(keep) Value(indirect_branch_keep)
283
284 EnumValue
285 Enum(indirect_branch) String(thunk) Value(indirect_branch_thunk)
286
287 EnumValue
288 Enum(indirect_branch) String(thunk-inline) Value(indirect_branch_thunk_inline)
289
290 EnumValue
291 Enum(indirect_branch) String(thunk-extern) Value(indirect_branch_thunk_extern)
292
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.
301
302 mfentry
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.
306
307 mrecord-mcount
308 Target Var(flag_record_mcount)
309 Generate __mcount_loc section with all _mcount and __fentry__ calls.
310
311 mnop-mcount
312 Target Var(flag_nop_mcount)
313 Generate mcount/__fentry__ calls as nops. To activate they need to be
314 patched in.
315
316 mvx-long-double-fma
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
325 purposes.
326
327 munroll-only-small-loops
328 Target Undocumented Var(unroll_only_small_loops) Init(0) Save
329 ; Use conservative small loop unrolling.
330
331 mpreserve-args
332 Target Var(s390_preserve_args_p) Init(0)
333 Store all argument registers on the stack.
334
335 munaligned-symbols
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
340 the IBM Z ABI.
341