2 Copyright (C) 1988-2024 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_AVX512DQ_SET \
68 (OPTION_MASK_ISA_AVX512DQ | OPTION_MASK_ISA_AVX512F_SET)
69 #define OPTION_MASK_ISA_AVX512BW_SET \
70 (OPTION_MASK_ISA_AVX512BW | OPTION_MASK_ISA_AVX512F_SET)
71 #define OPTION_MASK_ISA_AVX512VL_SET \
72 (OPTION_MASK_ISA_AVX512VL | OPTION_MASK_ISA_AVX512F_SET)
73 #define OPTION_MASK_ISA_AVX512IFMA_SET \
74 (OPTION_MASK_ISA_AVX512IFMA | OPTION_MASK_ISA_AVX512F_SET)
75 #define OPTION_MASK_ISA2_AVXIFMA_SET OPTION_MASK_ISA2_AVXIFMA
76 #define OPTION_MASK_ISA_AVX512VBMI_SET \
77 (OPTION_MASK_ISA_AVX512VBMI | OPTION_MASK_ISA_AVX512BW_SET)
78 #define OPTION_MASK_ISA_AVX512VBMI2_SET \
79 (OPTION_MASK_ISA_AVX512VBMI2 | OPTION_MASK_ISA_AVX512BW_SET)
80 #define OPTION_MASK_ISA_AVX512FP16_SET OPTION_MASK_ISA_AVX512BW_SET
81 #define OPTION_MASK_ISA2_AVX512FP16_SET OPTION_MASK_ISA2_AVX512FP16
82 #define OPTION_MASK_ISA_AVX512VNNI_SET \
83 (OPTION_MASK_ISA_AVX512VNNI | OPTION_MASK_ISA_AVX512F_SET)
84 #define OPTION_MASK_ISA2_AVXVNNI_SET OPTION_MASK_ISA2_AVXVNNI
85 #define OPTION_MASK_ISA_AVX512VPOPCNTDQ_SET \
86 (OPTION_MASK_ISA_AVX512VPOPCNTDQ | OPTION_MASK_ISA_AVX512F_SET)
87 #define OPTION_MASK_ISA_AVX512BITALG_SET \
88 (OPTION_MASK_ISA_AVX512BITALG | OPTION_MASK_ISA_AVX512BW_SET)
89 #define OPTION_MASK_ISA2_AVX512BF16_SET OPTION_MASK_ISA2_AVX512BF16
90 #define OPTION_MASK_ISA_RTM_SET OPTION_MASK_ISA_RTM
91 #define OPTION_MASK_ISA_PRFCHW_SET OPTION_MASK_ISA_PRFCHW
92 #define OPTION_MASK_ISA_RDSEED_SET OPTION_MASK_ISA_RDSEED
93 #define OPTION_MASK_ISA_ADX_SET OPTION_MASK_ISA_ADX
94 #define OPTION_MASK_ISA_CLFLUSHOPT_SET OPTION_MASK_ISA_CLFLUSHOPT
95 #define OPTION_MASK_ISA_XSAVES_SET \
96 (OPTION_MASK_ISA_XSAVES | OPTION_MASK_ISA_XSAVE_SET)
97 #define OPTION_MASK_ISA_XSAVEC_SET \
98 (OPTION_MASK_ISA_XSAVEC | OPTION_MASK_ISA_XSAVE_SET)
99 #define OPTION_MASK_ISA_CLWB_SET OPTION_MASK_ISA_CLWB
100 #define OPTION_MASK_ISA2_AVX512VP2INTERSECT_SET OPTION_MASK_ISA2_AVX512VP2INTERSECT
101 #define OPTION_MASK_ISA2_AMX_TILE_SET OPTION_MASK_ISA2_AMX_TILE
102 #define OPTION_MASK_ISA2_AMX_INT8_SET \
103 (OPTION_MASK_ISA2_AMX_TILE_SET | OPTION_MASK_ISA2_AMX_INT8)
104 #define OPTION_MASK_ISA2_AMX_BF16_SET \
105 (OPTION_MASK_ISA2_AMX_TILE_SET | OPTION_MASK_ISA2_AMX_BF16)
106 #define OPTION_MASK_ISA2_AVXVNNIINT8_SET OPTION_MASK_ISA2_AVXVNNIINT8
107 #define OPTION_MASK_ISA2_AVXNECONVERT_SET OPTION_MASK_ISA2_AVXNECONVERT
108 #define OPTION_MASK_ISA2_CMPCCXADD_SET OPTION_MASK_ISA2_CMPCCXADD
109 #define OPTION_MASK_ISA2_AMX_FP16_SET \
110 (OPTION_MASK_ISA2_AMX_TILE_SET | OPTION_MASK_ISA2_AMX_FP16)
111 #define OPTION_MASK_ISA2_PREFETCHI_SET OPTION_MASK_ISA2_PREFETCHI
112 #define OPTION_MASK_ISA2_RAOINT_SET OPTION_MASK_ISA2_RAOINT
113 #define OPTION_MASK_ISA2_AMX_COMPLEX_SET \
114 (OPTION_MASK_ISA2_AMX_TILE_SET | OPTION_MASK_ISA2_AMX_COMPLEX)
115 #define OPTION_MASK_ISA2_AVXVNNIINT16_SET OPTION_MASK_ISA2_AVXVNNIINT16
116 #define OPTION_MASK_ISA2_SM3_SET OPTION_MASK_ISA2_SM3
117 #define OPTION_MASK_ISA2_SHA512_SET OPTION_MASK_ISA2_SHA512
118 #define OPTION_MASK_ISA2_SM4_SET OPTION_MASK_ISA2_SM4
119 #define OPTION_MASK_ISA2_APX_F_SET OPTION_MASK_ISA2_APX_F
120 #define OPTION_MASK_ISA2_EVEX512_SET OPTION_MASK_ISA2_EVEX512
121 #define OPTION_MASK_ISA2_USER_MSR_SET OPTION_MASK_ISA2_USER_MSR
122 #define OPTION_MASK_ISA2_AVX10_1_256_SET OPTION_MASK_ISA2_AVX10_1_256
123 #define OPTION_MASK_ISA2_AVX10_1_512_SET \
124 (OPTION_MASK_ISA2_AVX10_1_256_SET | OPTION_MASK_ISA2_AVX10_1_512)
126 /* SSE4 includes both SSE4.1 and SSE4.2. -msse4 should be the same
128 #define OPTION_MASK_ISA_SSE4_SET OPTION_MASK_ISA_SSE4_2_SET
130 #define OPTION_MASK_ISA_SSE4A_SET \
131 (OPTION_MASK_ISA_SSE4A | OPTION_MASK_ISA_SSE3_SET)
132 #define OPTION_MASK_ISA_FMA4_SET \
133 (OPTION_MASK_ISA_FMA4 | OPTION_MASK_ISA_SSE4A_SET \
134 | OPTION_MASK_ISA_AVX_SET)
135 #define OPTION_MASK_ISA_XOP_SET \
136 (OPTION_MASK_ISA_XOP | OPTION_MASK_ISA_FMA4_SET)
137 #define OPTION_MASK_ISA_LWP_SET \
140 /* AES, SHA and PCLMUL need SSE2 because they use xmm registers. */
141 #define OPTION_MASK_ISA_AES_SET \
142 (OPTION_MASK_ISA_AES | OPTION_MASK_ISA_SSE2_SET)
143 #define OPTION_MASK_ISA_SHA_SET \
144 (OPTION_MASK_ISA_SHA | OPTION_MASK_ISA_SSE2_SET)
145 #define OPTION_MASK_ISA_PCLMUL_SET \
146 (OPTION_MASK_ISA_PCLMUL | OPTION_MASK_ISA_SSE2_SET)
148 #define OPTION_MASK_ISA_ABM_SET \
149 (OPTION_MASK_ISA_ABM | OPTION_MASK_ISA_POPCNT_SET)
151 #define OPTION_MASK_ISA2_PCONFIG_SET OPTION_MASK_ISA2_PCONFIG
152 #define OPTION_MASK_ISA2_WBNOINVD_SET OPTION_MASK_ISA2_WBNOINVD
153 #define OPTION_MASK_ISA2_SGX_SET OPTION_MASK_ISA2_SGX
154 #define OPTION_MASK_ISA_BMI_SET OPTION_MASK_ISA_BMI
155 #define OPTION_MASK_ISA_BMI2_SET OPTION_MASK_ISA_BMI2
156 #define OPTION_MASK_ISA_LZCNT_SET OPTION_MASK_ISA_LZCNT
157 #define OPTION_MASK_ISA_TBM_SET OPTION_MASK_ISA_TBM
158 #define OPTION_MASK_ISA_POPCNT_SET OPTION_MASK_ISA_POPCNT
159 #define OPTION_MASK_ISA2_CX16_SET OPTION_MASK_ISA2_CX16
160 #define OPTION_MASK_ISA_SAHF_SET OPTION_MASK_ISA_SAHF
161 #define OPTION_MASK_ISA2_MOVBE_SET OPTION_MASK_ISA2_MOVBE
162 #define OPTION_MASK_ISA_CRC32_SET OPTION_MASK_ISA_CRC32
164 #define OPTION_MASK_ISA_FSGSBASE_SET OPTION_MASK_ISA_FSGSBASE
165 #define OPTION_MASK_ISA_RDRND_SET OPTION_MASK_ISA_RDRND
166 #define OPTION_MASK_ISA2_PTWRITE_SET OPTION_MASK_ISA2_PTWRITE
167 #define OPTION_MASK_ISA_F16C_SET \
168 (OPTION_MASK_ISA_F16C | OPTION_MASK_ISA_AVX_SET)
169 #define OPTION_MASK_ISA2_MWAITX_SET OPTION_MASK_ISA2_MWAITX
170 #define OPTION_MASK_ISA2_MWAIT_SET OPTION_MASK_ISA2_MWAIT
171 #define OPTION_MASK_ISA2_CLZERO_SET OPTION_MASK_ISA2_CLZERO
172 #define OPTION_MASK_ISA_PKU_SET OPTION_MASK_ISA_PKU
173 #define OPTION_MASK_ISA2_RDPID_SET OPTION_MASK_ISA2_RDPID
174 #define OPTION_MASK_ISA_GFNI_SET OPTION_MASK_ISA_GFNI
175 #define OPTION_MASK_ISA_SHSTK_SET OPTION_MASK_ISA_SHSTK
176 #define OPTION_MASK_ISA2_VAES_SET OPTION_MASK_ISA2_VAES
177 #define OPTION_MASK_ISA_VPCLMULQDQ_SET \
178 (OPTION_MASK_ISA_VPCLMULQDQ | OPTION_MASK_ISA_PCLMUL_SET \
179 | OPTION_MASK_ISA_AVX_SET)
180 #define OPTION_MASK_ISA_MOVDIRI_SET OPTION_MASK_ISA_MOVDIRI
181 #define OPTION_MASK_ISA2_MOVDIR64B_SET OPTION_MASK_ISA2_MOVDIR64B
182 #define OPTION_MASK_ISA2_WAITPKG_SET OPTION_MASK_ISA2_WAITPKG
183 #define OPTION_MASK_ISA2_CLDEMOTE_SET OPTION_MASK_ISA2_CLDEMOTE
184 #define OPTION_MASK_ISA2_ENQCMD_SET OPTION_MASK_ISA2_ENQCMD
185 #define OPTION_MASK_ISA2_SERIALIZE_SET OPTION_MASK_ISA2_SERIALIZE
186 #define OPTION_MASK_ISA2_TSXLDTRK_SET OPTION_MASK_ISA2_TSXLDTRK
187 #define OPTION_MASK_ISA2_UINTR_SET OPTION_MASK_ISA2_UINTR
188 #define OPTION_MASK_ISA2_HRESET_SET OPTION_MASK_ISA2_HRESET
189 #define OPTION_MASK_ISA2_KL_SET OPTION_MASK_ISA2_KL
190 #define OPTION_MASK_ISA2_WIDEKL_SET \
191 (OPTION_MASK_ISA2_WIDEKL | OPTION_MASK_ISA2_KL_SET)
193 /* Define a set of ISAs which aren't available when a given ISA is
194 disabled. MMX and SSE ISAs are handled separately. */
196 #define OPTION_MASK_ISA_MMX_UNSET \
197 (OPTION_MASK_ISA_MMX | OPTION_MASK_ISA_3DNOW_UNSET)
198 #define OPTION_MASK_ISA_3DNOW_UNSET \
199 (OPTION_MASK_ISA_3DNOW | OPTION_MASK_ISA_3DNOW_A_UNSET)
200 #define OPTION_MASK_ISA_3DNOW_A_UNSET OPTION_MASK_ISA_3DNOW_A
202 #define OPTION_MASK_ISA_SSE_UNSET \
203 (OPTION_MASK_ISA_SSE | OPTION_MASK_ISA_SSE2_UNSET)
204 #define OPTION_MASK_ISA_SSE2_UNSET \
205 (OPTION_MASK_ISA_SSE2 | OPTION_MASK_ISA_SSE3_UNSET)
206 #define OPTION_MASK_ISA_SSE3_UNSET \
207 (OPTION_MASK_ISA_SSE3 \
208 | OPTION_MASK_ISA_SSSE3_UNSET \
209 | OPTION_MASK_ISA_SSE4A_UNSET )
210 #define OPTION_MASK_ISA_SSSE3_UNSET \
211 (OPTION_MASK_ISA_SSSE3 | OPTION_MASK_ISA_SSE4_1_UNSET)
212 #define OPTION_MASK_ISA_SSE4_1_UNSET \
213 (OPTION_MASK_ISA_SSE4_1 | OPTION_MASK_ISA_SSE4_2_UNSET)
214 #define OPTION_MASK_ISA_SSE4_2_UNSET \
215 (OPTION_MASK_ISA_SSE4_2 | OPTION_MASK_ISA_AVX_UNSET )
216 #define OPTION_MASK_ISA_AVX_UNSET \
217 (OPTION_MASK_ISA_AVX | OPTION_MASK_ISA_FMA_UNSET \
218 | OPTION_MASK_ISA_FMA4_UNSET | OPTION_MASK_ISA_F16C_UNSET \
219 | OPTION_MASK_ISA_AVX2_UNSET | OPTION_MASK_ISA_VPCLMULQDQ_UNSET)
220 #define OPTION_MASK_ISA_FMA_UNSET OPTION_MASK_ISA_FMA
221 #define OPTION_MASK_ISA_FXSR_UNSET OPTION_MASK_ISA_FXSR
222 #define OPTION_MASK_ISA_XSAVE_UNSET \
223 (OPTION_MASK_ISA_XSAVE | OPTION_MASK_ISA_XSAVEOPT_UNSET \
224 | OPTION_MASK_ISA_XSAVES_UNSET | OPTION_MASK_ISA_XSAVEC_UNSET \
225 | OPTION_MASK_ISA_AVX_UNSET)
226 #define OPTION_MASK_ISA2_XSAVE_UNSET \
227 (OPTION_MASK_ISA2_AVX2_UNSET | OPTION_MASK_ISA2_AMX_TILE_UNSET)
228 #define OPTION_MASK_ISA_XSAVEOPT_UNSET OPTION_MASK_ISA_XSAVEOPT
229 #define OPTION_MASK_ISA_AVX2_UNSET \
230 (OPTION_MASK_ISA_AVX2 | OPTION_MASK_ISA_AVX512F_UNSET)
231 #define OPTION_MASK_ISA2_AVX2_UNSET \
232 (OPTION_MASK_ISA2_AVXIFMA_UNSET | OPTION_MASK_ISA2_AVXVNNI_UNSET \
233 | OPTION_MASK_ISA2_AVXVNNIINT8_UNSET | OPTION_MASK_ISA2_AVXNECONVERT_UNSET \
234 | OPTION_MASK_ISA2_AVXVNNIINT16_UNSET | OPTION_MASK_ISA2_AVX512F_UNSET \
235 | OPTION_MASK_ISA2_AVX10_1_256_UNSET)
236 #define OPTION_MASK_ISA_AVX512F_UNSET \
237 (OPTION_MASK_ISA_AVX512F | OPTION_MASK_ISA_AVX512CD_UNSET \
238 | OPTION_MASK_ISA_AVX512DQ_UNSET | OPTION_MASK_ISA_AVX512BW_UNSET \
239 | OPTION_MASK_ISA_AVX512VL_UNSET | OPTION_MASK_ISA_AVX512IFMA_UNSET \
240 | OPTION_MASK_ISA_AVX512VNNI_UNSET \
241 | OPTION_MASK_ISA_AVX512VPOPCNTDQ_UNSET)
242 #define OPTION_MASK_ISA_AVX512CD_UNSET OPTION_MASK_ISA_AVX512CD
243 #define OPTION_MASK_ISA_AVX512DQ_UNSET OPTION_MASK_ISA_AVX512DQ
244 #define OPTION_MASK_ISA_AVX512BW_UNSET \
245 (OPTION_MASK_ISA_AVX512BW | OPTION_MASK_ISA_AVX512VBMI_UNSET \
246 | OPTION_MASK_ISA_AVX512VBMI2_UNSET | OPTION_MASK_ISA_AVX512BITALG_UNSET)
247 #define OPTION_MASK_ISA_AVX512VL_UNSET OPTION_MASK_ISA_AVX512VL
248 #define OPTION_MASK_ISA_AVX512IFMA_UNSET OPTION_MASK_ISA_AVX512IFMA
249 #define OPTION_MASK_ISA2_AVXIFMA_UNSET OPTION_MASK_ISA2_AVXIFMA
250 #define OPTION_MASK_ISA_AVX512VBMI_UNSET OPTION_MASK_ISA_AVX512VBMI
251 #define OPTION_MASK_ISA_AVX512VBMI2_UNSET OPTION_MASK_ISA_AVX512VBMI2
252 #define OPTION_MASK_ISA_AVX512FP16_UNSET OPTION_MASK_ISA_AVX512BW_UNSET
253 #define OPTION_MASK_ISA2_AVX512FP16_UNSET OPTION_MASK_ISA2_AVX512FP16
254 #define OPTION_MASK_ISA_AVX512VNNI_UNSET OPTION_MASK_ISA_AVX512VNNI
255 #define OPTION_MASK_ISA2_AVXVNNI_UNSET OPTION_MASK_ISA2_AVXVNNI
256 #define OPTION_MASK_ISA_AVX512VPOPCNTDQ_UNSET OPTION_MASK_ISA_AVX512VPOPCNTDQ
257 #define OPTION_MASK_ISA_AVX512BITALG_UNSET OPTION_MASK_ISA_AVX512BITALG
258 #define OPTION_MASK_ISA2_AVX512BF16_UNSET OPTION_MASK_ISA2_AVX512BF16
259 #define OPTION_MASK_ISA_RTM_UNSET OPTION_MASK_ISA_RTM
260 #define OPTION_MASK_ISA_PRFCHW_UNSET OPTION_MASK_ISA_PRFCHW
261 #define OPTION_MASK_ISA_RDSEED_UNSET OPTION_MASK_ISA_RDSEED
262 #define OPTION_MASK_ISA_ADX_UNSET OPTION_MASK_ISA_ADX
263 #define OPTION_MASK_ISA_CLFLUSHOPT_UNSET OPTION_MASK_ISA_CLFLUSHOPT
264 #define OPTION_MASK_ISA_XSAVEC_UNSET OPTION_MASK_ISA_XSAVEC
265 #define OPTION_MASK_ISA_XSAVES_UNSET OPTION_MASK_ISA_XSAVES
266 #define OPTION_MASK_ISA_CLWB_UNSET OPTION_MASK_ISA_CLWB
267 #define OPTION_MASK_ISA2_MWAITX_UNSET OPTION_MASK_ISA2_MWAITX
268 #define OPTION_MASK_ISA2_MWAIT_UNSET OPTION_MASK_ISA2_MWAIT
269 #define OPTION_MASK_ISA2_CLZERO_UNSET OPTION_MASK_ISA2_CLZERO
270 #define OPTION_MASK_ISA_PKU_UNSET OPTION_MASK_ISA_PKU
271 #define OPTION_MASK_ISA2_RDPID_UNSET OPTION_MASK_ISA2_RDPID
272 #define OPTION_MASK_ISA_GFNI_UNSET OPTION_MASK_ISA_GFNI
273 #define OPTION_MASK_ISA_SHSTK_UNSET OPTION_MASK_ISA_SHSTK
274 #define OPTION_MASK_ISA2_VAES_UNSET OPTION_MASK_ISA2_VAES
275 #define OPTION_MASK_ISA_VPCLMULQDQ_UNSET OPTION_MASK_ISA_VPCLMULQDQ
276 #define OPTION_MASK_ISA_MOVDIRI_UNSET OPTION_MASK_ISA_MOVDIRI
277 #define OPTION_MASK_ISA2_MOVDIR64B_UNSET OPTION_MASK_ISA2_MOVDIR64B
278 #define OPTION_MASK_ISA2_WAITPKG_UNSET OPTION_MASK_ISA2_WAITPKG
279 #define OPTION_MASK_ISA2_CLDEMOTE_UNSET OPTION_MASK_ISA2_CLDEMOTE
280 #define OPTION_MASK_ISA2_ENQCMD_UNSET OPTION_MASK_ISA2_ENQCMD
281 #define OPTION_MASK_ISA2_SERIALIZE_UNSET OPTION_MASK_ISA2_SERIALIZE
282 #define OPTION_MASK_ISA2_AVX512VP2INTERSECT_UNSET OPTION_MASK_ISA2_AVX512VP2INTERSECT
283 #define OPTION_MASK_ISA2_TSXLDTRK_UNSET OPTION_MASK_ISA2_TSXLDTRK
284 #define OPTION_MASK_ISA2_AMX_TILE_UNSET \
285 (OPTION_MASK_ISA2_AMX_TILE | OPTION_MASK_ISA2_AMX_INT8_UNSET \
286 | OPTION_MASK_ISA2_AMX_BF16_UNSET | OPTION_MASK_ISA2_AMX_FP16_UNSET \
287 | OPTION_MASK_ISA2_AMX_COMPLEX_UNSET)
288 #define OPTION_MASK_ISA2_AMX_INT8_UNSET OPTION_MASK_ISA2_AMX_INT8
289 #define OPTION_MASK_ISA2_AMX_BF16_UNSET OPTION_MASK_ISA2_AMX_BF16
290 #define OPTION_MASK_ISA2_UINTR_UNSET OPTION_MASK_ISA2_UINTR
291 #define OPTION_MASK_ISA2_HRESET_UNSET OPTION_MASK_ISA2_HRESET
292 #define OPTION_MASK_ISA2_KL_UNSET \
293 (OPTION_MASK_ISA2_KL | OPTION_MASK_ISA2_WIDEKL_UNSET)
294 #define OPTION_MASK_ISA2_WIDEKL_UNSET OPTION_MASK_ISA2_WIDEKL
295 #define OPTION_MASK_ISA2_AVXVNNIINT8_UNSET OPTION_MASK_ISA2_AVXVNNIINT8
296 #define OPTION_MASK_ISA2_AVXNECONVERT_UNSET OPTION_MASK_ISA2_AVXNECONVERT
297 #define OPTION_MASK_ISA2_CMPCCXADD_UNSET OPTION_MASK_ISA2_CMPCCXADD
298 #define OPTION_MASK_ISA2_AMX_FP16_UNSET OPTION_MASK_ISA2_AMX_FP16
299 #define OPTION_MASK_ISA2_PREFETCHI_UNSET OPTION_MASK_ISA2_PREFETCHI
300 #define OPTION_MASK_ISA2_RAOINT_UNSET OPTION_MASK_ISA2_RAOINT
301 #define OPTION_MASK_ISA2_AMX_COMPLEX_UNSET OPTION_MASK_ISA2_AMX_COMPLEX
302 #define OPTION_MASK_ISA2_AVXVNNIINT16_UNSET OPTION_MASK_ISA2_AVXVNNIINT16
303 #define OPTION_MASK_ISA2_SM3_UNSET OPTION_MASK_ISA2_SM3
304 #define OPTION_MASK_ISA2_SHA512_UNSET OPTION_MASK_ISA2_SHA512
305 #define OPTION_MASK_ISA2_SM4_UNSET OPTION_MASK_ISA2_SM4
306 #define OPTION_MASK_ISA2_APX_F_UNSET OPTION_MASK_ISA2_APX_F
307 #define OPTION_MASK_ISA2_EVEX512_UNSET OPTION_MASK_ISA2_EVEX512
308 #define OPTION_MASK_ISA2_USER_MSR_UNSET OPTION_MASK_ISA2_USER_MSR
309 #define OPTION_MASK_ISA2_AVX10_1_256_UNSET \
310 (OPTION_MASK_ISA2_AVX10_1_256 | OPTION_MASK_ISA2_AVX10_1_512_UNSET)
311 #define OPTION_MASK_ISA2_AVX10_1_512_UNSET OPTION_MASK_ISA2_AVX10_1_512
313 /* SSE4 includes both SSE4.1 and SSE4.2. -mno-sse4 should the same
315 #define OPTION_MASK_ISA_SSE4_UNSET OPTION_MASK_ISA_SSE4_1_UNSET
317 #define OPTION_MASK_ISA_SSE4A_UNSET \
318 (OPTION_MASK_ISA_SSE4A | OPTION_MASK_ISA_FMA4_UNSET)
320 #define OPTION_MASK_ISA_FMA4_UNSET \
321 (OPTION_MASK_ISA_FMA4 | OPTION_MASK_ISA_XOP_UNSET)
322 #define OPTION_MASK_ISA_XOP_UNSET OPTION_MASK_ISA_XOP
323 #define OPTION_MASK_ISA_LWP_UNSET OPTION_MASK_ISA_LWP
325 #define OPTION_MASK_ISA_AES_UNSET OPTION_MASK_ISA_AES
326 #define OPTION_MASK_ISA_SHA_UNSET OPTION_MASK_ISA_SHA
327 #define OPTION_MASK_ISA_PCLMUL_UNSET \
328 (OPTION_MASK_ISA_PCLMUL | OPTION_MASK_ISA_VPCLMULQDQ_UNSET)
329 #define OPTION_MASK_ISA_ABM_UNSET OPTION_MASK_ISA_ABM
330 #define OPTION_MASK_ISA2_PCONFIG_UNSET OPTION_MASK_ISA2_PCONFIG
331 #define OPTION_MASK_ISA2_WBNOINVD_UNSET OPTION_MASK_ISA2_WBNOINVD
332 #define OPTION_MASK_ISA2_SGX_UNSET OPTION_MASK_ISA2_SGX
333 #define OPTION_MASK_ISA_BMI_UNSET OPTION_MASK_ISA_BMI
334 #define OPTION_MASK_ISA_BMI2_UNSET OPTION_MASK_ISA_BMI2
335 #define OPTION_MASK_ISA_LZCNT_UNSET OPTION_MASK_ISA_LZCNT
336 #define OPTION_MASK_ISA_TBM_UNSET OPTION_MASK_ISA_TBM
337 #define OPTION_MASK_ISA_POPCNT_UNSET OPTION_MASK_ISA_POPCNT
338 #define OPTION_MASK_ISA2_CX16_UNSET OPTION_MASK_ISA2_CX16
339 #define OPTION_MASK_ISA_SAHF_UNSET OPTION_MASK_ISA_SAHF
340 #define OPTION_MASK_ISA2_MOVBE_UNSET OPTION_MASK_ISA2_MOVBE
341 #define OPTION_MASK_ISA_CRC32_UNSET OPTION_MASK_ISA_CRC32
343 #define OPTION_MASK_ISA_FSGSBASE_UNSET OPTION_MASK_ISA_FSGSBASE
344 #define OPTION_MASK_ISA_RDRND_UNSET OPTION_MASK_ISA_RDRND
345 #define OPTION_MASK_ISA2_PTWRITE_UNSET OPTION_MASK_ISA2_PTWRITE
346 #define OPTION_MASK_ISA_F16C_UNSET OPTION_MASK_ISA_F16C
348 #define OPTION_MASK_ISA_GENERAL_REGS_ONLY_UNSET \
349 (OPTION_MASK_ISA_MMX_UNSET \
350 | OPTION_MASK_ISA_SSE_UNSET)
352 #define OPTION_MASK_ISA2_AVX512F_UNSET \
353 (OPTION_MASK_ISA2_AVX512BW_UNSET \
354 | OPTION_MASK_ISA2_AVX512VP2INTERSECT_UNSET)
355 #define OPTION_MASK_ISA2_GENERAL_REGS_ONLY_UNSET \
356 OPTION_MASK_ISA2_SSE_UNSET
357 #define OPTION_MASK_ISA2_AVX_UNSET \
358 (OPTION_MASK_ISA2_AVX2_UNSET | OPTION_MASK_ISA2_VAES_UNSET \
359 | OPTION_MASK_ISA2_SM3_UNSET | OPTION_MASK_ISA2_SHA512_UNSET \
360 | OPTION_MASK_ISA2_SM4_UNSET)
361 #define OPTION_MASK_ISA2_SSE4_2_UNSET OPTION_MASK_ISA2_AVX_UNSET
362 #define OPTION_MASK_ISA2_SSE4_1_UNSET OPTION_MASK_ISA2_SSE4_2_UNSET
363 #define OPTION_MASK_ISA2_SSE4_UNSET OPTION_MASK_ISA2_SSE4_1_UNSET
364 #define OPTION_MASK_ISA2_SSSE3_UNSET OPTION_MASK_ISA2_SSE4_1_UNSET
365 #define OPTION_MASK_ISA2_SSE3_UNSET OPTION_MASK_ISA2_SSSE3_UNSET
366 #define OPTION_MASK_ISA2_SSE2_UNSET \
367 (OPTION_MASK_ISA2_SSE3_UNSET | OPTION_MASK_ISA2_KL_UNSET)
368 #define OPTION_MASK_ISA2_SSE_UNSET OPTION_MASK_ISA2_SSE2_UNSET
370 #define OPTION_MASK_ISA2_AVX512BW_UNSET \
371 (OPTION_MASK_ISA2_AVX512BF16_UNSET \
372 | OPTION_MASK_ISA2_AVX512FP16_UNSET)
374 /* Set 1 << value as value of -malign-FLAG option. */
377 set_malign_value (const char **flag
, unsigned value
)
379 char *r
= XNEWVEC (char, 6);
380 sprintf (r
, "%d", 1 << value
);
384 /* Implement TARGET_HANDLE_OPTION. */
387 ix86_handle_option (struct gcc_options
*opts
,
388 struct gcc_options
*opts_set ATTRIBUTE_UNUSED
,
389 const struct cl_decoded_option
*decoded
,
392 size_t code
= decoded
->opt_index
;
393 int value
= decoded
->value
;
397 case OPT_mgeneral_regs_only
:
400 HOST_WIDE_INT general_regs_only_flags
= 0;
401 HOST_WIDE_INT general_regs_only_flags2
= 0;
403 /* NB: Enable the GPR only instructions which are enabled
404 implicitly by SSE ISAs unless they have been disabled
406 if (TARGET_SSE4_2_P (opts
->x_ix86_isa_flags
))
408 if (!TARGET_EXPLICIT_CRC32_P (opts
))
409 general_regs_only_flags
|= OPTION_MASK_ISA_CRC32
;
410 if (!TARGET_EXPLICIT_POPCNT_P (opts
))
411 general_regs_only_flags
|= OPTION_MASK_ISA_POPCNT
;
413 if (TARGET_SSE3_P (opts
->x_ix86_isa_flags
))
415 if (!TARGET_EXPLICIT_MWAIT_P (opts
))
416 general_regs_only_flags2
|= OPTION_MASK_ISA2_MWAIT
;
419 /* Disable MMX, SSE and x87 instructions if only
420 general registers are allowed. */
421 opts
->x_ix86_isa_flags
422 &= ~OPTION_MASK_ISA_GENERAL_REGS_ONLY_UNSET
;
423 opts
->x_ix86_isa_flags2
424 &= ~OPTION_MASK_ISA2_GENERAL_REGS_ONLY_UNSET
;
425 opts
->x_ix86_isa_flags
|= general_regs_only_flags
;
426 opts
->x_ix86_isa_flags2
|= general_regs_only_flags2
;
427 opts
->x_ix86_isa_flags_explicit
428 |= (OPTION_MASK_ISA_GENERAL_REGS_ONLY_UNSET
429 | general_regs_only_flags
);
430 opts
->x_ix86_isa_flags2_explicit
431 |= (OPTION_MASK_ISA2_GENERAL_REGS_ONLY_UNSET
432 | general_regs_only_flags2
);
434 opts
->x_target_flags
&= ~MASK_80387
;
443 opts
->x_ix86_isa_flags
|= OPTION_MASK_ISA_MMX_SET
;
444 opts
->x_ix86_isa_flags_explicit
|= OPTION_MASK_ISA_MMX_SET
;
448 opts
->x_ix86_isa_flags
&= ~OPTION_MASK_ISA_MMX_UNSET
;
449 opts
->x_ix86_isa_flags_explicit
|= OPTION_MASK_ISA_MMX_UNSET
;
456 opts
->x_ix86_isa_flags
|= OPTION_MASK_ISA_3DNOW_SET
;
457 opts
->x_ix86_isa_flags_explicit
|= OPTION_MASK_ISA_3DNOW_SET
;
461 opts
->x_ix86_isa_flags
&= ~OPTION_MASK_ISA_3DNOW_UNSET
;
462 opts
->x_ix86_isa_flags_explicit
|= OPTION_MASK_ISA_3DNOW_UNSET
;
469 opts
->x_ix86_isa_flags
|= OPTION_MASK_ISA_3DNOW_A_SET
;
470 opts
->x_ix86_isa_flags_explicit
|= OPTION_MASK_ISA_3DNOW_A_SET
;
474 opts
->x_ix86_isa_flags
&= ~OPTION_MASK_ISA_3DNOW_A_UNSET
;
475 opts
->x_ix86_isa_flags_explicit
|= OPTION_MASK_ISA_3DNOW_A_UNSET
;
482 opts
->x_ix86_isa_flags
|= OPTION_MASK_ISA_SSE_SET
;
483 opts
->x_ix86_isa_flags_explicit
|= OPTION_MASK_ISA_SSE_SET
;
487 opts
->x_ix86_isa_flags
&= ~OPTION_MASK_ISA_SSE_UNSET
;
488 opts
->x_ix86_isa_flags_explicit
|= OPTION_MASK_ISA_SSE_UNSET
;
489 opts
->x_ix86_isa_flags2
&= ~OPTION_MASK_ISA2_SSE_UNSET
;
490 opts
->x_ix86_isa_flags2_explicit
|= OPTION_MASK_ISA2_SSE_UNSET
;
497 opts
->x_ix86_isa_flags
|= OPTION_MASK_ISA_SSE2_SET
;
498 opts
->x_ix86_isa_flags_explicit
|= OPTION_MASK_ISA_SSE2_SET
;
502 opts
->x_ix86_isa_flags
&= ~OPTION_MASK_ISA_SSE2_UNSET
;
503 opts
->x_ix86_isa_flags_explicit
|= OPTION_MASK_ISA_SSE2_UNSET
;
504 opts
->x_ix86_isa_flags2
&= ~OPTION_MASK_ISA2_SSE2_UNSET
;
505 opts
->x_ix86_isa_flags2_explicit
|= OPTION_MASK_ISA2_SSE2_UNSET
;
512 opts
->x_ix86_isa_flags
|= OPTION_MASK_ISA_SSE3_SET
;
513 opts
->x_ix86_isa_flags_explicit
|= OPTION_MASK_ISA_SSE3_SET
;
517 opts
->x_ix86_isa_flags
&= ~OPTION_MASK_ISA_SSE3_UNSET
;
518 opts
->x_ix86_isa_flags_explicit
|= OPTION_MASK_ISA_SSE3_UNSET
;
519 opts
->x_ix86_isa_flags2
&= ~OPTION_MASK_ISA2_SSE3_UNSET
;
520 opts
->x_ix86_isa_flags2_explicit
|= OPTION_MASK_ISA2_SSE3_UNSET
;
527 opts
->x_ix86_isa_flags
|= OPTION_MASK_ISA_SSSE3_SET
;
528 opts
->x_ix86_isa_flags_explicit
|= OPTION_MASK_ISA_SSSE3_SET
;
532 opts
->x_ix86_isa_flags
&= ~OPTION_MASK_ISA_SSSE3_UNSET
;
533 opts
->x_ix86_isa_flags_explicit
|= OPTION_MASK_ISA_SSSE3_UNSET
;
534 opts
->x_ix86_isa_flags2
&= ~OPTION_MASK_ISA2_SSSE3_UNSET
;
535 opts
->x_ix86_isa_flags2_explicit
|= OPTION_MASK_ISA2_SSSE3_UNSET
;
542 opts
->x_ix86_isa_flags
|= OPTION_MASK_ISA_SSE4_1_SET
;
543 opts
->x_ix86_isa_flags_explicit
|= OPTION_MASK_ISA_SSE4_1_SET
;
547 opts
->x_ix86_isa_flags
&= ~OPTION_MASK_ISA_SSE4_1_UNSET
;
548 opts
->x_ix86_isa_flags_explicit
|= OPTION_MASK_ISA_SSE4_1_UNSET
;
549 opts
->x_ix86_isa_flags2
&= ~OPTION_MASK_ISA2_SSE4_1_UNSET
;
550 opts
->x_ix86_isa_flags2_explicit
|= OPTION_MASK_ISA2_SSE4_1_UNSET
;
557 opts
->x_ix86_isa_flags
|= OPTION_MASK_ISA_SSE4_2_SET
;
558 opts
->x_ix86_isa_flags_explicit
|= OPTION_MASK_ISA_SSE4_2_SET
;
562 opts
->x_ix86_isa_flags
&= ~OPTION_MASK_ISA_SSE4_2_UNSET
;
563 opts
->x_ix86_isa_flags_explicit
|= OPTION_MASK_ISA_SSE4_2_UNSET
;
564 opts
->x_ix86_isa_flags2
&= ~OPTION_MASK_ISA2_SSE4_2_UNSET
;
565 opts
->x_ix86_isa_flags2_explicit
|= OPTION_MASK_ISA2_SSE4_2_UNSET
;
572 opts
->x_ix86_isa_flags
|= OPTION_MASK_ISA_AVX_SET
;
573 opts
->x_ix86_isa_flags_explicit
|= OPTION_MASK_ISA_AVX_SET
;
577 opts
->x_ix86_isa_flags
&= ~OPTION_MASK_ISA_AVX_UNSET
;
578 opts
->x_ix86_isa_flags_explicit
|= OPTION_MASK_ISA_AVX_UNSET
;
579 opts
->x_ix86_isa_flags2
&= ~OPTION_MASK_ISA2_AVX_UNSET
;
580 opts
->x_ix86_isa_flags2_explicit
|= OPTION_MASK_ISA2_AVX_UNSET
;
587 opts
->x_ix86_isa_flags
|= OPTION_MASK_ISA_AVX2_SET
;
588 opts
->x_ix86_isa_flags_explicit
|= OPTION_MASK_ISA_AVX2_SET
;
592 opts
->x_ix86_isa_flags
&= ~OPTION_MASK_ISA_AVX2_UNSET
;
593 opts
->x_ix86_isa_flags_explicit
|= OPTION_MASK_ISA_AVX2_UNSET
;
594 opts
->x_ix86_isa_flags2
&= ~OPTION_MASK_ISA2_AVX2_UNSET
;
595 opts
->x_ix86_isa_flags2_explicit
|= OPTION_MASK_ISA2_AVX2_UNSET
;
602 opts
->x_ix86_isa_flags
|= OPTION_MASK_ISA_AVX512F_SET
;
603 opts
->x_ix86_isa_flags_explicit
|= OPTION_MASK_ISA_AVX512F_SET
;
607 opts
->x_ix86_isa_flags
&= ~OPTION_MASK_ISA_AVX512F_UNSET
;
608 opts
->x_ix86_isa_flags_explicit
|= OPTION_MASK_ISA_AVX512F_UNSET
;
609 opts
->x_ix86_isa_flags2
&= ~OPTION_MASK_ISA2_AVX512F_UNSET
;
610 opts
->x_ix86_isa_flags2_explicit
|= OPTION_MASK_ISA2_AVX512F_UNSET
;
611 opts
->x_ix86_no_avx512_explicit
= 1;
618 opts
->x_ix86_isa_flags
|= OPTION_MASK_ISA_AVX512CD_SET
;
619 opts
->x_ix86_isa_flags_explicit
|= OPTION_MASK_ISA_AVX512CD_SET
;
623 opts
->x_ix86_isa_flags
&= ~OPTION_MASK_ISA_AVX512CD_UNSET
;
624 opts
->x_ix86_isa_flags_explicit
|= OPTION_MASK_ISA_AVX512CD_UNSET
;
625 opts
->x_ix86_no_avx512_explicit
= 1;
632 opts
->x_ix86_isa_flags2
|= OPTION_MASK_ISA2_RDPID_SET
;
633 opts
->x_ix86_isa_flags2_explicit
|= OPTION_MASK_ISA2_RDPID_SET
;
637 opts
->x_ix86_isa_flags2
&= ~OPTION_MASK_ISA2_RDPID_UNSET
;
638 opts
->x_ix86_isa_flags2_explicit
|= OPTION_MASK_ISA2_RDPID_UNSET
;
645 opts
->x_ix86_isa_flags
|= OPTION_MASK_ISA_GFNI_SET
;
646 opts
->x_ix86_isa_flags_explicit
|= OPTION_MASK_ISA_GFNI_SET
;
650 opts
->x_ix86_isa_flags
&= ~OPTION_MASK_ISA_GFNI_UNSET
;
651 opts
->x_ix86_isa_flags_explicit
|= OPTION_MASK_ISA_GFNI_UNSET
;
658 opts
->x_ix86_isa_flags
|= OPTION_MASK_ISA_SHSTK_SET
;
659 opts
->x_ix86_isa_flags_explicit
|= OPTION_MASK_ISA_SHSTK_SET
;
663 opts
->x_ix86_isa_flags
&= ~OPTION_MASK_ISA_SHSTK_UNSET
;
664 opts
->x_ix86_isa_flags_explicit
|= OPTION_MASK_ISA_SHSTK_UNSET
;
671 opts
->x_ix86_isa_flags2
|= OPTION_MASK_ISA2_VAES_SET
;
672 opts
->x_ix86_isa_flags2_explicit
|= OPTION_MASK_ISA2_VAES_SET
;
673 opts
->x_ix86_isa_flags
|= OPTION_MASK_ISA_AVX_SET
;
674 opts
->x_ix86_isa_flags_explicit
|= OPTION_MASK_ISA_AVX_SET
;
678 opts
->x_ix86_isa_flags2
&= ~OPTION_MASK_ISA2_VAES_UNSET
;
679 opts
->x_ix86_isa_flags2_explicit
|= OPTION_MASK_ISA2_VAES_UNSET
;
683 case OPT_mvpclmulqdq
:
686 opts
->x_ix86_isa_flags
|= OPTION_MASK_ISA_VPCLMULQDQ_SET
;
687 opts
->x_ix86_isa_flags_explicit
|= OPTION_MASK_ISA_VPCLMULQDQ_SET
;
691 opts
->x_ix86_isa_flags
&= ~OPTION_MASK_ISA_VPCLMULQDQ_UNSET
;
692 opts
->x_ix86_isa_flags_explicit
|= OPTION_MASK_ISA_VPCLMULQDQ_UNSET
;
699 opts
->x_ix86_isa_flags
|= OPTION_MASK_ISA_MOVDIRI_SET
;
700 opts
->x_ix86_isa_flags_explicit
|= OPTION_MASK_ISA_MOVDIRI_SET
;
704 opts
->x_ix86_isa_flags
&= ~OPTION_MASK_ISA_MOVDIRI_UNSET
;
705 opts
->x_ix86_isa_flags_explicit
|= OPTION_MASK_ISA_MOVDIRI_UNSET
;
712 opts
->x_ix86_isa_flags2
|= OPTION_MASK_ISA2_MOVDIR64B_SET
;
713 opts
->x_ix86_isa_flags2_explicit
|= OPTION_MASK_ISA2_MOVDIR64B_SET
;
717 opts
->x_ix86_isa_flags2
&= ~OPTION_MASK_ISA2_MOVDIR64B_UNSET
;
718 opts
->x_ix86_isa_flags2_explicit
|= OPTION_MASK_ISA2_MOVDIR64B_UNSET
;
725 opts
->x_ix86_isa_flags2
|= OPTION_MASK_ISA2_CLDEMOTE_SET
;
726 opts
->x_ix86_isa_flags2_explicit
|= OPTION_MASK_ISA2_CLDEMOTE_SET
;
730 opts
->x_ix86_isa_flags2
&= ~OPTION_MASK_ISA2_CLDEMOTE_UNSET
;
731 opts
->x_ix86_isa_flags2_explicit
|= OPTION_MASK_ISA2_CLDEMOTE_UNSET
;
738 opts
->x_ix86_isa_flags2
|= OPTION_MASK_ISA2_WAITPKG_SET
;
739 opts
->x_ix86_isa_flags2_explicit
|= OPTION_MASK_ISA2_WAITPKG_SET
;
743 opts
->x_ix86_isa_flags2
&= ~OPTION_MASK_ISA2_WAITPKG_UNSET
;
744 opts
->x_ix86_isa_flags2_explicit
|= OPTION_MASK_ISA2_WAITPKG_UNSET
;
751 opts
->x_ix86_isa_flags2
|= OPTION_MASK_ISA2_ENQCMD_SET
;
752 opts
->x_ix86_isa_flags2_explicit
|= OPTION_MASK_ISA2_ENQCMD_SET
;
756 opts
->x_ix86_isa_flags2
&= ~OPTION_MASK_ISA2_ENQCMD_UNSET
;
757 opts
->x_ix86_isa_flags2_explicit
|= OPTION_MASK_ISA2_ENQCMD_UNSET
;
764 opts
->x_ix86_isa_flags2
|= OPTION_MASK_ISA2_KL_SET
;
765 opts
->x_ix86_isa_flags2_explicit
|= OPTION_MASK_ISA2_KL_SET
;
767 /* The Keylocker instructions need XMM registers from SSE2. */
768 opts
->x_ix86_isa_flags
|= OPTION_MASK_ISA_SSE2_SET
;
769 opts
->x_ix86_isa_flags_explicit
|= OPTION_MASK_ISA_SSE2_SET
;
773 opts
->x_ix86_isa_flags2
&= ~OPTION_MASK_ISA2_KL_UNSET
;
774 opts
->x_ix86_isa_flags2_explicit
|= OPTION_MASK_ISA2_KL_UNSET
;
781 opts
->x_ix86_isa_flags2
|= OPTION_MASK_ISA2_WIDEKL_SET
;
782 opts
->x_ix86_isa_flags2_explicit
|= OPTION_MASK_ISA2_WIDEKL_SET
;
784 /* The Widekl instructions need XMM registers from SSE2. */
785 opts
->x_ix86_isa_flags
|= OPTION_MASK_ISA_SSE2_SET
;
786 opts
->x_ix86_isa_flags_explicit
|= OPTION_MASK_ISA_SSE2_SET
;
790 opts
->x_ix86_isa_flags2
&= ~OPTION_MASK_ISA2_WIDEKL_UNSET
;
791 opts
->x_ix86_isa_flags2_explicit
|= OPTION_MASK_ISA2_WIDEKL_UNSET
;
798 opts
->x_ix86_isa_flags2
|= OPTION_MASK_ISA2_SERIALIZE_SET
;
799 opts
->x_ix86_isa_flags2_explicit
|= OPTION_MASK_ISA2_SERIALIZE_SET
;
803 opts
->x_ix86_isa_flags2
&= ~OPTION_MASK_ISA2_SERIALIZE_UNSET
;
804 opts
->x_ix86_isa_flags2_explicit
|= OPTION_MASK_ISA2_SERIALIZE_UNSET
;
811 opts
->x_ix86_isa_flags2
|= OPTION_MASK_ISA2_UINTR_SET
;
812 opts
->x_ix86_isa_flags2_explicit
|= OPTION_MASK_ISA2_UINTR_SET
;
816 opts
->x_ix86_isa_flags2
&= ~OPTION_MASK_ISA2_UINTR_UNSET
;
817 opts
->x_ix86_isa_flags2_explicit
|= OPTION_MASK_ISA2_UINTR_UNSET
;
824 opts
->x_ix86_isa_flags2
|= OPTION_MASK_ISA2_HRESET_SET
;
825 opts
->x_ix86_isa_flags2_explicit
|= OPTION_MASK_ISA2_HRESET_SET
;
829 opts
->x_ix86_isa_flags2
&= ~OPTION_MASK_ISA2_HRESET_UNSET
;
830 opts
->x_ix86_isa_flags2_explicit
|= OPTION_MASK_ISA2_HRESET_UNSET
;
834 case OPT_mavx512vbmi2
:
837 opts
->x_ix86_isa_flags
|= OPTION_MASK_ISA_AVX512VBMI2_SET
;
838 opts
->x_ix86_isa_flags_explicit
|= OPTION_MASK_ISA_AVX512VBMI2_SET
;
842 opts
->x_ix86_isa_flags
&= ~OPTION_MASK_ISA_AVX512VBMI2_UNSET
;
843 opts
->x_ix86_isa_flags_explicit
|= OPTION_MASK_ISA_AVX512VBMI2_UNSET
;
844 opts
->x_ix86_no_avx512_explicit
= 1;
848 case OPT_mavx512fp16
:
851 opts
->x_ix86_isa_flags2
|= OPTION_MASK_ISA2_AVX512FP16_SET
;
852 opts
->x_ix86_isa_flags2_explicit
|= OPTION_MASK_ISA2_AVX512FP16_SET
;
853 opts
->x_ix86_isa_flags
|= OPTION_MASK_ISA_AVX512FP16_SET
;
854 opts
->x_ix86_isa_flags_explicit
|= OPTION_MASK_ISA_AVX512FP16_SET
;
858 opts
->x_ix86_isa_flags2
&= ~OPTION_MASK_ISA2_AVX512FP16_UNSET
;
859 opts
->x_ix86_isa_flags2_explicit
|= OPTION_MASK_ISA2_AVX512FP16_UNSET
;
860 opts
->x_ix86_no_avx512_explicit
= 1;
864 case OPT_mavx512vnni
:
867 opts
->x_ix86_isa_flags
|= OPTION_MASK_ISA_AVX512VNNI_SET
;
868 opts
->x_ix86_isa_flags_explicit
|= OPTION_MASK_ISA_AVX512VNNI_SET
;
872 opts
->x_ix86_isa_flags
&= ~OPTION_MASK_ISA_AVX512VNNI_UNSET
;
873 opts
->x_ix86_isa_flags_explicit
|= OPTION_MASK_ISA_AVX512VNNI_UNSET
;
874 opts
->x_ix86_no_avx512_explicit
= 1;
878 case OPT_mavx512vpopcntdq
:
881 opts
->x_ix86_isa_flags
|= OPTION_MASK_ISA_AVX512VPOPCNTDQ_SET
;
882 opts
->x_ix86_isa_flags_explicit
883 |= OPTION_MASK_ISA_AVX512VPOPCNTDQ_SET
;
887 opts
->x_ix86_isa_flags
&= ~OPTION_MASK_ISA_AVX512VPOPCNTDQ_UNSET
;
888 opts
->x_ix86_isa_flags_explicit
889 |= OPTION_MASK_ISA_AVX512VPOPCNTDQ_UNSET
;
890 opts
->x_ix86_no_avx512_explicit
= 1;
894 case OPT_mavx512bitalg
:
897 opts
->x_ix86_isa_flags
|= OPTION_MASK_ISA_AVX512BITALG_SET
;
898 opts
->x_ix86_isa_flags_explicit
|= OPTION_MASK_ISA_AVX512BITALG_SET
;
902 opts
->x_ix86_isa_flags
&= ~OPTION_MASK_ISA_AVX512BITALG_UNSET
;
903 opts
->x_ix86_isa_flags_explicit
904 |= OPTION_MASK_ISA_AVX512BITALG_UNSET
;
905 opts
->x_ix86_no_avx512_explicit
= 1;
909 case OPT_mavx512bf16
:
912 opts
->x_ix86_isa_flags2
|= OPTION_MASK_ISA2_AVX512BF16_SET
;
913 opts
->x_ix86_isa_flags2_explicit
|= OPTION_MASK_ISA2_AVX512BF16_SET
;
914 opts
->x_ix86_isa_flags
|= OPTION_MASK_ISA_AVX512BW_SET
;
915 opts
->x_ix86_isa_flags_explicit
|= OPTION_MASK_ISA_AVX512BW_SET
;
919 opts
->x_ix86_isa_flags2
&= ~OPTION_MASK_ISA2_AVX512BF16_UNSET
;
920 opts
->x_ix86_isa_flags2_explicit
|= OPTION_MASK_ISA2_AVX512BF16_UNSET
;
921 opts
->x_ix86_no_avx512_explicit
= 1;
928 opts
->x_ix86_isa_flags2
|= OPTION_MASK_ISA2_AVXVNNI_SET
;
929 opts
->x_ix86_isa_flags2_explicit
|= OPTION_MASK_ISA2_AVXVNNI_SET
;
930 opts
->x_ix86_isa_flags
|= OPTION_MASK_ISA_AVX2_SET
;
931 opts
->x_ix86_isa_flags_explicit
|= OPTION_MASK_ISA_AVX2_SET
;
935 opts
->x_ix86_isa_flags2
&= ~OPTION_MASK_ISA2_AVXVNNI_UNSET
;
936 opts
->x_ix86_isa_flags2_explicit
|= OPTION_MASK_ISA2_AVXVNNI_UNSET
;
943 opts
->x_ix86_isa_flags2
|= OPTION_MASK_ISA2_SGX_SET
;
944 opts
->x_ix86_isa_flags2_explicit
|= OPTION_MASK_ISA2_SGX_SET
;
948 opts
->x_ix86_isa_flags2
&= ~OPTION_MASK_ISA2_SGX_UNSET
;
949 opts
->x_ix86_isa_flags2_explicit
|= OPTION_MASK_ISA2_SGX_UNSET
;
956 opts
->x_ix86_isa_flags2
|= OPTION_MASK_ISA2_PCONFIG_SET
;
957 opts
->x_ix86_isa_flags2_explicit
|= OPTION_MASK_ISA2_PCONFIG_SET
;
961 opts
->x_ix86_isa_flags2
&= ~OPTION_MASK_ISA2_PCONFIG_UNSET
;
962 opts
->x_ix86_isa_flags2_explicit
|= OPTION_MASK_ISA2_PCONFIG_UNSET
;
969 opts
->x_ix86_isa_flags2
|= OPTION_MASK_ISA2_WBNOINVD_SET
;
970 opts
->x_ix86_isa_flags2_explicit
|= OPTION_MASK_ISA2_WBNOINVD_SET
;
974 opts
->x_ix86_isa_flags2
&= ~OPTION_MASK_ISA2_WBNOINVD_UNSET
;
975 opts
->x_ix86_isa_flags2_explicit
|= OPTION_MASK_ISA2_WBNOINVD_UNSET
;
982 opts
->x_ix86_isa_flags
|= OPTION_MASK_ISA_AVX512DQ_SET
;
983 opts
->x_ix86_isa_flags_explicit
|= OPTION_MASK_ISA_AVX512DQ_SET
;
987 opts
->x_ix86_isa_flags
&= ~OPTION_MASK_ISA_AVX512DQ_UNSET
;
988 opts
->x_ix86_isa_flags_explicit
|= OPTION_MASK_ISA_AVX512DQ_UNSET
;
989 opts
->x_ix86_no_avx512_explicit
= 1;
996 opts
->x_ix86_isa_flags
|= OPTION_MASK_ISA_AVX512BW_SET
;
997 opts
->x_ix86_isa_flags_explicit
|= OPTION_MASK_ISA_AVX512BW_SET
;
1001 opts
->x_ix86_isa_flags
&= ~OPTION_MASK_ISA_AVX512BW_UNSET
;
1002 opts
->x_ix86_isa_flags_explicit
|= OPTION_MASK_ISA_AVX512BW_UNSET
;
1003 opts
->x_ix86_isa_flags2
&= ~OPTION_MASK_ISA2_AVX512BW_UNSET
;
1004 opts
->x_ix86_isa_flags2_explicit
|= OPTION_MASK_ISA2_AVX512BW_UNSET
;
1005 opts
->x_ix86_no_avx512_explicit
= 1;
1012 opts
->x_ix86_isa_flags
|= OPTION_MASK_ISA_AVX512VL_SET
;
1013 opts
->x_ix86_isa_flags_explicit
|= OPTION_MASK_ISA_AVX512VL_SET
;
1017 opts
->x_ix86_isa_flags
&= ~OPTION_MASK_ISA_AVX512VL_UNSET
;
1018 opts
->x_ix86_isa_flags_explicit
|= OPTION_MASK_ISA_AVX512VL_UNSET
;
1019 opts
->x_ix86_no_avx512_explicit
= 1;
1023 case OPT_mavx512ifma
:
1026 opts
->x_ix86_isa_flags
|= OPTION_MASK_ISA_AVX512IFMA_SET
;
1027 opts
->x_ix86_isa_flags_explicit
|= OPTION_MASK_ISA_AVX512IFMA_SET
;
1031 opts
->x_ix86_isa_flags
&= ~OPTION_MASK_ISA_AVX512IFMA_UNSET
;
1032 opts
->x_ix86_isa_flags_explicit
|= OPTION_MASK_ISA_AVX512IFMA_UNSET
;
1033 opts
->x_ix86_no_avx512_explicit
= 1;
1037 case OPT_mavx512vbmi
:
1040 opts
->x_ix86_isa_flags
|= OPTION_MASK_ISA_AVX512VBMI_SET
;
1041 opts
->x_ix86_isa_flags_explicit
|= OPTION_MASK_ISA_AVX512VBMI_SET
;
1045 opts
->x_ix86_isa_flags
&= ~OPTION_MASK_ISA_AVX512VBMI_UNSET
;
1046 opts
->x_ix86_isa_flags_explicit
|= OPTION_MASK_ISA_AVX512VBMI_UNSET
;
1047 opts
->x_ix86_no_avx512_explicit
= 1;
1051 case OPT_mavx512vp2intersect
:
1054 opts
->x_ix86_isa_flags2
|= OPTION_MASK_ISA2_AVX512VP2INTERSECT_SET
;
1055 opts
->x_ix86_isa_flags2_explicit
|=
1056 OPTION_MASK_ISA2_AVX512VP2INTERSECT_SET
;
1057 opts
->x_ix86_isa_flags
|= OPTION_MASK_ISA_AVX512DQ_SET
;
1058 opts
->x_ix86_isa_flags_explicit
|= OPTION_MASK_ISA_AVX512DQ_SET
;
1062 opts
->x_ix86_isa_flags2
&= ~OPTION_MASK_ISA2_AVX512VP2INTERSECT_UNSET
;
1063 opts
->x_ix86_isa_flags2_explicit
|=
1064 OPTION_MASK_ISA2_AVX512VP2INTERSECT_UNSET
;
1071 opts
->x_ix86_isa_flags2
|= OPTION_MASK_ISA2_TSXLDTRK_SET
;
1072 opts
->x_ix86_isa_flags2_explicit
|= OPTION_MASK_ISA2_TSXLDTRK_SET
;
1076 opts
->x_ix86_isa_flags2
&= ~OPTION_MASK_ISA2_TSXLDTRK_UNSET
;
1077 opts
->x_ix86_isa_flags2_explicit
|= OPTION_MASK_ISA2_TSXLDTRK_UNSET
;
1084 opts
->x_ix86_isa_flags2
|= OPTION_MASK_ISA2_AMX_TILE_SET
;
1085 opts
->x_ix86_isa_flags2_explicit
|= OPTION_MASK_ISA2_AMX_TILE_SET
;
1086 opts
->x_ix86_isa_flags
|= OPTION_MASK_ISA_XSAVE_SET
;
1087 opts
->x_ix86_isa_flags_explicit
|= OPTION_MASK_ISA_XSAVE_SET
;
1091 opts
->x_ix86_isa_flags2
&= ~OPTION_MASK_ISA2_AMX_TILE_UNSET
;
1092 opts
->x_ix86_isa_flags2_explicit
|= OPTION_MASK_ISA2_AMX_TILE_UNSET
;
1099 opts
->x_ix86_isa_flags2
|= OPTION_MASK_ISA2_AMX_INT8_SET
;
1100 opts
->x_ix86_isa_flags2_explicit
|= OPTION_MASK_ISA2_AMX_INT8_SET
;
1104 opts
->x_ix86_isa_flags2
&= ~OPTION_MASK_ISA2_AMX_INT8_UNSET
;
1105 opts
->x_ix86_isa_flags2_explicit
|= OPTION_MASK_ISA2_AMX_INT8_UNSET
;
1112 opts
->x_ix86_isa_flags2
|= OPTION_MASK_ISA2_AMX_BF16_SET
;
1113 opts
->x_ix86_isa_flags2_explicit
|= OPTION_MASK_ISA2_AMX_BF16_SET
;
1117 opts
->x_ix86_isa_flags2
&= ~OPTION_MASK_ISA2_AMX_BF16_UNSET
;
1118 opts
->x_ix86_isa_flags2_explicit
|= OPTION_MASK_ISA2_AMX_BF16_UNSET
;
1125 opts
->x_ix86_isa_flags2
|= OPTION_MASK_ISA2_AVXIFMA_SET
;
1126 opts
->x_ix86_isa_flags2_explicit
|= OPTION_MASK_ISA2_AVXIFMA_SET
;
1127 opts
->x_ix86_isa_flags
|= OPTION_MASK_ISA_AVX2_SET
;
1128 opts
->x_ix86_isa_flags_explicit
|= OPTION_MASK_ISA_AVX2_SET
;
1132 opts
->x_ix86_isa_flags2
&= ~OPTION_MASK_ISA2_AVXIFMA_UNSET
;
1133 opts
->x_ix86_isa_flags2_explicit
|= OPTION_MASK_ISA2_AVXIFMA_UNSET
;
1137 case OPT_mavxvnniint8
:
1140 opts
->x_ix86_isa_flags2
|= OPTION_MASK_ISA2_AVXVNNIINT8_SET
;
1141 opts
->x_ix86_isa_flags2_explicit
|=
1142 OPTION_MASK_ISA2_AVXVNNIINT8_SET
;
1143 opts
->x_ix86_isa_flags
|= OPTION_MASK_ISA_AVX2_SET
;
1144 opts
->x_ix86_isa_flags_explicit
|= OPTION_MASK_ISA_AVX2_SET
;
1148 opts
->x_ix86_isa_flags2
&=
1149 ~OPTION_MASK_ISA2_AVXVNNIINT8_UNSET
;
1150 opts
->x_ix86_isa_flags2_explicit
|=
1151 OPTION_MASK_ISA2_AVXVNNIINT8_UNSET
;
1155 case OPT_mavxneconvert
:
1158 opts
->x_ix86_isa_flags2
|= OPTION_MASK_ISA2_AVXNECONVERT_SET
;
1159 opts
->x_ix86_isa_flags2_explicit
|= OPTION_MASK_ISA2_AVXNECONVERT_SET
;
1160 opts
->x_ix86_isa_flags
|= OPTION_MASK_ISA_AVX2_SET
;
1161 opts
->x_ix86_isa_flags_explicit
|= OPTION_MASK_ISA_AVX2_SET
;
1165 opts
->x_ix86_isa_flags2
&= ~OPTION_MASK_ISA2_AVXNECONVERT_UNSET
;
1166 opts
->x_ix86_isa_flags2_explicit
1167 |= OPTION_MASK_ISA2_AVXNECONVERT_UNSET
;
1171 case OPT_mcmpccxadd
:
1174 opts
->x_ix86_isa_flags2
|= OPTION_MASK_ISA2_CMPCCXADD_SET
;
1175 opts
->x_ix86_isa_flags2_explicit
|= OPTION_MASK_ISA2_CMPCCXADD_SET
;
1179 opts
->x_ix86_isa_flags2
&= ~OPTION_MASK_ISA2_CMPCCXADD_UNSET
;
1180 opts
->x_ix86_isa_flags2_explicit
|= OPTION_MASK_ISA2_CMPCCXADD_UNSET
;
1187 opts
->x_ix86_isa_flags2
|= OPTION_MASK_ISA2_AMX_FP16_SET
;
1188 opts
->x_ix86_isa_flags2_explicit
|= OPTION_MASK_ISA2_AMX_FP16_SET
;
1192 opts
->x_ix86_isa_flags2
&= ~OPTION_MASK_ISA2_AMX_FP16_UNSET
;
1193 opts
->x_ix86_isa_flags2_explicit
|= OPTION_MASK_ISA2_AMX_FP16_UNSET
;
1197 case OPT_mprefetchi
:
1200 opts
->x_ix86_isa_flags2
|= OPTION_MASK_ISA2_PREFETCHI_SET
;
1201 opts
->x_ix86_isa_flags2_explicit
|= OPTION_MASK_ISA2_PREFETCHI_SET
;
1205 opts
->x_ix86_isa_flags2
&= ~OPTION_MASK_ISA2_PREFETCHI_UNSET
;
1206 opts
->x_ix86_isa_flags2_explicit
|= OPTION_MASK_ISA2_PREFETCHI_UNSET
;
1213 opts
->x_ix86_isa_flags2
|= OPTION_MASK_ISA2_RAOINT_SET
;
1214 opts
->x_ix86_isa_flags2_explicit
|= OPTION_MASK_ISA2_RAOINT_SET
;
1218 opts
->x_ix86_isa_flags2
&= ~OPTION_MASK_ISA2_RAOINT_UNSET
;
1219 opts
->x_ix86_isa_flags2_explicit
|= OPTION_MASK_ISA2_RAOINT_UNSET
;
1223 case OPT_mamx_complex
:
1226 opts
->x_ix86_isa_flags2
|= OPTION_MASK_ISA2_AMX_COMPLEX_SET
;
1227 opts
->x_ix86_isa_flags2_explicit
|= OPTION_MASK_ISA2_AMX_COMPLEX_SET
;
1231 opts
->x_ix86_isa_flags2
&= ~OPTION_MASK_ISA2_AMX_COMPLEX_UNSET
;
1232 opts
->x_ix86_isa_flags2_explicit
|= OPTION_MASK_ISA2_AMX_COMPLEX_UNSET
;
1236 case OPT_mavxvnniint16
:
1239 opts
->x_ix86_isa_flags2
|= OPTION_MASK_ISA2_AVXVNNIINT16_SET
;
1240 opts
->x_ix86_isa_flags2_explicit
|=
1241 OPTION_MASK_ISA2_AVXVNNIINT16_SET
;
1242 opts
->x_ix86_isa_flags
|= OPTION_MASK_ISA_AVX2_SET
;
1243 opts
->x_ix86_isa_flags_explicit
|= OPTION_MASK_ISA_AVX2_SET
;
1247 opts
->x_ix86_isa_flags2
&=
1248 ~OPTION_MASK_ISA2_AVXVNNIINT16_UNSET
;
1249 opts
->x_ix86_isa_flags2_explicit
|=
1250 OPTION_MASK_ISA2_AVXVNNIINT16_UNSET
;
1257 opts
->x_ix86_isa_flags2
|= OPTION_MASK_ISA2_SM3_SET
;
1258 opts
->x_ix86_isa_flags2_explicit
|= OPTION_MASK_ISA2_SM3_SET
;
1259 opts
->x_ix86_isa_flags
|= OPTION_MASK_ISA_AVX_SET
;
1260 opts
->x_ix86_isa_flags_explicit
|= OPTION_MASK_ISA_AVX_SET
;
1264 opts
->x_ix86_isa_flags2
&= ~OPTION_MASK_ISA2_SM3_UNSET
;
1265 opts
->x_ix86_isa_flags2_explicit
|= OPTION_MASK_ISA2_SM3_UNSET
;
1272 opts
->x_ix86_isa_flags2
|= OPTION_MASK_ISA2_SHA512_SET
;
1273 opts
->x_ix86_isa_flags2_explicit
|= OPTION_MASK_ISA2_SHA512_SET
;
1274 opts
->x_ix86_isa_flags
|= OPTION_MASK_ISA_AVX_SET
;
1275 opts
->x_ix86_isa_flags_explicit
|= OPTION_MASK_ISA_AVX_SET
;
1279 opts
->x_ix86_isa_flags2
&= ~OPTION_MASK_ISA2_SHA512_UNSET
;
1280 opts
->x_ix86_isa_flags2_explicit
|= OPTION_MASK_ISA2_SHA512_UNSET
;
1287 opts
->x_ix86_isa_flags2
|= OPTION_MASK_ISA2_SM4_SET
;
1288 opts
->x_ix86_isa_flags2_explicit
|= OPTION_MASK_ISA2_SM4_SET
;
1289 opts
->x_ix86_isa_flags
|= OPTION_MASK_ISA_AVX_SET
;
1290 opts
->x_ix86_isa_flags_explicit
|= OPTION_MASK_ISA_AVX_SET
;
1294 opts
->x_ix86_isa_flags2
&= ~OPTION_MASK_ISA2_SM4_UNSET
;
1295 opts
->x_ix86_isa_flags2_explicit
|= OPTION_MASK_ISA2_SM4_UNSET
;
1302 opts
->x_ix86_isa_flags2
|= OPTION_MASK_ISA2_APX_F_SET
;
1303 opts
->x_ix86_isa_flags2_explicit
|= OPTION_MASK_ISA2_APX_F_SET
;
1304 opts
->x_ix86_apx_features
= apx_all
;
1308 opts
->x_ix86_isa_flags2
&= ~OPTION_MASK_ISA2_APX_F_UNSET
;
1309 opts
->x_ix86_isa_flags2_explicit
|= OPTION_MASK_ISA2_APX_F_UNSET
;
1310 opts
->x_ix86_apx_features
= apx_none
;
1317 opts
->x_ix86_isa_flags2
|= OPTION_MASK_ISA2_EVEX512_SET
;
1318 opts
->x_ix86_isa_flags2_explicit
|= OPTION_MASK_ISA2_EVEX512_SET
;
1322 opts
->x_ix86_isa_flags2
&= ~OPTION_MASK_ISA2_EVEX512_UNSET
;
1323 opts
->x_ix86_isa_flags2_explicit
|= OPTION_MASK_ISA2_EVEX512_UNSET
;
1324 opts
->x_ix86_no_avx512_explicit
= 1;
1331 opts
->x_ix86_isa_flags2
|= OPTION_MASK_ISA2_USER_MSR_SET
;
1332 opts
->x_ix86_isa_flags2_explicit
|= OPTION_MASK_ISA2_USER_MSR_SET
;
1336 opts
->x_ix86_isa_flags2
&= ~OPTION_MASK_ISA2_USER_MSR_UNSET
;
1337 opts
->x_ix86_isa_flags2_explicit
|= OPTION_MASK_ISA2_USER_MSR_UNSET
;
1341 case OPT_mavx10_1_256
:
1344 opts
->x_ix86_isa_flags2
|= OPTION_MASK_ISA2_AVX10_1_256_SET
;
1345 opts
->x_ix86_isa_flags2_explicit
|= OPTION_MASK_ISA2_AVX10_1_256_SET
;
1346 opts
->x_ix86_isa_flags
|= OPTION_MASK_ISA_AVX2_SET
;
1347 opts
->x_ix86_isa_flags_explicit
|= OPTION_MASK_ISA_AVX2_SET
;
1351 opts
->x_ix86_isa_flags2
&= ~OPTION_MASK_ISA2_AVX10_1_256_UNSET
;
1352 opts
->x_ix86_isa_flags2_explicit
|= OPTION_MASK_ISA2_AVX10_1_256_UNSET
;
1353 opts
->x_ix86_no_avx10_1_explicit
= 1;
1357 case OPT_mavx10_1_512
:
1360 opts
->x_ix86_isa_flags2
|= OPTION_MASK_ISA2_AVX10_1_512_SET
;
1361 opts
->x_ix86_isa_flags2_explicit
|= OPTION_MASK_ISA2_AVX10_1_512_SET
;
1362 opts
->x_ix86_isa_flags
|= OPTION_MASK_ISA_AVX2_SET
;
1363 opts
->x_ix86_isa_flags_explicit
|= OPTION_MASK_ISA_AVX2_SET
;
1367 opts
->x_ix86_isa_flags2
&= ~OPTION_MASK_ISA2_AVX10_1_512_UNSET
;
1368 opts
->x_ix86_isa_flags2_explicit
|= OPTION_MASK_ISA2_AVX10_1_512_UNSET
;
1369 opts
->x_ix86_no_avx10_1_explicit
= 1;
1376 opts
->x_ix86_isa_flags
|= OPTION_MASK_ISA_FMA_SET
;
1377 opts
->x_ix86_isa_flags_explicit
|= OPTION_MASK_ISA_FMA_SET
;
1381 opts
->x_ix86_isa_flags
&= ~OPTION_MASK_ISA_FMA_UNSET
;
1382 opts
->x_ix86_isa_flags_explicit
|= OPTION_MASK_ISA_FMA_UNSET
;
1389 opts
->x_ix86_isa_flags
|= OPTION_MASK_ISA_RTM_SET
;
1390 opts
->x_ix86_isa_flags_explicit
|= OPTION_MASK_ISA_RTM_SET
;
1394 opts
->x_ix86_isa_flags
&= ~OPTION_MASK_ISA_RTM_UNSET
;
1395 opts
->x_ix86_isa_flags_explicit
|= OPTION_MASK_ISA_RTM_UNSET
;
1400 opts
->x_ix86_isa_flags
|= OPTION_MASK_ISA_SSE4_SET
;
1401 opts
->x_ix86_isa_flags_explicit
|= OPTION_MASK_ISA_SSE4_SET
;
1405 opts
->x_ix86_isa_flags
&= ~OPTION_MASK_ISA_SSE4_UNSET
;
1406 opts
->x_ix86_isa_flags_explicit
|= OPTION_MASK_ISA_SSE4_UNSET
;
1407 opts
->x_ix86_isa_flags2
&= ~OPTION_MASK_ISA2_SSE4_UNSET
;
1408 opts
->x_ix86_isa_flags2_explicit
|= OPTION_MASK_ISA2_SSE4_UNSET
;
1414 opts
->x_ix86_isa_flags
|= OPTION_MASK_ISA_SSE4A_SET
;
1415 opts
->x_ix86_isa_flags_explicit
|= OPTION_MASK_ISA_SSE4A_SET
;
1419 opts
->x_ix86_isa_flags
&= ~OPTION_MASK_ISA_SSE4A_UNSET
;
1420 opts
->x_ix86_isa_flags_explicit
|= OPTION_MASK_ISA_SSE4A_UNSET
;
1427 opts
->x_ix86_isa_flags
|= OPTION_MASK_ISA_FMA4_SET
;
1428 opts
->x_ix86_isa_flags_explicit
|= OPTION_MASK_ISA_FMA4_SET
;
1432 opts
->x_ix86_isa_flags
&= ~OPTION_MASK_ISA_FMA4_UNSET
;
1433 opts
->x_ix86_isa_flags_explicit
|= OPTION_MASK_ISA_FMA4_UNSET
;
1440 opts
->x_ix86_isa_flags
|= OPTION_MASK_ISA_XOP_SET
;
1441 opts
->x_ix86_isa_flags_explicit
|= OPTION_MASK_ISA_XOP_SET
;
1445 opts
->x_ix86_isa_flags
&= ~OPTION_MASK_ISA_XOP_UNSET
;
1446 opts
->x_ix86_isa_flags_explicit
|= OPTION_MASK_ISA_XOP_UNSET
;
1453 opts
->x_ix86_isa_flags
|= OPTION_MASK_ISA_LWP_SET
;
1454 opts
->x_ix86_isa_flags_explicit
|= OPTION_MASK_ISA_LWP_SET
;
1458 opts
->x_ix86_isa_flags
&= ~OPTION_MASK_ISA_LWP_UNSET
;
1459 opts
->x_ix86_isa_flags_explicit
|= OPTION_MASK_ISA_LWP_UNSET
;
1466 opts
->x_ix86_isa_flags
|= OPTION_MASK_ISA_ABM_SET
;
1467 opts
->x_ix86_isa_flags_explicit
|= OPTION_MASK_ISA_ABM_SET
;
1471 opts
->x_ix86_isa_flags
&= ~OPTION_MASK_ISA_ABM_UNSET
;
1472 opts
->x_ix86_isa_flags_explicit
|= OPTION_MASK_ISA_ABM_UNSET
;
1479 opts
->x_ix86_isa_flags
|= OPTION_MASK_ISA_BMI_SET
;
1480 opts
->x_ix86_isa_flags_explicit
|= OPTION_MASK_ISA_BMI_SET
;
1484 opts
->x_ix86_isa_flags
&= ~OPTION_MASK_ISA_BMI_UNSET
;
1485 opts
->x_ix86_isa_flags_explicit
|= OPTION_MASK_ISA_BMI_UNSET
;
1492 opts
->x_ix86_isa_flags
|= OPTION_MASK_ISA_BMI2_SET
;
1493 opts
->x_ix86_isa_flags_explicit
|= OPTION_MASK_ISA_BMI2_SET
;
1497 opts
->x_ix86_isa_flags
&= ~OPTION_MASK_ISA_BMI2_UNSET
;
1498 opts
->x_ix86_isa_flags_explicit
|= OPTION_MASK_ISA_BMI2_UNSET
;
1505 opts
->x_ix86_isa_flags
|= OPTION_MASK_ISA_LZCNT_SET
;
1506 opts
->x_ix86_isa_flags_explicit
|= OPTION_MASK_ISA_LZCNT_SET
;
1510 opts
->x_ix86_isa_flags
&= ~OPTION_MASK_ISA_LZCNT_UNSET
;
1511 opts
->x_ix86_isa_flags_explicit
|= OPTION_MASK_ISA_LZCNT_UNSET
;
1518 opts
->x_ix86_isa_flags
|= OPTION_MASK_ISA_TBM_SET
;
1519 opts
->x_ix86_isa_flags_explicit
|= OPTION_MASK_ISA_TBM_SET
;
1523 opts
->x_ix86_isa_flags
&= ~OPTION_MASK_ISA_TBM_UNSET
;
1524 opts
->x_ix86_isa_flags_explicit
|= OPTION_MASK_ISA_TBM_UNSET
;
1531 opts
->x_ix86_isa_flags
|= OPTION_MASK_ISA_POPCNT_SET
;
1532 opts
->x_ix86_isa_flags_explicit
|= OPTION_MASK_ISA_POPCNT_SET
;
1536 opts
->x_ix86_isa_flags
&= ~OPTION_MASK_ISA_POPCNT_UNSET
;
1537 opts
->x_ix86_isa_flags_explicit
|= OPTION_MASK_ISA_POPCNT_UNSET
;
1544 opts
->x_ix86_isa_flags
|= OPTION_MASK_ISA_SAHF_SET
;
1545 opts
->x_ix86_isa_flags_explicit
|= OPTION_MASK_ISA_SAHF_SET
;
1549 opts
->x_ix86_isa_flags
&= ~OPTION_MASK_ISA_SAHF_UNSET
;
1550 opts
->x_ix86_isa_flags_explicit
|= OPTION_MASK_ISA_SAHF_UNSET
;
1557 opts
->x_ix86_isa_flags2
|= OPTION_MASK_ISA2_CX16_SET
;
1558 opts
->x_ix86_isa_flags2_explicit
|= OPTION_MASK_ISA2_CX16_SET
;
1562 opts
->x_ix86_isa_flags2
&= ~OPTION_MASK_ISA2_CX16_UNSET
;
1563 opts
->x_ix86_isa_flags2_explicit
|= OPTION_MASK_ISA2_CX16_UNSET
;
1570 opts
->x_ix86_isa_flags2
|= OPTION_MASK_ISA2_MOVBE_SET
;
1571 opts
->x_ix86_isa_flags2_explicit
|= OPTION_MASK_ISA2_MOVBE_SET
;
1575 opts
->x_ix86_isa_flags2
&= ~OPTION_MASK_ISA2_MOVBE_UNSET
;
1576 opts
->x_ix86_isa_flags2_explicit
|= OPTION_MASK_ISA2_MOVBE_UNSET
;
1583 opts
->x_ix86_isa_flags
|= OPTION_MASK_ISA_CRC32_SET
;
1584 opts
->x_ix86_isa_flags_explicit
|= OPTION_MASK_ISA_CRC32_SET
;
1588 opts
->x_ix86_isa_flags
&= ~OPTION_MASK_ISA_CRC32_UNSET
;
1589 opts
->x_ix86_isa_flags_explicit
|= OPTION_MASK_ISA_CRC32_UNSET
;
1596 opts
->x_ix86_isa_flags
|= OPTION_MASK_ISA_AES_SET
;
1597 opts
->x_ix86_isa_flags_explicit
|= OPTION_MASK_ISA_AES_SET
;
1601 opts
->x_ix86_isa_flags
&= ~OPTION_MASK_ISA_AES_UNSET
;
1602 opts
->x_ix86_isa_flags_explicit
|= OPTION_MASK_ISA_AES_UNSET
;
1609 opts
->x_ix86_isa_flags
|= OPTION_MASK_ISA_SHA_SET
;
1610 opts
->x_ix86_isa_flags_explicit
|= OPTION_MASK_ISA_SHA_SET
;
1614 opts
->x_ix86_isa_flags
&= ~OPTION_MASK_ISA_SHA_UNSET
;
1615 opts
->x_ix86_isa_flags_explicit
|= OPTION_MASK_ISA_SHA_UNSET
;
1622 opts
->x_ix86_isa_flags
|= OPTION_MASK_ISA_PCLMUL_SET
;
1623 opts
->x_ix86_isa_flags_explicit
|= OPTION_MASK_ISA_PCLMUL_SET
;
1627 opts
->x_ix86_isa_flags
&= ~OPTION_MASK_ISA_PCLMUL_UNSET
;
1628 opts
->x_ix86_isa_flags_explicit
|= OPTION_MASK_ISA_PCLMUL_UNSET
;
1635 opts
->x_ix86_isa_flags
|= OPTION_MASK_ISA_FSGSBASE_SET
;
1636 opts
->x_ix86_isa_flags_explicit
|= OPTION_MASK_ISA_FSGSBASE_SET
;
1640 opts
->x_ix86_isa_flags
&= ~OPTION_MASK_ISA_FSGSBASE_UNSET
;
1641 opts
->x_ix86_isa_flags_explicit
|= OPTION_MASK_ISA_FSGSBASE_UNSET
;
1648 opts
->x_ix86_isa_flags
|= OPTION_MASK_ISA_RDRND_SET
;
1649 opts
->x_ix86_isa_flags_explicit
|= OPTION_MASK_ISA_RDRND_SET
;
1653 opts
->x_ix86_isa_flags
&= ~OPTION_MASK_ISA_RDRND_UNSET
;
1654 opts
->x_ix86_isa_flags_explicit
|= OPTION_MASK_ISA_RDRND_UNSET
;
1661 opts
->x_ix86_isa_flags2
|= OPTION_MASK_ISA2_PTWRITE_SET
;
1662 opts
->x_ix86_isa_flags2_explicit
|= OPTION_MASK_ISA2_PTWRITE_SET
;
1666 opts
->x_ix86_isa_flags2
&= ~OPTION_MASK_ISA2_PTWRITE_UNSET
;
1667 opts
->x_ix86_isa_flags2_explicit
|= OPTION_MASK_ISA2_PTWRITE_UNSET
;
1674 opts
->x_ix86_isa_flags
|= OPTION_MASK_ISA_F16C_SET
;
1675 opts
->x_ix86_isa_flags_explicit
|= OPTION_MASK_ISA_F16C_SET
;
1679 opts
->x_ix86_isa_flags
&= ~OPTION_MASK_ISA_F16C_UNSET
;
1680 opts
->x_ix86_isa_flags_explicit
|= OPTION_MASK_ISA_F16C_UNSET
;
1687 opts
->x_ix86_isa_flags
|= OPTION_MASK_ISA_FXSR_SET
;
1688 opts
->x_ix86_isa_flags_explicit
|= OPTION_MASK_ISA_FXSR_SET
;
1692 opts
->x_ix86_isa_flags
&= ~OPTION_MASK_ISA_FXSR_UNSET
;
1693 opts
->x_ix86_isa_flags_explicit
|= OPTION_MASK_ISA_FXSR_UNSET
;
1700 opts
->x_ix86_isa_flags
|= OPTION_MASK_ISA_XSAVE_SET
;
1701 opts
->x_ix86_isa_flags_explicit
|= OPTION_MASK_ISA_XSAVE_SET
;
1705 opts
->x_ix86_isa_flags
&= ~OPTION_MASK_ISA_XSAVE_UNSET
;
1706 opts
->x_ix86_isa_flags_explicit
|= OPTION_MASK_ISA_XSAVE_UNSET
;
1707 opts
->x_ix86_isa_flags2
&= ~OPTION_MASK_ISA2_XSAVE_UNSET
;
1708 opts
->x_ix86_isa_flags2_explicit
|= OPTION_MASK_ISA2_XSAVE_UNSET
;
1715 opts
->x_ix86_isa_flags
|= OPTION_MASK_ISA_XSAVEOPT_SET
;
1716 opts
->x_ix86_isa_flags_explicit
|= OPTION_MASK_ISA_XSAVEOPT_SET
;
1720 opts
->x_ix86_isa_flags
&= ~OPTION_MASK_ISA_XSAVEOPT_UNSET
;
1721 opts
->x_ix86_isa_flags_explicit
|= OPTION_MASK_ISA_XSAVEOPT_UNSET
;
1728 opts
->x_ix86_isa_flags
|= OPTION_MASK_ISA_XSAVEC_SET
;
1729 opts
->x_ix86_isa_flags_explicit
|= OPTION_MASK_ISA_XSAVEC_SET
;
1733 opts
->x_ix86_isa_flags
&= ~OPTION_MASK_ISA_XSAVEC_UNSET
;
1734 opts
->x_ix86_isa_flags_explicit
|= OPTION_MASK_ISA_XSAVEC_UNSET
;
1741 opts
->x_ix86_isa_flags
|= OPTION_MASK_ISA_XSAVES_SET
;
1742 opts
->x_ix86_isa_flags_explicit
|= OPTION_MASK_ISA_XSAVES_SET
;
1746 opts
->x_ix86_isa_flags
&= ~OPTION_MASK_ISA_XSAVES_UNSET
;
1747 opts
->x_ix86_isa_flags_explicit
|= OPTION_MASK_ISA_XSAVES_UNSET
;
1754 opts
->x_ix86_isa_flags
|= OPTION_MASK_ISA_RDSEED_SET
;
1755 opts
->x_ix86_isa_flags_explicit
|= OPTION_MASK_ISA_RDSEED_SET
;
1759 opts
->x_ix86_isa_flags
&= ~OPTION_MASK_ISA_RDSEED_UNSET
;
1760 opts
->x_ix86_isa_flags_explicit
|= OPTION_MASK_ISA_RDSEED_UNSET
;
1767 opts
->x_ix86_isa_flags
|= OPTION_MASK_ISA_PRFCHW_SET
;
1768 opts
->x_ix86_isa_flags_explicit
|= OPTION_MASK_ISA_PRFCHW_SET
;
1772 opts
->x_ix86_isa_flags
&= ~OPTION_MASK_ISA_PRFCHW_UNSET
;
1773 opts
->x_ix86_isa_flags_explicit
|= OPTION_MASK_ISA_PRFCHW_UNSET
;
1780 opts
->x_ix86_isa_flags
|= OPTION_MASK_ISA_ADX_SET
;
1781 opts
->x_ix86_isa_flags_explicit
|= OPTION_MASK_ISA_ADX_SET
;
1785 opts
->x_ix86_isa_flags
&= ~OPTION_MASK_ISA_ADX_UNSET
;
1786 opts
->x_ix86_isa_flags_explicit
|= OPTION_MASK_ISA_ADX_UNSET
;
1790 case OPT_mclflushopt
:
1793 opts
->x_ix86_isa_flags
|= OPTION_MASK_ISA_CLFLUSHOPT_SET
;
1794 opts
->x_ix86_isa_flags_explicit
|= OPTION_MASK_ISA_CLFLUSHOPT_SET
;
1798 opts
->x_ix86_isa_flags
&= ~OPTION_MASK_ISA_CLFLUSHOPT_UNSET
;
1799 opts
->x_ix86_isa_flags_explicit
|= OPTION_MASK_ISA_CLFLUSHOPT_UNSET
;
1806 opts
->x_ix86_isa_flags
|= OPTION_MASK_ISA_CLWB_SET
;
1807 opts
->x_ix86_isa_flags_explicit
|= OPTION_MASK_ISA_CLWB_SET
;
1811 opts
->x_ix86_isa_flags
&= ~OPTION_MASK_ISA_CLWB_UNSET
;
1812 opts
->x_ix86_isa_flags_explicit
|= OPTION_MASK_ISA_CLWB_UNSET
;
1819 opts
->x_ix86_isa_flags2
|= OPTION_MASK_ISA2_MWAITX_SET
;
1820 opts
->x_ix86_isa_flags2_explicit
|= OPTION_MASK_ISA2_MWAITX_SET
;
1824 opts
->x_ix86_isa_flags2
&= ~OPTION_MASK_ISA2_MWAITX_UNSET
;
1825 opts
->x_ix86_isa_flags2_explicit
|= OPTION_MASK_ISA2_MWAITX_UNSET
;
1832 opts
->x_ix86_isa_flags2
|= OPTION_MASK_ISA2_MWAIT_SET
;
1833 opts
->x_ix86_isa_flags2_explicit
|= OPTION_MASK_ISA2_MWAIT_SET
;
1837 opts
->x_ix86_isa_flags2
&= ~OPTION_MASK_ISA2_MWAIT_UNSET
;
1838 opts
->x_ix86_isa_flags2_explicit
|= OPTION_MASK_ISA2_MWAIT_UNSET
;
1845 opts
->x_ix86_isa_flags2
|= OPTION_MASK_ISA2_CLZERO_SET
;
1846 opts
->x_ix86_isa_flags2_explicit
|= OPTION_MASK_ISA2_CLZERO_SET
;
1850 opts
->x_ix86_isa_flags2
&= ~OPTION_MASK_ISA2_CLZERO_UNSET
;
1851 opts
->x_ix86_isa_flags2_explicit
|= OPTION_MASK_ISA2_CLZERO_UNSET
;
1858 opts
->x_ix86_isa_flags
|= OPTION_MASK_ISA_PKU_SET
;
1859 opts
->x_ix86_isa_flags_explicit
|= OPTION_MASK_ISA_PKU_SET
;
1863 opts
->x_ix86_isa_flags
&= ~OPTION_MASK_ISA_PKU_UNSET
;
1864 opts
->x_ix86_isa_flags_explicit
|= OPTION_MASK_ISA_PKU_UNSET
;
1869 case OPT_malign_loops_
:
1870 warning_at (loc
, 0, "%<-malign-loops%> is obsolete, "
1871 "use %<-falign-loops%>");
1872 if (value
> MAX_CODE_ALIGN
)
1873 error_at (loc
, "%<-malign-loops=%d%> is not between 0 and %d",
1874 value
, MAX_CODE_ALIGN
);
1876 set_malign_value (&opts
->x_str_align_loops
, value
);
1879 case OPT_malign_jumps_
:
1880 warning_at (loc
, 0, "%<-malign-jumps%> is obsolete, "
1881 "use %<-falign-jumps%>");
1882 if (value
> MAX_CODE_ALIGN
)
1883 error_at (loc
, "%<-malign-jumps=%d%> is not between 0 and %d",
1884 value
, MAX_CODE_ALIGN
);
1886 set_malign_value (&opts
->x_str_align_jumps
, value
);
1889 case OPT_malign_functions_
:
1891 "%<-malign-functions%> is obsolete, "
1892 "use %<-falign-functions%>");
1893 if (value
> MAX_CODE_ALIGN
)
1894 error_at (loc
, "%<-malign-functions=%d%> is not between 0 and %d",
1895 value
, MAX_CODE_ALIGN
);
1897 set_malign_value (&opts
->x_str_align_functions
, value
);
1900 case OPT_mbranch_cost_
:
1903 error_at (loc
, "%<-mbranch-cost=%d%> is not between 0 and 5", value
);
1904 opts
->x_ix86_branch_cost
= 5;
1913 static const struct default_options ix86_option_optimization_table
[] =
1915 /* Enable redundant extension instructions removal at -O2 and higher. */
1916 { OPT_LEVELS_2_PLUS
, OPT_free
, NULL
, 1 },
1917 /* Enable function splitting at -O2 and higher. */
1918 { OPT_LEVELS_2_PLUS
, OPT_freorder_blocks_and_partition
, NULL
, 1 },
1919 /* The STC algorithm produces the smallest code at -Os, for x86. */
1920 { OPT_LEVELS_2_PLUS
, OPT_freorder_blocks_algorithm_
, NULL
,
1921 REORDER_BLOCKS_ALGORITHM_STC
},
1923 /* Turn on -funroll-loops with -munroll-only-small-loops to enable small
1924 loop unrolling at -O2. */
1925 { OPT_LEVELS_2_PLUS_SPEED_ONLY
, OPT_funroll_loops
, NULL
, 1 },
1926 { OPT_LEVELS_2_PLUS_SPEED_ONLY
, OPT_munroll_only_small_loops
, NULL
, 1 },
1927 /* Turns off -frename-registers and -fweb which are enabled by
1929 { OPT_LEVELS_ALL
, OPT_frename_registers
, NULL
, 0 },
1930 { OPT_LEVELS_ALL
, OPT_fweb
, NULL
, 0 },
1931 /* Turn off -fschedule-insns by default. It tends to make the
1932 problem with not enough registers even worse. */
1933 { OPT_LEVELS_ALL
, OPT_fschedule_insns
, NULL
, 0 },
1935 #ifdef SUBTARGET_OPTIMIZATION_OPTIONS
1936 SUBTARGET_OPTIMIZATION_OPTIONS
,
1938 { OPT_LEVELS_NONE
, 0, NULL
, 0 }
1941 /* Implement TARGET_OPTION_INIT_STRUCT. */
1944 ix86_option_init_struct (struct gcc_options
*opts
)
1947 /* The Darwin libraries never set errno, so we might as well
1948 avoid calling them when that's the only reason we would. */
1949 opts
->x_flag_errno_math
= 0;
1951 opts
->x_flag_pcc_struct_return
= 2;
1952 opts
->x_flag_asynchronous_unwind_tables
= 2;
1955 /* On the x86 -fsplit-stack and -fstack-protector both use the same
1956 field in the TCB, so they cannot be used together. */
1959 ix86_supports_split_stack (bool report
,
1960 struct gcc_options
*opts ATTRIBUTE_UNUSED
)
1962 #if defined(TARGET_THREAD_SPLIT_STACK_OFFSET) && defined(OPTION_GLIBC_P)
1963 if (!OPTION_GLIBC_P (opts
))
1967 error ("%<-fsplit-stack%> currently only supported on GNU/Linux");
1973 #ifdef TARGET_THREAD_SPLIT_STACK_OFFSET
1974 if (!HAVE_GAS_CFI_PERSONALITY_DIRECTIVE
)
1977 error ("%<-fsplit-stack%> requires "
1978 "assembler support for CFI directives");
1986 /* Implement TARGET_EXCEPT_UNWIND_INFO. */
1988 static enum unwind_info_type
1989 i386_except_unwind_info (struct gcc_options
*opts
)
1991 /* Honor the --enable-sjlj-exceptions configure switch. */
1992 #ifdef CONFIG_SJLJ_EXCEPTIONS
1993 if (CONFIG_SJLJ_EXCEPTIONS
)
1997 /* On windows 64, prefer SEH exceptions over anything else. */
1998 if (TARGET_64BIT
&& DEFAULT_ABI
== MS_ABI
&& opts
->x_flag_unwind_tables
)
2001 if (DWARF2_UNWIND_INFO
)
2007 #undef TARGET_EXCEPT_UNWIND_INFO
2008 #define TARGET_EXCEPT_UNWIND_INFO i386_except_unwind_info
2010 #undef TARGET_DEFAULT_TARGET_FLAGS
2011 #define TARGET_DEFAULT_TARGET_FLAGS \
2013 | TARGET_SUBTARGET_DEFAULT \
2014 | TARGET_TLS_DIRECT_SEG_REFS_DEFAULT)
2016 #undef TARGET_HANDLE_OPTION
2017 #define TARGET_HANDLE_OPTION ix86_handle_option
2019 #undef TARGET_OPTION_OPTIMIZATION_TABLE
2020 #define TARGET_OPTION_OPTIMIZATION_TABLE ix86_option_optimization_table
2021 #undef TARGET_OPTION_INIT_STRUCT
2022 #define TARGET_OPTION_INIT_STRUCT ix86_option_init_struct
2024 #undef TARGET_SUPPORTS_SPLIT_STACK
2025 #define TARGET_SUPPORTS_SPLIT_STACK ix86_supports_split_stack
2027 /* This table must be in sync with enum processor_type in i386.h. */
2028 const char *const processor_names
[] =
2088 /* Guarantee that the array is aligned with enum processor_type. */
2089 STATIC_ASSERT (ARRAY_SIZE (processor_names
) == PROCESSOR_max
);
2091 const pta processor_alias_table
[] =
2093 {"i386", PROCESSOR_I386
, CPU_NONE
, 0, 0, P_NONE
},
2094 {"i486", PROCESSOR_I486
, CPU_NONE
, 0, 0, P_NONE
},
2095 {"i586", PROCESSOR_PENTIUM
, CPU_PENTIUM
, 0, 0, P_NONE
},
2096 {"pentium", PROCESSOR_PENTIUM
, CPU_PENTIUM
, 0, 0, P_NONE
},
2097 {"lakemont", PROCESSOR_LAKEMONT
, CPU_PENTIUM
, PTA_NO_80387
,
2099 {"pentium-mmx", PROCESSOR_PENTIUM
, CPU_PENTIUM
, PTA_MMX
, 0, P_NONE
},
2100 {"winchip-c6", PROCESSOR_I486
, CPU_NONE
, PTA_MMX
, 0, P_NONE
},
2101 {"winchip2", PROCESSOR_I486
, CPU_NONE
, PTA_MMX
| PTA_3DNOW
,
2103 {"c3", PROCESSOR_I486
, CPU_NONE
, PTA_MMX
| PTA_3DNOW
, 0, P_NONE
},
2104 {"samuel-2", PROCESSOR_I486
, CPU_NONE
, PTA_MMX
| PTA_3DNOW
,
2106 {"c3-2", PROCESSOR_PENTIUMPRO
, CPU_PENTIUMPRO
,
2107 PTA_MMX
| PTA_SSE
| PTA_FXSR
, 0, P_NONE
},
2108 {"nehemiah", PROCESSOR_PENTIUMPRO
, CPU_PENTIUMPRO
,
2109 PTA_MMX
| PTA_SSE
| PTA_FXSR
, 0, P_NONE
},
2110 {"c7", PROCESSOR_PENTIUMPRO
, CPU_PENTIUMPRO
,
2111 PTA_MMX
| PTA_SSE
| PTA_SSE2
| PTA_SSE3
| PTA_FXSR
, 0, P_NONE
},
2112 {"esther", PROCESSOR_PENTIUMPRO
, CPU_PENTIUMPRO
,
2113 PTA_MMX
| PTA_SSE
| PTA_SSE2
| PTA_SSE3
| PTA_FXSR
, 0, P_NONE
},
2114 {"i686", PROCESSOR_PENTIUMPRO
, CPU_PENTIUMPRO
, 0, 0, P_NONE
},
2115 {"pentiumpro", PROCESSOR_PENTIUMPRO
, CPU_PENTIUMPRO
, 0, 0, P_NONE
},
2116 {"pentium2", PROCESSOR_PENTIUMPRO
, CPU_PENTIUMPRO
, PTA_MMX
| PTA_FXSR
,
2118 {"pentium3", PROCESSOR_PENTIUMPRO
, CPU_PENTIUMPRO
,
2119 PTA_MMX
| PTA_SSE
| PTA_FXSR
, 0, P_NONE
},
2120 {"pentium3m", PROCESSOR_PENTIUMPRO
, CPU_PENTIUMPRO
,
2121 PTA_MMX
| PTA_SSE
| PTA_FXSR
, 0, P_NONE
},
2122 {"pentium-m", PROCESSOR_PENTIUMPRO
, CPU_PENTIUMPRO
,
2123 PTA_MMX
| PTA_SSE
| PTA_SSE2
| PTA_FXSR
, 0, P_NONE
},
2124 {"pentium4", PROCESSOR_PENTIUM4
, CPU_NONE
,
2125 PTA_MMX
| PTA_SSE
| PTA_SSE2
| PTA_FXSR
, 0, P_NONE
},
2126 {"pentium4m", PROCESSOR_PENTIUM4
, CPU_NONE
,
2127 PTA_MMX
| PTA_SSE
| PTA_SSE2
| PTA_FXSR
, 0, P_NONE
},
2128 {"prescott", PROCESSOR_NOCONA
, CPU_NONE
,
2129 PTA_MMX
| PTA_SSE
| PTA_SSE2
| PTA_SSE3
| PTA_FXSR
, 0, P_NONE
},
2130 {"nocona", PROCESSOR_NOCONA
, CPU_NONE
,
2131 PTA_64BIT
| PTA_MMX
| PTA_SSE
| PTA_SSE2
| PTA_SSE3
2132 | PTA_CX16
| PTA_NO_SAHF
| PTA_FXSR
, 0, P_NONE
},
2133 {"core2", PROCESSOR_CORE2
, CPU_CORE2
, PTA_CORE2
,
2134 M_CPU_TYPE (INTEL_CORE2
), P_PROC_SSSE3
},
2135 {"nehalem", PROCESSOR_NEHALEM
, CPU_NEHALEM
, PTA_NEHALEM
,
2136 M_CPU_SUBTYPE (INTEL_COREI7_NEHALEM
), P_PROC_DYNAMIC
},
2137 {"corei7", PROCESSOR_NEHALEM
, CPU_NEHALEM
, PTA_NEHALEM
,
2138 M_CPU_TYPE (INTEL_COREI7
), P_PROC_DYNAMIC
},
2139 {"westmere", PROCESSOR_NEHALEM
, CPU_NEHALEM
, PTA_WESTMERE
,
2140 M_CPU_SUBTYPE (INTEL_COREI7_WESTMERE
), P_PROC_DYNAMIC
},
2141 {"sandybridge", PROCESSOR_SANDYBRIDGE
, CPU_NEHALEM
,
2143 M_CPU_SUBTYPE (INTEL_COREI7_SANDYBRIDGE
), P_PROC_DYNAMIC
},
2144 {"corei7-avx", PROCESSOR_SANDYBRIDGE
, CPU_NEHALEM
,
2145 PTA_SANDYBRIDGE
, 0, P_PROC_DYNAMIC
},
2146 {"ivybridge", PROCESSOR_SANDYBRIDGE
, CPU_NEHALEM
,
2148 M_CPU_SUBTYPE (INTEL_COREI7_IVYBRIDGE
), P_PROC_DYNAMIC
},
2149 {"core-avx-i", PROCESSOR_SANDYBRIDGE
, CPU_NEHALEM
,
2150 PTA_IVYBRIDGE
, 0, P_PROC_DYNAMIC
},
2151 {"haswell", PROCESSOR_HASWELL
, CPU_HASWELL
, PTA_HASWELL
,
2152 M_CPU_SUBTYPE (INTEL_COREI7_HASWELL
), P_PROC_DYNAMIC
},
2153 {"core-avx2", PROCESSOR_HASWELL
, CPU_HASWELL
, PTA_HASWELL
,
2155 {"broadwell", PROCESSOR_HASWELL
, CPU_HASWELL
, PTA_BROADWELL
,
2156 M_CPU_SUBTYPE (INTEL_COREI7_BROADWELL
), P_PROC_DYNAMIC
},
2157 {"skylake", PROCESSOR_SKYLAKE
, CPU_HASWELL
, PTA_SKYLAKE
,
2158 M_CPU_SUBTYPE (INTEL_COREI7_SKYLAKE
), P_PROC_AVX2
},
2159 {"skylake-avx512", PROCESSOR_SKYLAKE_AVX512
, CPU_HASWELL
,
2161 M_CPU_SUBTYPE (INTEL_COREI7_SKYLAKE_AVX512
), P_PROC_AVX512F
},
2162 {"cannonlake", PROCESSOR_CANNONLAKE
, CPU_HASWELL
, PTA_CANNONLAKE
,
2163 M_CPU_SUBTYPE (INTEL_COREI7_CANNONLAKE
), P_PROC_AVX512F
},
2164 {"icelake-client", PROCESSOR_ICELAKE_CLIENT
, CPU_HASWELL
,
2166 M_CPU_SUBTYPE (INTEL_COREI7_ICELAKE_CLIENT
), P_PROC_AVX512F
},
2167 {"rocketlake", PROCESSOR_ROCKETLAKE
, CPU_HASWELL
,
2169 M_CPU_SUBTYPE (INTEL_COREI7_ROCKETLAKE
), P_PROC_AVX512F
},
2170 {"icelake-server", PROCESSOR_ICELAKE_SERVER
, CPU_HASWELL
,
2172 M_CPU_SUBTYPE (INTEL_COREI7_ICELAKE_SERVER
), P_PROC_AVX512F
},
2173 {"cascadelake", PROCESSOR_CASCADELAKE
, CPU_HASWELL
,
2175 M_CPU_SUBTYPE (INTEL_COREI7_CASCADELAKE
), P_PROC_AVX512F
},
2176 {"tigerlake", PROCESSOR_TIGERLAKE
, CPU_HASWELL
, PTA_TIGERLAKE
,
2177 M_CPU_SUBTYPE (INTEL_COREI7_TIGERLAKE
), P_PROC_AVX512F
},
2178 {"cooperlake", PROCESSOR_COOPERLAKE
, CPU_HASWELL
, PTA_COOPERLAKE
,
2179 M_CPU_SUBTYPE (INTEL_COREI7_COOPERLAKE
), P_PROC_AVX512F
},
2180 {"sapphirerapids", PROCESSOR_SAPPHIRERAPIDS
, CPU_HASWELL
, PTA_SAPPHIRERAPIDS
,
2181 M_CPU_SUBTYPE (INTEL_COREI7_SAPPHIRERAPIDS
), P_PROC_AVX512F
},
2182 {"emeraldrapids", PROCESSOR_SAPPHIRERAPIDS
, CPU_HASWELL
, PTA_SAPPHIRERAPIDS
,
2183 M_CPU_SUBTYPE (INTEL_COREI7_SAPPHIRERAPIDS
), P_PROC_AVX512F
},
2184 {"alderlake", PROCESSOR_ALDERLAKE
, CPU_HASWELL
, PTA_ALDERLAKE
,
2185 M_CPU_SUBTYPE (INTEL_COREI7_ALDERLAKE
), P_PROC_AVX2
},
2186 {"raptorlake", PROCESSOR_ALDERLAKE
, CPU_HASWELL
, PTA_ALDERLAKE
,
2187 M_CPU_SUBTYPE (INTEL_COREI7_ALDERLAKE
), P_PROC_AVX2
},
2188 {"meteorlake", PROCESSOR_ALDERLAKE
, CPU_HASWELL
, PTA_ALDERLAKE
,
2189 M_CPU_SUBTYPE (INTEL_COREI7_ALDERLAKE
), P_PROC_AVX2
},
2190 {"graniterapids", PROCESSOR_GRANITERAPIDS
, CPU_HASWELL
, PTA_GRANITERAPIDS
,
2191 M_CPU_SUBTYPE (INTEL_COREI7_GRANITERAPIDS
), P_PROC_AVX10_1_512
},
2192 {"graniterapids-d", PROCESSOR_GRANITERAPIDS_D
, CPU_HASWELL
,
2193 PTA_GRANITERAPIDS_D
, M_CPU_SUBTYPE (INTEL_COREI7_GRANITERAPIDS_D
),
2194 P_PROC_AVX10_1_512
},
2195 {"arrowlake", PROCESSOR_ARROWLAKE
, CPU_HASWELL
, PTA_ARROWLAKE
,
2196 M_CPU_SUBTYPE (INTEL_COREI7_ARROWLAKE
), P_PROC_AVX2
},
2197 {"arrowlake-s", PROCESSOR_ARROWLAKE_S
, CPU_HASWELL
, PTA_ARROWLAKE_S
,
2198 M_CPU_SUBTYPE (INTEL_COREI7_ARROWLAKE_S
), P_PROC_AVX2
},
2199 {"lunarlake", PROCESSOR_ARROWLAKE_S
, CPU_HASWELL
, PTA_ARROWLAKE_S
,
2200 M_CPU_SUBTYPE (INTEL_COREI7_ARROWLAKE_S
), P_PROC_AVX2
},
2201 {"pantherlake", PROCESSOR_PANTHERLAKE
, CPU_HASWELL
, PTA_PANTHERLAKE
,
2202 M_CPU_SUBTYPE (INTEL_COREI7_PANTHERLAKE
), P_PROC_AVX2
},
2203 {"bonnell", PROCESSOR_BONNELL
, CPU_ATOM
, PTA_BONNELL
,
2204 M_CPU_TYPE (INTEL_BONNELL
), P_PROC_SSSE3
},
2205 {"atom", PROCESSOR_BONNELL
, CPU_ATOM
, PTA_BONNELL
,
2206 M_CPU_TYPE (INTEL_BONNELL
), P_PROC_SSSE3
},
2207 {"silvermont", PROCESSOR_SILVERMONT
, CPU_SLM
, PTA_SILVERMONT
,
2208 M_CPU_TYPE (INTEL_SILVERMONT
), P_PROC_SSE4_2
},
2209 {"slm", PROCESSOR_SILVERMONT
, CPU_SLM
, PTA_SILVERMONT
,
2210 M_CPU_TYPE (INTEL_SILVERMONT
), P_PROC_SSE4_2
},
2211 {"goldmont", PROCESSOR_GOLDMONT
, CPU_GLM
, PTA_GOLDMONT
,
2212 M_CPU_TYPE (INTEL_GOLDMONT
), P_PROC_SSE4_2
},
2213 {"goldmont-plus", PROCESSOR_GOLDMONT_PLUS
, CPU_GLM
, PTA_GOLDMONT_PLUS
,
2214 M_CPU_TYPE (INTEL_GOLDMONT_PLUS
), P_PROC_SSE4_2
},
2215 {"tremont", PROCESSOR_TREMONT
, CPU_HASWELL
, PTA_TREMONT
,
2216 M_CPU_TYPE (INTEL_TREMONT
), P_PROC_SSE4_2
},
2217 {"gracemont", PROCESSOR_ALDERLAKE
, CPU_HASWELL
, PTA_ALDERLAKE
,
2218 M_CPU_SUBTYPE (INTEL_COREI7_ALDERLAKE
), P_PROC_AVX2
},
2219 {"sierraforest", PROCESSOR_SIERRAFOREST
, CPU_HASWELL
, PTA_SIERRAFOREST
,
2220 M_CPU_TYPE (INTEL_SIERRAFOREST
), P_PROC_AVX2
},
2221 {"grandridge", PROCESSOR_GRANDRIDGE
, CPU_HASWELL
, PTA_GRANDRIDGE
,
2222 M_CPU_TYPE (INTEL_GRANDRIDGE
), P_PROC_AVX2
},
2223 {"clearwaterforest", PROCESSOR_CLEARWATERFOREST
, CPU_HASWELL
,
2224 PTA_CLEARWATERFOREST
, M_CPU_TYPE (INTEL_CLEARWATERFOREST
), P_PROC_AVX2
},
2225 {"intel", PROCESSOR_INTEL
, CPU_SLM
, PTA_NEHALEM
,
2226 M_VENDOR (VENDOR_INTEL
), P_NONE
},
2227 {"geode", PROCESSOR_GEODE
, CPU_GEODE
,
2228 PTA_MMX
| PTA_3DNOW
| PTA_3DNOW_A
| PTA_PREFETCH_SSE
, 0, P_NONE
},
2229 {"k6", PROCESSOR_K6
, CPU_K6
, PTA_MMX
, 0, P_NONE
},
2230 {"k6-2", PROCESSOR_K6
, CPU_K6
, PTA_MMX
| PTA_3DNOW
, 0, P_NONE
},
2231 {"k6-3", PROCESSOR_K6
, CPU_K6
, PTA_MMX
| PTA_3DNOW
, 0, P_NONE
},
2232 {"athlon", PROCESSOR_ATHLON
, CPU_ATHLON
,
2233 PTA_MMX
| PTA_3DNOW
| PTA_3DNOW_A
| PTA_PREFETCH_SSE
, 0, P_NONE
},
2234 {"athlon-tbird", PROCESSOR_ATHLON
, CPU_ATHLON
,
2235 PTA_MMX
| PTA_3DNOW
| PTA_3DNOW_A
| PTA_PREFETCH_SSE
, 0, P_NONE
},
2236 {"athlon-4", PROCESSOR_ATHLON
, CPU_ATHLON
,
2237 PTA_MMX
| PTA_3DNOW
| PTA_3DNOW_A
| PTA_SSE
| PTA_FXSR
, 0, P_NONE
},
2238 {"athlon-xp", PROCESSOR_ATHLON
, CPU_ATHLON
,
2239 PTA_MMX
| PTA_3DNOW
| PTA_3DNOW_A
| PTA_SSE
| PTA_FXSR
, 0, P_NONE
},
2240 {"athlon-mp", PROCESSOR_ATHLON
, CPU_ATHLON
,
2241 PTA_MMX
| PTA_3DNOW
| PTA_3DNOW_A
| PTA_SSE
| PTA_FXSR
, 0, P_NONE
},
2242 {"x86-64", PROCESSOR_K8
, CPU_K8
, PTA_X86_64_BASELINE
, 0, P_NONE
},
2243 {"x86-64-v2", PROCESSOR_K8
, CPU_GENERIC
, PTA_X86_64_V2
| PTA_NO_TUNE
,
2245 {"x86-64-v3", PROCESSOR_K8
, CPU_GENERIC
, PTA_X86_64_V3
| PTA_NO_TUNE
,
2247 {"x86-64-v4", PROCESSOR_K8
, CPU_GENERIC
, PTA_X86_64_V4
| PTA_NO_TUNE
,
2249 {"eden-x2", PROCESSOR_K8
, CPU_K8
,
2250 PTA_64BIT
| PTA_MMX
| PTA_SSE
| PTA_SSE2
| PTA_SSE3
| PTA_FXSR
,
2252 {"nano", PROCESSOR_K8
, CPU_K8
,
2253 PTA_64BIT
| PTA_MMX
| PTA_SSE
| PTA_SSE2
| PTA_SSE3
2254 | PTA_SSSE3
| PTA_FXSR
, 0, P_NONE
},
2255 {"nano-1000", PROCESSOR_K8
, CPU_K8
,
2256 PTA_64BIT
| PTA_MMX
| PTA_SSE
| PTA_SSE2
| PTA_SSE3
2257 | PTA_SSSE3
| PTA_FXSR
, 0, P_NONE
},
2258 {"nano-2000", PROCESSOR_K8
, CPU_K8
,
2259 PTA_64BIT
| PTA_MMX
| PTA_SSE
| PTA_SSE2
| PTA_SSE3
2260 | PTA_SSSE3
| PTA_FXSR
, 0, P_NONE
},
2261 {"nano-3000", PROCESSOR_K8
, CPU_K8
,
2262 PTA_64BIT
| PTA_MMX
| PTA_SSE
| PTA_SSE2
| PTA_SSE3
2263 | PTA_SSSE3
| PTA_SSE4_1
| PTA_FXSR
, 0, P_NONE
},
2264 {"nano-x2", PROCESSOR_K8
, CPU_K8
,
2265 PTA_64BIT
| PTA_MMX
| PTA_SSE
| PTA_SSE2
| PTA_SSE3
2266 | PTA_SSSE3
| PTA_SSE4_1
| PTA_FXSR
, 0, P_NONE
},
2267 {"eden-x4", PROCESSOR_K8
, CPU_K8
,
2268 PTA_64BIT
| PTA_MMX
| PTA_SSE
| PTA_SSE2
| PTA_SSE3
2269 | PTA_SSSE3
| PTA_SSE4_1
| PTA_FXSR
, 0, P_NONE
},
2270 {"nano-x4", PROCESSOR_K8
, CPU_K8
,
2271 PTA_64BIT
| PTA_MMX
| PTA_SSE
| PTA_SSE2
| PTA_SSE3
2272 | PTA_SSSE3
| PTA_SSE4_1
| PTA_FXSR
, 0, P_NONE
},
2273 {"lujiazui", PROCESSOR_LUJIAZUI
, CPU_LUJIAZUI
,
2275 M_CPU_SUBTYPE (ZHAOXIN_FAM7H_LUJIAZUI
), P_PROC_BMI
},
2276 {"yongfeng", PROCESSOR_YONGFENG
, CPU_YONGFENG
,
2278 M_CPU_SUBTYPE (ZHAOXIN_FAM7H_YONGFENG
), P_PROC_AVX2
},
2279 {"shijidadao", PROCESSOR_SHIJIDADAO
, CPU_YONGFENG
,
2281 M_CPU_SUBTYPE (ZHAOXIN_FAM7H_SHIJIDADAO
), P_PROC_AVX2
},
2282 {"k8", PROCESSOR_K8
, CPU_K8
,
2283 PTA_64BIT
| PTA_MMX
| PTA_3DNOW
| PTA_3DNOW_A
| PTA_SSE
2284 | PTA_SSE2
| PTA_NO_SAHF
| PTA_FXSR
, 0, P_NONE
},
2285 {"k8-sse3", PROCESSOR_K8
, CPU_K8
,
2286 PTA_64BIT
| PTA_MMX
| PTA_3DNOW
| PTA_3DNOW_A
| PTA_SSE
2287 | PTA_SSE2
| PTA_SSE3
| PTA_NO_SAHF
| PTA_FXSR
, 0, P_NONE
},
2288 {"opteron", PROCESSOR_K8
, CPU_K8
,
2289 PTA_64BIT
| PTA_MMX
| PTA_3DNOW
| PTA_3DNOW_A
| PTA_SSE
2290 | PTA_SSE2
| PTA_NO_SAHF
| PTA_FXSR
, 0, P_NONE
},
2291 {"opteron-sse3", PROCESSOR_K8
, CPU_K8
,
2292 PTA_64BIT
| PTA_MMX
| PTA_3DNOW
| PTA_3DNOW_A
| PTA_SSE
2293 | PTA_SSE2
| PTA_SSE3
| PTA_NO_SAHF
| PTA_FXSR
, 0, P_NONE
},
2294 {"athlon64", PROCESSOR_K8
, CPU_K8
,
2295 PTA_64BIT
| PTA_MMX
| PTA_3DNOW
| PTA_3DNOW_A
| PTA_SSE
2296 | PTA_SSE2
| PTA_NO_SAHF
| PTA_FXSR
, 0, P_NONE
},
2297 {"athlon64-sse3", PROCESSOR_K8
, CPU_K8
,
2298 PTA_64BIT
| PTA_MMX
| PTA_3DNOW
| PTA_3DNOW_A
| PTA_SSE
2299 | PTA_SSE2
| PTA_SSE3
| PTA_NO_SAHF
| PTA_FXSR
, 0, P_NONE
},
2300 {"athlon-fx", PROCESSOR_K8
, CPU_K8
,
2301 PTA_64BIT
| PTA_MMX
| PTA_3DNOW
| PTA_3DNOW_A
| PTA_SSE
2302 | PTA_SSE2
| PTA_NO_SAHF
| PTA_FXSR
, 0, P_NONE
},
2303 {"amdfam10", PROCESSOR_AMDFAM10
, CPU_AMDFAM10
,
2304 PTA_64BIT
| PTA_MMX
| PTA_3DNOW
| PTA_3DNOW_A
| PTA_SSE
| PTA_SSE2
2305 | PTA_SSE3
| PTA_SSE4A
| PTA_CX16
| PTA_ABM
| PTA_PRFCHW
| PTA_FXSR
,
2307 {"barcelona", PROCESSOR_AMDFAM10
, CPU_AMDFAM10
,
2308 PTA_64BIT
| PTA_MMX
| PTA_3DNOW
| PTA_3DNOW_A
| PTA_SSE
| PTA_SSE2
2309 | PTA_SSE3
| PTA_SSE4A
| PTA_CX16
| PTA_ABM
| PTA_PRFCHW
| PTA_FXSR
,
2310 M_CPU_SUBTYPE (AMDFAM10H_BARCELONA
), P_PROC_DYNAMIC
},
2311 {"bdver1", PROCESSOR_BDVER1
, CPU_BDVER1
,
2312 PTA_64BIT
| PTA_MMX
| PTA_SSE
| PTA_SSE2
| PTA_SSE3
2313 | PTA_SSE4A
| PTA_CX16
| PTA_ABM
| PTA_SSSE3
| PTA_SSE4_1
2314 | PTA_SSE4_2
| PTA_AES
| PTA_PCLMUL
| PTA_AVX
| PTA_FMA4
2315 | PTA_XOP
| PTA_LWP
| PTA_PRFCHW
| PTA_FXSR
| PTA_XSAVE
,
2316 M_CPU_TYPE (AMDFAM15H_BDVER1
), P_PROC_XOP
},
2317 {"bdver2", PROCESSOR_BDVER2
, CPU_BDVER2
,
2318 PTA_64BIT
| PTA_MMX
| PTA_SSE
| PTA_SSE2
| PTA_SSE3
2319 | PTA_SSE4A
| PTA_CX16
| PTA_ABM
| PTA_SSSE3
| PTA_SSE4_1
2320 | PTA_SSE4_2
| PTA_AES
| PTA_PCLMUL
| PTA_AVX
| PTA_FMA4
2321 | PTA_XOP
| PTA_LWP
| PTA_BMI
| PTA_TBM
| PTA_F16C
2322 | PTA_FMA
| PTA_PRFCHW
| PTA_FXSR
| PTA_XSAVE
,
2323 M_CPU_TYPE (AMDFAM15H_BDVER2
), P_PROC_FMA
},
2324 {"bdver3", PROCESSOR_BDVER3
, CPU_BDVER3
,
2325 PTA_64BIT
| PTA_MMX
| PTA_SSE
| PTA_SSE2
| PTA_SSE3
2326 | PTA_SSE4A
| PTA_CX16
| PTA_ABM
| PTA_SSSE3
| PTA_SSE4_1
2327 | PTA_SSE4_2
| PTA_AES
| PTA_PCLMUL
| PTA_AVX
| PTA_FMA4
2328 | PTA_XOP
| PTA_LWP
| PTA_BMI
| PTA_TBM
| PTA_F16C
2329 | PTA_FMA
| PTA_PRFCHW
| PTA_FXSR
| PTA_XSAVE
2330 | PTA_XSAVEOPT
| PTA_FSGSBASE
,
2331 M_CPU_SUBTYPE (AMDFAM15H_BDVER3
), P_PROC_FMA
},
2332 {"bdver4", PROCESSOR_BDVER4
, CPU_BDVER4
,
2333 PTA_64BIT
| PTA_MMX
| PTA_SSE
| PTA_SSE2
| PTA_SSE3
2334 | PTA_SSE4A
| PTA_CX16
| PTA_ABM
| PTA_SSSE3
| PTA_SSE4_1
2335 | PTA_SSE4_2
| PTA_AES
| PTA_PCLMUL
| PTA_AVX
| PTA_AVX2
2336 | PTA_FMA4
| PTA_XOP
| PTA_LWP
| PTA_BMI
| PTA_BMI2
2337 | PTA_TBM
| PTA_F16C
| PTA_FMA
| PTA_PRFCHW
| PTA_FXSR
2338 | PTA_XSAVE
| PTA_XSAVEOPT
| PTA_FSGSBASE
| PTA_RDRND
2339 | PTA_MOVBE
| PTA_MWAITX
,
2340 M_CPU_SUBTYPE (AMDFAM15H_BDVER4
), P_PROC_AVX2
},
2341 {"znver1", PROCESSOR_ZNVER1
, CPU_ZNVER1
,
2343 M_CPU_SUBTYPE (AMDFAM17H_ZNVER1
), P_PROC_AVX2
},
2344 {"znver2", PROCESSOR_ZNVER2
, CPU_ZNVER2
,
2346 M_CPU_SUBTYPE (AMDFAM17H_ZNVER2
), P_PROC_AVX2
},
2347 {"znver3", PROCESSOR_ZNVER3
, CPU_ZNVER3
,
2349 M_CPU_SUBTYPE (AMDFAM19H_ZNVER3
), P_PROC_AVX2
},
2350 {"znver4", PROCESSOR_ZNVER4
, CPU_ZNVER4
,
2352 M_CPU_SUBTYPE (AMDFAM19H_ZNVER4
), P_PROC_AVX512F
},
2353 {"znver5", PROCESSOR_ZNVER5
, CPU_ZNVER5
,
2355 M_CPU_SUBTYPE (AMDFAM1AH_ZNVER5
), P_PROC_AVX512F
},
2356 {"btver1", PROCESSOR_BTVER1
, CPU_GENERIC
,
2357 PTA_64BIT
| PTA_MMX
| PTA_SSE
| PTA_SSE2
| PTA_SSE3
2358 | PTA_SSSE3
| PTA_SSE4A
| PTA_ABM
| PTA_CX16
| PTA_PRFCHW
2359 | PTA_FXSR
| PTA_XSAVE
,
2360 M_CPU_SUBTYPE (AMDFAM15H_BDVER1
), P_PROC_SSE4_A
},
2361 {"btver2", PROCESSOR_BTVER2
, CPU_BTVER2
,
2362 PTA_64BIT
| PTA_MMX
| PTA_SSE
| PTA_SSE2
| PTA_SSE3
2363 | PTA_SSSE3
| PTA_SSE4A
| PTA_ABM
| PTA_CX16
| PTA_SSE4_1
2364 | PTA_SSE4_2
| PTA_AES
| PTA_PCLMUL
| PTA_AVX
2365 | PTA_BMI
| PTA_F16C
| PTA_MOVBE
| PTA_PRFCHW
2366 | PTA_FXSR
| PTA_XSAVE
| PTA_XSAVEOPT
,
2367 M_CPU_TYPE (AMD_BTVER2
), P_PROC_BMI
},
2369 {"generic", PROCESSOR_GENERIC
, CPU_GENERIC
,
2371 | PTA_HLE
/* flags are only used for -march switch. */,
2374 {"amd", PROCESSOR_GENERIC
, CPU_GENERIC
, 0,
2375 M_VENDOR (VENDOR_AMD
), P_NONE
},
2376 {"amdfam10h", PROCESSOR_GENERIC
, CPU_GENERIC
, 0,
2377 M_CPU_TYPE (AMDFAM10H
), P_NONE
},
2378 {"amdfam15h", PROCESSOR_GENERIC
, CPU_GENERIC
, 0,
2379 M_CPU_TYPE (AMDFAM15H
), P_NONE
},
2380 {"amdfam17h", PROCESSOR_GENERIC
, CPU_GENERIC
, 0,
2381 M_CPU_TYPE (AMDFAM17H
), P_NONE
},
2382 {"amdfam19h", PROCESSOR_GENERIC
, CPU_GENERIC
, 0,
2383 M_CPU_TYPE (AMDFAM19H
), P_NONE
},
2384 {"shanghai", PROCESSOR_GENERIC
, CPU_GENERIC
, 0,
2385 M_CPU_TYPE (AMDFAM10H_SHANGHAI
), P_NONE
},
2386 {"istanbul", PROCESSOR_GENERIC
, CPU_GENERIC
, 0,
2387 M_CPU_TYPE (AMDFAM10H_ISTANBUL
), P_NONE
},
2390 /* NB: processor_alias_table stops at the "generic" entry. */
2391 unsigned int const pta_size
= ARRAY_SIZE (processor_alias_table
) - 7;
2392 unsigned int const num_arch_names
= ARRAY_SIZE (processor_alias_table
);
2394 /* Provide valid option values for -march and -mtune options. */
2397 ix86_get_valid_option_values (int option_code
,
2398 const char *prefix ATTRIBUTE_UNUSED
)
2400 vec
<const char *> v
;
2402 opt_code opt
= (opt_code
) option_code
;
2407 for (unsigned i
= 0; i
< pta_size
; i
++)
2409 const char *name
= processor_alias_table
[i
].name
;
2410 gcc_checking_assert (name
!= NULL
);
2413 #ifdef HAVE_LOCAL_CPU_DETECT
2414 /* Add also "native" as possible value. */
2415 v
.safe_push ("native");
2420 for (unsigned i
= 0; i
< PROCESSOR_max
; i
++)
2422 const char *name
= processor_names
[i
];
2423 gcc_checking_assert (name
!= NULL
);
2434 #undef TARGET_GET_VALID_OPTION_VALUES
2435 #define TARGET_GET_VALID_OPTION_VALUES ix86_get_valid_option_values
2437 struct gcc_targetm_common targetm_common
= TARGETM_COMMON_INITIALIZER
;