2 Copyright (C) 1988-2017 Free Software Foundation, Inc.
4 This file is part of GCC.
6 GCC is free software; you can redistribute it and/or modify
7 it under the terms of the GNU General Public License as published by
8 the Free Software Foundation; either version 3, or (at your option)
11 GCC is distributed in the hope that it will be useful,
12 but WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 GNU General Public License for more details.
16 You should have received a copy of the GNU General Public License
17 along with GCC; see the file COPYING3. If not see
18 <http://www.gnu.org/licenses/>. */
22 #include "coretypes.h"
23 #include "diagnostic-core.h"
27 #include "common/common-target.h"
28 #include "common/common-target-def.h"
32 /* Define a set of ISAs which are available when a given ISA is
33 enabled. MMX and SSE ISAs are handled separately. */
35 #define OPTION_MASK_ISA_MMX_SET OPTION_MASK_ISA_MMX
36 #define OPTION_MASK_ISA_3DNOW_SET \
37 (OPTION_MASK_ISA_3DNOW | OPTION_MASK_ISA_MMX_SET)
38 #define OPTION_MASK_ISA_3DNOW_A_SET \
39 (OPTION_MASK_ISA_3DNOW_A | OPTION_MASK_ISA_3DNOW_SET)
41 #define OPTION_MASK_ISA_SSE_SET OPTION_MASK_ISA_SSE
42 #define OPTION_MASK_ISA_SSE2_SET \
43 (OPTION_MASK_ISA_SSE2 | OPTION_MASK_ISA_SSE_SET)
44 #define OPTION_MASK_ISA_SSE3_SET \
45 (OPTION_MASK_ISA_SSE3 | OPTION_MASK_ISA_SSE2_SET)
46 #define OPTION_MASK_ISA_SSSE3_SET \
47 (OPTION_MASK_ISA_SSSE3 | OPTION_MASK_ISA_SSE3_SET)
48 #define OPTION_MASK_ISA_SSE4_1_SET \
49 (OPTION_MASK_ISA_SSE4_1 | OPTION_MASK_ISA_SSSE3_SET)
50 #define OPTION_MASK_ISA_SSE4_2_SET \
51 (OPTION_MASK_ISA_SSE4_2 | OPTION_MASK_ISA_SSE4_1_SET)
52 #define OPTION_MASK_ISA_AVX_SET \
53 (OPTION_MASK_ISA_AVX | OPTION_MASK_ISA_SSE4_2_SET \
54 | OPTION_MASK_ISA_XSAVE_SET)
55 #define OPTION_MASK_ISA_FMA_SET \
56 (OPTION_MASK_ISA_FMA | OPTION_MASK_ISA_AVX_SET)
57 #define OPTION_MASK_ISA_AVX2_SET \
58 (OPTION_MASK_ISA_AVX2 | OPTION_MASK_ISA_AVX_SET)
59 #define OPTION_MASK_ISA_FXSR_SET OPTION_MASK_ISA_FXSR
60 #define OPTION_MASK_ISA_XSAVE_SET OPTION_MASK_ISA_XSAVE
61 #define OPTION_MASK_ISA_XSAVEOPT_SET \
62 (OPTION_MASK_ISA_XSAVEOPT | OPTION_MASK_ISA_XSAVE)
63 #define OPTION_MASK_ISA_AVX512F_SET \
64 (OPTION_MASK_ISA_AVX512F | OPTION_MASK_ISA_AVX2_SET)
65 #define OPTION_MASK_ISA_AVX512CD_SET \
66 (OPTION_MASK_ISA_AVX512CD | OPTION_MASK_ISA_AVX512F_SET)
67 #define OPTION_MASK_ISA_AVX512PF_SET \
68 (OPTION_MASK_ISA_AVX512PF | OPTION_MASK_ISA_AVX512F_SET)
69 #define OPTION_MASK_ISA_AVX512ER_SET \
70 (OPTION_MASK_ISA_AVX512ER | OPTION_MASK_ISA_AVX512F_SET)
71 #define OPTION_MASK_ISA_AVX512DQ_SET \
72 (OPTION_MASK_ISA_AVX512DQ | OPTION_MASK_ISA_AVX512F_SET)
73 #define OPTION_MASK_ISA_AVX512BW_SET \
74 (OPTION_MASK_ISA_AVX512BW | OPTION_MASK_ISA_AVX512F_SET)
75 #define OPTION_MASK_ISA_AVX512VL_SET \
76 (OPTION_MASK_ISA_AVX512VL | OPTION_MASK_ISA_AVX512F_SET)
77 #define OPTION_MASK_ISA_AVX512IFMA_SET \
78 (OPTION_MASK_ISA_AVX512IFMA | OPTION_MASK_ISA_AVX512F_SET)
79 #define OPTION_MASK_ISA_AVX512VBMI_SET \
80 (OPTION_MASK_ISA_AVX512VBMI | OPTION_MASK_ISA_AVX512BW_SET)
81 #define OPTION_MASK_ISA_AVX5124FMAPS_SET OPTION_MASK_ISA_AVX5124FMAPS
82 #define OPTION_MASK_ISA_AVX5124VNNIW_SET OPTION_MASK_ISA_AVX5124VNNIW
83 #define OPTION_MASK_ISA_AVX512VPOPCNTDQ_SET OPTION_MASK_ISA_AVX512VPOPCNTDQ
84 #define OPTION_MASK_ISA_RTM_SET OPTION_MASK_ISA_RTM
85 #define OPTION_MASK_ISA_PRFCHW_SET OPTION_MASK_ISA_PRFCHW
86 #define OPTION_MASK_ISA_RDSEED_SET OPTION_MASK_ISA_RDSEED
87 #define OPTION_MASK_ISA_ADX_SET OPTION_MASK_ISA_ADX
88 #define OPTION_MASK_ISA_PREFETCHWT1_SET OPTION_MASK_ISA_PREFETCHWT1
89 #define OPTION_MASK_ISA_CLFLUSHOPT_SET OPTION_MASK_ISA_CLFLUSHOPT
90 #define OPTION_MASK_ISA_XSAVES_SET \
91 (OPTION_MASK_ISA_XSAVES | OPTION_MASK_ISA_XSAVE)
92 #define OPTION_MASK_ISA_XSAVEC_SET \
93 (OPTION_MASK_ISA_XSAVEC | OPTION_MASK_ISA_XSAVE)
94 #define OPTION_MASK_ISA_CLWB_SET OPTION_MASK_ISA_CLWB
96 /* SSE4 includes both SSE4.1 and SSE4.2. -msse4 should be the same
98 #define OPTION_MASK_ISA_SSE4_SET OPTION_MASK_ISA_SSE4_2_SET
100 #define OPTION_MASK_ISA_SSE4A_SET \
101 (OPTION_MASK_ISA_SSE4A | OPTION_MASK_ISA_SSE3_SET)
102 #define OPTION_MASK_ISA_FMA4_SET \
103 (OPTION_MASK_ISA_FMA4 | OPTION_MASK_ISA_SSE4A_SET \
104 | OPTION_MASK_ISA_AVX_SET)
105 #define OPTION_MASK_ISA_XOP_SET \
106 (OPTION_MASK_ISA_XOP | OPTION_MASK_ISA_FMA4_SET)
107 #define OPTION_MASK_ISA_LWP_SET \
110 /* AES, SHA and PCLMUL need SSE2 because they use xmm registers. */
111 #define OPTION_MASK_ISA_AES_SET \
112 (OPTION_MASK_ISA_AES | OPTION_MASK_ISA_SSE2_SET)
113 #define OPTION_MASK_ISA_SHA_SET \
114 (OPTION_MASK_ISA_SHA | OPTION_MASK_ISA_SSE2_SET)
115 #define OPTION_MASK_ISA_PCLMUL_SET \
116 (OPTION_MASK_ISA_PCLMUL | OPTION_MASK_ISA_SSE2_SET)
118 #define OPTION_MASK_ISA_ABM_SET \
119 (OPTION_MASK_ISA_ABM | OPTION_MASK_ISA_POPCNT)
121 #define OPTION_MASK_ISA_SGX_SET OPTION_MASK_ISA_SGX
122 #define OPTION_MASK_ISA_BMI_SET OPTION_MASK_ISA_BMI
123 #define OPTION_MASK_ISA_BMI2_SET OPTION_MASK_ISA_BMI2
124 #define OPTION_MASK_ISA_LZCNT_SET OPTION_MASK_ISA_LZCNT
125 #define OPTION_MASK_ISA_TBM_SET OPTION_MASK_ISA_TBM
126 #define OPTION_MASK_ISA_POPCNT_SET OPTION_MASK_ISA_POPCNT
127 #define OPTION_MASK_ISA_CX16_SET OPTION_MASK_ISA_CX16
128 #define OPTION_MASK_ISA_SAHF_SET OPTION_MASK_ISA_SAHF
129 #define OPTION_MASK_ISA_MOVBE_SET OPTION_MASK_ISA_MOVBE
130 #define OPTION_MASK_ISA_CRC32_SET OPTION_MASK_ISA_CRC32
132 #define OPTION_MASK_ISA_FSGSBASE_SET OPTION_MASK_ISA_FSGSBASE
133 #define OPTION_MASK_ISA_RDRND_SET OPTION_MASK_ISA_RDRND
134 #define OPTION_MASK_ISA_F16C_SET \
135 (OPTION_MASK_ISA_F16C | OPTION_MASK_ISA_AVX_SET)
136 #define OPTION_MASK_ISA_MWAITX_SET OPTION_MASK_ISA_MWAITX
137 #define OPTION_MASK_ISA_CLZERO_SET OPTION_MASK_ISA_CLZERO
138 #define OPTION_MASK_ISA_PKU_SET OPTION_MASK_ISA_PKU
139 #define OPTION_MASK_ISA_RDPID_SET OPTION_MASK_ISA_RDPID
141 /* Define a set of ISAs which aren't available when a given ISA is
142 disabled. MMX and SSE ISAs are handled separately. */
144 #define OPTION_MASK_ISA_MMX_UNSET \
145 (OPTION_MASK_ISA_MMX | OPTION_MASK_ISA_3DNOW_UNSET)
146 #define OPTION_MASK_ISA_3DNOW_UNSET \
147 (OPTION_MASK_ISA_3DNOW | OPTION_MASK_ISA_3DNOW_A_UNSET)
148 #define OPTION_MASK_ISA_3DNOW_A_UNSET OPTION_MASK_ISA_3DNOW_A
150 #define OPTION_MASK_ISA_SSE_UNSET \
151 (OPTION_MASK_ISA_SSE | OPTION_MASK_ISA_SSE2_UNSET)
152 #define OPTION_MASK_ISA_SSE2_UNSET \
153 (OPTION_MASK_ISA_SSE2 | OPTION_MASK_ISA_SSE3_UNSET)
154 #define OPTION_MASK_ISA_SSE3_UNSET \
155 (OPTION_MASK_ISA_SSE3 \
156 | OPTION_MASK_ISA_SSSE3_UNSET \
157 | OPTION_MASK_ISA_SSE4A_UNSET )
158 #define OPTION_MASK_ISA_SSSE3_UNSET \
159 (OPTION_MASK_ISA_SSSE3 | OPTION_MASK_ISA_SSE4_1_UNSET)
160 #define OPTION_MASK_ISA_SSE4_1_UNSET \
161 (OPTION_MASK_ISA_SSE4_1 | OPTION_MASK_ISA_SSE4_2_UNSET)
162 #define OPTION_MASK_ISA_SSE4_2_UNSET \
163 (OPTION_MASK_ISA_SSE4_2 | OPTION_MASK_ISA_AVX_UNSET )
164 #define OPTION_MASK_ISA_AVX_UNSET \
165 (OPTION_MASK_ISA_AVX | OPTION_MASK_ISA_FMA_UNSET \
166 | OPTION_MASK_ISA_FMA4_UNSET | OPTION_MASK_ISA_F16C_UNSET \
167 | OPTION_MASK_ISA_AVX2_UNSET | OPTION_MASK_ISA_XSAVE_UNSET)
168 #define OPTION_MASK_ISA_FMA_UNSET OPTION_MASK_ISA_FMA
169 #define OPTION_MASK_ISA_FXSR_UNSET OPTION_MASK_ISA_FXSR
170 #define OPTION_MASK_ISA_XSAVE_UNSET \
171 (OPTION_MASK_ISA_XSAVE | OPTION_MASK_ISA_XSAVEOPT_UNSET)
172 #define OPTION_MASK_ISA_XSAVEOPT_UNSET OPTION_MASK_ISA_XSAVEOPT
173 #define OPTION_MASK_ISA_AVX2_UNSET \
174 (OPTION_MASK_ISA_AVX2 | OPTION_MASK_ISA_AVX512F_UNSET)
175 #define OPTION_MASK_ISA_AVX512F_UNSET \
176 (OPTION_MASK_ISA_AVX512F | OPTION_MASK_ISA_AVX512CD_UNSET \
177 | OPTION_MASK_ISA_AVX512PF_UNSET | OPTION_MASK_ISA_AVX512ER_UNSET \
178 | OPTION_MASK_ISA_AVX512DQ_UNSET | OPTION_MASK_ISA_AVX512BW_UNSET \
179 | OPTION_MASK_ISA_AVX512VL_UNSET)
180 #define OPTION_MASK_ISA_AVX512CD_UNSET OPTION_MASK_ISA_AVX512CD
181 #define OPTION_MASK_ISA_AVX512PF_UNSET OPTION_MASK_ISA_AVX512PF
182 #define OPTION_MASK_ISA_AVX512ER_UNSET OPTION_MASK_ISA_AVX512ER
183 #define OPTION_MASK_ISA_AVX512DQ_UNSET OPTION_MASK_ISA_AVX512DQ
184 #define OPTION_MASK_ISA_AVX512BW_UNSET \
185 (OPTION_MASK_ISA_AVX512BW | OPTION_MASK_ISA_AVX512VBMI_UNSET)
186 #define OPTION_MASK_ISA_AVX512VL_UNSET OPTION_MASK_ISA_AVX512VL
187 #define OPTION_MASK_ISA_AVX512IFMA_UNSET OPTION_MASK_ISA_AVX512IFMA
188 #define OPTION_MASK_ISA_AVX512VBMI_UNSET OPTION_MASK_ISA_AVX512VBMI
189 #define OPTION_MASK_ISA_AVX5124FMAPS_UNSET OPTION_MASK_ISA_AVX5124FMAPS
190 #define OPTION_MASK_ISA_AVX5124VNNIW_UNSET OPTION_MASK_ISA_AVX5124VNNIW
191 #define OPTION_MASK_ISA_AVX512VPOPCNTDQ_UNSET OPTION_MASK_ISA_AVX512VPOPCNTDQ
192 #define OPTION_MASK_ISA_RTM_UNSET OPTION_MASK_ISA_RTM
193 #define OPTION_MASK_ISA_PRFCHW_UNSET OPTION_MASK_ISA_PRFCHW
194 #define OPTION_MASK_ISA_RDSEED_UNSET OPTION_MASK_ISA_RDSEED
195 #define OPTION_MASK_ISA_ADX_UNSET OPTION_MASK_ISA_ADX
196 #define OPTION_MASK_ISA_PREFETCHWT1_UNSET OPTION_MASK_ISA_PREFETCHWT1
197 #define OPTION_MASK_ISA_CLFLUSHOPT_UNSET OPTION_MASK_ISA_CLFLUSHOPT
198 #define OPTION_MASK_ISA_XSAVEC_UNSET OPTION_MASK_ISA_XSAVEC
199 #define OPTION_MASK_ISA_XSAVES_UNSET OPTION_MASK_ISA_XSAVES
200 #define OPTION_MASK_ISA_CLWB_UNSET OPTION_MASK_ISA_CLWB
201 #define OPTION_MASK_ISA_MWAITX_UNSET OPTION_MASK_ISA_MWAITX
202 #define OPTION_MASK_ISA_CLZERO_UNSET OPTION_MASK_ISA_CLZERO
203 #define OPTION_MASK_ISA_PKU_UNSET OPTION_MASK_ISA_PKU
204 #define OPTION_MASK_ISA_RDPID_UNSET OPTION_MASK_ISA_RDPID
206 /* SSE4 includes both SSE4.1 and SSE4.2. -mno-sse4 should the same
208 #define OPTION_MASK_ISA_SSE4_UNSET OPTION_MASK_ISA_SSE4_1_UNSET
210 #define OPTION_MASK_ISA_SSE4A_UNSET \
211 (OPTION_MASK_ISA_SSE4A | OPTION_MASK_ISA_FMA4_UNSET)
213 #define OPTION_MASK_ISA_FMA4_UNSET \
214 (OPTION_MASK_ISA_FMA4 | OPTION_MASK_ISA_XOP_UNSET)
215 #define OPTION_MASK_ISA_XOP_UNSET OPTION_MASK_ISA_XOP
216 #define OPTION_MASK_ISA_LWP_UNSET OPTION_MASK_ISA_LWP
218 #define OPTION_MASK_ISA_AES_UNSET OPTION_MASK_ISA_AES
219 #define OPTION_MASK_ISA_SHA_UNSET OPTION_MASK_ISA_SHA
220 #define OPTION_MASK_ISA_PCLMUL_UNSET OPTION_MASK_ISA_PCLMUL
221 #define OPTION_MASK_ISA_ABM_UNSET OPTION_MASK_ISA_ABM
222 #define OPTION_MASK_ISA_SGX_UNSET OPTION_MASK_ISA_SGX
223 #define OPTION_MASK_ISA_BMI_UNSET OPTION_MASK_ISA_BMI
224 #define OPTION_MASK_ISA_BMI2_UNSET OPTION_MASK_ISA_BMI2
225 #define OPTION_MASK_ISA_LZCNT_UNSET OPTION_MASK_ISA_LZCNT
226 #define OPTION_MASK_ISA_TBM_UNSET OPTION_MASK_ISA_TBM
227 #define OPTION_MASK_ISA_POPCNT_UNSET OPTION_MASK_ISA_POPCNT
228 #define OPTION_MASK_ISA_CX16_UNSET OPTION_MASK_ISA_CX16
229 #define OPTION_MASK_ISA_SAHF_UNSET OPTION_MASK_ISA_SAHF
230 #define OPTION_MASK_ISA_MOVBE_UNSET OPTION_MASK_ISA_MOVBE
231 #define OPTION_MASK_ISA_CRC32_UNSET OPTION_MASK_ISA_CRC32
233 #define OPTION_MASK_ISA_FSGSBASE_UNSET OPTION_MASK_ISA_FSGSBASE
234 #define OPTION_MASK_ISA_RDRND_UNSET OPTION_MASK_ISA_RDRND
235 #define OPTION_MASK_ISA_F16C_UNSET OPTION_MASK_ISA_F16C
237 #define OPTION_MASK_ISA_GENERAL_REGS_ONLY_UNSET \
238 (OPTION_MASK_ISA_MMX_UNSET \
239 | OPTION_MASK_ISA_SSE_UNSET \
240 | OPTION_MASK_ISA_MPX)
242 /* Implement TARGET_HANDLE_OPTION. */
245 ix86_handle_option (struct gcc_options
*opts
,
246 struct gcc_options
*opts_set ATTRIBUTE_UNUSED
,
247 const struct cl_decoded_option
*decoded
,
250 size_t code
= decoded
->opt_index
;
251 int value
= decoded
->value
;
255 case OPT_mgeneral_regs_only
:
258 /* Disable MPX, MMX, SSE and x87 instructions if only
259 general registers are allowed. */
260 opts
->x_ix86_isa_flags
261 &= ~OPTION_MASK_ISA_GENERAL_REGS_ONLY_UNSET
;
262 opts
->x_ix86_isa_flags_explicit
263 |= OPTION_MASK_ISA_GENERAL_REGS_ONLY_UNSET
;
265 opts
->x_target_flags
&= ~MASK_80387
;
274 opts
->x_ix86_isa_flags
|= OPTION_MASK_ISA_MMX_SET
;
275 opts
->x_ix86_isa_flags_explicit
|= OPTION_MASK_ISA_MMX_SET
;
279 opts
->x_ix86_isa_flags
&= ~OPTION_MASK_ISA_MMX_UNSET
;
280 opts
->x_ix86_isa_flags_explicit
|= OPTION_MASK_ISA_MMX_UNSET
;
287 opts
->x_ix86_isa_flags
|= OPTION_MASK_ISA_3DNOW_SET
;
288 opts
->x_ix86_isa_flags_explicit
|= OPTION_MASK_ISA_3DNOW_SET
;
292 opts
->x_ix86_isa_flags
&= ~OPTION_MASK_ISA_3DNOW_UNSET
;
293 opts
->x_ix86_isa_flags_explicit
|= OPTION_MASK_ISA_3DNOW_UNSET
;
300 opts
->x_ix86_isa_flags
|= OPTION_MASK_ISA_3DNOW_A_SET
;
301 opts
->x_ix86_isa_flags_explicit
|= OPTION_MASK_ISA_3DNOW_A_SET
;
305 opts
->x_ix86_isa_flags
&= ~OPTION_MASK_ISA_3DNOW_A_UNSET
;
306 opts
->x_ix86_isa_flags_explicit
|= OPTION_MASK_ISA_3DNOW_A_UNSET
;
313 opts
->x_ix86_isa_flags
|= OPTION_MASK_ISA_SSE_SET
;
314 opts
->x_ix86_isa_flags_explicit
|= OPTION_MASK_ISA_SSE_SET
;
318 opts
->x_ix86_isa_flags
&= ~OPTION_MASK_ISA_SSE_UNSET
;
319 opts
->x_ix86_isa_flags_explicit
|= OPTION_MASK_ISA_SSE_UNSET
;
326 opts
->x_ix86_isa_flags
|= OPTION_MASK_ISA_SSE2_SET
;
327 opts
->x_ix86_isa_flags_explicit
|= OPTION_MASK_ISA_SSE2_SET
;
331 opts
->x_ix86_isa_flags
&= ~OPTION_MASK_ISA_SSE2_UNSET
;
332 opts
->x_ix86_isa_flags_explicit
|= OPTION_MASK_ISA_SSE2_UNSET
;
339 opts
->x_ix86_isa_flags
|= OPTION_MASK_ISA_SSE3_SET
;
340 opts
->x_ix86_isa_flags_explicit
|= OPTION_MASK_ISA_SSE3_SET
;
344 opts
->x_ix86_isa_flags
&= ~OPTION_MASK_ISA_SSE3_UNSET
;
345 opts
->x_ix86_isa_flags_explicit
|= OPTION_MASK_ISA_SSE3_UNSET
;
352 opts
->x_ix86_isa_flags
|= OPTION_MASK_ISA_SSSE3_SET
;
353 opts
->x_ix86_isa_flags_explicit
|= OPTION_MASK_ISA_SSSE3_SET
;
357 opts
->x_ix86_isa_flags
&= ~OPTION_MASK_ISA_SSSE3_UNSET
;
358 opts
->x_ix86_isa_flags_explicit
|= OPTION_MASK_ISA_SSSE3_UNSET
;
365 opts
->x_ix86_isa_flags
|= OPTION_MASK_ISA_SSE4_1_SET
;
366 opts
->x_ix86_isa_flags_explicit
|= OPTION_MASK_ISA_SSE4_1_SET
;
370 opts
->x_ix86_isa_flags
&= ~OPTION_MASK_ISA_SSE4_1_UNSET
;
371 opts
->x_ix86_isa_flags_explicit
|= OPTION_MASK_ISA_SSE4_1_UNSET
;
378 opts
->x_ix86_isa_flags
|= OPTION_MASK_ISA_SSE4_2_SET
;
379 opts
->x_ix86_isa_flags_explicit
|= OPTION_MASK_ISA_SSE4_2_SET
;
383 opts
->x_ix86_isa_flags
&= ~OPTION_MASK_ISA_SSE4_2_UNSET
;
384 opts
->x_ix86_isa_flags_explicit
|= OPTION_MASK_ISA_SSE4_2_UNSET
;
391 opts
->x_ix86_isa_flags
|= OPTION_MASK_ISA_AVX_SET
;
392 opts
->x_ix86_isa_flags_explicit
|= OPTION_MASK_ISA_AVX_SET
;
396 opts
->x_ix86_isa_flags
&= ~OPTION_MASK_ISA_AVX_UNSET
;
397 opts
->x_ix86_isa_flags_explicit
|= OPTION_MASK_ISA_AVX_UNSET
;
404 opts
->x_ix86_isa_flags
|= OPTION_MASK_ISA_AVX2_SET
;
405 opts
->x_ix86_isa_flags_explicit
|= OPTION_MASK_ISA_AVX2_SET
;
409 opts
->x_ix86_isa_flags
&= ~OPTION_MASK_ISA_AVX2_UNSET
;
410 opts
->x_ix86_isa_flags_explicit
|= OPTION_MASK_ISA_AVX2_UNSET
;
417 opts
->x_ix86_isa_flags
|= OPTION_MASK_ISA_AVX512F_SET
;
418 opts
->x_ix86_isa_flags_explicit
|= OPTION_MASK_ISA_AVX512F_SET
;
422 opts
->x_ix86_isa_flags
&= ~OPTION_MASK_ISA_AVX512F_UNSET
;
423 opts
->x_ix86_isa_flags_explicit
|= OPTION_MASK_ISA_AVX512F_UNSET
;
425 /* Turn off additional isa flags. */
426 opts
->x_ix86_isa_flags2
&= ~OPTION_MASK_ISA_AVX5124FMAPS_UNSET
;
427 opts
->x_ix86_isa_flags2_explicit
|= OPTION_MASK_ISA_AVX5124FMAPS_UNSET
;
428 opts
->x_ix86_isa_flags2
&= ~OPTION_MASK_ISA_AVX5124VNNIW_UNSET
;
429 opts
->x_ix86_isa_flags2_explicit
|= OPTION_MASK_ISA_AVX5124VNNIW_UNSET
;
430 opts
->x_ix86_isa_flags2
&= ~OPTION_MASK_ISA_AVX512VPOPCNTDQ_UNSET
;
431 opts
->x_ix86_isa_flags2_explicit
|= OPTION_MASK_ISA_AVX512VPOPCNTDQ_UNSET
;
438 opts
->x_ix86_isa_flags
|= OPTION_MASK_ISA_AVX512CD_SET
;
439 opts
->x_ix86_isa_flags_explicit
|= OPTION_MASK_ISA_AVX512CD_SET
;
443 opts
->x_ix86_isa_flags
&= ~OPTION_MASK_ISA_AVX512CD_UNSET
;
444 opts
->x_ix86_isa_flags_explicit
|= OPTION_MASK_ISA_AVX512CD_UNSET
;
451 opts
->x_ix86_isa_flags
|= OPTION_MASK_ISA_AVX512PF_SET
;
452 opts
->x_ix86_isa_flags_explicit
|= OPTION_MASK_ISA_AVX512PF_SET
;
456 opts
->x_ix86_isa_flags
&= ~OPTION_MASK_ISA_AVX512PF_UNSET
;
457 opts
->x_ix86_isa_flags_explicit
|= OPTION_MASK_ISA_AVX512PF_UNSET
;
464 opts
->x_ix86_isa_flags
|= OPTION_MASK_ISA_AVX512ER_SET
;
465 opts
->x_ix86_isa_flags_explicit
|= OPTION_MASK_ISA_AVX512ER_SET
;
469 opts
->x_ix86_isa_flags
&= ~OPTION_MASK_ISA_AVX512ER_UNSET
;
470 opts
->x_ix86_isa_flags_explicit
|= OPTION_MASK_ISA_AVX512ER_UNSET
;
477 opts
->x_ix86_isa_flags2
|= OPTION_MASK_ISA_RDPID_SET
;
478 opts
->x_ix86_isa_flags2_explicit
|= OPTION_MASK_ISA_RDPID_SET
;
482 opts
->x_ix86_isa_flags2
&= ~OPTION_MASK_ISA_RDPID_UNSET
;
483 opts
->x_ix86_isa_flags2_explicit
|= OPTION_MASK_ISA_RDPID_UNSET
;
487 case OPT_mavx5124fmaps
:
490 opts
->x_ix86_isa_flags2
|= OPTION_MASK_ISA_AVX5124FMAPS_SET
;
491 opts
->x_ix86_isa_flags2_explicit
|= OPTION_MASK_ISA_AVX5124FMAPS_SET
;
492 opts
->x_ix86_isa_flags
|= OPTION_MASK_ISA_AVX512F_SET
;
493 opts
->x_ix86_isa_flags_explicit
|= OPTION_MASK_ISA_AVX512F_SET
;
497 opts
->x_ix86_isa_flags2
&= ~OPTION_MASK_ISA_AVX5124FMAPS_UNSET
;
498 opts
->x_ix86_isa_flags2_explicit
|= OPTION_MASK_ISA_AVX5124FMAPS_UNSET
;
502 case OPT_mavx5124vnniw
:
505 opts
->x_ix86_isa_flags2
|= OPTION_MASK_ISA_AVX5124VNNIW_SET
;
506 opts
->x_ix86_isa_flags2_explicit
|= OPTION_MASK_ISA_AVX5124VNNIW_SET
;
507 opts
->x_ix86_isa_flags
|= OPTION_MASK_ISA_AVX512F_SET
;
508 opts
->x_ix86_isa_flags_explicit
|= OPTION_MASK_ISA_AVX512F_SET
;
512 opts
->x_ix86_isa_flags2
&= ~OPTION_MASK_ISA_AVX5124VNNIW_UNSET
;
513 opts
->x_ix86_isa_flags2_explicit
|= OPTION_MASK_ISA_AVX5124VNNIW_UNSET
;
517 case OPT_mavx512vpopcntdq
:
520 opts
->x_ix86_isa_flags2
|= OPTION_MASK_ISA_AVX512VPOPCNTDQ_SET
;
521 opts
->x_ix86_isa_flags2_explicit
|= OPTION_MASK_ISA_AVX512VPOPCNTDQ_SET
;
522 opts
->x_ix86_isa_flags
|= OPTION_MASK_ISA_AVX512F_SET
;
523 opts
->x_ix86_isa_flags_explicit
|= OPTION_MASK_ISA_AVX512F_SET
;
527 opts
->x_ix86_isa_flags2
&= ~OPTION_MASK_ISA_AVX512VPOPCNTDQ_UNSET
;
528 opts
->x_ix86_isa_flags2_explicit
|= OPTION_MASK_ISA_AVX512VPOPCNTDQ_UNSET
;
535 opts
->x_ix86_isa_flags2
|= OPTION_MASK_ISA_SGX_SET
;
536 opts
->x_ix86_isa_flags2_explicit
|= OPTION_MASK_ISA_SGX_SET
;
540 opts
->x_ix86_isa_flags2
&= ~OPTION_MASK_ISA_SGX_UNSET
;
541 opts
->x_ix86_isa_flags2_explicit
|= OPTION_MASK_ISA_SGX_UNSET
;
548 opts
->x_ix86_isa_flags
|= OPTION_MASK_ISA_AVX512DQ_SET
;
549 opts
->x_ix86_isa_flags_explicit
|= OPTION_MASK_ISA_AVX512DQ_SET
;
553 opts
->x_ix86_isa_flags
&= ~OPTION_MASK_ISA_AVX512DQ_UNSET
;
554 opts
->x_ix86_isa_flags_explicit
|= OPTION_MASK_ISA_AVX512DQ_UNSET
;
561 opts
->x_ix86_isa_flags
|= OPTION_MASK_ISA_AVX512BW_SET
;
562 opts
->x_ix86_isa_flags_explicit
|= OPTION_MASK_ISA_AVX512BW_SET
;
566 opts
->x_ix86_isa_flags
&= ~OPTION_MASK_ISA_AVX512BW_UNSET
;
567 opts
->x_ix86_isa_flags_explicit
|= OPTION_MASK_ISA_AVX512BW_UNSET
;
574 opts
->x_ix86_isa_flags
|= OPTION_MASK_ISA_AVX512VL_SET
;
575 opts
->x_ix86_isa_flags_explicit
|= OPTION_MASK_ISA_AVX512VL_SET
;
579 opts
->x_ix86_isa_flags
&= ~OPTION_MASK_ISA_AVX512VL_UNSET
;
580 opts
->x_ix86_isa_flags_explicit
|= OPTION_MASK_ISA_AVX512VL_UNSET
;
584 case OPT_mavx512ifma
:
587 opts
->x_ix86_isa_flags
|= OPTION_MASK_ISA_AVX512IFMA_SET
;
588 opts
->x_ix86_isa_flags_explicit
|= OPTION_MASK_ISA_AVX512IFMA_SET
;
592 opts
->x_ix86_isa_flags
&= ~OPTION_MASK_ISA_AVX512IFMA_UNSET
;
593 opts
->x_ix86_isa_flags_explicit
|= OPTION_MASK_ISA_AVX512IFMA_UNSET
;
597 case OPT_mavx512vbmi
:
600 opts
->x_ix86_isa_flags
|= OPTION_MASK_ISA_AVX512VBMI_SET
;
601 opts
->x_ix86_isa_flags_explicit
|= OPTION_MASK_ISA_AVX512VBMI_SET
;
605 opts
->x_ix86_isa_flags
&= ~OPTION_MASK_ISA_AVX512VBMI_UNSET
;
606 opts
->x_ix86_isa_flags_explicit
|= OPTION_MASK_ISA_AVX512VBMI_UNSET
;
613 opts
->x_ix86_isa_flags
|= OPTION_MASK_ISA_FMA_SET
;
614 opts
->x_ix86_isa_flags_explicit
|= OPTION_MASK_ISA_FMA_SET
;
618 opts
->x_ix86_isa_flags
&= ~OPTION_MASK_ISA_FMA_UNSET
;
619 opts
->x_ix86_isa_flags_explicit
|= OPTION_MASK_ISA_FMA_UNSET
;
626 opts
->x_ix86_isa_flags
|= OPTION_MASK_ISA_RTM_SET
;
627 opts
->x_ix86_isa_flags_explicit
|= OPTION_MASK_ISA_RTM_SET
;
631 opts
->x_ix86_isa_flags
&= ~OPTION_MASK_ISA_RTM_UNSET
;
632 opts
->x_ix86_isa_flags_explicit
|= OPTION_MASK_ISA_RTM_UNSET
;
637 opts
->x_ix86_isa_flags
|= OPTION_MASK_ISA_SSE4_SET
;
638 opts
->x_ix86_isa_flags_explicit
|= OPTION_MASK_ISA_SSE4_SET
;
642 opts
->x_ix86_isa_flags
&= ~OPTION_MASK_ISA_SSE4_UNSET
;
643 opts
->x_ix86_isa_flags_explicit
|= OPTION_MASK_ISA_SSE4_UNSET
;
649 opts
->x_ix86_isa_flags
|= OPTION_MASK_ISA_SSE4A_SET
;
650 opts
->x_ix86_isa_flags_explicit
|= OPTION_MASK_ISA_SSE4A_SET
;
654 opts
->x_ix86_isa_flags
&= ~OPTION_MASK_ISA_SSE4A_UNSET
;
655 opts
->x_ix86_isa_flags_explicit
|= OPTION_MASK_ISA_SSE4A_UNSET
;
662 opts
->x_ix86_isa_flags
|= OPTION_MASK_ISA_FMA4_SET
;
663 opts
->x_ix86_isa_flags_explicit
|= OPTION_MASK_ISA_FMA4_SET
;
667 opts
->x_ix86_isa_flags
&= ~OPTION_MASK_ISA_FMA4_UNSET
;
668 opts
->x_ix86_isa_flags_explicit
|= OPTION_MASK_ISA_FMA4_UNSET
;
675 opts
->x_ix86_isa_flags
|= OPTION_MASK_ISA_XOP_SET
;
676 opts
->x_ix86_isa_flags_explicit
|= OPTION_MASK_ISA_XOP_SET
;
680 opts
->x_ix86_isa_flags
&= ~OPTION_MASK_ISA_XOP_UNSET
;
681 opts
->x_ix86_isa_flags_explicit
|= OPTION_MASK_ISA_XOP_UNSET
;
688 opts
->x_ix86_isa_flags
|= OPTION_MASK_ISA_LWP_SET
;
689 opts
->x_ix86_isa_flags_explicit
|= OPTION_MASK_ISA_LWP_SET
;
693 opts
->x_ix86_isa_flags
&= ~OPTION_MASK_ISA_LWP_UNSET
;
694 opts
->x_ix86_isa_flags_explicit
|= OPTION_MASK_ISA_LWP_UNSET
;
701 opts
->x_ix86_isa_flags
|= OPTION_MASK_ISA_ABM_SET
;
702 opts
->x_ix86_isa_flags_explicit
|= OPTION_MASK_ISA_ABM_SET
;
706 opts
->x_ix86_isa_flags
&= ~OPTION_MASK_ISA_ABM_UNSET
;
707 opts
->x_ix86_isa_flags_explicit
|= OPTION_MASK_ISA_ABM_UNSET
;
714 opts
->x_ix86_isa_flags
|= OPTION_MASK_ISA_BMI_SET
;
715 opts
->x_ix86_isa_flags_explicit
|= OPTION_MASK_ISA_BMI_SET
;
719 opts
->x_ix86_isa_flags
&= ~OPTION_MASK_ISA_BMI_UNSET
;
720 opts
->x_ix86_isa_flags_explicit
|= OPTION_MASK_ISA_BMI_UNSET
;
727 opts
->x_ix86_isa_flags
|= OPTION_MASK_ISA_BMI2_SET
;
728 opts
->x_ix86_isa_flags_explicit
|= OPTION_MASK_ISA_BMI2_SET
;
732 opts
->x_ix86_isa_flags
&= ~OPTION_MASK_ISA_BMI2_UNSET
;
733 opts
->x_ix86_isa_flags_explicit
|= OPTION_MASK_ISA_BMI2_UNSET
;
740 opts
->x_ix86_isa_flags
|= OPTION_MASK_ISA_LZCNT_SET
;
741 opts
->x_ix86_isa_flags_explicit
|= OPTION_MASK_ISA_LZCNT_SET
;
745 opts
->x_ix86_isa_flags
&= ~OPTION_MASK_ISA_LZCNT_UNSET
;
746 opts
->x_ix86_isa_flags_explicit
|= OPTION_MASK_ISA_LZCNT_UNSET
;
753 opts
->x_ix86_isa_flags
|= OPTION_MASK_ISA_TBM_SET
;
754 opts
->x_ix86_isa_flags_explicit
|= OPTION_MASK_ISA_TBM_SET
;
758 opts
->x_ix86_isa_flags
&= ~OPTION_MASK_ISA_TBM_UNSET
;
759 opts
->x_ix86_isa_flags_explicit
|= OPTION_MASK_ISA_TBM_UNSET
;
766 opts
->x_ix86_isa_flags
|= OPTION_MASK_ISA_POPCNT_SET
;
767 opts
->x_ix86_isa_flags_explicit
|= OPTION_MASK_ISA_POPCNT_SET
;
771 opts
->x_ix86_isa_flags
&= ~OPTION_MASK_ISA_POPCNT_UNSET
;
772 opts
->x_ix86_isa_flags_explicit
|= OPTION_MASK_ISA_POPCNT_UNSET
;
779 opts
->x_ix86_isa_flags
|= OPTION_MASK_ISA_SAHF_SET
;
780 opts
->x_ix86_isa_flags_explicit
|= OPTION_MASK_ISA_SAHF_SET
;
784 opts
->x_ix86_isa_flags
&= ~OPTION_MASK_ISA_SAHF_UNSET
;
785 opts
->x_ix86_isa_flags_explicit
|= OPTION_MASK_ISA_SAHF_UNSET
;
792 opts
->x_ix86_isa_flags
|= OPTION_MASK_ISA_CX16_SET
;
793 opts
->x_ix86_isa_flags_explicit
|= OPTION_MASK_ISA_CX16_SET
;
797 opts
->x_ix86_isa_flags
&= ~OPTION_MASK_ISA_CX16_UNSET
;
798 opts
->x_ix86_isa_flags_explicit
|= OPTION_MASK_ISA_CX16_UNSET
;
805 opts
->x_ix86_isa_flags
|= OPTION_MASK_ISA_MOVBE_SET
;
806 opts
->x_ix86_isa_flags_explicit
|= OPTION_MASK_ISA_MOVBE_SET
;
810 opts
->x_ix86_isa_flags
&= ~OPTION_MASK_ISA_MOVBE_UNSET
;
811 opts
->x_ix86_isa_flags_explicit
|= OPTION_MASK_ISA_MOVBE_UNSET
;
818 opts
->x_ix86_isa_flags
|= OPTION_MASK_ISA_CRC32_SET
;
819 opts
->x_ix86_isa_flags_explicit
|= OPTION_MASK_ISA_CRC32_SET
;
823 opts
->x_ix86_isa_flags
&= ~OPTION_MASK_ISA_CRC32_UNSET
;
824 opts
->x_ix86_isa_flags_explicit
|= OPTION_MASK_ISA_CRC32_UNSET
;
831 opts
->x_ix86_isa_flags
|= OPTION_MASK_ISA_AES_SET
;
832 opts
->x_ix86_isa_flags_explicit
|= OPTION_MASK_ISA_AES_SET
;
836 opts
->x_ix86_isa_flags
&= ~OPTION_MASK_ISA_AES_UNSET
;
837 opts
->x_ix86_isa_flags_explicit
|= OPTION_MASK_ISA_AES_UNSET
;
844 opts
->x_ix86_isa_flags
|= OPTION_MASK_ISA_SHA_SET
;
845 opts
->x_ix86_isa_flags_explicit
|= OPTION_MASK_ISA_SHA_SET
;
849 opts
->x_ix86_isa_flags
&= ~OPTION_MASK_ISA_SHA_UNSET
;
850 opts
->x_ix86_isa_flags_explicit
|= OPTION_MASK_ISA_SHA_UNSET
;
857 opts
->x_ix86_isa_flags
|= OPTION_MASK_ISA_PCLMUL_SET
;
858 opts
->x_ix86_isa_flags_explicit
|= OPTION_MASK_ISA_PCLMUL_SET
;
862 opts
->x_ix86_isa_flags
&= ~OPTION_MASK_ISA_PCLMUL_UNSET
;
863 opts
->x_ix86_isa_flags_explicit
|= OPTION_MASK_ISA_PCLMUL_UNSET
;
870 opts
->x_ix86_isa_flags
|= OPTION_MASK_ISA_FSGSBASE_SET
;
871 opts
->x_ix86_isa_flags_explicit
|= OPTION_MASK_ISA_FSGSBASE_SET
;
875 opts
->x_ix86_isa_flags
&= ~OPTION_MASK_ISA_FSGSBASE_UNSET
;
876 opts
->x_ix86_isa_flags_explicit
|= OPTION_MASK_ISA_FSGSBASE_UNSET
;
883 opts
->x_ix86_isa_flags
|= OPTION_MASK_ISA_RDRND_SET
;
884 opts
->x_ix86_isa_flags_explicit
|= OPTION_MASK_ISA_RDRND_SET
;
888 opts
->x_ix86_isa_flags
&= ~OPTION_MASK_ISA_RDRND_UNSET
;
889 opts
->x_ix86_isa_flags_explicit
|= OPTION_MASK_ISA_RDRND_UNSET
;
896 opts
->x_ix86_isa_flags
|= OPTION_MASK_ISA_F16C_SET
;
897 opts
->x_ix86_isa_flags_explicit
|= OPTION_MASK_ISA_F16C_SET
;
901 opts
->x_ix86_isa_flags
&= ~OPTION_MASK_ISA_F16C_UNSET
;
902 opts
->x_ix86_isa_flags_explicit
|= OPTION_MASK_ISA_F16C_UNSET
;
909 opts
->x_ix86_isa_flags
|= OPTION_MASK_ISA_FXSR_SET
;
910 opts
->x_ix86_isa_flags_explicit
|= OPTION_MASK_ISA_FXSR_SET
;
914 opts
->x_ix86_isa_flags
&= ~OPTION_MASK_ISA_FXSR_UNSET
;
915 opts
->x_ix86_isa_flags_explicit
|= OPTION_MASK_ISA_FXSR_UNSET
;
922 opts
->x_ix86_isa_flags
|= OPTION_MASK_ISA_XSAVE_SET
;
923 opts
->x_ix86_isa_flags_explicit
|= OPTION_MASK_ISA_XSAVE_SET
;
927 opts
->x_ix86_isa_flags
&= ~OPTION_MASK_ISA_XSAVE_UNSET
;
928 opts
->x_ix86_isa_flags_explicit
|= OPTION_MASK_ISA_XSAVE_UNSET
;
935 opts
->x_ix86_isa_flags
|= OPTION_MASK_ISA_XSAVEOPT_SET
;
936 opts
->x_ix86_isa_flags_explicit
|= OPTION_MASK_ISA_XSAVEOPT_SET
;
940 opts
->x_ix86_isa_flags
&= ~OPTION_MASK_ISA_XSAVEOPT_UNSET
;
941 opts
->x_ix86_isa_flags_explicit
|= OPTION_MASK_ISA_XSAVEOPT_UNSET
;
948 opts
->x_ix86_isa_flags
|= OPTION_MASK_ISA_XSAVEC_SET
;
949 opts
->x_ix86_isa_flags_explicit
|= OPTION_MASK_ISA_XSAVEC_SET
;
953 opts
->x_ix86_isa_flags
&= ~OPTION_MASK_ISA_XSAVEC_UNSET
;
954 opts
->x_ix86_isa_flags_explicit
|= OPTION_MASK_ISA_XSAVEC_UNSET
;
961 opts
->x_ix86_isa_flags
|= OPTION_MASK_ISA_XSAVES_SET
;
962 opts
->x_ix86_isa_flags_explicit
|= OPTION_MASK_ISA_XSAVES_SET
;
966 opts
->x_ix86_isa_flags
&= ~OPTION_MASK_ISA_XSAVES_UNSET
;
967 opts
->x_ix86_isa_flags_explicit
|= OPTION_MASK_ISA_XSAVES_UNSET
;
974 opts
->x_ix86_isa_flags
|= OPTION_MASK_ISA_RDSEED_SET
;
975 opts
->x_ix86_isa_flags_explicit
|= OPTION_MASK_ISA_RDSEED_SET
;
979 opts
->x_ix86_isa_flags
&= ~OPTION_MASK_ISA_RDSEED_UNSET
;
980 opts
->x_ix86_isa_flags_explicit
|= OPTION_MASK_ISA_RDSEED_UNSET
;
987 opts
->x_ix86_isa_flags
|= OPTION_MASK_ISA_PRFCHW_SET
;
988 opts
->x_ix86_isa_flags_explicit
|= OPTION_MASK_ISA_PRFCHW_SET
;
992 opts
->x_ix86_isa_flags
&= ~OPTION_MASK_ISA_PRFCHW_UNSET
;
993 opts
->x_ix86_isa_flags_explicit
|= OPTION_MASK_ISA_PRFCHW_UNSET
;
1000 opts
->x_ix86_isa_flags
|= OPTION_MASK_ISA_ADX_SET
;
1001 opts
->x_ix86_isa_flags_explicit
|= OPTION_MASK_ISA_ADX_SET
;
1005 opts
->x_ix86_isa_flags
&= ~OPTION_MASK_ISA_ADX_UNSET
;
1006 opts
->x_ix86_isa_flags_explicit
|= OPTION_MASK_ISA_ADX_UNSET
;
1010 case OPT_mprefetchwt1
:
1013 opts
->x_ix86_isa_flags
|= OPTION_MASK_ISA_PREFETCHWT1_SET
;
1014 opts
->x_ix86_isa_flags_explicit
|= OPTION_MASK_ISA_PREFETCHWT1_SET
;
1018 opts
->x_ix86_isa_flags
&= ~OPTION_MASK_ISA_PREFETCHWT1_UNSET
;
1019 opts
->x_ix86_isa_flags_explicit
|= OPTION_MASK_ISA_PREFETCHWT1_UNSET
;
1023 case OPT_mclflushopt
:
1026 opts
->x_ix86_isa_flags
|= OPTION_MASK_ISA_CLFLUSHOPT_SET
;
1027 opts
->x_ix86_isa_flags_explicit
|= OPTION_MASK_ISA_CLFLUSHOPT_SET
;
1031 opts
->x_ix86_isa_flags
&= ~OPTION_MASK_ISA_CLFLUSHOPT_UNSET
;
1032 opts
->x_ix86_isa_flags_explicit
|= OPTION_MASK_ISA_CLFLUSHOPT_UNSET
;
1039 opts
->x_ix86_isa_flags
|= OPTION_MASK_ISA_CLWB_SET
;
1040 opts
->x_ix86_isa_flags_explicit
|= OPTION_MASK_ISA_CLWB_SET
;
1044 opts
->x_ix86_isa_flags
&= ~OPTION_MASK_ISA_CLWB_UNSET
;
1045 opts
->x_ix86_isa_flags_explicit
|= OPTION_MASK_ISA_CLWB_UNSET
;
1052 opts
->x_ix86_isa_flags
|= OPTION_MASK_ISA_MWAITX_SET
;
1053 opts
->x_ix86_isa_flags_explicit
|= OPTION_MASK_ISA_MWAITX_SET
;
1057 opts
->x_ix86_isa_flags
&= ~OPTION_MASK_ISA_MWAITX_UNSET
;
1058 opts
->x_ix86_isa_flags_explicit
|= OPTION_MASK_ISA_MWAITX_UNSET
;
1065 opts
->x_ix86_isa_flags
|= OPTION_MASK_ISA_CLZERO_SET
;
1066 opts
->x_ix86_isa_flags_explicit
|= OPTION_MASK_ISA_CLZERO_SET
;
1070 opts
->x_ix86_isa_flags
&= ~OPTION_MASK_ISA_CLZERO_UNSET
;
1071 opts
->x_ix86_isa_flags_explicit
|= OPTION_MASK_ISA_CLZERO_UNSET
;
1078 opts
->x_ix86_isa_flags
|= OPTION_MASK_ISA_PKU_SET
;
1079 opts
->x_ix86_isa_flags_explicit
|= OPTION_MASK_ISA_PKU_SET
;
1083 opts
->x_ix86_isa_flags
&= ~OPTION_MASK_ISA_PKU_UNSET
;
1084 opts
->x_ix86_isa_flags_explicit
|= OPTION_MASK_ISA_PKU_UNSET
;
1089 /* Comes from final.c -- no real reason to change it. */
1090 #define MAX_CODE_ALIGN 16
1092 case OPT_malign_loops_
:
1093 warning_at (loc
, 0, "-malign-loops is obsolete, use -falign-loops");
1094 if (value
> MAX_CODE_ALIGN
)
1095 error_at (loc
, "-malign-loops=%d is not between 0 and %d",
1096 value
, MAX_CODE_ALIGN
);
1098 opts
->x_align_loops
= 1 << value
;
1101 case OPT_malign_jumps_
:
1102 warning_at (loc
, 0, "-malign-jumps is obsolete, use -falign-jumps");
1103 if (value
> MAX_CODE_ALIGN
)
1104 error_at (loc
, "-malign-jumps=%d is not between 0 and %d",
1105 value
, MAX_CODE_ALIGN
);
1107 opts
->x_align_jumps
= 1 << value
;
1110 case OPT_malign_functions_
:
1112 "-malign-functions is obsolete, use -falign-functions");
1113 if (value
> MAX_CODE_ALIGN
)
1114 error_at (loc
, "-malign-functions=%d is not between 0 and %d",
1115 value
, MAX_CODE_ALIGN
);
1117 opts
->x_align_functions
= 1 << value
;
1120 case OPT_mbranch_cost_
:
1123 error_at (loc
, "-mbranch-cost=%d is not between 0 and 5", value
);
1124 opts
->x_ix86_branch_cost
= 5;
1133 static const struct default_options ix86_option_optimization_table
[] =
1135 /* Enable redundant extension instructions removal at -O2 and higher. */
1136 { OPT_LEVELS_2_PLUS
, OPT_free
, NULL
, 1 },
1137 /* Enable function splitting at -O2 and higher. */
1138 { OPT_LEVELS_2_PLUS
, OPT_freorder_blocks_and_partition
, NULL
, 1 },
1139 /* The STC algorithm produces the smallest code at -Os, for x86. */
1140 { OPT_LEVELS_2_PLUS
, OPT_freorder_blocks_algorithm_
, NULL
,
1141 REORDER_BLOCKS_ALGORITHM_STC
},
1142 /* Turn off -fschedule-insns by default. It tends to make the
1143 problem with not enough registers even worse. */
1144 { OPT_LEVELS_ALL
, OPT_fschedule_insns
, NULL
, 0 },
1146 #ifdef SUBTARGET_OPTIMIZATION_OPTIONS
1147 SUBTARGET_OPTIMIZATION_OPTIONS
,
1149 { OPT_LEVELS_NONE
, 0, NULL
, 0 }
1152 /* Implement TARGET_OPTION_INIT_STRUCT. */
1155 ix86_option_init_struct (struct gcc_options
*opts
)
1158 /* The Darwin libraries never set errno, so we might as well
1159 avoid calling them when that's the only reason we would. */
1160 opts
->x_flag_errno_math
= 0;
1162 opts
->x_flag_pcc_struct_return
= 2;
1163 opts
->x_flag_asynchronous_unwind_tables
= 2;
1166 /* On the x86 -fsplit-stack and -fstack-protector both use the same
1167 field in the TCB, so they can not be used together. */
1170 ix86_supports_split_stack (bool report ATTRIBUTE_UNUSED
,
1171 struct gcc_options
*opts ATTRIBUTE_UNUSED
)
1175 #ifndef TARGET_THREAD_SPLIT_STACK_OFFSET
1177 error ("%<-fsplit-stack%> currently only supported on GNU/Linux");
1180 if (!HAVE_GAS_CFI_PERSONALITY_DIRECTIVE
)
1183 error ("%<-fsplit-stack%> requires "
1184 "assembler support for CFI directives");
1192 /* Implement TARGET_EXCEPT_UNWIND_INFO. */
1194 static enum unwind_info_type
1195 i386_except_unwind_info (struct gcc_options
*opts
)
1197 /* Honor the --enable-sjlj-exceptions configure switch. */
1198 #ifdef CONFIG_SJLJ_EXCEPTIONS
1199 if (CONFIG_SJLJ_EXCEPTIONS
)
1203 /* On windows 64, prefer SEH exceptions over anything else. */
1204 if (TARGET_64BIT
&& DEFAULT_ABI
== MS_ABI
&& opts
->x_flag_unwind_tables
)
1207 if (DWARF2_UNWIND_INFO
)
1213 #undef TARGET_EXCEPT_UNWIND_INFO
1214 #define TARGET_EXCEPT_UNWIND_INFO i386_except_unwind_info
1216 #undef TARGET_DEFAULT_TARGET_FLAGS
1217 #define TARGET_DEFAULT_TARGET_FLAGS \
1219 | TARGET_SUBTARGET_DEFAULT \
1220 | TARGET_TLS_DIRECT_SEG_REFS_DEFAULT)
1222 #undef TARGET_HANDLE_OPTION
1223 #define TARGET_HANDLE_OPTION ix86_handle_option
1225 #undef TARGET_OPTION_OPTIMIZATION_TABLE
1226 #define TARGET_OPTION_OPTIMIZATION_TABLE ix86_option_optimization_table
1227 #undef TARGET_OPTION_INIT_STRUCT
1228 #define TARGET_OPTION_INIT_STRUCT ix86_option_init_struct
1230 #undef TARGET_SUPPORTS_SPLIT_STACK
1231 #define TARGET_SUPPORTS_SPLIT_STACK ix86_supports_split_stack
1233 struct gcc_targetm_common targetm_common
= TARGETM_COMMON_INITIALIZER
;