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