2 Copyright (C) 1988-2021 Free Software Foundation, Inc.
4 This file is part of GCC.
6 GCC is free software; you can redistribute it and/or modify
7 it under the terms of the GNU General Public License as published by
8 the Free Software Foundation; either version 3, or (at your option)
11 GCC is distributed in the hope that it will be useful,
12 but WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 GNU General Public License for more details.
16 You should have received a copy of the GNU General Public License
17 along with GCC; see the file COPYING3. If not see
18 <http://www.gnu.org/licenses/>. */
22 #include "coretypes.h"
23 #include "diagnostic-core.h"
27 #include "common/common-target.h"
28 #include "common/common-target-def.h"
32 /* Define a set of ISAs which are available when a given ISA is
33 enabled. MMX and SSE ISAs are handled separately. */
35 #define OPTION_MASK_ISA_MMX_SET OPTION_MASK_ISA_MMX
36 #define OPTION_MASK_ISA_3DNOW_SET \
37 (OPTION_MASK_ISA_3DNOW | OPTION_MASK_ISA_MMX_SET)
38 #define OPTION_MASK_ISA_3DNOW_A_SET \
39 (OPTION_MASK_ISA_3DNOW_A | OPTION_MASK_ISA_3DNOW_SET)
41 #define OPTION_MASK_ISA_SSE_SET OPTION_MASK_ISA_SSE
42 #define OPTION_MASK_ISA_SSE2_SET \
43 (OPTION_MASK_ISA_SSE2 | OPTION_MASK_ISA_SSE_SET)
44 #define OPTION_MASK_ISA_SSE3_SET \
45 (OPTION_MASK_ISA_SSE3 | OPTION_MASK_ISA_SSE2_SET)
46 #define OPTION_MASK_ISA_SSSE3_SET \
47 (OPTION_MASK_ISA_SSSE3 | OPTION_MASK_ISA_SSE3_SET)
48 #define OPTION_MASK_ISA_SSE4_1_SET \
49 (OPTION_MASK_ISA_SSE4_1 | OPTION_MASK_ISA_SSSE3_SET)
50 #define OPTION_MASK_ISA_SSE4_2_SET \
51 (OPTION_MASK_ISA_SSE4_2 | OPTION_MASK_ISA_SSE4_1_SET)
52 #define OPTION_MASK_ISA_AVX_SET \
53 (OPTION_MASK_ISA_AVX | OPTION_MASK_ISA_SSE4_2_SET \
54 | OPTION_MASK_ISA_XSAVE_SET)
55 #define OPTION_MASK_ISA_FMA_SET \
56 (OPTION_MASK_ISA_FMA | OPTION_MASK_ISA_AVX_SET)
57 #define OPTION_MASK_ISA_AVX2_SET \
58 (OPTION_MASK_ISA_AVX2 | OPTION_MASK_ISA_AVX_SET)
59 #define OPTION_MASK_ISA_FXSR_SET OPTION_MASK_ISA_FXSR
60 #define OPTION_MASK_ISA_XSAVE_SET OPTION_MASK_ISA_XSAVE
61 #define OPTION_MASK_ISA_XSAVEOPT_SET \
62 (OPTION_MASK_ISA_XSAVEOPT | OPTION_MASK_ISA_XSAVE_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_AVX512PF_SET \
68 (OPTION_MASK_ISA_AVX512PF | OPTION_MASK_ISA_AVX512F_SET)
69 #define OPTION_MASK_ISA_AVX512ER_SET \
70 (OPTION_MASK_ISA_AVX512ER | OPTION_MASK_ISA_AVX512F_SET)
71 #define OPTION_MASK_ISA_AVX512DQ_SET \
72 (OPTION_MASK_ISA_AVX512DQ | OPTION_MASK_ISA_AVX512F_SET)
73 #define OPTION_MASK_ISA_AVX512BW_SET \
74 (OPTION_MASK_ISA_AVX512BW | OPTION_MASK_ISA_AVX512F_SET)
75 #define OPTION_MASK_ISA_AVX512VL_SET \
76 (OPTION_MASK_ISA_AVX512VL | OPTION_MASK_ISA_AVX512F_SET)
77 #define OPTION_MASK_ISA_AVX512IFMA_SET \
78 (OPTION_MASK_ISA_AVX512IFMA | OPTION_MASK_ISA_AVX512F_SET)
79 #define OPTION_MASK_ISA_AVX512VBMI_SET \
80 (OPTION_MASK_ISA_AVX512VBMI | OPTION_MASK_ISA_AVX512BW_SET)
81 #define OPTION_MASK_ISA2_AVX5124FMAPS_SET OPTION_MASK_ISA2_AVX5124FMAPS
82 #define OPTION_MASK_ISA2_AVX5124VNNIW_SET OPTION_MASK_ISA2_AVX5124VNNIW
83 #define OPTION_MASK_ISA_AVX512VBMI2_SET \
84 (OPTION_MASK_ISA_AVX512VBMI2 | OPTION_MASK_ISA_AVX512F_SET)
85 #define OPTION_MASK_ISA_AVX512VNNI_SET \
86 (OPTION_MASK_ISA_AVX512VNNI | OPTION_MASK_ISA_AVX512F_SET)
87 #define OPTION_MASK_ISA2_AVXVNNI_SET OPTION_MASK_ISA2_AVXVNNI
88 #define OPTION_MASK_ISA_AVX512VPOPCNTDQ_SET \
89 (OPTION_MASK_ISA_AVX512VPOPCNTDQ | OPTION_MASK_ISA_AVX512F_SET)
90 #define OPTION_MASK_ISA_AVX512BITALG_SET \
91 (OPTION_MASK_ISA_AVX512BITALG | OPTION_MASK_ISA_AVX512F_SET)
92 #define OPTION_MASK_ISA2_AVX512BF16_SET OPTION_MASK_ISA2_AVX512BF16
93 #define OPTION_MASK_ISA_RTM_SET OPTION_MASK_ISA_RTM
94 #define OPTION_MASK_ISA_PRFCHW_SET OPTION_MASK_ISA_PRFCHW
95 #define OPTION_MASK_ISA_RDSEED_SET OPTION_MASK_ISA_RDSEED
96 #define OPTION_MASK_ISA_ADX_SET OPTION_MASK_ISA_ADX
97 #define OPTION_MASK_ISA_PREFETCHWT1_SET OPTION_MASK_ISA_PREFETCHWT1
98 #define OPTION_MASK_ISA_CLFLUSHOPT_SET OPTION_MASK_ISA_CLFLUSHOPT
99 #define OPTION_MASK_ISA_XSAVES_SET \
100 (OPTION_MASK_ISA_XSAVES | OPTION_MASK_ISA_XSAVE_SET)
101 #define OPTION_MASK_ISA_XSAVEC_SET \
102 (OPTION_MASK_ISA_XSAVEC | OPTION_MASK_ISA_XSAVE_SET)
103 #define OPTION_MASK_ISA_CLWB_SET OPTION_MASK_ISA_CLWB
104 #define OPTION_MASK_ISA2_AVX512VP2INTERSECT_SET OPTION_MASK_ISA2_AVX512VP2INTERSECT
105 #define OPTION_MASK_ISA2_AMX_TILE_SET OPTION_MASK_ISA2_AMX_TILE
106 #define OPTION_MASK_ISA2_AMX_INT8_SET OPTION_MASK_ISA2_AMX_INT8
107 #define OPTION_MASK_ISA2_AMX_BF16_SET OPTION_MASK_ISA2_AMX_BF16
109 /* SSE4 includes both SSE4.1 and SSE4.2. -msse4 should be the same
111 #define OPTION_MASK_ISA_SSE4_SET OPTION_MASK_ISA_SSE4_2_SET
113 #define OPTION_MASK_ISA_SSE4A_SET \
114 (OPTION_MASK_ISA_SSE4A | OPTION_MASK_ISA_SSE3_SET)
115 #define OPTION_MASK_ISA_FMA4_SET \
116 (OPTION_MASK_ISA_FMA4 | OPTION_MASK_ISA_SSE4A_SET \
117 | OPTION_MASK_ISA_AVX_SET)
118 #define OPTION_MASK_ISA_XOP_SET \
119 (OPTION_MASK_ISA_XOP | OPTION_MASK_ISA_FMA4_SET)
120 #define OPTION_MASK_ISA_LWP_SET \
123 /* AES, SHA and PCLMUL need SSE2 because they use xmm registers. */
124 #define OPTION_MASK_ISA_AES_SET \
125 (OPTION_MASK_ISA_AES | OPTION_MASK_ISA_SSE2_SET)
126 #define OPTION_MASK_ISA_SHA_SET \
127 (OPTION_MASK_ISA_SHA | OPTION_MASK_ISA_SSE2_SET)
128 #define OPTION_MASK_ISA_PCLMUL_SET \
129 (OPTION_MASK_ISA_PCLMUL | OPTION_MASK_ISA_SSE2_SET)
131 #define OPTION_MASK_ISA_ABM_SET \
132 (OPTION_MASK_ISA_ABM | OPTION_MASK_ISA_POPCNT)
134 #define OPTION_MASK_ISA2_PCONFIG_SET OPTION_MASK_ISA2_PCONFIG
135 #define OPTION_MASK_ISA2_WBNOINVD_SET OPTION_MASK_ISA2_WBNOINVD
136 #define OPTION_MASK_ISA2_SGX_SET OPTION_MASK_ISA2_SGX
137 #define OPTION_MASK_ISA_BMI_SET OPTION_MASK_ISA_BMI
138 #define OPTION_MASK_ISA_BMI2_SET OPTION_MASK_ISA_BMI2
139 #define OPTION_MASK_ISA_LZCNT_SET OPTION_MASK_ISA_LZCNT
140 #define OPTION_MASK_ISA_TBM_SET OPTION_MASK_ISA_TBM
141 #define OPTION_MASK_ISA_POPCNT_SET OPTION_MASK_ISA_POPCNT
142 #define OPTION_MASK_ISA2_CX16_SET OPTION_MASK_ISA2_CX16
143 #define OPTION_MASK_ISA_SAHF_SET OPTION_MASK_ISA_SAHF
144 #define OPTION_MASK_ISA2_MOVBE_SET OPTION_MASK_ISA2_MOVBE
145 #define OPTION_MASK_ISA_CRC32_SET OPTION_MASK_ISA_CRC32
147 #define OPTION_MASK_ISA_FSGSBASE_SET OPTION_MASK_ISA_FSGSBASE
148 #define OPTION_MASK_ISA_RDRND_SET OPTION_MASK_ISA_RDRND
149 #define OPTION_MASK_ISA2_PTWRITE_SET OPTION_MASK_ISA2_PTWRITE
150 #define OPTION_MASK_ISA_F16C_SET \
151 (OPTION_MASK_ISA_F16C | OPTION_MASK_ISA_AVX_SET)
152 #define OPTION_MASK_ISA2_MWAITX_SET OPTION_MASK_ISA2_MWAITX
153 #define OPTION_MASK_ISA2_CLZERO_SET OPTION_MASK_ISA2_CLZERO
154 #define OPTION_MASK_ISA_PKU_SET OPTION_MASK_ISA_PKU
155 #define OPTION_MASK_ISA2_RDPID_SET OPTION_MASK_ISA2_RDPID
156 #define OPTION_MASK_ISA_GFNI_SET OPTION_MASK_ISA_GFNI
157 #define OPTION_MASK_ISA_SHSTK_SET OPTION_MASK_ISA_SHSTK
158 #define OPTION_MASK_ISA2_VAES_SET OPTION_MASK_ISA2_VAES
159 #define OPTION_MASK_ISA_VPCLMULQDQ_SET OPTION_MASK_ISA_VPCLMULQDQ
160 #define OPTION_MASK_ISA_MOVDIRI_SET OPTION_MASK_ISA_MOVDIRI
161 #define OPTION_MASK_ISA2_MOVDIR64B_SET OPTION_MASK_ISA2_MOVDIR64B
162 #define OPTION_MASK_ISA2_WAITPKG_SET OPTION_MASK_ISA2_WAITPKG
163 #define OPTION_MASK_ISA2_CLDEMOTE_SET OPTION_MASK_ISA2_CLDEMOTE
164 #define OPTION_MASK_ISA2_ENQCMD_SET OPTION_MASK_ISA2_ENQCMD
165 #define OPTION_MASK_ISA2_SERIALIZE_SET OPTION_MASK_ISA2_SERIALIZE
166 #define OPTION_MASK_ISA2_TSXLDTRK_SET OPTION_MASK_ISA2_TSXLDTRK
167 #define OPTION_MASK_ISA2_UINTR_SET OPTION_MASK_ISA2_UINTR
168 #define OPTION_MASK_ISA2_HRESET_SET OPTION_MASK_ISA2_HRESET
169 #define OPTION_MASK_ISA2_KL_SET OPTION_MASK_ISA2_KL
170 #define OPTION_MASK_ISA2_WIDEKL_SET \
171 (OPTION_MASK_ISA2_WIDEKL | OPTION_MASK_ISA2_KL_SET)
173 /* Define a set of ISAs which aren't available when a given ISA is
174 disabled. MMX and SSE ISAs are handled separately. */
176 #define OPTION_MASK_ISA_MMX_UNSET \
177 (OPTION_MASK_ISA_MMX | OPTION_MASK_ISA_3DNOW_UNSET)
178 #define OPTION_MASK_ISA_3DNOW_UNSET \
179 (OPTION_MASK_ISA_3DNOW | OPTION_MASK_ISA_3DNOW_A_UNSET)
180 #define OPTION_MASK_ISA_3DNOW_A_UNSET OPTION_MASK_ISA_3DNOW_A
182 #define OPTION_MASK_ISA_SSE_UNSET \
183 (OPTION_MASK_ISA_SSE | OPTION_MASK_ISA_SSE2_UNSET)
184 #define OPTION_MASK_ISA_SSE2_UNSET \
185 (OPTION_MASK_ISA_SSE2 | OPTION_MASK_ISA_SSE3_UNSET)
186 #define OPTION_MASK_ISA_SSE3_UNSET \
187 (OPTION_MASK_ISA_SSE3 \
188 | OPTION_MASK_ISA_SSSE3_UNSET \
189 | OPTION_MASK_ISA_SSE4A_UNSET )
190 #define OPTION_MASK_ISA_SSSE3_UNSET \
191 (OPTION_MASK_ISA_SSSE3 | OPTION_MASK_ISA_SSE4_1_UNSET)
192 #define OPTION_MASK_ISA_SSE4_1_UNSET \
193 (OPTION_MASK_ISA_SSE4_1 | OPTION_MASK_ISA_SSE4_2_UNSET)
194 #define OPTION_MASK_ISA_SSE4_2_UNSET \
195 (OPTION_MASK_ISA_SSE4_2 | OPTION_MASK_ISA_AVX_UNSET )
196 #define OPTION_MASK_ISA_AVX_UNSET \
197 (OPTION_MASK_ISA_AVX | OPTION_MASK_ISA_FMA_UNSET \
198 | OPTION_MASK_ISA_FMA4_UNSET | OPTION_MASK_ISA_F16C_UNSET \
199 | OPTION_MASK_ISA_AVX2_UNSET )
200 #define OPTION_MASK_ISA_FMA_UNSET OPTION_MASK_ISA_FMA
201 #define OPTION_MASK_ISA_FXSR_UNSET OPTION_MASK_ISA_FXSR
202 #define OPTION_MASK_ISA_XSAVE_UNSET \
203 (OPTION_MASK_ISA_XSAVE | OPTION_MASK_ISA_XSAVEOPT_UNSET \
204 | OPTION_MASK_ISA_XSAVES_UNSET | OPTION_MASK_ISA_XSAVEC_UNSET \
205 | OPTION_MASK_ISA_AVX_UNSET)
206 #define OPTION_MASK_ISA2_XSAVE_UNSET OPTION_MASK_ISA2_AMX_TILE_UNSET
207 #define OPTION_MASK_ISA_XSAVEOPT_UNSET OPTION_MASK_ISA_XSAVEOPT
208 #define OPTION_MASK_ISA_AVX2_UNSET \
209 (OPTION_MASK_ISA_AVX2 | OPTION_MASK_ISA_AVX512F_UNSET)
210 #define OPTION_MASK_ISA2_AVX2_UNSET \
211 (OPTION_MASK_ISA2_AVXVNNI_UNSET | OPTION_MASK_ISA2_AVX512F_UNSET)
212 #define OPTION_MASK_ISA_AVX512F_UNSET \
213 (OPTION_MASK_ISA_AVX512F | OPTION_MASK_ISA_AVX512CD_UNSET \
214 | OPTION_MASK_ISA_AVX512PF_UNSET | OPTION_MASK_ISA_AVX512ER_UNSET \
215 | OPTION_MASK_ISA_AVX512DQ_UNSET | OPTION_MASK_ISA_AVX512BW_UNSET \
216 | OPTION_MASK_ISA_AVX512VL_UNSET | OPTION_MASK_ISA_AVX512IFMA_UNSET \
217 | OPTION_MASK_ISA_AVX512VBMI2_UNSET \
218 | OPTION_MASK_ISA_AVX512VNNI_UNSET \
219 | OPTION_MASK_ISA_AVX512VPOPCNTDQ_UNSET \
220 | OPTION_MASK_ISA_AVX512BITALG_UNSET)
221 #define OPTION_MASK_ISA_AVX512CD_UNSET OPTION_MASK_ISA_AVX512CD
222 #define OPTION_MASK_ISA_AVX512PF_UNSET OPTION_MASK_ISA_AVX512PF
223 #define OPTION_MASK_ISA_AVX512ER_UNSET OPTION_MASK_ISA_AVX512ER
224 #define OPTION_MASK_ISA_AVX512DQ_UNSET OPTION_MASK_ISA_AVX512DQ
225 #define OPTION_MASK_ISA_AVX512BW_UNSET \
226 (OPTION_MASK_ISA_AVX512BW | OPTION_MASK_ISA_AVX512VBMI_UNSET)
227 #define OPTION_MASK_ISA_AVX512VL_UNSET OPTION_MASK_ISA_AVX512VL
228 #define OPTION_MASK_ISA_AVX512IFMA_UNSET OPTION_MASK_ISA_AVX512IFMA
229 #define OPTION_MASK_ISA_AVX512VBMI_UNSET OPTION_MASK_ISA_AVX512VBMI
230 #define OPTION_MASK_ISA2_AVX5124FMAPS_UNSET OPTION_MASK_ISA2_AVX5124FMAPS
231 #define OPTION_MASK_ISA2_AVX5124VNNIW_UNSET OPTION_MASK_ISA2_AVX5124VNNIW
232 #define OPTION_MASK_ISA_AVX512VBMI2_UNSET OPTION_MASK_ISA_AVX512VBMI2
233 #define OPTION_MASK_ISA_AVX512VNNI_UNSET OPTION_MASK_ISA_AVX512VNNI
234 #define OPTION_MASK_ISA2_AVXVNNI_UNSET OPTION_MASK_ISA2_AVXVNNI
235 #define OPTION_MASK_ISA_AVX512VPOPCNTDQ_UNSET OPTION_MASK_ISA_AVX512VPOPCNTDQ
236 #define OPTION_MASK_ISA_AVX512BITALG_UNSET OPTION_MASK_ISA_AVX512BITALG
237 #define OPTION_MASK_ISA2_AVX512BF16_UNSET OPTION_MASK_ISA2_AVX512BF16
238 #define OPTION_MASK_ISA_RTM_UNSET OPTION_MASK_ISA_RTM
239 #define OPTION_MASK_ISA_PRFCHW_UNSET OPTION_MASK_ISA_PRFCHW
240 #define OPTION_MASK_ISA_RDSEED_UNSET OPTION_MASK_ISA_RDSEED
241 #define OPTION_MASK_ISA_ADX_UNSET OPTION_MASK_ISA_ADX
242 #define OPTION_MASK_ISA_PREFETCHWT1_UNSET OPTION_MASK_ISA_PREFETCHWT1
243 #define OPTION_MASK_ISA_CLFLUSHOPT_UNSET OPTION_MASK_ISA_CLFLUSHOPT
244 #define OPTION_MASK_ISA_XSAVEC_UNSET OPTION_MASK_ISA_XSAVEC
245 #define OPTION_MASK_ISA_XSAVES_UNSET OPTION_MASK_ISA_XSAVES
246 #define OPTION_MASK_ISA_CLWB_UNSET OPTION_MASK_ISA_CLWB
247 #define OPTION_MASK_ISA2_MWAITX_UNSET OPTION_MASK_ISA2_MWAITX
248 #define OPTION_MASK_ISA2_CLZERO_UNSET OPTION_MASK_ISA2_CLZERO
249 #define OPTION_MASK_ISA_PKU_UNSET OPTION_MASK_ISA_PKU
250 #define OPTION_MASK_ISA2_RDPID_UNSET OPTION_MASK_ISA2_RDPID
251 #define OPTION_MASK_ISA_GFNI_UNSET OPTION_MASK_ISA_GFNI
252 #define OPTION_MASK_ISA_SHSTK_UNSET OPTION_MASK_ISA_SHSTK
253 #define OPTION_MASK_ISA2_VAES_UNSET OPTION_MASK_ISA2_VAES
254 #define OPTION_MASK_ISA_VPCLMULQDQ_UNSET OPTION_MASK_ISA_VPCLMULQDQ
255 #define OPTION_MASK_ISA_MOVDIRI_UNSET OPTION_MASK_ISA_MOVDIRI
256 #define OPTION_MASK_ISA2_MOVDIR64B_UNSET OPTION_MASK_ISA2_MOVDIR64B
257 #define OPTION_MASK_ISA2_WAITPKG_UNSET OPTION_MASK_ISA2_WAITPKG
258 #define OPTION_MASK_ISA2_CLDEMOTE_UNSET OPTION_MASK_ISA2_CLDEMOTE
259 #define OPTION_MASK_ISA2_ENQCMD_UNSET OPTION_MASK_ISA2_ENQCMD
260 #define OPTION_MASK_ISA2_SERIALIZE_UNSET OPTION_MASK_ISA2_SERIALIZE
261 #define OPTION_MASK_ISA2_AVX512VP2INTERSECT_UNSET OPTION_MASK_ISA2_AVX512VP2INTERSECT
262 #define OPTION_MASK_ISA2_TSXLDTRK_UNSET OPTION_MASK_ISA2_TSXLDTRK
263 #define OPTION_MASK_ISA2_AMX_TILE_UNSET OPTION_MASK_ISA2_AMX_TILE
264 #define OPTION_MASK_ISA2_AMX_INT8_UNSET OPTION_MASK_ISA2_AMX_INT8
265 #define OPTION_MASK_ISA2_AMX_BF16_UNSET OPTION_MASK_ISA2_AMX_BF16
266 #define OPTION_MASK_ISA2_UINTR_UNSET OPTION_MASK_ISA2_UINTR
267 #define OPTION_MASK_ISA2_HRESET_UNSET OPTION_MASK_ISA2_HRESET
268 #define OPTION_MASK_ISA2_KL_UNSET \
269 (OPTION_MASK_ISA2_KL | OPTION_MASK_ISA2_WIDEKL_UNSET)
270 #define OPTION_MASK_ISA2_WIDEKL_UNSET OPTION_MASK_ISA2_WIDEKL
272 /* SSE4 includes both SSE4.1 and SSE4.2. -mno-sse4 should the same
274 #define OPTION_MASK_ISA_SSE4_UNSET OPTION_MASK_ISA_SSE4_1_UNSET
276 #define OPTION_MASK_ISA_SSE4A_UNSET \
277 (OPTION_MASK_ISA_SSE4A | OPTION_MASK_ISA_FMA4_UNSET)
279 #define OPTION_MASK_ISA_FMA4_UNSET \
280 (OPTION_MASK_ISA_FMA4 | OPTION_MASK_ISA_XOP_UNSET)
281 #define OPTION_MASK_ISA_XOP_UNSET OPTION_MASK_ISA_XOP
282 #define OPTION_MASK_ISA_LWP_UNSET OPTION_MASK_ISA_LWP
284 #define OPTION_MASK_ISA_AES_UNSET OPTION_MASK_ISA_AES
285 #define OPTION_MASK_ISA_SHA_UNSET OPTION_MASK_ISA_SHA
286 #define OPTION_MASK_ISA_PCLMUL_UNSET OPTION_MASK_ISA_PCLMUL
287 #define OPTION_MASK_ISA_ABM_UNSET OPTION_MASK_ISA_ABM
288 #define OPTION_MASK_ISA2_PCONFIG_UNSET OPTION_MASK_ISA2_PCONFIG
289 #define OPTION_MASK_ISA2_WBNOINVD_UNSET OPTION_MASK_ISA2_WBNOINVD
290 #define OPTION_MASK_ISA2_SGX_UNSET OPTION_MASK_ISA2_SGX
291 #define OPTION_MASK_ISA_BMI_UNSET OPTION_MASK_ISA_BMI
292 #define OPTION_MASK_ISA_BMI2_UNSET OPTION_MASK_ISA_BMI2
293 #define OPTION_MASK_ISA_LZCNT_UNSET OPTION_MASK_ISA_LZCNT
294 #define OPTION_MASK_ISA_TBM_UNSET OPTION_MASK_ISA_TBM
295 #define OPTION_MASK_ISA_POPCNT_UNSET OPTION_MASK_ISA_POPCNT
296 #define OPTION_MASK_ISA2_CX16_UNSET OPTION_MASK_ISA2_CX16
297 #define OPTION_MASK_ISA_SAHF_UNSET OPTION_MASK_ISA_SAHF
298 #define OPTION_MASK_ISA2_MOVBE_UNSET OPTION_MASK_ISA2_MOVBE
299 #define OPTION_MASK_ISA_CRC32_UNSET OPTION_MASK_ISA_CRC32
301 #define OPTION_MASK_ISA_FSGSBASE_UNSET OPTION_MASK_ISA_FSGSBASE
302 #define OPTION_MASK_ISA_RDRND_UNSET OPTION_MASK_ISA_RDRND
303 #define OPTION_MASK_ISA2_PTWRITE_UNSET OPTION_MASK_ISA2_PTWRITE
304 #define OPTION_MASK_ISA_F16C_UNSET OPTION_MASK_ISA_F16C
306 #define OPTION_MASK_ISA_GENERAL_REGS_ONLY_UNSET \
307 (OPTION_MASK_ISA_MMX_UNSET \
308 | OPTION_MASK_ISA_SSE_UNSET)
310 #define OPTION_MASK_ISA2_AVX512F_UNSET \
311 (OPTION_MASK_ISA2_AVX512BF16_UNSET \
312 | OPTION_MASK_ISA2_AVX5124FMAPS_UNSET \
313 | OPTION_MASK_ISA2_AVX5124VNNIW_UNSET \
314 | OPTION_MASK_ISA2_AVX512VP2INTERSECT_UNSET)
315 #define OPTION_MASK_ISA2_GENERAL_REGS_ONLY_UNSET \
316 (OPTION_MASK_ISA2_AVX512F_UNSET)
317 #define OPTION_MASK_ISA2_AVX_UNSET OPTION_MASK_ISA2_AVX2_UNSET
318 #define OPTION_MASK_ISA2_SSE4_2_UNSET OPTION_MASK_ISA2_AVX_UNSET
319 #define OPTION_MASK_ISA2_SSE4_1_UNSET OPTION_MASK_ISA2_SSE4_2_UNSET
320 #define OPTION_MASK_ISA2_SSE4_UNSET OPTION_MASK_ISA2_SSE4_1_UNSET
321 #define OPTION_MASK_ISA2_SSSE3_UNSET OPTION_MASK_ISA2_SSE4_1_UNSET
322 #define OPTION_MASK_ISA2_SSE3_UNSET OPTION_MASK_ISA2_SSSE3_UNSET
323 #define OPTION_MASK_ISA2_SSE2_UNSET \
324 (OPTION_MASK_ISA2_SSE3_UNSET | OPTION_MASK_ISA2_KL_UNSET)
325 #define OPTION_MASK_ISA2_SSE_UNSET OPTION_MASK_ISA2_SSE2_UNSET
327 #define OPTION_MASK_ISA2_AVX512BW_UNSET OPTION_MASK_ISA2_AVX512BF16_UNSET
329 /* Set 1 << value as value of -malign-FLAG option. */
332 set_malign_value (const char **flag
, unsigned value
)
334 char *r
= XNEWVEC (char, 6);
335 sprintf (r
, "%d", 1 << value
);
339 /* Implement TARGET_HANDLE_OPTION. */
342 ix86_handle_option (struct gcc_options
*opts
,
343 struct gcc_options
*opts_set ATTRIBUTE_UNUSED
,
344 const struct cl_decoded_option
*decoded
,
347 size_t code
= decoded
->opt_index
;
348 int value
= decoded
->value
;
352 case OPT_mgeneral_regs_only
:
355 /* Disable MMX, SSE and x87 instructions if only
356 general registers are allowed. */
357 opts
->x_ix86_isa_flags
358 &= ~OPTION_MASK_ISA_GENERAL_REGS_ONLY_UNSET
;
359 opts
->x_ix86_isa_flags2
360 &= ~OPTION_MASK_ISA2_GENERAL_REGS_ONLY_UNSET
;
361 opts
->x_ix86_isa_flags_explicit
362 |= OPTION_MASK_ISA_GENERAL_REGS_ONLY_UNSET
;
363 opts
->x_ix86_isa_flags2_explicit
364 |= OPTION_MASK_ISA2_GENERAL_REGS_ONLY_UNSET
;
366 opts
->x_target_flags
&= ~MASK_80387
;
375 opts
->x_ix86_isa_flags
|= OPTION_MASK_ISA_MMX_SET
;
376 opts
->x_ix86_isa_flags_explicit
|= OPTION_MASK_ISA_MMX_SET
;
380 opts
->x_ix86_isa_flags
&= ~OPTION_MASK_ISA_MMX_UNSET
;
381 opts
->x_ix86_isa_flags_explicit
|= OPTION_MASK_ISA_MMX_UNSET
;
388 opts
->x_ix86_isa_flags
|= OPTION_MASK_ISA_3DNOW_SET
;
389 opts
->x_ix86_isa_flags_explicit
|= OPTION_MASK_ISA_3DNOW_SET
;
393 opts
->x_ix86_isa_flags
&= ~OPTION_MASK_ISA_3DNOW_UNSET
;
394 opts
->x_ix86_isa_flags_explicit
|= OPTION_MASK_ISA_3DNOW_UNSET
;
401 opts
->x_ix86_isa_flags
|= OPTION_MASK_ISA_3DNOW_A_SET
;
402 opts
->x_ix86_isa_flags_explicit
|= OPTION_MASK_ISA_3DNOW_A_SET
;
406 opts
->x_ix86_isa_flags
&= ~OPTION_MASK_ISA_3DNOW_A_UNSET
;
407 opts
->x_ix86_isa_flags_explicit
|= OPTION_MASK_ISA_3DNOW_A_UNSET
;
414 opts
->x_ix86_isa_flags
|= OPTION_MASK_ISA_SSE_SET
;
415 opts
->x_ix86_isa_flags_explicit
|= OPTION_MASK_ISA_SSE_SET
;
419 opts
->x_ix86_isa_flags
&= ~OPTION_MASK_ISA_SSE_UNSET
;
420 opts
->x_ix86_isa_flags_explicit
|= OPTION_MASK_ISA_SSE_UNSET
;
421 opts
->x_ix86_isa_flags2
&= ~OPTION_MASK_ISA2_SSE_UNSET
;
422 opts
->x_ix86_isa_flags2_explicit
|= OPTION_MASK_ISA2_SSE_UNSET
;
429 opts
->x_ix86_isa_flags
|= OPTION_MASK_ISA_SSE2_SET
;
430 opts
->x_ix86_isa_flags_explicit
|= OPTION_MASK_ISA_SSE2_SET
;
434 opts
->x_ix86_isa_flags
&= ~OPTION_MASK_ISA_SSE2_UNSET
;
435 opts
->x_ix86_isa_flags_explicit
|= OPTION_MASK_ISA_SSE2_UNSET
;
436 opts
->x_ix86_isa_flags2
&= ~OPTION_MASK_ISA2_SSE2_UNSET
;
437 opts
->x_ix86_isa_flags2_explicit
|= OPTION_MASK_ISA2_SSE2_UNSET
;
444 opts
->x_ix86_isa_flags
|= OPTION_MASK_ISA_SSE3_SET
;
445 opts
->x_ix86_isa_flags_explicit
|= OPTION_MASK_ISA_SSE3_SET
;
449 opts
->x_ix86_isa_flags
&= ~OPTION_MASK_ISA_SSE3_UNSET
;
450 opts
->x_ix86_isa_flags_explicit
|= OPTION_MASK_ISA_SSE3_UNSET
;
451 opts
->x_ix86_isa_flags2
&= ~OPTION_MASK_ISA2_SSE3_UNSET
;
452 opts
->x_ix86_isa_flags2_explicit
|= OPTION_MASK_ISA2_SSE3_UNSET
;
459 opts
->x_ix86_isa_flags
|= OPTION_MASK_ISA_SSSE3_SET
;
460 opts
->x_ix86_isa_flags_explicit
|= OPTION_MASK_ISA_SSSE3_SET
;
464 opts
->x_ix86_isa_flags
&= ~OPTION_MASK_ISA_SSSE3_UNSET
;
465 opts
->x_ix86_isa_flags_explicit
|= OPTION_MASK_ISA_SSSE3_UNSET
;
466 opts
->x_ix86_isa_flags2
&= ~OPTION_MASK_ISA2_SSSE3_UNSET
;
467 opts
->x_ix86_isa_flags2_explicit
|= OPTION_MASK_ISA2_SSSE3_UNSET
;
474 opts
->x_ix86_isa_flags
|= OPTION_MASK_ISA_SSE4_1_SET
;
475 opts
->x_ix86_isa_flags_explicit
|= OPTION_MASK_ISA_SSE4_1_SET
;
479 opts
->x_ix86_isa_flags
&= ~OPTION_MASK_ISA_SSE4_1_UNSET
;
480 opts
->x_ix86_isa_flags_explicit
|= OPTION_MASK_ISA_SSE4_1_UNSET
;
481 opts
->x_ix86_isa_flags2
&= ~OPTION_MASK_ISA2_SSE4_1_UNSET
;
482 opts
->x_ix86_isa_flags2_explicit
|= OPTION_MASK_ISA2_SSE4_1_UNSET
;
489 opts
->x_ix86_isa_flags
|= OPTION_MASK_ISA_SSE4_2_SET
;
490 opts
->x_ix86_isa_flags_explicit
|= OPTION_MASK_ISA_SSE4_2_SET
;
494 opts
->x_ix86_isa_flags
&= ~OPTION_MASK_ISA_SSE4_2_UNSET
;
495 opts
->x_ix86_isa_flags_explicit
|= OPTION_MASK_ISA_SSE4_2_UNSET
;
496 opts
->x_ix86_isa_flags2
&= ~OPTION_MASK_ISA2_SSE4_2_UNSET
;
497 opts
->x_ix86_isa_flags2_explicit
|= OPTION_MASK_ISA2_SSE4_2_UNSET
;
504 opts
->x_ix86_isa_flags
|= OPTION_MASK_ISA_AVX_SET
;
505 opts
->x_ix86_isa_flags_explicit
|= OPTION_MASK_ISA_AVX_SET
;
509 opts
->x_ix86_isa_flags
&= ~OPTION_MASK_ISA_AVX_UNSET
;
510 opts
->x_ix86_isa_flags_explicit
|= OPTION_MASK_ISA_AVX_UNSET
;
511 opts
->x_ix86_isa_flags2
&= ~OPTION_MASK_ISA2_AVX_UNSET
;
512 opts
->x_ix86_isa_flags2_explicit
|= OPTION_MASK_ISA2_AVX_UNSET
;
519 opts
->x_ix86_isa_flags
|= OPTION_MASK_ISA_AVX2_SET
;
520 opts
->x_ix86_isa_flags_explicit
|= OPTION_MASK_ISA_AVX2_SET
;
524 opts
->x_ix86_isa_flags
&= ~OPTION_MASK_ISA_AVX2_UNSET
;
525 opts
->x_ix86_isa_flags_explicit
|= OPTION_MASK_ISA_AVX2_UNSET
;
526 opts
->x_ix86_isa_flags2
&= ~OPTION_MASK_ISA2_AVX2_UNSET
;
527 opts
->x_ix86_isa_flags2_explicit
|= OPTION_MASK_ISA2_AVX2_UNSET
;
534 opts
->x_ix86_isa_flags
|= OPTION_MASK_ISA_AVX512F_SET
;
535 opts
->x_ix86_isa_flags_explicit
|= OPTION_MASK_ISA_AVX512F_SET
;
539 opts
->x_ix86_isa_flags
&= ~OPTION_MASK_ISA_AVX512F_UNSET
;
540 opts
->x_ix86_isa_flags_explicit
|= OPTION_MASK_ISA_AVX512F_UNSET
;
541 opts
->x_ix86_isa_flags2
&= ~OPTION_MASK_ISA2_AVX512F_UNSET
;
542 opts
->x_ix86_isa_flags2_explicit
|= OPTION_MASK_ISA2_AVX512F_UNSET
;
549 opts
->x_ix86_isa_flags
|= OPTION_MASK_ISA_AVX512CD_SET
;
550 opts
->x_ix86_isa_flags_explicit
|= OPTION_MASK_ISA_AVX512CD_SET
;
554 opts
->x_ix86_isa_flags
&= ~OPTION_MASK_ISA_AVX512CD_UNSET
;
555 opts
->x_ix86_isa_flags_explicit
|= OPTION_MASK_ISA_AVX512CD_UNSET
;
562 opts
->x_ix86_isa_flags
|= OPTION_MASK_ISA_AVX512PF_SET
;
563 opts
->x_ix86_isa_flags_explicit
|= OPTION_MASK_ISA_AVX512PF_SET
;
567 opts
->x_ix86_isa_flags
&= ~OPTION_MASK_ISA_AVX512PF_UNSET
;
568 opts
->x_ix86_isa_flags_explicit
|= OPTION_MASK_ISA_AVX512PF_UNSET
;
575 opts
->x_ix86_isa_flags
|= OPTION_MASK_ISA_AVX512ER_SET
;
576 opts
->x_ix86_isa_flags_explicit
|= OPTION_MASK_ISA_AVX512ER_SET
;
580 opts
->x_ix86_isa_flags
&= ~OPTION_MASK_ISA_AVX512ER_UNSET
;
581 opts
->x_ix86_isa_flags_explicit
|= OPTION_MASK_ISA_AVX512ER_UNSET
;
588 opts
->x_ix86_isa_flags2
|= OPTION_MASK_ISA2_RDPID_SET
;
589 opts
->x_ix86_isa_flags2_explicit
|= OPTION_MASK_ISA2_RDPID_SET
;
593 opts
->x_ix86_isa_flags2
&= ~OPTION_MASK_ISA2_RDPID_UNSET
;
594 opts
->x_ix86_isa_flags2_explicit
|= OPTION_MASK_ISA2_RDPID_UNSET
;
601 opts
->x_ix86_isa_flags
|= OPTION_MASK_ISA_GFNI_SET
;
602 opts
->x_ix86_isa_flags_explicit
|= OPTION_MASK_ISA_GFNI_SET
;
606 opts
->x_ix86_isa_flags
&= ~OPTION_MASK_ISA_GFNI_UNSET
;
607 opts
->x_ix86_isa_flags_explicit
|= OPTION_MASK_ISA_GFNI_UNSET
;
614 opts
->x_ix86_isa_flags
|= OPTION_MASK_ISA_SHSTK_SET
;
615 opts
->x_ix86_isa_flags_explicit
|= OPTION_MASK_ISA_SHSTK_SET
;
619 opts
->x_ix86_isa_flags
&= ~OPTION_MASK_ISA_SHSTK_UNSET
;
620 opts
->x_ix86_isa_flags_explicit
|= OPTION_MASK_ISA_SHSTK_UNSET
;
627 opts
->x_ix86_isa_flags2
|= OPTION_MASK_ISA2_VAES_SET
;
628 opts
->x_ix86_isa_flags2_explicit
|= OPTION_MASK_ISA2_VAES_SET
;
632 opts
->x_ix86_isa_flags2
&= ~OPTION_MASK_ISA2_VAES_UNSET
;
633 opts
->x_ix86_isa_flags2_explicit
|= OPTION_MASK_ISA2_VAES_UNSET
;
637 case OPT_mvpclmulqdq
:
640 opts
->x_ix86_isa_flags
|= OPTION_MASK_ISA_VPCLMULQDQ_SET
;
641 opts
->x_ix86_isa_flags_explicit
|= OPTION_MASK_ISA_VPCLMULQDQ_SET
;
645 opts
->x_ix86_isa_flags
&= ~OPTION_MASK_ISA_VPCLMULQDQ_UNSET
;
646 opts
->x_ix86_isa_flags_explicit
|= OPTION_MASK_ISA_VPCLMULQDQ_UNSET
;
653 opts
->x_ix86_isa_flags
|= OPTION_MASK_ISA_MOVDIRI_SET
;
654 opts
->x_ix86_isa_flags_explicit
|= OPTION_MASK_ISA_MOVDIRI_SET
;
658 opts
->x_ix86_isa_flags
&= ~OPTION_MASK_ISA_MOVDIRI_UNSET
;
659 opts
->x_ix86_isa_flags_explicit
|= OPTION_MASK_ISA_MOVDIRI_UNSET
;
666 opts
->x_ix86_isa_flags2
|= OPTION_MASK_ISA2_MOVDIR64B_SET
;
667 opts
->x_ix86_isa_flags2_explicit
|= OPTION_MASK_ISA2_MOVDIR64B_SET
;
671 opts
->x_ix86_isa_flags2
&= ~OPTION_MASK_ISA2_MOVDIR64B_UNSET
;
672 opts
->x_ix86_isa_flags2_explicit
|= OPTION_MASK_ISA2_MOVDIR64B_UNSET
;
679 opts
->x_ix86_isa_flags2
|= OPTION_MASK_ISA2_CLDEMOTE_SET
;
680 opts
->x_ix86_isa_flags2_explicit
|= OPTION_MASK_ISA2_CLDEMOTE_SET
;
684 opts
->x_ix86_isa_flags2
&= ~OPTION_MASK_ISA2_CLDEMOTE_UNSET
;
685 opts
->x_ix86_isa_flags2_explicit
|= OPTION_MASK_ISA2_CLDEMOTE_UNSET
;
692 opts
->x_ix86_isa_flags2
|= OPTION_MASK_ISA2_WAITPKG_SET
;
693 opts
->x_ix86_isa_flags2_explicit
|= OPTION_MASK_ISA2_WAITPKG_SET
;
697 opts
->x_ix86_isa_flags2
&= ~OPTION_MASK_ISA2_WAITPKG_UNSET
;
698 opts
->x_ix86_isa_flags2_explicit
|= OPTION_MASK_ISA2_WAITPKG_UNSET
;
705 opts
->x_ix86_isa_flags2
|= OPTION_MASK_ISA2_ENQCMD_SET
;
706 opts
->x_ix86_isa_flags2_explicit
|= OPTION_MASK_ISA2_ENQCMD_SET
;
710 opts
->x_ix86_isa_flags2
&= ~OPTION_MASK_ISA2_ENQCMD_UNSET
;
711 opts
->x_ix86_isa_flags2_explicit
|= OPTION_MASK_ISA2_ENQCMD_UNSET
;
718 opts
->x_ix86_isa_flags2
|= OPTION_MASK_ISA2_KL_SET
;
719 opts
->x_ix86_isa_flags2_explicit
|= OPTION_MASK_ISA2_KL_SET
;
721 /* The Keylocker instructions need XMM registers from SSE2. */
722 opts
->x_ix86_isa_flags
|= OPTION_MASK_ISA_SSE2_SET
;
723 opts
->x_ix86_isa_flags_explicit
|= OPTION_MASK_ISA_SSE2_SET
;
727 opts
->x_ix86_isa_flags2
&= ~OPTION_MASK_ISA2_KL_UNSET
;
728 opts
->x_ix86_isa_flags2_explicit
|= OPTION_MASK_ISA2_KL_UNSET
;
735 opts
->x_ix86_isa_flags2
|= OPTION_MASK_ISA2_WIDEKL_SET
;
736 opts
->x_ix86_isa_flags2_explicit
|= OPTION_MASK_ISA2_WIDEKL_SET
;
738 /* The Widekl instructions need XMM registers from SSE2. */
739 opts
->x_ix86_isa_flags
|= OPTION_MASK_ISA_SSE2_SET
;
740 opts
->x_ix86_isa_flags_explicit
|= OPTION_MASK_ISA_SSE2_SET
;
744 opts
->x_ix86_isa_flags2
&= ~OPTION_MASK_ISA2_WIDEKL_UNSET
;
745 opts
->x_ix86_isa_flags2_explicit
|= OPTION_MASK_ISA2_WIDEKL_UNSET
;
752 opts
->x_ix86_isa_flags2
|= OPTION_MASK_ISA2_SERIALIZE_SET
;
753 opts
->x_ix86_isa_flags2_explicit
|= OPTION_MASK_ISA2_SERIALIZE_SET
;
757 opts
->x_ix86_isa_flags2
&= ~OPTION_MASK_ISA2_SERIALIZE_UNSET
;
758 opts
->x_ix86_isa_flags2_explicit
|= OPTION_MASK_ISA2_SERIALIZE_UNSET
;
765 opts
->x_ix86_isa_flags2
|= OPTION_MASK_ISA2_UINTR_SET
;
766 opts
->x_ix86_isa_flags2_explicit
|= OPTION_MASK_ISA2_UINTR_SET
;
770 opts
->x_ix86_isa_flags2
&= ~OPTION_MASK_ISA2_UINTR_UNSET
;
771 opts
->x_ix86_isa_flags2_explicit
|= OPTION_MASK_ISA2_UINTR_UNSET
;
778 opts
->x_ix86_isa_flags2
|= OPTION_MASK_ISA2_HRESET_SET
;
779 opts
->x_ix86_isa_flags2_explicit
|= OPTION_MASK_ISA2_HRESET_SET
;
783 opts
->x_ix86_isa_flags2
&= ~OPTION_MASK_ISA2_HRESET_UNSET
;
784 opts
->x_ix86_isa_flags2_explicit
|= OPTION_MASK_ISA2_HRESET_UNSET
;
788 case OPT_mavx5124fmaps
:
791 opts
->x_ix86_isa_flags2
|= OPTION_MASK_ISA2_AVX5124FMAPS_SET
;
792 opts
->x_ix86_isa_flags2_explicit
|= OPTION_MASK_ISA2_AVX5124FMAPS_SET
;
793 opts
->x_ix86_isa_flags
|= OPTION_MASK_ISA_AVX512F_SET
;
794 opts
->x_ix86_isa_flags_explicit
|= OPTION_MASK_ISA_AVX512F_SET
;
798 opts
->x_ix86_isa_flags2
&= ~OPTION_MASK_ISA2_AVX5124FMAPS_UNSET
;
799 opts
->x_ix86_isa_flags2_explicit
|= OPTION_MASK_ISA2_AVX5124FMAPS_UNSET
;
803 case OPT_mavx5124vnniw
:
806 opts
->x_ix86_isa_flags2
|= OPTION_MASK_ISA2_AVX5124VNNIW_SET
;
807 opts
->x_ix86_isa_flags2_explicit
|= OPTION_MASK_ISA2_AVX5124VNNIW_SET
;
808 opts
->x_ix86_isa_flags
|= OPTION_MASK_ISA_AVX512F_SET
;
809 opts
->x_ix86_isa_flags_explicit
|= OPTION_MASK_ISA_AVX512F_SET
;
813 opts
->x_ix86_isa_flags2
&= ~OPTION_MASK_ISA2_AVX5124VNNIW_UNSET
;
814 opts
->x_ix86_isa_flags2_explicit
|= OPTION_MASK_ISA2_AVX5124VNNIW_UNSET
;
818 case OPT_mavx512vbmi2
:
821 opts
->x_ix86_isa_flags
|= OPTION_MASK_ISA_AVX512VBMI2_SET
;
822 opts
->x_ix86_isa_flags_explicit
|= OPTION_MASK_ISA_AVX512VBMI2_SET
;
826 opts
->x_ix86_isa_flags
&= ~OPTION_MASK_ISA_AVX512VBMI2_UNSET
;
827 opts
->x_ix86_isa_flags_explicit
|= OPTION_MASK_ISA_AVX512VBMI2_UNSET
;
831 case OPT_mavx512vnni
:
834 opts
->x_ix86_isa_flags
|= OPTION_MASK_ISA_AVX512VNNI_SET
;
835 opts
->x_ix86_isa_flags_explicit
|= OPTION_MASK_ISA_AVX512VNNI_SET
;
839 opts
->x_ix86_isa_flags
&= ~OPTION_MASK_ISA_AVX512VNNI_UNSET
;
840 opts
->x_ix86_isa_flags_explicit
|= OPTION_MASK_ISA_AVX512VNNI_UNSET
;
844 case OPT_mavx512vpopcntdq
:
847 opts
->x_ix86_isa_flags
|= OPTION_MASK_ISA_AVX512VPOPCNTDQ_SET
;
848 opts
->x_ix86_isa_flags_explicit
849 |= OPTION_MASK_ISA_AVX512VPOPCNTDQ_SET
;
853 opts
->x_ix86_isa_flags
&= ~OPTION_MASK_ISA_AVX512VPOPCNTDQ_UNSET
;
854 opts
->x_ix86_isa_flags_explicit
855 |= OPTION_MASK_ISA_AVX512VPOPCNTDQ_UNSET
;
859 case OPT_mavx512bitalg
:
862 opts
->x_ix86_isa_flags
|= OPTION_MASK_ISA_AVX512BITALG_SET
;
863 opts
->x_ix86_isa_flags_explicit
|= OPTION_MASK_ISA_AVX512BITALG_SET
;
867 opts
->x_ix86_isa_flags
&= ~OPTION_MASK_ISA_AVX512BITALG_UNSET
;
868 opts
->x_ix86_isa_flags_explicit
869 |= OPTION_MASK_ISA_AVX512BITALG_UNSET
;
873 case OPT_mavx512bf16
:
876 opts
->x_ix86_isa_flags2
|= OPTION_MASK_ISA2_AVX512BF16_SET
;
877 opts
->x_ix86_isa_flags2_explicit
|= OPTION_MASK_ISA2_AVX512BF16_SET
;
878 opts
->x_ix86_isa_flags
|= OPTION_MASK_ISA_AVX512BW_SET
;
879 opts
->x_ix86_isa_flags_explicit
|= OPTION_MASK_ISA_AVX512BW_SET
;
883 opts
->x_ix86_isa_flags2
&= ~OPTION_MASK_ISA2_AVX512BF16_UNSET
;
884 opts
->x_ix86_isa_flags2_explicit
|= OPTION_MASK_ISA2_AVX512BF16_UNSET
;
891 opts
->x_ix86_isa_flags2
|= OPTION_MASK_ISA2_AVXVNNI_SET
;
892 opts
->x_ix86_isa_flags2_explicit
|= OPTION_MASK_ISA2_AVXVNNI_SET
;
893 opts
->x_ix86_isa_flags
|= OPTION_MASK_ISA_AVX2_SET
;
894 opts
->x_ix86_isa_flags_explicit
|= OPTION_MASK_ISA_AVX2_SET
;
898 opts
->x_ix86_isa_flags2
&= ~OPTION_MASK_ISA2_AVXVNNI_UNSET
;
899 opts
->x_ix86_isa_flags2_explicit
|= OPTION_MASK_ISA2_AVXVNNI_UNSET
;
906 opts
->x_ix86_isa_flags2
|= OPTION_MASK_ISA2_SGX_SET
;
907 opts
->x_ix86_isa_flags2_explicit
|= OPTION_MASK_ISA2_SGX_SET
;
911 opts
->x_ix86_isa_flags2
&= ~OPTION_MASK_ISA2_SGX_UNSET
;
912 opts
->x_ix86_isa_flags2_explicit
|= OPTION_MASK_ISA2_SGX_UNSET
;
919 opts
->x_ix86_isa_flags2
|= OPTION_MASK_ISA2_PCONFIG_SET
;
920 opts
->x_ix86_isa_flags2_explicit
|= OPTION_MASK_ISA2_PCONFIG_SET
;
924 opts
->x_ix86_isa_flags2
&= ~OPTION_MASK_ISA2_PCONFIG_UNSET
;
925 opts
->x_ix86_isa_flags2_explicit
|= OPTION_MASK_ISA2_PCONFIG_UNSET
;
932 opts
->x_ix86_isa_flags2
|= OPTION_MASK_ISA2_WBNOINVD_SET
;
933 opts
->x_ix86_isa_flags2_explicit
|= OPTION_MASK_ISA2_WBNOINVD_SET
;
937 opts
->x_ix86_isa_flags2
&= ~OPTION_MASK_ISA2_WBNOINVD_UNSET
;
938 opts
->x_ix86_isa_flags2_explicit
|= OPTION_MASK_ISA2_WBNOINVD_UNSET
;
945 opts
->x_ix86_isa_flags
|= OPTION_MASK_ISA_AVX512DQ_SET
;
946 opts
->x_ix86_isa_flags_explicit
|= OPTION_MASK_ISA_AVX512DQ_SET
;
950 opts
->x_ix86_isa_flags
&= ~OPTION_MASK_ISA_AVX512DQ_UNSET
;
951 opts
->x_ix86_isa_flags_explicit
|= OPTION_MASK_ISA_AVX512DQ_UNSET
;
958 opts
->x_ix86_isa_flags
|= OPTION_MASK_ISA_AVX512BW_SET
;
959 opts
->x_ix86_isa_flags_explicit
|= OPTION_MASK_ISA_AVX512BW_SET
;
963 opts
->x_ix86_isa_flags
&= ~OPTION_MASK_ISA_AVX512BW_UNSET
;
964 opts
->x_ix86_isa_flags_explicit
|= OPTION_MASK_ISA_AVX512BW_UNSET
;
965 opts
->x_ix86_isa_flags2
&= ~OPTION_MASK_ISA2_AVX512BW_UNSET
;
966 opts
->x_ix86_isa_flags2_explicit
|= OPTION_MASK_ISA2_AVX512BW_UNSET
;
973 opts
->x_ix86_isa_flags
|= OPTION_MASK_ISA_AVX512VL_SET
;
974 opts
->x_ix86_isa_flags_explicit
|= OPTION_MASK_ISA_AVX512VL_SET
;
978 opts
->x_ix86_isa_flags
&= ~OPTION_MASK_ISA_AVX512VL_UNSET
;
979 opts
->x_ix86_isa_flags_explicit
|= OPTION_MASK_ISA_AVX512VL_UNSET
;
983 case OPT_mavx512ifma
:
986 opts
->x_ix86_isa_flags
|= OPTION_MASK_ISA_AVX512IFMA_SET
;
987 opts
->x_ix86_isa_flags_explicit
|= OPTION_MASK_ISA_AVX512IFMA_SET
;
991 opts
->x_ix86_isa_flags
&= ~OPTION_MASK_ISA_AVX512IFMA_UNSET
;
992 opts
->x_ix86_isa_flags_explicit
|= OPTION_MASK_ISA_AVX512IFMA_UNSET
;
996 case OPT_mavx512vbmi
:
999 opts
->x_ix86_isa_flags
|= OPTION_MASK_ISA_AVX512VBMI_SET
;
1000 opts
->x_ix86_isa_flags_explicit
|= OPTION_MASK_ISA_AVX512VBMI_SET
;
1004 opts
->x_ix86_isa_flags
&= ~OPTION_MASK_ISA_AVX512VBMI_UNSET
;
1005 opts
->x_ix86_isa_flags_explicit
|= OPTION_MASK_ISA_AVX512VBMI_UNSET
;
1009 case OPT_mavx512vp2intersect
:
1012 opts
->x_ix86_isa_flags2
|= OPTION_MASK_ISA2_AVX512VP2INTERSECT_SET
;
1013 opts
->x_ix86_isa_flags2_explicit
|=
1014 OPTION_MASK_ISA2_AVX512VP2INTERSECT_SET
;
1015 opts
->x_ix86_isa_flags
|= OPTION_MASK_ISA_AVX512DQ_SET
;
1016 opts
->x_ix86_isa_flags_explicit
|= OPTION_MASK_ISA_AVX512DQ_SET
;
1020 opts
->x_ix86_isa_flags2
&= ~OPTION_MASK_ISA2_AVX512VP2INTERSECT_UNSET
;
1021 opts
->x_ix86_isa_flags2_explicit
|=
1022 OPTION_MASK_ISA2_AVX512VP2INTERSECT_UNSET
;
1029 opts
->x_ix86_isa_flags2
|= OPTION_MASK_ISA2_TSXLDTRK_SET
;
1030 opts
->x_ix86_isa_flags2_explicit
|= OPTION_MASK_ISA2_TSXLDTRK_SET
;
1034 opts
->x_ix86_isa_flags2
&= ~OPTION_MASK_ISA2_TSXLDTRK_UNSET
;
1035 opts
->x_ix86_isa_flags2_explicit
|= OPTION_MASK_ISA2_TSXLDTRK_UNSET
;
1042 opts
->x_ix86_isa_flags2
|= OPTION_MASK_ISA2_AMX_TILE_SET
;
1043 opts
->x_ix86_isa_flags2_explicit
|= OPTION_MASK_ISA2_AMX_TILE_SET
;
1044 opts
->x_ix86_isa_flags
|= OPTION_MASK_ISA_XSAVE_SET
;
1045 opts
->x_ix86_isa_flags_explicit
|= OPTION_MASK_ISA_XSAVE_SET
;
1049 opts
->x_ix86_isa_flags2
&= ~OPTION_MASK_ISA2_AMX_TILE_UNSET
;
1050 opts
->x_ix86_isa_flags2_explicit
|= OPTION_MASK_ISA2_AMX_TILE_UNSET
;
1057 opts
->x_ix86_isa_flags2
|= OPTION_MASK_ISA2_AMX_INT8_SET
;
1058 opts
->x_ix86_isa_flags2_explicit
|= OPTION_MASK_ISA2_AMX_INT8_SET
;
1062 opts
->x_ix86_isa_flags2
&= ~OPTION_MASK_ISA2_AMX_INT8_UNSET
;
1063 opts
->x_ix86_isa_flags2_explicit
|= OPTION_MASK_ISA2_AMX_INT8_UNSET
;
1070 opts
->x_ix86_isa_flags2
|= OPTION_MASK_ISA2_AMX_BF16_SET
;
1071 opts
->x_ix86_isa_flags2_explicit
|= OPTION_MASK_ISA2_AMX_BF16_SET
;
1075 opts
->x_ix86_isa_flags2
&= ~OPTION_MASK_ISA2_AMX_BF16_UNSET
;
1076 opts
->x_ix86_isa_flags2_explicit
|= OPTION_MASK_ISA2_AMX_BF16_UNSET
;
1083 opts
->x_ix86_isa_flags
|= OPTION_MASK_ISA_FMA_SET
;
1084 opts
->x_ix86_isa_flags_explicit
|= OPTION_MASK_ISA_FMA_SET
;
1088 opts
->x_ix86_isa_flags
&= ~OPTION_MASK_ISA_FMA_UNSET
;
1089 opts
->x_ix86_isa_flags_explicit
|= OPTION_MASK_ISA_FMA_UNSET
;
1096 opts
->x_ix86_isa_flags
|= OPTION_MASK_ISA_RTM_SET
;
1097 opts
->x_ix86_isa_flags_explicit
|= OPTION_MASK_ISA_RTM_SET
;
1101 opts
->x_ix86_isa_flags
&= ~OPTION_MASK_ISA_RTM_UNSET
;
1102 opts
->x_ix86_isa_flags_explicit
|= OPTION_MASK_ISA_RTM_UNSET
;
1107 opts
->x_ix86_isa_flags
|= OPTION_MASK_ISA_SSE4_SET
;
1108 opts
->x_ix86_isa_flags_explicit
|= OPTION_MASK_ISA_SSE4_SET
;
1112 opts
->x_ix86_isa_flags
&= ~OPTION_MASK_ISA_SSE4_UNSET
;
1113 opts
->x_ix86_isa_flags_explicit
|= OPTION_MASK_ISA_SSE4_UNSET
;
1114 opts
->x_ix86_isa_flags2
&= ~OPTION_MASK_ISA2_SSE4_UNSET
;
1115 opts
->x_ix86_isa_flags2_explicit
|= OPTION_MASK_ISA2_SSE4_UNSET
;
1121 opts
->x_ix86_isa_flags
|= OPTION_MASK_ISA_SSE4A_SET
;
1122 opts
->x_ix86_isa_flags_explicit
|= OPTION_MASK_ISA_SSE4A_SET
;
1126 opts
->x_ix86_isa_flags
&= ~OPTION_MASK_ISA_SSE4A_UNSET
;
1127 opts
->x_ix86_isa_flags_explicit
|= OPTION_MASK_ISA_SSE4A_UNSET
;
1134 opts
->x_ix86_isa_flags
|= OPTION_MASK_ISA_FMA4_SET
;
1135 opts
->x_ix86_isa_flags_explicit
|= OPTION_MASK_ISA_FMA4_SET
;
1139 opts
->x_ix86_isa_flags
&= ~OPTION_MASK_ISA_FMA4_UNSET
;
1140 opts
->x_ix86_isa_flags_explicit
|= OPTION_MASK_ISA_FMA4_UNSET
;
1147 opts
->x_ix86_isa_flags
|= OPTION_MASK_ISA_XOP_SET
;
1148 opts
->x_ix86_isa_flags_explicit
|= OPTION_MASK_ISA_XOP_SET
;
1152 opts
->x_ix86_isa_flags
&= ~OPTION_MASK_ISA_XOP_UNSET
;
1153 opts
->x_ix86_isa_flags_explicit
|= OPTION_MASK_ISA_XOP_UNSET
;
1160 opts
->x_ix86_isa_flags
|= OPTION_MASK_ISA_LWP_SET
;
1161 opts
->x_ix86_isa_flags_explicit
|= OPTION_MASK_ISA_LWP_SET
;
1165 opts
->x_ix86_isa_flags
&= ~OPTION_MASK_ISA_LWP_UNSET
;
1166 opts
->x_ix86_isa_flags_explicit
|= OPTION_MASK_ISA_LWP_UNSET
;
1173 opts
->x_ix86_isa_flags
|= OPTION_MASK_ISA_ABM_SET
;
1174 opts
->x_ix86_isa_flags_explicit
|= OPTION_MASK_ISA_ABM_SET
;
1178 opts
->x_ix86_isa_flags
&= ~OPTION_MASK_ISA_ABM_UNSET
;
1179 opts
->x_ix86_isa_flags_explicit
|= OPTION_MASK_ISA_ABM_UNSET
;
1186 opts
->x_ix86_isa_flags
|= OPTION_MASK_ISA_BMI_SET
;
1187 opts
->x_ix86_isa_flags_explicit
|= OPTION_MASK_ISA_BMI_SET
;
1191 opts
->x_ix86_isa_flags
&= ~OPTION_MASK_ISA_BMI_UNSET
;
1192 opts
->x_ix86_isa_flags_explicit
|= OPTION_MASK_ISA_BMI_UNSET
;
1199 opts
->x_ix86_isa_flags
|= OPTION_MASK_ISA_BMI2_SET
;
1200 opts
->x_ix86_isa_flags_explicit
|= OPTION_MASK_ISA_BMI2_SET
;
1204 opts
->x_ix86_isa_flags
&= ~OPTION_MASK_ISA_BMI2_UNSET
;
1205 opts
->x_ix86_isa_flags_explicit
|= OPTION_MASK_ISA_BMI2_UNSET
;
1212 opts
->x_ix86_isa_flags
|= OPTION_MASK_ISA_LZCNT_SET
;
1213 opts
->x_ix86_isa_flags_explicit
|= OPTION_MASK_ISA_LZCNT_SET
;
1217 opts
->x_ix86_isa_flags
&= ~OPTION_MASK_ISA_LZCNT_UNSET
;
1218 opts
->x_ix86_isa_flags_explicit
|= OPTION_MASK_ISA_LZCNT_UNSET
;
1225 opts
->x_ix86_isa_flags
|= OPTION_MASK_ISA_TBM_SET
;
1226 opts
->x_ix86_isa_flags_explicit
|= OPTION_MASK_ISA_TBM_SET
;
1230 opts
->x_ix86_isa_flags
&= ~OPTION_MASK_ISA_TBM_UNSET
;
1231 opts
->x_ix86_isa_flags_explicit
|= OPTION_MASK_ISA_TBM_UNSET
;
1238 opts
->x_ix86_isa_flags
|= OPTION_MASK_ISA_POPCNT_SET
;
1239 opts
->x_ix86_isa_flags_explicit
|= OPTION_MASK_ISA_POPCNT_SET
;
1243 opts
->x_ix86_isa_flags
&= ~OPTION_MASK_ISA_POPCNT_UNSET
;
1244 opts
->x_ix86_isa_flags_explicit
|= OPTION_MASK_ISA_POPCNT_UNSET
;
1251 opts
->x_ix86_isa_flags
|= OPTION_MASK_ISA_SAHF_SET
;
1252 opts
->x_ix86_isa_flags_explicit
|= OPTION_MASK_ISA_SAHF_SET
;
1256 opts
->x_ix86_isa_flags
&= ~OPTION_MASK_ISA_SAHF_UNSET
;
1257 opts
->x_ix86_isa_flags_explicit
|= OPTION_MASK_ISA_SAHF_UNSET
;
1264 opts
->x_ix86_isa_flags2
|= OPTION_MASK_ISA2_CX16_SET
;
1265 opts
->x_ix86_isa_flags2_explicit
|= OPTION_MASK_ISA2_CX16_SET
;
1269 opts
->x_ix86_isa_flags2
&= ~OPTION_MASK_ISA2_CX16_UNSET
;
1270 opts
->x_ix86_isa_flags2_explicit
|= OPTION_MASK_ISA2_CX16_UNSET
;
1277 opts
->x_ix86_isa_flags2
|= OPTION_MASK_ISA2_MOVBE_SET
;
1278 opts
->x_ix86_isa_flags2_explicit
|= OPTION_MASK_ISA2_MOVBE_SET
;
1282 opts
->x_ix86_isa_flags2
&= ~OPTION_MASK_ISA2_MOVBE_UNSET
;
1283 opts
->x_ix86_isa_flags2_explicit
|= OPTION_MASK_ISA2_MOVBE_UNSET
;
1290 opts
->x_ix86_isa_flags
|= OPTION_MASK_ISA_CRC32_SET
;
1291 opts
->x_ix86_isa_flags_explicit
|= OPTION_MASK_ISA_CRC32_SET
;
1295 opts
->x_ix86_isa_flags
&= ~OPTION_MASK_ISA_CRC32_UNSET
;
1296 opts
->x_ix86_isa_flags_explicit
|= OPTION_MASK_ISA_CRC32_UNSET
;
1303 opts
->x_ix86_isa_flags
|= OPTION_MASK_ISA_AES_SET
;
1304 opts
->x_ix86_isa_flags_explicit
|= OPTION_MASK_ISA_AES_SET
;
1308 opts
->x_ix86_isa_flags
&= ~OPTION_MASK_ISA_AES_UNSET
;
1309 opts
->x_ix86_isa_flags_explicit
|= OPTION_MASK_ISA_AES_UNSET
;
1316 opts
->x_ix86_isa_flags
|= OPTION_MASK_ISA_SHA_SET
;
1317 opts
->x_ix86_isa_flags_explicit
|= OPTION_MASK_ISA_SHA_SET
;
1321 opts
->x_ix86_isa_flags
&= ~OPTION_MASK_ISA_SHA_UNSET
;
1322 opts
->x_ix86_isa_flags_explicit
|= OPTION_MASK_ISA_SHA_UNSET
;
1329 opts
->x_ix86_isa_flags
|= OPTION_MASK_ISA_PCLMUL_SET
;
1330 opts
->x_ix86_isa_flags_explicit
|= OPTION_MASK_ISA_PCLMUL_SET
;
1334 opts
->x_ix86_isa_flags
&= ~OPTION_MASK_ISA_PCLMUL_UNSET
;
1335 opts
->x_ix86_isa_flags_explicit
|= OPTION_MASK_ISA_PCLMUL_UNSET
;
1342 opts
->x_ix86_isa_flags
|= OPTION_MASK_ISA_FSGSBASE_SET
;
1343 opts
->x_ix86_isa_flags_explicit
|= OPTION_MASK_ISA_FSGSBASE_SET
;
1347 opts
->x_ix86_isa_flags
&= ~OPTION_MASK_ISA_FSGSBASE_UNSET
;
1348 opts
->x_ix86_isa_flags_explicit
|= OPTION_MASK_ISA_FSGSBASE_UNSET
;
1355 opts
->x_ix86_isa_flags
|= OPTION_MASK_ISA_RDRND_SET
;
1356 opts
->x_ix86_isa_flags_explicit
|= OPTION_MASK_ISA_RDRND_SET
;
1360 opts
->x_ix86_isa_flags
&= ~OPTION_MASK_ISA_RDRND_UNSET
;
1361 opts
->x_ix86_isa_flags_explicit
|= OPTION_MASK_ISA_RDRND_UNSET
;
1368 opts
->x_ix86_isa_flags2
|= OPTION_MASK_ISA2_PTWRITE_SET
;
1369 opts
->x_ix86_isa_flags2_explicit
|= OPTION_MASK_ISA2_PTWRITE_SET
;
1373 opts
->x_ix86_isa_flags2
&= ~OPTION_MASK_ISA2_PTWRITE_UNSET
;
1374 opts
->x_ix86_isa_flags2_explicit
|= OPTION_MASK_ISA2_PTWRITE_UNSET
;
1381 opts
->x_ix86_isa_flags
|= OPTION_MASK_ISA_F16C_SET
;
1382 opts
->x_ix86_isa_flags_explicit
|= OPTION_MASK_ISA_F16C_SET
;
1386 opts
->x_ix86_isa_flags
&= ~OPTION_MASK_ISA_F16C_UNSET
;
1387 opts
->x_ix86_isa_flags_explicit
|= OPTION_MASK_ISA_F16C_UNSET
;
1394 opts
->x_ix86_isa_flags
|= OPTION_MASK_ISA_FXSR_SET
;
1395 opts
->x_ix86_isa_flags_explicit
|= OPTION_MASK_ISA_FXSR_SET
;
1399 opts
->x_ix86_isa_flags
&= ~OPTION_MASK_ISA_FXSR_UNSET
;
1400 opts
->x_ix86_isa_flags_explicit
|= OPTION_MASK_ISA_FXSR_UNSET
;
1407 opts
->x_ix86_isa_flags
|= OPTION_MASK_ISA_XSAVE_SET
;
1408 opts
->x_ix86_isa_flags_explicit
|= OPTION_MASK_ISA_XSAVE_SET
;
1412 opts
->x_ix86_isa_flags
&= ~OPTION_MASK_ISA_XSAVE_UNSET
;
1413 opts
->x_ix86_isa_flags_explicit
|= OPTION_MASK_ISA_XSAVE_UNSET
;
1414 opts
->x_ix86_isa_flags2
&= ~OPTION_MASK_ISA2_XSAVE_UNSET
;
1415 opts
->x_ix86_isa_flags2_explicit
|= OPTION_MASK_ISA2_XSAVE_UNSET
;
1422 opts
->x_ix86_isa_flags
|= OPTION_MASK_ISA_XSAVEOPT_SET
;
1423 opts
->x_ix86_isa_flags_explicit
|= OPTION_MASK_ISA_XSAVEOPT_SET
;
1427 opts
->x_ix86_isa_flags
&= ~OPTION_MASK_ISA_XSAVEOPT_UNSET
;
1428 opts
->x_ix86_isa_flags_explicit
|= OPTION_MASK_ISA_XSAVEOPT_UNSET
;
1435 opts
->x_ix86_isa_flags
|= OPTION_MASK_ISA_XSAVEC_SET
;
1436 opts
->x_ix86_isa_flags_explicit
|= OPTION_MASK_ISA_XSAVEC_SET
;
1440 opts
->x_ix86_isa_flags
&= ~OPTION_MASK_ISA_XSAVEC_UNSET
;
1441 opts
->x_ix86_isa_flags_explicit
|= OPTION_MASK_ISA_XSAVEC_UNSET
;
1448 opts
->x_ix86_isa_flags
|= OPTION_MASK_ISA_XSAVES_SET
;
1449 opts
->x_ix86_isa_flags_explicit
|= OPTION_MASK_ISA_XSAVES_SET
;
1453 opts
->x_ix86_isa_flags
&= ~OPTION_MASK_ISA_XSAVES_UNSET
;
1454 opts
->x_ix86_isa_flags_explicit
|= OPTION_MASK_ISA_XSAVES_UNSET
;
1461 opts
->x_ix86_isa_flags
|= OPTION_MASK_ISA_RDSEED_SET
;
1462 opts
->x_ix86_isa_flags_explicit
|= OPTION_MASK_ISA_RDSEED_SET
;
1466 opts
->x_ix86_isa_flags
&= ~OPTION_MASK_ISA_RDSEED_UNSET
;
1467 opts
->x_ix86_isa_flags_explicit
|= OPTION_MASK_ISA_RDSEED_UNSET
;
1474 opts
->x_ix86_isa_flags
|= OPTION_MASK_ISA_PRFCHW_SET
;
1475 opts
->x_ix86_isa_flags_explicit
|= OPTION_MASK_ISA_PRFCHW_SET
;
1479 opts
->x_ix86_isa_flags
&= ~OPTION_MASK_ISA_PRFCHW_UNSET
;
1480 opts
->x_ix86_isa_flags_explicit
|= OPTION_MASK_ISA_PRFCHW_UNSET
;
1487 opts
->x_ix86_isa_flags
|= OPTION_MASK_ISA_ADX_SET
;
1488 opts
->x_ix86_isa_flags_explicit
|= OPTION_MASK_ISA_ADX_SET
;
1492 opts
->x_ix86_isa_flags
&= ~OPTION_MASK_ISA_ADX_UNSET
;
1493 opts
->x_ix86_isa_flags_explicit
|= OPTION_MASK_ISA_ADX_UNSET
;
1497 case OPT_mprefetchwt1
:
1500 opts
->x_ix86_isa_flags
|= OPTION_MASK_ISA_PREFETCHWT1_SET
;
1501 opts
->x_ix86_isa_flags_explicit
|= OPTION_MASK_ISA_PREFETCHWT1_SET
;
1505 opts
->x_ix86_isa_flags
&= ~OPTION_MASK_ISA_PREFETCHWT1_UNSET
;
1506 opts
->x_ix86_isa_flags_explicit
|= OPTION_MASK_ISA_PREFETCHWT1_UNSET
;
1510 case OPT_mclflushopt
:
1513 opts
->x_ix86_isa_flags
|= OPTION_MASK_ISA_CLFLUSHOPT_SET
;
1514 opts
->x_ix86_isa_flags_explicit
|= OPTION_MASK_ISA_CLFLUSHOPT_SET
;
1518 opts
->x_ix86_isa_flags
&= ~OPTION_MASK_ISA_CLFLUSHOPT_UNSET
;
1519 opts
->x_ix86_isa_flags_explicit
|= OPTION_MASK_ISA_CLFLUSHOPT_UNSET
;
1526 opts
->x_ix86_isa_flags
|= OPTION_MASK_ISA_CLWB_SET
;
1527 opts
->x_ix86_isa_flags_explicit
|= OPTION_MASK_ISA_CLWB_SET
;
1531 opts
->x_ix86_isa_flags
&= ~OPTION_MASK_ISA_CLWB_UNSET
;
1532 opts
->x_ix86_isa_flags_explicit
|= OPTION_MASK_ISA_CLWB_UNSET
;
1539 opts
->x_ix86_isa_flags2
|= OPTION_MASK_ISA2_MWAITX_SET
;
1540 opts
->x_ix86_isa_flags2_explicit
|= OPTION_MASK_ISA2_MWAITX_SET
;
1544 opts
->x_ix86_isa_flags2
&= ~OPTION_MASK_ISA2_MWAITX_UNSET
;
1545 opts
->x_ix86_isa_flags2_explicit
|= OPTION_MASK_ISA2_MWAITX_UNSET
;
1552 opts
->x_ix86_isa_flags2
|= OPTION_MASK_ISA2_CLZERO_SET
;
1553 opts
->x_ix86_isa_flags2_explicit
|= OPTION_MASK_ISA2_CLZERO_SET
;
1557 opts
->x_ix86_isa_flags2
&= ~OPTION_MASK_ISA2_CLZERO_UNSET
;
1558 opts
->x_ix86_isa_flags2_explicit
|= OPTION_MASK_ISA2_CLZERO_UNSET
;
1565 opts
->x_ix86_isa_flags
|= OPTION_MASK_ISA_PKU_SET
;
1566 opts
->x_ix86_isa_flags_explicit
|= OPTION_MASK_ISA_PKU_SET
;
1570 opts
->x_ix86_isa_flags
&= ~OPTION_MASK_ISA_PKU_UNSET
;
1571 opts
->x_ix86_isa_flags_explicit
|= OPTION_MASK_ISA_PKU_UNSET
;
1576 case OPT_malign_loops_
:
1577 warning_at (loc
, 0, "%<-malign-loops%> is obsolete, "
1578 "use %<-falign-loops%>");
1579 if (value
> MAX_CODE_ALIGN
)
1580 error_at (loc
, "%<-malign-loops=%d%> is not between 0 and %d",
1581 value
, MAX_CODE_ALIGN
);
1583 set_malign_value (&opts
->x_str_align_loops
, value
);
1586 case OPT_malign_jumps_
:
1587 warning_at (loc
, 0, "%<-malign-jumps%> is obsolete, "
1588 "use %<-falign-jumps%>");
1589 if (value
> MAX_CODE_ALIGN
)
1590 error_at (loc
, "%<-malign-jumps=%d%> is not between 0 and %d",
1591 value
, MAX_CODE_ALIGN
);
1593 set_malign_value (&opts
->x_str_align_jumps
, value
);
1596 case OPT_malign_functions_
:
1598 "%<-malign-functions%> is obsolete, "
1599 "use %<-falign-functions%>");
1600 if (value
> MAX_CODE_ALIGN
)
1601 error_at (loc
, "%<-malign-functions=%d%> is not between 0 and %d",
1602 value
, MAX_CODE_ALIGN
);
1604 set_malign_value (&opts
->x_str_align_functions
, value
);
1607 case OPT_mbranch_cost_
:
1610 error_at (loc
, "%<-mbranch-cost=%d%> is not between 0 and 5", value
);
1611 opts
->x_ix86_branch_cost
= 5;
1620 static const struct default_options ix86_option_optimization_table
[] =
1622 /* Enable redundant extension instructions removal at -O2 and higher. */
1623 { OPT_LEVELS_2_PLUS
, OPT_free
, NULL
, 1 },
1624 /* Enable function splitting at -O2 and higher. */
1625 { OPT_LEVELS_2_PLUS
, OPT_freorder_blocks_and_partition
, NULL
, 1 },
1626 /* The STC algorithm produces the smallest code at -Os, for x86. */
1627 { OPT_LEVELS_2_PLUS
, OPT_freorder_blocks_algorithm_
, NULL
,
1628 REORDER_BLOCKS_ALGORITHM_STC
},
1629 /* Turn off -fschedule-insns by default. It tends to make the
1630 problem with not enough registers even worse. */
1631 { OPT_LEVELS_ALL
, OPT_fschedule_insns
, NULL
, 0 },
1633 #ifdef SUBTARGET_OPTIMIZATION_OPTIONS
1634 SUBTARGET_OPTIMIZATION_OPTIONS
,
1636 { OPT_LEVELS_NONE
, 0, NULL
, 0 }
1639 /* Implement TARGET_OPTION_INIT_STRUCT. */
1642 ix86_option_init_struct (struct gcc_options
*opts
)
1645 /* The Darwin libraries never set errno, so we might as well
1646 avoid calling them when that's the only reason we would. */
1647 opts
->x_flag_errno_math
= 0;
1649 opts
->x_flag_pcc_struct_return
= 2;
1650 opts
->x_flag_asynchronous_unwind_tables
= 2;
1653 /* On the x86 -fsplit-stack and -fstack-protector both use the same
1654 field in the TCB, so they cannot be used together. */
1657 ix86_supports_split_stack (bool report ATTRIBUTE_UNUSED
,
1658 struct gcc_options
*opts ATTRIBUTE_UNUSED
)
1662 #ifndef TARGET_THREAD_SPLIT_STACK_OFFSET
1664 error ("%<-fsplit-stack%> currently only supported on GNU/Linux");
1667 if (!HAVE_GAS_CFI_PERSONALITY_DIRECTIVE
)
1670 error ("%<-fsplit-stack%> requires "
1671 "assembler support for CFI directives");
1679 /* Implement TARGET_EXCEPT_UNWIND_INFO. */
1681 static enum unwind_info_type
1682 i386_except_unwind_info (struct gcc_options
*opts
)
1684 /* Honor the --enable-sjlj-exceptions configure switch. */
1685 #ifdef CONFIG_SJLJ_EXCEPTIONS
1686 if (CONFIG_SJLJ_EXCEPTIONS
)
1690 /* On windows 64, prefer SEH exceptions over anything else. */
1691 if (TARGET_64BIT
&& DEFAULT_ABI
== MS_ABI
&& opts
->x_flag_unwind_tables
)
1694 if (DWARF2_UNWIND_INFO
)
1700 #undef TARGET_EXCEPT_UNWIND_INFO
1701 #define TARGET_EXCEPT_UNWIND_INFO i386_except_unwind_info
1703 #undef TARGET_DEFAULT_TARGET_FLAGS
1704 #define TARGET_DEFAULT_TARGET_FLAGS \
1706 | TARGET_SUBTARGET_DEFAULT \
1707 | TARGET_TLS_DIRECT_SEG_REFS_DEFAULT)
1709 #undef TARGET_HANDLE_OPTION
1710 #define TARGET_HANDLE_OPTION ix86_handle_option
1712 #undef TARGET_OPTION_OPTIMIZATION_TABLE
1713 #define TARGET_OPTION_OPTIMIZATION_TABLE ix86_option_optimization_table
1714 #undef TARGET_OPTION_INIT_STRUCT
1715 #define TARGET_OPTION_INIT_STRUCT ix86_option_init_struct
1717 #undef TARGET_SUPPORTS_SPLIT_STACK
1718 #define TARGET_SUPPORTS_SPLIT_STACK ix86_supports_split_stack
1720 /* This table must be in sync with enum processor_type in i386.h. */
1721 const char *const processor_names
[] =
1769 /* Guarantee that the array is aligned with enum processor_type. */
1770 STATIC_ASSERT (ARRAY_SIZE (processor_names
) == PROCESSOR_max
);
1772 const pta processor_alias_table
[] =
1774 {"i386", PROCESSOR_I386
, CPU_NONE
, 0, 0, P_NONE
},
1775 {"i486", PROCESSOR_I486
, CPU_NONE
, 0, 0, P_NONE
},
1776 {"i586", PROCESSOR_PENTIUM
, CPU_PENTIUM
, 0, 0, P_NONE
},
1777 {"pentium", PROCESSOR_PENTIUM
, CPU_PENTIUM
, 0, 0, P_NONE
},
1778 {"lakemont", PROCESSOR_LAKEMONT
, CPU_PENTIUM
, PTA_NO_80387
,
1780 {"pentium-mmx", PROCESSOR_PENTIUM
, CPU_PENTIUM
, PTA_MMX
, 0, P_NONE
},
1781 {"winchip-c6", PROCESSOR_I486
, CPU_NONE
, PTA_MMX
, 0, P_NONE
},
1782 {"winchip2", PROCESSOR_I486
, CPU_NONE
, PTA_MMX
| PTA_3DNOW
,
1784 {"c3", PROCESSOR_I486
, CPU_NONE
, PTA_MMX
| PTA_3DNOW
, 0, P_NONE
},
1785 {"samuel-2", PROCESSOR_I486
, CPU_NONE
, PTA_MMX
| PTA_3DNOW
,
1787 {"c3-2", PROCESSOR_PENTIUMPRO
, CPU_PENTIUMPRO
,
1788 PTA_MMX
| PTA_SSE
| PTA_FXSR
, 0, P_NONE
},
1789 {"nehemiah", PROCESSOR_PENTIUMPRO
, CPU_PENTIUMPRO
,
1790 PTA_MMX
| PTA_SSE
| PTA_FXSR
, 0, P_NONE
},
1791 {"c7", PROCESSOR_PENTIUMPRO
, CPU_PENTIUMPRO
,
1792 PTA_MMX
| PTA_SSE
| PTA_SSE2
| PTA_SSE3
| PTA_FXSR
, 0, P_NONE
},
1793 {"esther", PROCESSOR_PENTIUMPRO
, CPU_PENTIUMPRO
,
1794 PTA_MMX
| PTA_SSE
| PTA_SSE2
| PTA_SSE3
| PTA_FXSR
, 0, P_NONE
},
1795 {"i686", PROCESSOR_PENTIUMPRO
, CPU_PENTIUMPRO
, 0, 0, P_NONE
},
1796 {"pentiumpro", PROCESSOR_PENTIUMPRO
, CPU_PENTIUMPRO
, 0, 0, P_NONE
},
1797 {"pentium2", PROCESSOR_PENTIUMPRO
, CPU_PENTIUMPRO
, PTA_MMX
| PTA_FXSR
,
1799 {"pentium3", PROCESSOR_PENTIUMPRO
, CPU_PENTIUMPRO
,
1800 PTA_MMX
| PTA_SSE
| PTA_FXSR
, 0, P_NONE
},
1801 {"pentium3m", PROCESSOR_PENTIUMPRO
, CPU_PENTIUMPRO
,
1802 PTA_MMX
| PTA_SSE
| PTA_FXSR
, 0, P_NONE
},
1803 {"pentium-m", PROCESSOR_PENTIUMPRO
, CPU_PENTIUMPRO
,
1804 PTA_MMX
| PTA_SSE
| PTA_SSE2
| PTA_FXSR
, 0, P_NONE
},
1805 {"pentium4", PROCESSOR_PENTIUM4
, CPU_NONE
,
1806 PTA_MMX
| PTA_SSE
| PTA_SSE2
| PTA_FXSR
, 0, P_NONE
},
1807 {"pentium4m", PROCESSOR_PENTIUM4
, CPU_NONE
,
1808 PTA_MMX
| PTA_SSE
| PTA_SSE2
| PTA_FXSR
, 0, P_NONE
},
1809 {"prescott", PROCESSOR_NOCONA
, CPU_NONE
,
1810 PTA_MMX
| PTA_SSE
| PTA_SSE2
| PTA_SSE3
| PTA_FXSR
, 0, P_NONE
},
1811 {"nocona", PROCESSOR_NOCONA
, CPU_NONE
,
1812 PTA_64BIT
| PTA_MMX
| PTA_SSE
| PTA_SSE2
| PTA_SSE3
1813 | PTA_CX16
| PTA_NO_SAHF
| PTA_FXSR
, 0, P_NONE
},
1814 {"core2", PROCESSOR_CORE2
, CPU_CORE2
, PTA_CORE2
,
1815 M_CPU_TYPE (INTEL_CORE2
), P_PROC_SSSE3
},
1816 {"nehalem", PROCESSOR_NEHALEM
, CPU_NEHALEM
, PTA_NEHALEM
,
1817 M_CPU_SUBTYPE (INTEL_COREI7_NEHALEM
), P_PROC_DYNAMIC
},
1818 {"corei7", PROCESSOR_NEHALEM
, CPU_NEHALEM
, PTA_NEHALEM
,
1819 M_CPU_TYPE (INTEL_COREI7
), P_PROC_DYNAMIC
},
1820 {"westmere", PROCESSOR_NEHALEM
, CPU_NEHALEM
, PTA_WESTMERE
,
1821 M_CPU_SUBTYPE (INTEL_COREI7_WESTMERE
), P_PROC_DYNAMIC
},
1822 {"sandybridge", PROCESSOR_SANDYBRIDGE
, CPU_NEHALEM
,
1824 M_CPU_SUBTYPE (INTEL_COREI7_SANDYBRIDGE
), P_PROC_DYNAMIC
},
1825 {"corei7-avx", PROCESSOR_SANDYBRIDGE
, CPU_NEHALEM
,
1826 PTA_SANDYBRIDGE
, 0, P_PROC_DYNAMIC
},
1827 {"ivybridge", PROCESSOR_SANDYBRIDGE
, CPU_NEHALEM
,
1829 M_CPU_SUBTYPE (INTEL_COREI7_IVYBRIDGE
), P_PROC_DYNAMIC
},
1830 {"core-avx-i", PROCESSOR_SANDYBRIDGE
, CPU_NEHALEM
,
1831 PTA_IVYBRIDGE
, 0, P_PROC_DYNAMIC
},
1832 {"haswell", PROCESSOR_HASWELL
, CPU_HASWELL
, PTA_HASWELL
,
1833 M_CPU_SUBTYPE (INTEL_COREI7_HASWELL
), P_PROC_DYNAMIC
},
1834 {"core-avx2", PROCESSOR_HASWELL
, CPU_HASWELL
, PTA_HASWELL
,
1836 {"broadwell", PROCESSOR_HASWELL
, CPU_HASWELL
, PTA_BROADWELL
,
1837 M_CPU_SUBTYPE (INTEL_COREI7_BROADWELL
), P_PROC_DYNAMIC
},
1838 {"skylake", PROCESSOR_SKYLAKE
, CPU_HASWELL
, PTA_SKYLAKE
,
1839 M_CPU_SUBTYPE (INTEL_COREI7_SKYLAKE
), P_PROC_AVX2
},
1840 {"skylake-avx512", PROCESSOR_SKYLAKE_AVX512
, CPU_HASWELL
,
1842 M_CPU_SUBTYPE (INTEL_COREI7_SKYLAKE_AVX512
), P_PROC_AVX512F
},
1843 {"cannonlake", PROCESSOR_CANNONLAKE
, CPU_HASWELL
, PTA_CANNONLAKE
,
1844 M_CPU_SUBTYPE (INTEL_COREI7_CANNONLAKE
), P_PROC_AVX512F
},
1845 {"icelake-client", PROCESSOR_ICELAKE_CLIENT
, CPU_HASWELL
,
1847 M_CPU_SUBTYPE (INTEL_COREI7_ICELAKE_CLIENT
), P_PROC_AVX512F
},
1848 {"icelake-server", PROCESSOR_ICELAKE_SERVER
, CPU_HASWELL
,
1850 M_CPU_SUBTYPE (INTEL_COREI7_ICELAKE_SERVER
), P_PROC_AVX512F
},
1851 {"cascadelake", PROCESSOR_CASCADELAKE
, CPU_HASWELL
,
1853 M_CPU_SUBTYPE (INTEL_COREI7_CASCADELAKE
), P_PROC_AVX512F
},
1854 {"tigerlake", PROCESSOR_TIGERLAKE
, CPU_HASWELL
, PTA_TIGERLAKE
,
1855 M_CPU_SUBTYPE (INTEL_COREI7_TIGERLAKE
), P_PROC_AVX512F
},
1856 {"cooperlake", PROCESSOR_COOPERLAKE
, CPU_HASWELL
, PTA_COOPERLAKE
,
1857 M_CPU_SUBTYPE (INTEL_COREI7_COOPERLAKE
), P_PROC_AVX512F
},
1858 {"sapphirerapids", PROCESSOR_SAPPHIRERAPIDS
, CPU_HASWELL
, PTA_SAPPHIRERAPIDS
,
1859 M_CPU_SUBTYPE (INTEL_COREI7_SAPPHIRERAPIDS
), P_PROC_AVX512F
},
1860 {"alderlake", PROCESSOR_ALDERLAKE
, CPU_HASWELL
, PTA_ALDERLAKE
,
1861 M_CPU_SUBTYPE (INTEL_COREI7_ALDERLAKE
), P_PROC_AVX2
},
1862 {"bonnell", PROCESSOR_BONNELL
, CPU_ATOM
, PTA_BONNELL
,
1863 M_CPU_TYPE (INTEL_BONNELL
), P_PROC_SSSE3
},
1864 {"atom", PROCESSOR_BONNELL
, CPU_ATOM
, PTA_BONNELL
,
1865 M_CPU_TYPE (INTEL_BONNELL
), P_PROC_SSSE3
},
1866 {"silvermont", PROCESSOR_SILVERMONT
, CPU_SLM
, PTA_SILVERMONT
,
1867 M_CPU_TYPE (INTEL_SILVERMONT
), P_PROC_SSE4_2
},
1868 {"slm", PROCESSOR_SILVERMONT
, CPU_SLM
, PTA_SILVERMONT
,
1869 M_CPU_TYPE (INTEL_SILVERMONT
), P_PROC_SSE4_2
},
1870 {"goldmont", PROCESSOR_GOLDMONT
, CPU_GLM
, PTA_GOLDMONT
,
1871 M_CPU_TYPE (INTEL_GOLDMONT
), P_PROC_SSE4_2
},
1872 {"goldmont-plus", PROCESSOR_GOLDMONT_PLUS
, CPU_GLM
, PTA_GOLDMONT_PLUS
,
1873 M_CPU_TYPE (INTEL_GOLDMONT_PLUS
), P_PROC_SSE4_2
},
1874 {"tremont", PROCESSOR_TREMONT
, CPU_GLM
, PTA_TREMONT
,
1875 M_CPU_TYPE (INTEL_TREMONT
), P_PROC_SSE4_2
},
1876 {"knl", PROCESSOR_KNL
, CPU_SLM
, PTA_KNL
,
1877 M_CPU_TYPE (INTEL_KNL
), P_PROC_AVX512F
},
1878 {"knm", PROCESSOR_KNM
, CPU_SLM
, PTA_KNM
,
1879 M_CPU_TYPE (INTEL_KNM
), P_PROC_AVX512F
},
1880 {"intel", PROCESSOR_INTEL
, CPU_SLM
, PTA_NEHALEM
,
1881 M_VENDOR (VENDOR_INTEL
), P_NONE
},
1882 {"geode", PROCESSOR_GEODE
, CPU_GEODE
,
1883 PTA_MMX
| PTA_3DNOW
| PTA_3DNOW_A
| PTA_PREFETCH_SSE
, 0, P_NONE
},
1884 {"k6", PROCESSOR_K6
, CPU_K6
, PTA_MMX
, 0, P_NONE
},
1885 {"k6-2", PROCESSOR_K6
, CPU_K6
, PTA_MMX
| PTA_3DNOW
, 0, P_NONE
},
1886 {"k6-3", PROCESSOR_K6
, CPU_K6
, PTA_MMX
| PTA_3DNOW
, 0, P_NONE
},
1887 {"athlon", PROCESSOR_ATHLON
, CPU_ATHLON
,
1888 PTA_MMX
| PTA_3DNOW
| PTA_3DNOW_A
| PTA_PREFETCH_SSE
, 0, P_NONE
},
1889 {"athlon-tbird", PROCESSOR_ATHLON
, CPU_ATHLON
,
1890 PTA_MMX
| PTA_3DNOW
| PTA_3DNOW_A
| PTA_PREFETCH_SSE
, 0, P_NONE
},
1891 {"athlon-4", PROCESSOR_ATHLON
, CPU_ATHLON
,
1892 PTA_MMX
| PTA_3DNOW
| PTA_3DNOW_A
| PTA_SSE
| PTA_FXSR
, 0, P_NONE
},
1893 {"athlon-xp", PROCESSOR_ATHLON
, CPU_ATHLON
,
1894 PTA_MMX
| PTA_3DNOW
| PTA_3DNOW_A
| PTA_SSE
| PTA_FXSR
, 0, P_NONE
},
1895 {"athlon-mp", PROCESSOR_ATHLON
, CPU_ATHLON
,
1896 PTA_MMX
| PTA_3DNOW
| PTA_3DNOW_A
| PTA_SSE
| PTA_FXSR
, 0, P_NONE
},
1897 {"x86-64", PROCESSOR_K8
, CPU_K8
, PTA_X86_64_BASELINE
, 0, P_NONE
},
1898 {"x86-64-v2", PROCESSOR_K8
, CPU_GENERIC
, PTA_X86_64_V2
| PTA_NO_TUNE
,
1900 {"x86-64-v3", PROCESSOR_K8
, CPU_GENERIC
, PTA_X86_64_V3
| PTA_NO_TUNE
,
1902 {"x86-64-v4", PROCESSOR_K8
, CPU_GENERIC
, PTA_X86_64_V4
| PTA_NO_TUNE
,
1904 {"eden-x2", PROCESSOR_K8
, CPU_K8
,
1905 PTA_64BIT
| PTA_MMX
| PTA_SSE
| PTA_SSE2
| PTA_SSE3
| PTA_FXSR
,
1907 {"nano", PROCESSOR_K8
, CPU_K8
,
1908 PTA_64BIT
| PTA_MMX
| PTA_SSE
| PTA_SSE2
| PTA_SSE3
1909 | PTA_SSSE3
| PTA_FXSR
, 0, P_NONE
},
1910 {"nano-1000", PROCESSOR_K8
, CPU_K8
,
1911 PTA_64BIT
| PTA_MMX
| PTA_SSE
| PTA_SSE2
| PTA_SSE3
1912 | PTA_SSSE3
| PTA_FXSR
, 0, P_NONE
},
1913 {"nano-2000", PROCESSOR_K8
, CPU_K8
,
1914 PTA_64BIT
| PTA_MMX
| PTA_SSE
| PTA_SSE2
| PTA_SSE3
1915 | PTA_SSSE3
| PTA_FXSR
, 0, P_NONE
},
1916 {"nano-3000", PROCESSOR_K8
, CPU_K8
,
1917 PTA_64BIT
| PTA_MMX
| PTA_SSE
| PTA_SSE2
| PTA_SSE3
1918 | PTA_SSSE3
| PTA_SSE4_1
| PTA_FXSR
, 0, P_NONE
},
1919 {"nano-x2", PROCESSOR_K8
, CPU_K8
,
1920 PTA_64BIT
| PTA_MMX
| PTA_SSE
| PTA_SSE2
| PTA_SSE3
1921 | PTA_SSSE3
| PTA_SSE4_1
| PTA_FXSR
, 0, P_NONE
},
1922 {"eden-x4", PROCESSOR_K8
, CPU_K8
,
1923 PTA_64BIT
| PTA_MMX
| PTA_SSE
| PTA_SSE2
| PTA_SSE3
1924 | PTA_SSSE3
| PTA_SSE4_1
| PTA_FXSR
, 0, P_NONE
},
1925 {"nano-x4", PROCESSOR_K8
, CPU_K8
,
1926 PTA_64BIT
| PTA_MMX
| PTA_SSE
| PTA_SSE2
| PTA_SSE3
1927 | PTA_SSSE3
| PTA_SSE4_1
| PTA_FXSR
, 0, P_NONE
},
1928 {"k8", PROCESSOR_K8
, CPU_K8
,
1929 PTA_64BIT
| PTA_MMX
| PTA_3DNOW
| PTA_3DNOW_A
| PTA_SSE
1930 | PTA_SSE2
| PTA_NO_SAHF
| PTA_FXSR
, 0, P_NONE
},
1931 {"k8-sse3", PROCESSOR_K8
, CPU_K8
,
1932 PTA_64BIT
| PTA_MMX
| PTA_3DNOW
| PTA_3DNOW_A
| PTA_SSE
1933 | PTA_SSE2
| PTA_SSE3
| PTA_NO_SAHF
| PTA_FXSR
, 0, P_NONE
},
1934 {"opteron", PROCESSOR_K8
, CPU_K8
,
1935 PTA_64BIT
| PTA_MMX
| PTA_3DNOW
| PTA_3DNOW_A
| PTA_SSE
1936 | PTA_SSE2
| PTA_NO_SAHF
| PTA_FXSR
, 0, P_NONE
},
1937 {"opteron-sse3", PROCESSOR_K8
, CPU_K8
,
1938 PTA_64BIT
| PTA_MMX
| PTA_3DNOW
| PTA_3DNOW_A
| PTA_SSE
1939 | PTA_SSE2
| PTA_SSE3
| PTA_NO_SAHF
| PTA_FXSR
, 0, P_NONE
},
1940 {"athlon64", PROCESSOR_K8
, CPU_K8
,
1941 PTA_64BIT
| PTA_MMX
| PTA_3DNOW
| PTA_3DNOW_A
| PTA_SSE
1942 | PTA_SSE2
| PTA_NO_SAHF
| PTA_FXSR
, 0, P_NONE
},
1943 {"athlon64-sse3", PROCESSOR_K8
, CPU_K8
,
1944 PTA_64BIT
| PTA_MMX
| PTA_3DNOW
| PTA_3DNOW_A
| PTA_SSE
1945 | PTA_SSE2
| PTA_SSE3
| PTA_NO_SAHF
| PTA_FXSR
, 0, P_NONE
},
1946 {"athlon-fx", PROCESSOR_K8
, CPU_K8
,
1947 PTA_64BIT
| PTA_MMX
| PTA_3DNOW
| PTA_3DNOW_A
| PTA_SSE
1948 | PTA_SSE2
| PTA_NO_SAHF
| PTA_FXSR
, 0, P_NONE
},
1949 {"amdfam10", PROCESSOR_AMDFAM10
, CPU_AMDFAM10
,
1950 PTA_64BIT
| PTA_MMX
| PTA_3DNOW
| PTA_3DNOW_A
| PTA_SSE
| PTA_SSE2
1951 | PTA_SSE3
| PTA_SSE4A
| PTA_CX16
| PTA_ABM
| PTA_PRFCHW
| PTA_FXSR
,
1953 {"barcelona", PROCESSOR_AMDFAM10
, CPU_AMDFAM10
,
1954 PTA_64BIT
| PTA_MMX
| PTA_3DNOW
| PTA_3DNOW_A
| PTA_SSE
| PTA_SSE2
1955 | PTA_SSE3
| PTA_SSE4A
| PTA_CX16
| PTA_ABM
| PTA_PRFCHW
| PTA_FXSR
,
1956 M_CPU_SUBTYPE (AMDFAM10H_BARCELONA
), P_PROC_DYNAMIC
},
1957 {"bdver1", PROCESSOR_BDVER1
, CPU_BDVER1
,
1958 PTA_64BIT
| PTA_MMX
| PTA_SSE
| PTA_SSE2
| PTA_SSE3
1959 | PTA_SSE4A
| PTA_CX16
| PTA_ABM
| PTA_SSSE3
| PTA_SSE4_1
1960 | PTA_SSE4_2
| PTA_AES
| PTA_PCLMUL
| PTA_AVX
| PTA_FMA4
1961 | PTA_XOP
| PTA_LWP
| PTA_PRFCHW
| PTA_FXSR
| PTA_XSAVE
,
1962 M_CPU_TYPE (AMDFAM15H_BDVER1
), P_PROC_XOP
},
1963 {"bdver2", PROCESSOR_BDVER2
, CPU_BDVER2
,
1964 PTA_64BIT
| PTA_MMX
| PTA_SSE
| PTA_SSE2
| PTA_SSE3
1965 | PTA_SSE4A
| PTA_CX16
| PTA_ABM
| PTA_SSSE3
| PTA_SSE4_1
1966 | PTA_SSE4_2
| PTA_AES
| PTA_PCLMUL
| PTA_AVX
| PTA_FMA4
1967 | PTA_XOP
| PTA_LWP
| PTA_BMI
| PTA_TBM
| PTA_F16C
1968 | PTA_FMA
| PTA_PRFCHW
| PTA_FXSR
| PTA_XSAVE
,
1969 M_CPU_TYPE (AMDFAM15H_BDVER2
), P_PROC_FMA
},
1970 {"bdver3", PROCESSOR_BDVER3
, CPU_BDVER3
,
1971 PTA_64BIT
| PTA_MMX
| PTA_SSE
| PTA_SSE2
| PTA_SSE3
1972 | PTA_SSE4A
| PTA_CX16
| PTA_ABM
| PTA_SSSE3
| PTA_SSE4_1
1973 | PTA_SSE4_2
| PTA_AES
| PTA_PCLMUL
| PTA_AVX
| PTA_FMA4
1974 | PTA_XOP
| PTA_LWP
| PTA_BMI
| PTA_TBM
| PTA_F16C
1975 | PTA_FMA
| PTA_PRFCHW
| PTA_FXSR
| PTA_XSAVE
1976 | PTA_XSAVEOPT
| PTA_FSGSBASE
,
1977 M_CPU_SUBTYPE (AMDFAM15H_BDVER3
), P_PROC_FMA
},
1978 {"bdver4", PROCESSOR_BDVER4
, CPU_BDVER4
,
1979 PTA_64BIT
| PTA_MMX
| PTA_SSE
| PTA_SSE2
| PTA_SSE3
1980 | PTA_SSE4A
| PTA_CX16
| PTA_ABM
| PTA_SSSE3
| PTA_SSE4_1
1981 | PTA_SSE4_2
| PTA_AES
| PTA_PCLMUL
| PTA_AVX
| PTA_AVX2
1982 | PTA_FMA4
| PTA_XOP
| PTA_LWP
| PTA_BMI
| PTA_BMI2
1983 | PTA_TBM
| PTA_F16C
| PTA_FMA
| PTA_PRFCHW
| PTA_FXSR
1984 | PTA_XSAVE
| PTA_XSAVEOPT
| PTA_FSGSBASE
| PTA_RDRND
1985 | PTA_MOVBE
| PTA_MWAITX
,
1986 M_CPU_SUBTYPE (AMDFAM15H_BDVER4
), P_PROC_AVX2
},
1987 {"znver1", PROCESSOR_ZNVER1
, CPU_ZNVER1
,
1988 PTA_64BIT
| PTA_MMX
| PTA_SSE
| PTA_SSE2
| PTA_SSE3
1989 | PTA_SSE4A
| PTA_CX16
| PTA_ABM
| PTA_SSSE3
| PTA_SSE4_1
1990 | PTA_SSE4_2
| PTA_AES
| PTA_PCLMUL
| PTA_AVX
| PTA_AVX2
1991 | PTA_BMI
| PTA_BMI2
| PTA_F16C
| PTA_FMA
| PTA_PRFCHW
1992 | PTA_FXSR
| PTA_XSAVE
| PTA_XSAVEOPT
| PTA_FSGSBASE
1993 | PTA_RDRND
| PTA_MOVBE
| PTA_MWAITX
| PTA_ADX
| PTA_RDSEED
1994 | PTA_CLZERO
| PTA_CLFLUSHOPT
| PTA_XSAVEC
| PTA_XSAVES
1995 | PTA_SHA
| PTA_LZCNT
| PTA_POPCNT
,
1996 M_CPU_SUBTYPE (AMDFAM17H_ZNVER1
), P_PROC_AVX2
},
1997 {"znver2", PROCESSOR_ZNVER2
, CPU_ZNVER2
,
1998 PTA_64BIT
| PTA_MMX
| PTA_SSE
| PTA_SSE2
| PTA_SSE3
1999 | PTA_SSE4A
| PTA_CX16
| PTA_ABM
| PTA_SSSE3
| PTA_SSE4_1
2000 | PTA_SSE4_2
| PTA_AES
| PTA_PCLMUL
| PTA_AVX
| PTA_AVX2
2001 | PTA_BMI
| PTA_BMI2
| PTA_F16C
| PTA_FMA
| PTA_PRFCHW
2002 | PTA_FXSR
| PTA_XSAVE
| PTA_XSAVEOPT
| PTA_FSGSBASE
2003 | PTA_RDRND
| PTA_MOVBE
| PTA_MWAITX
| PTA_ADX
| PTA_RDSEED
2004 | PTA_CLZERO
| PTA_CLFLUSHOPT
| PTA_XSAVEC
| PTA_XSAVES
2005 | PTA_SHA
| PTA_LZCNT
| PTA_POPCNT
| PTA_CLWB
| PTA_RDPID
2007 M_CPU_SUBTYPE (AMDFAM17H_ZNVER2
), P_PROC_AVX2
},
2008 {"znver3", PROCESSOR_ZNVER3
, CPU_ZNVER3
,
2009 PTA_64BIT
| PTA_MMX
| PTA_SSE
| PTA_SSE2
| PTA_SSE3
2010 | PTA_SSE4A
| PTA_CX16
| PTA_ABM
| PTA_SSSE3
| PTA_SSE4_1
2011 | PTA_SSE4_2
| PTA_AES
| PTA_PCLMUL
| PTA_AVX
| PTA_AVX2
2012 | PTA_BMI
| PTA_BMI2
| PTA_F16C
| PTA_FMA
| PTA_PRFCHW
2013 | PTA_FXSR
| PTA_XSAVE
| PTA_XSAVEOPT
| PTA_FSGSBASE
2014 | PTA_RDRND
| PTA_MOVBE
| PTA_MWAITX
| PTA_ADX
| PTA_RDSEED
2015 | PTA_CLZERO
| PTA_CLFLUSHOPT
| PTA_XSAVEC
| PTA_XSAVES
2016 | PTA_SHA
| PTA_LZCNT
| PTA_POPCNT
| PTA_CLWB
| PTA_RDPID
2017 | PTA_WBNOINVD
| PTA_VAES
| PTA_VPCLMULQDQ
| PTA_PKU
,
2018 M_CPU_SUBTYPE (AMDFAM19H_ZNVER3
), P_PROC_AVX2
},
2019 {"btver1", PROCESSOR_BTVER1
, CPU_GENERIC
,
2020 PTA_64BIT
| PTA_MMX
| PTA_SSE
| PTA_SSE2
| PTA_SSE3
2021 | PTA_SSSE3
| PTA_SSE4A
| PTA_ABM
| PTA_CX16
| PTA_PRFCHW
2022 | PTA_FXSR
| PTA_XSAVE
,
2023 M_CPU_SUBTYPE (AMDFAM15H_BDVER1
), P_PROC_SSE4_A
},
2024 {"btver2", PROCESSOR_BTVER2
, CPU_BTVER2
,
2025 PTA_64BIT
| PTA_MMX
| PTA_SSE
| PTA_SSE2
| PTA_SSE3
2026 | PTA_SSSE3
| PTA_SSE4A
| PTA_ABM
| PTA_CX16
| PTA_SSE4_1
2027 | PTA_SSE4_2
| PTA_AES
| PTA_PCLMUL
| PTA_AVX
2028 | PTA_BMI
| PTA_F16C
| PTA_MOVBE
| PTA_PRFCHW
2029 | PTA_FXSR
| PTA_XSAVE
| PTA_XSAVEOPT
,
2030 M_CPU_TYPE (AMD_BTVER2
), P_PROC_BMI
},
2032 {"generic", PROCESSOR_GENERIC
, CPU_GENERIC
,
2034 | PTA_HLE
/* flags are only used for -march switch. */,
2037 {"amd", PROCESSOR_GENERIC
, CPU_GENERIC
, 0,
2038 M_VENDOR (VENDOR_AMD
), P_NONE
},
2039 {"amdfam10h", PROCESSOR_GENERIC
, CPU_GENERIC
, 0,
2040 M_CPU_TYPE (AMDFAM10H
), P_NONE
},
2041 {"amdfam15h", PROCESSOR_GENERIC
, CPU_GENERIC
, 0,
2042 M_CPU_TYPE (AMDFAM15H
), P_NONE
},
2043 {"amdfam17h", PROCESSOR_GENERIC
, CPU_GENERIC
, 0,
2044 M_CPU_TYPE (AMDFAM17H
), P_NONE
},
2045 {"amdfam19h", PROCESSOR_GENERIC
, CPU_GENERIC
, 0,
2046 M_CPU_TYPE (AMDFAM19H
), P_NONE
},
2047 {"shanghai", PROCESSOR_GENERIC
, CPU_GENERIC
, 0,
2048 M_CPU_TYPE (AMDFAM10H_SHANGHAI
), P_NONE
},
2049 {"istanbul", PROCESSOR_GENERIC
, CPU_GENERIC
, 0,
2050 M_CPU_TYPE (AMDFAM10H_ISTANBUL
), P_NONE
},
2053 /* NB: processor_alias_table stops at the "generic" entry. */
2054 int const pta_size
= ARRAY_SIZE (processor_alias_table
) - 6;
2055 unsigned int const num_arch_names
= ARRAY_SIZE (processor_alias_table
);
2057 /* Provide valid option values for -march and -mtune options. */
2060 ix86_get_valid_option_values (int option_code
,
2061 const char *prefix ATTRIBUTE_UNUSED
)
2063 vec
<const char *> v
;
2065 opt_code opt
= (opt_code
) option_code
;
2070 for (unsigned i
= 0; i
< pta_size
; i
++)
2072 const char *name
= processor_alias_table
[i
].name
;
2073 gcc_checking_assert (name
!= NULL
);
2076 #ifdef HAVE_LOCAL_CPU_DETECT
2077 /* Add also "native" as possible value. */
2078 v
.safe_push ("native");
2083 for (unsigned i
= 0; i
< PROCESSOR_max
; i
++)
2085 const char *name
= processor_names
[i
];
2086 gcc_checking_assert (name
!= NULL
);
2097 #undef TARGET_GET_VALID_OPTION_VALUES
2098 #define TARGET_GET_VALID_OPTION_VALUES ix86_get_valid_option_values
2100 struct gcc_targetm_common targetm_common
= TARGETM_COMMON_INITIALIZER
;