xref: /dflybsd-src/contrib/gcc-8.0/gcc/common/config/i386/i386-common.c (revision 95059079af47f9a66a175f374f2da1a5020e3255)
138fd1498Szrj /* IA-32 common hooks.
238fd1498Szrj    Copyright (C) 1988-2018 Free Software Foundation, Inc.
338fd1498Szrj 
438fd1498Szrj This file is part of GCC.
538fd1498Szrj 
638fd1498Szrj GCC is free software; you can redistribute it and/or modify
738fd1498Szrj it under the terms of the GNU General Public License as published by
838fd1498Szrj the Free Software Foundation; either version 3, or (at your option)
938fd1498Szrj any later version.
1038fd1498Szrj 
1138fd1498Szrj GCC is distributed in the hope that it will be useful,
1238fd1498Szrj but WITHOUT ANY WARRANTY; without even the implied warranty of
1338fd1498Szrj MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
1438fd1498Szrj GNU General Public License for more details.
1538fd1498Szrj 
1638fd1498Szrj You should have received a copy of the GNU General Public License
1738fd1498Szrj along with GCC; see the file COPYING3.  If not see
1838fd1498Szrj <http://www.gnu.org/licenses/>.  */
1938fd1498Szrj 
2038fd1498Szrj #include "config.h"
2138fd1498Szrj #include "system.h"
2238fd1498Szrj #include "coretypes.h"
2338fd1498Szrj #include "diagnostic-core.h"
2438fd1498Szrj #include "tm.h"
2538fd1498Szrj #include "memmodel.h"
2638fd1498Szrj #include "tm_p.h"
2738fd1498Szrj #include "common/common-target.h"
2838fd1498Szrj #include "common/common-target-def.h"
2938fd1498Szrj #include "opts.h"
3038fd1498Szrj #include "flags.h"
3138fd1498Szrj 
3238fd1498Szrj /* Define a set of ISAs which are available when a given ISA is
3338fd1498Szrj    enabled.  MMX and SSE ISAs are handled separately.  */
3438fd1498Szrj 
3538fd1498Szrj #define OPTION_MASK_ISA_MMX_SET OPTION_MASK_ISA_MMX
3638fd1498Szrj #define OPTION_MASK_ISA_3DNOW_SET \
3738fd1498Szrj   (OPTION_MASK_ISA_3DNOW | OPTION_MASK_ISA_MMX_SET)
3838fd1498Szrj #define OPTION_MASK_ISA_3DNOW_A_SET \
3938fd1498Szrj   (OPTION_MASK_ISA_3DNOW_A | OPTION_MASK_ISA_3DNOW_SET)
4038fd1498Szrj 
4138fd1498Szrj #define OPTION_MASK_ISA_SSE_SET OPTION_MASK_ISA_SSE
4238fd1498Szrj #define OPTION_MASK_ISA_SSE2_SET \
4338fd1498Szrj   (OPTION_MASK_ISA_SSE2 | OPTION_MASK_ISA_SSE_SET)
4438fd1498Szrj #define OPTION_MASK_ISA_SSE3_SET \
4538fd1498Szrj   (OPTION_MASK_ISA_SSE3 | OPTION_MASK_ISA_SSE2_SET)
4638fd1498Szrj #define OPTION_MASK_ISA_SSSE3_SET \
4738fd1498Szrj   (OPTION_MASK_ISA_SSSE3 | OPTION_MASK_ISA_SSE3_SET)
4838fd1498Szrj #define OPTION_MASK_ISA_SSE4_1_SET \
4938fd1498Szrj   (OPTION_MASK_ISA_SSE4_1 | OPTION_MASK_ISA_SSSE3_SET)
5038fd1498Szrj #define OPTION_MASK_ISA_SSE4_2_SET \
5138fd1498Szrj   (OPTION_MASK_ISA_SSE4_2 | OPTION_MASK_ISA_SSE4_1_SET)
5238fd1498Szrj #define OPTION_MASK_ISA_AVX_SET \
5338fd1498Szrj   (OPTION_MASK_ISA_AVX | OPTION_MASK_ISA_SSE4_2_SET \
5438fd1498Szrj    | OPTION_MASK_ISA_XSAVE_SET)
5538fd1498Szrj #define OPTION_MASK_ISA_FMA_SET \
5638fd1498Szrj   (OPTION_MASK_ISA_FMA | OPTION_MASK_ISA_AVX_SET)
5738fd1498Szrj #define OPTION_MASK_ISA_AVX2_SET \
5838fd1498Szrj   (OPTION_MASK_ISA_AVX2 | OPTION_MASK_ISA_AVX_SET)
5938fd1498Szrj #define OPTION_MASK_ISA_FXSR_SET OPTION_MASK_ISA_FXSR
6038fd1498Szrj #define OPTION_MASK_ISA_XSAVE_SET OPTION_MASK_ISA_XSAVE
6138fd1498Szrj #define OPTION_MASK_ISA_XSAVEOPT_SET \
62*58e805e6Szrj   (OPTION_MASK_ISA_XSAVEOPT | OPTION_MASK_ISA_XSAVE_SET)
6338fd1498Szrj #define OPTION_MASK_ISA_AVX512F_SET \
6438fd1498Szrj   (OPTION_MASK_ISA_AVX512F | OPTION_MASK_ISA_AVX2_SET)
6538fd1498Szrj #define OPTION_MASK_ISA_AVX512CD_SET \
6638fd1498Szrj   (OPTION_MASK_ISA_AVX512CD | OPTION_MASK_ISA_AVX512F_SET)
6738fd1498Szrj #define OPTION_MASK_ISA_AVX512PF_SET \
6838fd1498Szrj   (OPTION_MASK_ISA_AVX512PF | OPTION_MASK_ISA_AVX512F_SET)
6938fd1498Szrj #define OPTION_MASK_ISA_AVX512ER_SET \
7038fd1498Szrj   (OPTION_MASK_ISA_AVX512ER | OPTION_MASK_ISA_AVX512F_SET)
7138fd1498Szrj #define OPTION_MASK_ISA_AVX512DQ_SET \
7238fd1498Szrj   (OPTION_MASK_ISA_AVX512DQ | OPTION_MASK_ISA_AVX512F_SET)
7338fd1498Szrj #define OPTION_MASK_ISA_AVX512BW_SET \
7438fd1498Szrj   (OPTION_MASK_ISA_AVX512BW | OPTION_MASK_ISA_AVX512F_SET)
7538fd1498Szrj #define OPTION_MASK_ISA_AVX512VL_SET \
7638fd1498Szrj   (OPTION_MASK_ISA_AVX512VL | OPTION_MASK_ISA_AVX512F_SET)
7738fd1498Szrj #define OPTION_MASK_ISA_AVX512IFMA_SET \
7838fd1498Szrj   (OPTION_MASK_ISA_AVX512IFMA | OPTION_MASK_ISA_AVX512F_SET)
7938fd1498Szrj #define OPTION_MASK_ISA_AVX512VBMI_SET \
8038fd1498Szrj   (OPTION_MASK_ISA_AVX512VBMI | OPTION_MASK_ISA_AVX512BW_SET)
8138fd1498Szrj #define OPTION_MASK_ISA_AVX5124FMAPS_SET OPTION_MASK_ISA_AVX5124FMAPS
8238fd1498Szrj #define OPTION_MASK_ISA_AVX5124VNNIW_SET OPTION_MASK_ISA_AVX5124VNNIW
8338fd1498Szrj #define OPTION_MASK_ISA_AVX512VBMI2_SET \
8438fd1498Szrj   (OPTION_MASK_ISA_AVX512VBMI2 | OPTION_MASK_ISA_AVX512F_SET)
8538fd1498Szrj #define OPTION_MASK_ISA_AVX512VNNI_SET \
8638fd1498Szrj   (OPTION_MASK_ISA_AVX512VNNI | OPTION_MASK_ISA_AVX512F_SET)
8738fd1498Szrj #define OPTION_MASK_ISA_AVX512VPOPCNTDQ_SET \
8838fd1498Szrj   (OPTION_MASK_ISA_AVX512VPOPCNTDQ | OPTION_MASK_ISA_AVX512F_SET)
8938fd1498Szrj #define OPTION_MASK_ISA_AVX512BITALG_SET \
9038fd1498Szrj   (OPTION_MASK_ISA_AVX512BITALG | OPTION_MASK_ISA_AVX512F_SET)
9138fd1498Szrj #define OPTION_MASK_ISA_RTM_SET OPTION_MASK_ISA_RTM
9238fd1498Szrj #define OPTION_MASK_ISA_PRFCHW_SET OPTION_MASK_ISA_PRFCHW
9338fd1498Szrj #define OPTION_MASK_ISA_RDSEED_SET OPTION_MASK_ISA_RDSEED
9438fd1498Szrj #define OPTION_MASK_ISA_ADX_SET OPTION_MASK_ISA_ADX
9538fd1498Szrj #define OPTION_MASK_ISA_PREFETCHWT1_SET OPTION_MASK_ISA_PREFETCHWT1
9638fd1498Szrj #define OPTION_MASK_ISA_CLFLUSHOPT_SET OPTION_MASK_ISA_CLFLUSHOPT
9738fd1498Szrj #define OPTION_MASK_ISA_XSAVES_SET \
98*58e805e6Szrj   (OPTION_MASK_ISA_XSAVES | OPTION_MASK_ISA_XSAVE_SET)
9938fd1498Szrj #define OPTION_MASK_ISA_XSAVEC_SET \
100*58e805e6Szrj   (OPTION_MASK_ISA_XSAVEC | OPTION_MASK_ISA_XSAVE_SET)
10138fd1498Szrj #define OPTION_MASK_ISA_CLWB_SET OPTION_MASK_ISA_CLWB
10238fd1498Szrj 
10338fd1498Szrj /* SSE4 includes both SSE4.1 and SSE4.2. -msse4 should be the same
10438fd1498Szrj    as -msse4.2.  */
10538fd1498Szrj #define OPTION_MASK_ISA_SSE4_SET OPTION_MASK_ISA_SSE4_2_SET
10638fd1498Szrj 
10738fd1498Szrj #define OPTION_MASK_ISA_SSE4A_SET \
10838fd1498Szrj   (OPTION_MASK_ISA_SSE4A | OPTION_MASK_ISA_SSE3_SET)
10938fd1498Szrj #define OPTION_MASK_ISA_FMA4_SET \
11038fd1498Szrj   (OPTION_MASK_ISA_FMA4 | OPTION_MASK_ISA_SSE4A_SET \
11138fd1498Szrj    | OPTION_MASK_ISA_AVX_SET)
11238fd1498Szrj #define OPTION_MASK_ISA_XOP_SET \
11338fd1498Szrj   (OPTION_MASK_ISA_XOP | OPTION_MASK_ISA_FMA4_SET)
11438fd1498Szrj #define OPTION_MASK_ISA_LWP_SET \
11538fd1498Szrj   OPTION_MASK_ISA_LWP
11638fd1498Szrj 
11738fd1498Szrj /* AES, SHA and PCLMUL need SSE2 because they use xmm registers.  */
11838fd1498Szrj #define OPTION_MASK_ISA_AES_SET \
11938fd1498Szrj   (OPTION_MASK_ISA_AES | OPTION_MASK_ISA_SSE2_SET)
12038fd1498Szrj #define OPTION_MASK_ISA_SHA_SET \
12138fd1498Szrj   (OPTION_MASK_ISA_SHA | OPTION_MASK_ISA_SSE2_SET)
12238fd1498Szrj #define OPTION_MASK_ISA_PCLMUL_SET \
12338fd1498Szrj   (OPTION_MASK_ISA_PCLMUL | OPTION_MASK_ISA_SSE2_SET)
12438fd1498Szrj 
12538fd1498Szrj #define OPTION_MASK_ISA_ABM_SET \
12638fd1498Szrj   (OPTION_MASK_ISA_ABM | OPTION_MASK_ISA_POPCNT)
12738fd1498Szrj 
12838fd1498Szrj #define OPTION_MASK_ISA_PCONFIG_SET OPTION_MASK_ISA_PCONFIG
12938fd1498Szrj #define OPTION_MASK_ISA_WBNOINVD_SET OPTION_MASK_ISA_WBNOINVD
13038fd1498Szrj #define OPTION_MASK_ISA_SGX_SET OPTION_MASK_ISA_SGX
13138fd1498Szrj #define OPTION_MASK_ISA_BMI_SET OPTION_MASK_ISA_BMI
13238fd1498Szrj #define OPTION_MASK_ISA_BMI2_SET OPTION_MASK_ISA_BMI2
13338fd1498Szrj #define OPTION_MASK_ISA_LZCNT_SET OPTION_MASK_ISA_LZCNT
13438fd1498Szrj #define OPTION_MASK_ISA_TBM_SET OPTION_MASK_ISA_TBM
13538fd1498Szrj #define OPTION_MASK_ISA_POPCNT_SET OPTION_MASK_ISA_POPCNT
13638fd1498Szrj #define OPTION_MASK_ISA_CX16_SET OPTION_MASK_ISA_CX16
13738fd1498Szrj #define OPTION_MASK_ISA_SAHF_SET OPTION_MASK_ISA_SAHF
13838fd1498Szrj #define OPTION_MASK_ISA_MOVBE_SET OPTION_MASK_ISA_MOVBE
13938fd1498Szrj #define OPTION_MASK_ISA_CRC32_SET OPTION_MASK_ISA_CRC32
14038fd1498Szrj 
14138fd1498Szrj #define OPTION_MASK_ISA_FSGSBASE_SET OPTION_MASK_ISA_FSGSBASE
14238fd1498Szrj #define OPTION_MASK_ISA_RDRND_SET OPTION_MASK_ISA_RDRND
14338fd1498Szrj #define OPTION_MASK_ISA_F16C_SET \
14438fd1498Szrj   (OPTION_MASK_ISA_F16C | OPTION_MASK_ISA_AVX_SET)
14538fd1498Szrj #define OPTION_MASK_ISA_MWAITX_SET OPTION_MASK_ISA_MWAITX
14638fd1498Szrj #define OPTION_MASK_ISA_CLZERO_SET OPTION_MASK_ISA_CLZERO
14738fd1498Szrj #define OPTION_MASK_ISA_PKU_SET OPTION_MASK_ISA_PKU
14838fd1498Szrj #define OPTION_MASK_ISA_RDPID_SET OPTION_MASK_ISA_RDPID
14938fd1498Szrj #define OPTION_MASK_ISA_GFNI_SET OPTION_MASK_ISA_GFNI
15038fd1498Szrj #define OPTION_MASK_ISA_SHSTK_SET OPTION_MASK_ISA_SHSTK
15138fd1498Szrj #define OPTION_MASK_ISA_VAES_SET OPTION_MASK_ISA_VAES
15238fd1498Szrj #define OPTION_MASK_ISA_VPCLMULQDQ_SET OPTION_MASK_ISA_VPCLMULQDQ
15338fd1498Szrj #define OPTION_MASK_ISA_MOVDIRI_SET OPTION_MASK_ISA_MOVDIRI
15438fd1498Szrj #define OPTION_MASK_ISA_MOVDIR64B_SET OPTION_MASK_ISA_MOVDIR64B
15538fd1498Szrj 
15638fd1498Szrj /* Define a set of ISAs which aren't available when a given ISA is
15738fd1498Szrj    disabled.  MMX and SSE ISAs are handled separately.  */
15838fd1498Szrj 
15938fd1498Szrj #define OPTION_MASK_ISA_MMX_UNSET \
16038fd1498Szrj   (OPTION_MASK_ISA_MMX | OPTION_MASK_ISA_3DNOW_UNSET)
16138fd1498Szrj #define OPTION_MASK_ISA_3DNOW_UNSET \
16238fd1498Szrj   (OPTION_MASK_ISA_3DNOW | OPTION_MASK_ISA_3DNOW_A_UNSET)
16338fd1498Szrj #define OPTION_MASK_ISA_3DNOW_A_UNSET OPTION_MASK_ISA_3DNOW_A
16438fd1498Szrj 
16538fd1498Szrj #define OPTION_MASK_ISA_SSE_UNSET \
16638fd1498Szrj   (OPTION_MASK_ISA_SSE | OPTION_MASK_ISA_SSE2_UNSET)
16738fd1498Szrj #define OPTION_MASK_ISA_SSE2_UNSET \
16838fd1498Szrj   (OPTION_MASK_ISA_SSE2 | OPTION_MASK_ISA_SSE3_UNSET)
16938fd1498Szrj #define OPTION_MASK_ISA_SSE3_UNSET \
17038fd1498Szrj   (OPTION_MASK_ISA_SSE3 \
17138fd1498Szrj    | OPTION_MASK_ISA_SSSE3_UNSET \
17238fd1498Szrj    | OPTION_MASK_ISA_SSE4A_UNSET )
17338fd1498Szrj #define OPTION_MASK_ISA_SSSE3_UNSET \
17438fd1498Szrj   (OPTION_MASK_ISA_SSSE3 | OPTION_MASK_ISA_SSE4_1_UNSET)
17538fd1498Szrj #define OPTION_MASK_ISA_SSE4_1_UNSET \
17638fd1498Szrj   (OPTION_MASK_ISA_SSE4_1 | OPTION_MASK_ISA_SSE4_2_UNSET)
17738fd1498Szrj #define OPTION_MASK_ISA_SSE4_2_UNSET \
17838fd1498Szrj   (OPTION_MASK_ISA_SSE4_2 | OPTION_MASK_ISA_AVX_UNSET )
17938fd1498Szrj #define OPTION_MASK_ISA_AVX_UNSET \
18038fd1498Szrj   (OPTION_MASK_ISA_AVX | OPTION_MASK_ISA_FMA_UNSET \
18138fd1498Szrj    | OPTION_MASK_ISA_FMA4_UNSET | OPTION_MASK_ISA_F16C_UNSET \
18238fd1498Szrj    | OPTION_MASK_ISA_AVX2_UNSET | OPTION_MASK_ISA_XSAVE_UNSET)
18338fd1498Szrj #define OPTION_MASK_ISA_FMA_UNSET OPTION_MASK_ISA_FMA
18438fd1498Szrj #define OPTION_MASK_ISA_FXSR_UNSET OPTION_MASK_ISA_FXSR
18538fd1498Szrj #define OPTION_MASK_ISA_XSAVE_UNSET \
186*58e805e6Szrj   (OPTION_MASK_ISA_XSAVE | OPTION_MASK_ISA_XSAVEOPT_UNSET \
187*58e805e6Szrj    | OPTION_MASK_ISA_XSAVES_UNSET | OPTION_MASK_ISA_XSAVEC_UNSET)
18838fd1498Szrj #define OPTION_MASK_ISA_XSAVEOPT_UNSET OPTION_MASK_ISA_XSAVEOPT
18938fd1498Szrj #define OPTION_MASK_ISA_AVX2_UNSET \
19038fd1498Szrj   (OPTION_MASK_ISA_AVX2 | OPTION_MASK_ISA_AVX512F_UNSET)
19138fd1498Szrj #define OPTION_MASK_ISA_AVX512F_UNSET \
19238fd1498Szrj   (OPTION_MASK_ISA_AVX512F | OPTION_MASK_ISA_AVX512CD_UNSET \
19338fd1498Szrj    | OPTION_MASK_ISA_AVX512PF_UNSET | OPTION_MASK_ISA_AVX512ER_UNSET \
19438fd1498Szrj    | OPTION_MASK_ISA_AVX512DQ_UNSET | OPTION_MASK_ISA_AVX512BW_UNSET \
19538fd1498Szrj    | OPTION_MASK_ISA_AVX512VL_UNSET | OPTION_MASK_ISA_AVX512VBMI2_UNSET \
19638fd1498Szrj    | OPTION_MASK_ISA_AVX512VNNI_UNSET | OPTION_MASK_ISA_AVX512VPOPCNTDQ_UNSET \
19738fd1498Szrj    | OPTION_MASK_ISA_AVX512BITALG_UNSET)
19838fd1498Szrj #define OPTION_MASK_ISA_AVX512CD_UNSET OPTION_MASK_ISA_AVX512CD
19938fd1498Szrj #define OPTION_MASK_ISA_AVX512PF_UNSET OPTION_MASK_ISA_AVX512PF
20038fd1498Szrj #define OPTION_MASK_ISA_AVX512ER_UNSET OPTION_MASK_ISA_AVX512ER
20138fd1498Szrj #define OPTION_MASK_ISA_AVX512DQ_UNSET OPTION_MASK_ISA_AVX512DQ
20238fd1498Szrj #define OPTION_MASK_ISA_AVX512BW_UNSET \
20338fd1498Szrj   (OPTION_MASK_ISA_AVX512BW | OPTION_MASK_ISA_AVX512VBMI_UNSET)
20438fd1498Szrj #define OPTION_MASK_ISA_AVX512VL_UNSET OPTION_MASK_ISA_AVX512VL
20538fd1498Szrj #define OPTION_MASK_ISA_AVX512IFMA_UNSET OPTION_MASK_ISA_AVX512IFMA
20638fd1498Szrj #define OPTION_MASK_ISA_AVX512VBMI_UNSET OPTION_MASK_ISA_AVX512VBMI
20738fd1498Szrj #define OPTION_MASK_ISA_AVX5124FMAPS_UNSET OPTION_MASK_ISA_AVX5124FMAPS
20838fd1498Szrj #define OPTION_MASK_ISA_AVX5124VNNIW_UNSET OPTION_MASK_ISA_AVX5124VNNIW
20938fd1498Szrj #define OPTION_MASK_ISA_AVX512VBMI2_UNSET OPTION_MASK_ISA_AVX512VBMI2
21038fd1498Szrj #define OPTION_MASK_ISA_AVX512VNNI_UNSET OPTION_MASK_ISA_AVX512VNNI
21138fd1498Szrj #define OPTION_MASK_ISA_AVX512VPOPCNTDQ_UNSET OPTION_MASK_ISA_AVX512VPOPCNTDQ
21238fd1498Szrj #define OPTION_MASK_ISA_AVX512BITALG_UNSET OPTION_MASK_ISA_AVX512BITALG
21338fd1498Szrj #define OPTION_MASK_ISA_RTM_UNSET OPTION_MASK_ISA_RTM
21438fd1498Szrj #define OPTION_MASK_ISA_PRFCHW_UNSET OPTION_MASK_ISA_PRFCHW
21538fd1498Szrj #define OPTION_MASK_ISA_RDSEED_UNSET OPTION_MASK_ISA_RDSEED
21638fd1498Szrj #define OPTION_MASK_ISA_ADX_UNSET OPTION_MASK_ISA_ADX
21738fd1498Szrj #define OPTION_MASK_ISA_PREFETCHWT1_UNSET OPTION_MASK_ISA_PREFETCHWT1
21838fd1498Szrj #define OPTION_MASK_ISA_CLFLUSHOPT_UNSET OPTION_MASK_ISA_CLFLUSHOPT
21938fd1498Szrj #define OPTION_MASK_ISA_XSAVEC_UNSET OPTION_MASK_ISA_XSAVEC
22038fd1498Szrj #define OPTION_MASK_ISA_XSAVES_UNSET OPTION_MASK_ISA_XSAVES
22138fd1498Szrj #define OPTION_MASK_ISA_CLWB_UNSET OPTION_MASK_ISA_CLWB
22238fd1498Szrj #define OPTION_MASK_ISA_MWAITX_UNSET OPTION_MASK_ISA_MWAITX
22338fd1498Szrj #define OPTION_MASK_ISA_CLZERO_UNSET OPTION_MASK_ISA_CLZERO
22438fd1498Szrj #define OPTION_MASK_ISA_PKU_UNSET OPTION_MASK_ISA_PKU
22538fd1498Szrj #define OPTION_MASK_ISA_RDPID_UNSET OPTION_MASK_ISA_RDPID
22638fd1498Szrj #define OPTION_MASK_ISA_GFNI_UNSET OPTION_MASK_ISA_GFNI
22738fd1498Szrj #define OPTION_MASK_ISA_SHSTK_UNSET OPTION_MASK_ISA_SHSTK
22838fd1498Szrj #define OPTION_MASK_ISA_VAES_UNSET OPTION_MASK_ISA_VAES
22938fd1498Szrj #define OPTION_MASK_ISA_VPCLMULQDQ_UNSET OPTION_MASK_ISA_VPCLMULQDQ
23038fd1498Szrj #define OPTION_MASK_ISA_MOVDIRI_UNSET OPTION_MASK_ISA_MOVDIRI
23138fd1498Szrj #define OPTION_MASK_ISA_MOVDIR64B_UNSET OPTION_MASK_ISA_MOVDIR64B
23238fd1498Szrj 
23338fd1498Szrj /* SSE4 includes both SSE4.1 and SSE4.2.  -mno-sse4 should the same
23438fd1498Szrj    as -mno-sse4.1. */
23538fd1498Szrj #define OPTION_MASK_ISA_SSE4_UNSET OPTION_MASK_ISA_SSE4_1_UNSET
23638fd1498Szrj 
23738fd1498Szrj #define OPTION_MASK_ISA_SSE4A_UNSET \
23838fd1498Szrj   (OPTION_MASK_ISA_SSE4A | OPTION_MASK_ISA_FMA4_UNSET)
23938fd1498Szrj 
24038fd1498Szrj #define OPTION_MASK_ISA_FMA4_UNSET \
24138fd1498Szrj   (OPTION_MASK_ISA_FMA4 | OPTION_MASK_ISA_XOP_UNSET)
24238fd1498Szrj #define OPTION_MASK_ISA_XOP_UNSET OPTION_MASK_ISA_XOP
24338fd1498Szrj #define OPTION_MASK_ISA_LWP_UNSET OPTION_MASK_ISA_LWP
24438fd1498Szrj 
24538fd1498Szrj #define OPTION_MASK_ISA_AES_UNSET OPTION_MASK_ISA_AES
24638fd1498Szrj #define OPTION_MASK_ISA_SHA_UNSET OPTION_MASK_ISA_SHA
24738fd1498Szrj #define OPTION_MASK_ISA_PCLMUL_UNSET OPTION_MASK_ISA_PCLMUL
24838fd1498Szrj #define OPTION_MASK_ISA_ABM_UNSET OPTION_MASK_ISA_ABM
24938fd1498Szrj #define OPTION_MASK_ISA_PCONFIG_UNSET OPTION_MASK_ISA_PCONFIG
25038fd1498Szrj #define OPTION_MASK_ISA_WBNOINVD_UNSET OPTION_MASK_ISA_WBNOINVD
25138fd1498Szrj #define OPTION_MASK_ISA_SGX_UNSET OPTION_MASK_ISA_SGX
25238fd1498Szrj #define OPTION_MASK_ISA_BMI_UNSET OPTION_MASK_ISA_BMI
25338fd1498Szrj #define OPTION_MASK_ISA_BMI2_UNSET OPTION_MASK_ISA_BMI2
25438fd1498Szrj #define OPTION_MASK_ISA_LZCNT_UNSET OPTION_MASK_ISA_LZCNT
25538fd1498Szrj #define OPTION_MASK_ISA_TBM_UNSET OPTION_MASK_ISA_TBM
25638fd1498Szrj #define OPTION_MASK_ISA_POPCNT_UNSET OPTION_MASK_ISA_POPCNT
25738fd1498Szrj #define OPTION_MASK_ISA_CX16_UNSET OPTION_MASK_ISA_CX16
25838fd1498Szrj #define OPTION_MASK_ISA_SAHF_UNSET OPTION_MASK_ISA_SAHF
25938fd1498Szrj #define OPTION_MASK_ISA_MOVBE_UNSET OPTION_MASK_ISA_MOVBE
26038fd1498Szrj #define OPTION_MASK_ISA_CRC32_UNSET OPTION_MASK_ISA_CRC32
26138fd1498Szrj 
26238fd1498Szrj #define OPTION_MASK_ISA_FSGSBASE_UNSET OPTION_MASK_ISA_FSGSBASE
26338fd1498Szrj #define OPTION_MASK_ISA_RDRND_UNSET OPTION_MASK_ISA_RDRND
26438fd1498Szrj #define OPTION_MASK_ISA_F16C_UNSET OPTION_MASK_ISA_F16C
26538fd1498Szrj 
26638fd1498Szrj #define OPTION_MASK_ISA_GENERAL_REGS_ONLY_UNSET \
26738fd1498Szrj   (OPTION_MASK_ISA_MMX_UNSET \
26838fd1498Szrj    | OPTION_MASK_ISA_SSE_UNSET)
26938fd1498Szrj 
27038fd1498Szrj #define OPTION_MASK_ISA2_AVX512F_UNSET \
27138fd1498Szrj   (OPTION_MASK_ISA_AVX5124FMAPS_UNSET | OPTION_MASK_ISA_AVX5124VNNIW_UNSET)
27238fd1498Szrj #define OPTION_MASK_ISA2_GENERAL_REGS_ONLY_UNSET \
27338fd1498Szrj   (OPTION_MASK_ISA2_AVX512F_UNSET | OPTION_MASK_ISA_MPX)
27438fd1498Szrj 
27538fd1498Szrj /* Implement TARGET_HANDLE_OPTION.  */
27638fd1498Szrj 
27738fd1498Szrj bool
ix86_handle_option(struct gcc_options * opts,struct gcc_options * opts_set ATTRIBUTE_UNUSED,const struct cl_decoded_option * decoded,location_t loc)27838fd1498Szrj ix86_handle_option (struct gcc_options *opts,
27938fd1498Szrj 		    struct gcc_options *opts_set ATTRIBUTE_UNUSED,
28038fd1498Szrj 		    const struct cl_decoded_option *decoded,
28138fd1498Szrj 		    location_t loc)
28238fd1498Szrj {
28338fd1498Szrj   size_t code = decoded->opt_index;
28438fd1498Szrj   int value = decoded->value;
28538fd1498Szrj 
28638fd1498Szrj   switch (code)
28738fd1498Szrj     {
28838fd1498Szrj     case OPT_mgeneral_regs_only:
28938fd1498Szrj       if (value)
29038fd1498Szrj 	{
29138fd1498Szrj 	  /* Disable MPX, MMX, SSE and x87 instructions if only
29238fd1498Szrj 	     general registers are allowed.  */
29338fd1498Szrj 	  opts->x_ix86_isa_flags
29438fd1498Szrj 	    &= ~OPTION_MASK_ISA_GENERAL_REGS_ONLY_UNSET;
29538fd1498Szrj 	  opts->x_ix86_isa_flags2
29638fd1498Szrj 	    &= ~OPTION_MASK_ISA2_GENERAL_REGS_ONLY_UNSET;
29738fd1498Szrj 	  opts->x_ix86_isa_flags_explicit
29838fd1498Szrj 	    |= OPTION_MASK_ISA_GENERAL_REGS_ONLY_UNSET;
29938fd1498Szrj 	  opts->x_ix86_isa_flags2_explicit
30038fd1498Szrj 	    |= OPTION_MASK_ISA2_GENERAL_REGS_ONLY_UNSET;
30138fd1498Szrj 
30238fd1498Szrj 	  opts->x_target_flags &= ~MASK_80387;
30338fd1498Szrj 	}
30438fd1498Szrj       else
30538fd1498Szrj 	gcc_unreachable ();
30638fd1498Szrj       return true;
30738fd1498Szrj 
30838fd1498Szrj     case OPT_mmmx:
30938fd1498Szrj       if (value)
31038fd1498Szrj 	{
31138fd1498Szrj 	  opts->x_ix86_isa_flags |= OPTION_MASK_ISA_MMX_SET;
31238fd1498Szrj 	  opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_MMX_SET;
31338fd1498Szrj 	}
31438fd1498Szrj       else
31538fd1498Szrj 	{
31638fd1498Szrj 	  opts->x_ix86_isa_flags &= ~OPTION_MASK_ISA_MMX_UNSET;
31738fd1498Szrj 	  opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_MMX_UNSET;
31838fd1498Szrj 	}
31938fd1498Szrj       return true;
32038fd1498Szrj 
32138fd1498Szrj     case OPT_m3dnow:
32238fd1498Szrj       if (value)
32338fd1498Szrj 	{
32438fd1498Szrj 	  opts->x_ix86_isa_flags |= OPTION_MASK_ISA_3DNOW_SET;
32538fd1498Szrj 	  opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_3DNOW_SET;
32638fd1498Szrj 	}
32738fd1498Szrj       else
32838fd1498Szrj 	{
32938fd1498Szrj 	  opts->x_ix86_isa_flags &= ~OPTION_MASK_ISA_3DNOW_UNSET;
33038fd1498Szrj 	  opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_3DNOW_UNSET;
33138fd1498Szrj 	}
33238fd1498Szrj       return true;
33338fd1498Szrj 
33438fd1498Szrj     case OPT_m3dnowa:
33538fd1498Szrj       if (value)
33638fd1498Szrj 	{
33738fd1498Szrj 	  opts->x_ix86_isa_flags |= OPTION_MASK_ISA_3DNOW_A_SET;
33838fd1498Szrj 	  opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_3DNOW_A_SET;
33938fd1498Szrj 	}
34038fd1498Szrj       else
34138fd1498Szrj 	{
34238fd1498Szrj 	  opts->x_ix86_isa_flags &= ~OPTION_MASK_ISA_3DNOW_A_UNSET;
34338fd1498Szrj 	  opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_3DNOW_A_UNSET;
34438fd1498Szrj 	}
34538fd1498Szrj       return true;
34638fd1498Szrj 
34738fd1498Szrj     case OPT_msse:
34838fd1498Szrj       if (value)
34938fd1498Szrj 	{
35038fd1498Szrj 	  opts->x_ix86_isa_flags |= OPTION_MASK_ISA_SSE_SET;
35138fd1498Szrj 	  opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_SSE_SET;
35238fd1498Szrj 	}
35338fd1498Szrj       else
35438fd1498Szrj 	{
35538fd1498Szrj 	  opts->x_ix86_isa_flags &= ~OPTION_MASK_ISA_SSE_UNSET;
35638fd1498Szrj 	  opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_SSE_UNSET;
35738fd1498Szrj 	  opts->x_ix86_isa_flags2 &= ~OPTION_MASK_ISA2_AVX512F_UNSET;
35838fd1498Szrj 	  opts->x_ix86_isa_flags2_explicit |= OPTION_MASK_ISA2_AVX512F_UNSET;
35938fd1498Szrj 	}
36038fd1498Szrj       return true;
36138fd1498Szrj 
36238fd1498Szrj     case OPT_msse2:
36338fd1498Szrj       if (value)
36438fd1498Szrj 	{
36538fd1498Szrj 	  opts->x_ix86_isa_flags |= OPTION_MASK_ISA_SSE2_SET;
36638fd1498Szrj 	  opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_SSE2_SET;
36738fd1498Szrj 	}
36838fd1498Szrj       else
36938fd1498Szrj 	{
37038fd1498Szrj 	  opts->x_ix86_isa_flags &= ~OPTION_MASK_ISA_SSE2_UNSET;
37138fd1498Szrj 	  opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_SSE2_UNSET;
37238fd1498Szrj 	  opts->x_ix86_isa_flags2 &= ~OPTION_MASK_ISA2_AVX512F_UNSET;
37338fd1498Szrj 	  opts->x_ix86_isa_flags2_explicit |= OPTION_MASK_ISA2_AVX512F_UNSET;
37438fd1498Szrj 	}
37538fd1498Szrj       return true;
37638fd1498Szrj 
37738fd1498Szrj     case OPT_msse3:
37838fd1498Szrj       if (value)
37938fd1498Szrj 	{
38038fd1498Szrj 	  opts->x_ix86_isa_flags |= OPTION_MASK_ISA_SSE3_SET;
38138fd1498Szrj 	  opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_SSE3_SET;
38238fd1498Szrj 	}
38338fd1498Szrj       else
38438fd1498Szrj 	{
38538fd1498Szrj 	  opts->x_ix86_isa_flags &= ~OPTION_MASK_ISA_SSE3_UNSET;
38638fd1498Szrj 	  opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_SSE3_UNSET;
38738fd1498Szrj 	  opts->x_ix86_isa_flags2 &= ~OPTION_MASK_ISA2_AVX512F_UNSET;
38838fd1498Szrj 	  opts->x_ix86_isa_flags2_explicit |= OPTION_MASK_ISA2_AVX512F_UNSET;
38938fd1498Szrj 	}
39038fd1498Szrj       return true;
39138fd1498Szrj 
39238fd1498Szrj     case OPT_mssse3:
39338fd1498Szrj       if (value)
39438fd1498Szrj 	{
39538fd1498Szrj 	  opts->x_ix86_isa_flags |= OPTION_MASK_ISA_SSSE3_SET;
39638fd1498Szrj 	  opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_SSSE3_SET;
39738fd1498Szrj 	}
39838fd1498Szrj       else
39938fd1498Szrj 	{
40038fd1498Szrj 	  opts->x_ix86_isa_flags &= ~OPTION_MASK_ISA_SSSE3_UNSET;
40138fd1498Szrj 	  opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_SSSE3_UNSET;
40238fd1498Szrj 	  opts->x_ix86_isa_flags2 &= ~OPTION_MASK_ISA2_AVX512F_UNSET;
40338fd1498Szrj 	  opts->x_ix86_isa_flags2_explicit |= OPTION_MASK_ISA2_AVX512F_UNSET;
40438fd1498Szrj 	}
40538fd1498Szrj       return true;
40638fd1498Szrj 
40738fd1498Szrj     case OPT_msse4_1:
40838fd1498Szrj       if (value)
40938fd1498Szrj 	{
41038fd1498Szrj 	  opts->x_ix86_isa_flags |= OPTION_MASK_ISA_SSE4_1_SET;
41138fd1498Szrj 	  opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_SSE4_1_SET;
41238fd1498Szrj 	}
41338fd1498Szrj       else
41438fd1498Szrj 	{
41538fd1498Szrj 	  opts->x_ix86_isa_flags &= ~OPTION_MASK_ISA_SSE4_1_UNSET;
41638fd1498Szrj 	  opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_SSE4_1_UNSET;
41738fd1498Szrj 	  opts->x_ix86_isa_flags2 &= ~OPTION_MASK_ISA2_AVX512F_UNSET;
41838fd1498Szrj 	  opts->x_ix86_isa_flags2_explicit |= OPTION_MASK_ISA2_AVX512F_UNSET;
41938fd1498Szrj 	}
42038fd1498Szrj       return true;
42138fd1498Szrj 
42238fd1498Szrj     case OPT_msse4_2:
42338fd1498Szrj       if (value)
42438fd1498Szrj 	{
42538fd1498Szrj 	  opts->x_ix86_isa_flags |= OPTION_MASK_ISA_SSE4_2_SET;
42638fd1498Szrj 	  opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_SSE4_2_SET;
42738fd1498Szrj 	}
42838fd1498Szrj       else
42938fd1498Szrj 	{
43038fd1498Szrj 	  opts->x_ix86_isa_flags &= ~OPTION_MASK_ISA_SSE4_2_UNSET;
43138fd1498Szrj 	  opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_SSE4_2_UNSET;
43238fd1498Szrj 	  opts->x_ix86_isa_flags2 &= ~OPTION_MASK_ISA2_AVX512F_UNSET;
43338fd1498Szrj 	  opts->x_ix86_isa_flags2_explicit |= OPTION_MASK_ISA2_AVX512F_UNSET;
43438fd1498Szrj 	}
43538fd1498Szrj       return true;
43638fd1498Szrj 
43738fd1498Szrj     case OPT_mavx:
43838fd1498Szrj       if (value)
43938fd1498Szrj 	{
44038fd1498Szrj 	  opts->x_ix86_isa_flags |= OPTION_MASK_ISA_AVX_SET;
44138fd1498Szrj 	  opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_AVX_SET;
44238fd1498Szrj 	}
44338fd1498Szrj       else
44438fd1498Szrj 	{
44538fd1498Szrj 	  opts->x_ix86_isa_flags &= ~OPTION_MASK_ISA_AVX_UNSET;
44638fd1498Szrj 	  opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_AVX_UNSET;
44738fd1498Szrj 	  opts->x_ix86_isa_flags2 &= ~OPTION_MASK_ISA2_AVX512F_UNSET;
44838fd1498Szrj 	  opts->x_ix86_isa_flags2_explicit |= OPTION_MASK_ISA2_AVX512F_UNSET;
44938fd1498Szrj 	}
45038fd1498Szrj       return true;
45138fd1498Szrj 
45238fd1498Szrj     case OPT_mavx2:
45338fd1498Szrj       if (value)
45438fd1498Szrj 	{
45538fd1498Szrj 	  opts->x_ix86_isa_flags |= OPTION_MASK_ISA_AVX2_SET;
45638fd1498Szrj 	  opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_AVX2_SET;
45738fd1498Szrj 	}
45838fd1498Szrj       else
45938fd1498Szrj 	{
46038fd1498Szrj 	  opts->x_ix86_isa_flags &= ~OPTION_MASK_ISA_AVX2_UNSET;
46138fd1498Szrj 	  opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_AVX2_UNSET;
46238fd1498Szrj 	  opts->x_ix86_isa_flags2 &= ~OPTION_MASK_ISA2_AVX512F_UNSET;
46338fd1498Szrj 	  opts->x_ix86_isa_flags2_explicit |= OPTION_MASK_ISA2_AVX512F_UNSET;
46438fd1498Szrj 	}
46538fd1498Szrj       return true;
46638fd1498Szrj 
46738fd1498Szrj     case OPT_mavx512f:
46838fd1498Szrj       if (value)
46938fd1498Szrj 	{
47038fd1498Szrj 	  opts->x_ix86_isa_flags |= OPTION_MASK_ISA_AVX512F_SET;
47138fd1498Szrj 	  opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_AVX512F_SET;
47238fd1498Szrj 	}
47338fd1498Szrj       else
47438fd1498Szrj 	{
47538fd1498Szrj 	  opts->x_ix86_isa_flags &= ~OPTION_MASK_ISA_AVX512F_UNSET;
47638fd1498Szrj 	  opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_AVX512F_UNSET;
47738fd1498Szrj 	  opts->x_ix86_isa_flags2 &= ~OPTION_MASK_ISA2_AVX512F_UNSET;
47838fd1498Szrj 	  opts->x_ix86_isa_flags2_explicit |= OPTION_MASK_ISA2_AVX512F_UNSET;
47938fd1498Szrj 	}
48038fd1498Szrj       return true;
48138fd1498Szrj 
48238fd1498Szrj     case OPT_mavx512cd:
48338fd1498Szrj       if (value)
48438fd1498Szrj 	{
48538fd1498Szrj 	  opts->x_ix86_isa_flags |= OPTION_MASK_ISA_AVX512CD_SET;
48638fd1498Szrj 	  opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_AVX512CD_SET;
48738fd1498Szrj 	}
48838fd1498Szrj       else
48938fd1498Szrj 	{
49038fd1498Szrj 	  opts->x_ix86_isa_flags &= ~OPTION_MASK_ISA_AVX512CD_UNSET;
49138fd1498Szrj 	  opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_AVX512CD_UNSET;
49238fd1498Szrj 	}
49338fd1498Szrj       return true;
49438fd1498Szrj 
49538fd1498Szrj     case OPT_mavx512pf:
49638fd1498Szrj       if (value)
49738fd1498Szrj 	{
49838fd1498Szrj 	  opts->x_ix86_isa_flags |= OPTION_MASK_ISA_AVX512PF_SET;
49938fd1498Szrj 	  opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_AVX512PF_SET;
50038fd1498Szrj 	}
50138fd1498Szrj       else
50238fd1498Szrj 	{
50338fd1498Szrj 	  opts->x_ix86_isa_flags &= ~OPTION_MASK_ISA_AVX512PF_UNSET;
50438fd1498Szrj 	  opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_AVX512PF_UNSET;
50538fd1498Szrj 	}
50638fd1498Szrj       return true;
50738fd1498Szrj 
50838fd1498Szrj     case OPT_mavx512er:
50938fd1498Szrj       if (value)
51038fd1498Szrj 	{
51138fd1498Szrj 	  opts->x_ix86_isa_flags |= OPTION_MASK_ISA_AVX512ER_SET;
51238fd1498Szrj 	  opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_AVX512ER_SET;
51338fd1498Szrj 	}
51438fd1498Szrj       else
51538fd1498Szrj 	{
51638fd1498Szrj 	  opts->x_ix86_isa_flags &= ~OPTION_MASK_ISA_AVX512ER_UNSET;
51738fd1498Szrj 	  opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_AVX512ER_UNSET;
51838fd1498Szrj 	}
51938fd1498Szrj       return true;
52038fd1498Szrj 
52138fd1498Szrj     case OPT_mrdpid:
52238fd1498Szrj       if (value)
52338fd1498Szrj 	{
52438fd1498Szrj 	  opts->x_ix86_isa_flags2 |= OPTION_MASK_ISA_RDPID_SET;
52538fd1498Szrj 	  opts->x_ix86_isa_flags2_explicit |= OPTION_MASK_ISA_RDPID_SET;
52638fd1498Szrj 	}
52738fd1498Szrj       else
52838fd1498Szrj 	{
52938fd1498Szrj 	  opts->x_ix86_isa_flags2 &= ~OPTION_MASK_ISA_RDPID_UNSET;
53038fd1498Szrj 	  opts->x_ix86_isa_flags2_explicit |= OPTION_MASK_ISA_RDPID_UNSET;
53138fd1498Szrj 	}
53238fd1498Szrj       return true;
53338fd1498Szrj 
53438fd1498Szrj     case OPT_mgfni:
53538fd1498Szrj       if (value)
53638fd1498Szrj 	{
53738fd1498Szrj 	  opts->x_ix86_isa_flags |= OPTION_MASK_ISA_GFNI_SET;
53838fd1498Szrj 	  opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_GFNI_SET;
53938fd1498Szrj 	}
54038fd1498Szrj       else
54138fd1498Szrj 	{
54238fd1498Szrj 	  opts->x_ix86_isa_flags &= ~OPTION_MASK_ISA_GFNI_UNSET;
54338fd1498Szrj 	  opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_GFNI_UNSET;
54438fd1498Szrj 	}
54538fd1498Szrj       return true;
54638fd1498Szrj 
54738fd1498Szrj     case OPT_mshstk:
54838fd1498Szrj       if (value)
54938fd1498Szrj 	{
55038fd1498Szrj 	  opts->x_ix86_isa_flags |= OPTION_MASK_ISA_SHSTK_SET;
55138fd1498Szrj 	  opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_SHSTK_SET;
55238fd1498Szrj 	}
55338fd1498Szrj       else
55438fd1498Szrj 	{
55538fd1498Szrj 	  opts->x_ix86_isa_flags &= ~OPTION_MASK_ISA_SHSTK_UNSET;
55638fd1498Szrj 	  opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_SHSTK_UNSET;
55738fd1498Szrj 	}
55838fd1498Szrj       return true;
55938fd1498Szrj 
56038fd1498Szrj     case OPT_mvaes:
56138fd1498Szrj       if (value)
56238fd1498Szrj 	{
56338fd1498Szrj 	  opts->x_ix86_isa_flags2 |= OPTION_MASK_ISA_VAES_SET;
56438fd1498Szrj 	  opts->x_ix86_isa_flags2_explicit |= OPTION_MASK_ISA_VAES_SET;
56538fd1498Szrj 	}
56638fd1498Szrj       else
56738fd1498Szrj 	{
56838fd1498Szrj 	  opts->x_ix86_isa_flags2 &= ~OPTION_MASK_ISA_VAES_UNSET;
56938fd1498Szrj 	  opts->x_ix86_isa_flags2_explicit |= OPTION_MASK_ISA_VAES_UNSET;
57038fd1498Szrj 	}
57138fd1498Szrj       return true;
57238fd1498Szrj 
57338fd1498Szrj     case OPT_mvpclmulqdq:
57438fd1498Szrj       if (value)
57538fd1498Szrj 	{
57638fd1498Szrj 	  opts->x_ix86_isa_flags |= OPTION_MASK_ISA_VPCLMULQDQ_SET;
57738fd1498Szrj 	  opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_VPCLMULQDQ_SET;
57838fd1498Szrj 	}
57938fd1498Szrj       else
58038fd1498Szrj 	{
58138fd1498Szrj 	  opts->x_ix86_isa_flags &= ~OPTION_MASK_ISA_VPCLMULQDQ_UNSET;
58238fd1498Szrj 	  opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_VPCLMULQDQ_UNSET;
58338fd1498Szrj 	}
58438fd1498Szrj       return true;
58538fd1498Szrj 
58638fd1498Szrj     case OPT_mmovdiri:
58738fd1498Szrj       if (value)
58838fd1498Szrj 	{
58938fd1498Szrj 	  opts->x_ix86_isa_flags |= OPTION_MASK_ISA_MOVDIRI_SET;
59038fd1498Szrj 	  opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_MOVDIRI_SET;
59138fd1498Szrj 	}
59238fd1498Szrj       else
59338fd1498Szrj 	{
59438fd1498Szrj 	  opts->x_ix86_isa_flags &= ~OPTION_MASK_ISA_MOVDIRI_UNSET;
59538fd1498Szrj 	  opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_MOVDIRI_UNSET;
59638fd1498Szrj 	}
59738fd1498Szrj       return true;
59838fd1498Szrj 
59938fd1498Szrj     case OPT_mmovdir64b:
60038fd1498Szrj       if (value)
60138fd1498Szrj 	{
60238fd1498Szrj 	  opts->x_ix86_isa_flags2 |= OPTION_MASK_ISA_MOVDIR64B_SET;
60338fd1498Szrj 	  opts->x_ix86_isa_flags2_explicit |= OPTION_MASK_ISA_MOVDIR64B_SET;
60438fd1498Szrj 	}
60538fd1498Szrj       else
60638fd1498Szrj 	{
60738fd1498Szrj 	  opts->x_ix86_isa_flags2 &= ~OPTION_MASK_ISA_MOVDIR64B_UNSET;
60838fd1498Szrj 	  opts->x_ix86_isa_flags2_explicit |= OPTION_MASK_ISA_MOVDIR64B_UNSET;
60938fd1498Szrj 	}
61038fd1498Szrj       return true;
61138fd1498Szrj 
61238fd1498Szrj     case OPT_mavx5124fmaps:
61338fd1498Szrj       if (value)
61438fd1498Szrj 	{
61538fd1498Szrj 	  opts->x_ix86_isa_flags2 |= OPTION_MASK_ISA_AVX5124FMAPS_SET;
61638fd1498Szrj 	  opts->x_ix86_isa_flags2_explicit |= OPTION_MASK_ISA_AVX5124FMAPS_SET;
61738fd1498Szrj 	  opts->x_ix86_isa_flags |= OPTION_MASK_ISA_AVX512F_SET;
61838fd1498Szrj 	  opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_AVX512F_SET;
61938fd1498Szrj 	}
62038fd1498Szrj       else
62138fd1498Szrj 	{
62238fd1498Szrj 	  opts->x_ix86_isa_flags2 &= ~OPTION_MASK_ISA_AVX5124FMAPS_UNSET;
62338fd1498Szrj 	  opts->x_ix86_isa_flags2_explicit |= OPTION_MASK_ISA_AVX5124FMAPS_UNSET;
62438fd1498Szrj 	}
62538fd1498Szrj       return true;
62638fd1498Szrj 
62738fd1498Szrj     case OPT_mavx5124vnniw:
62838fd1498Szrj       if (value)
62938fd1498Szrj 	{
63038fd1498Szrj 	  opts->x_ix86_isa_flags2 |= OPTION_MASK_ISA_AVX5124VNNIW_SET;
63138fd1498Szrj 	  opts->x_ix86_isa_flags2_explicit |= OPTION_MASK_ISA_AVX5124VNNIW_SET;
63238fd1498Szrj 	  opts->x_ix86_isa_flags |= OPTION_MASK_ISA_AVX512F_SET;
63338fd1498Szrj 	  opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_AVX512F_SET;
63438fd1498Szrj 	}
63538fd1498Szrj       else
63638fd1498Szrj 	{
63738fd1498Szrj 	  opts->x_ix86_isa_flags2 &= ~OPTION_MASK_ISA_AVX5124VNNIW_UNSET;
63838fd1498Szrj 	  opts->x_ix86_isa_flags2_explicit |= OPTION_MASK_ISA_AVX5124VNNIW_UNSET;
63938fd1498Szrj 	}
64038fd1498Szrj       return true;
64138fd1498Szrj 
64238fd1498Szrj     case OPT_mavx512vbmi2:
64338fd1498Szrj       if (value)
64438fd1498Szrj 	{
64538fd1498Szrj 	  opts->x_ix86_isa_flags |= OPTION_MASK_ISA_AVX512VBMI2_SET;
64638fd1498Szrj 	  opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_AVX512VBMI2_SET;
64738fd1498Szrj 	}
64838fd1498Szrj       else
64938fd1498Szrj 	{
65038fd1498Szrj 	  opts->x_ix86_isa_flags &= ~OPTION_MASK_ISA_AVX512VBMI2_UNSET;
65138fd1498Szrj 	  opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_AVX512VBMI2_UNSET;
65238fd1498Szrj 	}
65338fd1498Szrj       return true;
65438fd1498Szrj 
65538fd1498Szrj     case OPT_mavx512vnni:
65638fd1498Szrj       if (value)
65738fd1498Szrj 	{
65838fd1498Szrj 	  opts->x_ix86_isa_flags |= OPTION_MASK_ISA_AVX512VNNI_SET;
65938fd1498Szrj 	  opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_AVX512VNNI_SET;
66038fd1498Szrj 	}
66138fd1498Szrj       else
66238fd1498Szrj 	{
66338fd1498Szrj 	  opts->x_ix86_isa_flags &= ~OPTION_MASK_ISA_AVX512VNNI_UNSET;
66438fd1498Szrj 	  opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_AVX512VNNI_UNSET;
66538fd1498Szrj 	}
66638fd1498Szrj       return true;
66738fd1498Szrj 
66838fd1498Szrj     case OPT_mavx512vpopcntdq:
66938fd1498Szrj       if (value)
67038fd1498Szrj 	{
67138fd1498Szrj 	  opts->x_ix86_isa_flags |= OPTION_MASK_ISA_AVX512VPOPCNTDQ_SET;
67238fd1498Szrj 	  opts->x_ix86_isa_flags_explicit
67338fd1498Szrj 	    |= OPTION_MASK_ISA_AVX512VPOPCNTDQ_SET;
67438fd1498Szrj 	}
67538fd1498Szrj       else
67638fd1498Szrj 	{
67738fd1498Szrj 	  opts->x_ix86_isa_flags &= ~OPTION_MASK_ISA_AVX512VPOPCNTDQ_UNSET;
67838fd1498Szrj 	  opts->x_ix86_isa_flags_explicit
67938fd1498Szrj 	    |= OPTION_MASK_ISA_AVX512VPOPCNTDQ_UNSET;
68038fd1498Szrj 	}
68138fd1498Szrj       return true;
68238fd1498Szrj 
68338fd1498Szrj     case OPT_mavx512bitalg:
68438fd1498Szrj       if (value)
68538fd1498Szrj 	{
68638fd1498Szrj 	  opts->x_ix86_isa_flags |= OPTION_MASK_ISA_AVX512BITALG_SET;
68738fd1498Szrj 	  opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_AVX512BITALG_SET;
68838fd1498Szrj 	}
68938fd1498Szrj       else
69038fd1498Szrj 	{
69138fd1498Szrj 	  opts->x_ix86_isa_flags &= ~OPTION_MASK_ISA_AVX512BITALG_UNSET;
69238fd1498Szrj 	  opts->x_ix86_isa_flags_explicit
69338fd1498Szrj 		|= OPTION_MASK_ISA_AVX512BITALG_UNSET;
69438fd1498Szrj 	}
69538fd1498Szrj       return true;
69638fd1498Szrj 
69738fd1498Szrj     case OPT_msgx:
69838fd1498Szrj       if (value)
69938fd1498Szrj 	{
70038fd1498Szrj 	  opts->x_ix86_isa_flags2 |= OPTION_MASK_ISA_SGX_SET;
70138fd1498Szrj 	  opts->x_ix86_isa_flags2_explicit |= OPTION_MASK_ISA_SGX_SET;
70238fd1498Szrj 	}
70338fd1498Szrj       else
70438fd1498Szrj 	{
70538fd1498Szrj 	  opts->x_ix86_isa_flags2 &= ~OPTION_MASK_ISA_SGX_UNSET;
70638fd1498Szrj 	  opts->x_ix86_isa_flags2_explicit |= OPTION_MASK_ISA_SGX_UNSET;
70738fd1498Szrj 	}
70838fd1498Szrj       return true;
70938fd1498Szrj 
71038fd1498Szrj     case OPT_mpconfig:
71138fd1498Szrj       if (value)
71238fd1498Szrj 	{
71338fd1498Szrj 	  opts->x_ix86_isa_flags2 |= OPTION_MASK_ISA_PCONFIG_SET;
71438fd1498Szrj 	  opts->x_ix86_isa_flags2_explicit |= OPTION_MASK_ISA_PCONFIG_SET;
71538fd1498Szrj 	}
71638fd1498Szrj       else
71738fd1498Szrj 	{
71838fd1498Szrj 	  opts->x_ix86_isa_flags2 &= ~OPTION_MASK_ISA_PCONFIG_UNSET;
71938fd1498Szrj 	  opts->x_ix86_isa_flags2_explicit |= OPTION_MASK_ISA_PCONFIG_UNSET;
72038fd1498Szrj 	}
72138fd1498Szrj       return true;
72238fd1498Szrj 
72338fd1498Szrj     case OPT_mwbnoinvd:
72438fd1498Szrj       if (value)
72538fd1498Szrj 	{
72638fd1498Szrj 	  opts->x_ix86_isa_flags2 |= OPTION_MASK_ISA_WBNOINVD_SET;
72738fd1498Szrj 	  opts->x_ix86_isa_flags2_explicit |= OPTION_MASK_ISA_WBNOINVD_SET;
72838fd1498Szrj 	}
72938fd1498Szrj       else
73038fd1498Szrj 	{
73138fd1498Szrj 	  opts->x_ix86_isa_flags2 &= ~OPTION_MASK_ISA_WBNOINVD_UNSET;
73238fd1498Szrj 	  opts->x_ix86_isa_flags2_explicit |= OPTION_MASK_ISA_WBNOINVD_UNSET;
73338fd1498Szrj 	}
73438fd1498Szrj       return true;
73538fd1498Szrj 
73638fd1498Szrj     case OPT_mavx512dq:
73738fd1498Szrj       if (value)
73838fd1498Szrj 	{
73938fd1498Szrj 	  opts->x_ix86_isa_flags |= OPTION_MASK_ISA_AVX512DQ_SET;
74038fd1498Szrj 	  opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_AVX512DQ_SET;
74138fd1498Szrj 	}
74238fd1498Szrj       else
74338fd1498Szrj 	{
74438fd1498Szrj 	  opts->x_ix86_isa_flags &= ~OPTION_MASK_ISA_AVX512DQ_UNSET;
74538fd1498Szrj 	  opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_AVX512DQ_UNSET;
74638fd1498Szrj 	}
74738fd1498Szrj       return true;
74838fd1498Szrj 
74938fd1498Szrj     case OPT_mavx512bw:
75038fd1498Szrj       if (value)
75138fd1498Szrj 	{
75238fd1498Szrj 	  opts->x_ix86_isa_flags |= OPTION_MASK_ISA_AVX512BW_SET;
75338fd1498Szrj 	  opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_AVX512BW_SET;
75438fd1498Szrj 	}
75538fd1498Szrj       else
75638fd1498Szrj 	{
75738fd1498Szrj 	  opts->x_ix86_isa_flags &= ~OPTION_MASK_ISA_AVX512BW_UNSET;
75838fd1498Szrj 	  opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_AVX512BW_UNSET;
75938fd1498Szrj 	}
76038fd1498Szrj       return true;
76138fd1498Szrj 
76238fd1498Szrj     case OPT_mavx512vl:
76338fd1498Szrj       if (value)
76438fd1498Szrj 	{
76538fd1498Szrj 	  opts->x_ix86_isa_flags |= OPTION_MASK_ISA_AVX512VL_SET;
76638fd1498Szrj 	  opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_AVX512VL_SET;
76738fd1498Szrj 	}
76838fd1498Szrj       else
76938fd1498Szrj 	{
77038fd1498Szrj 	  opts->x_ix86_isa_flags &= ~OPTION_MASK_ISA_AVX512VL_UNSET;
77138fd1498Szrj 	  opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_AVX512VL_UNSET;
77238fd1498Szrj 	}
77338fd1498Szrj       return true;
77438fd1498Szrj 
77538fd1498Szrj     case OPT_mavx512ifma:
77638fd1498Szrj       if (value)
77738fd1498Szrj 	{
77838fd1498Szrj 	  opts->x_ix86_isa_flags |= OPTION_MASK_ISA_AVX512IFMA_SET;
77938fd1498Szrj 	  opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_AVX512IFMA_SET;
78038fd1498Szrj 	}
78138fd1498Szrj       else
78238fd1498Szrj 	{
78338fd1498Szrj 	  opts->x_ix86_isa_flags &= ~OPTION_MASK_ISA_AVX512IFMA_UNSET;
78438fd1498Szrj 	  opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_AVX512IFMA_UNSET;
78538fd1498Szrj 	}
78638fd1498Szrj       return true;
78738fd1498Szrj 
78838fd1498Szrj     case OPT_mavx512vbmi:
78938fd1498Szrj       if (value)
79038fd1498Szrj 	{
79138fd1498Szrj 	  opts->x_ix86_isa_flags |= OPTION_MASK_ISA_AVX512VBMI_SET;
79238fd1498Szrj 	  opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_AVX512VBMI_SET;
79338fd1498Szrj 	}
79438fd1498Szrj       else
79538fd1498Szrj 	{
79638fd1498Szrj 	  opts->x_ix86_isa_flags &= ~OPTION_MASK_ISA_AVX512VBMI_UNSET;
79738fd1498Szrj 	  opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_AVX512VBMI_UNSET;
79838fd1498Szrj 	}
79938fd1498Szrj       return true;
80038fd1498Szrj 
80138fd1498Szrj     case OPT_mfma:
80238fd1498Szrj       if (value)
80338fd1498Szrj 	{
80438fd1498Szrj 	  opts->x_ix86_isa_flags |= OPTION_MASK_ISA_FMA_SET;
80538fd1498Szrj 	  opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_FMA_SET;
80638fd1498Szrj 	}
80738fd1498Szrj       else
80838fd1498Szrj 	{
80938fd1498Szrj 	  opts->x_ix86_isa_flags &= ~OPTION_MASK_ISA_FMA_UNSET;
81038fd1498Szrj 	  opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_FMA_UNSET;
81138fd1498Szrj 	}
81238fd1498Szrj       return true;
81338fd1498Szrj 
81438fd1498Szrj     case OPT_mrtm:
81538fd1498Szrj       if (value)
81638fd1498Szrj 	{
81738fd1498Szrj 	  opts->x_ix86_isa_flags |= OPTION_MASK_ISA_RTM_SET;
81838fd1498Szrj 	  opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_RTM_SET;
81938fd1498Szrj 	}
82038fd1498Szrj       else
82138fd1498Szrj 	{
82238fd1498Szrj 	  opts->x_ix86_isa_flags &= ~OPTION_MASK_ISA_RTM_UNSET;
82338fd1498Szrj 	  opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_RTM_UNSET;
82438fd1498Szrj 	}
82538fd1498Szrj       return true;
82638fd1498Szrj 
82738fd1498Szrj     case OPT_msse4:
82838fd1498Szrj       opts->x_ix86_isa_flags |= OPTION_MASK_ISA_SSE4_SET;
82938fd1498Szrj       opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_SSE4_SET;
83038fd1498Szrj       return true;
83138fd1498Szrj 
83238fd1498Szrj     case OPT_mno_sse4:
83338fd1498Szrj       opts->x_ix86_isa_flags &= ~OPTION_MASK_ISA_SSE4_UNSET;
83438fd1498Szrj       opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_SSE4_UNSET;
83538fd1498Szrj       opts->x_ix86_isa_flags2 &= ~OPTION_MASK_ISA2_AVX512F_UNSET;
83638fd1498Szrj       opts->x_ix86_isa_flags2_explicit |= OPTION_MASK_ISA2_AVX512F_UNSET;
83738fd1498Szrj       return true;
83838fd1498Szrj 
83938fd1498Szrj     case OPT_msse4a:
84038fd1498Szrj       if (value)
84138fd1498Szrj 	{
84238fd1498Szrj 	  opts->x_ix86_isa_flags |= OPTION_MASK_ISA_SSE4A_SET;
84338fd1498Szrj 	  opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_SSE4A_SET;
84438fd1498Szrj 	}
84538fd1498Szrj       else
84638fd1498Szrj 	{
84738fd1498Szrj 	  opts->x_ix86_isa_flags &= ~OPTION_MASK_ISA_SSE4A_UNSET;
84838fd1498Szrj 	  opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_SSE4A_UNSET;
84938fd1498Szrj 	}
85038fd1498Szrj       return true;
85138fd1498Szrj 
85238fd1498Szrj     case OPT_mfma4:
85338fd1498Szrj       if (value)
85438fd1498Szrj 	{
85538fd1498Szrj 	  opts->x_ix86_isa_flags |= OPTION_MASK_ISA_FMA4_SET;
85638fd1498Szrj 	  opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_FMA4_SET;
85738fd1498Szrj 	}
85838fd1498Szrj       else
85938fd1498Szrj 	{
86038fd1498Szrj 	  opts->x_ix86_isa_flags &= ~OPTION_MASK_ISA_FMA4_UNSET;
86138fd1498Szrj 	  opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_FMA4_UNSET;
86238fd1498Szrj 	}
86338fd1498Szrj       return true;
86438fd1498Szrj 
86538fd1498Szrj    case OPT_mxop:
86638fd1498Szrj       if (value)
86738fd1498Szrj 	{
86838fd1498Szrj 	  opts->x_ix86_isa_flags |= OPTION_MASK_ISA_XOP_SET;
86938fd1498Szrj 	  opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_XOP_SET;
87038fd1498Szrj 	}
87138fd1498Szrj       else
87238fd1498Szrj 	{
87338fd1498Szrj 	  opts->x_ix86_isa_flags &= ~OPTION_MASK_ISA_XOP_UNSET;
87438fd1498Szrj 	  opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_XOP_UNSET;
87538fd1498Szrj 	}
87638fd1498Szrj       return true;
87738fd1498Szrj 
87838fd1498Szrj    case OPT_mlwp:
87938fd1498Szrj       if (value)
88038fd1498Szrj 	{
88138fd1498Szrj 	  opts->x_ix86_isa_flags |= OPTION_MASK_ISA_LWP_SET;
88238fd1498Szrj 	  opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_LWP_SET;
88338fd1498Szrj 	}
88438fd1498Szrj       else
88538fd1498Szrj 	{
88638fd1498Szrj 	  opts->x_ix86_isa_flags &= ~OPTION_MASK_ISA_LWP_UNSET;
88738fd1498Szrj 	  opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_LWP_UNSET;
88838fd1498Szrj 	}
88938fd1498Szrj       return true;
89038fd1498Szrj 
89138fd1498Szrj     case OPT_mabm:
89238fd1498Szrj       if (value)
89338fd1498Szrj 	{
89438fd1498Szrj 	  opts->x_ix86_isa_flags |= OPTION_MASK_ISA_ABM_SET;
89538fd1498Szrj 	  opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_ABM_SET;
89638fd1498Szrj 	}
89738fd1498Szrj       else
89838fd1498Szrj 	{
89938fd1498Szrj 	  opts->x_ix86_isa_flags &= ~OPTION_MASK_ISA_ABM_UNSET;
90038fd1498Szrj 	  opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_ABM_UNSET;
90138fd1498Szrj 	}
90238fd1498Szrj       return true;
90338fd1498Szrj 
90438fd1498Szrj     case OPT_mbmi:
90538fd1498Szrj       if (value)
90638fd1498Szrj 	{
90738fd1498Szrj 	  opts->x_ix86_isa_flags |= OPTION_MASK_ISA_BMI_SET;
90838fd1498Szrj 	  opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_BMI_SET;
90938fd1498Szrj 	}
91038fd1498Szrj       else
91138fd1498Szrj 	{
91238fd1498Szrj 	  opts->x_ix86_isa_flags &= ~OPTION_MASK_ISA_BMI_UNSET;
91338fd1498Szrj 	  opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_BMI_UNSET;
91438fd1498Szrj 	}
91538fd1498Szrj       return true;
91638fd1498Szrj 
91738fd1498Szrj     case OPT_mbmi2:
91838fd1498Szrj       if (value)
91938fd1498Szrj 	{
92038fd1498Szrj 	  opts->x_ix86_isa_flags |= OPTION_MASK_ISA_BMI2_SET;
92138fd1498Szrj 	  opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_BMI2_SET;
92238fd1498Szrj 	}
92338fd1498Szrj       else
92438fd1498Szrj 	{
92538fd1498Szrj 	  opts->x_ix86_isa_flags &= ~OPTION_MASK_ISA_BMI2_UNSET;
92638fd1498Szrj 	  opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_BMI2_UNSET;
92738fd1498Szrj 	}
92838fd1498Szrj       return true;
92938fd1498Szrj 
93038fd1498Szrj     case OPT_mlzcnt:
93138fd1498Szrj       if (value)
93238fd1498Szrj 	{
93338fd1498Szrj 	  opts->x_ix86_isa_flags |= OPTION_MASK_ISA_LZCNT_SET;
93438fd1498Szrj 	  opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_LZCNT_SET;
93538fd1498Szrj 	}
93638fd1498Szrj       else
93738fd1498Szrj 	{
93838fd1498Szrj 	  opts->x_ix86_isa_flags &= ~OPTION_MASK_ISA_LZCNT_UNSET;
93938fd1498Szrj 	  opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_LZCNT_UNSET;
94038fd1498Szrj 	}
94138fd1498Szrj       return true;
94238fd1498Szrj 
94338fd1498Szrj     case OPT_mtbm:
94438fd1498Szrj       if (value)
94538fd1498Szrj 	{
94638fd1498Szrj 	  opts->x_ix86_isa_flags |= OPTION_MASK_ISA_TBM_SET;
94738fd1498Szrj 	  opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_TBM_SET;
94838fd1498Szrj 	}
94938fd1498Szrj       else
95038fd1498Szrj 	{
95138fd1498Szrj 	  opts->x_ix86_isa_flags &= ~OPTION_MASK_ISA_TBM_UNSET;
95238fd1498Szrj 	  opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_TBM_UNSET;
95338fd1498Szrj 	}
95438fd1498Szrj       return true;
95538fd1498Szrj 
95638fd1498Szrj     case OPT_mpopcnt:
95738fd1498Szrj       if (value)
95838fd1498Szrj 	{
95938fd1498Szrj 	  opts->x_ix86_isa_flags |= OPTION_MASK_ISA_POPCNT_SET;
96038fd1498Szrj 	  opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_POPCNT_SET;
96138fd1498Szrj 	}
96238fd1498Szrj       else
96338fd1498Szrj 	{
96438fd1498Szrj 	  opts->x_ix86_isa_flags &= ~OPTION_MASK_ISA_POPCNT_UNSET;
96538fd1498Szrj 	  opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_POPCNT_UNSET;
96638fd1498Szrj 	}
96738fd1498Szrj       return true;
96838fd1498Szrj 
96938fd1498Szrj     case OPT_msahf:
97038fd1498Szrj       if (value)
97138fd1498Szrj 	{
97238fd1498Szrj 	  opts->x_ix86_isa_flags |= OPTION_MASK_ISA_SAHF_SET;
97338fd1498Szrj 	  opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_SAHF_SET;
97438fd1498Szrj 	}
97538fd1498Szrj       else
97638fd1498Szrj 	{
97738fd1498Szrj 	  opts->x_ix86_isa_flags &= ~OPTION_MASK_ISA_SAHF_UNSET;
97838fd1498Szrj 	  opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_SAHF_UNSET;
97938fd1498Szrj 	}
98038fd1498Szrj       return true;
98138fd1498Szrj 
98238fd1498Szrj     case OPT_mcx16:
98338fd1498Szrj       if (value)
98438fd1498Szrj 	{
98538fd1498Szrj 	  opts->x_ix86_isa_flags2 |= OPTION_MASK_ISA_CX16_SET;
98638fd1498Szrj 	  opts->x_ix86_isa_flags2_explicit |= OPTION_MASK_ISA_CX16_SET;
98738fd1498Szrj 	}
98838fd1498Szrj       else
98938fd1498Szrj 	{
99038fd1498Szrj 	  opts->x_ix86_isa_flags2 &= ~OPTION_MASK_ISA_CX16_UNSET;
99138fd1498Szrj 	  opts->x_ix86_isa_flags2_explicit |= OPTION_MASK_ISA_CX16_UNSET;
99238fd1498Szrj 	}
99338fd1498Szrj       return true;
99438fd1498Szrj 
99538fd1498Szrj     case OPT_mmovbe:
99638fd1498Szrj       if (value)
99738fd1498Szrj 	{
99838fd1498Szrj 	  opts->x_ix86_isa_flags2 |= OPTION_MASK_ISA_MOVBE_SET;
99938fd1498Szrj 	  opts->x_ix86_isa_flags2_explicit |= OPTION_MASK_ISA_MOVBE_SET;
100038fd1498Szrj 	}
100138fd1498Szrj       else
100238fd1498Szrj 	{
100338fd1498Szrj 	  opts->x_ix86_isa_flags2 &= ~OPTION_MASK_ISA_MOVBE_UNSET;
100438fd1498Szrj 	  opts->x_ix86_isa_flags2_explicit |= OPTION_MASK_ISA_MOVBE_UNSET;
100538fd1498Szrj 	}
100638fd1498Szrj       return true;
100738fd1498Szrj 
100838fd1498Szrj     case OPT_mcrc32:
100938fd1498Szrj       if (value)
101038fd1498Szrj 	{
101138fd1498Szrj 	  opts->x_ix86_isa_flags |= OPTION_MASK_ISA_CRC32_SET;
101238fd1498Szrj 	  opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_CRC32_SET;
101338fd1498Szrj 	}
101438fd1498Szrj       else
101538fd1498Szrj 	{
101638fd1498Szrj 	  opts->x_ix86_isa_flags &= ~OPTION_MASK_ISA_CRC32_UNSET;
101738fd1498Szrj 	  opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_CRC32_UNSET;
101838fd1498Szrj 	}
101938fd1498Szrj       return true;
102038fd1498Szrj 
102138fd1498Szrj     case OPT_maes:
102238fd1498Szrj       if (value)
102338fd1498Szrj 	{
102438fd1498Szrj 	  opts->x_ix86_isa_flags |= OPTION_MASK_ISA_AES_SET;
102538fd1498Szrj 	  opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_AES_SET;
102638fd1498Szrj 	}
102738fd1498Szrj       else
102838fd1498Szrj 	{
102938fd1498Szrj 	  opts->x_ix86_isa_flags &= ~OPTION_MASK_ISA_AES_UNSET;
103038fd1498Szrj 	  opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_AES_UNSET;
103138fd1498Szrj 	}
103238fd1498Szrj       return true;
103338fd1498Szrj 
103438fd1498Szrj     case OPT_msha:
103538fd1498Szrj       if (value)
103638fd1498Szrj 	{
103738fd1498Szrj 	  opts->x_ix86_isa_flags |= OPTION_MASK_ISA_SHA_SET;
103838fd1498Szrj 	  opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_SHA_SET;
103938fd1498Szrj 	}
104038fd1498Szrj       else
104138fd1498Szrj 	{
104238fd1498Szrj 	  opts->x_ix86_isa_flags &= ~OPTION_MASK_ISA_SHA_UNSET;
104338fd1498Szrj 	  opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_SHA_UNSET;
104438fd1498Szrj 	}
104538fd1498Szrj       return true;
104638fd1498Szrj 
104738fd1498Szrj     case OPT_mpclmul:
104838fd1498Szrj       if (value)
104938fd1498Szrj 	{
105038fd1498Szrj 	  opts->x_ix86_isa_flags |= OPTION_MASK_ISA_PCLMUL_SET;
105138fd1498Szrj 	  opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_PCLMUL_SET;
105238fd1498Szrj 	}
105338fd1498Szrj       else
105438fd1498Szrj 	{
105538fd1498Szrj 	  opts->x_ix86_isa_flags &= ~OPTION_MASK_ISA_PCLMUL_UNSET;
105638fd1498Szrj 	  opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_PCLMUL_UNSET;
105738fd1498Szrj 	}
105838fd1498Szrj       return true;
105938fd1498Szrj 
106038fd1498Szrj     case OPT_mfsgsbase:
106138fd1498Szrj       if (value)
106238fd1498Szrj 	{
106338fd1498Szrj 	  opts->x_ix86_isa_flags |= OPTION_MASK_ISA_FSGSBASE_SET;
106438fd1498Szrj 	  opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_FSGSBASE_SET;
106538fd1498Szrj 	}
106638fd1498Szrj       else
106738fd1498Szrj 	{
106838fd1498Szrj 	  opts->x_ix86_isa_flags &= ~OPTION_MASK_ISA_FSGSBASE_UNSET;
106938fd1498Szrj 	  opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_FSGSBASE_UNSET;
107038fd1498Szrj 	}
107138fd1498Szrj       return true;
107238fd1498Szrj 
107338fd1498Szrj     case OPT_mrdrnd:
107438fd1498Szrj       if (value)
107538fd1498Szrj 	{
107638fd1498Szrj 	  opts->x_ix86_isa_flags |= OPTION_MASK_ISA_RDRND_SET;
107738fd1498Szrj 	  opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_RDRND_SET;
107838fd1498Szrj 	}
107938fd1498Szrj       else
108038fd1498Szrj 	{
108138fd1498Szrj 	  opts->x_ix86_isa_flags &= ~OPTION_MASK_ISA_RDRND_UNSET;
108238fd1498Szrj 	  opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_RDRND_UNSET;
108338fd1498Szrj 	}
108438fd1498Szrj       return true;
108538fd1498Szrj 
108638fd1498Szrj     case OPT_mf16c:
108738fd1498Szrj       if (value)
108838fd1498Szrj 	{
108938fd1498Szrj 	  opts->x_ix86_isa_flags |= OPTION_MASK_ISA_F16C_SET;
109038fd1498Szrj 	  opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_F16C_SET;
109138fd1498Szrj 	}
109238fd1498Szrj       else
109338fd1498Szrj 	{
109438fd1498Szrj 	  opts->x_ix86_isa_flags &= ~OPTION_MASK_ISA_F16C_UNSET;
109538fd1498Szrj 	  opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_F16C_UNSET;
109638fd1498Szrj 	}
109738fd1498Szrj       return true;
109838fd1498Szrj 
109938fd1498Szrj     case OPT_mfxsr:
110038fd1498Szrj       if (value)
110138fd1498Szrj 	{
110238fd1498Szrj 	  opts->x_ix86_isa_flags |= OPTION_MASK_ISA_FXSR_SET;
110338fd1498Szrj 	  opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_FXSR_SET;
110438fd1498Szrj 	}
110538fd1498Szrj       else
110638fd1498Szrj 	{
110738fd1498Szrj 	  opts->x_ix86_isa_flags &= ~OPTION_MASK_ISA_FXSR_UNSET;
110838fd1498Szrj 	  opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_FXSR_UNSET;
110938fd1498Szrj 	}
111038fd1498Szrj       return true;
111138fd1498Szrj 
111238fd1498Szrj     case OPT_mxsave:
111338fd1498Szrj       if (value)
111438fd1498Szrj 	{
111538fd1498Szrj 	  opts->x_ix86_isa_flags |= OPTION_MASK_ISA_XSAVE_SET;
111638fd1498Szrj 	  opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_XSAVE_SET;
111738fd1498Szrj 	}
111838fd1498Szrj       else
111938fd1498Szrj 	{
112038fd1498Szrj 	  opts->x_ix86_isa_flags &= ~OPTION_MASK_ISA_XSAVE_UNSET;
112138fd1498Szrj 	  opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_XSAVE_UNSET;
112238fd1498Szrj 	}
112338fd1498Szrj       return true;
112438fd1498Szrj 
112538fd1498Szrj     case OPT_mxsaveopt:
112638fd1498Szrj       if (value)
112738fd1498Szrj 	{
112838fd1498Szrj 	  opts->x_ix86_isa_flags |= OPTION_MASK_ISA_XSAVEOPT_SET;
112938fd1498Szrj 	  opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_XSAVEOPT_SET;
113038fd1498Szrj 	}
113138fd1498Szrj       else
113238fd1498Szrj 	{
113338fd1498Szrj 	  opts->x_ix86_isa_flags &= ~OPTION_MASK_ISA_XSAVEOPT_UNSET;
113438fd1498Szrj 	  opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_XSAVEOPT_UNSET;
113538fd1498Szrj 	}
113638fd1498Szrj       return true;
113738fd1498Szrj 
113838fd1498Szrj     case OPT_mxsavec:
113938fd1498Szrj       if (value)
114038fd1498Szrj 	{
114138fd1498Szrj 	  opts->x_ix86_isa_flags |= OPTION_MASK_ISA_XSAVEC_SET;
114238fd1498Szrj 	  opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_XSAVEC_SET;
114338fd1498Szrj 	}
114438fd1498Szrj       else
114538fd1498Szrj 	{
114638fd1498Szrj 	  opts->x_ix86_isa_flags &= ~OPTION_MASK_ISA_XSAVEC_UNSET;
114738fd1498Szrj 	  opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_XSAVEC_UNSET;
114838fd1498Szrj 	}
114938fd1498Szrj       return true;
115038fd1498Szrj 
115138fd1498Szrj     case OPT_mxsaves:
115238fd1498Szrj       if (value)
115338fd1498Szrj 	{
115438fd1498Szrj 	  opts->x_ix86_isa_flags |= OPTION_MASK_ISA_XSAVES_SET;
115538fd1498Szrj 	  opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_XSAVES_SET;
115638fd1498Szrj 	}
115738fd1498Szrj       else
115838fd1498Szrj 	{
115938fd1498Szrj 	  opts->x_ix86_isa_flags &= ~OPTION_MASK_ISA_XSAVES_UNSET;
116038fd1498Szrj 	  opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_XSAVES_UNSET;
116138fd1498Szrj 	}
116238fd1498Szrj       return true;
116338fd1498Szrj 
116438fd1498Szrj     case OPT_mrdseed:
116538fd1498Szrj       if (value)
116638fd1498Szrj 	{
116738fd1498Szrj 	  opts->x_ix86_isa_flags |= OPTION_MASK_ISA_RDSEED_SET;
116838fd1498Szrj 	  opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_RDSEED_SET;
116938fd1498Szrj 	}
117038fd1498Szrj       else
117138fd1498Szrj 	{
117238fd1498Szrj 	  opts->x_ix86_isa_flags &= ~OPTION_MASK_ISA_RDSEED_UNSET;
117338fd1498Szrj 	  opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_RDSEED_UNSET;
117438fd1498Szrj 	}
117538fd1498Szrj       return true;
117638fd1498Szrj 
117738fd1498Szrj     case OPT_mprfchw:
117838fd1498Szrj       if (value)
117938fd1498Szrj 	{
118038fd1498Szrj 	  opts->x_ix86_isa_flags |= OPTION_MASK_ISA_PRFCHW_SET;
118138fd1498Szrj 	  opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_PRFCHW_SET;
118238fd1498Szrj 	}
118338fd1498Szrj       else
118438fd1498Szrj 	{
118538fd1498Szrj 	  opts->x_ix86_isa_flags &= ~OPTION_MASK_ISA_PRFCHW_UNSET;
118638fd1498Szrj 	  opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_PRFCHW_UNSET;
118738fd1498Szrj 	}
118838fd1498Szrj       return true;
118938fd1498Szrj 
119038fd1498Szrj     case OPT_madx:
119138fd1498Szrj       if (value)
119238fd1498Szrj 	{
119338fd1498Szrj 	  opts->x_ix86_isa_flags |= OPTION_MASK_ISA_ADX_SET;
119438fd1498Szrj 	  opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_ADX_SET;
119538fd1498Szrj 	}
119638fd1498Szrj       else
119738fd1498Szrj 	{
119838fd1498Szrj 	  opts->x_ix86_isa_flags &= ~OPTION_MASK_ISA_ADX_UNSET;
119938fd1498Szrj 	  opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_ADX_UNSET;
120038fd1498Szrj 	}
120138fd1498Szrj       return true;
120238fd1498Szrj 
120338fd1498Szrj     case OPT_mprefetchwt1:
120438fd1498Szrj       if (value)
120538fd1498Szrj 	{
120638fd1498Szrj 	  opts->x_ix86_isa_flags |= OPTION_MASK_ISA_PREFETCHWT1_SET;
120738fd1498Szrj 	  opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_PREFETCHWT1_SET;
120838fd1498Szrj 	}
120938fd1498Szrj       else
121038fd1498Szrj 	{
121138fd1498Szrj 	  opts->x_ix86_isa_flags &= ~OPTION_MASK_ISA_PREFETCHWT1_UNSET;
121238fd1498Szrj 	  opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_PREFETCHWT1_UNSET;
121338fd1498Szrj 	}
121438fd1498Szrj       return true;
121538fd1498Szrj 
121638fd1498Szrj     case OPT_mclflushopt:
121738fd1498Szrj       if (value)
121838fd1498Szrj 	{
121938fd1498Szrj 	  opts->x_ix86_isa_flags |= OPTION_MASK_ISA_CLFLUSHOPT_SET;
122038fd1498Szrj 	  opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_CLFLUSHOPT_SET;
122138fd1498Szrj 	}
122238fd1498Szrj       else
122338fd1498Szrj 	{
122438fd1498Szrj 	  opts->x_ix86_isa_flags &= ~OPTION_MASK_ISA_CLFLUSHOPT_UNSET;
122538fd1498Szrj 	  opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_CLFLUSHOPT_UNSET;
122638fd1498Szrj 	}
122738fd1498Szrj       return true;
122838fd1498Szrj 
122938fd1498Szrj     case OPT_mclwb:
123038fd1498Szrj       if (value)
123138fd1498Szrj 	{
123238fd1498Szrj 	  opts->x_ix86_isa_flags |= OPTION_MASK_ISA_CLWB_SET;
123338fd1498Szrj 	  opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_CLWB_SET;
123438fd1498Szrj 	}
123538fd1498Szrj       else
123638fd1498Szrj 	{
123738fd1498Szrj 	  opts->x_ix86_isa_flags &= ~OPTION_MASK_ISA_CLWB_UNSET;
123838fd1498Szrj 	  opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_CLWB_UNSET;
123938fd1498Szrj 	}
124038fd1498Szrj       return true;
124138fd1498Szrj 
124238fd1498Szrj     case OPT_mmwaitx:
124338fd1498Szrj       if (value)
124438fd1498Szrj 	{
124538fd1498Szrj 	  opts->x_ix86_isa_flags2 |= OPTION_MASK_ISA_MWAITX_SET;
124638fd1498Szrj 	  opts->x_ix86_isa_flags2_explicit |= OPTION_MASK_ISA_MWAITX_SET;
124738fd1498Szrj 	}
124838fd1498Szrj       else
124938fd1498Szrj 	{
125038fd1498Szrj 	  opts->x_ix86_isa_flags2 &= ~OPTION_MASK_ISA_MWAITX_UNSET;
125138fd1498Szrj 	  opts->x_ix86_isa_flags2_explicit |= OPTION_MASK_ISA_MWAITX_UNSET;
125238fd1498Szrj 	}
125338fd1498Szrj       return true;
125438fd1498Szrj 
125538fd1498Szrj     case OPT_mclzero:
125638fd1498Szrj       if (value)
125738fd1498Szrj 	{
125838fd1498Szrj 	  opts->x_ix86_isa_flags2 |= OPTION_MASK_ISA_CLZERO_SET;
125938fd1498Szrj 	  opts->x_ix86_isa_flags2_explicit |= OPTION_MASK_ISA_CLZERO_SET;
126038fd1498Szrj 	}
126138fd1498Szrj       else
126238fd1498Szrj 	{
126338fd1498Szrj 	  opts->x_ix86_isa_flags2 &= ~OPTION_MASK_ISA_CLZERO_UNSET;
126438fd1498Szrj 	  opts->x_ix86_isa_flags2_explicit |= OPTION_MASK_ISA_CLZERO_UNSET;
126538fd1498Szrj 	}
126638fd1498Szrj       return true;
126738fd1498Szrj 
126838fd1498Szrj     case OPT_mpku:
126938fd1498Szrj       if (value)
127038fd1498Szrj 	{
127138fd1498Szrj 	  opts->x_ix86_isa_flags |= OPTION_MASK_ISA_PKU_SET;
127238fd1498Szrj 	  opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_PKU_SET;
127338fd1498Szrj 	}
127438fd1498Szrj       else
127538fd1498Szrj 	{
127638fd1498Szrj 	  opts->x_ix86_isa_flags &= ~OPTION_MASK_ISA_PKU_UNSET;
127738fd1498Szrj 	  opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_PKU_UNSET;
127838fd1498Szrj 	}
127938fd1498Szrj       return true;
128038fd1498Szrj 
128138fd1498Szrj 
128238fd1498Szrj   /* Comes from final.c -- no real reason to change it.  */
128338fd1498Szrj #define MAX_CODE_ALIGN 16
128438fd1498Szrj 
128538fd1498Szrj     case OPT_malign_loops_:
128638fd1498Szrj       warning_at (loc, 0, "-malign-loops is obsolete, use -falign-loops");
128738fd1498Szrj       if (value > MAX_CODE_ALIGN)
128838fd1498Szrj 	error_at (loc, "-malign-loops=%d is not between 0 and %d",
128938fd1498Szrj 		  value, MAX_CODE_ALIGN);
129038fd1498Szrj       else
129138fd1498Szrj 	opts->x_align_loops = 1 << value;
129238fd1498Szrj       return true;
129338fd1498Szrj 
129438fd1498Szrj     case OPT_malign_jumps_:
129538fd1498Szrj       warning_at (loc, 0, "-malign-jumps is obsolete, use -falign-jumps");
129638fd1498Szrj       if (value > MAX_CODE_ALIGN)
129738fd1498Szrj 	error_at (loc, "-malign-jumps=%d is not between 0 and %d",
129838fd1498Szrj 		  value, MAX_CODE_ALIGN);
129938fd1498Szrj       else
130038fd1498Szrj 	opts->x_align_jumps = 1 << value;
130138fd1498Szrj       return true;
130238fd1498Szrj 
130338fd1498Szrj     case OPT_malign_functions_:
130438fd1498Szrj       warning_at (loc, 0,
130538fd1498Szrj 		  "-malign-functions is obsolete, use -falign-functions");
130638fd1498Szrj       if (value > MAX_CODE_ALIGN)
130738fd1498Szrj 	error_at (loc, "-malign-functions=%d is not between 0 and %d",
130838fd1498Szrj 		  value, MAX_CODE_ALIGN);
130938fd1498Szrj       else
131038fd1498Szrj 	opts->x_align_functions = 1 << value;
131138fd1498Szrj       return true;
131238fd1498Szrj 
131338fd1498Szrj     case OPT_mbranch_cost_:
131438fd1498Szrj       if (value > 5)
131538fd1498Szrj 	{
131638fd1498Szrj 	  error_at (loc, "-mbranch-cost=%d is not between 0 and 5", value);
131738fd1498Szrj 	  opts->x_ix86_branch_cost = 5;
131838fd1498Szrj 	}
131938fd1498Szrj       return true;
132038fd1498Szrj 
132138fd1498Szrj     default:
132238fd1498Szrj       return true;
132338fd1498Szrj     }
132438fd1498Szrj }
132538fd1498Szrj 
132638fd1498Szrj static const struct default_options ix86_option_optimization_table[] =
132738fd1498Szrj   {
132838fd1498Szrj     /* Enable redundant extension instructions removal at -O2 and higher.  */
132938fd1498Szrj     { OPT_LEVELS_2_PLUS, OPT_free, NULL, 1 },
133038fd1498Szrj     /* Enable function splitting at -O2 and higher.  */
133138fd1498Szrj     { OPT_LEVELS_2_PLUS, OPT_freorder_blocks_and_partition, NULL, 1 },
133238fd1498Szrj     /* The STC algorithm produces the smallest code at -Os, for x86.  */
133338fd1498Szrj     { OPT_LEVELS_2_PLUS, OPT_freorder_blocks_algorithm_, NULL,
133438fd1498Szrj       REORDER_BLOCKS_ALGORITHM_STC },
133538fd1498Szrj     /* Turn off -fschedule-insns by default.  It tends to make the
133638fd1498Szrj        problem with not enough registers even worse.  */
133738fd1498Szrj     { OPT_LEVELS_ALL, OPT_fschedule_insns, NULL, 0 },
133838fd1498Szrj 
133938fd1498Szrj #ifdef SUBTARGET_OPTIMIZATION_OPTIONS
134038fd1498Szrj     SUBTARGET_OPTIMIZATION_OPTIONS,
134138fd1498Szrj #endif
134238fd1498Szrj     { OPT_LEVELS_NONE, 0, NULL, 0 }
134338fd1498Szrj   };
134438fd1498Szrj 
134538fd1498Szrj /* Implement TARGET_OPTION_INIT_STRUCT.  */
134638fd1498Szrj 
134738fd1498Szrj static void
ix86_option_init_struct(struct gcc_options * opts)134838fd1498Szrj ix86_option_init_struct (struct gcc_options *opts)
134938fd1498Szrj {
135038fd1498Szrj   if (TARGET_MACHO)
135138fd1498Szrj     /* The Darwin libraries never set errno, so we might as well
135238fd1498Szrj        avoid calling them when that's the only reason we would.  */
135338fd1498Szrj     opts->x_flag_errno_math = 0;
135438fd1498Szrj 
135538fd1498Szrj   opts->x_flag_pcc_struct_return = 2;
135638fd1498Szrj   opts->x_flag_asynchronous_unwind_tables = 2;
135738fd1498Szrj }
135838fd1498Szrj 
135938fd1498Szrj /* On the x86 -fsplit-stack and -fstack-protector both use the same
136038fd1498Szrj    field in the TCB, so they can not be used together.  */
136138fd1498Szrj 
136238fd1498Szrj static bool
ix86_supports_split_stack(bool report ATTRIBUTE_UNUSED,struct gcc_options * opts ATTRIBUTE_UNUSED)136338fd1498Szrj ix86_supports_split_stack (bool report ATTRIBUTE_UNUSED,
136438fd1498Szrj 			   struct gcc_options *opts ATTRIBUTE_UNUSED)
136538fd1498Szrj {
136638fd1498Szrj   bool ret = true;
136738fd1498Szrj 
136838fd1498Szrj #ifndef TARGET_THREAD_SPLIT_STACK_OFFSET
136938fd1498Szrj   if (report)
137038fd1498Szrj     error ("%<-fsplit-stack%> currently only supported on GNU/Linux");
137138fd1498Szrj   ret = false;
137238fd1498Szrj #else
137338fd1498Szrj   if (!HAVE_GAS_CFI_PERSONALITY_DIRECTIVE)
137438fd1498Szrj     {
137538fd1498Szrj       if (report)
137638fd1498Szrj 	error ("%<-fsplit-stack%> requires "
137738fd1498Szrj 	       "assembler support for CFI directives");
137838fd1498Szrj       ret = false;
137938fd1498Szrj     }
138038fd1498Szrj #endif
138138fd1498Szrj 
138238fd1498Szrj   return ret;
138338fd1498Szrj }
138438fd1498Szrj 
138538fd1498Szrj /* Implement TARGET_EXCEPT_UNWIND_INFO.  */
138638fd1498Szrj 
138738fd1498Szrj static enum unwind_info_type
i386_except_unwind_info(struct gcc_options * opts)138838fd1498Szrj i386_except_unwind_info (struct gcc_options *opts)
138938fd1498Szrj {
139038fd1498Szrj   /* Honor the --enable-sjlj-exceptions configure switch.  */
139138fd1498Szrj #ifdef CONFIG_SJLJ_EXCEPTIONS
139238fd1498Szrj   if (CONFIG_SJLJ_EXCEPTIONS)
139338fd1498Szrj     return UI_SJLJ;
139438fd1498Szrj #endif
139538fd1498Szrj 
139638fd1498Szrj   /* On windows 64, prefer SEH exceptions over anything else.  */
139738fd1498Szrj   if (TARGET_64BIT && DEFAULT_ABI == MS_ABI && opts->x_flag_unwind_tables)
139838fd1498Szrj     return UI_SEH;
139938fd1498Szrj 
140038fd1498Szrj   if (DWARF2_UNWIND_INFO)
140138fd1498Szrj     return UI_DWARF2;
140238fd1498Szrj 
140338fd1498Szrj   return UI_SJLJ;
140438fd1498Szrj }
140538fd1498Szrj 
140638fd1498Szrj #undef  TARGET_EXCEPT_UNWIND_INFO
140738fd1498Szrj #define TARGET_EXCEPT_UNWIND_INFO  i386_except_unwind_info
140838fd1498Szrj 
140938fd1498Szrj #undef TARGET_DEFAULT_TARGET_FLAGS
141038fd1498Szrj #define TARGET_DEFAULT_TARGET_FLAGS	\
141138fd1498Szrj   (TARGET_DEFAULT			\
141238fd1498Szrj    | TARGET_SUBTARGET_DEFAULT		\
141338fd1498Szrj    | TARGET_TLS_DIRECT_SEG_REFS_DEFAULT)
141438fd1498Szrj 
141538fd1498Szrj #undef TARGET_HANDLE_OPTION
141638fd1498Szrj #define TARGET_HANDLE_OPTION ix86_handle_option
141738fd1498Szrj 
141838fd1498Szrj #undef TARGET_OPTION_OPTIMIZATION_TABLE
141938fd1498Szrj #define TARGET_OPTION_OPTIMIZATION_TABLE ix86_option_optimization_table
142038fd1498Szrj #undef TARGET_OPTION_INIT_STRUCT
142138fd1498Szrj #define TARGET_OPTION_INIT_STRUCT ix86_option_init_struct
142238fd1498Szrj 
142338fd1498Szrj #undef TARGET_SUPPORTS_SPLIT_STACK
142438fd1498Szrj #define TARGET_SUPPORTS_SPLIT_STACK ix86_supports_split_stack
142538fd1498Szrj 
142638fd1498Szrj struct gcc_targetm_common targetm_common = TARGETM_COMMON_INITIALIZER;
1427