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