136ac495dSmrg /* IA-32 common hooks.
2*8feb0f0bSmrg Copyright (C) 1988-2020 Free Software Foundation, Inc.
336ac495dSmrg
436ac495dSmrg This file is part of GCC.
536ac495dSmrg
636ac495dSmrg GCC is free software; you can redistribute it and/or modify
736ac495dSmrg it under the terms of the GNU General Public License as published by
836ac495dSmrg the Free Software Foundation; either version 3, or (at your option)
936ac495dSmrg any later version.
1036ac495dSmrg
1136ac495dSmrg GCC is distributed in the hope that it will be useful,
1236ac495dSmrg but WITHOUT ANY WARRANTY; without even the implied warranty of
1336ac495dSmrg MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
1436ac495dSmrg GNU General Public License for more details.
1536ac495dSmrg
1636ac495dSmrg You should have received a copy of the GNU General Public License
1736ac495dSmrg along with GCC; see the file COPYING3. If not see
1836ac495dSmrg <http://www.gnu.org/licenses/>. */
1936ac495dSmrg
2036ac495dSmrg #include "config.h"
2136ac495dSmrg #include "system.h"
2236ac495dSmrg #include "coretypes.h"
2336ac495dSmrg #include "diagnostic-core.h"
2436ac495dSmrg #include "tm.h"
2536ac495dSmrg #include "memmodel.h"
2636ac495dSmrg #include "tm_p.h"
2736ac495dSmrg #include "common/common-target.h"
2836ac495dSmrg #include "common/common-target-def.h"
2936ac495dSmrg #include "opts.h"
3036ac495dSmrg #include "flags.h"
3136ac495dSmrg
3236ac495dSmrg /* Define a set of ISAs which are available when a given ISA is
3336ac495dSmrg enabled. MMX and SSE ISAs are handled separately. */
3436ac495dSmrg
3536ac495dSmrg #define OPTION_MASK_ISA_MMX_SET OPTION_MASK_ISA_MMX
3636ac495dSmrg #define OPTION_MASK_ISA_3DNOW_SET \
3736ac495dSmrg (OPTION_MASK_ISA_3DNOW | OPTION_MASK_ISA_MMX_SET)
3836ac495dSmrg #define OPTION_MASK_ISA_3DNOW_A_SET \
3936ac495dSmrg (OPTION_MASK_ISA_3DNOW_A | OPTION_MASK_ISA_3DNOW_SET)
4036ac495dSmrg
4136ac495dSmrg #define OPTION_MASK_ISA_SSE_SET OPTION_MASK_ISA_SSE
4236ac495dSmrg #define OPTION_MASK_ISA_SSE2_SET \
4336ac495dSmrg (OPTION_MASK_ISA_SSE2 | OPTION_MASK_ISA_SSE_SET)
4436ac495dSmrg #define OPTION_MASK_ISA_SSE3_SET \
4536ac495dSmrg (OPTION_MASK_ISA_SSE3 | OPTION_MASK_ISA_SSE2_SET)
4636ac495dSmrg #define OPTION_MASK_ISA_SSSE3_SET \
4736ac495dSmrg (OPTION_MASK_ISA_SSSE3 | OPTION_MASK_ISA_SSE3_SET)
4836ac495dSmrg #define OPTION_MASK_ISA_SSE4_1_SET \
4936ac495dSmrg (OPTION_MASK_ISA_SSE4_1 | OPTION_MASK_ISA_SSSE3_SET)
5036ac495dSmrg #define OPTION_MASK_ISA_SSE4_2_SET \
5136ac495dSmrg (OPTION_MASK_ISA_SSE4_2 | OPTION_MASK_ISA_SSE4_1_SET)
5236ac495dSmrg #define OPTION_MASK_ISA_AVX_SET \
5336ac495dSmrg (OPTION_MASK_ISA_AVX | OPTION_MASK_ISA_SSE4_2_SET \
5436ac495dSmrg | OPTION_MASK_ISA_XSAVE_SET)
5536ac495dSmrg #define OPTION_MASK_ISA_FMA_SET \
5636ac495dSmrg (OPTION_MASK_ISA_FMA | OPTION_MASK_ISA_AVX_SET)
5736ac495dSmrg #define OPTION_MASK_ISA_AVX2_SET \
5836ac495dSmrg (OPTION_MASK_ISA_AVX2 | OPTION_MASK_ISA_AVX_SET)
5936ac495dSmrg #define OPTION_MASK_ISA_FXSR_SET OPTION_MASK_ISA_FXSR
6036ac495dSmrg #define OPTION_MASK_ISA_XSAVE_SET OPTION_MASK_ISA_XSAVE
6136ac495dSmrg #define OPTION_MASK_ISA_XSAVEOPT_SET \
62a2dc1f3fSmrg (OPTION_MASK_ISA_XSAVEOPT | OPTION_MASK_ISA_XSAVE_SET)
6336ac495dSmrg #define OPTION_MASK_ISA_AVX512F_SET \
6436ac495dSmrg (OPTION_MASK_ISA_AVX512F | OPTION_MASK_ISA_AVX2_SET)
6536ac495dSmrg #define OPTION_MASK_ISA_AVX512CD_SET \
6636ac495dSmrg (OPTION_MASK_ISA_AVX512CD | OPTION_MASK_ISA_AVX512F_SET)
6736ac495dSmrg #define OPTION_MASK_ISA_AVX512PF_SET \
6836ac495dSmrg (OPTION_MASK_ISA_AVX512PF | OPTION_MASK_ISA_AVX512F_SET)
6936ac495dSmrg #define OPTION_MASK_ISA_AVX512ER_SET \
7036ac495dSmrg (OPTION_MASK_ISA_AVX512ER | OPTION_MASK_ISA_AVX512F_SET)
7136ac495dSmrg #define OPTION_MASK_ISA_AVX512DQ_SET \
7236ac495dSmrg (OPTION_MASK_ISA_AVX512DQ | OPTION_MASK_ISA_AVX512F_SET)
7336ac495dSmrg #define OPTION_MASK_ISA_AVX512BW_SET \
7436ac495dSmrg (OPTION_MASK_ISA_AVX512BW | OPTION_MASK_ISA_AVX512F_SET)
7536ac495dSmrg #define OPTION_MASK_ISA_AVX512VL_SET \
7636ac495dSmrg (OPTION_MASK_ISA_AVX512VL | OPTION_MASK_ISA_AVX512F_SET)
7736ac495dSmrg #define OPTION_MASK_ISA_AVX512IFMA_SET \
7836ac495dSmrg (OPTION_MASK_ISA_AVX512IFMA | OPTION_MASK_ISA_AVX512F_SET)
7936ac495dSmrg #define OPTION_MASK_ISA_AVX512VBMI_SET \
8036ac495dSmrg (OPTION_MASK_ISA_AVX512VBMI | OPTION_MASK_ISA_AVX512BW_SET)
81*8feb0f0bSmrg #define OPTION_MASK_ISA2_AVX5124FMAPS_SET OPTION_MASK_ISA2_AVX5124FMAPS
82*8feb0f0bSmrg #define OPTION_MASK_ISA2_AVX5124VNNIW_SET OPTION_MASK_ISA2_AVX5124VNNIW
83a2dc1f3fSmrg #define OPTION_MASK_ISA_AVX512VBMI2_SET \
84a2dc1f3fSmrg (OPTION_MASK_ISA_AVX512VBMI2 | OPTION_MASK_ISA_AVX512F_SET)
85a2dc1f3fSmrg #define OPTION_MASK_ISA_AVX512VNNI_SET \
86a2dc1f3fSmrg (OPTION_MASK_ISA_AVX512VNNI | OPTION_MASK_ISA_AVX512F_SET)
87a2dc1f3fSmrg #define OPTION_MASK_ISA_AVX512VPOPCNTDQ_SET \
88a2dc1f3fSmrg (OPTION_MASK_ISA_AVX512VPOPCNTDQ | OPTION_MASK_ISA_AVX512F_SET)
89a2dc1f3fSmrg #define OPTION_MASK_ISA_AVX512BITALG_SET \
90a2dc1f3fSmrg (OPTION_MASK_ISA_AVX512BITALG | OPTION_MASK_ISA_AVX512F_SET)
91*8feb0f0bSmrg #define OPTION_MASK_ISA2_AVX512BF16_SET OPTION_MASK_ISA2_AVX512BF16
9236ac495dSmrg #define OPTION_MASK_ISA_RTM_SET OPTION_MASK_ISA_RTM
9336ac495dSmrg #define OPTION_MASK_ISA_PRFCHW_SET OPTION_MASK_ISA_PRFCHW
9436ac495dSmrg #define OPTION_MASK_ISA_RDSEED_SET OPTION_MASK_ISA_RDSEED
9536ac495dSmrg #define OPTION_MASK_ISA_ADX_SET OPTION_MASK_ISA_ADX
9636ac495dSmrg #define OPTION_MASK_ISA_PREFETCHWT1_SET OPTION_MASK_ISA_PREFETCHWT1
9736ac495dSmrg #define OPTION_MASK_ISA_CLFLUSHOPT_SET OPTION_MASK_ISA_CLFLUSHOPT
9836ac495dSmrg #define OPTION_MASK_ISA_XSAVES_SET \
99a2dc1f3fSmrg (OPTION_MASK_ISA_XSAVES | OPTION_MASK_ISA_XSAVE_SET)
10036ac495dSmrg #define OPTION_MASK_ISA_XSAVEC_SET \
101a2dc1f3fSmrg (OPTION_MASK_ISA_XSAVEC | OPTION_MASK_ISA_XSAVE_SET)
10236ac495dSmrg #define OPTION_MASK_ISA_CLWB_SET OPTION_MASK_ISA_CLWB
103*8feb0f0bSmrg #define OPTION_MASK_ISA2_AVX512VP2INTERSECT_SET OPTION_MASK_ISA2_AVX512VP2INTERSECT
10436ac495dSmrg
10536ac495dSmrg /* SSE4 includes both SSE4.1 and SSE4.2. -msse4 should be the same
10636ac495dSmrg as -msse4.2. */
10736ac495dSmrg #define OPTION_MASK_ISA_SSE4_SET OPTION_MASK_ISA_SSE4_2_SET
10836ac495dSmrg
10936ac495dSmrg #define OPTION_MASK_ISA_SSE4A_SET \
11036ac495dSmrg (OPTION_MASK_ISA_SSE4A | OPTION_MASK_ISA_SSE3_SET)
11136ac495dSmrg #define OPTION_MASK_ISA_FMA4_SET \
11236ac495dSmrg (OPTION_MASK_ISA_FMA4 | OPTION_MASK_ISA_SSE4A_SET \
11336ac495dSmrg | OPTION_MASK_ISA_AVX_SET)
11436ac495dSmrg #define OPTION_MASK_ISA_XOP_SET \
11536ac495dSmrg (OPTION_MASK_ISA_XOP | OPTION_MASK_ISA_FMA4_SET)
11636ac495dSmrg #define OPTION_MASK_ISA_LWP_SET \
11736ac495dSmrg OPTION_MASK_ISA_LWP
11836ac495dSmrg
11936ac495dSmrg /* AES, SHA and PCLMUL need SSE2 because they use xmm registers. */
12036ac495dSmrg #define OPTION_MASK_ISA_AES_SET \
12136ac495dSmrg (OPTION_MASK_ISA_AES | OPTION_MASK_ISA_SSE2_SET)
12236ac495dSmrg #define OPTION_MASK_ISA_SHA_SET \
12336ac495dSmrg (OPTION_MASK_ISA_SHA | OPTION_MASK_ISA_SSE2_SET)
12436ac495dSmrg #define OPTION_MASK_ISA_PCLMUL_SET \
12536ac495dSmrg (OPTION_MASK_ISA_PCLMUL | OPTION_MASK_ISA_SSE2_SET)
12636ac495dSmrg
12736ac495dSmrg #define OPTION_MASK_ISA_ABM_SET \
12836ac495dSmrg (OPTION_MASK_ISA_ABM | OPTION_MASK_ISA_POPCNT)
12936ac495dSmrg
130*8feb0f0bSmrg #define OPTION_MASK_ISA2_PCONFIG_SET OPTION_MASK_ISA2_PCONFIG
131*8feb0f0bSmrg #define OPTION_MASK_ISA2_WBNOINVD_SET OPTION_MASK_ISA2_WBNOINVD
132*8feb0f0bSmrg #define OPTION_MASK_ISA2_SGX_SET OPTION_MASK_ISA2_SGX
13336ac495dSmrg #define OPTION_MASK_ISA_BMI_SET OPTION_MASK_ISA_BMI
13436ac495dSmrg #define OPTION_MASK_ISA_BMI2_SET OPTION_MASK_ISA_BMI2
13536ac495dSmrg #define OPTION_MASK_ISA_LZCNT_SET OPTION_MASK_ISA_LZCNT
13636ac495dSmrg #define OPTION_MASK_ISA_TBM_SET OPTION_MASK_ISA_TBM
13736ac495dSmrg #define OPTION_MASK_ISA_POPCNT_SET OPTION_MASK_ISA_POPCNT
138*8feb0f0bSmrg #define OPTION_MASK_ISA2_CX16_SET OPTION_MASK_ISA2_CX16
13936ac495dSmrg #define OPTION_MASK_ISA_SAHF_SET OPTION_MASK_ISA_SAHF
140*8feb0f0bSmrg #define OPTION_MASK_ISA2_MOVBE_SET OPTION_MASK_ISA2_MOVBE
14136ac495dSmrg #define OPTION_MASK_ISA_CRC32_SET OPTION_MASK_ISA_CRC32
14236ac495dSmrg
14336ac495dSmrg #define OPTION_MASK_ISA_FSGSBASE_SET OPTION_MASK_ISA_FSGSBASE
14436ac495dSmrg #define OPTION_MASK_ISA_RDRND_SET OPTION_MASK_ISA_RDRND
145*8feb0f0bSmrg #define OPTION_MASK_ISA2_PTWRITE_SET OPTION_MASK_ISA2_PTWRITE
14636ac495dSmrg #define OPTION_MASK_ISA_F16C_SET \
14736ac495dSmrg (OPTION_MASK_ISA_F16C | OPTION_MASK_ISA_AVX_SET)
148*8feb0f0bSmrg #define OPTION_MASK_ISA2_MWAITX_SET OPTION_MASK_ISA2_MWAITX
149*8feb0f0bSmrg #define OPTION_MASK_ISA2_CLZERO_SET OPTION_MASK_ISA2_CLZERO
15036ac495dSmrg #define OPTION_MASK_ISA_PKU_SET OPTION_MASK_ISA_PKU
151*8feb0f0bSmrg #define OPTION_MASK_ISA2_RDPID_SET OPTION_MASK_ISA2_RDPID
152a2dc1f3fSmrg #define OPTION_MASK_ISA_GFNI_SET OPTION_MASK_ISA_GFNI
153a2dc1f3fSmrg #define OPTION_MASK_ISA_SHSTK_SET OPTION_MASK_ISA_SHSTK
154*8feb0f0bSmrg #define OPTION_MASK_ISA2_VAES_SET OPTION_MASK_ISA2_VAES
155a2dc1f3fSmrg #define OPTION_MASK_ISA_VPCLMULQDQ_SET OPTION_MASK_ISA_VPCLMULQDQ
156a2dc1f3fSmrg #define OPTION_MASK_ISA_MOVDIRI_SET OPTION_MASK_ISA_MOVDIRI
157*8feb0f0bSmrg #define OPTION_MASK_ISA2_MOVDIR64B_SET OPTION_MASK_ISA2_MOVDIR64B
158*8feb0f0bSmrg #define OPTION_MASK_ISA2_WAITPKG_SET OPTION_MASK_ISA2_WAITPKG
159*8feb0f0bSmrg #define OPTION_MASK_ISA2_CLDEMOTE_SET OPTION_MASK_ISA2_CLDEMOTE
160*8feb0f0bSmrg #define OPTION_MASK_ISA2_ENQCMD_SET OPTION_MASK_ISA2_ENQCMD
16136ac495dSmrg
16236ac495dSmrg /* Define a set of ISAs which aren't available when a given ISA is
16336ac495dSmrg disabled. MMX and SSE ISAs are handled separately. */
16436ac495dSmrg
16536ac495dSmrg #define OPTION_MASK_ISA_MMX_UNSET \
16636ac495dSmrg (OPTION_MASK_ISA_MMX | OPTION_MASK_ISA_3DNOW_UNSET)
16736ac495dSmrg #define OPTION_MASK_ISA_3DNOW_UNSET \
16836ac495dSmrg (OPTION_MASK_ISA_3DNOW | OPTION_MASK_ISA_3DNOW_A_UNSET)
16936ac495dSmrg #define OPTION_MASK_ISA_3DNOW_A_UNSET OPTION_MASK_ISA_3DNOW_A
17036ac495dSmrg
17136ac495dSmrg #define OPTION_MASK_ISA_SSE_UNSET \
17236ac495dSmrg (OPTION_MASK_ISA_SSE | OPTION_MASK_ISA_SSE2_UNSET)
17336ac495dSmrg #define OPTION_MASK_ISA_SSE2_UNSET \
17436ac495dSmrg (OPTION_MASK_ISA_SSE2 | OPTION_MASK_ISA_SSE3_UNSET)
17536ac495dSmrg #define OPTION_MASK_ISA_SSE3_UNSET \
17636ac495dSmrg (OPTION_MASK_ISA_SSE3 \
17736ac495dSmrg | OPTION_MASK_ISA_SSSE3_UNSET \
17836ac495dSmrg | OPTION_MASK_ISA_SSE4A_UNSET )
17936ac495dSmrg #define OPTION_MASK_ISA_SSSE3_UNSET \
18036ac495dSmrg (OPTION_MASK_ISA_SSSE3 | OPTION_MASK_ISA_SSE4_1_UNSET)
18136ac495dSmrg #define OPTION_MASK_ISA_SSE4_1_UNSET \
18236ac495dSmrg (OPTION_MASK_ISA_SSE4_1 | OPTION_MASK_ISA_SSE4_2_UNSET)
18336ac495dSmrg #define OPTION_MASK_ISA_SSE4_2_UNSET \
18436ac495dSmrg (OPTION_MASK_ISA_SSE4_2 | OPTION_MASK_ISA_AVX_UNSET )
18536ac495dSmrg #define OPTION_MASK_ISA_AVX_UNSET \
18636ac495dSmrg (OPTION_MASK_ISA_AVX | OPTION_MASK_ISA_FMA_UNSET \
18736ac495dSmrg | OPTION_MASK_ISA_FMA4_UNSET | OPTION_MASK_ISA_F16C_UNSET \
188*8feb0f0bSmrg | OPTION_MASK_ISA_AVX2_UNSET )
18936ac495dSmrg #define OPTION_MASK_ISA_FMA_UNSET OPTION_MASK_ISA_FMA
19036ac495dSmrg #define OPTION_MASK_ISA_FXSR_UNSET OPTION_MASK_ISA_FXSR
19136ac495dSmrg #define OPTION_MASK_ISA_XSAVE_UNSET \
192a2dc1f3fSmrg (OPTION_MASK_ISA_XSAVE | OPTION_MASK_ISA_XSAVEOPT_UNSET \
193*8feb0f0bSmrg | OPTION_MASK_ISA_XSAVES_UNSET | OPTION_MASK_ISA_XSAVEC_UNSET \
194*8feb0f0bSmrg | OPTION_MASK_ISA_AVX_UNSET)
19536ac495dSmrg #define OPTION_MASK_ISA_XSAVEOPT_UNSET OPTION_MASK_ISA_XSAVEOPT
19636ac495dSmrg #define OPTION_MASK_ISA_AVX2_UNSET \
19736ac495dSmrg (OPTION_MASK_ISA_AVX2 | OPTION_MASK_ISA_AVX512F_UNSET)
19836ac495dSmrg #define OPTION_MASK_ISA_AVX512F_UNSET \
19936ac495dSmrg (OPTION_MASK_ISA_AVX512F | OPTION_MASK_ISA_AVX512CD_UNSET \
20036ac495dSmrg | OPTION_MASK_ISA_AVX512PF_UNSET | OPTION_MASK_ISA_AVX512ER_UNSET \
20136ac495dSmrg | OPTION_MASK_ISA_AVX512DQ_UNSET | OPTION_MASK_ISA_AVX512BW_UNSET \
202c0a68be4Smrg | OPTION_MASK_ISA_AVX512VL_UNSET | OPTION_MASK_ISA_AVX512IFMA_UNSET \
203c0a68be4Smrg | OPTION_MASK_ISA_AVX512VBMI2_UNSET \
204c0a68be4Smrg | OPTION_MASK_ISA_AVX512VNNI_UNSET \
205c0a68be4Smrg | OPTION_MASK_ISA_AVX512VPOPCNTDQ_UNSET \
206a2dc1f3fSmrg | OPTION_MASK_ISA_AVX512BITALG_UNSET)
20736ac495dSmrg #define OPTION_MASK_ISA_AVX512CD_UNSET OPTION_MASK_ISA_AVX512CD
20836ac495dSmrg #define OPTION_MASK_ISA_AVX512PF_UNSET OPTION_MASK_ISA_AVX512PF
20936ac495dSmrg #define OPTION_MASK_ISA_AVX512ER_UNSET OPTION_MASK_ISA_AVX512ER
21036ac495dSmrg #define OPTION_MASK_ISA_AVX512DQ_UNSET OPTION_MASK_ISA_AVX512DQ
21136ac495dSmrg #define OPTION_MASK_ISA_AVX512BW_UNSET \
21236ac495dSmrg (OPTION_MASK_ISA_AVX512BW | OPTION_MASK_ISA_AVX512VBMI_UNSET)
21336ac495dSmrg #define OPTION_MASK_ISA_AVX512VL_UNSET OPTION_MASK_ISA_AVX512VL
21436ac495dSmrg #define OPTION_MASK_ISA_AVX512IFMA_UNSET OPTION_MASK_ISA_AVX512IFMA
21536ac495dSmrg #define OPTION_MASK_ISA_AVX512VBMI_UNSET OPTION_MASK_ISA_AVX512VBMI
216*8feb0f0bSmrg #define OPTION_MASK_ISA2_AVX5124FMAPS_UNSET OPTION_MASK_ISA2_AVX5124FMAPS
217*8feb0f0bSmrg #define OPTION_MASK_ISA2_AVX5124VNNIW_UNSET OPTION_MASK_ISA2_AVX5124VNNIW
218a2dc1f3fSmrg #define OPTION_MASK_ISA_AVX512VBMI2_UNSET OPTION_MASK_ISA_AVX512VBMI2
219a2dc1f3fSmrg #define OPTION_MASK_ISA_AVX512VNNI_UNSET OPTION_MASK_ISA_AVX512VNNI
22036ac495dSmrg #define OPTION_MASK_ISA_AVX512VPOPCNTDQ_UNSET OPTION_MASK_ISA_AVX512VPOPCNTDQ
221a2dc1f3fSmrg #define OPTION_MASK_ISA_AVX512BITALG_UNSET OPTION_MASK_ISA_AVX512BITALG
222*8feb0f0bSmrg #define OPTION_MASK_ISA2_AVX512BF16_UNSET OPTION_MASK_ISA2_AVX512BF16
22336ac495dSmrg #define OPTION_MASK_ISA_RTM_UNSET OPTION_MASK_ISA_RTM
22436ac495dSmrg #define OPTION_MASK_ISA_PRFCHW_UNSET OPTION_MASK_ISA_PRFCHW
22536ac495dSmrg #define OPTION_MASK_ISA_RDSEED_UNSET OPTION_MASK_ISA_RDSEED
22636ac495dSmrg #define OPTION_MASK_ISA_ADX_UNSET OPTION_MASK_ISA_ADX
22736ac495dSmrg #define OPTION_MASK_ISA_PREFETCHWT1_UNSET OPTION_MASK_ISA_PREFETCHWT1
22836ac495dSmrg #define OPTION_MASK_ISA_CLFLUSHOPT_UNSET OPTION_MASK_ISA_CLFLUSHOPT
22936ac495dSmrg #define OPTION_MASK_ISA_XSAVEC_UNSET OPTION_MASK_ISA_XSAVEC
23036ac495dSmrg #define OPTION_MASK_ISA_XSAVES_UNSET OPTION_MASK_ISA_XSAVES
23136ac495dSmrg #define OPTION_MASK_ISA_CLWB_UNSET OPTION_MASK_ISA_CLWB
232*8feb0f0bSmrg #define OPTION_MASK_ISA2_MWAITX_UNSET OPTION_MASK_ISA2_MWAITX
233*8feb0f0bSmrg #define OPTION_MASK_ISA2_CLZERO_UNSET OPTION_MASK_ISA2_CLZERO
23436ac495dSmrg #define OPTION_MASK_ISA_PKU_UNSET OPTION_MASK_ISA_PKU
235*8feb0f0bSmrg #define OPTION_MASK_ISA2_RDPID_UNSET OPTION_MASK_ISA2_RDPID
236a2dc1f3fSmrg #define OPTION_MASK_ISA_GFNI_UNSET OPTION_MASK_ISA_GFNI
237a2dc1f3fSmrg #define OPTION_MASK_ISA_SHSTK_UNSET OPTION_MASK_ISA_SHSTK
238*8feb0f0bSmrg #define OPTION_MASK_ISA2_VAES_UNSET OPTION_MASK_ISA2_VAES
239a2dc1f3fSmrg #define OPTION_MASK_ISA_VPCLMULQDQ_UNSET OPTION_MASK_ISA_VPCLMULQDQ
240a2dc1f3fSmrg #define OPTION_MASK_ISA_MOVDIRI_UNSET OPTION_MASK_ISA_MOVDIRI
241*8feb0f0bSmrg #define OPTION_MASK_ISA2_MOVDIR64B_UNSET OPTION_MASK_ISA2_MOVDIR64B
242*8feb0f0bSmrg #define OPTION_MASK_ISA2_WAITPKG_UNSET OPTION_MASK_ISA2_WAITPKG
243*8feb0f0bSmrg #define OPTION_MASK_ISA2_CLDEMOTE_UNSET OPTION_MASK_ISA2_CLDEMOTE
244*8feb0f0bSmrg #define OPTION_MASK_ISA2_ENQCMD_UNSET OPTION_MASK_ISA2_ENQCMD
245*8feb0f0bSmrg #define OPTION_MASK_ISA2_AVX512VP2INTERSECT_UNSET OPTION_MASK_ISA2_AVX512VP2INTERSECT
24636ac495dSmrg
24736ac495dSmrg /* SSE4 includes both SSE4.1 and SSE4.2. -mno-sse4 should the same
24836ac495dSmrg as -mno-sse4.1. */
24936ac495dSmrg #define OPTION_MASK_ISA_SSE4_UNSET OPTION_MASK_ISA_SSE4_1_UNSET
25036ac495dSmrg
25136ac495dSmrg #define OPTION_MASK_ISA_SSE4A_UNSET \
25236ac495dSmrg (OPTION_MASK_ISA_SSE4A | OPTION_MASK_ISA_FMA4_UNSET)
25336ac495dSmrg
25436ac495dSmrg #define OPTION_MASK_ISA_FMA4_UNSET \
25536ac495dSmrg (OPTION_MASK_ISA_FMA4 | OPTION_MASK_ISA_XOP_UNSET)
25636ac495dSmrg #define OPTION_MASK_ISA_XOP_UNSET OPTION_MASK_ISA_XOP
25736ac495dSmrg #define OPTION_MASK_ISA_LWP_UNSET OPTION_MASK_ISA_LWP
25836ac495dSmrg
25936ac495dSmrg #define OPTION_MASK_ISA_AES_UNSET OPTION_MASK_ISA_AES
26036ac495dSmrg #define OPTION_MASK_ISA_SHA_UNSET OPTION_MASK_ISA_SHA
26136ac495dSmrg #define OPTION_MASK_ISA_PCLMUL_UNSET OPTION_MASK_ISA_PCLMUL
26236ac495dSmrg #define OPTION_MASK_ISA_ABM_UNSET OPTION_MASK_ISA_ABM
263*8feb0f0bSmrg #define OPTION_MASK_ISA2_PCONFIG_UNSET OPTION_MASK_ISA2_PCONFIG
264*8feb0f0bSmrg #define OPTION_MASK_ISA2_WBNOINVD_UNSET OPTION_MASK_ISA2_WBNOINVD
265*8feb0f0bSmrg #define OPTION_MASK_ISA2_SGX_UNSET OPTION_MASK_ISA2_SGX
26636ac495dSmrg #define OPTION_MASK_ISA_BMI_UNSET OPTION_MASK_ISA_BMI
26736ac495dSmrg #define OPTION_MASK_ISA_BMI2_UNSET OPTION_MASK_ISA_BMI2
26836ac495dSmrg #define OPTION_MASK_ISA_LZCNT_UNSET OPTION_MASK_ISA_LZCNT
26936ac495dSmrg #define OPTION_MASK_ISA_TBM_UNSET OPTION_MASK_ISA_TBM
27036ac495dSmrg #define OPTION_MASK_ISA_POPCNT_UNSET OPTION_MASK_ISA_POPCNT
271*8feb0f0bSmrg #define OPTION_MASK_ISA2_CX16_UNSET OPTION_MASK_ISA2_CX16
27236ac495dSmrg #define OPTION_MASK_ISA_SAHF_UNSET OPTION_MASK_ISA_SAHF
273*8feb0f0bSmrg #define OPTION_MASK_ISA2_MOVBE_UNSET OPTION_MASK_ISA2_MOVBE
27436ac495dSmrg #define OPTION_MASK_ISA_CRC32_UNSET OPTION_MASK_ISA_CRC32
27536ac495dSmrg
27636ac495dSmrg #define OPTION_MASK_ISA_FSGSBASE_UNSET OPTION_MASK_ISA_FSGSBASE
27736ac495dSmrg #define OPTION_MASK_ISA_RDRND_UNSET OPTION_MASK_ISA_RDRND
278*8feb0f0bSmrg #define OPTION_MASK_ISA2_PTWRITE_UNSET OPTION_MASK_ISA2_PTWRITE
27936ac495dSmrg #define OPTION_MASK_ISA_F16C_UNSET OPTION_MASK_ISA_F16C
28036ac495dSmrg
28136ac495dSmrg #define OPTION_MASK_ISA_GENERAL_REGS_ONLY_UNSET \
28236ac495dSmrg (OPTION_MASK_ISA_MMX_UNSET \
283a2dc1f3fSmrg | OPTION_MASK_ISA_SSE_UNSET)
284a2dc1f3fSmrg
285a2dc1f3fSmrg #define OPTION_MASK_ISA2_AVX512F_UNSET \
286*8feb0f0bSmrg (OPTION_MASK_ISA2_AVX512BF16_UNSET \
287*8feb0f0bSmrg | OPTION_MASK_ISA2_AVX5124FMAPS_UNSET \
288*8feb0f0bSmrg | OPTION_MASK_ISA2_AVX5124VNNIW_UNSET \
289*8feb0f0bSmrg | OPTION_MASK_ISA2_AVX512VP2INTERSECT_UNSET)
290a2dc1f3fSmrg #define OPTION_MASK_ISA2_GENERAL_REGS_ONLY_UNSET \
291c0a68be4Smrg (OPTION_MASK_ISA2_AVX512F_UNSET)
292c0a68be4Smrg
293*8feb0f0bSmrg #define OPTION_MASK_ISA2_AVX512BW_UNSET OPTION_MASK_ISA2_AVX512BF16_UNSET
294*8feb0f0bSmrg
295c0a68be4Smrg /* Set 1 << value as value of -malign-FLAG option. */
296c0a68be4Smrg
297c0a68be4Smrg static void
set_malign_value(const char ** flag,unsigned value)298c0a68be4Smrg set_malign_value (const char **flag, unsigned value)
299c0a68be4Smrg {
300c0a68be4Smrg char *r = XNEWVEC (char, 6);
301c0a68be4Smrg sprintf (r, "%d", 1 << value);
302c0a68be4Smrg *flag = r;
303c0a68be4Smrg }
30436ac495dSmrg
30536ac495dSmrg /* Implement TARGET_HANDLE_OPTION. */
30636ac495dSmrg
30736ac495dSmrg bool
ix86_handle_option(struct gcc_options * opts,struct gcc_options * opts_set ATTRIBUTE_UNUSED,const struct cl_decoded_option * decoded,location_t loc)30836ac495dSmrg ix86_handle_option (struct gcc_options *opts,
30936ac495dSmrg struct gcc_options *opts_set ATTRIBUTE_UNUSED,
31036ac495dSmrg const struct cl_decoded_option *decoded,
31136ac495dSmrg location_t loc)
31236ac495dSmrg {
31336ac495dSmrg size_t code = decoded->opt_index;
31436ac495dSmrg int value = decoded->value;
31536ac495dSmrg
31636ac495dSmrg switch (code)
31736ac495dSmrg {
31836ac495dSmrg case OPT_mgeneral_regs_only:
31936ac495dSmrg if (value)
32036ac495dSmrg {
321c0a68be4Smrg /* Disable MMX, SSE and x87 instructions if only
32236ac495dSmrg general registers are allowed. */
32336ac495dSmrg opts->x_ix86_isa_flags
32436ac495dSmrg &= ~OPTION_MASK_ISA_GENERAL_REGS_ONLY_UNSET;
325a2dc1f3fSmrg opts->x_ix86_isa_flags2
326a2dc1f3fSmrg &= ~OPTION_MASK_ISA2_GENERAL_REGS_ONLY_UNSET;
32736ac495dSmrg opts->x_ix86_isa_flags_explicit
32836ac495dSmrg |= OPTION_MASK_ISA_GENERAL_REGS_ONLY_UNSET;
329a2dc1f3fSmrg opts->x_ix86_isa_flags2_explicit
330a2dc1f3fSmrg |= OPTION_MASK_ISA2_GENERAL_REGS_ONLY_UNSET;
33136ac495dSmrg
33236ac495dSmrg opts->x_target_flags &= ~MASK_80387;
33336ac495dSmrg }
33436ac495dSmrg else
33536ac495dSmrg gcc_unreachable ();
33636ac495dSmrg return true;
33736ac495dSmrg
33836ac495dSmrg case OPT_mmmx:
33936ac495dSmrg if (value)
34036ac495dSmrg {
34136ac495dSmrg opts->x_ix86_isa_flags |= OPTION_MASK_ISA_MMX_SET;
34236ac495dSmrg opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_MMX_SET;
34336ac495dSmrg }
34436ac495dSmrg else
34536ac495dSmrg {
34636ac495dSmrg opts->x_ix86_isa_flags &= ~OPTION_MASK_ISA_MMX_UNSET;
34736ac495dSmrg opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_MMX_UNSET;
34836ac495dSmrg }
34936ac495dSmrg return true;
35036ac495dSmrg
35136ac495dSmrg case OPT_m3dnow:
35236ac495dSmrg if (value)
35336ac495dSmrg {
35436ac495dSmrg opts->x_ix86_isa_flags |= OPTION_MASK_ISA_3DNOW_SET;
35536ac495dSmrg opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_3DNOW_SET;
35636ac495dSmrg }
35736ac495dSmrg else
35836ac495dSmrg {
35936ac495dSmrg opts->x_ix86_isa_flags &= ~OPTION_MASK_ISA_3DNOW_UNSET;
36036ac495dSmrg opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_3DNOW_UNSET;
36136ac495dSmrg }
36236ac495dSmrg return true;
36336ac495dSmrg
36436ac495dSmrg case OPT_m3dnowa:
36536ac495dSmrg if (value)
36636ac495dSmrg {
36736ac495dSmrg opts->x_ix86_isa_flags |= OPTION_MASK_ISA_3DNOW_A_SET;
36836ac495dSmrg opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_3DNOW_A_SET;
36936ac495dSmrg }
37036ac495dSmrg else
37136ac495dSmrg {
37236ac495dSmrg opts->x_ix86_isa_flags &= ~OPTION_MASK_ISA_3DNOW_A_UNSET;
37336ac495dSmrg opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_3DNOW_A_UNSET;
37436ac495dSmrg }
37536ac495dSmrg return true;
37636ac495dSmrg
37736ac495dSmrg case OPT_msse:
37836ac495dSmrg if (value)
37936ac495dSmrg {
38036ac495dSmrg opts->x_ix86_isa_flags |= OPTION_MASK_ISA_SSE_SET;
38136ac495dSmrg opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_SSE_SET;
38236ac495dSmrg }
38336ac495dSmrg else
38436ac495dSmrg {
38536ac495dSmrg opts->x_ix86_isa_flags &= ~OPTION_MASK_ISA_SSE_UNSET;
38636ac495dSmrg opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_SSE_UNSET;
387a2dc1f3fSmrg opts->x_ix86_isa_flags2 &= ~OPTION_MASK_ISA2_AVX512F_UNSET;
388a2dc1f3fSmrg opts->x_ix86_isa_flags2_explicit |= OPTION_MASK_ISA2_AVX512F_UNSET;
38936ac495dSmrg }
39036ac495dSmrg return true;
39136ac495dSmrg
39236ac495dSmrg case OPT_msse2:
39336ac495dSmrg if (value)
39436ac495dSmrg {
39536ac495dSmrg opts->x_ix86_isa_flags |= OPTION_MASK_ISA_SSE2_SET;
39636ac495dSmrg opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_SSE2_SET;
39736ac495dSmrg }
39836ac495dSmrg else
39936ac495dSmrg {
40036ac495dSmrg opts->x_ix86_isa_flags &= ~OPTION_MASK_ISA_SSE2_UNSET;
40136ac495dSmrg opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_SSE2_UNSET;
402a2dc1f3fSmrg opts->x_ix86_isa_flags2 &= ~OPTION_MASK_ISA2_AVX512F_UNSET;
403a2dc1f3fSmrg opts->x_ix86_isa_flags2_explicit |= OPTION_MASK_ISA2_AVX512F_UNSET;
40436ac495dSmrg }
40536ac495dSmrg return true;
40636ac495dSmrg
40736ac495dSmrg case OPT_msse3:
40836ac495dSmrg if (value)
40936ac495dSmrg {
41036ac495dSmrg opts->x_ix86_isa_flags |= OPTION_MASK_ISA_SSE3_SET;
41136ac495dSmrg opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_SSE3_SET;
41236ac495dSmrg }
41336ac495dSmrg else
41436ac495dSmrg {
41536ac495dSmrg opts->x_ix86_isa_flags &= ~OPTION_MASK_ISA_SSE3_UNSET;
41636ac495dSmrg opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_SSE3_UNSET;
417a2dc1f3fSmrg opts->x_ix86_isa_flags2 &= ~OPTION_MASK_ISA2_AVX512F_UNSET;
418a2dc1f3fSmrg opts->x_ix86_isa_flags2_explicit |= OPTION_MASK_ISA2_AVX512F_UNSET;
41936ac495dSmrg }
42036ac495dSmrg return true;
42136ac495dSmrg
42236ac495dSmrg case OPT_mssse3:
42336ac495dSmrg if (value)
42436ac495dSmrg {
42536ac495dSmrg opts->x_ix86_isa_flags |= OPTION_MASK_ISA_SSSE3_SET;
42636ac495dSmrg opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_SSSE3_SET;
42736ac495dSmrg }
42836ac495dSmrg else
42936ac495dSmrg {
43036ac495dSmrg opts->x_ix86_isa_flags &= ~OPTION_MASK_ISA_SSSE3_UNSET;
43136ac495dSmrg opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_SSSE3_UNSET;
432a2dc1f3fSmrg opts->x_ix86_isa_flags2 &= ~OPTION_MASK_ISA2_AVX512F_UNSET;
433a2dc1f3fSmrg opts->x_ix86_isa_flags2_explicit |= OPTION_MASK_ISA2_AVX512F_UNSET;
43436ac495dSmrg }
43536ac495dSmrg return true;
43636ac495dSmrg
43736ac495dSmrg case OPT_msse4_1:
43836ac495dSmrg if (value)
43936ac495dSmrg {
44036ac495dSmrg opts->x_ix86_isa_flags |= OPTION_MASK_ISA_SSE4_1_SET;
44136ac495dSmrg opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_SSE4_1_SET;
44236ac495dSmrg }
44336ac495dSmrg else
44436ac495dSmrg {
44536ac495dSmrg opts->x_ix86_isa_flags &= ~OPTION_MASK_ISA_SSE4_1_UNSET;
44636ac495dSmrg opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_SSE4_1_UNSET;
447a2dc1f3fSmrg opts->x_ix86_isa_flags2 &= ~OPTION_MASK_ISA2_AVX512F_UNSET;
448a2dc1f3fSmrg opts->x_ix86_isa_flags2_explicit |= OPTION_MASK_ISA2_AVX512F_UNSET;
44936ac495dSmrg }
45036ac495dSmrg return true;
45136ac495dSmrg
45236ac495dSmrg case OPT_msse4_2:
45336ac495dSmrg if (value)
45436ac495dSmrg {
45536ac495dSmrg opts->x_ix86_isa_flags |= OPTION_MASK_ISA_SSE4_2_SET;
45636ac495dSmrg opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_SSE4_2_SET;
45736ac495dSmrg }
45836ac495dSmrg else
45936ac495dSmrg {
46036ac495dSmrg opts->x_ix86_isa_flags &= ~OPTION_MASK_ISA_SSE4_2_UNSET;
46136ac495dSmrg opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_SSE4_2_UNSET;
462a2dc1f3fSmrg opts->x_ix86_isa_flags2 &= ~OPTION_MASK_ISA2_AVX512F_UNSET;
463a2dc1f3fSmrg opts->x_ix86_isa_flags2_explicit |= OPTION_MASK_ISA2_AVX512F_UNSET;
46436ac495dSmrg }
46536ac495dSmrg return true;
46636ac495dSmrg
46736ac495dSmrg case OPT_mavx:
46836ac495dSmrg if (value)
46936ac495dSmrg {
47036ac495dSmrg opts->x_ix86_isa_flags |= OPTION_MASK_ISA_AVX_SET;
47136ac495dSmrg opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_AVX_SET;
47236ac495dSmrg }
47336ac495dSmrg else
47436ac495dSmrg {
47536ac495dSmrg opts->x_ix86_isa_flags &= ~OPTION_MASK_ISA_AVX_UNSET;
47636ac495dSmrg opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_AVX_UNSET;
477a2dc1f3fSmrg opts->x_ix86_isa_flags2 &= ~OPTION_MASK_ISA2_AVX512F_UNSET;
478a2dc1f3fSmrg opts->x_ix86_isa_flags2_explicit |= OPTION_MASK_ISA2_AVX512F_UNSET;
47936ac495dSmrg }
48036ac495dSmrg return true;
48136ac495dSmrg
48236ac495dSmrg case OPT_mavx2:
48336ac495dSmrg if (value)
48436ac495dSmrg {
48536ac495dSmrg opts->x_ix86_isa_flags |= OPTION_MASK_ISA_AVX2_SET;
48636ac495dSmrg opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_AVX2_SET;
48736ac495dSmrg }
48836ac495dSmrg else
48936ac495dSmrg {
49036ac495dSmrg opts->x_ix86_isa_flags &= ~OPTION_MASK_ISA_AVX2_UNSET;
49136ac495dSmrg opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_AVX2_UNSET;
492a2dc1f3fSmrg opts->x_ix86_isa_flags2 &= ~OPTION_MASK_ISA2_AVX512F_UNSET;
493a2dc1f3fSmrg opts->x_ix86_isa_flags2_explicit |= OPTION_MASK_ISA2_AVX512F_UNSET;
49436ac495dSmrg }
49536ac495dSmrg return true;
49636ac495dSmrg
49736ac495dSmrg case OPT_mavx512f:
49836ac495dSmrg if (value)
49936ac495dSmrg {
50036ac495dSmrg opts->x_ix86_isa_flags |= OPTION_MASK_ISA_AVX512F_SET;
50136ac495dSmrg opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_AVX512F_SET;
50236ac495dSmrg }
50336ac495dSmrg else
50436ac495dSmrg {
50536ac495dSmrg opts->x_ix86_isa_flags &= ~OPTION_MASK_ISA_AVX512F_UNSET;
50636ac495dSmrg opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_AVX512F_UNSET;
507a2dc1f3fSmrg opts->x_ix86_isa_flags2 &= ~OPTION_MASK_ISA2_AVX512F_UNSET;
508a2dc1f3fSmrg opts->x_ix86_isa_flags2_explicit |= OPTION_MASK_ISA2_AVX512F_UNSET;
50936ac495dSmrg }
51036ac495dSmrg return true;
51136ac495dSmrg
51236ac495dSmrg case OPT_mavx512cd:
51336ac495dSmrg if (value)
51436ac495dSmrg {
51536ac495dSmrg opts->x_ix86_isa_flags |= OPTION_MASK_ISA_AVX512CD_SET;
51636ac495dSmrg opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_AVX512CD_SET;
51736ac495dSmrg }
51836ac495dSmrg else
51936ac495dSmrg {
52036ac495dSmrg opts->x_ix86_isa_flags &= ~OPTION_MASK_ISA_AVX512CD_UNSET;
52136ac495dSmrg opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_AVX512CD_UNSET;
52236ac495dSmrg }
52336ac495dSmrg return true;
52436ac495dSmrg
52536ac495dSmrg case OPT_mavx512pf:
52636ac495dSmrg if (value)
52736ac495dSmrg {
52836ac495dSmrg opts->x_ix86_isa_flags |= OPTION_MASK_ISA_AVX512PF_SET;
52936ac495dSmrg opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_AVX512PF_SET;
53036ac495dSmrg }
53136ac495dSmrg else
53236ac495dSmrg {
53336ac495dSmrg opts->x_ix86_isa_flags &= ~OPTION_MASK_ISA_AVX512PF_UNSET;
53436ac495dSmrg opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_AVX512PF_UNSET;
53536ac495dSmrg }
53636ac495dSmrg return true;
53736ac495dSmrg
53836ac495dSmrg case OPT_mavx512er:
53936ac495dSmrg if (value)
54036ac495dSmrg {
54136ac495dSmrg opts->x_ix86_isa_flags |= OPTION_MASK_ISA_AVX512ER_SET;
54236ac495dSmrg opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_AVX512ER_SET;
54336ac495dSmrg }
54436ac495dSmrg else
54536ac495dSmrg {
54636ac495dSmrg opts->x_ix86_isa_flags &= ~OPTION_MASK_ISA_AVX512ER_UNSET;
54736ac495dSmrg opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_AVX512ER_UNSET;
54836ac495dSmrg }
54936ac495dSmrg return true;
55036ac495dSmrg
55136ac495dSmrg case OPT_mrdpid:
55236ac495dSmrg if (value)
55336ac495dSmrg {
554*8feb0f0bSmrg opts->x_ix86_isa_flags2 |= OPTION_MASK_ISA2_RDPID_SET;
555*8feb0f0bSmrg opts->x_ix86_isa_flags2_explicit |= OPTION_MASK_ISA2_RDPID_SET;
55636ac495dSmrg }
55736ac495dSmrg else
55836ac495dSmrg {
559*8feb0f0bSmrg opts->x_ix86_isa_flags2 &= ~OPTION_MASK_ISA2_RDPID_UNSET;
560*8feb0f0bSmrg opts->x_ix86_isa_flags2_explicit |= OPTION_MASK_ISA2_RDPID_UNSET;
56136ac495dSmrg }
56236ac495dSmrg return true;
56336ac495dSmrg
564a2dc1f3fSmrg case OPT_mgfni:
565a2dc1f3fSmrg if (value)
566a2dc1f3fSmrg {
567a2dc1f3fSmrg opts->x_ix86_isa_flags |= OPTION_MASK_ISA_GFNI_SET;
568a2dc1f3fSmrg opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_GFNI_SET;
569a2dc1f3fSmrg }
570a2dc1f3fSmrg else
571a2dc1f3fSmrg {
572a2dc1f3fSmrg opts->x_ix86_isa_flags &= ~OPTION_MASK_ISA_GFNI_UNSET;
573a2dc1f3fSmrg opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_GFNI_UNSET;
574a2dc1f3fSmrg }
575a2dc1f3fSmrg return true;
576a2dc1f3fSmrg
577a2dc1f3fSmrg case OPT_mshstk:
578a2dc1f3fSmrg if (value)
579a2dc1f3fSmrg {
580a2dc1f3fSmrg opts->x_ix86_isa_flags |= OPTION_MASK_ISA_SHSTK_SET;
581a2dc1f3fSmrg opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_SHSTK_SET;
582a2dc1f3fSmrg }
583a2dc1f3fSmrg else
584a2dc1f3fSmrg {
585a2dc1f3fSmrg opts->x_ix86_isa_flags &= ~OPTION_MASK_ISA_SHSTK_UNSET;
586a2dc1f3fSmrg opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_SHSTK_UNSET;
587a2dc1f3fSmrg }
588a2dc1f3fSmrg return true;
589a2dc1f3fSmrg
590a2dc1f3fSmrg case OPT_mvaes:
591a2dc1f3fSmrg if (value)
592a2dc1f3fSmrg {
593*8feb0f0bSmrg opts->x_ix86_isa_flags2 |= OPTION_MASK_ISA2_VAES_SET;
594*8feb0f0bSmrg opts->x_ix86_isa_flags2_explicit |= OPTION_MASK_ISA2_VAES_SET;
595a2dc1f3fSmrg }
596a2dc1f3fSmrg else
597a2dc1f3fSmrg {
598*8feb0f0bSmrg opts->x_ix86_isa_flags2 &= ~OPTION_MASK_ISA2_VAES_UNSET;
599*8feb0f0bSmrg opts->x_ix86_isa_flags2_explicit |= OPTION_MASK_ISA2_VAES_UNSET;
600a2dc1f3fSmrg }
601a2dc1f3fSmrg return true;
602a2dc1f3fSmrg
603a2dc1f3fSmrg case OPT_mvpclmulqdq:
604a2dc1f3fSmrg if (value)
605a2dc1f3fSmrg {
606a2dc1f3fSmrg opts->x_ix86_isa_flags |= OPTION_MASK_ISA_VPCLMULQDQ_SET;
607a2dc1f3fSmrg opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_VPCLMULQDQ_SET;
608a2dc1f3fSmrg }
609a2dc1f3fSmrg else
610a2dc1f3fSmrg {
611a2dc1f3fSmrg opts->x_ix86_isa_flags &= ~OPTION_MASK_ISA_VPCLMULQDQ_UNSET;
612a2dc1f3fSmrg opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_VPCLMULQDQ_UNSET;
613a2dc1f3fSmrg }
614a2dc1f3fSmrg return true;
615a2dc1f3fSmrg
616a2dc1f3fSmrg case OPT_mmovdiri:
617a2dc1f3fSmrg if (value)
618a2dc1f3fSmrg {
619a2dc1f3fSmrg opts->x_ix86_isa_flags |= OPTION_MASK_ISA_MOVDIRI_SET;
620a2dc1f3fSmrg opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_MOVDIRI_SET;
621a2dc1f3fSmrg }
622a2dc1f3fSmrg else
623a2dc1f3fSmrg {
624a2dc1f3fSmrg opts->x_ix86_isa_flags &= ~OPTION_MASK_ISA_MOVDIRI_UNSET;
625a2dc1f3fSmrg opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_MOVDIRI_UNSET;
626a2dc1f3fSmrg }
627a2dc1f3fSmrg return true;
628a2dc1f3fSmrg
629a2dc1f3fSmrg case OPT_mmovdir64b:
630a2dc1f3fSmrg if (value)
631a2dc1f3fSmrg {
632*8feb0f0bSmrg opts->x_ix86_isa_flags2 |= OPTION_MASK_ISA2_MOVDIR64B_SET;
633*8feb0f0bSmrg opts->x_ix86_isa_flags2_explicit |= OPTION_MASK_ISA2_MOVDIR64B_SET;
634a2dc1f3fSmrg }
635a2dc1f3fSmrg else
636a2dc1f3fSmrg {
637*8feb0f0bSmrg opts->x_ix86_isa_flags2 &= ~OPTION_MASK_ISA2_MOVDIR64B_UNSET;
638*8feb0f0bSmrg opts->x_ix86_isa_flags2_explicit |= OPTION_MASK_ISA2_MOVDIR64B_UNSET;
639a2dc1f3fSmrg }
640a2dc1f3fSmrg return true;
641a2dc1f3fSmrg
642c0a68be4Smrg case OPT_mcldemote:
643c0a68be4Smrg if (value)
644c0a68be4Smrg {
645*8feb0f0bSmrg opts->x_ix86_isa_flags2 |= OPTION_MASK_ISA2_CLDEMOTE_SET;
646*8feb0f0bSmrg opts->x_ix86_isa_flags2_explicit |= OPTION_MASK_ISA2_CLDEMOTE_SET;
647c0a68be4Smrg }
648c0a68be4Smrg else
649c0a68be4Smrg {
650*8feb0f0bSmrg opts->x_ix86_isa_flags2 &= ~OPTION_MASK_ISA2_CLDEMOTE_UNSET;
651*8feb0f0bSmrg opts->x_ix86_isa_flags2_explicit |= OPTION_MASK_ISA2_CLDEMOTE_UNSET;
652c0a68be4Smrg }
653c0a68be4Smrg return true;
654c0a68be4Smrg
655c0a68be4Smrg case OPT_mwaitpkg:
656c0a68be4Smrg if (value)
657c0a68be4Smrg {
658*8feb0f0bSmrg opts->x_ix86_isa_flags2 |= OPTION_MASK_ISA2_WAITPKG_SET;
659*8feb0f0bSmrg opts->x_ix86_isa_flags2_explicit |= OPTION_MASK_ISA2_WAITPKG_SET;
660c0a68be4Smrg }
661c0a68be4Smrg else
662c0a68be4Smrg {
663*8feb0f0bSmrg opts->x_ix86_isa_flags2 &= ~OPTION_MASK_ISA2_WAITPKG_UNSET;
664*8feb0f0bSmrg opts->x_ix86_isa_flags2_explicit |= OPTION_MASK_ISA2_WAITPKG_UNSET;
665*8feb0f0bSmrg }
666*8feb0f0bSmrg return true;
667*8feb0f0bSmrg
668*8feb0f0bSmrg case OPT_menqcmd:
669*8feb0f0bSmrg if (value)
670*8feb0f0bSmrg {
671*8feb0f0bSmrg opts->x_ix86_isa_flags2 |= OPTION_MASK_ISA2_ENQCMD_SET;
672*8feb0f0bSmrg opts->x_ix86_isa_flags2_explicit |= OPTION_MASK_ISA2_ENQCMD_SET;
673*8feb0f0bSmrg }
674*8feb0f0bSmrg else
675*8feb0f0bSmrg {
676*8feb0f0bSmrg opts->x_ix86_isa_flags2 &= ~OPTION_MASK_ISA2_ENQCMD_UNSET;
677*8feb0f0bSmrg opts->x_ix86_isa_flags2_explicit |= OPTION_MASK_ISA2_ENQCMD_UNSET;
678c0a68be4Smrg }
679c0a68be4Smrg return true;
680c0a68be4Smrg
68136ac495dSmrg case OPT_mavx5124fmaps:
68236ac495dSmrg if (value)
68336ac495dSmrg {
684*8feb0f0bSmrg opts->x_ix86_isa_flags2 |= OPTION_MASK_ISA2_AVX5124FMAPS_SET;
685*8feb0f0bSmrg opts->x_ix86_isa_flags2_explicit |= OPTION_MASK_ISA2_AVX5124FMAPS_SET;
68636ac495dSmrg opts->x_ix86_isa_flags |= OPTION_MASK_ISA_AVX512F_SET;
68736ac495dSmrg opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_AVX512F_SET;
68836ac495dSmrg }
68936ac495dSmrg else
69036ac495dSmrg {
691*8feb0f0bSmrg opts->x_ix86_isa_flags2 &= ~OPTION_MASK_ISA2_AVX5124FMAPS_UNSET;
692*8feb0f0bSmrg opts->x_ix86_isa_flags2_explicit |= OPTION_MASK_ISA2_AVX5124FMAPS_UNSET;
69336ac495dSmrg }
69436ac495dSmrg return true;
69536ac495dSmrg
69636ac495dSmrg case OPT_mavx5124vnniw:
69736ac495dSmrg if (value)
69836ac495dSmrg {
699*8feb0f0bSmrg opts->x_ix86_isa_flags2 |= OPTION_MASK_ISA2_AVX5124VNNIW_SET;
700*8feb0f0bSmrg opts->x_ix86_isa_flags2_explicit |= OPTION_MASK_ISA2_AVX5124VNNIW_SET;
70136ac495dSmrg opts->x_ix86_isa_flags |= OPTION_MASK_ISA_AVX512F_SET;
70236ac495dSmrg opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_AVX512F_SET;
70336ac495dSmrg }
70436ac495dSmrg else
70536ac495dSmrg {
706*8feb0f0bSmrg opts->x_ix86_isa_flags2 &= ~OPTION_MASK_ISA2_AVX5124VNNIW_UNSET;
707*8feb0f0bSmrg opts->x_ix86_isa_flags2_explicit |= OPTION_MASK_ISA2_AVX5124VNNIW_UNSET;
70836ac495dSmrg }
70936ac495dSmrg return true;
71036ac495dSmrg
711a2dc1f3fSmrg case OPT_mavx512vbmi2:
71236ac495dSmrg if (value)
71336ac495dSmrg {
714a2dc1f3fSmrg opts->x_ix86_isa_flags |= OPTION_MASK_ISA_AVX512VBMI2_SET;
715a2dc1f3fSmrg opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_AVX512VBMI2_SET;
71636ac495dSmrg }
71736ac495dSmrg else
71836ac495dSmrg {
719a2dc1f3fSmrg opts->x_ix86_isa_flags &= ~OPTION_MASK_ISA_AVX512VBMI2_UNSET;
720a2dc1f3fSmrg opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_AVX512VBMI2_UNSET;
721a2dc1f3fSmrg }
722a2dc1f3fSmrg return true;
723a2dc1f3fSmrg
724a2dc1f3fSmrg case OPT_mavx512vnni:
725a2dc1f3fSmrg if (value)
726a2dc1f3fSmrg {
727a2dc1f3fSmrg opts->x_ix86_isa_flags |= OPTION_MASK_ISA_AVX512VNNI_SET;
728a2dc1f3fSmrg opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_AVX512VNNI_SET;
729a2dc1f3fSmrg }
730a2dc1f3fSmrg else
731a2dc1f3fSmrg {
732a2dc1f3fSmrg opts->x_ix86_isa_flags &= ~OPTION_MASK_ISA_AVX512VNNI_UNSET;
733a2dc1f3fSmrg opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_AVX512VNNI_UNSET;
734a2dc1f3fSmrg }
735a2dc1f3fSmrg return true;
736a2dc1f3fSmrg
737a2dc1f3fSmrg case OPT_mavx512vpopcntdq:
738a2dc1f3fSmrg if (value)
739a2dc1f3fSmrg {
740a2dc1f3fSmrg opts->x_ix86_isa_flags |= OPTION_MASK_ISA_AVX512VPOPCNTDQ_SET;
741a2dc1f3fSmrg opts->x_ix86_isa_flags_explicit
742a2dc1f3fSmrg |= OPTION_MASK_ISA_AVX512VPOPCNTDQ_SET;
743a2dc1f3fSmrg }
744a2dc1f3fSmrg else
745a2dc1f3fSmrg {
746a2dc1f3fSmrg opts->x_ix86_isa_flags &= ~OPTION_MASK_ISA_AVX512VPOPCNTDQ_UNSET;
747a2dc1f3fSmrg opts->x_ix86_isa_flags_explicit
748a2dc1f3fSmrg |= OPTION_MASK_ISA_AVX512VPOPCNTDQ_UNSET;
749a2dc1f3fSmrg }
750a2dc1f3fSmrg return true;
751a2dc1f3fSmrg
752a2dc1f3fSmrg case OPT_mavx512bitalg:
753a2dc1f3fSmrg if (value)
754a2dc1f3fSmrg {
755a2dc1f3fSmrg opts->x_ix86_isa_flags |= OPTION_MASK_ISA_AVX512BITALG_SET;
756a2dc1f3fSmrg opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_AVX512BITALG_SET;
757a2dc1f3fSmrg }
758a2dc1f3fSmrg else
759a2dc1f3fSmrg {
760a2dc1f3fSmrg opts->x_ix86_isa_flags &= ~OPTION_MASK_ISA_AVX512BITALG_UNSET;
761a2dc1f3fSmrg opts->x_ix86_isa_flags_explicit
762a2dc1f3fSmrg |= OPTION_MASK_ISA_AVX512BITALG_UNSET;
76336ac495dSmrg }
76436ac495dSmrg return true;
76536ac495dSmrg
766*8feb0f0bSmrg case OPT_mavx512bf16:
76736ac495dSmrg if (value)
76836ac495dSmrg {
769*8feb0f0bSmrg opts->x_ix86_isa_flags2 |= OPTION_MASK_ISA2_AVX512BF16_SET;
770*8feb0f0bSmrg opts->x_ix86_isa_flags2_explicit |= OPTION_MASK_ISA2_AVX512BF16_SET;
771*8feb0f0bSmrg opts->x_ix86_isa_flags |= OPTION_MASK_ISA_AVX512BW_SET;
772*8feb0f0bSmrg opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_AVX512BW_SET;
77336ac495dSmrg }
77436ac495dSmrg else
77536ac495dSmrg {
776*8feb0f0bSmrg opts->x_ix86_isa_flags2 &= ~OPTION_MASK_ISA2_AVX512BF16_UNSET;
777*8feb0f0bSmrg opts->x_ix86_isa_flags2_explicit |= OPTION_MASK_ISA2_AVX512BF16_UNSET;
778*8feb0f0bSmrg }
779*8feb0f0bSmrg return true;
780*8feb0f0bSmrg
781*8feb0f0bSmrg case OPT_msgx:
782*8feb0f0bSmrg if (value)
783*8feb0f0bSmrg {
784*8feb0f0bSmrg opts->x_ix86_isa_flags2 |= OPTION_MASK_ISA2_SGX_SET;
785*8feb0f0bSmrg opts->x_ix86_isa_flags2_explicit |= OPTION_MASK_ISA2_SGX_SET;
786*8feb0f0bSmrg }
787*8feb0f0bSmrg else
788*8feb0f0bSmrg {
789*8feb0f0bSmrg opts->x_ix86_isa_flags2 &= ~OPTION_MASK_ISA2_SGX_UNSET;
790*8feb0f0bSmrg opts->x_ix86_isa_flags2_explicit |= OPTION_MASK_ISA2_SGX_UNSET;
79136ac495dSmrg }
79236ac495dSmrg return true;
79336ac495dSmrg
794a2dc1f3fSmrg case OPT_mpconfig:
795a2dc1f3fSmrg if (value)
796a2dc1f3fSmrg {
797*8feb0f0bSmrg opts->x_ix86_isa_flags2 |= OPTION_MASK_ISA2_PCONFIG_SET;
798*8feb0f0bSmrg opts->x_ix86_isa_flags2_explicit |= OPTION_MASK_ISA2_PCONFIG_SET;
799a2dc1f3fSmrg }
800a2dc1f3fSmrg else
801a2dc1f3fSmrg {
802*8feb0f0bSmrg opts->x_ix86_isa_flags2 &= ~OPTION_MASK_ISA2_PCONFIG_UNSET;
803*8feb0f0bSmrg opts->x_ix86_isa_flags2_explicit |= OPTION_MASK_ISA2_PCONFIG_UNSET;
804a2dc1f3fSmrg }
805a2dc1f3fSmrg return true;
806a2dc1f3fSmrg
807a2dc1f3fSmrg case OPT_mwbnoinvd:
808a2dc1f3fSmrg if (value)
809a2dc1f3fSmrg {
810*8feb0f0bSmrg opts->x_ix86_isa_flags2 |= OPTION_MASK_ISA2_WBNOINVD_SET;
811*8feb0f0bSmrg opts->x_ix86_isa_flags2_explicit |= OPTION_MASK_ISA2_WBNOINVD_SET;
812a2dc1f3fSmrg }
813a2dc1f3fSmrg else
814a2dc1f3fSmrg {
815*8feb0f0bSmrg opts->x_ix86_isa_flags2 &= ~OPTION_MASK_ISA2_WBNOINVD_UNSET;
816*8feb0f0bSmrg opts->x_ix86_isa_flags2_explicit |= OPTION_MASK_ISA2_WBNOINVD_UNSET;
817a2dc1f3fSmrg }
818a2dc1f3fSmrg return true;
819a2dc1f3fSmrg
82036ac495dSmrg case OPT_mavx512dq:
82136ac495dSmrg if (value)
82236ac495dSmrg {
82336ac495dSmrg opts->x_ix86_isa_flags |= OPTION_MASK_ISA_AVX512DQ_SET;
82436ac495dSmrg opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_AVX512DQ_SET;
82536ac495dSmrg }
82636ac495dSmrg else
82736ac495dSmrg {
82836ac495dSmrg opts->x_ix86_isa_flags &= ~OPTION_MASK_ISA_AVX512DQ_UNSET;
82936ac495dSmrg opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_AVX512DQ_UNSET;
83036ac495dSmrg }
83136ac495dSmrg return true;
83236ac495dSmrg
83336ac495dSmrg case OPT_mavx512bw:
83436ac495dSmrg if (value)
83536ac495dSmrg {
83636ac495dSmrg opts->x_ix86_isa_flags |= OPTION_MASK_ISA_AVX512BW_SET;
83736ac495dSmrg opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_AVX512BW_SET;
83836ac495dSmrg }
83936ac495dSmrg else
84036ac495dSmrg {
84136ac495dSmrg opts->x_ix86_isa_flags &= ~OPTION_MASK_ISA_AVX512BW_UNSET;
84236ac495dSmrg opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_AVX512BW_UNSET;
843*8feb0f0bSmrg opts->x_ix86_isa_flags2 &= ~OPTION_MASK_ISA2_AVX512BW_UNSET;
844*8feb0f0bSmrg opts->x_ix86_isa_flags2_explicit |= OPTION_MASK_ISA2_AVX512BW_UNSET;
84536ac495dSmrg }
84636ac495dSmrg return true;
84736ac495dSmrg
84836ac495dSmrg case OPT_mavx512vl:
84936ac495dSmrg if (value)
85036ac495dSmrg {
85136ac495dSmrg opts->x_ix86_isa_flags |= OPTION_MASK_ISA_AVX512VL_SET;
85236ac495dSmrg opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_AVX512VL_SET;
85336ac495dSmrg }
85436ac495dSmrg else
85536ac495dSmrg {
85636ac495dSmrg opts->x_ix86_isa_flags &= ~OPTION_MASK_ISA_AVX512VL_UNSET;
85736ac495dSmrg opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_AVX512VL_UNSET;
85836ac495dSmrg }
85936ac495dSmrg return true;
86036ac495dSmrg
86136ac495dSmrg case OPT_mavx512ifma:
86236ac495dSmrg if (value)
86336ac495dSmrg {
86436ac495dSmrg opts->x_ix86_isa_flags |= OPTION_MASK_ISA_AVX512IFMA_SET;
86536ac495dSmrg opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_AVX512IFMA_SET;
86636ac495dSmrg }
86736ac495dSmrg else
86836ac495dSmrg {
86936ac495dSmrg opts->x_ix86_isa_flags &= ~OPTION_MASK_ISA_AVX512IFMA_UNSET;
87036ac495dSmrg opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_AVX512IFMA_UNSET;
87136ac495dSmrg }
87236ac495dSmrg return true;
87336ac495dSmrg
87436ac495dSmrg case OPT_mavx512vbmi:
87536ac495dSmrg if (value)
87636ac495dSmrg {
87736ac495dSmrg opts->x_ix86_isa_flags |= OPTION_MASK_ISA_AVX512VBMI_SET;
87836ac495dSmrg opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_AVX512VBMI_SET;
87936ac495dSmrg }
88036ac495dSmrg else
88136ac495dSmrg {
88236ac495dSmrg opts->x_ix86_isa_flags &= ~OPTION_MASK_ISA_AVX512VBMI_UNSET;
88336ac495dSmrg opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_AVX512VBMI_UNSET;
88436ac495dSmrg }
88536ac495dSmrg return true;
88636ac495dSmrg
887*8feb0f0bSmrg case OPT_mavx512vp2intersect:
888*8feb0f0bSmrg if (value)
889*8feb0f0bSmrg {
890*8feb0f0bSmrg opts->x_ix86_isa_flags2 |= OPTION_MASK_ISA2_AVX512VP2INTERSECT_SET;
891*8feb0f0bSmrg opts->x_ix86_isa_flags2_explicit |=
892*8feb0f0bSmrg OPTION_MASK_ISA2_AVX512VP2INTERSECT_SET;
893*8feb0f0bSmrg opts->x_ix86_isa_flags |= OPTION_MASK_ISA_AVX512DQ_SET;
894*8feb0f0bSmrg opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_AVX512DQ_SET;
895*8feb0f0bSmrg }
896*8feb0f0bSmrg else
897*8feb0f0bSmrg {
898*8feb0f0bSmrg opts->x_ix86_isa_flags2 &= ~OPTION_MASK_ISA2_AVX512VP2INTERSECT_UNSET;
899*8feb0f0bSmrg opts->x_ix86_isa_flags2_explicit |=
900*8feb0f0bSmrg OPTION_MASK_ISA2_AVX512VP2INTERSECT_UNSET;
901*8feb0f0bSmrg }
902*8feb0f0bSmrg return true;
903*8feb0f0bSmrg
90436ac495dSmrg case OPT_mfma:
90536ac495dSmrg if (value)
90636ac495dSmrg {
90736ac495dSmrg opts->x_ix86_isa_flags |= OPTION_MASK_ISA_FMA_SET;
90836ac495dSmrg opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_FMA_SET;
90936ac495dSmrg }
91036ac495dSmrg else
91136ac495dSmrg {
91236ac495dSmrg opts->x_ix86_isa_flags &= ~OPTION_MASK_ISA_FMA_UNSET;
91336ac495dSmrg opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_FMA_UNSET;
91436ac495dSmrg }
91536ac495dSmrg return true;
91636ac495dSmrg
91736ac495dSmrg case OPT_mrtm:
91836ac495dSmrg if (value)
91936ac495dSmrg {
92036ac495dSmrg opts->x_ix86_isa_flags |= OPTION_MASK_ISA_RTM_SET;
92136ac495dSmrg opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_RTM_SET;
92236ac495dSmrg }
92336ac495dSmrg else
92436ac495dSmrg {
92536ac495dSmrg opts->x_ix86_isa_flags &= ~OPTION_MASK_ISA_RTM_UNSET;
92636ac495dSmrg opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_RTM_UNSET;
92736ac495dSmrg }
92836ac495dSmrg return true;
92936ac495dSmrg
93036ac495dSmrg case OPT_msse4:
93136ac495dSmrg opts->x_ix86_isa_flags |= OPTION_MASK_ISA_SSE4_SET;
93236ac495dSmrg opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_SSE4_SET;
93336ac495dSmrg return true;
93436ac495dSmrg
93536ac495dSmrg case OPT_mno_sse4:
93636ac495dSmrg opts->x_ix86_isa_flags &= ~OPTION_MASK_ISA_SSE4_UNSET;
93736ac495dSmrg opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_SSE4_UNSET;
938a2dc1f3fSmrg opts->x_ix86_isa_flags2 &= ~OPTION_MASK_ISA2_AVX512F_UNSET;
939a2dc1f3fSmrg opts->x_ix86_isa_flags2_explicit |= OPTION_MASK_ISA2_AVX512F_UNSET;
94036ac495dSmrg return true;
94136ac495dSmrg
94236ac495dSmrg case OPT_msse4a:
94336ac495dSmrg if (value)
94436ac495dSmrg {
94536ac495dSmrg opts->x_ix86_isa_flags |= OPTION_MASK_ISA_SSE4A_SET;
94636ac495dSmrg opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_SSE4A_SET;
94736ac495dSmrg }
94836ac495dSmrg else
94936ac495dSmrg {
95036ac495dSmrg opts->x_ix86_isa_flags &= ~OPTION_MASK_ISA_SSE4A_UNSET;
95136ac495dSmrg opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_SSE4A_UNSET;
95236ac495dSmrg }
95336ac495dSmrg return true;
95436ac495dSmrg
95536ac495dSmrg case OPT_mfma4:
95636ac495dSmrg if (value)
95736ac495dSmrg {
95836ac495dSmrg opts->x_ix86_isa_flags |= OPTION_MASK_ISA_FMA4_SET;
95936ac495dSmrg opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_FMA4_SET;
96036ac495dSmrg }
96136ac495dSmrg else
96236ac495dSmrg {
96336ac495dSmrg opts->x_ix86_isa_flags &= ~OPTION_MASK_ISA_FMA4_UNSET;
96436ac495dSmrg opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_FMA4_UNSET;
96536ac495dSmrg }
96636ac495dSmrg return true;
96736ac495dSmrg
96836ac495dSmrg case OPT_mxop:
96936ac495dSmrg if (value)
97036ac495dSmrg {
97136ac495dSmrg opts->x_ix86_isa_flags |= OPTION_MASK_ISA_XOP_SET;
97236ac495dSmrg opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_XOP_SET;
97336ac495dSmrg }
97436ac495dSmrg else
97536ac495dSmrg {
97636ac495dSmrg opts->x_ix86_isa_flags &= ~OPTION_MASK_ISA_XOP_UNSET;
97736ac495dSmrg opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_XOP_UNSET;
97836ac495dSmrg }
97936ac495dSmrg return true;
98036ac495dSmrg
98136ac495dSmrg case OPT_mlwp:
98236ac495dSmrg if (value)
98336ac495dSmrg {
98436ac495dSmrg opts->x_ix86_isa_flags |= OPTION_MASK_ISA_LWP_SET;
98536ac495dSmrg opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_LWP_SET;
98636ac495dSmrg }
98736ac495dSmrg else
98836ac495dSmrg {
98936ac495dSmrg opts->x_ix86_isa_flags &= ~OPTION_MASK_ISA_LWP_UNSET;
99036ac495dSmrg opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_LWP_UNSET;
99136ac495dSmrg }
99236ac495dSmrg return true;
99336ac495dSmrg
99436ac495dSmrg case OPT_mabm:
99536ac495dSmrg if (value)
99636ac495dSmrg {
99736ac495dSmrg opts->x_ix86_isa_flags |= OPTION_MASK_ISA_ABM_SET;
99836ac495dSmrg opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_ABM_SET;
99936ac495dSmrg }
100036ac495dSmrg else
100136ac495dSmrg {
100236ac495dSmrg opts->x_ix86_isa_flags &= ~OPTION_MASK_ISA_ABM_UNSET;
100336ac495dSmrg opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_ABM_UNSET;
100436ac495dSmrg }
100536ac495dSmrg return true;
100636ac495dSmrg
100736ac495dSmrg case OPT_mbmi:
100836ac495dSmrg if (value)
100936ac495dSmrg {
101036ac495dSmrg opts->x_ix86_isa_flags |= OPTION_MASK_ISA_BMI_SET;
101136ac495dSmrg opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_BMI_SET;
101236ac495dSmrg }
101336ac495dSmrg else
101436ac495dSmrg {
101536ac495dSmrg opts->x_ix86_isa_flags &= ~OPTION_MASK_ISA_BMI_UNSET;
101636ac495dSmrg opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_BMI_UNSET;
101736ac495dSmrg }
101836ac495dSmrg return true;
101936ac495dSmrg
102036ac495dSmrg case OPT_mbmi2:
102136ac495dSmrg if (value)
102236ac495dSmrg {
102336ac495dSmrg opts->x_ix86_isa_flags |= OPTION_MASK_ISA_BMI2_SET;
102436ac495dSmrg opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_BMI2_SET;
102536ac495dSmrg }
102636ac495dSmrg else
102736ac495dSmrg {
102836ac495dSmrg opts->x_ix86_isa_flags &= ~OPTION_MASK_ISA_BMI2_UNSET;
102936ac495dSmrg opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_BMI2_UNSET;
103036ac495dSmrg }
103136ac495dSmrg return true;
103236ac495dSmrg
103336ac495dSmrg case OPT_mlzcnt:
103436ac495dSmrg if (value)
103536ac495dSmrg {
103636ac495dSmrg opts->x_ix86_isa_flags |= OPTION_MASK_ISA_LZCNT_SET;
103736ac495dSmrg opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_LZCNT_SET;
103836ac495dSmrg }
103936ac495dSmrg else
104036ac495dSmrg {
104136ac495dSmrg opts->x_ix86_isa_flags &= ~OPTION_MASK_ISA_LZCNT_UNSET;
104236ac495dSmrg opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_LZCNT_UNSET;
104336ac495dSmrg }
104436ac495dSmrg return true;
104536ac495dSmrg
104636ac495dSmrg case OPT_mtbm:
104736ac495dSmrg if (value)
104836ac495dSmrg {
104936ac495dSmrg opts->x_ix86_isa_flags |= OPTION_MASK_ISA_TBM_SET;
105036ac495dSmrg opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_TBM_SET;
105136ac495dSmrg }
105236ac495dSmrg else
105336ac495dSmrg {
105436ac495dSmrg opts->x_ix86_isa_flags &= ~OPTION_MASK_ISA_TBM_UNSET;
105536ac495dSmrg opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_TBM_UNSET;
105636ac495dSmrg }
105736ac495dSmrg return true;
105836ac495dSmrg
105936ac495dSmrg case OPT_mpopcnt:
106036ac495dSmrg if (value)
106136ac495dSmrg {
106236ac495dSmrg opts->x_ix86_isa_flags |= OPTION_MASK_ISA_POPCNT_SET;
106336ac495dSmrg opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_POPCNT_SET;
106436ac495dSmrg }
106536ac495dSmrg else
106636ac495dSmrg {
106736ac495dSmrg opts->x_ix86_isa_flags &= ~OPTION_MASK_ISA_POPCNT_UNSET;
106836ac495dSmrg opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_POPCNT_UNSET;
106936ac495dSmrg }
107036ac495dSmrg return true;
107136ac495dSmrg
107236ac495dSmrg case OPT_msahf:
107336ac495dSmrg if (value)
107436ac495dSmrg {
107536ac495dSmrg opts->x_ix86_isa_flags |= OPTION_MASK_ISA_SAHF_SET;
107636ac495dSmrg opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_SAHF_SET;
107736ac495dSmrg }
107836ac495dSmrg else
107936ac495dSmrg {
108036ac495dSmrg opts->x_ix86_isa_flags &= ~OPTION_MASK_ISA_SAHF_UNSET;
108136ac495dSmrg opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_SAHF_UNSET;
108236ac495dSmrg }
108336ac495dSmrg return true;
108436ac495dSmrg
108536ac495dSmrg case OPT_mcx16:
108636ac495dSmrg if (value)
108736ac495dSmrg {
1088*8feb0f0bSmrg opts->x_ix86_isa_flags2 |= OPTION_MASK_ISA2_CX16_SET;
1089*8feb0f0bSmrg opts->x_ix86_isa_flags2_explicit |= OPTION_MASK_ISA2_CX16_SET;
109036ac495dSmrg }
109136ac495dSmrg else
109236ac495dSmrg {
1093*8feb0f0bSmrg opts->x_ix86_isa_flags2 &= ~OPTION_MASK_ISA2_CX16_UNSET;
1094*8feb0f0bSmrg opts->x_ix86_isa_flags2_explicit |= OPTION_MASK_ISA2_CX16_UNSET;
109536ac495dSmrg }
109636ac495dSmrg return true;
109736ac495dSmrg
109836ac495dSmrg case OPT_mmovbe:
109936ac495dSmrg if (value)
110036ac495dSmrg {
1101*8feb0f0bSmrg opts->x_ix86_isa_flags2 |= OPTION_MASK_ISA2_MOVBE_SET;
1102*8feb0f0bSmrg opts->x_ix86_isa_flags2_explicit |= OPTION_MASK_ISA2_MOVBE_SET;
110336ac495dSmrg }
110436ac495dSmrg else
110536ac495dSmrg {
1106*8feb0f0bSmrg opts->x_ix86_isa_flags2 &= ~OPTION_MASK_ISA2_MOVBE_UNSET;
1107*8feb0f0bSmrg opts->x_ix86_isa_flags2_explicit |= OPTION_MASK_ISA2_MOVBE_UNSET;
110836ac495dSmrg }
110936ac495dSmrg return true;
111036ac495dSmrg
111136ac495dSmrg case OPT_mcrc32:
111236ac495dSmrg if (value)
111336ac495dSmrg {
111436ac495dSmrg opts->x_ix86_isa_flags |= OPTION_MASK_ISA_CRC32_SET;
111536ac495dSmrg opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_CRC32_SET;
111636ac495dSmrg }
111736ac495dSmrg else
111836ac495dSmrg {
111936ac495dSmrg opts->x_ix86_isa_flags &= ~OPTION_MASK_ISA_CRC32_UNSET;
112036ac495dSmrg opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_CRC32_UNSET;
112136ac495dSmrg }
112236ac495dSmrg return true;
112336ac495dSmrg
112436ac495dSmrg case OPT_maes:
112536ac495dSmrg if (value)
112636ac495dSmrg {
112736ac495dSmrg opts->x_ix86_isa_flags |= OPTION_MASK_ISA_AES_SET;
112836ac495dSmrg opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_AES_SET;
112936ac495dSmrg }
113036ac495dSmrg else
113136ac495dSmrg {
113236ac495dSmrg opts->x_ix86_isa_flags &= ~OPTION_MASK_ISA_AES_UNSET;
113336ac495dSmrg opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_AES_UNSET;
113436ac495dSmrg }
113536ac495dSmrg return true;
113636ac495dSmrg
113736ac495dSmrg case OPT_msha:
113836ac495dSmrg if (value)
113936ac495dSmrg {
114036ac495dSmrg opts->x_ix86_isa_flags |= OPTION_MASK_ISA_SHA_SET;
114136ac495dSmrg opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_SHA_SET;
114236ac495dSmrg }
114336ac495dSmrg else
114436ac495dSmrg {
114536ac495dSmrg opts->x_ix86_isa_flags &= ~OPTION_MASK_ISA_SHA_UNSET;
114636ac495dSmrg opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_SHA_UNSET;
114736ac495dSmrg }
114836ac495dSmrg return true;
114936ac495dSmrg
115036ac495dSmrg case OPT_mpclmul:
115136ac495dSmrg if (value)
115236ac495dSmrg {
115336ac495dSmrg opts->x_ix86_isa_flags |= OPTION_MASK_ISA_PCLMUL_SET;
115436ac495dSmrg opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_PCLMUL_SET;
115536ac495dSmrg }
115636ac495dSmrg else
115736ac495dSmrg {
115836ac495dSmrg opts->x_ix86_isa_flags &= ~OPTION_MASK_ISA_PCLMUL_UNSET;
115936ac495dSmrg opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_PCLMUL_UNSET;
116036ac495dSmrg }
116136ac495dSmrg return true;
116236ac495dSmrg
116336ac495dSmrg case OPT_mfsgsbase:
116436ac495dSmrg if (value)
116536ac495dSmrg {
116636ac495dSmrg opts->x_ix86_isa_flags |= OPTION_MASK_ISA_FSGSBASE_SET;
116736ac495dSmrg opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_FSGSBASE_SET;
116836ac495dSmrg }
116936ac495dSmrg else
117036ac495dSmrg {
117136ac495dSmrg opts->x_ix86_isa_flags &= ~OPTION_MASK_ISA_FSGSBASE_UNSET;
117236ac495dSmrg opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_FSGSBASE_UNSET;
117336ac495dSmrg }
117436ac495dSmrg return true;
117536ac495dSmrg
117636ac495dSmrg case OPT_mrdrnd:
117736ac495dSmrg if (value)
117836ac495dSmrg {
117936ac495dSmrg opts->x_ix86_isa_flags |= OPTION_MASK_ISA_RDRND_SET;
118036ac495dSmrg opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_RDRND_SET;
118136ac495dSmrg }
118236ac495dSmrg else
118336ac495dSmrg {
118436ac495dSmrg opts->x_ix86_isa_flags &= ~OPTION_MASK_ISA_RDRND_UNSET;
118536ac495dSmrg opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_RDRND_UNSET;
118636ac495dSmrg }
118736ac495dSmrg return true;
118836ac495dSmrg
1189c0a68be4Smrg case OPT_mptwrite:
1190c0a68be4Smrg if (value)
1191c0a68be4Smrg {
1192*8feb0f0bSmrg opts->x_ix86_isa_flags2 |= OPTION_MASK_ISA2_PTWRITE_SET;
1193*8feb0f0bSmrg opts->x_ix86_isa_flags2_explicit |= OPTION_MASK_ISA2_PTWRITE_SET;
1194c0a68be4Smrg }
1195c0a68be4Smrg else
1196c0a68be4Smrg {
1197*8feb0f0bSmrg opts->x_ix86_isa_flags2 &= ~OPTION_MASK_ISA2_PTWRITE_UNSET;
1198*8feb0f0bSmrg opts->x_ix86_isa_flags2_explicit |= OPTION_MASK_ISA2_PTWRITE_UNSET;
1199c0a68be4Smrg }
1200c0a68be4Smrg return true;
1201c0a68be4Smrg
120236ac495dSmrg case OPT_mf16c:
120336ac495dSmrg if (value)
120436ac495dSmrg {
120536ac495dSmrg opts->x_ix86_isa_flags |= OPTION_MASK_ISA_F16C_SET;
120636ac495dSmrg opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_F16C_SET;
120736ac495dSmrg }
120836ac495dSmrg else
120936ac495dSmrg {
121036ac495dSmrg opts->x_ix86_isa_flags &= ~OPTION_MASK_ISA_F16C_UNSET;
121136ac495dSmrg opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_F16C_UNSET;
121236ac495dSmrg }
121336ac495dSmrg return true;
121436ac495dSmrg
121536ac495dSmrg case OPT_mfxsr:
121636ac495dSmrg if (value)
121736ac495dSmrg {
121836ac495dSmrg opts->x_ix86_isa_flags |= OPTION_MASK_ISA_FXSR_SET;
121936ac495dSmrg opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_FXSR_SET;
122036ac495dSmrg }
122136ac495dSmrg else
122236ac495dSmrg {
122336ac495dSmrg opts->x_ix86_isa_flags &= ~OPTION_MASK_ISA_FXSR_UNSET;
122436ac495dSmrg opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_FXSR_UNSET;
122536ac495dSmrg }
122636ac495dSmrg return true;
122736ac495dSmrg
122836ac495dSmrg case OPT_mxsave:
122936ac495dSmrg if (value)
123036ac495dSmrg {
123136ac495dSmrg opts->x_ix86_isa_flags |= OPTION_MASK_ISA_XSAVE_SET;
123236ac495dSmrg opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_XSAVE_SET;
123336ac495dSmrg }
123436ac495dSmrg else
123536ac495dSmrg {
123636ac495dSmrg opts->x_ix86_isa_flags &= ~OPTION_MASK_ISA_XSAVE_UNSET;
123736ac495dSmrg opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_XSAVE_UNSET;
123836ac495dSmrg }
123936ac495dSmrg return true;
124036ac495dSmrg
124136ac495dSmrg case OPT_mxsaveopt:
124236ac495dSmrg if (value)
124336ac495dSmrg {
124436ac495dSmrg opts->x_ix86_isa_flags |= OPTION_MASK_ISA_XSAVEOPT_SET;
124536ac495dSmrg opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_XSAVEOPT_SET;
124636ac495dSmrg }
124736ac495dSmrg else
124836ac495dSmrg {
124936ac495dSmrg opts->x_ix86_isa_flags &= ~OPTION_MASK_ISA_XSAVEOPT_UNSET;
125036ac495dSmrg opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_XSAVEOPT_UNSET;
125136ac495dSmrg }
125236ac495dSmrg return true;
125336ac495dSmrg
125436ac495dSmrg case OPT_mxsavec:
125536ac495dSmrg if (value)
125636ac495dSmrg {
125736ac495dSmrg opts->x_ix86_isa_flags |= OPTION_MASK_ISA_XSAVEC_SET;
125836ac495dSmrg opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_XSAVEC_SET;
125936ac495dSmrg }
126036ac495dSmrg else
126136ac495dSmrg {
126236ac495dSmrg opts->x_ix86_isa_flags &= ~OPTION_MASK_ISA_XSAVEC_UNSET;
126336ac495dSmrg opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_XSAVEC_UNSET;
126436ac495dSmrg }
126536ac495dSmrg return true;
126636ac495dSmrg
126736ac495dSmrg case OPT_mxsaves:
126836ac495dSmrg if (value)
126936ac495dSmrg {
127036ac495dSmrg opts->x_ix86_isa_flags |= OPTION_MASK_ISA_XSAVES_SET;
127136ac495dSmrg opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_XSAVES_SET;
127236ac495dSmrg }
127336ac495dSmrg else
127436ac495dSmrg {
127536ac495dSmrg opts->x_ix86_isa_flags &= ~OPTION_MASK_ISA_XSAVES_UNSET;
127636ac495dSmrg opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_XSAVES_UNSET;
127736ac495dSmrg }
127836ac495dSmrg return true;
127936ac495dSmrg
128036ac495dSmrg case OPT_mrdseed:
128136ac495dSmrg if (value)
128236ac495dSmrg {
128336ac495dSmrg opts->x_ix86_isa_flags |= OPTION_MASK_ISA_RDSEED_SET;
128436ac495dSmrg opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_RDSEED_SET;
128536ac495dSmrg }
128636ac495dSmrg else
128736ac495dSmrg {
128836ac495dSmrg opts->x_ix86_isa_flags &= ~OPTION_MASK_ISA_RDSEED_UNSET;
128936ac495dSmrg opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_RDSEED_UNSET;
129036ac495dSmrg }
129136ac495dSmrg return true;
129236ac495dSmrg
129336ac495dSmrg case OPT_mprfchw:
129436ac495dSmrg if (value)
129536ac495dSmrg {
129636ac495dSmrg opts->x_ix86_isa_flags |= OPTION_MASK_ISA_PRFCHW_SET;
129736ac495dSmrg opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_PRFCHW_SET;
129836ac495dSmrg }
129936ac495dSmrg else
130036ac495dSmrg {
130136ac495dSmrg opts->x_ix86_isa_flags &= ~OPTION_MASK_ISA_PRFCHW_UNSET;
130236ac495dSmrg opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_PRFCHW_UNSET;
130336ac495dSmrg }
130436ac495dSmrg return true;
130536ac495dSmrg
130636ac495dSmrg case OPT_madx:
130736ac495dSmrg if (value)
130836ac495dSmrg {
130936ac495dSmrg opts->x_ix86_isa_flags |= OPTION_MASK_ISA_ADX_SET;
131036ac495dSmrg opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_ADX_SET;
131136ac495dSmrg }
131236ac495dSmrg else
131336ac495dSmrg {
131436ac495dSmrg opts->x_ix86_isa_flags &= ~OPTION_MASK_ISA_ADX_UNSET;
131536ac495dSmrg opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_ADX_UNSET;
131636ac495dSmrg }
131736ac495dSmrg return true;
131836ac495dSmrg
131936ac495dSmrg case OPT_mprefetchwt1:
132036ac495dSmrg if (value)
132136ac495dSmrg {
132236ac495dSmrg opts->x_ix86_isa_flags |= OPTION_MASK_ISA_PREFETCHWT1_SET;
132336ac495dSmrg opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_PREFETCHWT1_SET;
132436ac495dSmrg }
132536ac495dSmrg else
132636ac495dSmrg {
132736ac495dSmrg opts->x_ix86_isa_flags &= ~OPTION_MASK_ISA_PREFETCHWT1_UNSET;
132836ac495dSmrg opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_PREFETCHWT1_UNSET;
132936ac495dSmrg }
133036ac495dSmrg return true;
133136ac495dSmrg
133236ac495dSmrg case OPT_mclflushopt:
133336ac495dSmrg if (value)
133436ac495dSmrg {
133536ac495dSmrg opts->x_ix86_isa_flags |= OPTION_MASK_ISA_CLFLUSHOPT_SET;
133636ac495dSmrg opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_CLFLUSHOPT_SET;
133736ac495dSmrg }
133836ac495dSmrg else
133936ac495dSmrg {
134036ac495dSmrg opts->x_ix86_isa_flags &= ~OPTION_MASK_ISA_CLFLUSHOPT_UNSET;
134136ac495dSmrg opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_CLFLUSHOPT_UNSET;
134236ac495dSmrg }
134336ac495dSmrg return true;
134436ac495dSmrg
134536ac495dSmrg case OPT_mclwb:
134636ac495dSmrg if (value)
134736ac495dSmrg {
134836ac495dSmrg opts->x_ix86_isa_flags |= OPTION_MASK_ISA_CLWB_SET;
134936ac495dSmrg opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_CLWB_SET;
135036ac495dSmrg }
135136ac495dSmrg else
135236ac495dSmrg {
135336ac495dSmrg opts->x_ix86_isa_flags &= ~OPTION_MASK_ISA_CLWB_UNSET;
135436ac495dSmrg opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_CLWB_UNSET;
135536ac495dSmrg }
135636ac495dSmrg return true;
135736ac495dSmrg
135836ac495dSmrg case OPT_mmwaitx:
135936ac495dSmrg if (value)
136036ac495dSmrg {
1361*8feb0f0bSmrg opts->x_ix86_isa_flags2 |= OPTION_MASK_ISA2_MWAITX_SET;
1362*8feb0f0bSmrg opts->x_ix86_isa_flags2_explicit |= OPTION_MASK_ISA2_MWAITX_SET;
136336ac495dSmrg }
136436ac495dSmrg else
136536ac495dSmrg {
1366*8feb0f0bSmrg opts->x_ix86_isa_flags2 &= ~OPTION_MASK_ISA2_MWAITX_UNSET;
1367*8feb0f0bSmrg opts->x_ix86_isa_flags2_explicit |= OPTION_MASK_ISA2_MWAITX_UNSET;
136836ac495dSmrg }
136936ac495dSmrg return true;
137036ac495dSmrg
137136ac495dSmrg case OPT_mclzero:
137236ac495dSmrg if (value)
137336ac495dSmrg {
1374*8feb0f0bSmrg opts->x_ix86_isa_flags2 |= OPTION_MASK_ISA2_CLZERO_SET;
1375*8feb0f0bSmrg opts->x_ix86_isa_flags2_explicit |= OPTION_MASK_ISA2_CLZERO_SET;
137636ac495dSmrg }
137736ac495dSmrg else
137836ac495dSmrg {
1379*8feb0f0bSmrg opts->x_ix86_isa_flags2 &= ~OPTION_MASK_ISA2_CLZERO_UNSET;
1380*8feb0f0bSmrg opts->x_ix86_isa_flags2_explicit |= OPTION_MASK_ISA2_CLZERO_UNSET;
138136ac495dSmrg }
138236ac495dSmrg return true;
138336ac495dSmrg
138436ac495dSmrg case OPT_mpku:
138536ac495dSmrg if (value)
138636ac495dSmrg {
138736ac495dSmrg opts->x_ix86_isa_flags |= OPTION_MASK_ISA_PKU_SET;
138836ac495dSmrg opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_PKU_SET;
138936ac495dSmrg }
139036ac495dSmrg else
139136ac495dSmrg {
139236ac495dSmrg opts->x_ix86_isa_flags &= ~OPTION_MASK_ISA_PKU_UNSET;
139336ac495dSmrg opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_PKU_UNSET;
139436ac495dSmrg }
139536ac495dSmrg return true;
139636ac495dSmrg
139736ac495dSmrg
139836ac495dSmrg case OPT_malign_loops_:
1399c0a68be4Smrg warning_at (loc, 0, "%<-malign-loops%> is obsolete, "
1400c0a68be4Smrg "use %<-falign-loops%>");
140136ac495dSmrg if (value > MAX_CODE_ALIGN)
1402c0a68be4Smrg error_at (loc, "%<-malign-loops=%d%> is not between 0 and %d",
140336ac495dSmrg value, MAX_CODE_ALIGN);
140436ac495dSmrg else
1405c0a68be4Smrg set_malign_value (&opts->x_str_align_loops, value);
140636ac495dSmrg return true;
140736ac495dSmrg
140836ac495dSmrg case OPT_malign_jumps_:
1409c0a68be4Smrg warning_at (loc, 0, "%<-malign-jumps%> is obsolete, "
1410c0a68be4Smrg "use %<-falign-jumps%>");
141136ac495dSmrg if (value > MAX_CODE_ALIGN)
1412c0a68be4Smrg error_at (loc, "%<-malign-jumps=%d%> is not between 0 and %d",
141336ac495dSmrg value, MAX_CODE_ALIGN);
141436ac495dSmrg else
1415c0a68be4Smrg set_malign_value (&opts->x_str_align_jumps, value);
141636ac495dSmrg return true;
141736ac495dSmrg
141836ac495dSmrg case OPT_malign_functions_:
141936ac495dSmrg warning_at (loc, 0,
1420c0a68be4Smrg "%<-malign-functions%> is obsolete, "
1421c0a68be4Smrg "use %<-falign-functions%>");
142236ac495dSmrg if (value > MAX_CODE_ALIGN)
1423c0a68be4Smrg error_at (loc, "%<-malign-functions=%d%> is not between 0 and %d",
142436ac495dSmrg value, MAX_CODE_ALIGN);
142536ac495dSmrg else
1426c0a68be4Smrg set_malign_value (&opts->x_str_align_functions, value);
142736ac495dSmrg return true;
142836ac495dSmrg
142936ac495dSmrg case OPT_mbranch_cost_:
143036ac495dSmrg if (value > 5)
143136ac495dSmrg {
1432c0a68be4Smrg error_at (loc, "%<-mbranch-cost=%d%> is not between 0 and 5", value);
143336ac495dSmrg opts->x_ix86_branch_cost = 5;
143436ac495dSmrg }
143536ac495dSmrg return true;
143636ac495dSmrg
143736ac495dSmrg default:
143836ac495dSmrg return true;
143936ac495dSmrg }
144036ac495dSmrg }
144136ac495dSmrg
144236ac495dSmrg static const struct default_options ix86_option_optimization_table[] =
144336ac495dSmrg {
144436ac495dSmrg /* Enable redundant extension instructions removal at -O2 and higher. */
144536ac495dSmrg { OPT_LEVELS_2_PLUS, OPT_free, NULL, 1 },
144636ac495dSmrg /* Enable function splitting at -O2 and higher. */
144736ac495dSmrg { OPT_LEVELS_2_PLUS, OPT_freorder_blocks_and_partition, NULL, 1 },
144836ac495dSmrg /* The STC algorithm produces the smallest code at -Os, for x86. */
144936ac495dSmrg { OPT_LEVELS_2_PLUS, OPT_freorder_blocks_algorithm_, NULL,
145036ac495dSmrg REORDER_BLOCKS_ALGORITHM_STC },
145136ac495dSmrg /* Turn off -fschedule-insns by default. It tends to make the
145236ac495dSmrg problem with not enough registers even worse. */
145336ac495dSmrg { OPT_LEVELS_ALL, OPT_fschedule_insns, NULL, 0 },
145436ac495dSmrg
145536ac495dSmrg #ifdef SUBTARGET_OPTIMIZATION_OPTIONS
145636ac495dSmrg SUBTARGET_OPTIMIZATION_OPTIONS,
145736ac495dSmrg #endif
145836ac495dSmrg { OPT_LEVELS_NONE, 0, NULL, 0 }
145936ac495dSmrg };
146036ac495dSmrg
146136ac495dSmrg /* Implement TARGET_OPTION_INIT_STRUCT. */
146236ac495dSmrg
146336ac495dSmrg static void
ix86_option_init_struct(struct gcc_options * opts)146436ac495dSmrg ix86_option_init_struct (struct gcc_options *opts)
146536ac495dSmrg {
146636ac495dSmrg if (TARGET_MACHO)
146736ac495dSmrg /* The Darwin libraries never set errno, so we might as well
146836ac495dSmrg avoid calling them when that's the only reason we would. */
146936ac495dSmrg opts->x_flag_errno_math = 0;
147036ac495dSmrg
147136ac495dSmrg opts->x_flag_pcc_struct_return = 2;
147236ac495dSmrg opts->x_flag_asynchronous_unwind_tables = 2;
147336ac495dSmrg }
147436ac495dSmrg
147536ac495dSmrg /* On the x86 -fsplit-stack and -fstack-protector both use the same
147636ac495dSmrg field in the TCB, so they cannot be used together. */
147736ac495dSmrg
147836ac495dSmrg static bool
ix86_supports_split_stack(bool report ATTRIBUTE_UNUSED,struct gcc_options * opts ATTRIBUTE_UNUSED)147936ac495dSmrg ix86_supports_split_stack (bool report ATTRIBUTE_UNUSED,
148036ac495dSmrg struct gcc_options *opts ATTRIBUTE_UNUSED)
148136ac495dSmrg {
148236ac495dSmrg bool ret = true;
148336ac495dSmrg
148436ac495dSmrg #ifndef TARGET_THREAD_SPLIT_STACK_OFFSET
148536ac495dSmrg if (report)
148636ac495dSmrg error ("%<-fsplit-stack%> currently only supported on GNU/Linux");
148736ac495dSmrg ret = false;
148836ac495dSmrg #else
148936ac495dSmrg if (!HAVE_GAS_CFI_PERSONALITY_DIRECTIVE)
149036ac495dSmrg {
149136ac495dSmrg if (report)
149236ac495dSmrg error ("%<-fsplit-stack%> requires "
149336ac495dSmrg "assembler support for CFI directives");
149436ac495dSmrg ret = false;
149536ac495dSmrg }
149636ac495dSmrg #endif
149736ac495dSmrg
149836ac495dSmrg return ret;
149936ac495dSmrg }
150036ac495dSmrg
150136ac495dSmrg /* Implement TARGET_EXCEPT_UNWIND_INFO. */
150236ac495dSmrg
150336ac495dSmrg static enum unwind_info_type
i386_except_unwind_info(struct gcc_options * opts)150436ac495dSmrg i386_except_unwind_info (struct gcc_options *opts)
150536ac495dSmrg {
150636ac495dSmrg /* Honor the --enable-sjlj-exceptions configure switch. */
150736ac495dSmrg #ifdef CONFIG_SJLJ_EXCEPTIONS
150836ac495dSmrg if (CONFIG_SJLJ_EXCEPTIONS)
150936ac495dSmrg return UI_SJLJ;
151036ac495dSmrg #endif
151136ac495dSmrg
151236ac495dSmrg /* On windows 64, prefer SEH exceptions over anything else. */
151336ac495dSmrg if (TARGET_64BIT && DEFAULT_ABI == MS_ABI && opts->x_flag_unwind_tables)
151436ac495dSmrg return UI_SEH;
151536ac495dSmrg
151636ac495dSmrg if (DWARF2_UNWIND_INFO)
151736ac495dSmrg return UI_DWARF2;
151836ac495dSmrg
151936ac495dSmrg return UI_SJLJ;
152036ac495dSmrg }
152136ac495dSmrg
152236ac495dSmrg #undef TARGET_EXCEPT_UNWIND_INFO
152336ac495dSmrg #define TARGET_EXCEPT_UNWIND_INFO i386_except_unwind_info
152436ac495dSmrg
152536ac495dSmrg #undef TARGET_DEFAULT_TARGET_FLAGS
152636ac495dSmrg #define TARGET_DEFAULT_TARGET_FLAGS \
152736ac495dSmrg (TARGET_DEFAULT \
152836ac495dSmrg | TARGET_SUBTARGET_DEFAULT \
152936ac495dSmrg | TARGET_TLS_DIRECT_SEG_REFS_DEFAULT)
153036ac495dSmrg
153136ac495dSmrg #undef TARGET_HANDLE_OPTION
153236ac495dSmrg #define TARGET_HANDLE_OPTION ix86_handle_option
153336ac495dSmrg
153436ac495dSmrg #undef TARGET_OPTION_OPTIMIZATION_TABLE
153536ac495dSmrg #define TARGET_OPTION_OPTIMIZATION_TABLE ix86_option_optimization_table
153636ac495dSmrg #undef TARGET_OPTION_INIT_STRUCT
153736ac495dSmrg #define TARGET_OPTION_INIT_STRUCT ix86_option_init_struct
153836ac495dSmrg
153936ac495dSmrg #undef TARGET_SUPPORTS_SPLIT_STACK
154036ac495dSmrg #define TARGET_SUPPORTS_SPLIT_STACK ix86_supports_split_stack
154136ac495dSmrg
1542c0a68be4Smrg /* This table must be in sync with enum processor_type in i386.h. */
1543c0a68be4Smrg const char *const processor_names[] =
1544c0a68be4Smrg {
1545c0a68be4Smrg "generic",
1546c0a68be4Smrg "i386",
1547c0a68be4Smrg "i486",
1548c0a68be4Smrg "pentium",
1549c0a68be4Smrg "lakemont",
1550c0a68be4Smrg "pentiumpro",
1551c0a68be4Smrg "pentium4",
1552c0a68be4Smrg "nocona",
1553c0a68be4Smrg "core2",
1554c0a68be4Smrg "nehalem",
1555c0a68be4Smrg "sandybridge",
1556c0a68be4Smrg "haswell",
1557c0a68be4Smrg "bonnell",
1558c0a68be4Smrg "silvermont",
1559c0a68be4Smrg "goldmont",
1560c0a68be4Smrg "goldmont-plus",
1561c0a68be4Smrg "tremont",
1562c0a68be4Smrg "knl",
1563c0a68be4Smrg "knm",
1564c0a68be4Smrg "skylake",
1565c0a68be4Smrg "skylake-avx512",
1566c0a68be4Smrg "cannonlake",
1567c0a68be4Smrg "icelake-client",
1568c0a68be4Smrg "icelake-server",
1569c0a68be4Smrg "cascadelake",
1570*8feb0f0bSmrg "tigerlake",
1571*8feb0f0bSmrg "cooperlake",
1572c0a68be4Smrg "intel",
1573c0a68be4Smrg "geode",
1574c0a68be4Smrg "k6",
1575c0a68be4Smrg "athlon",
1576c0a68be4Smrg "k8",
1577c0a68be4Smrg "amdfam10",
1578c0a68be4Smrg "bdver1",
1579c0a68be4Smrg "bdver2",
1580c0a68be4Smrg "bdver3",
1581c0a68be4Smrg "bdver4",
1582c0a68be4Smrg "btver1",
1583c0a68be4Smrg "btver2",
1584c0a68be4Smrg "znver1",
1585*8feb0f0bSmrg "znver2",
1586*8feb0f0bSmrg "znver3"
1587c0a68be4Smrg };
1588c0a68be4Smrg
1589c0a68be4Smrg /* Guarantee that the array is aligned with enum processor_type. */
1590c0a68be4Smrg STATIC_ASSERT (ARRAY_SIZE (processor_names) == PROCESSOR_max);
1591c0a68be4Smrg
1592c0a68be4Smrg const pta processor_alias_table[] =
1593c0a68be4Smrg {
1594*8feb0f0bSmrg {"i386", PROCESSOR_I386, CPU_NONE, 0, 0, P_NONE},
1595*8feb0f0bSmrg {"i486", PROCESSOR_I486, CPU_NONE, 0, 0, P_NONE},
1596*8feb0f0bSmrg {"i586", PROCESSOR_PENTIUM, CPU_PENTIUM, 0, 0, P_NONE},
1597*8feb0f0bSmrg {"pentium", PROCESSOR_PENTIUM, CPU_PENTIUM, 0, 0, P_NONE},
1598*8feb0f0bSmrg {"lakemont", PROCESSOR_LAKEMONT, CPU_PENTIUM, PTA_NO_80387,
1599*8feb0f0bSmrg 0, P_NONE},
1600*8feb0f0bSmrg {"pentium-mmx", PROCESSOR_PENTIUM, CPU_PENTIUM, PTA_MMX, 0, P_NONE},
1601*8feb0f0bSmrg {"winchip-c6", PROCESSOR_I486, CPU_NONE, PTA_MMX, 0, P_NONE},
1602*8feb0f0bSmrg {"winchip2", PROCESSOR_I486, CPU_NONE, PTA_MMX | PTA_3DNOW,
1603*8feb0f0bSmrg 0, P_NONE},
1604*8feb0f0bSmrg {"c3", PROCESSOR_I486, CPU_NONE, PTA_MMX | PTA_3DNOW, 0, P_NONE},
1605*8feb0f0bSmrg {"samuel-2", PROCESSOR_I486, CPU_NONE, PTA_MMX | PTA_3DNOW,
1606*8feb0f0bSmrg 0, P_NONE},
1607c0a68be4Smrg {"c3-2", PROCESSOR_PENTIUMPRO, CPU_PENTIUMPRO,
1608*8feb0f0bSmrg PTA_MMX | PTA_SSE | PTA_FXSR, 0, P_NONE},
1609c0a68be4Smrg {"nehemiah", PROCESSOR_PENTIUMPRO, CPU_PENTIUMPRO,
1610*8feb0f0bSmrg PTA_MMX | PTA_SSE | PTA_FXSR, 0, P_NONE},
1611c0a68be4Smrg {"c7", PROCESSOR_PENTIUMPRO, CPU_PENTIUMPRO,
1612*8feb0f0bSmrg PTA_MMX | PTA_SSE | PTA_SSE2 | PTA_SSE3 | PTA_FXSR, 0, P_NONE},
1613c0a68be4Smrg {"esther", PROCESSOR_PENTIUMPRO, CPU_PENTIUMPRO,
1614*8feb0f0bSmrg PTA_MMX | PTA_SSE | PTA_SSE2 | PTA_SSE3 | PTA_FXSR, 0, P_NONE},
1615*8feb0f0bSmrg {"i686", PROCESSOR_PENTIUMPRO, CPU_PENTIUMPRO, 0, 0, P_NONE},
1616*8feb0f0bSmrg {"pentiumpro", PROCESSOR_PENTIUMPRO, CPU_PENTIUMPRO, 0, 0, P_NONE},
1617*8feb0f0bSmrg {"pentium2", PROCESSOR_PENTIUMPRO, CPU_PENTIUMPRO, PTA_MMX | PTA_FXSR,
1618*8feb0f0bSmrg 0, P_NONE},
1619c0a68be4Smrg {"pentium3", PROCESSOR_PENTIUMPRO, CPU_PENTIUMPRO,
1620*8feb0f0bSmrg PTA_MMX | PTA_SSE | PTA_FXSR, 0, P_NONE},
1621c0a68be4Smrg {"pentium3m", PROCESSOR_PENTIUMPRO, CPU_PENTIUMPRO,
1622*8feb0f0bSmrg PTA_MMX | PTA_SSE | PTA_FXSR, 0, P_NONE},
1623c0a68be4Smrg {"pentium-m", PROCESSOR_PENTIUMPRO, CPU_PENTIUMPRO,
1624*8feb0f0bSmrg PTA_MMX | PTA_SSE | PTA_SSE2 | PTA_FXSR, 0, P_NONE},
1625c0a68be4Smrg {"pentium4", PROCESSOR_PENTIUM4, CPU_NONE,
1626*8feb0f0bSmrg PTA_MMX | PTA_SSE | PTA_SSE2 | PTA_FXSR, 0, P_NONE},
1627c0a68be4Smrg {"pentium4m", PROCESSOR_PENTIUM4, CPU_NONE,
1628*8feb0f0bSmrg PTA_MMX | PTA_SSE | PTA_SSE2 | PTA_FXSR, 0, P_NONE},
1629c0a68be4Smrg {"prescott", PROCESSOR_NOCONA, CPU_NONE,
1630*8feb0f0bSmrg PTA_MMX | PTA_SSE | PTA_SSE2 | PTA_SSE3 | PTA_FXSR, 0, P_NONE},
1631c0a68be4Smrg {"nocona", PROCESSOR_NOCONA, CPU_NONE,
1632c0a68be4Smrg PTA_64BIT | PTA_MMX | PTA_SSE | PTA_SSE2 | PTA_SSE3
1633*8feb0f0bSmrg | PTA_CX16 | PTA_NO_SAHF | PTA_FXSR, 0, P_NONE},
1634*8feb0f0bSmrg {"core2", PROCESSOR_CORE2, CPU_CORE2, PTA_CORE2,
1635*8feb0f0bSmrg M_CPU_TYPE (INTEL_CORE2), P_PROC_SSSE3},
1636*8feb0f0bSmrg {"nehalem", PROCESSOR_NEHALEM, CPU_NEHALEM, PTA_NEHALEM,
1637*8feb0f0bSmrg M_CPU_SUBTYPE (INTEL_COREI7_NEHALEM), P_PROC_DYNAMIC},
1638*8feb0f0bSmrg {"corei7", PROCESSOR_NEHALEM, CPU_NEHALEM, PTA_NEHALEM,
1639*8feb0f0bSmrg M_CPU_TYPE (INTEL_COREI7), P_PROC_DYNAMIC},
1640*8feb0f0bSmrg {"westmere", PROCESSOR_NEHALEM, CPU_NEHALEM, PTA_WESTMERE,
1641*8feb0f0bSmrg M_CPU_SUBTYPE (INTEL_COREI7_WESTMERE), P_PROC_DYNAMIC},
1642c0a68be4Smrg {"sandybridge", PROCESSOR_SANDYBRIDGE, CPU_NEHALEM,
1643*8feb0f0bSmrg PTA_SANDYBRIDGE,
1644*8feb0f0bSmrg M_CPU_SUBTYPE (INTEL_COREI7_SANDYBRIDGE), P_PROC_DYNAMIC},
1645c0a68be4Smrg {"corei7-avx", PROCESSOR_SANDYBRIDGE, CPU_NEHALEM,
1646*8feb0f0bSmrg PTA_SANDYBRIDGE, 0, P_PROC_DYNAMIC},
1647c0a68be4Smrg {"ivybridge", PROCESSOR_SANDYBRIDGE, CPU_NEHALEM,
1648*8feb0f0bSmrg PTA_IVYBRIDGE,
1649*8feb0f0bSmrg M_CPU_SUBTYPE (INTEL_COREI7_IVYBRIDGE), P_PROC_DYNAMIC},
1650c0a68be4Smrg {"core-avx-i", PROCESSOR_SANDYBRIDGE, CPU_NEHALEM,
1651*8feb0f0bSmrg PTA_IVYBRIDGE, 0, P_PROC_DYNAMIC},
1652*8feb0f0bSmrg {"haswell", PROCESSOR_HASWELL, CPU_HASWELL, PTA_HASWELL,
1653*8feb0f0bSmrg M_CPU_SUBTYPE (INTEL_COREI7_HASWELL), P_PROC_DYNAMIC},
1654*8feb0f0bSmrg {"core-avx2", PROCESSOR_HASWELL, CPU_HASWELL, PTA_HASWELL,
1655*8feb0f0bSmrg 0, P_PROC_DYNAMIC},
1656*8feb0f0bSmrg {"broadwell", PROCESSOR_HASWELL, CPU_HASWELL, PTA_BROADWELL,
1657*8feb0f0bSmrg M_CPU_SUBTYPE (INTEL_COREI7_BROADWELL), P_PROC_DYNAMIC},
1658*8feb0f0bSmrg {"skylake", PROCESSOR_SKYLAKE, CPU_HASWELL, PTA_SKYLAKE,
1659*8feb0f0bSmrg M_CPU_SUBTYPE (INTEL_COREI7_SKYLAKE), P_PROC_AVX2},
1660c0a68be4Smrg {"skylake-avx512", PROCESSOR_SKYLAKE_AVX512, CPU_HASWELL,
1661*8feb0f0bSmrg PTA_SKYLAKE_AVX512,
1662*8feb0f0bSmrg M_CPU_SUBTYPE (INTEL_COREI7_SKYLAKE_AVX512), P_PROC_AVX512F},
1663*8feb0f0bSmrg {"cannonlake", PROCESSOR_CANNONLAKE, CPU_HASWELL, PTA_CANNONLAKE,
1664*8feb0f0bSmrg M_CPU_SUBTYPE (INTEL_COREI7_CANNONLAKE), P_PROC_AVX512F},
1665c0a68be4Smrg {"icelake-client", PROCESSOR_ICELAKE_CLIENT, CPU_HASWELL,
1666*8feb0f0bSmrg PTA_ICELAKE_CLIENT,
1667*8feb0f0bSmrg M_CPU_SUBTYPE (INTEL_COREI7_ICELAKE_CLIENT), P_PROC_AVX512F},
1668c0a68be4Smrg {"icelake-server", PROCESSOR_ICELAKE_SERVER, CPU_HASWELL,
1669*8feb0f0bSmrg PTA_ICELAKE_SERVER,
1670*8feb0f0bSmrg M_CPU_SUBTYPE (INTEL_COREI7_ICELAKE_SERVER), P_PROC_AVX512F},
1671c0a68be4Smrg {"cascadelake", PROCESSOR_CASCADELAKE, CPU_HASWELL,
1672*8feb0f0bSmrg PTA_CASCADELAKE,
1673*8feb0f0bSmrg M_CPU_SUBTYPE (INTEL_COREI7_CASCADELAKE), P_PROC_AVX512F},
1674*8feb0f0bSmrg {"tigerlake", PROCESSOR_TIGERLAKE, CPU_HASWELL, PTA_TIGERLAKE,
1675*8feb0f0bSmrg M_CPU_SUBTYPE (INTEL_COREI7_TIGERLAKE), P_PROC_AVX512F},
1676*8feb0f0bSmrg {"cooperlake", PROCESSOR_COOPERLAKE, CPU_HASWELL, PTA_COOPERLAKE,
1677*8feb0f0bSmrg M_CPU_SUBTYPE (INTEL_COREI7_COOPERLAKE), P_PROC_AVX512F},
1678*8feb0f0bSmrg {"bonnell", PROCESSOR_BONNELL, CPU_ATOM, PTA_BONNELL,
1679*8feb0f0bSmrg M_CPU_TYPE (INTEL_BONNELL), P_PROC_SSSE3},
1680*8feb0f0bSmrg {"atom", PROCESSOR_BONNELL, CPU_ATOM, PTA_BONNELL,
1681*8feb0f0bSmrg M_CPU_TYPE (INTEL_BONNELL), P_PROC_SSSE3},
1682*8feb0f0bSmrg {"silvermont", PROCESSOR_SILVERMONT, CPU_SLM, PTA_SILVERMONT,
1683*8feb0f0bSmrg M_CPU_TYPE (INTEL_SILVERMONT), P_PROC_SSE4_2},
1684*8feb0f0bSmrg {"slm", PROCESSOR_SILVERMONT, CPU_SLM, PTA_SILVERMONT,
1685*8feb0f0bSmrg M_CPU_TYPE (INTEL_SILVERMONT), P_PROC_SSE4_2},
1686*8feb0f0bSmrg {"goldmont", PROCESSOR_GOLDMONT, CPU_GLM, PTA_GOLDMONT,
1687*8feb0f0bSmrg M_CPU_TYPE (INTEL_GOLDMONT), P_PROC_SSE4_2},
1688*8feb0f0bSmrg {"goldmont-plus", PROCESSOR_GOLDMONT_PLUS, CPU_GLM, PTA_GOLDMONT_PLUS,
1689*8feb0f0bSmrg M_CPU_TYPE (INTEL_GOLDMONT_PLUS), P_PROC_SSE4_2},
1690*8feb0f0bSmrg {"tremont", PROCESSOR_TREMONT, CPU_GLM, PTA_TREMONT,
1691*8feb0f0bSmrg M_CPU_TYPE (INTEL_TREMONT), P_PROC_SSE4_2},
1692*8feb0f0bSmrg {"knl", PROCESSOR_KNL, CPU_SLM, PTA_KNL,
1693*8feb0f0bSmrg M_CPU_TYPE (INTEL_KNL), P_PROC_AVX512F},
1694*8feb0f0bSmrg {"knm", PROCESSOR_KNM, CPU_SLM, PTA_KNM,
1695*8feb0f0bSmrg M_CPU_TYPE (INTEL_KNM), P_PROC_AVX512F},
1696*8feb0f0bSmrg {"intel", PROCESSOR_INTEL, CPU_SLM, PTA_NEHALEM,
1697*8feb0f0bSmrg M_VENDOR (VENDOR_INTEL), P_NONE},
1698c0a68be4Smrg {"geode", PROCESSOR_GEODE, CPU_GEODE,
1699*8feb0f0bSmrg PTA_MMX | PTA_3DNOW | PTA_3DNOW_A | PTA_PREFETCH_SSE, 0, P_NONE},
1700*8feb0f0bSmrg {"k6", PROCESSOR_K6, CPU_K6, PTA_MMX, 0, P_NONE},
1701*8feb0f0bSmrg {"k6-2", PROCESSOR_K6, CPU_K6, PTA_MMX | PTA_3DNOW, 0, P_NONE},
1702*8feb0f0bSmrg {"k6-3", PROCESSOR_K6, CPU_K6, PTA_MMX | PTA_3DNOW, 0, P_NONE},
1703c0a68be4Smrg {"athlon", PROCESSOR_ATHLON, CPU_ATHLON,
1704*8feb0f0bSmrg PTA_MMX | PTA_3DNOW | PTA_3DNOW_A | PTA_PREFETCH_SSE, 0, P_NONE},
1705c0a68be4Smrg {"athlon-tbird", PROCESSOR_ATHLON, CPU_ATHLON,
1706*8feb0f0bSmrg PTA_MMX | PTA_3DNOW | PTA_3DNOW_A | PTA_PREFETCH_SSE, 0, P_NONE},
1707c0a68be4Smrg {"athlon-4", PROCESSOR_ATHLON, CPU_ATHLON,
1708*8feb0f0bSmrg PTA_MMX | PTA_3DNOW | PTA_3DNOW_A | PTA_SSE | PTA_FXSR, 0, P_NONE},
1709c0a68be4Smrg {"athlon-xp", PROCESSOR_ATHLON, CPU_ATHLON,
1710*8feb0f0bSmrg PTA_MMX | PTA_3DNOW | PTA_3DNOW_A | PTA_SSE | PTA_FXSR, 0, P_NONE},
1711c0a68be4Smrg {"athlon-mp", PROCESSOR_ATHLON, CPU_ATHLON,
1712*8feb0f0bSmrg PTA_MMX | PTA_3DNOW | PTA_3DNOW_A | PTA_SSE | PTA_FXSR, 0, P_NONE},
1713c0a68be4Smrg {"x86-64", PROCESSOR_K8, CPU_K8,
1714*8feb0f0bSmrg PTA_64BIT | PTA_MMX | PTA_SSE | PTA_SSE2 | PTA_NO_SAHF | PTA_FXSR,
1715*8feb0f0bSmrg 0, P_NONE},
1716c0a68be4Smrg {"eden-x2", PROCESSOR_K8, CPU_K8,
1717*8feb0f0bSmrg PTA_64BIT | PTA_MMX | PTA_SSE | PTA_SSE2 | PTA_SSE3 | PTA_FXSR,
1718*8feb0f0bSmrg 0, P_NONE},
1719c0a68be4Smrg {"nano", PROCESSOR_K8, CPU_K8,
1720c0a68be4Smrg PTA_64BIT | PTA_MMX | PTA_SSE | PTA_SSE2 | PTA_SSE3
1721*8feb0f0bSmrg | PTA_SSSE3 | PTA_FXSR, 0, P_NONE},
1722c0a68be4Smrg {"nano-1000", PROCESSOR_K8, CPU_K8,
1723c0a68be4Smrg PTA_64BIT | PTA_MMX | PTA_SSE | PTA_SSE2 | PTA_SSE3
1724*8feb0f0bSmrg | PTA_SSSE3 | PTA_FXSR, 0, P_NONE},
1725c0a68be4Smrg {"nano-2000", PROCESSOR_K8, CPU_K8,
1726c0a68be4Smrg PTA_64BIT | PTA_MMX | PTA_SSE | PTA_SSE2 | PTA_SSE3
1727*8feb0f0bSmrg | PTA_SSSE3 | PTA_FXSR, 0, P_NONE},
1728c0a68be4Smrg {"nano-3000", PROCESSOR_K8, CPU_K8,
1729c0a68be4Smrg PTA_64BIT | PTA_MMX | PTA_SSE | PTA_SSE2 | PTA_SSE3
1730*8feb0f0bSmrg | PTA_SSSE3 | PTA_SSE4_1 | PTA_FXSR, 0, P_NONE},
1731c0a68be4Smrg {"nano-x2", PROCESSOR_K8, CPU_K8,
1732c0a68be4Smrg PTA_64BIT | PTA_MMX | PTA_SSE | PTA_SSE2 | PTA_SSE3
1733*8feb0f0bSmrg | PTA_SSSE3 | PTA_SSE4_1 | PTA_FXSR, 0, P_NONE},
1734c0a68be4Smrg {"eden-x4", PROCESSOR_K8, CPU_K8,
1735c0a68be4Smrg PTA_64BIT | PTA_MMX | PTA_SSE | PTA_SSE2 | PTA_SSE3
1736*8feb0f0bSmrg | PTA_SSSE3 | PTA_SSE4_1 | PTA_FXSR, 0, P_NONE},
1737c0a68be4Smrg {"nano-x4", PROCESSOR_K8, CPU_K8,
1738c0a68be4Smrg PTA_64BIT | PTA_MMX | PTA_SSE | PTA_SSE2 | PTA_SSE3
1739*8feb0f0bSmrg | PTA_SSSE3 | PTA_SSE4_1 | PTA_FXSR, 0, P_NONE},
1740c0a68be4Smrg {"k8", PROCESSOR_K8, CPU_K8,
1741c0a68be4Smrg PTA_64BIT | PTA_MMX | PTA_3DNOW | PTA_3DNOW_A | PTA_SSE
1742*8feb0f0bSmrg | PTA_SSE2 | PTA_NO_SAHF | PTA_FXSR, 0, P_NONE},
1743c0a68be4Smrg {"k8-sse3", PROCESSOR_K8, CPU_K8,
1744c0a68be4Smrg PTA_64BIT | PTA_MMX | PTA_3DNOW | PTA_3DNOW_A | PTA_SSE
1745*8feb0f0bSmrg | PTA_SSE2 | PTA_SSE3 | PTA_NO_SAHF | PTA_FXSR, 0, P_NONE},
1746c0a68be4Smrg {"opteron", PROCESSOR_K8, CPU_K8,
1747c0a68be4Smrg PTA_64BIT | PTA_MMX | PTA_3DNOW | PTA_3DNOW_A | PTA_SSE
1748*8feb0f0bSmrg | PTA_SSE2 | PTA_NO_SAHF | PTA_FXSR, 0, P_NONE},
1749c0a68be4Smrg {"opteron-sse3", PROCESSOR_K8, CPU_K8,
1750c0a68be4Smrg PTA_64BIT | PTA_MMX | PTA_3DNOW | PTA_3DNOW_A | PTA_SSE
1751*8feb0f0bSmrg | PTA_SSE2 | PTA_SSE3 | PTA_NO_SAHF | PTA_FXSR, 0, P_NONE},
1752c0a68be4Smrg {"athlon64", PROCESSOR_K8, CPU_K8,
1753c0a68be4Smrg PTA_64BIT | PTA_MMX | PTA_3DNOW | PTA_3DNOW_A | PTA_SSE
1754*8feb0f0bSmrg | PTA_SSE2 | PTA_NO_SAHF | PTA_FXSR, 0, P_NONE},
1755c0a68be4Smrg {"athlon64-sse3", PROCESSOR_K8, CPU_K8,
1756c0a68be4Smrg PTA_64BIT | PTA_MMX | PTA_3DNOW | PTA_3DNOW_A | PTA_SSE
1757*8feb0f0bSmrg | PTA_SSE2 | PTA_SSE3 | PTA_NO_SAHF | PTA_FXSR, 0, P_NONE},
1758c0a68be4Smrg {"athlon-fx", PROCESSOR_K8, CPU_K8,
1759c0a68be4Smrg PTA_64BIT | PTA_MMX | PTA_3DNOW | PTA_3DNOW_A | PTA_SSE
1760*8feb0f0bSmrg | PTA_SSE2 | PTA_NO_SAHF | PTA_FXSR, 0, P_NONE},
1761c0a68be4Smrg {"amdfam10", PROCESSOR_AMDFAM10, CPU_AMDFAM10,
1762c0a68be4Smrg PTA_64BIT | PTA_MMX | PTA_3DNOW | PTA_3DNOW_A | PTA_SSE | PTA_SSE2
1763*8feb0f0bSmrg | PTA_SSE3 | PTA_SSE4A | PTA_CX16 | PTA_ABM | PTA_PRFCHW | PTA_FXSR,
1764*8feb0f0bSmrg 0, P_PROC_DYNAMIC},
1765c0a68be4Smrg {"barcelona", PROCESSOR_AMDFAM10, CPU_AMDFAM10,
1766c0a68be4Smrg PTA_64BIT | PTA_MMX | PTA_3DNOW | PTA_3DNOW_A | PTA_SSE | PTA_SSE2
1767*8feb0f0bSmrg | PTA_SSE3 | PTA_SSE4A | PTA_CX16 | PTA_ABM | PTA_PRFCHW | PTA_FXSR,
1768*8feb0f0bSmrg M_CPU_SUBTYPE (AMDFAM10H_BARCELONA), P_PROC_DYNAMIC},
1769c0a68be4Smrg {"bdver1", PROCESSOR_BDVER1, CPU_BDVER1,
1770c0a68be4Smrg PTA_64BIT | PTA_MMX | PTA_SSE | PTA_SSE2 | PTA_SSE3
1771c0a68be4Smrg | PTA_SSE4A | PTA_CX16 | PTA_ABM | PTA_SSSE3 | PTA_SSE4_1
1772c0a68be4Smrg | PTA_SSE4_2 | PTA_AES | PTA_PCLMUL | PTA_AVX | PTA_FMA4
1773*8feb0f0bSmrg | PTA_XOP | PTA_LWP | PTA_PRFCHW | PTA_FXSR | PTA_XSAVE,
1774*8feb0f0bSmrg M_CPU_TYPE (AMDFAM15H_BDVER1), P_PROC_XOP},
1775c0a68be4Smrg {"bdver2", PROCESSOR_BDVER2, CPU_BDVER2,
1776c0a68be4Smrg PTA_64BIT | PTA_MMX | PTA_SSE | PTA_SSE2 | PTA_SSE3
1777c0a68be4Smrg | PTA_SSE4A | PTA_CX16 | PTA_ABM | PTA_SSSE3 | PTA_SSE4_1
1778c0a68be4Smrg | PTA_SSE4_2 | PTA_AES | PTA_PCLMUL | PTA_AVX | PTA_FMA4
1779c0a68be4Smrg | PTA_XOP | PTA_LWP | PTA_BMI | PTA_TBM | PTA_F16C
1780*8feb0f0bSmrg | PTA_FMA | PTA_PRFCHW | PTA_FXSR | PTA_XSAVE,
1781*8feb0f0bSmrg M_CPU_TYPE (AMDFAM15H_BDVER2), P_PROC_FMA},
1782c0a68be4Smrg {"bdver3", PROCESSOR_BDVER3, CPU_BDVER3,
1783c0a68be4Smrg PTA_64BIT | PTA_MMX | PTA_SSE | PTA_SSE2 | PTA_SSE3
1784c0a68be4Smrg | PTA_SSE4A | PTA_CX16 | PTA_ABM | PTA_SSSE3 | PTA_SSE4_1
1785c0a68be4Smrg | PTA_SSE4_2 | PTA_AES | PTA_PCLMUL | PTA_AVX | PTA_FMA4
1786c0a68be4Smrg | PTA_XOP | PTA_LWP | PTA_BMI | PTA_TBM | PTA_F16C
1787c0a68be4Smrg | PTA_FMA | PTA_PRFCHW | PTA_FXSR | PTA_XSAVE
1788*8feb0f0bSmrg | PTA_XSAVEOPT | PTA_FSGSBASE,
1789*8feb0f0bSmrg M_CPU_SUBTYPE (AMDFAM15H_BDVER3), P_PROC_FMA},
1790c0a68be4Smrg {"bdver4", PROCESSOR_BDVER4, CPU_BDVER4,
1791c0a68be4Smrg PTA_64BIT | PTA_MMX | PTA_SSE | PTA_SSE2 | PTA_SSE3
1792c0a68be4Smrg | PTA_SSE4A | PTA_CX16 | PTA_ABM | PTA_SSSE3 | PTA_SSE4_1
1793c0a68be4Smrg | PTA_SSE4_2 | PTA_AES | PTA_PCLMUL | PTA_AVX | PTA_AVX2
1794c0a68be4Smrg | PTA_FMA4 | PTA_XOP | PTA_LWP | PTA_BMI | PTA_BMI2
1795c0a68be4Smrg | PTA_TBM | PTA_F16C | PTA_FMA | PTA_PRFCHW | PTA_FXSR
1796c0a68be4Smrg | PTA_XSAVE | PTA_XSAVEOPT | PTA_FSGSBASE | PTA_RDRND
1797*8feb0f0bSmrg | PTA_MOVBE | PTA_MWAITX,
1798*8feb0f0bSmrg M_CPU_SUBTYPE (AMDFAM15H_BDVER4), P_PROC_AVX2},
1799c0a68be4Smrg {"znver1", PROCESSOR_ZNVER1, CPU_ZNVER1,
1800c0a68be4Smrg PTA_64BIT | PTA_MMX | PTA_SSE | PTA_SSE2 | PTA_SSE3
1801c0a68be4Smrg | PTA_SSE4A | PTA_CX16 | PTA_ABM | PTA_SSSE3 | PTA_SSE4_1
1802c0a68be4Smrg | PTA_SSE4_2 | PTA_AES | PTA_PCLMUL | PTA_AVX | PTA_AVX2
1803c0a68be4Smrg | PTA_BMI | PTA_BMI2 | PTA_F16C | PTA_FMA | PTA_PRFCHW
1804c0a68be4Smrg | PTA_FXSR | PTA_XSAVE | PTA_XSAVEOPT | PTA_FSGSBASE
1805c0a68be4Smrg | PTA_RDRND | PTA_MOVBE | PTA_MWAITX | PTA_ADX | PTA_RDSEED
1806c0a68be4Smrg | PTA_CLZERO | PTA_CLFLUSHOPT | PTA_XSAVEC | PTA_XSAVES
1807*8feb0f0bSmrg | PTA_SHA | PTA_LZCNT | PTA_POPCNT,
1808*8feb0f0bSmrg M_CPU_SUBTYPE (AMDFAM17H_ZNVER1), P_PROC_AVX2},
1809c0a68be4Smrg {"znver2", PROCESSOR_ZNVER2, CPU_ZNVER2,
1810c0a68be4Smrg PTA_64BIT | PTA_MMX | PTA_SSE | PTA_SSE2 | PTA_SSE3
1811c0a68be4Smrg | PTA_SSE4A | PTA_CX16 | PTA_ABM | PTA_SSSE3 | PTA_SSE4_1
1812c0a68be4Smrg | PTA_SSE4_2 | PTA_AES | PTA_PCLMUL | PTA_AVX | PTA_AVX2
1813c0a68be4Smrg | PTA_BMI | PTA_BMI2 | PTA_F16C | PTA_FMA | PTA_PRFCHW
1814c0a68be4Smrg | PTA_FXSR | PTA_XSAVE | PTA_XSAVEOPT | PTA_FSGSBASE
1815c0a68be4Smrg | PTA_RDRND | PTA_MOVBE | PTA_MWAITX | PTA_ADX | PTA_RDSEED
1816c0a68be4Smrg | PTA_CLZERO | PTA_CLFLUSHOPT | PTA_XSAVEC | PTA_XSAVES
1817c0a68be4Smrg | PTA_SHA | PTA_LZCNT | PTA_POPCNT | PTA_CLWB | PTA_RDPID
1818*8feb0f0bSmrg | PTA_WBNOINVD,
1819*8feb0f0bSmrg M_CPU_SUBTYPE (AMDFAM17H_ZNVER2), P_PROC_AVX2},
1820*8feb0f0bSmrg {"znver3", PROCESSOR_ZNVER2, CPU_ZNVER2,
1821*8feb0f0bSmrg PTA_64BIT | PTA_MMX | PTA_SSE | PTA_SSE2 | PTA_SSE3
1822*8feb0f0bSmrg | PTA_SSE4A | PTA_CX16 | PTA_ABM | PTA_SSSE3 | PTA_SSE4_1
1823*8feb0f0bSmrg | PTA_SSE4_2 | PTA_AES | PTA_PCLMUL | PTA_AVX | PTA_AVX2
1824*8feb0f0bSmrg | PTA_BMI | PTA_BMI2 | PTA_F16C | PTA_FMA | PTA_PRFCHW
1825*8feb0f0bSmrg | PTA_FXSR | PTA_XSAVE | PTA_XSAVEOPT | PTA_FSGSBASE
1826*8feb0f0bSmrg | PTA_RDRND | PTA_MOVBE | PTA_MWAITX | PTA_ADX | PTA_RDSEED
1827*8feb0f0bSmrg | PTA_CLZERO | PTA_CLFLUSHOPT | PTA_XSAVEC | PTA_XSAVES
1828*8feb0f0bSmrg | PTA_SHA | PTA_LZCNT | PTA_POPCNT | PTA_CLWB | PTA_RDPID
1829*8feb0f0bSmrg | PTA_WBNOINVD | PTA_VAES | PTA_VPCLMULQDQ | PTA_PKU,
1830*8feb0f0bSmrg M_CPU_SUBTYPE (AMDFAM19H_ZNVER3), P_PROC_AVX2},
1831c0a68be4Smrg {"btver1", PROCESSOR_BTVER1, CPU_GENERIC,
1832c0a68be4Smrg PTA_64BIT | PTA_MMX | PTA_SSE | PTA_SSE2 | PTA_SSE3
1833c0a68be4Smrg | PTA_SSSE3 | PTA_SSE4A | PTA_ABM | PTA_CX16 | PTA_PRFCHW
1834*8feb0f0bSmrg | PTA_FXSR | PTA_XSAVE,
1835*8feb0f0bSmrg M_CPU_SUBTYPE (AMDFAM15H_BDVER1), P_PROC_SSE4_A},
1836c0a68be4Smrg {"btver2", PROCESSOR_BTVER2, CPU_BTVER2,
1837c0a68be4Smrg PTA_64BIT | PTA_MMX | PTA_SSE | PTA_SSE2 | PTA_SSE3
1838c0a68be4Smrg | PTA_SSSE3 | PTA_SSE4A | PTA_ABM | PTA_CX16 | PTA_SSE4_1
1839c0a68be4Smrg | PTA_SSE4_2 | PTA_AES | PTA_PCLMUL | PTA_AVX
1840c0a68be4Smrg | PTA_BMI | PTA_F16C | PTA_MOVBE | PTA_PRFCHW
1841*8feb0f0bSmrg | PTA_FXSR | PTA_XSAVE | PTA_XSAVEOPT,
1842*8feb0f0bSmrg M_CPU_TYPE (AMD_BTVER2), P_PROC_BMI},
1843c0a68be4Smrg
1844c0a68be4Smrg {"generic", PROCESSOR_GENERIC, CPU_GENERIC,
1845c0a68be4Smrg PTA_64BIT
1846*8feb0f0bSmrg | PTA_HLE /* flags are only used for -march switch. */,
1847*8feb0f0bSmrg 0, P_NONE},
1848*8feb0f0bSmrg
1849*8feb0f0bSmrg {"amd", PROCESSOR_GENERIC, CPU_GENERIC, 0,
1850*8feb0f0bSmrg M_VENDOR (VENDOR_AMD), P_NONE},
1851*8feb0f0bSmrg {"amdfam10h", PROCESSOR_GENERIC, CPU_GENERIC, 0,
1852*8feb0f0bSmrg M_CPU_TYPE (AMDFAM10H), P_NONE},
1853*8feb0f0bSmrg {"amdfam15h", PROCESSOR_GENERIC, CPU_GENERIC, 0,
1854*8feb0f0bSmrg M_CPU_TYPE (AMDFAM15H), P_NONE},
1855*8feb0f0bSmrg {"amdfam17h", PROCESSOR_GENERIC, CPU_GENERIC, 0,
1856*8feb0f0bSmrg M_CPU_TYPE (AMDFAM17H), P_NONE},
1857*8feb0f0bSmrg {"amdfam19h", PROCESSOR_GENERIC, CPU_GENERIC, 0,
1858*8feb0f0bSmrg M_CPU_TYPE (AMDFAM19H), P_NONE},
1859*8feb0f0bSmrg {"shanghai", PROCESSOR_GENERIC, CPU_GENERIC, 0,
1860*8feb0f0bSmrg M_CPU_TYPE (AMDFAM10H_SHANGHAI), P_NONE},
1861*8feb0f0bSmrg {"istanbul", PROCESSOR_GENERIC, CPU_GENERIC, 0,
1862*8feb0f0bSmrg M_CPU_TYPE (AMDFAM10H_ISTANBUL), P_NONE},
1863c0a68be4Smrg };
1864c0a68be4Smrg
1865*8feb0f0bSmrg /* NB: processor_alias_table stops at the "generic" entry. */
1866*8feb0f0bSmrg int const pta_size = ARRAY_SIZE (processor_alias_table) - 7;
1867*8feb0f0bSmrg unsigned int const num_arch_names = ARRAY_SIZE (processor_alias_table);
1868c0a68be4Smrg
1869c0a68be4Smrg /* Provide valid option values for -march and -mtune options. */
1870c0a68be4Smrg
1871c0a68be4Smrg vec<const char *>
ix86_get_valid_option_values(int option_code,const char * prefix ATTRIBUTE_UNUSED)1872c0a68be4Smrg ix86_get_valid_option_values (int option_code,
1873c0a68be4Smrg const char *prefix ATTRIBUTE_UNUSED)
1874c0a68be4Smrg {
1875c0a68be4Smrg vec<const char *> v;
1876c0a68be4Smrg v.create (0);
1877c0a68be4Smrg opt_code opt = (opt_code) option_code;
1878c0a68be4Smrg
1879c0a68be4Smrg switch (opt)
1880c0a68be4Smrg {
1881c0a68be4Smrg case OPT_march_:
1882c0a68be4Smrg for (unsigned i = 0; i < pta_size; i++)
1883c0a68be4Smrg {
1884c0a68be4Smrg const char *name = processor_alias_table[i].name;
1885c0a68be4Smrg gcc_checking_assert (name != NULL);
1886c0a68be4Smrg v.safe_push (name);
1887c0a68be4Smrg }
1888c0a68be4Smrg #ifdef HAVE_LOCAL_CPU_DETECT
1889c0a68be4Smrg /* Add also "native" as possible value. */
1890c0a68be4Smrg v.safe_push ("native");
1891c0a68be4Smrg #endif
1892c0a68be4Smrg
1893c0a68be4Smrg break;
1894c0a68be4Smrg case OPT_mtune_:
1895c0a68be4Smrg for (unsigned i = 0; i < PROCESSOR_max; i++)
1896c0a68be4Smrg {
1897c0a68be4Smrg const char *name = processor_names[i];
1898c0a68be4Smrg gcc_checking_assert (name != NULL);
1899c0a68be4Smrg v.safe_push (name);
1900c0a68be4Smrg }
1901c0a68be4Smrg break;
1902c0a68be4Smrg default:
1903c0a68be4Smrg break;
1904c0a68be4Smrg }
1905c0a68be4Smrg
1906c0a68be4Smrg return v;
1907c0a68be4Smrg }
1908c0a68be4Smrg
1909c0a68be4Smrg #undef TARGET_GET_VALID_OPTION_VALUES
1910c0a68be4Smrg #define TARGET_GET_VALID_OPTION_VALUES ix86_get_valid_option_values
1911c0a68be4Smrg
191236ac495dSmrg struct gcc_targetm_common targetm_common = TARGETM_COMMON_INITIALIZER;
1913