xref: /netbsd-src/external/gpl3/gcc.old/dist/gcc/common/config/i386/i386-common.c (revision 8feb0f0b7eaff0608f8350bbfa3098827b4bb91b)
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