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