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