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