Line data Source code
1 : /* IA-32 common hooks.
2 : Copyright (C) 1988-2026 Free Software Foundation, Inc.
3 :
4 : This file is part of GCC.
5 :
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)
9 : any later version.
10 :
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.
15 :
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/>. */
19 :
20 : #include "config.h"
21 : #include "system.h"
22 : #include "coretypes.h"
23 : #include "diagnostic-core.h"
24 : #include "tm.h"
25 : #include "memmodel.h"
26 : #include "tm_p.h"
27 : #include "common/common-target.h"
28 : #include "common/common-target-def.h"
29 : #include "opts.h"
30 : #include "flags.h"
31 :
32 : /* Define a set of ISAs which are available when a given ISA is
33 : enabled. MMX and SSE ISAs are handled separately. */
34 :
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)
40 :
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_SET)
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_AVX512DQ_SET \
68 : (OPTION_MASK_ISA_AVX512DQ | OPTION_MASK_ISA_AVX512F_SET)
69 : #define OPTION_MASK_ISA_AVX512BW_SET \
70 : (OPTION_MASK_ISA_AVX512BW | OPTION_MASK_ISA_AVX512F_SET)
71 : #define OPTION_MASK_ISA_AVX512VL_SET \
72 : (OPTION_MASK_ISA_AVX512VL | OPTION_MASK_ISA_AVX512F_SET)
73 : #define OPTION_MASK_ISA_AVX512IFMA_SET \
74 : (OPTION_MASK_ISA_AVX512IFMA | OPTION_MASK_ISA_AVX512F_SET)
75 : #define OPTION_MASK_ISA2_AVXIFMA_SET OPTION_MASK_ISA2_AVXIFMA
76 : #define OPTION_MASK_ISA_AVX512VBMI_SET \
77 : (OPTION_MASK_ISA_AVX512VBMI | OPTION_MASK_ISA_AVX512BW_SET)
78 : #define OPTION_MASK_ISA_AVX512VBMI2_SET \
79 : (OPTION_MASK_ISA_AVX512VBMI2 | OPTION_MASK_ISA_AVX512BW_SET)
80 : #define OPTION_MASK_ISA_AVX512FP16_SET OPTION_MASK_ISA_AVX512BW_SET
81 : #define OPTION_MASK_ISA2_AVX512FP16_SET OPTION_MASK_ISA2_AVX512FP16
82 : #define OPTION_MASK_ISA_AVX512VNNI_SET \
83 : (OPTION_MASK_ISA_AVX512VNNI | OPTION_MASK_ISA_AVX512F_SET)
84 : #define OPTION_MASK_ISA2_AVXVNNI_SET OPTION_MASK_ISA2_AVXVNNI
85 : #define OPTION_MASK_ISA_AVX512VPOPCNTDQ_SET \
86 : (OPTION_MASK_ISA_AVX512VPOPCNTDQ | OPTION_MASK_ISA_AVX512F_SET)
87 : #define OPTION_MASK_ISA_AVX512BITALG_SET \
88 : (OPTION_MASK_ISA_AVX512BITALG | OPTION_MASK_ISA_AVX512BW_SET)
89 : #define OPTION_MASK_ISA2_AVX512BF16_SET OPTION_MASK_ISA2_AVX512BF16
90 : #define OPTION_MASK_ISA_RTM_SET OPTION_MASK_ISA_RTM
91 : #define OPTION_MASK_ISA_PRFCHW_SET OPTION_MASK_ISA_PRFCHW
92 : #define OPTION_MASK_ISA_RDSEED_SET OPTION_MASK_ISA_RDSEED
93 : #define OPTION_MASK_ISA_ADX_SET OPTION_MASK_ISA_ADX
94 : #define OPTION_MASK_ISA_CLFLUSHOPT_SET OPTION_MASK_ISA_CLFLUSHOPT
95 : #define OPTION_MASK_ISA_XSAVES_SET \
96 : (OPTION_MASK_ISA_XSAVES | OPTION_MASK_ISA_XSAVE_SET)
97 : #define OPTION_MASK_ISA_XSAVEC_SET \
98 : (OPTION_MASK_ISA_XSAVEC | OPTION_MASK_ISA_XSAVE_SET)
99 : #define OPTION_MASK_ISA_CLWB_SET OPTION_MASK_ISA_CLWB
100 : #define OPTION_MASK_ISA2_AVX512VP2INTERSECT_SET OPTION_MASK_ISA2_AVX512VP2INTERSECT
101 : #define OPTION_MASK_ISA2_AMX_TILE_SET OPTION_MASK_ISA2_AMX_TILE
102 : #define OPTION_MASK_ISA2_AMX_INT8_SET \
103 : (OPTION_MASK_ISA2_AMX_TILE_SET | OPTION_MASK_ISA2_AMX_INT8)
104 : #define OPTION_MASK_ISA2_AMX_BF16_SET \
105 : (OPTION_MASK_ISA2_AMX_TILE_SET | OPTION_MASK_ISA2_AMX_BF16)
106 : #define OPTION_MASK_ISA2_AVXVNNIINT8_SET OPTION_MASK_ISA2_AVXVNNIINT8
107 : #define OPTION_MASK_ISA2_AVXNECONVERT_SET OPTION_MASK_ISA2_AVXNECONVERT
108 : #define OPTION_MASK_ISA2_CMPCCXADD_SET OPTION_MASK_ISA2_CMPCCXADD
109 : #define OPTION_MASK_ISA2_AMX_FP16_SET \
110 : (OPTION_MASK_ISA2_AMX_TILE_SET | OPTION_MASK_ISA2_AMX_FP16)
111 : #define OPTION_MASK_ISA2_PREFETCHI_SET OPTION_MASK_ISA2_PREFETCHI
112 : #define OPTION_MASK_ISA2_RAOINT_SET OPTION_MASK_ISA2_RAOINT
113 : #define OPTION_MASK_ISA2_AMX_COMPLEX_SET \
114 : (OPTION_MASK_ISA2_AMX_TILE_SET | OPTION_MASK_ISA2_AMX_COMPLEX)
115 : #define OPTION_MASK_ISA2_AVXVNNIINT16_SET OPTION_MASK_ISA2_AVXVNNIINT16
116 : #define OPTION_MASK_ISA2_SM3_SET OPTION_MASK_ISA2_SM3
117 : #define OPTION_MASK_ISA2_SHA512_SET OPTION_MASK_ISA2_SHA512
118 : #define OPTION_MASK_ISA2_SM4_SET OPTION_MASK_ISA2_SM4
119 : #define OPTION_MASK_ISA2_APX_F_SET OPTION_MASK_ISA2_APX_F
120 : #define OPTION_MASK_ISA2_USER_MSR_SET OPTION_MASK_ISA2_USER_MSR
121 : #define OPTION_MASK_ISA_AVX10_1_SET \
122 : (OPTION_MASK_ISA_AVX512F_SET | OPTION_MASK_ISA_AVX512CD_SET \
123 : | OPTION_MASK_ISA_AVX512DQ_SET | OPTION_MASK_ISA_AVX512BW_SET \
124 : | OPTION_MASK_ISA_AVX512VL_SET | OPTION_MASK_ISA_AVX512IFMA_SET \
125 : | OPTION_MASK_ISA_AVX512VBMI_SET | OPTION_MASK_ISA_AVX512VBMI2_SET \
126 : | OPTION_MASK_ISA_AVX512VNNI_SET | OPTION_MASK_ISA_AVX512VPOPCNTDQ_SET \
127 : | OPTION_MASK_ISA_AVX512BITALG_SET)
128 : #define OPTION_MASK_ISA2_AVX10_1_SET \
129 : (OPTION_MASK_ISA2_AVX512FP16_SET | OPTION_MASK_ISA2_AVX512BF16_SET \
130 : | OPTION_MASK_ISA2_AVX10_1)
131 : #define OPTION_MASK_ISA2_AVX10_2_SET \
132 : (OPTION_MASK_ISA2_AVX10_1_SET | OPTION_MASK_ISA2_AVX10_2)
133 : #define OPTION_MASK_ISA2_AMX_AVX512_SET \
134 : (OPTION_MASK_ISA2_AMX_TILE_SET | OPTION_MASK_ISA2_AMX_AVX512)
135 : #define OPTION_MASK_ISA2_AMX_TF32_SET \
136 : (OPTION_MASK_ISA2_AMX_TILE_SET | OPTION_MASK_ISA2_AMX_TF32)
137 : #define OPTION_MASK_ISA2_AMX_FP8_SET \
138 : (OPTION_MASK_ISA2_AMX_TILE_SET | OPTION_MASK_ISA2_AMX_FP8)
139 : #define OPTION_MASK_ISA2_MOVRS_SET OPTION_MASK_ISA2_MOVRS
140 : #define OPTION_MASK_ISA2_AMX_MOVRS_SET \
141 : (OPTION_MASK_ISA2_AMX_TILE_SET | OPTION_MASK_ISA2_AMX_MOVRS)
142 : #define OPTION_MASK_ISA2_AVX512BMM_SET OPTION_MASK_ISA2_AVX512BMM
143 :
144 : /* SSE4 includes both SSE4.1 and SSE4.2. -msse4 should be the same
145 : as -msse4.2. */
146 : #define OPTION_MASK_ISA_SSE4_SET OPTION_MASK_ISA_SSE4_2_SET
147 :
148 : #define OPTION_MASK_ISA_SSE4A_SET \
149 : (OPTION_MASK_ISA_SSE4A | OPTION_MASK_ISA_SSE3_SET)
150 : #define OPTION_MASK_ISA_FMA4_SET \
151 : (OPTION_MASK_ISA_FMA4 | OPTION_MASK_ISA_SSE4A_SET \
152 : | OPTION_MASK_ISA_AVX_SET)
153 : #define OPTION_MASK_ISA_XOP_SET \
154 : (OPTION_MASK_ISA_XOP | OPTION_MASK_ISA_FMA4_SET)
155 : #define OPTION_MASK_ISA_LWP_SET \
156 : OPTION_MASK_ISA_LWP
157 :
158 : /* AES, SHA and PCLMUL need SSE2 because they use xmm registers. */
159 : #define OPTION_MASK_ISA_AES_SET \
160 : (OPTION_MASK_ISA_AES | OPTION_MASK_ISA_SSE2_SET)
161 : #define OPTION_MASK_ISA_SHA_SET \
162 : (OPTION_MASK_ISA_SHA | OPTION_MASK_ISA_SSE2_SET)
163 : #define OPTION_MASK_ISA_PCLMUL_SET \
164 : (OPTION_MASK_ISA_PCLMUL | OPTION_MASK_ISA_SSE2_SET)
165 :
166 : #define OPTION_MASK_ISA_ABM_SET \
167 : (OPTION_MASK_ISA_ABM | OPTION_MASK_ISA_POPCNT_SET)
168 :
169 : #define OPTION_MASK_ISA2_PCONFIG_SET OPTION_MASK_ISA2_PCONFIG
170 : #define OPTION_MASK_ISA2_WBNOINVD_SET OPTION_MASK_ISA2_WBNOINVD
171 : #define OPTION_MASK_ISA2_SGX_SET OPTION_MASK_ISA2_SGX
172 : #define OPTION_MASK_ISA_BMI_SET OPTION_MASK_ISA_BMI
173 : #define OPTION_MASK_ISA_BMI2_SET OPTION_MASK_ISA_BMI2
174 : #define OPTION_MASK_ISA_LZCNT_SET OPTION_MASK_ISA_LZCNT
175 : #define OPTION_MASK_ISA_TBM_SET OPTION_MASK_ISA_TBM
176 : #define OPTION_MASK_ISA_POPCNT_SET OPTION_MASK_ISA_POPCNT
177 : #define OPTION_MASK_ISA2_CX16_SET OPTION_MASK_ISA2_CX16
178 : #define OPTION_MASK_ISA_SAHF_SET OPTION_MASK_ISA_SAHF
179 : #define OPTION_MASK_ISA2_MOVBE_SET OPTION_MASK_ISA2_MOVBE
180 : #define OPTION_MASK_ISA_CRC32_SET OPTION_MASK_ISA_CRC32
181 :
182 : #define OPTION_MASK_ISA_FSGSBASE_SET OPTION_MASK_ISA_FSGSBASE
183 : #define OPTION_MASK_ISA_RDRND_SET OPTION_MASK_ISA_RDRND
184 : #define OPTION_MASK_ISA2_PTWRITE_SET OPTION_MASK_ISA2_PTWRITE
185 : #define OPTION_MASK_ISA_F16C_SET \
186 : (OPTION_MASK_ISA_F16C | OPTION_MASK_ISA_AVX_SET)
187 : #define OPTION_MASK_ISA2_MWAITX_SET OPTION_MASK_ISA2_MWAITX
188 : #define OPTION_MASK_ISA2_MWAIT_SET OPTION_MASK_ISA2_MWAIT
189 : #define OPTION_MASK_ISA2_CLZERO_SET OPTION_MASK_ISA2_CLZERO
190 : #define OPTION_MASK_ISA_PKU_SET OPTION_MASK_ISA_PKU
191 : #define OPTION_MASK_ISA2_RDPID_SET OPTION_MASK_ISA2_RDPID
192 : #define OPTION_MASK_ISA_GFNI_SET OPTION_MASK_ISA_GFNI
193 : #define OPTION_MASK_ISA_SHSTK_SET OPTION_MASK_ISA_SHSTK
194 : #define OPTION_MASK_ISA2_VAES_SET OPTION_MASK_ISA2_VAES
195 : #define OPTION_MASK_ISA_VPCLMULQDQ_SET \
196 : (OPTION_MASK_ISA_VPCLMULQDQ | OPTION_MASK_ISA_PCLMUL_SET \
197 : | OPTION_MASK_ISA_AVX_SET)
198 : #define OPTION_MASK_ISA_MOVDIRI_SET OPTION_MASK_ISA_MOVDIRI
199 : #define OPTION_MASK_ISA2_MOVDIR64B_SET OPTION_MASK_ISA2_MOVDIR64B
200 : #define OPTION_MASK_ISA2_WAITPKG_SET OPTION_MASK_ISA2_WAITPKG
201 : #define OPTION_MASK_ISA2_CLDEMOTE_SET OPTION_MASK_ISA2_CLDEMOTE
202 : #define OPTION_MASK_ISA2_ENQCMD_SET OPTION_MASK_ISA2_ENQCMD
203 : #define OPTION_MASK_ISA2_SERIALIZE_SET OPTION_MASK_ISA2_SERIALIZE
204 : #define OPTION_MASK_ISA2_TSXLDTRK_SET OPTION_MASK_ISA2_TSXLDTRK
205 : #define OPTION_MASK_ISA2_UINTR_SET OPTION_MASK_ISA2_UINTR
206 : #define OPTION_MASK_ISA2_HRESET_SET OPTION_MASK_ISA2_HRESET
207 : #define OPTION_MASK_ISA2_KL_SET OPTION_MASK_ISA2_KL
208 : #define OPTION_MASK_ISA2_WIDEKL_SET \
209 : (OPTION_MASK_ISA2_WIDEKL | OPTION_MASK_ISA2_KL_SET)
210 :
211 : /* Define a set of ISAs which aren't available when a given ISA is
212 : disabled. MMX and SSE ISAs are handled separately. */
213 :
214 : #define OPTION_MASK_ISA_MMX_UNSET \
215 : (OPTION_MASK_ISA_MMX | OPTION_MASK_ISA_3DNOW_UNSET)
216 : #define OPTION_MASK_ISA_3DNOW_UNSET \
217 : (OPTION_MASK_ISA_3DNOW | OPTION_MASK_ISA_3DNOW_A_UNSET)
218 : #define OPTION_MASK_ISA_3DNOW_A_UNSET OPTION_MASK_ISA_3DNOW_A
219 :
220 : #define OPTION_MASK_ISA_SSE_UNSET \
221 : (OPTION_MASK_ISA_SSE | OPTION_MASK_ISA_SSE2_UNSET)
222 : #define OPTION_MASK_ISA_SSE2_UNSET \
223 : (OPTION_MASK_ISA_SSE2 | OPTION_MASK_ISA_SSE3_UNSET)
224 : #define OPTION_MASK_ISA_SSE3_UNSET \
225 : (OPTION_MASK_ISA_SSE3 \
226 : | OPTION_MASK_ISA_SSSE3_UNSET \
227 : | OPTION_MASK_ISA_SSE4A_UNSET )
228 : #define OPTION_MASK_ISA_SSSE3_UNSET \
229 : (OPTION_MASK_ISA_SSSE3 | OPTION_MASK_ISA_SSE4_1_UNSET)
230 : #define OPTION_MASK_ISA_SSE4_1_UNSET \
231 : (OPTION_MASK_ISA_SSE4_1 | OPTION_MASK_ISA_SSE4_2_UNSET)
232 : #define OPTION_MASK_ISA_SSE4_2_UNSET \
233 : (OPTION_MASK_ISA_SSE4_2 | OPTION_MASK_ISA_AVX_UNSET )
234 : #define OPTION_MASK_ISA_AVX_UNSET \
235 : (OPTION_MASK_ISA_AVX | OPTION_MASK_ISA_FMA_UNSET \
236 : | OPTION_MASK_ISA_FMA4_UNSET | OPTION_MASK_ISA_F16C_UNSET \
237 : | OPTION_MASK_ISA_AVX2_UNSET | OPTION_MASK_ISA_VPCLMULQDQ_UNSET)
238 : #define OPTION_MASK_ISA_FMA_UNSET OPTION_MASK_ISA_FMA
239 : #define OPTION_MASK_ISA_FXSR_UNSET OPTION_MASK_ISA_FXSR
240 : #define OPTION_MASK_ISA_XSAVE_UNSET \
241 : (OPTION_MASK_ISA_XSAVE | OPTION_MASK_ISA_XSAVEOPT_UNSET \
242 : | OPTION_MASK_ISA_XSAVES_UNSET | OPTION_MASK_ISA_XSAVEC_UNSET \
243 : | OPTION_MASK_ISA_AVX_UNSET)
244 : #define OPTION_MASK_ISA2_XSAVE_UNSET \
245 : (OPTION_MASK_ISA2_AVX2_UNSET | OPTION_MASK_ISA2_AMX_TILE_UNSET)
246 : #define OPTION_MASK_ISA_XSAVEOPT_UNSET OPTION_MASK_ISA_XSAVEOPT
247 : #define OPTION_MASK_ISA_AVX2_UNSET \
248 : (OPTION_MASK_ISA_AVX2 | OPTION_MASK_ISA_AVX512F_UNSET)
249 : #define OPTION_MASK_ISA2_AVX2_UNSET \
250 : (OPTION_MASK_ISA2_AVXIFMA_UNSET | OPTION_MASK_ISA2_AVXVNNI_UNSET \
251 : | OPTION_MASK_ISA2_AVXVNNIINT8_UNSET | OPTION_MASK_ISA2_AVXNECONVERT_UNSET \
252 : | OPTION_MASK_ISA2_AVXVNNIINT16_UNSET | OPTION_MASK_ISA2_AVX512F_UNSET)
253 : #define OPTION_MASK_ISA_AVX512F_UNSET \
254 : (OPTION_MASK_ISA_AVX512F | OPTION_MASK_ISA_AVX512CD_UNSET \
255 : | OPTION_MASK_ISA_AVX512DQ_UNSET | OPTION_MASK_ISA_AVX512BW_UNSET \
256 : | OPTION_MASK_ISA_AVX512VL_UNSET | OPTION_MASK_ISA_AVX512IFMA_UNSET \
257 : | OPTION_MASK_ISA_AVX512VNNI_UNSET \
258 : | OPTION_MASK_ISA_AVX512VPOPCNTDQ_UNSET)
259 : #define OPTION_MASK_ISA_AVX512CD_UNSET OPTION_MASK_ISA_AVX512CD
260 : #define OPTION_MASK_ISA_AVX512DQ_UNSET OPTION_MASK_ISA_AVX512DQ
261 : #define OPTION_MASK_ISA_AVX512BW_UNSET \
262 : (OPTION_MASK_ISA_AVX512BW | OPTION_MASK_ISA_AVX512VBMI_UNSET \
263 : | OPTION_MASK_ISA_AVX512VBMI2_UNSET | OPTION_MASK_ISA_AVX512BITALG_UNSET)
264 : #define OPTION_MASK_ISA_AVX512VL_UNSET OPTION_MASK_ISA_AVX512VL
265 : #define OPTION_MASK_ISA_AVX512IFMA_UNSET OPTION_MASK_ISA_AVX512IFMA
266 : #define OPTION_MASK_ISA2_AVXIFMA_UNSET OPTION_MASK_ISA2_AVXIFMA
267 : #define OPTION_MASK_ISA_AVX512VBMI_UNSET OPTION_MASK_ISA_AVX512VBMI
268 : #define OPTION_MASK_ISA_AVX512VBMI2_UNSET OPTION_MASK_ISA_AVX512VBMI2
269 : #define OPTION_MASK_ISA2_AVX512FP16_UNSET \
270 : (OPTION_MASK_ISA2_AVX512FP16 | OPTION_MASK_ISA2_AVX10_1_UNSET)
271 : #define OPTION_MASK_ISA_AVX512VNNI_UNSET OPTION_MASK_ISA_AVX512VNNI
272 : #define OPTION_MASK_ISA2_AVXVNNI_UNSET OPTION_MASK_ISA2_AVXVNNI
273 : #define OPTION_MASK_ISA_AVX512VPOPCNTDQ_UNSET OPTION_MASK_ISA_AVX512VPOPCNTDQ
274 : #define OPTION_MASK_ISA_AVX512BITALG_UNSET OPTION_MASK_ISA_AVX512BITALG
275 : #define OPTION_MASK_ISA2_AVX512BF16_UNSET \
276 : (OPTION_MASK_ISA2_AVX512BF16 | OPTION_MASK_ISA2_AVX10_1_UNSET)
277 : #define OPTION_MASK_ISA_RTM_UNSET OPTION_MASK_ISA_RTM
278 : #define OPTION_MASK_ISA_PRFCHW_UNSET OPTION_MASK_ISA_PRFCHW
279 : #define OPTION_MASK_ISA_RDSEED_UNSET OPTION_MASK_ISA_RDSEED
280 : #define OPTION_MASK_ISA_ADX_UNSET OPTION_MASK_ISA_ADX
281 : #define OPTION_MASK_ISA_CLFLUSHOPT_UNSET OPTION_MASK_ISA_CLFLUSHOPT
282 : #define OPTION_MASK_ISA_XSAVEC_UNSET OPTION_MASK_ISA_XSAVEC
283 : #define OPTION_MASK_ISA_XSAVES_UNSET OPTION_MASK_ISA_XSAVES
284 : #define OPTION_MASK_ISA_CLWB_UNSET OPTION_MASK_ISA_CLWB
285 : #define OPTION_MASK_ISA2_MWAITX_UNSET OPTION_MASK_ISA2_MWAITX
286 : #define OPTION_MASK_ISA2_MWAIT_UNSET OPTION_MASK_ISA2_MWAIT
287 : #define OPTION_MASK_ISA2_CLZERO_UNSET OPTION_MASK_ISA2_CLZERO
288 : #define OPTION_MASK_ISA_PKU_UNSET OPTION_MASK_ISA_PKU
289 : #define OPTION_MASK_ISA2_RDPID_UNSET OPTION_MASK_ISA2_RDPID
290 : #define OPTION_MASK_ISA_GFNI_UNSET OPTION_MASK_ISA_GFNI
291 : #define OPTION_MASK_ISA_SHSTK_UNSET OPTION_MASK_ISA_SHSTK
292 : #define OPTION_MASK_ISA2_VAES_UNSET OPTION_MASK_ISA2_VAES
293 : #define OPTION_MASK_ISA_VPCLMULQDQ_UNSET OPTION_MASK_ISA_VPCLMULQDQ
294 : #define OPTION_MASK_ISA_MOVDIRI_UNSET OPTION_MASK_ISA_MOVDIRI
295 : #define OPTION_MASK_ISA2_MOVDIR64B_UNSET OPTION_MASK_ISA2_MOVDIR64B
296 : #define OPTION_MASK_ISA2_WAITPKG_UNSET OPTION_MASK_ISA2_WAITPKG
297 : #define OPTION_MASK_ISA2_CLDEMOTE_UNSET OPTION_MASK_ISA2_CLDEMOTE
298 : #define OPTION_MASK_ISA2_ENQCMD_UNSET OPTION_MASK_ISA2_ENQCMD
299 : #define OPTION_MASK_ISA2_SERIALIZE_UNSET OPTION_MASK_ISA2_SERIALIZE
300 : #define OPTION_MASK_ISA2_AVX512VP2INTERSECT_UNSET OPTION_MASK_ISA2_AVX512VP2INTERSECT
301 : #define OPTION_MASK_ISA2_TSXLDTRK_UNSET OPTION_MASK_ISA2_TSXLDTRK
302 : #define OPTION_MASK_ISA2_AMX_TILE_UNSET \
303 : (OPTION_MASK_ISA2_AMX_TILE | OPTION_MASK_ISA2_AMX_INT8_UNSET \
304 : | OPTION_MASK_ISA2_AMX_BF16_UNSET | OPTION_MASK_ISA2_AMX_FP16_UNSET \
305 : | OPTION_MASK_ISA2_AMX_COMPLEX_UNSET | OPTION_MASK_ISA2_AMX_AVX512_UNSET \
306 : | OPTION_MASK_ISA2_AMX_TF32_UNSET | OPTION_MASK_ISA2_AMX_FP8_UNSET \
307 : | OPTION_MASK_ISA2_AMX_MOVRS_UNSET)
308 : #define OPTION_MASK_ISA2_AMX_INT8_UNSET OPTION_MASK_ISA2_AMX_INT8
309 : #define OPTION_MASK_ISA2_AMX_BF16_UNSET OPTION_MASK_ISA2_AMX_BF16
310 : #define OPTION_MASK_ISA2_UINTR_UNSET OPTION_MASK_ISA2_UINTR
311 : #define OPTION_MASK_ISA2_HRESET_UNSET OPTION_MASK_ISA2_HRESET
312 : #define OPTION_MASK_ISA2_KL_UNSET \
313 : (OPTION_MASK_ISA2_KL | OPTION_MASK_ISA2_WIDEKL_UNSET)
314 : #define OPTION_MASK_ISA2_WIDEKL_UNSET OPTION_MASK_ISA2_WIDEKL
315 : #define OPTION_MASK_ISA2_AVXVNNIINT8_UNSET OPTION_MASK_ISA2_AVXVNNIINT8
316 : #define OPTION_MASK_ISA2_AVXNECONVERT_UNSET OPTION_MASK_ISA2_AVXNECONVERT
317 : #define OPTION_MASK_ISA2_CMPCCXADD_UNSET OPTION_MASK_ISA2_CMPCCXADD
318 : #define OPTION_MASK_ISA2_AMX_FP16_UNSET OPTION_MASK_ISA2_AMX_FP16
319 : #define OPTION_MASK_ISA2_PREFETCHI_UNSET OPTION_MASK_ISA2_PREFETCHI
320 : #define OPTION_MASK_ISA2_RAOINT_UNSET OPTION_MASK_ISA2_RAOINT
321 : #define OPTION_MASK_ISA2_AMX_COMPLEX_UNSET OPTION_MASK_ISA2_AMX_COMPLEX
322 : #define OPTION_MASK_ISA2_AVXVNNIINT16_UNSET OPTION_MASK_ISA2_AVXVNNIINT16
323 : #define OPTION_MASK_ISA2_SM3_UNSET OPTION_MASK_ISA2_SM3
324 : #define OPTION_MASK_ISA2_SHA512_UNSET OPTION_MASK_ISA2_SHA512
325 : #define OPTION_MASK_ISA2_SM4_UNSET OPTION_MASK_ISA2_SM4
326 : #define OPTION_MASK_ISA2_APX_F_UNSET OPTION_MASK_ISA2_APX_F
327 : #define OPTION_MASK_ISA2_USER_MSR_UNSET OPTION_MASK_ISA2_USER_MSR
328 : #define OPTION_MASK_ISA2_AVX10_1_UNSET \
329 : (OPTION_MASK_ISA2_AVX10_1 | OPTION_MASK_ISA2_AVX10_2_UNSET)
330 : #define OPTION_MASK_ISA2_AVX10_2_UNSET OPTION_MASK_ISA2_AVX10_2
331 : #define OPTION_MASK_ISA2_AMX_AVX512_UNSET OPTION_MASK_ISA2_AMX_AVX512
332 : #define OPTION_MASK_ISA2_AMX_TF32_UNSET OPTION_MASK_ISA2_AMX_TF32
333 : #define OPTION_MASK_ISA2_AMX_FP8_UNSET OPTION_MASK_ISA2_AMX_FP8
334 : #define OPTION_MASK_ISA2_MOVRS_UNSET OPTION_MASK_ISA2_MOVRS
335 : #define OPTION_MASK_ISA2_AMX_MOVRS_UNSET OPTION_MASK_ISA2_AMX_MOVRS
336 : #define OPTION_MASK_ISA2_AVX512BMM_UNSET OPTION_MASK_ISA2_AVX512BMM
337 :
338 : /* SSE4 includes both SSE4.1 and SSE4.2. -mno-sse4 should the same
339 : as -mno-sse4.1. */
340 : #define OPTION_MASK_ISA_SSE4_UNSET OPTION_MASK_ISA_SSE4_1_UNSET
341 :
342 : #define OPTION_MASK_ISA_SSE4A_UNSET \
343 : (OPTION_MASK_ISA_SSE4A | OPTION_MASK_ISA_FMA4_UNSET)
344 :
345 : #define OPTION_MASK_ISA_FMA4_UNSET \
346 : (OPTION_MASK_ISA_FMA4 | OPTION_MASK_ISA_XOP_UNSET)
347 : #define OPTION_MASK_ISA_XOP_UNSET OPTION_MASK_ISA_XOP
348 : #define OPTION_MASK_ISA_LWP_UNSET OPTION_MASK_ISA_LWP
349 :
350 : #define OPTION_MASK_ISA_AES_UNSET OPTION_MASK_ISA_AES
351 : #define OPTION_MASK_ISA_SHA_UNSET OPTION_MASK_ISA_SHA
352 : #define OPTION_MASK_ISA_PCLMUL_UNSET \
353 : (OPTION_MASK_ISA_PCLMUL | OPTION_MASK_ISA_VPCLMULQDQ_UNSET)
354 : #define OPTION_MASK_ISA_ABM_UNSET OPTION_MASK_ISA_ABM
355 : #define OPTION_MASK_ISA2_PCONFIG_UNSET OPTION_MASK_ISA2_PCONFIG
356 : #define OPTION_MASK_ISA2_WBNOINVD_UNSET OPTION_MASK_ISA2_WBNOINVD
357 : #define OPTION_MASK_ISA2_SGX_UNSET OPTION_MASK_ISA2_SGX
358 : #define OPTION_MASK_ISA_BMI_UNSET OPTION_MASK_ISA_BMI
359 : #define OPTION_MASK_ISA_BMI2_UNSET OPTION_MASK_ISA_BMI2
360 : #define OPTION_MASK_ISA_LZCNT_UNSET OPTION_MASK_ISA_LZCNT
361 : #define OPTION_MASK_ISA_TBM_UNSET OPTION_MASK_ISA_TBM
362 : #define OPTION_MASK_ISA_POPCNT_UNSET OPTION_MASK_ISA_POPCNT
363 : #define OPTION_MASK_ISA2_CX16_UNSET OPTION_MASK_ISA2_CX16
364 : #define OPTION_MASK_ISA_SAHF_UNSET OPTION_MASK_ISA_SAHF
365 : #define OPTION_MASK_ISA2_MOVBE_UNSET OPTION_MASK_ISA2_MOVBE
366 : #define OPTION_MASK_ISA_CRC32_UNSET OPTION_MASK_ISA_CRC32
367 :
368 : #define OPTION_MASK_ISA_FSGSBASE_UNSET OPTION_MASK_ISA_FSGSBASE
369 : #define OPTION_MASK_ISA_RDRND_UNSET OPTION_MASK_ISA_RDRND
370 : #define OPTION_MASK_ISA2_PTWRITE_UNSET OPTION_MASK_ISA2_PTWRITE
371 : #define OPTION_MASK_ISA_F16C_UNSET OPTION_MASK_ISA_F16C
372 :
373 : #define OPTION_MASK_ISA_GENERAL_REGS_ONLY_UNSET \
374 : (OPTION_MASK_ISA_MMX_UNSET \
375 : | OPTION_MASK_ISA_SSE_UNSET)
376 :
377 : #define OPTION_MASK_ISA2_AVX512F_UNSET \
378 : (OPTION_MASK_ISA2_AVX512BW_UNSET \
379 : | OPTION_MASK_ISA2_AVX512VP2INTERSECT_UNSET \
380 : | OPTION_MASK_ISA2_AVX10_1_UNSET \
381 : | OPTION_MASK_ISA2_AMX_AVX512_UNSET)
382 : #define OPTION_MASK_ISA2_GENERAL_REGS_ONLY_UNSET \
383 : OPTION_MASK_ISA2_SSE_UNSET
384 : #define OPTION_MASK_ISA2_AVX_UNSET \
385 : (OPTION_MASK_ISA2_AVX2_UNSET | OPTION_MASK_ISA2_VAES_UNSET \
386 : | OPTION_MASK_ISA2_SM3_UNSET | OPTION_MASK_ISA2_SHA512_UNSET \
387 : | OPTION_MASK_ISA2_SM4_UNSET)
388 : #define OPTION_MASK_ISA2_SSE4_2_UNSET OPTION_MASK_ISA2_AVX_UNSET
389 : #define OPTION_MASK_ISA2_SSE4_1_UNSET OPTION_MASK_ISA2_SSE4_2_UNSET
390 : #define OPTION_MASK_ISA2_SSE4_UNSET OPTION_MASK_ISA2_SSE4_1_UNSET
391 : #define OPTION_MASK_ISA2_SSSE3_UNSET OPTION_MASK_ISA2_SSE4_1_UNSET
392 : #define OPTION_MASK_ISA2_SSE3_UNSET OPTION_MASK_ISA2_SSSE3_UNSET
393 : #define OPTION_MASK_ISA2_SSE2_UNSET \
394 : (OPTION_MASK_ISA2_SSE3_UNSET | OPTION_MASK_ISA2_KL_UNSET)
395 : #define OPTION_MASK_ISA2_SSE_UNSET OPTION_MASK_ISA2_SSE2_UNSET
396 :
397 : #define OPTION_MASK_ISA2_AVX512BW_UNSET \
398 : (OPTION_MASK_ISA2_AVX512BF16_UNSET \
399 : | OPTION_MASK_ISA2_AVX512FP16_UNSET \
400 : | OPTION_MASK_ISA2_AVX10_1_UNSET \
401 : | OPTION_MASK_ISA2_AVX512BMM_UNSET)
402 : #define OPTION_MASK_ISA2_AVX512CD_UNSET OPTION_MASK_ISA2_AVX10_1_UNSET
403 : #define OPTION_MASK_ISA2_AVX512DQ_UNSET OPTION_MASK_ISA2_AVX10_1_UNSET
404 : #define OPTION_MASK_ISA2_AVX512VL_UNSET OPTION_MASK_ISA2_AVX10_1_UNSET
405 : #define OPTION_MASK_ISA2_AVX512IFMA_UNSET OPTION_MASK_ISA2_AVX10_1_UNSET
406 : #define OPTION_MASK_ISA2_AVX512VNNI_UNSET OPTION_MASK_ISA2_AVX10_1_UNSET
407 : #define OPTION_MASK_ISA2_AVX512VPOPCNTDQ_UNSET OPTION_MASK_ISA2_AVX10_1_UNSET
408 : #define OPTION_MASK_ISA2_AVX512VBMI_UNSET OPTION_MASK_ISA2_AVX10_1_UNSET
409 : #define OPTION_MASK_ISA2_AVX512VBMI2_UNSET OPTION_MASK_ISA2_AVX10_1_UNSET
410 : #define OPTION_MASK_ISA2_AVX512BITALG_UNSET OPTION_MASK_ISA2_AVX10_1_UNSET
411 :
412 : /* Set 1 << value as value of -malign-FLAG option. */
413 :
414 : static void
415 1 : set_malign_value (const char **flag, unsigned value)
416 : {
417 1 : char *r = XNEWVEC (char, 6);
418 1 : sprintf (r, "%d", 1 << value);
419 1 : *flag = r;
420 1 : }
421 :
422 : /* Implement TARGET_HANDLE_OPTION. */
423 :
424 : bool
425 67595069 : ix86_handle_option (struct gcc_options *opts,
426 : struct gcc_options *opts_set ATTRIBUTE_UNUSED,
427 : const struct cl_decoded_option *decoded,
428 : location_t loc)
429 : {
430 67595069 : size_t code = decoded->opt_index;
431 67595069 : int value = decoded->value;
432 :
433 67595069 : switch (code)
434 : {
435 1968173 : case OPT_mgeneral_regs_only:
436 1968173 : if (value)
437 : {
438 1968173 : HOST_WIDE_INT general_regs_only_flags = 0;
439 1968173 : HOST_WIDE_INT general_regs_only_flags2 = 0;
440 :
441 : /* NB: Enable the GPR only instructions which are enabled
442 : implicitly by SSE ISAs unless they have been disabled
443 : explicitly. */
444 1968173 : if (TARGET_SSE4_2_P (opts->x_ix86_isa_flags))
445 : {
446 6468 : if (!TARGET_EXPLICIT_CRC32_P (opts))
447 4557 : general_regs_only_flags |= OPTION_MASK_ISA_CRC32;
448 6468 : if (!TARGET_EXPLICIT_POPCNT_P (opts))
449 4539 : general_regs_only_flags |= OPTION_MASK_ISA_POPCNT;
450 : }
451 1968173 : if (TARGET_SSE3_P (opts->x_ix86_isa_flags))
452 : {
453 6876 : if (!TARGET_EXPLICIT_MWAIT_P (opts))
454 1968173 : general_regs_only_flags2 |= OPTION_MASK_ISA2_MWAIT;
455 : }
456 :
457 : /* Disable MMX, SSE and x87 instructions if only
458 : general registers are allowed. */
459 1968173 : opts->x_ix86_isa_flags
460 1968173 : &= ~OPTION_MASK_ISA_GENERAL_REGS_ONLY_UNSET;
461 1968173 : opts->x_ix86_isa_flags2
462 1968173 : &= ~OPTION_MASK_ISA2_GENERAL_REGS_ONLY_UNSET;
463 1968173 : opts->x_ix86_isa_flags |= general_regs_only_flags;
464 1968173 : opts->x_ix86_isa_flags2 |= general_regs_only_flags2;
465 1968173 : opts->x_ix86_isa_flags_explicit
466 1968173 : |= (OPTION_MASK_ISA_GENERAL_REGS_ONLY_UNSET
467 : | general_regs_only_flags);
468 1968173 : opts->x_ix86_isa_flags2_explicit
469 1968173 : |= (OPTION_MASK_ISA2_GENERAL_REGS_ONLY_UNSET
470 : | general_regs_only_flags2);
471 :
472 1968173 : opts->x_target_flags &= ~MASK_80387;
473 : }
474 : else
475 0 : gcc_unreachable ();
476 1968173 : return true;
477 :
478 3462 : case OPT_mmmx:
479 3462 : if (value)
480 : {
481 1645 : opts->x_ix86_isa_flags |= OPTION_MASK_ISA_MMX_SET;
482 1645 : opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_MMX_SET;
483 : }
484 : else
485 : {
486 1817 : opts->x_ix86_isa_flags &= ~OPTION_MASK_ISA_MMX_UNSET;
487 1817 : opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_MMX_UNSET;
488 : }
489 : return true;
490 :
491 83156 : case OPT_m3dnow:
492 83156 : if (value)
493 : {
494 83143 : opts->x_ix86_isa_flags |= OPTION_MASK_ISA_3DNOW_SET;
495 83143 : opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_3DNOW_SET;
496 : }
497 : else
498 : {
499 13 : opts->x_ix86_isa_flags &= ~OPTION_MASK_ISA_3DNOW_UNSET;
500 13 : opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_3DNOW_UNSET;
501 : }
502 : return true;
503 :
504 5917 : case OPT_m3dnowa:
505 5917 : if (value)
506 : {
507 5916 : opts->x_ix86_isa_flags |= OPTION_MASK_ISA_3DNOW_A_SET;
508 5916 : opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_3DNOW_A_SET;
509 : }
510 : else
511 : {
512 1 : opts->x_ix86_isa_flags &= ~OPTION_MASK_ISA_3DNOW_A_UNSET;
513 1 : opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_3DNOW_A_UNSET;
514 : }
515 : return true;
516 :
517 33297 : case OPT_msse:
518 33297 : if (value)
519 : {
520 33199 : opts->x_ix86_isa_flags |= OPTION_MASK_ISA_SSE_SET;
521 33199 : opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_SSE_SET;
522 : }
523 : else
524 : {
525 98 : opts->x_ix86_isa_flags &= ~OPTION_MASK_ISA_SSE_UNSET;
526 98 : opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_SSE_UNSET;
527 98 : opts->x_ix86_isa_flags2 &= ~OPTION_MASK_ISA2_SSE_UNSET;
528 98 : opts->x_ix86_isa_flags2_explicit |= OPTION_MASK_ISA2_SSE_UNSET;
529 : }
530 : return true;
531 :
532 86532 : case OPT_msse2:
533 86532 : if (value)
534 : {
535 86418 : opts->x_ix86_isa_flags |= OPTION_MASK_ISA_SSE2_SET;
536 86418 : opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_SSE2_SET;
537 : }
538 : else
539 : {
540 114 : opts->x_ix86_isa_flags &= ~OPTION_MASK_ISA_SSE2_UNSET;
541 114 : opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_SSE2_UNSET;
542 114 : opts->x_ix86_isa_flags2 &= ~OPTION_MASK_ISA2_SSE2_UNSET;
543 114 : opts->x_ix86_isa_flags2_explicit |= OPTION_MASK_ISA2_SSE2_UNSET;
544 : }
545 : return true;
546 :
547 24551 : case OPT_msse3:
548 24551 : if (value)
549 : {
550 24468 : opts->x_ix86_isa_flags |= OPTION_MASK_ISA_SSE3_SET;
551 24468 : opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_SSE3_SET;
552 : }
553 : else
554 : {
555 83 : opts->x_ix86_isa_flags &= ~OPTION_MASK_ISA_SSE3_UNSET;
556 83 : opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_SSE3_UNSET;
557 83 : opts->x_ix86_isa_flags2 &= ~OPTION_MASK_ISA2_SSE3_UNSET;
558 83 : opts->x_ix86_isa_flags2_explicit |= OPTION_MASK_ISA2_SSE3_UNSET;
559 : }
560 : return true;
561 :
562 45858 : case OPT_mssse3:
563 45858 : if (value)
564 : {
565 45850 : opts->x_ix86_isa_flags |= OPTION_MASK_ISA_SSSE3_SET;
566 45850 : opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_SSSE3_SET;
567 : }
568 : else
569 : {
570 8 : opts->x_ix86_isa_flags &= ~OPTION_MASK_ISA_SSSE3_UNSET;
571 8 : opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_SSSE3_UNSET;
572 8 : opts->x_ix86_isa_flags2 &= ~OPTION_MASK_ISA2_SSSE3_UNSET;
573 8 : opts->x_ix86_isa_flags2_explicit |= OPTION_MASK_ISA2_SSSE3_UNSET;
574 : }
575 : return true;
576 :
577 78625 : case OPT_msse4_1:
578 78625 : if (value)
579 : {
580 78599 : opts->x_ix86_isa_flags |= OPTION_MASK_ISA_SSE4_1_SET;
581 78599 : opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_SSE4_1_SET;
582 : }
583 : else
584 : {
585 26 : opts->x_ix86_isa_flags &= ~OPTION_MASK_ISA_SSE4_1_UNSET;
586 26 : opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_SSE4_1_UNSET;
587 26 : opts->x_ix86_isa_flags2 &= ~OPTION_MASK_ISA2_SSE4_1_UNSET;
588 26 : opts->x_ix86_isa_flags2_explicit |= OPTION_MASK_ISA2_SSE4_1_UNSET;
589 : }
590 : return true;
591 :
592 29385 : case OPT_msse4_2:
593 29385 : if (value)
594 : {
595 29372 : opts->x_ix86_isa_flags |= OPTION_MASK_ISA_SSE4_2_SET;
596 29372 : opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_SSE4_2_SET;
597 : }
598 : else
599 : {
600 13 : opts->x_ix86_isa_flags &= ~OPTION_MASK_ISA_SSE4_2_UNSET;
601 13 : opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_SSE4_2_UNSET;
602 13 : opts->x_ix86_isa_flags2 &= ~OPTION_MASK_ISA2_SSE4_2_UNSET;
603 13 : opts->x_ix86_isa_flags2_explicit |= OPTION_MASK_ISA2_SSE4_2_UNSET;
604 : }
605 : return true;
606 :
607 297952 : case OPT_mavx:
608 297952 : if (value)
609 : {
610 296338 : opts->x_ix86_isa_flags |= OPTION_MASK_ISA_AVX_SET;
611 296338 : opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_AVX_SET;
612 : }
613 : else
614 : {
615 1614 : opts->x_ix86_isa_flags &= ~OPTION_MASK_ISA_AVX_UNSET;
616 1614 : opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_AVX_UNSET;
617 1614 : opts->x_ix86_isa_flags2 &= ~OPTION_MASK_ISA2_AVX_UNSET;
618 1614 : opts->x_ix86_isa_flags2_explicit |= OPTION_MASK_ISA2_AVX_UNSET;
619 : }
620 : return true;
621 :
622 611740 : case OPT_mavx2:
623 611740 : if (value)
624 : {
625 611666 : opts->x_ix86_isa_flags |= OPTION_MASK_ISA_AVX2_SET;
626 611666 : opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_AVX2_SET;
627 : }
628 : else
629 : {
630 74 : opts->x_ix86_isa_flags &= ~OPTION_MASK_ISA_AVX2_UNSET;
631 74 : opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_AVX2_UNSET;
632 74 : opts->x_ix86_isa_flags2 &= ~OPTION_MASK_ISA2_AVX2_UNSET;
633 74 : opts->x_ix86_isa_flags2_explicit |= OPTION_MASK_ISA2_AVX2_UNSET;
634 : }
635 : return true;
636 :
637 5004824 : case OPT_mavx512f:
638 5004824 : if (value)
639 : {
640 5004713 : opts->x_ix86_isa_flags |= OPTION_MASK_ISA_AVX512F_SET;
641 5004713 : opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_AVX512F_SET;
642 : }
643 : else
644 : {
645 111 : opts->x_ix86_isa_flags &= ~OPTION_MASK_ISA_AVX512F_UNSET;
646 111 : opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_AVX512F_UNSET;
647 111 : opts->x_ix86_isa_flags2 &= ~OPTION_MASK_ISA2_AVX512F_UNSET;
648 111 : opts->x_ix86_isa_flags2_explicit |= OPTION_MASK_ISA2_AVX512F_UNSET;
649 : }
650 : return true;
651 :
652 414822 : case OPT_mavx512cd:
653 414822 : if (value)
654 : {
655 414798 : opts->x_ix86_isa_flags |= OPTION_MASK_ISA_AVX512CD_SET;
656 414798 : opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_AVX512CD_SET;
657 : }
658 : else
659 : {
660 24 : opts->x_ix86_isa_flags &= ~OPTION_MASK_ISA_AVX512CD_UNSET;
661 24 : opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_AVX512CD_UNSET;
662 24 : opts->x_ix86_isa_flags2 &= ~OPTION_MASK_ISA2_AVX512CD_UNSET;
663 24 : opts->x_ix86_isa_flags2_explicit |= OPTION_MASK_ISA2_AVX512CD_UNSET;
664 : }
665 : return true;
666 :
667 61921 : case OPT_mrdpid:
668 61921 : if (value)
669 : {
670 61920 : opts->x_ix86_isa_flags2 |= OPTION_MASK_ISA2_RDPID_SET;
671 61920 : opts->x_ix86_isa_flags2_explicit |= OPTION_MASK_ISA2_RDPID_SET;
672 : }
673 : else
674 : {
675 1 : opts->x_ix86_isa_flags2 &= ~OPTION_MASK_ISA2_RDPID_UNSET;
676 1 : opts->x_ix86_isa_flags2_explicit |= OPTION_MASK_ISA2_RDPID_UNSET;
677 : }
678 : return true;
679 :
680 361829 : case OPT_mgfni:
681 361829 : if (value)
682 : {
683 361816 : opts->x_ix86_isa_flags |= OPTION_MASK_ISA_GFNI_SET;
684 361816 : opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_GFNI_SET;
685 : }
686 : else
687 : {
688 13 : opts->x_ix86_isa_flags &= ~OPTION_MASK_ISA_GFNI_UNSET;
689 13 : opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_GFNI_UNSET;
690 : }
691 : return true;
692 :
693 123667 : case OPT_mshstk:
694 123667 : if (value)
695 : {
696 123655 : opts->x_ix86_isa_flags |= OPTION_MASK_ISA_SHSTK_SET;
697 123655 : opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_SHSTK_SET;
698 : }
699 : else
700 : {
701 12 : opts->x_ix86_isa_flags &= ~OPTION_MASK_ISA_SHSTK_UNSET;
702 12 : opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_SHSTK_UNSET;
703 : }
704 : return true;
705 :
706 90016 : case OPT_mvaes:
707 90016 : if (value)
708 : {
709 90004 : opts->x_ix86_isa_flags2 |= OPTION_MASK_ISA2_VAES_SET;
710 90004 : opts->x_ix86_isa_flags2_explicit |= OPTION_MASK_ISA2_VAES_SET;
711 90004 : opts->x_ix86_isa_flags |= OPTION_MASK_ISA_AVX_SET;
712 90004 : opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_AVX_SET;
713 : }
714 : else
715 : {
716 12 : opts->x_ix86_isa_flags2 &= ~OPTION_MASK_ISA2_VAES_UNSET;
717 12 : opts->x_ix86_isa_flags2_explicit |= OPTION_MASK_ISA2_VAES_UNSET;
718 : }
719 : return true;
720 :
721 74286 : case OPT_mvpclmulqdq:
722 74286 : if (value)
723 : {
724 74274 : opts->x_ix86_isa_flags |= OPTION_MASK_ISA_VPCLMULQDQ_SET;
725 74274 : opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_VPCLMULQDQ_SET;
726 : }
727 : else
728 : {
729 12 : opts->x_ix86_isa_flags &= ~OPTION_MASK_ISA_VPCLMULQDQ_UNSET;
730 12 : opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_VPCLMULQDQ_UNSET;
731 : }
732 : return true;
733 :
734 25298 : case OPT_mmovdiri:
735 25298 : if (value)
736 : {
737 25287 : opts->x_ix86_isa_flags |= OPTION_MASK_ISA_MOVDIRI_SET;
738 25287 : opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_MOVDIRI_SET;
739 : }
740 : else
741 : {
742 11 : opts->x_ix86_isa_flags &= ~OPTION_MASK_ISA_MOVDIRI_UNSET;
743 11 : opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_MOVDIRI_UNSET;
744 : }
745 : return true;
746 :
747 15334 : case OPT_mmovdir64b:
748 15334 : if (value)
749 : {
750 15323 : opts->x_ix86_isa_flags2 |= OPTION_MASK_ISA2_MOVDIR64B_SET;
751 15323 : opts->x_ix86_isa_flags2_explicit |= OPTION_MASK_ISA2_MOVDIR64B_SET;
752 : }
753 : else
754 : {
755 11 : opts->x_ix86_isa_flags2 &= ~OPTION_MASK_ISA2_MOVDIR64B_UNSET;
756 11 : opts->x_ix86_isa_flags2_explicit |= OPTION_MASK_ISA2_MOVDIR64B_UNSET;
757 : }
758 : return true;
759 :
760 15330 : case OPT_mcldemote:
761 15330 : if (value)
762 : {
763 15319 : opts->x_ix86_isa_flags2 |= OPTION_MASK_ISA2_CLDEMOTE_SET;
764 15319 : opts->x_ix86_isa_flags2_explicit |= OPTION_MASK_ISA2_CLDEMOTE_SET;
765 : }
766 : else
767 : {
768 11 : opts->x_ix86_isa_flags2 &= ~OPTION_MASK_ISA2_CLDEMOTE_UNSET;
769 11 : opts->x_ix86_isa_flags2_explicit |= OPTION_MASK_ISA2_CLDEMOTE_UNSET;
770 : }
771 : return true;
772 :
773 35461 : case OPT_mwaitpkg:
774 35461 : if (value)
775 : {
776 35450 : opts->x_ix86_isa_flags2 |= OPTION_MASK_ISA2_WAITPKG_SET;
777 35450 : opts->x_ix86_isa_flags2_explicit |= OPTION_MASK_ISA2_WAITPKG_SET;
778 : }
779 : else
780 : {
781 11 : opts->x_ix86_isa_flags2 &= ~OPTION_MASK_ISA2_WAITPKG_UNSET;
782 11 : opts->x_ix86_isa_flags2_explicit |= OPTION_MASK_ISA2_WAITPKG_UNSET;
783 : }
784 : return true;
785 :
786 71340 : case OPT_menqcmd:
787 71340 : if (value)
788 : {
789 71328 : opts->x_ix86_isa_flags2 |= OPTION_MASK_ISA2_ENQCMD_SET;
790 71328 : opts->x_ix86_isa_flags2_explicit |= OPTION_MASK_ISA2_ENQCMD_SET;
791 : }
792 : else
793 : {
794 12 : opts->x_ix86_isa_flags2 &= ~OPTION_MASK_ISA2_ENQCMD_UNSET;
795 12 : opts->x_ix86_isa_flags2_explicit |= OPTION_MASK_ISA2_ENQCMD_UNSET;
796 : }
797 : return true;
798 :
799 145387 : case OPT_mkl:
800 145387 : if (value)
801 : {
802 145375 : opts->x_ix86_isa_flags2 |= OPTION_MASK_ISA2_KL_SET;
803 145375 : opts->x_ix86_isa_flags2_explicit |= OPTION_MASK_ISA2_KL_SET;
804 :
805 : /* The Keylocker instructions need XMM registers from SSE2. */
806 145375 : opts->x_ix86_isa_flags |= OPTION_MASK_ISA_SSE2_SET;
807 145375 : opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_SSE2_SET;
808 : }
809 : else
810 : {
811 12 : opts->x_ix86_isa_flags2 &= ~OPTION_MASK_ISA2_KL_UNSET;
812 12 : opts->x_ix86_isa_flags2_explicit |= OPTION_MASK_ISA2_KL_UNSET;
813 : }
814 : return true;
815 :
816 154017 : case OPT_mwidekl:
817 154017 : if (value)
818 : {
819 154005 : opts->x_ix86_isa_flags2 |= OPTION_MASK_ISA2_WIDEKL_SET;
820 154005 : opts->x_ix86_isa_flags2_explicit |= OPTION_MASK_ISA2_WIDEKL_SET;
821 :
822 : /* The Widekl instructions need XMM registers from SSE2. */
823 154005 : opts->x_ix86_isa_flags |= OPTION_MASK_ISA_SSE2_SET;
824 154005 : opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_SSE2_SET;
825 : }
826 : else
827 : {
828 12 : opts->x_ix86_isa_flags2 &= ~OPTION_MASK_ISA2_WIDEKL_UNSET;
829 12 : opts->x_ix86_isa_flags2_explicit |= OPTION_MASK_ISA2_WIDEKL_UNSET;
830 : }
831 : return true;
832 :
833 87482 : case OPT_mserialize:
834 87482 : if (value)
835 : {
836 87469 : opts->x_ix86_isa_flags2 |= OPTION_MASK_ISA2_SERIALIZE_SET;
837 87469 : opts->x_ix86_isa_flags2_explicit |= OPTION_MASK_ISA2_SERIALIZE_SET;
838 : }
839 : else
840 : {
841 13 : opts->x_ix86_isa_flags2 &= ~OPTION_MASK_ISA2_SERIALIZE_UNSET;
842 13 : opts->x_ix86_isa_flags2_explicit |= OPTION_MASK_ISA2_SERIALIZE_UNSET;
843 : }
844 : return true;
845 :
846 46318 : case OPT_muintr:
847 46318 : if (value)
848 : {
849 46306 : opts->x_ix86_isa_flags2 |= OPTION_MASK_ISA2_UINTR_SET;
850 46306 : opts->x_ix86_isa_flags2_explicit |= OPTION_MASK_ISA2_UINTR_SET;
851 : }
852 : else
853 : {
854 12 : opts->x_ix86_isa_flags2 &= ~OPTION_MASK_ISA2_UINTR_UNSET;
855 12 : opts->x_ix86_isa_flags2_explicit |= OPTION_MASK_ISA2_UINTR_UNSET;
856 : }
857 : return true;
858 :
859 16869 : case OPT_mhreset:
860 16869 : if (value)
861 : {
862 16857 : opts->x_ix86_isa_flags2 |= OPTION_MASK_ISA2_HRESET_SET;
863 16857 : opts->x_ix86_isa_flags2_explicit |= OPTION_MASK_ISA2_HRESET_SET;
864 : }
865 : else
866 : {
867 12 : opts->x_ix86_isa_flags2 &= ~OPTION_MASK_ISA2_HRESET_UNSET;
868 12 : opts->x_ix86_isa_flags2_explicit |= OPTION_MASK_ISA2_HRESET_UNSET;
869 : }
870 : return true;
871 :
872 1434850 : case OPT_mavx512vbmi2:
873 1434850 : if (value)
874 : {
875 1434839 : opts->x_ix86_isa_flags |= OPTION_MASK_ISA_AVX512VBMI2_SET;
876 1434839 : opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_AVX512VBMI2_SET;
877 : }
878 : else
879 : {
880 11 : opts->x_ix86_isa_flags &= ~OPTION_MASK_ISA_AVX512VBMI2_UNSET;
881 11 : opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_AVX512VBMI2_UNSET;
882 11 : opts->x_ix86_isa_flags2 &= ~OPTION_MASK_ISA2_AVX512VBMI2_UNSET;
883 11 : opts->x_ix86_isa_flags2_explicit
884 11 : |= OPTION_MASK_ISA2_AVX512VBMI2_UNSET;
885 : }
886 : return true;
887 :
888 7931815 : case OPT_mavx512fp16:
889 7931815 : if (value)
890 : {
891 7931800 : opts->x_ix86_isa_flags2 |= OPTION_MASK_ISA2_AVX512FP16_SET;
892 7931800 : opts->x_ix86_isa_flags2_explicit |= OPTION_MASK_ISA2_AVX512FP16_SET;
893 7931800 : opts->x_ix86_isa_flags |= OPTION_MASK_ISA_AVX512FP16_SET;
894 7931800 : opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_AVX512FP16_SET;
895 : }
896 : else
897 : {
898 15 : opts->x_ix86_isa_flags2 &= ~OPTION_MASK_ISA2_AVX512FP16_UNSET;
899 15 : opts->x_ix86_isa_flags2_explicit |= OPTION_MASK_ISA2_AVX512FP16_UNSET;
900 : }
901 : return true;
902 :
903 281673 : case OPT_mavx512vnni:
904 281673 : if (value)
905 : {
906 281661 : opts->x_ix86_isa_flags |= OPTION_MASK_ISA_AVX512VNNI_SET;
907 281661 : opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_AVX512VNNI_SET;
908 : }
909 : else
910 : {
911 12 : opts->x_ix86_isa_flags &= ~OPTION_MASK_ISA_AVX512VNNI_UNSET;
912 12 : opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_AVX512VNNI_UNSET;
913 12 : opts->x_ix86_isa_flags2 &= ~OPTION_MASK_ISA2_AVX512VNNI_UNSET;
914 12 : opts->x_ix86_isa_flags2_explicit
915 12 : |= OPTION_MASK_ISA2_AVX512VNNI_UNSET;
916 : }
917 : return true;
918 :
919 184660 : case OPT_mavx512vpopcntdq:
920 184660 : if (value)
921 : {
922 184636 : opts->x_ix86_isa_flags |= OPTION_MASK_ISA_AVX512VPOPCNTDQ_SET;
923 184636 : opts->x_ix86_isa_flags_explicit
924 184636 : |= OPTION_MASK_ISA_AVX512VPOPCNTDQ_SET;
925 : }
926 : else
927 : {
928 24 : opts->x_ix86_isa_flags &= ~OPTION_MASK_ISA_AVX512VPOPCNTDQ_UNSET;
929 24 : opts->x_ix86_isa_flags_explicit
930 24 : |= OPTION_MASK_ISA_AVX512VPOPCNTDQ_UNSET;
931 24 : opts->x_ix86_isa_flags2 &= ~OPTION_MASK_ISA2_AVX512VPOPCNTDQ_UNSET;
932 24 : opts->x_ix86_isa_flags2_explicit
933 24 : |= OPTION_MASK_ISA2_AVX512VPOPCNTDQ_UNSET;
934 : }
935 : return true;
936 :
937 242700 : case OPT_mavx512bitalg:
938 242700 : if (value)
939 : {
940 242689 : opts->x_ix86_isa_flags |= OPTION_MASK_ISA_AVX512BITALG_SET;
941 242689 : opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_AVX512BITALG_SET;
942 : }
943 : else
944 : {
945 11 : opts->x_ix86_isa_flags &= ~OPTION_MASK_ISA_AVX512BITALG_UNSET;
946 11 : opts->x_ix86_isa_flags_explicit
947 11 : |= OPTION_MASK_ISA_AVX512BITALG_UNSET;
948 11 : opts->x_ix86_isa_flags2 &= ~OPTION_MASK_ISA2_AVX512BITALG_UNSET;
949 11 : opts->x_ix86_isa_flags2_explicit
950 11 : |= OPTION_MASK_ISA2_AVX512BITALG_UNSET;
951 : }
952 : return true;
953 :
954 417748 : case OPT_mavx512bf16:
955 417748 : if (value)
956 : {
957 417734 : opts->x_ix86_isa_flags2 |= OPTION_MASK_ISA2_AVX512BF16_SET;
958 417734 : opts->x_ix86_isa_flags2_explicit |= OPTION_MASK_ISA2_AVX512BF16_SET;
959 417734 : opts->x_ix86_isa_flags |= OPTION_MASK_ISA_AVX512BW_SET;
960 417734 : opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_AVX512BW_SET;
961 : }
962 : else
963 : {
964 14 : opts->x_ix86_isa_flags2 &= ~OPTION_MASK_ISA2_AVX512BF16_UNSET;
965 14 : opts->x_ix86_isa_flags2_explicit |= OPTION_MASK_ISA2_AVX512BF16_UNSET;
966 : }
967 : return true;
968 :
969 140134 : case OPT_mavx512bmm:
970 140134 : if (value)
971 : {
972 140123 : opts->x_ix86_isa_flags2 |= OPTION_MASK_ISA2_AVX512BMM_SET;
973 140123 : opts->x_ix86_isa_flags2_explicit |= OPTION_MASK_ISA2_AVX512BMM_SET;
974 140123 : opts->x_ix86_isa_flags |= OPTION_MASK_ISA_AVX512BW_SET;
975 140123 : opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_AVX512BW_SET;
976 : }
977 : else
978 : {
979 11 : opts->x_ix86_isa_flags2 &= ~OPTION_MASK_ISA2_AVX512BMM_UNSET;
980 11 : opts->x_ix86_isa_flags2_explicit |= OPTION_MASK_ISA2_AVX512BMM_UNSET;
981 : }
982 : return true;
983 :
984 155194 : case OPT_mavxvnni:
985 155194 : if (value)
986 : {
987 155180 : opts->x_ix86_isa_flags2 |= OPTION_MASK_ISA2_AVXVNNI_SET;
988 155180 : opts->x_ix86_isa_flags2_explicit |= OPTION_MASK_ISA2_AVXVNNI_SET;
989 155180 : opts->x_ix86_isa_flags |= OPTION_MASK_ISA_AVX2_SET;
990 155180 : opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_AVX2_SET;
991 : }
992 : else
993 : {
994 14 : opts->x_ix86_isa_flags2 &= ~OPTION_MASK_ISA2_AVXVNNI_UNSET;
995 14 : opts->x_ix86_isa_flags2_explicit |= OPTION_MASK_ISA2_AVXVNNI_UNSET;
996 : }
997 : return true;
998 :
999 110880 : case OPT_msgx:
1000 110880 : if (value)
1001 : {
1002 110868 : opts->x_ix86_isa_flags2 |= OPTION_MASK_ISA2_SGX_SET;
1003 110868 : opts->x_ix86_isa_flags2_explicit |= OPTION_MASK_ISA2_SGX_SET;
1004 : }
1005 : else
1006 : {
1007 12 : opts->x_ix86_isa_flags2 &= ~OPTION_MASK_ISA2_SGX_UNSET;
1008 12 : opts->x_ix86_isa_flags2_explicit |= OPTION_MASK_ISA2_SGX_UNSET;
1009 : }
1010 : return true;
1011 :
1012 70973 : case OPT_mpconfig:
1013 70973 : if (value)
1014 : {
1015 70962 : opts->x_ix86_isa_flags2 |= OPTION_MASK_ISA2_PCONFIG_SET;
1016 70962 : opts->x_ix86_isa_flags2_explicit |= OPTION_MASK_ISA2_PCONFIG_SET;
1017 : }
1018 : else
1019 : {
1020 11 : opts->x_ix86_isa_flags2 &= ~OPTION_MASK_ISA2_PCONFIG_UNSET;
1021 11 : opts->x_ix86_isa_flags2_explicit |= OPTION_MASK_ISA2_PCONFIG_UNSET;
1022 : }
1023 : return true;
1024 :
1025 61290 : case OPT_mwbnoinvd:
1026 61290 : if (value)
1027 : {
1028 61290 : opts->x_ix86_isa_flags2 |= OPTION_MASK_ISA2_WBNOINVD_SET;
1029 61290 : opts->x_ix86_isa_flags2_explicit |= OPTION_MASK_ISA2_WBNOINVD_SET;
1030 : }
1031 : else
1032 : {
1033 0 : opts->x_ix86_isa_flags2 &= ~OPTION_MASK_ISA2_WBNOINVD_UNSET;
1034 0 : opts->x_ix86_isa_flags2_explicit |= OPTION_MASK_ISA2_WBNOINVD_UNSET;
1035 : }
1036 : return true;
1037 :
1038 3600978 : case OPT_mavx512dq:
1039 3600978 : if (value)
1040 : {
1041 3600945 : opts->x_ix86_isa_flags |= OPTION_MASK_ISA_AVX512DQ_SET;
1042 3600945 : opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_AVX512DQ_SET;
1043 : }
1044 : else
1045 : {
1046 33 : opts->x_ix86_isa_flags &= ~OPTION_MASK_ISA_AVX512DQ_UNSET;
1047 33 : opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_AVX512DQ_UNSET;
1048 33 : opts->x_ix86_isa_flags2 &= ~OPTION_MASK_ISA2_AVX512DQ_UNSET;
1049 33 : opts->x_ix86_isa_flags2_explicit |= OPTION_MASK_ISA2_AVX512DQ_UNSET;
1050 : }
1051 : return true;
1052 :
1053 6857631 : case OPT_mavx512bw:
1054 6857631 : if (value)
1055 : {
1056 6857575 : opts->x_ix86_isa_flags |= OPTION_MASK_ISA_AVX512BW_SET;
1057 6857575 : opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_AVX512BW_SET;
1058 : }
1059 : else
1060 : {
1061 56 : opts->x_ix86_isa_flags &= ~OPTION_MASK_ISA_AVX512BW_UNSET;
1062 56 : opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_AVX512BW_UNSET;
1063 56 : opts->x_ix86_isa_flags2 &= ~OPTION_MASK_ISA2_AVX512BW_UNSET;
1064 56 : opts->x_ix86_isa_flags2_explicit |= OPTION_MASK_ISA2_AVX512BW_UNSET;
1065 : }
1066 : return true;
1067 :
1068 20476600 : case OPT_mavx512vl:
1069 20476600 : if (value)
1070 : {
1071 20476540 : opts->x_ix86_isa_flags |= OPTION_MASK_ISA_AVX512VL_SET;
1072 20476540 : opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_AVX512VL_SET;
1073 : }
1074 : else
1075 : {
1076 60 : opts->x_ix86_isa_flags &= ~OPTION_MASK_ISA_AVX512VL_UNSET;
1077 60 : opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_AVX512VL_UNSET;
1078 60 : opts->x_ix86_isa_flags2 &= ~OPTION_MASK_ISA2_AVX512VL_UNSET;
1079 60 : opts->x_ix86_isa_flags2_explicit |= OPTION_MASK_ISA2_AVX512VL_UNSET;
1080 : }
1081 : return true;
1082 :
1083 145905 : case OPT_mavx512ifma:
1084 145905 : if (value)
1085 : {
1086 145893 : opts->x_ix86_isa_flags |= OPTION_MASK_ISA_AVX512IFMA_SET;
1087 145893 : opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_AVX512IFMA_SET;
1088 : }
1089 : else
1090 : {
1091 12 : opts->x_ix86_isa_flags &= ~OPTION_MASK_ISA_AVX512IFMA_UNSET;
1092 12 : opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_AVX512IFMA_UNSET;
1093 12 : opts->x_ix86_isa_flags2 &= ~OPTION_MASK_ISA2_AVX512IFMA_UNSET;
1094 12 : opts->x_ix86_isa_flags2_explicit
1095 12 : |= OPTION_MASK_ISA2_AVX512IFMA_UNSET;
1096 : }
1097 : return true;
1098 :
1099 300976 : case OPT_mavx512vbmi:
1100 300976 : if (value)
1101 : {
1102 300964 : opts->x_ix86_isa_flags |= OPTION_MASK_ISA_AVX512VBMI_SET;
1103 300964 : opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_AVX512VBMI_SET;
1104 : }
1105 : else
1106 : {
1107 12 : opts->x_ix86_isa_flags &= ~OPTION_MASK_ISA_AVX512VBMI_UNSET;
1108 12 : opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_AVX512VBMI_UNSET;
1109 12 : opts->x_ix86_isa_flags2 &= ~OPTION_MASK_ISA2_AVX512VBMI_UNSET;
1110 12 : opts->x_ix86_isa_flags2_explicit
1111 12 : |= OPTION_MASK_ISA2_AVX512VBMI_UNSET;
1112 : }
1113 : return true;
1114 :
1115 140744 : case OPT_mavx512vp2intersect:
1116 140744 : if (value)
1117 : {
1118 140732 : opts->x_ix86_isa_flags2 |= OPTION_MASK_ISA2_AVX512VP2INTERSECT_SET;
1119 140732 : opts->x_ix86_isa_flags2_explicit |=
1120 : OPTION_MASK_ISA2_AVX512VP2INTERSECT_SET;
1121 140732 : opts->x_ix86_isa_flags |= OPTION_MASK_ISA_AVX512DQ_SET;
1122 140732 : opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_AVX512DQ_SET;
1123 : }
1124 : else
1125 : {
1126 12 : opts->x_ix86_isa_flags2 &= ~OPTION_MASK_ISA2_AVX512VP2INTERSECT_UNSET;
1127 12 : opts->x_ix86_isa_flags2_explicit |=
1128 : OPTION_MASK_ISA2_AVX512VP2INTERSECT_UNSET;
1129 : }
1130 : return true;
1131 :
1132 97520 : case OPT_mtsxldtrk:
1133 97520 : if (value)
1134 : {
1135 97508 : opts->x_ix86_isa_flags2 |= OPTION_MASK_ISA2_TSXLDTRK_SET;
1136 97508 : opts->x_ix86_isa_flags2_explicit |= OPTION_MASK_ISA2_TSXLDTRK_SET;
1137 : }
1138 : else
1139 : {
1140 12 : opts->x_ix86_isa_flags2 &= ~OPTION_MASK_ISA2_TSXLDTRK_UNSET;
1141 12 : opts->x_ix86_isa_flags2_explicit |= OPTION_MASK_ISA2_TSXLDTRK_UNSET;
1142 : }
1143 : return true;
1144 :
1145 104939 : case OPT_mamx_tile:
1146 104939 : if (value)
1147 : {
1148 104927 : opts->x_ix86_isa_flags2 |= OPTION_MASK_ISA2_AMX_TILE_SET;
1149 104927 : opts->x_ix86_isa_flags2_explicit |= OPTION_MASK_ISA2_AMX_TILE_SET;
1150 104927 : opts->x_ix86_isa_flags |= OPTION_MASK_ISA_XSAVE_SET;
1151 104927 : opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_XSAVE_SET;
1152 : }
1153 : else
1154 : {
1155 12 : opts->x_ix86_isa_flags2 &= ~OPTION_MASK_ISA2_AMX_TILE_UNSET;
1156 12 : opts->x_ix86_isa_flags2_explicit |= OPTION_MASK_ISA2_AMX_TILE_UNSET;
1157 : }
1158 : return true;
1159 :
1160 75867 : case OPT_mamx_int8:
1161 75867 : if (value)
1162 : {
1163 75855 : opts->x_ix86_isa_flags2 |= OPTION_MASK_ISA2_AMX_INT8_SET;
1164 75855 : opts->x_ix86_isa_flags2_explicit |= OPTION_MASK_ISA2_AMX_INT8_SET;
1165 : }
1166 : else
1167 : {
1168 12 : opts->x_ix86_isa_flags2 &= ~OPTION_MASK_ISA2_AMX_INT8_UNSET;
1169 12 : opts->x_ix86_isa_flags2_explicit |= OPTION_MASK_ISA2_AMX_INT8_UNSET;
1170 : }
1171 : return true;
1172 :
1173 75870 : case OPT_mamx_bf16:
1174 75870 : if (value)
1175 : {
1176 75858 : opts->x_ix86_isa_flags2 |= OPTION_MASK_ISA2_AMX_BF16_SET;
1177 75858 : opts->x_ix86_isa_flags2_explicit |= OPTION_MASK_ISA2_AMX_BF16_SET;
1178 : }
1179 : else
1180 : {
1181 12 : opts->x_ix86_isa_flags2 &= ~OPTION_MASK_ISA2_AMX_BF16_UNSET;
1182 12 : opts->x_ix86_isa_flags2_explicit |= OPTION_MASK_ISA2_AMX_BF16_UNSET;
1183 : }
1184 : return true;
1185 :
1186 115644 : case OPT_mavxifma:
1187 115644 : if (value)
1188 : {
1189 115632 : opts->x_ix86_isa_flags2 |= OPTION_MASK_ISA2_AVXIFMA_SET;
1190 115632 : opts->x_ix86_isa_flags2_explicit |= OPTION_MASK_ISA2_AVXIFMA_SET;
1191 115632 : opts->x_ix86_isa_flags |= OPTION_MASK_ISA_AVX2_SET;
1192 115632 : opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_AVX2_SET;
1193 : }
1194 : else
1195 : {
1196 12 : opts->x_ix86_isa_flags2 &= ~OPTION_MASK_ISA2_AVXIFMA_UNSET;
1197 12 : opts->x_ix86_isa_flags2_explicit |= OPTION_MASK_ISA2_AVXIFMA_UNSET;
1198 : }
1199 : return true;
1200 :
1201 195119 : case OPT_mavxvnniint8:
1202 195119 : if (value)
1203 : {
1204 195106 : opts->x_ix86_isa_flags2 |= OPTION_MASK_ISA2_AVXVNNIINT8_SET;
1205 195106 : opts->x_ix86_isa_flags2_explicit |=
1206 : OPTION_MASK_ISA2_AVXVNNIINT8_SET;
1207 195106 : opts->x_ix86_isa_flags |= OPTION_MASK_ISA_AVX2_SET;
1208 195106 : opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_AVX2_SET;
1209 : }
1210 : else
1211 : {
1212 13 : opts->x_ix86_isa_flags2 &=
1213 : ~OPTION_MASK_ISA2_AVXVNNIINT8_UNSET;
1214 13 : opts->x_ix86_isa_flags2_explicit |=
1215 : OPTION_MASK_ISA2_AVXVNNIINT8_UNSET;
1216 : }
1217 : return true;
1218 :
1219 214990 : case OPT_mavxneconvert:
1220 214990 : if (value)
1221 : {
1222 214976 : opts->x_ix86_isa_flags2 |= OPTION_MASK_ISA2_AVXNECONVERT_SET;
1223 214976 : opts->x_ix86_isa_flags2_explicit |= OPTION_MASK_ISA2_AVXNECONVERT_SET;
1224 214976 : opts->x_ix86_isa_flags |= OPTION_MASK_ISA_AVX2_SET;
1225 214976 : opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_AVX2_SET;
1226 : }
1227 : else
1228 : {
1229 14 : opts->x_ix86_isa_flags2 &= ~OPTION_MASK_ISA2_AVXNECONVERT_UNSET;
1230 14 : opts->x_ix86_isa_flags2_explicit
1231 14 : |= OPTION_MASK_ISA2_AVXNECONVERT_UNSET;
1232 : }
1233 : return true;
1234 :
1235 70627 : case OPT_mcmpccxadd:
1236 70627 : if (value)
1237 : {
1238 70615 : opts->x_ix86_isa_flags2 |= OPTION_MASK_ISA2_CMPCCXADD_SET;
1239 70615 : opts->x_ix86_isa_flags2_explicit |= OPTION_MASK_ISA2_CMPCCXADD_SET;
1240 : }
1241 : else
1242 : {
1243 12 : opts->x_ix86_isa_flags2 &= ~OPTION_MASK_ISA2_CMPCCXADD_UNSET;
1244 12 : opts->x_ix86_isa_flags2_explicit |= OPTION_MASK_ISA2_CMPCCXADD_UNSET;
1245 : }
1246 : return true;
1247 :
1248 70711 : case OPT_mamx_fp16:
1249 70711 : if (value)
1250 : {
1251 70699 : opts->x_ix86_isa_flags2 |= OPTION_MASK_ISA2_AMX_FP16_SET;
1252 70699 : opts->x_ix86_isa_flags2_explicit |= OPTION_MASK_ISA2_AMX_FP16_SET;
1253 : }
1254 : else
1255 : {
1256 12 : opts->x_ix86_isa_flags2 &= ~OPTION_MASK_ISA2_AMX_FP16_UNSET;
1257 12 : opts->x_ix86_isa_flags2_explicit |= OPTION_MASK_ISA2_AMX_FP16_UNSET;
1258 : }
1259 : return true;
1260 :
1261 70631 : case OPT_mprefetchi:
1262 70631 : if (value)
1263 : {
1264 70619 : opts->x_ix86_isa_flags2 |= OPTION_MASK_ISA2_PREFETCHI_SET;
1265 70619 : opts->x_ix86_isa_flags2_explicit |= OPTION_MASK_ISA2_PREFETCHI_SET;
1266 : }
1267 : else
1268 : {
1269 12 : opts->x_ix86_isa_flags2 &= ~OPTION_MASK_ISA2_PREFETCHI_UNSET;
1270 12 : opts->x_ix86_isa_flags2_explicit |= OPTION_MASK_ISA2_PREFETCHI_UNSET;
1271 : }
1272 : return true;
1273 :
1274 157491 : case OPT_mraoint:
1275 157491 : if (value)
1276 : {
1277 157479 : opts->x_ix86_isa_flags2 |= OPTION_MASK_ISA2_RAOINT_SET;
1278 157479 : opts->x_ix86_isa_flags2_explicit |= OPTION_MASK_ISA2_RAOINT_SET;
1279 : }
1280 : else
1281 : {
1282 12 : opts->x_ix86_isa_flags2 &= ~OPTION_MASK_ISA2_RAOINT_UNSET;
1283 12 : opts->x_ix86_isa_flags2_explicit |= OPTION_MASK_ISA2_RAOINT_UNSET;
1284 : }
1285 : return true;
1286 :
1287 75878 : case OPT_mamx_complex:
1288 75878 : if (value)
1289 : {
1290 75866 : opts->x_ix86_isa_flags2 |= OPTION_MASK_ISA2_AMX_COMPLEX_SET;
1291 75866 : opts->x_ix86_isa_flags2_explicit |= OPTION_MASK_ISA2_AMX_COMPLEX_SET;
1292 : }
1293 : else
1294 : {
1295 12 : opts->x_ix86_isa_flags2 &= ~OPTION_MASK_ISA2_AMX_COMPLEX_UNSET;
1296 12 : opts->x_ix86_isa_flags2_explicit |= OPTION_MASK_ISA2_AMX_COMPLEX_UNSET;
1297 : }
1298 : return true;
1299 :
1300 195096 : case OPT_mavxvnniint16:
1301 195096 : if (value)
1302 : {
1303 195083 : opts->x_ix86_isa_flags2 |= OPTION_MASK_ISA2_AVXVNNIINT16_SET;
1304 195083 : opts->x_ix86_isa_flags2_explicit |=
1305 : OPTION_MASK_ISA2_AVXVNNIINT16_SET;
1306 195083 : opts->x_ix86_isa_flags |= OPTION_MASK_ISA_AVX2_SET;
1307 195083 : opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_AVX2_SET;
1308 : }
1309 : else
1310 : {
1311 13 : opts->x_ix86_isa_flags2 &=
1312 : ~OPTION_MASK_ISA2_AVXVNNIINT16_UNSET;
1313 13 : opts->x_ix86_isa_flags2_explicit |=
1314 : OPTION_MASK_ISA2_AVXVNNIINT16_UNSET;
1315 : }
1316 : return true;
1317 :
1318 105301 : case OPT_msm3:
1319 105301 : if (value)
1320 : {
1321 105289 : opts->x_ix86_isa_flags2 |= OPTION_MASK_ISA2_SM3_SET;
1322 105289 : opts->x_ix86_isa_flags2_explicit |= OPTION_MASK_ISA2_SM3_SET;
1323 105289 : opts->x_ix86_isa_flags |= OPTION_MASK_ISA_AVX_SET;
1324 105289 : opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_AVX_SET;
1325 : }
1326 : else
1327 : {
1328 12 : opts->x_ix86_isa_flags2 &= ~OPTION_MASK_ISA2_SM3_UNSET;
1329 12 : opts->x_ix86_isa_flags2_explicit |= OPTION_MASK_ISA2_SM3_UNSET;
1330 : }
1331 : return true;
1332 :
1333 105719 : case OPT_msha512:
1334 105719 : if (value)
1335 : {
1336 105707 : opts->x_ix86_isa_flags2 |= OPTION_MASK_ISA2_SHA512_SET;
1337 105707 : opts->x_ix86_isa_flags2_explicit |= OPTION_MASK_ISA2_SHA512_SET;
1338 105707 : opts->x_ix86_isa_flags |= OPTION_MASK_ISA_AVX_SET;
1339 105707 : opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_AVX_SET;
1340 : }
1341 : else
1342 : {
1343 12 : opts->x_ix86_isa_flags2 &= ~OPTION_MASK_ISA2_SHA512_UNSET;
1344 12 : opts->x_ix86_isa_flags2_explicit |= OPTION_MASK_ISA2_SHA512_UNSET;
1345 : }
1346 : return true;
1347 :
1348 140706 : case OPT_msm4:
1349 140706 : if (value)
1350 : {
1351 140694 : opts->x_ix86_isa_flags2 |= OPTION_MASK_ISA2_SM4_SET;
1352 140694 : opts->x_ix86_isa_flags2_explicit |= OPTION_MASK_ISA2_SM4_SET;
1353 140694 : opts->x_ix86_isa_flags |= OPTION_MASK_ISA_AVX_SET;
1354 140694 : opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_AVX_SET;
1355 : }
1356 : else
1357 : {
1358 12 : opts->x_ix86_isa_flags2 &= ~OPTION_MASK_ISA2_SM4_UNSET;
1359 12 : opts->x_ix86_isa_flags2_explicit |= OPTION_MASK_ISA2_SM4_UNSET;
1360 : }
1361 : return true;
1362 :
1363 112 : case OPT_mapxf:
1364 112 : if (value)
1365 : {
1366 78 : opts->x_ix86_isa_flags2 |= OPTION_MASK_ISA2_APX_F_SET;
1367 78 : opts->x_ix86_isa_flags2_explicit |= OPTION_MASK_ISA2_APX_F_SET;
1368 78 : opts->x_ix86_apx_features = apx_all;
1369 : }
1370 : else
1371 : {
1372 34 : opts->x_ix86_isa_flags2 &= ~OPTION_MASK_ISA2_APX_F_UNSET;
1373 34 : opts->x_ix86_isa_flags2_explicit |= OPTION_MASK_ISA2_APX_F_UNSET;
1374 34 : opts->x_ix86_apx_features = apx_none;
1375 : }
1376 : return true;
1377 :
1378 27057 : case OPT_musermsr:
1379 27057 : if (value)
1380 : {
1381 27045 : opts->x_ix86_isa_flags2 |= OPTION_MASK_ISA2_USER_MSR_SET;
1382 27045 : opts->x_ix86_isa_flags2_explicit |= OPTION_MASK_ISA2_USER_MSR_SET;
1383 : }
1384 : else
1385 : {
1386 12 : opts->x_ix86_isa_flags2 &= ~OPTION_MASK_ISA2_USER_MSR_UNSET;
1387 12 : opts->x_ix86_isa_flags2_explicit |= OPTION_MASK_ISA2_USER_MSR_UNSET;
1388 : }
1389 : return true;
1390 :
1391 27 : case OPT_mavx10_1:
1392 27 : if (value)
1393 : {
1394 15 : opts->x_ix86_isa_flags2 |= OPTION_MASK_ISA2_AVX10_1_SET;
1395 15 : opts->x_ix86_isa_flags2_explicit |= OPTION_MASK_ISA2_AVX10_1_SET;
1396 15 : opts->x_ix86_isa_flags |= OPTION_MASK_ISA_AVX10_1_SET;
1397 15 : opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_AVX10_1_SET;
1398 : }
1399 : else
1400 : {
1401 12 : opts->x_ix86_isa_flags2 &= ~OPTION_MASK_ISA2_AVX10_1_UNSET;
1402 12 : opts->x_ix86_isa_flags2_explicit |= OPTION_MASK_ISA2_AVX10_1_UNSET;
1403 : }
1404 : return true;
1405 :
1406 7596211 : case OPT_mavx10_2:
1407 7596211 : if (value)
1408 : {
1409 7596197 : opts->x_ix86_isa_flags2 |= OPTION_MASK_ISA2_AVX10_2_SET;
1410 7596197 : opts->x_ix86_isa_flags2_explicit |= OPTION_MASK_ISA2_AVX10_2_SET;
1411 7596197 : opts->x_ix86_isa_flags |= OPTION_MASK_ISA_AVX10_1_SET;
1412 7596197 : opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_AVX10_1_SET;
1413 : }
1414 : else
1415 : {
1416 14 : opts->x_ix86_isa_flags2 &= ~OPTION_MASK_ISA2_AVX10_2_UNSET;
1417 14 : opts->x_ix86_isa_flags2_explicit |= OPTION_MASK_ISA2_AVX10_2_UNSET;
1418 : }
1419 : return true;
1420 :
1421 75883 : case OPT_mamx_avx512:
1422 75883 : if (value)
1423 : {
1424 75867 : opts->x_ix86_isa_flags2 |= OPTION_MASK_ISA2_AMX_AVX512_SET;
1425 75867 : opts->x_ix86_isa_flags2_explicit |= OPTION_MASK_ISA2_AMX_AVX512_SET;
1426 75867 : opts->x_ix86_isa_flags |= OPTION_MASK_ISA_AVX512F_SET;
1427 75867 : opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_AVX512F_SET;
1428 : }
1429 : else
1430 : {
1431 16 : opts->x_ix86_isa_flags2 &= ~OPTION_MASK_ISA2_AMX_AVX512_UNSET;
1432 16 : opts->x_ix86_isa_flags2_explicit |= OPTION_MASK_ISA2_AMX_AVX512_UNSET;
1433 : }
1434 : return true;
1435 :
1436 75878 : case OPT_mamx_tf32:
1437 75878 : if (value)
1438 : {
1439 75866 : opts->x_ix86_isa_flags2 |= OPTION_MASK_ISA2_AMX_TF32_SET;
1440 75866 : opts->x_ix86_isa_flags2_explicit |= OPTION_MASK_ISA2_AMX_TF32_SET;
1441 : }
1442 : else
1443 : {
1444 12 : opts->x_ix86_isa_flags2 &= ~OPTION_MASK_ISA2_AMX_TF32_UNSET;
1445 12 : opts->x_ix86_isa_flags2_explicit |= OPTION_MASK_ISA2_AMX_TF32_UNSET;
1446 : }
1447 : return true;
1448 :
1449 70712 : case OPT_mamx_fp8:
1450 70712 : if (value)
1451 : {
1452 70700 : opts->x_ix86_isa_flags2 |= OPTION_MASK_ISA2_AMX_FP8_SET;
1453 70700 : opts->x_ix86_isa_flags2_explicit |= OPTION_MASK_ISA2_AMX_FP8_SET;
1454 : }
1455 : else
1456 : {
1457 12 : opts->x_ix86_isa_flags2 &= ~OPTION_MASK_ISA2_AMX_FP8_UNSET;
1458 12 : opts->x_ix86_isa_flags2_explicit |= OPTION_MASK_ISA2_AMX_FP8_UNSET;
1459 : }
1460 : return true;
1461 :
1462 485381 : case OPT_mmovrs:
1463 485381 : if (value)
1464 : {
1465 485368 : opts->x_ix86_isa_flags2 |= OPTION_MASK_ISA2_MOVRS_SET;
1466 485368 : opts->x_ix86_isa_flags2_explicit |= OPTION_MASK_ISA2_MOVRS_SET;
1467 : }
1468 : else
1469 : {
1470 13 : opts->x_ix86_isa_flags2 &= ~OPTION_MASK_ISA2_MOVRS_UNSET;
1471 13 : opts->x_ix86_isa_flags2_explicit |=
1472 : OPTION_MASK_ISA2_MOVRS_UNSET;
1473 : }
1474 : return true;
1475 :
1476 75792 : case OPT_mamx_movrs:
1477 75792 : if (value)
1478 : {
1479 75780 : opts->x_ix86_isa_flags2 |= OPTION_MASK_ISA2_AMX_MOVRS_SET;
1480 75780 : opts->x_ix86_isa_flags2_explicit |= OPTION_MASK_ISA2_AMX_MOVRS_SET;
1481 : }
1482 : else
1483 : {
1484 12 : opts->x_ix86_isa_flags2 &= ~OPTION_MASK_ISA2_AMX_MOVRS_UNSET;
1485 12 : opts->x_ix86_isa_flags2_explicit |=
1486 : OPTION_MASK_ISA2_AMX_MOVRS_UNSET;
1487 : }
1488 : return true;
1489 :
1490 357032 : case OPT_mfma:
1491 357032 : if (value)
1492 : {
1493 357020 : opts->x_ix86_isa_flags |= OPTION_MASK_ISA_FMA_SET;
1494 357020 : opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_FMA_SET;
1495 : }
1496 : else
1497 : {
1498 12 : opts->x_ix86_isa_flags &= ~OPTION_MASK_ISA_FMA_UNSET;
1499 12 : opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_FMA_UNSET;
1500 : }
1501 : return true;
1502 :
1503 121549 : case OPT_mrtm:
1504 121549 : if (value)
1505 : {
1506 121536 : opts->x_ix86_isa_flags |= OPTION_MASK_ISA_RTM_SET;
1507 121536 : opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_RTM_SET;
1508 : }
1509 : else
1510 : {
1511 13 : opts->x_ix86_isa_flags &= ~OPTION_MASK_ISA_RTM_UNSET;
1512 13 : opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_RTM_UNSET;
1513 : }
1514 : return true;
1515 :
1516 191 : case OPT_msse4:
1517 191 : if (value)
1518 : {
1519 148 : opts->x_ix86_isa_flags |= OPTION_MASK_ISA_SSE4_SET;
1520 148 : opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_SSE4_SET;
1521 : }
1522 : else
1523 : {
1524 43 : opts->x_ix86_isa_flags &= ~OPTION_MASK_ISA_SSE4_UNSET;
1525 43 : opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_SSE4_UNSET;
1526 43 : opts->x_ix86_isa_flags2 &= ~OPTION_MASK_ISA2_SSE4_UNSET;
1527 43 : opts->x_ix86_isa_flags2_explicit |= OPTION_MASK_ISA2_SSE4_UNSET;
1528 : }
1529 : return true;
1530 :
1531 77255 : case OPT_msse4a:
1532 77255 : if (value)
1533 : {
1534 77253 : opts->x_ix86_isa_flags |= OPTION_MASK_ISA_SSE4A_SET;
1535 77253 : opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_SSE4A_SET;
1536 : }
1537 : else
1538 : {
1539 2 : opts->x_ix86_isa_flags &= ~OPTION_MASK_ISA_SSE4A_UNSET;
1540 2 : opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_SSE4A_UNSET;
1541 : }
1542 : return true;
1543 :
1544 91434 : case OPT_mfma4:
1545 91434 : if (value)
1546 : {
1547 91403 : opts->x_ix86_isa_flags |= OPTION_MASK_ISA_FMA4_SET;
1548 91403 : opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_FMA4_SET;
1549 : }
1550 : else
1551 : {
1552 31 : opts->x_ix86_isa_flags &= ~OPTION_MASK_ISA_FMA4_UNSET;
1553 31 : opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_FMA4_UNSET;
1554 : }
1555 : return true;
1556 :
1557 179375 : case OPT_mxop:
1558 179375 : if (value)
1559 : {
1560 179346 : opts->x_ix86_isa_flags |= OPTION_MASK_ISA_XOP_SET;
1561 179346 : opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_XOP_SET;
1562 : }
1563 : else
1564 : {
1565 29 : opts->x_ix86_isa_flags &= ~OPTION_MASK_ISA_XOP_UNSET;
1566 29 : opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_XOP_UNSET;
1567 : }
1568 : return true;
1569 :
1570 124685 : case OPT_mlwp:
1571 124685 : if (value)
1572 : {
1573 124672 : opts->x_ix86_isa_flags |= OPTION_MASK_ISA_LWP_SET;
1574 124672 : opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_LWP_SET;
1575 : }
1576 : else
1577 : {
1578 13 : opts->x_ix86_isa_flags &= ~OPTION_MASK_ISA_LWP_UNSET;
1579 13 : opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_LWP_UNSET;
1580 : }
1581 : return true;
1582 :
1583 58479 : case OPT_mabm:
1584 58479 : if (value)
1585 : {
1586 58475 : opts->x_ix86_isa_flags |= OPTION_MASK_ISA_ABM_SET;
1587 58475 : opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_ABM_SET;
1588 : }
1589 : else
1590 : {
1591 4 : opts->x_ix86_isa_flags &= ~OPTION_MASK_ISA_ABM_UNSET;
1592 4 : opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_ABM_UNSET;
1593 : }
1594 : return true;
1595 :
1596 315586 : case OPT_mbmi:
1597 315586 : if (value)
1598 : {
1599 315585 : opts->x_ix86_isa_flags |= OPTION_MASK_ISA_BMI_SET;
1600 315585 : opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_BMI_SET;
1601 : }
1602 : else
1603 : {
1604 1 : opts->x_ix86_isa_flags &= ~OPTION_MASK_ISA_BMI_UNSET;
1605 1 : opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_BMI_UNSET;
1606 : }
1607 : return true;
1608 :
1609 133626 : case OPT_mbmi2:
1610 133626 : if (value)
1611 : {
1612 133621 : opts->x_ix86_isa_flags |= OPTION_MASK_ISA_BMI2_SET;
1613 133621 : opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_BMI2_SET;
1614 : }
1615 : else
1616 : {
1617 5 : opts->x_ix86_isa_flags &= ~OPTION_MASK_ISA_BMI2_UNSET;
1618 5 : opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_BMI2_UNSET;
1619 : }
1620 : return true;
1621 :
1622 114378 : case OPT_mlzcnt:
1623 114378 : if (value)
1624 : {
1625 114372 : opts->x_ix86_isa_flags |= OPTION_MASK_ISA_LZCNT_SET;
1626 114372 : opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_LZCNT_SET;
1627 : }
1628 : else
1629 : {
1630 6 : opts->x_ix86_isa_flags &= ~OPTION_MASK_ISA_LZCNT_UNSET;
1631 6 : opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_LZCNT_UNSET;
1632 : }
1633 : return true;
1634 :
1635 265419 : case OPT_mtbm:
1636 265419 : if (value)
1637 : {
1638 265406 : opts->x_ix86_isa_flags |= OPTION_MASK_ISA_TBM_SET;
1639 265406 : opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_TBM_SET;
1640 : }
1641 : else
1642 : {
1643 13 : opts->x_ix86_isa_flags &= ~OPTION_MASK_ISA_TBM_UNSET;
1644 13 : opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_TBM_UNSET;
1645 : }
1646 : return true;
1647 :
1648 64569 : case OPT_mpopcnt:
1649 64569 : if (value)
1650 : {
1651 64553 : opts->x_ix86_isa_flags |= OPTION_MASK_ISA_POPCNT_SET;
1652 64553 : opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_POPCNT_SET;
1653 : }
1654 : else
1655 : {
1656 16 : opts->x_ix86_isa_flags &= ~OPTION_MASK_ISA_POPCNT_UNSET;
1657 16 : opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_POPCNT_UNSET;
1658 : }
1659 : return true;
1660 :
1661 17 : case OPT_msahf:
1662 17 : if (value)
1663 : {
1664 15 : opts->x_ix86_isa_flags |= OPTION_MASK_ISA_SAHF_SET;
1665 15 : opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_SAHF_SET;
1666 : }
1667 : else
1668 : {
1669 2 : opts->x_ix86_isa_flags &= ~OPTION_MASK_ISA_SAHF_UNSET;
1670 2 : opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_SAHF_UNSET;
1671 : }
1672 : return true;
1673 :
1674 67 : case OPT_mcx16:
1675 67 : if (value)
1676 : {
1677 65 : opts->x_ix86_isa_flags2 |= OPTION_MASK_ISA2_CX16_SET;
1678 65 : opts->x_ix86_isa_flags2_explicit |= OPTION_MASK_ISA2_CX16_SET;
1679 : }
1680 : else
1681 : {
1682 2 : opts->x_ix86_isa_flags2 &= ~OPTION_MASK_ISA2_CX16_UNSET;
1683 2 : opts->x_ix86_isa_flags2_explicit |= OPTION_MASK_ISA2_CX16_UNSET;
1684 : }
1685 : return true;
1686 :
1687 30 : case OPT_mmovbe:
1688 30 : if (value)
1689 : {
1690 25 : opts->x_ix86_isa_flags2 |= OPTION_MASK_ISA2_MOVBE_SET;
1691 25 : opts->x_ix86_isa_flags2_explicit |= OPTION_MASK_ISA2_MOVBE_SET;
1692 : }
1693 : else
1694 : {
1695 5 : opts->x_ix86_isa_flags2 &= ~OPTION_MASK_ISA2_MOVBE_UNSET;
1696 5 : opts->x_ix86_isa_flags2_explicit |= OPTION_MASK_ISA2_MOVBE_UNSET;
1697 : }
1698 : return true;
1699 :
1700 11146 : case OPT_mcrc32:
1701 11146 : if (value)
1702 : {
1703 11142 : opts->x_ix86_isa_flags |= OPTION_MASK_ISA_CRC32_SET;
1704 11142 : opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_CRC32_SET;
1705 : }
1706 : else
1707 : {
1708 4 : opts->x_ix86_isa_flags &= ~OPTION_MASK_ISA_CRC32_UNSET;
1709 4 : opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_CRC32_UNSET;
1710 : }
1711 : return true;
1712 :
1713 83697 : case OPT_maes:
1714 83697 : if (value)
1715 : {
1716 83695 : opts->x_ix86_isa_flags |= OPTION_MASK_ISA_AES_SET;
1717 83695 : opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_AES_SET;
1718 : }
1719 : else
1720 : {
1721 2 : opts->x_ix86_isa_flags &= ~OPTION_MASK_ISA_AES_UNSET;
1722 2 : opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_AES_UNSET;
1723 : }
1724 : return true;
1725 :
1726 144705 : case OPT_msha:
1727 144705 : if (value)
1728 : {
1729 144704 : opts->x_ix86_isa_flags |= OPTION_MASK_ISA_SHA_SET;
1730 144704 : opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_SHA_SET;
1731 : }
1732 : else
1733 : {
1734 1 : opts->x_ix86_isa_flags &= ~OPTION_MASK_ISA_SHA_UNSET;
1735 1 : opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_SHA_UNSET;
1736 : }
1737 : return true;
1738 :
1739 73738 : case OPT_mpclmul:
1740 73738 : if (value)
1741 : {
1742 73737 : opts->x_ix86_isa_flags |= OPTION_MASK_ISA_PCLMUL_SET;
1743 73737 : opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_PCLMUL_SET;
1744 : }
1745 : else
1746 : {
1747 1 : opts->x_ix86_isa_flags &= ~OPTION_MASK_ISA_PCLMUL_UNSET;
1748 1 : opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_PCLMUL_UNSET;
1749 : }
1750 : return true;
1751 :
1752 156275 : case OPT_mfsgsbase:
1753 156275 : if (value)
1754 : {
1755 156274 : opts->x_ix86_isa_flags |= OPTION_MASK_ISA_FSGSBASE_SET;
1756 156274 : opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_FSGSBASE_SET;
1757 : }
1758 : else
1759 : {
1760 1 : opts->x_ix86_isa_flags &= ~OPTION_MASK_ISA_FSGSBASE_UNSET;
1761 1 : opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_FSGSBASE_UNSET;
1762 : }
1763 : return true;
1764 :
1765 112327 : case OPT_mrdrnd:
1766 112327 : if (value)
1767 : {
1768 112326 : opts->x_ix86_isa_flags |= OPTION_MASK_ISA_RDRND_SET;
1769 112326 : opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_RDRND_SET;
1770 : }
1771 : else
1772 : {
1773 1 : opts->x_ix86_isa_flags &= ~OPTION_MASK_ISA_RDRND_UNSET;
1774 1 : opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_RDRND_UNSET;
1775 : }
1776 : return true;
1777 :
1778 25307 : case OPT_mptwrite:
1779 25307 : if (value)
1780 : {
1781 25296 : opts->x_ix86_isa_flags2 |= OPTION_MASK_ISA2_PTWRITE_SET;
1782 25296 : opts->x_ix86_isa_flags2_explicit |= OPTION_MASK_ISA2_PTWRITE_SET;
1783 : }
1784 : else
1785 : {
1786 11 : opts->x_ix86_isa_flags2 &= ~OPTION_MASK_ISA2_PTWRITE_UNSET;
1787 11 : opts->x_ix86_isa_flags2_explicit |= OPTION_MASK_ISA2_PTWRITE_UNSET;
1788 : }
1789 : return true;
1790 :
1791 132008 : case OPT_mf16c:
1792 132008 : if (value)
1793 : {
1794 132007 : opts->x_ix86_isa_flags |= OPTION_MASK_ISA_F16C_SET;
1795 132007 : opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_F16C_SET;
1796 : }
1797 : else
1798 : {
1799 1 : opts->x_ix86_isa_flags &= ~OPTION_MASK_ISA_F16C_UNSET;
1800 1 : opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_F16C_UNSET;
1801 : }
1802 : return true;
1803 :
1804 60647 : case OPT_mfxsr:
1805 60647 : if (value)
1806 : {
1807 60645 : opts->x_ix86_isa_flags |= OPTION_MASK_ISA_FXSR_SET;
1808 60645 : opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_FXSR_SET;
1809 : }
1810 : else
1811 : {
1812 2 : opts->x_ix86_isa_flags &= ~OPTION_MASK_ISA_FXSR_UNSET;
1813 2 : opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_FXSR_UNSET;
1814 : }
1815 : return true;
1816 :
1817 6886 : case OPT_mxsave:
1818 6886 : if (value)
1819 : {
1820 6880 : opts->x_ix86_isa_flags |= OPTION_MASK_ISA_XSAVE_SET;
1821 6880 : opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_XSAVE_SET;
1822 : }
1823 : else
1824 : {
1825 6 : opts->x_ix86_isa_flags &= ~OPTION_MASK_ISA_XSAVE_UNSET;
1826 6 : opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_XSAVE_UNSET;
1827 6 : opts->x_ix86_isa_flags2 &= ~OPTION_MASK_ISA2_XSAVE_UNSET;
1828 6 : opts->x_ix86_isa_flags2_explicit |= OPTION_MASK_ISA2_XSAVE_UNSET;
1829 : }
1830 : return true;
1831 :
1832 85681 : case OPT_mxsaveopt:
1833 85681 : if (value)
1834 : {
1835 85680 : opts->x_ix86_isa_flags |= OPTION_MASK_ISA_XSAVEOPT_SET;
1836 85680 : opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_XSAVEOPT_SET;
1837 : }
1838 : else
1839 : {
1840 1 : opts->x_ix86_isa_flags &= ~OPTION_MASK_ISA_XSAVEOPT_UNSET;
1841 1 : opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_XSAVEOPT_UNSET;
1842 : }
1843 : return true;
1844 :
1845 71796 : case OPT_mxsavec:
1846 71796 : if (value)
1847 : {
1848 71794 : opts->x_ix86_isa_flags |= OPTION_MASK_ISA_XSAVEC_SET;
1849 71794 : opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_XSAVEC_SET;
1850 : }
1851 : else
1852 : {
1853 2 : opts->x_ix86_isa_flags &= ~OPTION_MASK_ISA_XSAVEC_UNSET;
1854 2 : opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_XSAVEC_UNSET;
1855 : }
1856 : return true;
1857 :
1858 91715 : case OPT_mxsaves:
1859 91715 : if (value)
1860 : {
1861 91713 : opts->x_ix86_isa_flags |= OPTION_MASK_ISA_XSAVES_SET;
1862 91713 : opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_XSAVES_SET;
1863 : }
1864 : else
1865 : {
1866 2 : opts->x_ix86_isa_flags &= ~OPTION_MASK_ISA_XSAVES_UNSET;
1867 2 : opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_XSAVES_UNSET;
1868 : }
1869 : return true;
1870 :
1871 95745 : case OPT_mrdseed:
1872 95745 : if (value)
1873 : {
1874 95743 : opts->x_ix86_isa_flags |= OPTION_MASK_ISA_RDSEED_SET;
1875 95743 : opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_RDSEED_SET;
1876 : }
1877 : else
1878 : {
1879 2 : opts->x_ix86_isa_flags &= ~OPTION_MASK_ISA_RDSEED_UNSET;
1880 2 : opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_RDSEED_UNSET;
1881 : }
1882 : return true;
1883 :
1884 59106 : case OPT_mprfchw:
1885 59106 : if (value)
1886 : {
1887 59104 : opts->x_ix86_isa_flags |= OPTION_MASK_ISA_PRFCHW_SET;
1888 59104 : opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_PRFCHW_SET;
1889 : }
1890 : else
1891 : {
1892 2 : opts->x_ix86_isa_flags &= ~OPTION_MASK_ISA_PRFCHW_UNSET;
1893 2 : opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_PRFCHW_UNSET;
1894 : }
1895 : return true;
1896 :
1897 60637 : case OPT_madx:
1898 60637 : if (value)
1899 : {
1900 60633 : opts->x_ix86_isa_flags |= OPTION_MASK_ISA_ADX_SET;
1901 60633 : opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_ADX_SET;
1902 : }
1903 : else
1904 : {
1905 4 : opts->x_ix86_isa_flags &= ~OPTION_MASK_ISA_ADX_UNSET;
1906 4 : opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_ADX_UNSET;
1907 : }
1908 : return true;
1909 :
1910 61883 : case OPT_mclflushopt:
1911 61883 : if (value)
1912 : {
1913 61881 : opts->x_ix86_isa_flags |= OPTION_MASK_ISA_CLFLUSHOPT_SET;
1914 61881 : opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_CLFLUSHOPT_SET;
1915 : }
1916 : else
1917 : {
1918 2 : opts->x_ix86_isa_flags &= ~OPTION_MASK_ISA_CLFLUSHOPT_UNSET;
1919 2 : opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_CLFLUSHOPT_UNSET;
1920 : }
1921 : return true;
1922 :
1923 61902 : case OPT_mclwb:
1924 61902 : if (value)
1925 : {
1926 61900 : opts->x_ix86_isa_flags |= OPTION_MASK_ISA_CLWB_SET;
1927 61900 : opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_CLWB_SET;
1928 : }
1929 : else
1930 : {
1931 2 : opts->x_ix86_isa_flags &= ~OPTION_MASK_ISA_CLWB_UNSET;
1932 2 : opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_CLWB_UNSET;
1933 : }
1934 : return true;
1935 :
1936 71389 : case OPT_mmwaitx:
1937 71389 : if (value)
1938 : {
1939 71387 : opts->x_ix86_isa_flags2 |= OPTION_MASK_ISA2_MWAITX_SET;
1940 71387 : opts->x_ix86_isa_flags2_explicit |= OPTION_MASK_ISA2_MWAITX_SET;
1941 : }
1942 : else
1943 : {
1944 2 : opts->x_ix86_isa_flags2 &= ~OPTION_MASK_ISA2_MWAITX_UNSET;
1945 2 : opts->x_ix86_isa_flags2_explicit |= OPTION_MASK_ISA2_MWAITX_UNSET;
1946 : }
1947 : return true;
1948 :
1949 25629 : case OPT_mmwait:
1950 25629 : if (value)
1951 : {
1952 25628 : opts->x_ix86_isa_flags2 |= OPTION_MASK_ISA2_MWAIT_SET;
1953 25628 : opts->x_ix86_isa_flags2_explicit |= OPTION_MASK_ISA2_MWAIT_SET;
1954 : }
1955 : else
1956 : {
1957 1 : opts->x_ix86_isa_flags2 &= ~OPTION_MASK_ISA2_MWAIT_UNSET;
1958 1 : opts->x_ix86_isa_flags2_explicit |= OPTION_MASK_ISA2_MWAIT_UNSET;
1959 : }
1960 : return true;
1961 :
1962 61329 : case OPT_mclzero:
1963 61329 : if (value)
1964 : {
1965 61327 : opts->x_ix86_isa_flags2 |= OPTION_MASK_ISA2_CLZERO_SET;
1966 61327 : opts->x_ix86_isa_flags2_explicit |= OPTION_MASK_ISA2_CLZERO_SET;
1967 : }
1968 : else
1969 : {
1970 2 : opts->x_ix86_isa_flags2 &= ~OPTION_MASK_ISA2_CLZERO_UNSET;
1971 2 : opts->x_ix86_isa_flags2_explicit |= OPTION_MASK_ISA2_CLZERO_UNSET;
1972 : }
1973 : return true;
1974 :
1975 71902 : case OPT_mpku:
1976 71902 : if (value)
1977 : {
1978 71889 : opts->x_ix86_isa_flags |= OPTION_MASK_ISA_PKU_SET;
1979 71889 : opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_PKU_SET;
1980 : }
1981 : else
1982 : {
1983 13 : opts->x_ix86_isa_flags &= ~OPTION_MASK_ISA_PKU_UNSET;
1984 13 : opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_PKU_UNSET;
1985 : }
1986 : return true;
1987 :
1988 :
1989 1 : case OPT_malign_loops_:
1990 1 : warning_at (loc, 0, "%<-malign-loops%> is obsolete, "
1991 : "use %<-falign-loops%>");
1992 1 : if (value > MAX_CODE_ALIGN)
1993 0 : error_at (loc, "%<-malign-loops=%d%> is not between 0 and %d",
1994 : value, MAX_CODE_ALIGN);
1995 : else
1996 1 : set_malign_value (&opts->x_str_align_loops, value);
1997 : return true;
1998 :
1999 0 : case OPT_malign_jumps_:
2000 0 : warning_at (loc, 0, "%<-malign-jumps%> is obsolete, "
2001 : "use %<-falign-jumps%>");
2002 0 : if (value > MAX_CODE_ALIGN)
2003 0 : error_at (loc, "%<-malign-jumps=%d%> is not between 0 and %d",
2004 : value, MAX_CODE_ALIGN);
2005 : else
2006 0 : set_malign_value (&opts->x_str_align_jumps, value);
2007 : return true;
2008 :
2009 0 : case OPT_malign_functions_:
2010 0 : warning_at (loc, 0,
2011 : "%<-malign-functions%> is obsolete, "
2012 : "use %<-falign-functions%>");
2013 0 : if (value > MAX_CODE_ALIGN)
2014 0 : error_at (loc, "%<-malign-functions=%d%> is not between 0 and %d",
2015 : value, MAX_CODE_ALIGN);
2016 : else
2017 0 : set_malign_value (&opts->x_str_align_functions, value);
2018 : return true;
2019 :
2020 20 : case OPT_mbranch_cost_:
2021 20 : if (value > 5)
2022 : {
2023 0 : error_at (loc, "%<-mbranch-cost=%d%> is not between 0 and 5", value);
2024 0 : opts->x_ix86_branch_cost = 5;
2025 : }
2026 : return true;
2027 :
2028 : default:
2029 : return true;
2030 : }
2031 : }
2032 :
2033 : static const struct default_options ix86_option_optimization_table[] =
2034 : {
2035 : /* Enable redundant extension instructions removal at -O2 and higher. */
2036 : { OPT_LEVELS_2_PLUS, OPT_free, NULL, 1 },
2037 : /* Enable function splitting at -O2 and higher. */
2038 : { OPT_LEVELS_2_PLUS, OPT_freorder_blocks_and_partition, NULL, 1 },
2039 : /* The STC algorithm produces the smallest code at -Os, for x86. */
2040 : { OPT_LEVELS_2_PLUS, OPT_freorder_blocks_algorithm_, NULL,
2041 : REORDER_BLOCKS_ALGORITHM_STC },
2042 :
2043 : /* Turn on -funroll-loops with -munroll-only-small-loops to enable small
2044 : loop unrolling at -O2. */
2045 : { OPT_LEVELS_2_PLUS_SPEED_ONLY, OPT_funroll_loops, NULL, 1 },
2046 : { OPT_LEVELS_2_PLUS_SPEED_ONLY, OPT_munroll_only_small_loops, NULL, 1 },
2047 : /* Turns off -frename-registers and -fweb which are enabled by
2048 : funroll-loops. */
2049 : { OPT_LEVELS_ALL, OPT_frename_registers, NULL, 0 },
2050 : { OPT_LEVELS_ALL, OPT_fweb, NULL, 0 },
2051 : /* Turn off -fschedule-insns by default. It tends to make the
2052 : problem with not enough registers even worse. */
2053 : { OPT_LEVELS_ALL, OPT_fschedule_insns, NULL, 0 },
2054 :
2055 : #ifdef SUBTARGET_OPTIMIZATION_OPTIONS
2056 : SUBTARGET_OPTIMIZATION_OPTIONS,
2057 : #endif
2058 : { OPT_LEVELS_NONE, 0, NULL, 0 }
2059 : };
2060 :
2061 : /* Implement TARGET_OPTION_INIT_STRUCT. */
2062 :
2063 : static void
2064 48269611 : ix86_option_init_struct (struct gcc_options *opts)
2065 : {
2066 48269611 : if (TARGET_MACHO)
2067 : /* The Darwin libraries never set errno, so we might as well
2068 : avoid calling them when that's the only reason we would. */
2069 : opts->x_flag_errno_math = 0;
2070 :
2071 48269611 : opts->x_flag_pcc_struct_return = 2;
2072 48269611 : opts->x_flag_asynchronous_unwind_tables = 2;
2073 48269611 : }
2074 :
2075 : /* On the x86 -fsplit-stack and -fstack-protector both use the same
2076 : field in the TCB, so they cannot be used together. */
2077 :
2078 : static bool
2079 6363 : ix86_supports_split_stack (bool report,
2080 : struct gcc_options *opts ATTRIBUTE_UNUSED)
2081 : {
2082 : #if defined(TARGET_THREAD_SPLIT_STACK_OFFSET) && defined(OPTION_GLIBC_P)
2083 6363 : if (!OPTION_GLIBC_P (opts))
2084 : #endif
2085 : {
2086 0 : if (report)
2087 0 : error ("%<-fsplit-stack%> currently only supported on GNU/Linux");
2088 0 : return false;
2089 : }
2090 :
2091 : bool ret = true;
2092 :
2093 : #ifdef TARGET_THREAD_SPLIT_STACK_OFFSET
2094 : if (!HAVE_GAS_CFI_PERSONALITY_DIRECTIVE)
2095 : {
2096 : if (report)
2097 : error ("%<-fsplit-stack%> requires "
2098 : "assembler support for CFI directives");
2099 : ret = false;
2100 : }
2101 : #endif
2102 :
2103 : return ret;
2104 : }
2105 :
2106 : /* Implement TARGET_EXCEPT_UNWIND_INFO. */
2107 :
2108 : static enum unwind_info_type
2109 9033942 : i386_except_unwind_info (struct gcc_options *opts)
2110 : {
2111 : /* Honor the --enable-sjlj-exceptions configure switch. */
2112 : #ifdef CONFIG_SJLJ_EXCEPTIONS
2113 : if (CONFIG_SJLJ_EXCEPTIONS)
2114 : return UI_SJLJ;
2115 : #endif
2116 :
2117 : /* On windows 64, prefer SEH exceptions over anything else. */
2118 9033942 : if (TARGET_64BIT && DEFAULT_ABI == MS_ABI && opts->x_flag_unwind_tables)
2119 : return UI_SEH;
2120 :
2121 9033942 : if (DWARF2_UNWIND_INFO)
2122 9033942 : return UI_DWARF2;
2123 :
2124 : return UI_SJLJ;
2125 : }
2126 :
2127 : #undef TARGET_EXCEPT_UNWIND_INFO
2128 : #define TARGET_EXCEPT_UNWIND_INFO i386_except_unwind_info
2129 :
2130 : #undef TARGET_DEFAULT_TARGET_FLAGS
2131 : #define TARGET_DEFAULT_TARGET_FLAGS \
2132 : (TARGET_DEFAULT \
2133 : | TARGET_SUBTARGET_DEFAULT \
2134 : | TARGET_TLS_DIRECT_SEG_REFS_DEFAULT)
2135 :
2136 : #undef TARGET_HANDLE_OPTION
2137 : #define TARGET_HANDLE_OPTION ix86_handle_option
2138 :
2139 : #undef TARGET_OPTION_OPTIMIZATION_TABLE
2140 : #define TARGET_OPTION_OPTIMIZATION_TABLE ix86_option_optimization_table
2141 : #undef TARGET_OPTION_INIT_STRUCT
2142 : #define TARGET_OPTION_INIT_STRUCT ix86_option_init_struct
2143 :
2144 : #undef TARGET_SUPPORTS_SPLIT_STACK
2145 : #define TARGET_SUPPORTS_SPLIT_STACK ix86_supports_split_stack
2146 :
2147 : /* This table must be in sync with enum processor_type in i386.h. */
2148 : const char *const processor_names[] =
2149 : {
2150 : "generic",
2151 : "i386",
2152 : "i486",
2153 : "pentium",
2154 : "lakemont",
2155 : "pentiumpro",
2156 : "pentium4",
2157 : "nocona",
2158 : "core2",
2159 : "nehalem",
2160 : "sandybridge",
2161 : "haswell",
2162 : "bonnell",
2163 : "silvermont",
2164 : "goldmont",
2165 : "goldmont-plus",
2166 : "tremont",
2167 : "sierraforest",
2168 : "grandridge",
2169 : "clearwaterforest",
2170 : "skylake",
2171 : "skylake-avx512",
2172 : "cannonlake",
2173 : "icelake-client",
2174 : "icelake-server",
2175 : "cascadelake",
2176 : "tigerlake",
2177 : "cooperlake",
2178 : "sapphirerapids",
2179 : "alderlake",
2180 : "rocketlake",
2181 : "graniterapids",
2182 : "graniterapids-d",
2183 : "arrowlake",
2184 : "arrowlake-s",
2185 : "pantherlake",
2186 : "diamondrapids",
2187 : "novalake",
2188 : "intel",
2189 : "lujiazui",
2190 : "yongfeng",
2191 : "shijidadao",
2192 : "geode",
2193 : "k6",
2194 : "athlon",
2195 : "k8",
2196 : "amdfam10",
2197 : "bdver1",
2198 : "bdver2",
2199 : "bdver3",
2200 : "bdver4",
2201 : "btver1",
2202 : "btver2",
2203 : "znver1",
2204 : "znver2",
2205 : "znver3",
2206 : "znver4",
2207 : "znver5",
2208 : "znver6"
2209 : };
2210 :
2211 : /* Guarantee that the array is aligned with enum processor_type. */
2212 : STATIC_ASSERT (ARRAY_SIZE (processor_names) == PROCESSOR_max);
2213 :
2214 : const pta processor_alias_table[] =
2215 : {
2216 : {"i386", PROCESSOR_I386, CPU_NONE, 0, 0, P_NONE},
2217 : {"i486", PROCESSOR_I486, CPU_NONE, 0, 0, P_NONE},
2218 : {"i586", PROCESSOR_PENTIUM, CPU_PENTIUM, 0, 0, P_NONE},
2219 : {"pentium", PROCESSOR_PENTIUM, CPU_PENTIUM, 0, 0, P_NONE},
2220 : {"lakemont", PROCESSOR_LAKEMONT, CPU_PENTIUM, PTA_NO_80387,
2221 : 0, P_NONE},
2222 : {"pentium-mmx", PROCESSOR_PENTIUM, CPU_PENTIUM, PTA_MMX, 0, P_NONE},
2223 : {"winchip-c6", PROCESSOR_I486, CPU_NONE, PTA_MMX, 0, P_NONE},
2224 : {"winchip2", PROCESSOR_I486, CPU_NONE, PTA_MMX | PTA_3DNOW,
2225 : 0, P_NONE},
2226 : {"c3", PROCESSOR_I486, CPU_NONE, PTA_MMX | PTA_3DNOW, 0, P_NONE},
2227 : {"samuel-2", PROCESSOR_I486, CPU_NONE, PTA_MMX | PTA_3DNOW,
2228 : 0, P_NONE},
2229 : {"c3-2", PROCESSOR_PENTIUMPRO, CPU_PENTIUMPRO,
2230 : PTA_MMX | PTA_SSE | PTA_FXSR, 0, P_NONE},
2231 : {"nehemiah", PROCESSOR_PENTIUMPRO, CPU_PENTIUMPRO,
2232 : PTA_MMX | PTA_SSE | PTA_FXSR, 0, P_NONE},
2233 : {"c7", PROCESSOR_PENTIUMPRO, CPU_PENTIUMPRO,
2234 : PTA_MMX | PTA_SSE | PTA_SSE2 | PTA_SSE3 | PTA_FXSR, 0, P_NONE},
2235 : {"esther", PROCESSOR_PENTIUMPRO, CPU_PENTIUMPRO,
2236 : PTA_MMX | PTA_SSE | PTA_SSE2 | PTA_SSE3 | PTA_FXSR, 0, P_NONE},
2237 : {"i686", PROCESSOR_PENTIUMPRO, CPU_PENTIUMPRO, 0, 0, P_NONE},
2238 : {"pentiumpro", PROCESSOR_PENTIUMPRO, CPU_PENTIUMPRO, 0, 0, P_NONE},
2239 : {"pentium2", PROCESSOR_PENTIUMPRO, CPU_PENTIUMPRO, PTA_MMX | PTA_FXSR,
2240 : 0, P_NONE},
2241 : {"pentium3", PROCESSOR_PENTIUMPRO, CPU_PENTIUMPRO,
2242 : PTA_MMX | PTA_SSE | PTA_FXSR, 0, P_NONE},
2243 : {"pentium3m", PROCESSOR_PENTIUMPRO, CPU_PENTIUMPRO,
2244 : PTA_MMX | PTA_SSE | PTA_FXSR, 0, P_NONE},
2245 : {"pentium-m", PROCESSOR_PENTIUMPRO, CPU_PENTIUMPRO,
2246 : PTA_MMX | PTA_SSE | PTA_SSE2 | PTA_FXSR, 0, P_NONE},
2247 : {"pentium4", PROCESSOR_PENTIUM4, CPU_NONE,
2248 : PTA_MMX | PTA_SSE | PTA_SSE2 | PTA_FXSR, 0, P_NONE},
2249 : {"pentium4m", PROCESSOR_PENTIUM4, CPU_NONE,
2250 : PTA_MMX | PTA_SSE | PTA_SSE2 | PTA_FXSR, 0, P_NONE},
2251 : {"prescott", PROCESSOR_NOCONA, CPU_NONE,
2252 : PTA_MMX | PTA_SSE | PTA_SSE2 | PTA_SSE3 | PTA_FXSR, 0, P_NONE},
2253 : {"nocona", PROCESSOR_NOCONA, CPU_NONE,
2254 : PTA_64BIT | PTA_MMX | PTA_SSE | PTA_SSE2 | PTA_SSE3
2255 : | PTA_CX16 | PTA_NO_SAHF | PTA_FXSR, 0, P_NONE},
2256 : {"core2", PROCESSOR_CORE2, CPU_CORE2, PTA_CORE2,
2257 : M_CPU_TYPE (INTEL_CORE2), P_PROC_SSSE3},
2258 : {"nehalem", PROCESSOR_NEHALEM, CPU_NEHALEM, PTA_NEHALEM,
2259 : M_CPU_SUBTYPE (INTEL_COREI7_NEHALEM), P_PROC_DYNAMIC},
2260 : {"corei7", PROCESSOR_NEHALEM, CPU_NEHALEM, PTA_NEHALEM,
2261 : M_CPU_TYPE (INTEL_COREI7), P_PROC_DYNAMIC},
2262 : {"westmere", PROCESSOR_NEHALEM, CPU_NEHALEM, PTA_WESTMERE,
2263 : M_CPU_SUBTYPE (INTEL_COREI7_WESTMERE), P_PROC_DYNAMIC},
2264 : {"sandybridge", PROCESSOR_SANDYBRIDGE, CPU_NEHALEM,
2265 : PTA_SANDYBRIDGE,
2266 : M_CPU_SUBTYPE (INTEL_COREI7_SANDYBRIDGE), P_PROC_DYNAMIC},
2267 : {"corei7-avx", PROCESSOR_SANDYBRIDGE, CPU_NEHALEM,
2268 : PTA_SANDYBRIDGE, 0, P_PROC_DYNAMIC},
2269 : {"ivybridge", PROCESSOR_SANDYBRIDGE, CPU_NEHALEM,
2270 : PTA_IVYBRIDGE,
2271 : M_CPU_SUBTYPE (INTEL_COREI7_IVYBRIDGE), P_PROC_DYNAMIC},
2272 : {"core-avx-i", PROCESSOR_SANDYBRIDGE, CPU_NEHALEM,
2273 : PTA_IVYBRIDGE, 0, P_PROC_DYNAMIC},
2274 : {"haswell", PROCESSOR_HASWELL, CPU_HASWELL, PTA_HASWELL,
2275 : M_CPU_SUBTYPE (INTEL_COREI7_HASWELL), P_PROC_DYNAMIC},
2276 : {"core-avx2", PROCESSOR_HASWELL, CPU_HASWELL, PTA_HASWELL,
2277 : 0, P_PROC_DYNAMIC},
2278 : {"broadwell", PROCESSOR_HASWELL, CPU_HASWELL, PTA_BROADWELL,
2279 : M_CPU_SUBTYPE (INTEL_COREI7_BROADWELL), P_PROC_DYNAMIC},
2280 : {"skylake", PROCESSOR_SKYLAKE, CPU_HASWELL, PTA_SKYLAKE,
2281 : M_CPU_SUBTYPE (INTEL_COREI7_SKYLAKE), P_PROC_AVX2},
2282 : {"skylake-avx512", PROCESSOR_SKYLAKE_AVX512, CPU_HASWELL,
2283 : PTA_SKYLAKE_AVX512,
2284 : M_CPU_SUBTYPE (INTEL_COREI7_SKYLAKE_AVX512), P_PROC_AVX512F},
2285 : {"cannonlake", PROCESSOR_CANNONLAKE, CPU_HASWELL, PTA_CANNONLAKE,
2286 : M_CPU_SUBTYPE (INTEL_COREI7_CANNONLAKE), P_PROC_AVX512F},
2287 : {"icelake-client", PROCESSOR_ICELAKE_CLIENT, CPU_HASWELL,
2288 : PTA_ICELAKE_CLIENT,
2289 : M_CPU_SUBTYPE (INTEL_COREI7_ICELAKE_CLIENT), P_PROC_AVX512F},
2290 : {"rocketlake", PROCESSOR_ROCKETLAKE, CPU_HASWELL,
2291 : PTA_ROCKETLAKE,
2292 : M_CPU_SUBTYPE (INTEL_COREI7_ROCKETLAKE), P_PROC_AVX512F},
2293 : {"icelake-server", PROCESSOR_ICELAKE_SERVER, CPU_HASWELL,
2294 : PTA_ICELAKE_SERVER,
2295 : M_CPU_SUBTYPE (INTEL_COREI7_ICELAKE_SERVER), P_PROC_AVX512F},
2296 : {"cascadelake", PROCESSOR_CASCADELAKE, CPU_HASWELL,
2297 : PTA_CASCADELAKE,
2298 : M_CPU_SUBTYPE (INTEL_COREI7_CASCADELAKE), P_PROC_AVX512F},
2299 : {"tigerlake", PROCESSOR_TIGERLAKE, CPU_HASWELL, PTA_TIGERLAKE,
2300 : M_CPU_SUBTYPE (INTEL_COREI7_TIGERLAKE), P_PROC_AVX512F},
2301 : {"cooperlake", PROCESSOR_COOPERLAKE, CPU_HASWELL, PTA_COOPERLAKE,
2302 : M_CPU_SUBTYPE (INTEL_COREI7_COOPERLAKE), P_PROC_AVX512F},
2303 : {"sapphirerapids", PROCESSOR_SAPPHIRERAPIDS, CPU_HASWELL, PTA_SAPPHIRERAPIDS,
2304 : M_CPU_SUBTYPE (INTEL_COREI7_SAPPHIRERAPIDS), P_PROC_AVX512F},
2305 : {"emeraldrapids", PROCESSOR_SAPPHIRERAPIDS, CPU_HASWELL, PTA_SAPPHIRERAPIDS,
2306 : M_CPU_SUBTYPE (INTEL_COREI7_SAPPHIRERAPIDS), P_PROC_AVX512F},
2307 : {"alderlake", PROCESSOR_ALDERLAKE, CPU_HASWELL, PTA_ALDERLAKE,
2308 : M_CPU_SUBTYPE (INTEL_COREI7_ALDERLAKE), P_PROC_AVX2},
2309 : {"raptorlake", PROCESSOR_ALDERLAKE, CPU_HASWELL, PTA_ALDERLAKE,
2310 : M_CPU_SUBTYPE (INTEL_COREI7_ALDERLAKE), P_PROC_AVX2},
2311 : {"meteorlake", PROCESSOR_ALDERLAKE, CPU_HASWELL, PTA_ALDERLAKE,
2312 : M_CPU_SUBTYPE (INTEL_COREI7_ALDERLAKE), P_PROC_AVX2},
2313 : {"graniterapids", PROCESSOR_GRANITERAPIDS, CPU_HASWELL, PTA_GRANITERAPIDS,
2314 : M_CPU_SUBTYPE (INTEL_COREI7_GRANITERAPIDS), P_PROC_AVX10_1},
2315 : {"graniterapids-d", PROCESSOR_GRANITERAPIDS_D, CPU_HASWELL,
2316 : PTA_GRANITERAPIDS_D, M_CPU_SUBTYPE (INTEL_COREI7_GRANITERAPIDS_D),
2317 : P_PROC_AVX10_1},
2318 : {"arrowlake", PROCESSOR_ARROWLAKE, CPU_HASWELL, PTA_ARROWLAKE,
2319 : M_CPU_SUBTYPE (INTEL_COREI7_ARROWLAKE), P_PROC_AVX2},
2320 : {"arrowlake-s", PROCESSOR_ARROWLAKE_S, CPU_HASWELL, PTA_ARROWLAKE_S,
2321 : M_CPU_SUBTYPE (INTEL_COREI7_ARROWLAKE_S), P_PROC_AVX2},
2322 : {"lunarlake", PROCESSOR_ARROWLAKE_S, CPU_HASWELL, PTA_ARROWLAKE_S,
2323 : M_CPU_SUBTYPE (INTEL_COREI7_ARROWLAKE_S), P_PROC_AVX2},
2324 : {"pantherlake", PROCESSOR_PANTHERLAKE, CPU_HASWELL, PTA_PANTHERLAKE,
2325 : M_CPU_SUBTYPE (INTEL_COREI7_PANTHERLAKE), P_PROC_AVX2},
2326 : {"diamondrapids", PROCESSOR_DIAMONDRAPIDS, CPU_HASWELL, PTA_DIAMONDRAPIDS,
2327 : M_CPU_SUBTYPE (INTEL_COREI7_DIAMONDRAPIDS), P_PROC_AVX10_1},
2328 : {"wildcatlake", PROCESSOR_PANTHERLAKE, CPU_HASWELL, PTA_PANTHERLAKE,
2329 : M_CPU_SUBTYPE (INTEL_COREI7_PANTHERLAKE), P_PROC_AVX2},
2330 : {"novalake", PROCESSOR_NOVALAKE, CPU_HASWELL, PTA_NOVALAKE,
2331 : M_CPU_SUBTYPE (INTEL_COREI7_NOVALAKE), P_PROC_AVX10_1},
2332 : {"bonnell", PROCESSOR_BONNELL, CPU_ATOM, PTA_BONNELL,
2333 : M_CPU_TYPE (INTEL_BONNELL), P_PROC_SSSE3},
2334 : {"atom", PROCESSOR_BONNELL, CPU_ATOM, PTA_BONNELL,
2335 : M_CPU_TYPE (INTEL_BONNELL), P_PROC_SSSE3},
2336 : {"silvermont", PROCESSOR_SILVERMONT, CPU_SLM, PTA_SILVERMONT,
2337 : M_CPU_TYPE (INTEL_SILVERMONT), P_PROC_SSE4_2},
2338 : {"slm", PROCESSOR_SILVERMONT, CPU_SLM, PTA_SILVERMONT,
2339 : M_CPU_TYPE (INTEL_SILVERMONT), P_PROC_SSE4_2},
2340 : {"goldmont", PROCESSOR_GOLDMONT, CPU_GLM, PTA_GOLDMONT,
2341 : M_CPU_TYPE (INTEL_GOLDMONT), P_PROC_SSE4_2},
2342 : {"goldmont-plus", PROCESSOR_GOLDMONT_PLUS, CPU_GLM, PTA_GOLDMONT_PLUS,
2343 : M_CPU_TYPE (INTEL_GOLDMONT_PLUS), P_PROC_SSE4_2},
2344 : {"tremont", PROCESSOR_TREMONT, CPU_HASWELL, PTA_TREMONT,
2345 : M_CPU_TYPE (INTEL_TREMONT), P_PROC_SSE4_2},
2346 : {"gracemont", PROCESSOR_ALDERLAKE, CPU_HASWELL, PTA_ALDERLAKE,
2347 : M_CPU_SUBTYPE (INTEL_COREI7_ALDERLAKE), P_PROC_AVX2},
2348 : {"sierraforest", PROCESSOR_SIERRAFOREST, CPU_HASWELL, PTA_SIERRAFOREST,
2349 : M_CPU_TYPE (INTEL_SIERRAFOREST), P_PROC_AVX2},
2350 : {"grandridge", PROCESSOR_GRANDRIDGE, CPU_HASWELL, PTA_GRANDRIDGE,
2351 : M_CPU_TYPE (INTEL_GRANDRIDGE), P_PROC_AVX2},
2352 : {"clearwaterforest", PROCESSOR_CLEARWATERFOREST, CPU_HASWELL,
2353 : PTA_CLEARWATERFOREST, M_CPU_TYPE (INTEL_CLEARWATERFOREST), P_PROC_AVX2},
2354 : {"intel", PROCESSOR_INTEL, CPU_HASWELL, PTA_HASWELL,
2355 : M_VENDOR (VENDOR_INTEL), P_NONE},
2356 : {"geode", PROCESSOR_GEODE, CPU_GEODE,
2357 : PTA_MMX | PTA_3DNOW | PTA_3DNOW_A | PTA_PREFETCH_SSE, 0, P_NONE},
2358 : {"k6", PROCESSOR_K6, CPU_K6, PTA_MMX, 0, P_NONE},
2359 : {"k6-2", PROCESSOR_K6, CPU_K6, PTA_MMX | PTA_3DNOW, 0, P_NONE},
2360 : {"k6-3", PROCESSOR_K6, CPU_K6, PTA_MMX | PTA_3DNOW, 0, P_NONE},
2361 : {"athlon", PROCESSOR_ATHLON, CPU_ATHLON,
2362 : PTA_MMX | PTA_3DNOW | PTA_3DNOW_A | PTA_PREFETCH_SSE, 0, P_NONE},
2363 : {"athlon-tbird", PROCESSOR_ATHLON, CPU_ATHLON,
2364 : PTA_MMX | PTA_3DNOW | PTA_3DNOW_A | PTA_PREFETCH_SSE, 0, P_NONE},
2365 : {"athlon-4", PROCESSOR_ATHLON, CPU_ATHLON,
2366 : PTA_MMX | PTA_3DNOW | PTA_3DNOW_A | PTA_SSE | PTA_FXSR, 0, P_NONE},
2367 : {"athlon-xp", PROCESSOR_ATHLON, CPU_ATHLON,
2368 : PTA_MMX | PTA_3DNOW | PTA_3DNOW_A | PTA_SSE | PTA_FXSR, 0, P_NONE},
2369 : {"athlon-mp", PROCESSOR_ATHLON, CPU_ATHLON,
2370 : PTA_MMX | PTA_3DNOW | PTA_3DNOW_A | PTA_SSE | PTA_FXSR, 0, P_NONE},
2371 : {"x86-64", PROCESSOR_K8, CPU_K8, PTA_X86_64_BASELINE, 0, P_NONE},
2372 : {"x86-64-v2", PROCESSOR_K8, CPU_GENERIC, PTA_X86_64_V2 | PTA_NO_TUNE,
2373 : 0, P_NONE},
2374 : {"x86-64-v3", PROCESSOR_K8, CPU_GENERIC, PTA_X86_64_V3 | PTA_NO_TUNE,
2375 : 0, P_NONE},
2376 : {"x86-64-v4", PROCESSOR_K8, CPU_GENERIC, PTA_X86_64_V4 | PTA_NO_TUNE,
2377 : 0, P_NONE},
2378 : {"eden-x2", PROCESSOR_K8, CPU_K8,
2379 : PTA_64BIT | PTA_MMX | PTA_SSE | PTA_SSE2 | PTA_SSE3 | PTA_FXSR,
2380 : 0, P_NONE},
2381 : {"nano", PROCESSOR_K8, CPU_K8,
2382 : PTA_64BIT | PTA_MMX | PTA_SSE | PTA_SSE2 | PTA_SSE3
2383 : | PTA_SSSE3 | PTA_FXSR, 0, P_NONE},
2384 : {"nano-1000", PROCESSOR_K8, CPU_K8,
2385 : PTA_64BIT | PTA_MMX | PTA_SSE | PTA_SSE2 | PTA_SSE3
2386 : | PTA_SSSE3 | PTA_FXSR, 0, P_NONE},
2387 : {"nano-2000", PROCESSOR_K8, CPU_K8,
2388 : PTA_64BIT | PTA_MMX | PTA_SSE | PTA_SSE2 | PTA_SSE3
2389 : | PTA_SSSE3 | PTA_FXSR, 0, P_NONE},
2390 : {"nano-3000", PROCESSOR_K8, CPU_K8,
2391 : PTA_64BIT | PTA_MMX | PTA_SSE | PTA_SSE2 | PTA_SSE3
2392 : | PTA_SSSE3 | PTA_SSE4_1 | PTA_FXSR, 0, P_NONE},
2393 : {"nano-x2", PROCESSOR_K8, CPU_K8,
2394 : PTA_64BIT | PTA_MMX | PTA_SSE | PTA_SSE2 | PTA_SSE3
2395 : | PTA_SSSE3 | PTA_SSE4_1 | PTA_FXSR, 0, P_NONE},
2396 : {"eden-x4", PROCESSOR_K8, CPU_K8,
2397 : PTA_64BIT | PTA_MMX | PTA_SSE | PTA_SSE2 | PTA_SSE3
2398 : | PTA_SSSE3 | PTA_SSE4_1 | PTA_FXSR, 0, P_NONE},
2399 : {"nano-x4", PROCESSOR_K8, CPU_K8,
2400 : PTA_64BIT | PTA_MMX | PTA_SSE | PTA_SSE2 | PTA_SSE3
2401 : | PTA_SSSE3 | PTA_SSE4_1 | PTA_FXSR, 0, P_NONE},
2402 : {"lujiazui", PROCESSOR_LUJIAZUI, CPU_LUJIAZUI,
2403 : PTA_LUJIAZUI,
2404 : M_CPU_SUBTYPE (ZHAOXIN_FAM7H_LUJIAZUI), P_PROC_BMI},
2405 : {"yongfeng", PROCESSOR_YONGFENG, CPU_YONGFENG,
2406 : PTA_YONGFENG,
2407 : M_CPU_SUBTYPE (ZHAOXIN_FAM7H_YONGFENG), P_PROC_AVX2},
2408 : {"shijidadao", PROCESSOR_SHIJIDADAO, CPU_YONGFENG,
2409 : PTA_YONGFENG,
2410 : M_CPU_SUBTYPE (ZHAOXIN_FAM7H_SHIJIDADAO), P_PROC_AVX2},
2411 : {"k8", PROCESSOR_K8, CPU_K8,
2412 : PTA_64BIT | PTA_MMX | PTA_3DNOW | PTA_3DNOW_A | PTA_SSE
2413 : | PTA_SSE2 | PTA_NO_SAHF | PTA_FXSR, 0, P_NONE},
2414 : {"k8-sse3", PROCESSOR_K8, CPU_K8,
2415 : PTA_64BIT | PTA_MMX | PTA_3DNOW | PTA_3DNOW_A | PTA_SSE
2416 : | PTA_SSE2 | PTA_SSE3 | PTA_NO_SAHF | PTA_FXSR, 0, P_NONE},
2417 : {"opteron", PROCESSOR_K8, CPU_K8,
2418 : PTA_64BIT | PTA_MMX | PTA_3DNOW | PTA_3DNOW_A | PTA_SSE
2419 : | PTA_SSE2 | PTA_NO_SAHF | PTA_FXSR, 0, P_NONE},
2420 : {"opteron-sse3", PROCESSOR_K8, CPU_K8,
2421 : PTA_64BIT | PTA_MMX | PTA_3DNOW | PTA_3DNOW_A | PTA_SSE
2422 : | PTA_SSE2 | PTA_SSE3 | PTA_NO_SAHF | PTA_FXSR, 0, P_NONE},
2423 : {"athlon64", PROCESSOR_K8, CPU_K8,
2424 : PTA_64BIT | PTA_MMX | PTA_3DNOW | PTA_3DNOW_A | PTA_SSE
2425 : | PTA_SSE2 | PTA_NO_SAHF | PTA_FXSR, 0, P_NONE},
2426 : {"athlon64-sse3", PROCESSOR_K8, CPU_K8,
2427 : PTA_64BIT | PTA_MMX | PTA_3DNOW | PTA_3DNOW_A | PTA_SSE
2428 : | PTA_SSE2 | PTA_SSE3 | PTA_NO_SAHF | PTA_FXSR, 0, P_NONE},
2429 : {"athlon-fx", PROCESSOR_K8, CPU_K8,
2430 : PTA_64BIT | PTA_MMX | PTA_3DNOW | PTA_3DNOW_A | PTA_SSE
2431 : | PTA_SSE2 | PTA_NO_SAHF | PTA_FXSR, 0, P_NONE},
2432 : {"amdfam10", PROCESSOR_AMDFAM10, CPU_AMDFAM10,
2433 : PTA_64BIT | PTA_MMX | PTA_3DNOW | PTA_3DNOW_A | PTA_SSE | PTA_SSE2
2434 : | PTA_SSE3 | PTA_SSE4A | PTA_CX16 | PTA_ABM | PTA_PRFCHW | PTA_FXSR,
2435 : 0, P_PROC_DYNAMIC},
2436 : {"barcelona", PROCESSOR_AMDFAM10, CPU_AMDFAM10,
2437 : PTA_64BIT | PTA_MMX | PTA_3DNOW | PTA_3DNOW_A | PTA_SSE | PTA_SSE2
2438 : | PTA_SSE3 | PTA_SSE4A | PTA_CX16 | PTA_ABM | PTA_PRFCHW | PTA_FXSR,
2439 : M_CPU_SUBTYPE (AMDFAM10H_BARCELONA), P_PROC_DYNAMIC},
2440 : {"bdver1", PROCESSOR_BDVER1, CPU_BDVER1,
2441 : PTA_BDVER1,
2442 : M_CPU_SUBTYPE (AMDFAM15H_BDVER1), P_PROC_XOP},
2443 : {"bdver2", PROCESSOR_BDVER2, CPU_BDVER2,
2444 : PTA_BDVER2,
2445 : M_CPU_SUBTYPE (AMDFAM15H_BDVER2), P_PROC_FMA},
2446 : {"bdver3", PROCESSOR_BDVER3, CPU_BDVER3,
2447 : PTA_BDVER3,
2448 : M_CPU_SUBTYPE (AMDFAM15H_BDVER3), P_PROC_FMA},
2449 : {"bdver4", PROCESSOR_BDVER4, CPU_BDVER4,
2450 : PTA_BDVER4,
2451 : M_CPU_SUBTYPE (AMDFAM15H_BDVER4), P_PROC_AVX2},
2452 : {"znver1", PROCESSOR_ZNVER1, CPU_ZNVER1,
2453 : PTA_ZNVER1,
2454 : M_CPU_SUBTYPE (AMDFAM17H_ZNVER1), P_PROC_AVX2},
2455 : {"znver2", PROCESSOR_ZNVER2, CPU_ZNVER2,
2456 : PTA_ZNVER2,
2457 : M_CPU_SUBTYPE (AMDFAM17H_ZNVER2), P_PROC_AVX2},
2458 : {"znver3", PROCESSOR_ZNVER3, CPU_ZNVER3,
2459 : PTA_ZNVER3,
2460 : M_CPU_SUBTYPE (AMDFAM19H_ZNVER3), P_PROC_AVX2},
2461 : {"znver4", PROCESSOR_ZNVER4, CPU_ZNVER4,
2462 : PTA_ZNVER4,
2463 : M_CPU_SUBTYPE (AMDFAM19H_ZNVER4), P_PROC_AVX512F},
2464 : {"znver5", PROCESSOR_ZNVER5, CPU_ZNVER5,
2465 : PTA_ZNVER5,
2466 : M_CPU_SUBTYPE (AMDFAM1AH_ZNVER5), P_PROC_AVX512F},
2467 : {"znver6", PROCESSOR_ZNVER6, CPU_ZNVER5,
2468 : PTA_ZNVER6,
2469 : M_CPU_SUBTYPE (AMDFAM1AH_ZNVER6), P_PROC_AVX512F},
2470 : {"btver1", PROCESSOR_BTVER1, CPU_GENERIC,
2471 : PTA_BTVER1,
2472 : M_CPU_TYPE (AMD_BTVER1), P_PROC_SSE4_A},
2473 : {"btver2", PROCESSOR_BTVER2, CPU_BTVER2,
2474 : PTA_BTVER2,
2475 : M_CPU_TYPE (AMD_BTVER2), P_PROC_BMI},
2476 :
2477 : {"generic", PROCESSOR_GENERIC, CPU_GENERIC,
2478 : PTA_64BIT
2479 : | PTA_HLE /* flags are only used for -march switch. */,
2480 : 0, P_NONE},
2481 :
2482 : {"amd", PROCESSOR_GENERIC, CPU_GENERIC, 0,
2483 : M_VENDOR (VENDOR_AMD), P_NONE},
2484 : {"amdfam10h", PROCESSOR_GENERIC, CPU_GENERIC, 0,
2485 : M_CPU_TYPE (AMDFAM10H), P_NONE},
2486 : {"amdfam15h", PROCESSOR_GENERIC, CPU_GENERIC, 0,
2487 : M_CPU_TYPE (AMDFAM15H), P_NONE},
2488 : {"amdfam17h", PROCESSOR_GENERIC, CPU_GENERIC, 0,
2489 : M_CPU_TYPE (AMDFAM17H), P_NONE},
2490 : {"amdfam19h", PROCESSOR_GENERIC, CPU_GENERIC, 0,
2491 : M_CPU_TYPE (AMDFAM19H), P_NONE},
2492 : {"shanghai", PROCESSOR_GENERIC, CPU_GENERIC, 0,
2493 : M_CPU_SUBTYPE (AMDFAM10H_SHANGHAI), P_NONE},
2494 : {"istanbul", PROCESSOR_GENERIC, CPU_GENERIC, 0,
2495 : M_CPU_SUBTYPE (AMDFAM10H_ISTANBUL), P_NONE},
2496 : };
2497 :
2498 : /* NB: processor_alias_table stops at the "generic" entry. */
2499 : unsigned int const pta_size = ARRAY_SIZE (processor_alias_table) - 7;
2500 : unsigned int const num_arch_names = ARRAY_SIZE (processor_alias_table);
2501 :
2502 : /* Provide valid option values for -march and -mtune options. */
2503 :
2504 : vec<const char *>
2505 153535 : ix86_get_valid_option_values (int option_code,
2506 : const char *prefix ATTRIBUTE_UNUSED)
2507 : {
2508 153535 : vec<const char *> v;
2509 153535 : v.create (0);
2510 153535 : opt_code opt = (opt_code) option_code;
2511 :
2512 153535 : switch (opt)
2513 : {
2514 : case OPT_march_:
2515 68211 : for (unsigned i = 0; i < pta_size; i++)
2516 : {
2517 67628 : const char *name = processor_alias_table[i].name;
2518 67628 : gcc_checking_assert (name != NULL);
2519 67628 : v.safe_push (name);
2520 : }
2521 : #ifdef HAVE_LOCAL_CPU_DETECT
2522 : /* Add also "native" as possible value. */
2523 583 : v.safe_push ("native");
2524 : #endif
2525 :
2526 583 : break;
2527 : case OPT_mtune_:
2528 34980 : for (unsigned i = 0; i < PROCESSOR_max; i++)
2529 : {
2530 34397 : const char *name = processor_names[i];
2531 34397 : gcc_checking_assert (name != NULL);
2532 34397 : v.safe_push (name);
2533 : }
2534 : break;
2535 : default:
2536 : break;
2537 : }
2538 :
2539 153535 : return v;
2540 : }
2541 :
2542 : #undef TARGET_GET_VALID_OPTION_VALUES
2543 : #define TARGET_GET_VALID_OPTION_VALUES ix86_get_valid_option_values
2544 :
2545 : struct gcc_targetm_common targetm_common = TARGETM_COMMON_INITIALIZER;
|