]>
Commit | Line | Data |
---|---|---|
f5db779b RS |
1 | ; Options for the S/390 / zSeries port of the compiler. |
2 | ||
a945c346 | 3 | ; Copyright (C) 2005-2024 Free Software Foundation, Inc. |
f5db779b RS |
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 | |
2f83c7d6 | 9 | ; Software Foundation; either version 3, or (at your option) any later |
f5db779b RS |
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 | |
2f83c7d6 NC |
18 | ; along with GCC; see the file COPYING3. If not see |
19 | ; <http://www.gnu.org/licenses/>. | |
f5db779b | 20 | |
cabbe12a JM |
21 | HeaderInclude |
22 | config/s390/s390-opts.h | |
23 | ||
ec47b086 | 24 | ;; Definitions to add to the cl_target_option and gcc_options structures |
cabbe12a | 25 | |
ec47b086 DV |
26 | ;; whether -march was specified |
27 | TargetVariable | |
28 | unsigned char s390_arch_specified | |
cabbe12a | 29 | |
ec47b086 DV |
30 | ;; Flags derived from s390_arch |
31 | TargetVariable | |
cabbe12a JM |
32 | int s390_arch_flags |
33 | ||
ec47b086 DV |
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 *") | |
cabbe12a | 43 | Variable |
ec47b086 | 44 | long s390_cost_pointer |
cabbe12a | 45 | |
f5db779b | 46 | m31 |
eece52b5 | 47 | Target RejectNegative Negative(m64) InverseMask(64BIT) |
a7b2e184 | 48 | 31 bit ABI. |
f5db779b RS |
49 | |
50 | m64 | |
eece52b5 | 51 | Target RejectNegative Negative(m31) Mask(64BIT) |
a7b2e184 | 52 | 64 bit ABI. |
f5db779b RS |
53 | |
54 | march= | |
ec47b086 | 55 | Target RejectNegative Joined Enum(processor_type) Var(s390_arch) Init(PROCESSOR_max) Save |
a7b2e184 | 56 | Generate code for given CPU. |
f5db779b | 57 | |
cabbe12a | 58 | Enum |
f137aa63 | 59 | Name(processor_type) Type(enum processor_type) |
cabbe12a | 60 | |
cabbe12a | 61 | EnumValue |
f137aa63 | 62 | Enum(processor_type) String(z900) Value(PROCESSOR_2064_Z900) |
cabbe12a | 63 | |
0dbb19f0 AK |
64 | EnumValue |
65 | Enum(processor_type) String(arch5) Value(PROCESSOR_2064_Z900) | |
66 | ||
cabbe12a | 67 | EnumValue |
f137aa63 | 68 | Enum(processor_type) String(z990) Value(PROCESSOR_2084_Z990) |
cabbe12a | 69 | |
0dbb19f0 AK |
70 | EnumValue |
71 | Enum(processor_type) String(arch6) Value(PROCESSOR_2084_Z990) | |
72 | ||
cabbe12a | 73 | EnumValue |
f137aa63 | 74 | Enum(processor_type) String(z9-109) Value(PROCESSOR_2094_Z9_109) |
cabbe12a JM |
75 | |
76 | EnumValue | |
f137aa63 | 77 | Enum(processor_type) String(z9-ec) Value(PROCESSOR_2094_Z9_EC) |
cabbe12a | 78 | |
0dbb19f0 AK |
79 | EnumValue |
80 | Enum(processor_type) String(arch7) Value(PROCESSOR_2094_Z9_EC) | |
81 | ||
cabbe12a | 82 | EnumValue |
f137aa63 | 83 | Enum(processor_type) String(z10) Value(PROCESSOR_2097_Z10) |
cabbe12a | 84 | |
0dbb19f0 AK |
85 | EnumValue |
86 | Enum(processor_type) String(arch8) Value(PROCESSOR_2097_Z10) | |
87 | ||
cabbe12a | 88 | EnumValue |
f137aa63 | 89 | Enum(processor_type) String(z196) Value(PROCESSOR_2817_Z196) |
cabbe12a | 90 | |
0dbb19f0 AK |
91 | EnumValue |
92 | Enum(processor_type) String(arch9) Value(PROCESSOR_2817_Z196) | |
93 | ||
22ac2c2f AK |
94 | EnumValue |
95 | Enum(processor_type) String(zEC12) Value(PROCESSOR_2827_ZEC12) | |
96 | ||
0dbb19f0 AK |
97 | EnumValue |
98 | Enum(processor_type) String(arch10) Value(PROCESSOR_2827_ZEC12) | |
99 | ||
55ac540c AK |
100 | EnumValue |
101 | Enum(processor_type) String(z13) Value(PROCESSOR_2964_Z13) | |
102 | ||
0dbb19f0 AK |
103 | EnumValue |
104 | Enum(processor_type) String(arch11) Value(PROCESSOR_2964_Z13) | |
105 | ||
6654e96f | 106 | EnumValue |
2731a5b3 AK |
107 | Enum(processor_type) String(z14) Value(PROCESSOR_3906_Z14) |
108 | ||
109 | EnumValue | |
110 | Enum(processor_type) String(arch12) Value(PROCESSOR_3906_Z14) | |
6654e96f | 111 | |
511ea153 | 112 | EnumValue |
80f8cd77 AK |
113 | Enum(processor_type) String(z15) Value(PROCESSOR_8561_Z15) |
114 | ||
115 | EnumValue | |
116 | Enum(processor_type) String(arch13) Value(PROCESSOR_8561_Z15) | |
511ea153 | 117 | |
796a35b2 | 118 | EnumValue |
82a4c5c7 AK |
119 | Enum(processor_type) String(arch14) Value(PROCESSOR_3931_Z16) |
120 | ||
121 | EnumValue | |
122 | Enum(processor_type) String(z16) Value(PROCESSOR_3931_Z16) | |
796a35b2 | 123 | |
cb0edc39 DV |
124 | EnumValue |
125 | Enum(processor_type) String(native) Value(PROCESSOR_NATIVE) DriverOnly | |
126 | ||
f5db779b | 127 | mbackchain |
eece52b5 | 128 | Target Mask(BACKCHAIN) Save |
a7b2e184 | 129 | Maintain backchain pointer. |
f5db779b RS |
130 | |
131 | mdebug | |
eece52b5 | 132 | Target Mask(DEBUG_ARG) Save |
a7b2e184 | 133 | Additional debug prints. |
f5db779b RS |
134 | |
135 | mesa | |
eece52b5 | 136 | Target RejectNegative Negative(mzarch) InverseMask(ZARCH) |
a7b2e184 | 137 | ESA/390 architecture. |
f5db779b | 138 | |
3443392a | 139 | mhard-dfp |
eece52b5 | 140 | Target Mask(HARD_DFP) Save |
a7b2e184 | 141 | Enable decimal floating point hardware support. |
3443392a | 142 | |
f5db779b | 143 | mhard-float |
eece52b5 | 144 | Target RejectNegative Negative(msoft-float) InverseMask(SOFT_FLOAT, HARD_FLOAT) Save |
a7b2e184 | 145 | Enable hardware floating point. |
f5db779b | 146 | |
d0de9e13 | 147 | mhotpatch= |
eece52b5 | 148 | Target RejectNegative Joined Var(s390_deferred_options) Defer |
94091f43 DV |
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. | |
d0de9e13 | 156 | |
f61a2c7d | 157 | mlong-double-128 |
eece52b5 | 158 | Target RejectNegative Negative(mlong-double-64) Mask(LONG_DOUBLE_128) |
a7b2e184 | 159 | Use 128-bit long double. |
f61a2c7d AK |
160 | |
161 | mlong-double-64 | |
eece52b5 | 162 | Target RejectNegative Negative(mlong-double-128) InverseMask(LONG_DOUBLE_128) |
a7b2e184 | 163 | Use 64-bit long double. |
f61a2c7d | 164 | |
5a3fe9b6 | 165 | mhtm |
eece52b5 | 166 | Target Mask(OPT_HTM) Save |
a7b2e184 | 167 | Use hardware transactional execution instructions. |
5a3fe9b6 | 168 | |
55ac540c | 169 | mvx |
eece52b5 | 170 | Target Mask(OPT_VX) Save |
a7b2e184 | 171 | Use hardware vector facility instructions and enable the vector ABI. |
55ac540c | 172 | |
f5db779b | 173 | mpacked-stack |
eece52b5 | 174 | Target Mask(PACKED_STACK) Save |
a7b2e184 | 175 | Use packed stack layout. |
f5db779b RS |
176 | |
177 | msmall-exec | |
eece52b5 | 178 | Target Mask(SMALL_EXEC) Save |
a7b2e184 | 179 | Use bras for executable < 64k. |
f5db779b RS |
180 | |
181 | msoft-float | |
eece52b5 | 182 | Target RejectNegative Negative(mhard-float) Mask(SOFT_FLOAT) Save |
a7b2e184 | 183 | Disable hardware floating point. |
f5db779b RS |
184 | |
185 | mstack-guard= | |
ec47b086 | 186 | Target RejectNegative Negative(mno-stack-guard) Joined UInteger Var(s390_stack_guard) Save |
a7b2e184 | 187 | Set the max. number of bytes which has to be left to stack size before a trap instruction is triggered. |
f5db779b | 188 | |
ec47b086 DV |
189 | mno-stack-guard |
190 | Target RejectNegative Alias(mstack-guard=,0) Negative(mstack-guard=) | |
191 | Switches off the -mstack-guard= option. | |
192 | ||
f5db779b | 193 | mstack-size= |
ec47b086 | 194 | Target RejectNegative Joined UInteger Var(s390_stack_size) Save |
a7b2e184 | 195 | Emit extra code in the function prologue in order to trap if the stack size exceeds the given limit. |
f5db779b | 196 | |
ec47b086 DV |
197 | mno-stack-size |
198 | Target RejectNegative Alias(mstack-size=,0) Negative(mstack-size=) | |
199 | Switches off the -mstack-size= option. | |
200 | ||
f5db779b | 201 | mtune= |
ec47b086 | 202 | Target RejectNegative Joined Enum(processor_type) Var(s390_tune) Init(PROCESSOR_max) Save |
a7b2e184 | 203 | Schedule code for given CPU. |
f5db779b | 204 | |
8daf098e | 205 | mmvcle |
eece52b5 | 206 | Target Mask(MVCLE) Save |
aa189aee | 207 | Use the mvcle instruction for block moves. |
f5db779b | 208 | |
3af82a61 | 209 | mzvector |
eece52b5 | 210 | Target Mask(ZVECTOR) Save |
17f262c5 | 211 | Enable the z vector language extension providing the context-sensitive |
6a86b9a1 | 212 | vector macro and enable the Altivec-style builtins in vecintrin.h. |
3af82a61 | 213 | |
f5db779b | 214 | mwarn-dynamicstack |
ec47b086 | 215 | Target Var(s390_warn_dynamicstack_p) Save |
a7b2e184 | 216 | Warn if a function uses alloca or creates an array with dynamic size. |
f5db779b RS |
217 | |
218 | mwarn-framesize= | |
ec47b086 | 219 | Target RejectNegative Joined UInteger Var(s390_warn_framesize) Save |
a7b2e184 | 220 | Warn if a single function's framesize exceeds the given framesize. |
f5db779b RS |
221 | |
222 | mzarch | |
eece52b5 | 223 | Target RejectNegative Negative(mesa) Mask(ZARCH) |
a7b2e184 | 224 | z/Architecture. |
3d427cc1 AK |
225 | |
226 | mbranch-cost= | |
eece52b5 | 227 | Target Joined RejectNegative UInteger Var(s390_branch_cost) Init(1) Save |
3d427cc1 AK |
228 | Set the branch costs for conditional branch instructions. Reasonable |
229 | values are small, non-negative integers. The default branch cost is | |
230 | 1. | |
3597e113 VM |
231 | |
232 | mlra | |
eece52b5 | 233 | Target Var(s390_lra_flag) Init(1) Save |
a7b2e184 | 234 | Use LRA instead of reload. |
935b5226 AK |
235 | |
236 | mpic-data-is-text-relative | |
eece52b5 | 237 | Target Var(s390_pic_data_is_text_relative) Init(TARGET_DEFAULT_PIC_DATA_IS_TEXT_RELATIVE) |
935b5226 | 238 | Assume data segments are relative to text segment. |
84b4c7b5 AK |
239 | |
240 | ||
241 | mindirect-branch= | |
eece52b5 | 242 | Target RejectNegative Joined Enum(indirect_branch) Var(s390_indirect_branch) Init(indirect_branch_keep) |
84b4c7b5 AK |
243 | Wrap all indirect branches into execute in order to disable branch |
244 | prediction. | |
245 | ||
246 | mindirect-branch-jump= | |
eece52b5 | 247 | Target RejectNegative Joined Enum(indirect_branch) Var(s390_indirect_branch_jump) Init(indirect_branch_keep) |
84b4c7b5 AK |
248 | Wrap indirect table jumps and computed gotos into execute in order to |
249 | disable branch prediction. Using thunk or thunk-extern with this | |
250 | option requires the thunks to be considered signal handlers to order to | |
251 | generate correct CFI. For environments where unwinding (e.g. for | |
252 | exceptions) is required please use thunk-inline instead. | |
253 | ||
254 | mindirect-branch-call= | |
eece52b5 | 255 | Target RejectNegative Joined Enum(indirect_branch) Var(s390_indirect_branch_call) Init(indirect_branch_keep) |
84b4c7b5 AK |
256 | Wrap all indirect calls into execute in order to disable branch prediction. |
257 | ||
258 | mfunction-return= | |
eece52b5 | 259 | Target RejectNegative Joined Enum(indirect_branch) Var(s390_function_return) Init(indirect_branch_keep) |
84b4c7b5 AK |
260 | Wrap all indirect return branches into execute in order to disable branch |
261 | prediction. | |
262 | ||
263 | mfunction-return-mem= | |
eece52b5 | 264 | Target RejectNegative Joined Enum(indirect_branch) Var(s390_function_return_mem) Init(indirect_branch_keep) |
84b4c7b5 AK |
265 | Wrap indirect return branches into execute in order to disable branch |
266 | prediction. This affects only branches where the return address is | |
267 | going to be restored from memory. | |
268 | ||
269 | mfunction-return-reg= | |
eece52b5 | 270 | Target RejectNegative Joined Enum(indirect_branch) Var(s390_function_return_reg) Init(indirect_branch_keep) |
84b4c7b5 AK |
271 | Wrap indirect return branches into execute in order to disable branch |
272 | prediction. This affects only branches where the return address | |
273 | doesn't need to be restored from memory. | |
274 | ||
275 | Enum | |
276 | Name(indirect_branch) Type(enum indirect_branch) | |
277 | Known indirect branch choices (for use with the -mindirect-branch=/-mfunction-return= options): | |
278 | ||
279 | EnumValue | |
280 | Enum(indirect_branch) String(keep) Value(indirect_branch_keep) | |
281 | ||
282 | EnumValue | |
283 | Enum(indirect_branch) String(thunk) Value(indirect_branch_thunk) | |
284 | ||
285 | EnumValue | |
286 | Enum(indirect_branch) String(thunk-inline) Value(indirect_branch_thunk_inline) | |
287 | ||
288 | EnumValue | |
289 | Enum(indirect_branch) String(thunk-extern) Value(indirect_branch_thunk_extern) | |
290 | ||
291 | mindirect-branch-table | |
eece52b5 | 292 | Target Var(s390_indirect_branch_table) Init(TARGET_DEFAULT_INDIRECT_BRANCH_TABLE) |
84b4c7b5 AK |
293 | Generate sections .s390_indirect_jump, .s390_indirect_call, |
294 | .s390_return_reg, and .s390_return_mem to contain the indirect branch | |
295 | locations which have been patched as part of using one of the | |
296 | -mindirect-branch* or -mfunction-return* options. The sections | |
297 | consist of an array of 32 bit elements. Each entry holds the offset | |
298 | from the entry to the patched location. | |
6902799c IL |
299 | |
300 | mfentry | |
eece52b5 | 301 | Target Var(flag_fentry) |
6902799c IL |
302 | Emit profiling counter call at function entry before prologue. The compiled |
303 | code will require a 64-bit CPU and glibc 2.29 or newer to run. | |
605090dc IL |
304 | |
305 | mrecord-mcount | |
eece52b5 | 306 | Target Var(flag_record_mcount) |
605090dc | 307 | Generate __mcount_loc section with all _mcount and __fentry__ calls. |
79c2f6d7 IL |
308 | |
309 | mnop-mcount | |
eece52b5 | 310 | Target Var(flag_nop_mcount) |
79c2f6d7 IL |
311 | Generate mcount/__fentry__ calls as nops. To activate they need to be |
312 | patched in. | |
e627cda5 IL |
313 | |
314 | mvx-long-double-fma | |
eece52b5 | 315 | Target Undocumented Var(flag_vx_long_double_fma) |
e627cda5 IL |
316 | Emit fused multiply-add instructions for long doubles in vector registers |
317 | (wfmaxb, wfmsxb, wfnmaxb, wfnmsxb). Reassociation pass does not handle | |
318 | fused multiply-adds, therefore code generated by the middle-end is prone to | |
319 | having long fused multiply-add chains. This is not pipeline-friendly, | |
320 | and the default behavior is to emit separate multiplication and addition | |
321 | instructions for long doubles in vector registers, because measurements show | |
322 | that this improves performance. This option allows overriding it for testing | |
323 | purposes. | |
af895511 RD |
324 | |
325 | munroll-only-small-loops | |
326 | Target Undocumented Var(unroll_only_small_loops) Init(0) Save | |
327 | ; Use conservative small loop unrolling. | |
8091199c AK |
328 | |
329 | mpreserve-args | |
330 | Target Var(s390_preserve_args_p) Init(0) | |
331 | Store all argument registers on the stack. | |
6cb2f2c7 AK |
332 | |
333 | munaligned-symbols | |
334 | Target Var(s390_unaligned_symbols_p) Init(0) | |
335 | Assume external symbols to be potentially unaligned. By default all | |
336 | symbols without explicit alignment are assumed to reside on a 2 byte | |
337 | boundary as mandated by the IBM Z ABI. | |
338 |