Mercurial > hg > CbC > CbC_gcc
comparison gcc/common/config/i386/i386-common.c @ 145:1830386684a0
gcc-9.2.0
author | anatofuz |
---|---|
date | Thu, 13 Feb 2020 11:34:05 +0900 |
parents | 84e7813d76e9 |
children |
comparison
equal
deleted
inserted
replaced
131:84e7813d76e9 | 145:1830386684a0 |
---|---|
1 /* IA-32 common hooks. | 1 /* IA-32 common hooks. |
2 Copyright (C) 1988-2018 Free Software Foundation, Inc. | 2 Copyright (C) 1988-2020 Free Software Foundation, Inc. |
3 | 3 |
4 This file is part of GCC. | 4 This file is part of GCC. |
5 | 5 |
6 GCC is free software; you can redistribute it and/or modify | 6 GCC is free software; you can redistribute it and/or modify |
7 it under the terms of the GNU General Public License as published by | 7 it under the terms of the GNU General Public License as published by |
76 (OPTION_MASK_ISA_AVX512VL | OPTION_MASK_ISA_AVX512F_SET) | 76 (OPTION_MASK_ISA_AVX512VL | OPTION_MASK_ISA_AVX512F_SET) |
77 #define OPTION_MASK_ISA_AVX512IFMA_SET \ | 77 #define OPTION_MASK_ISA_AVX512IFMA_SET \ |
78 (OPTION_MASK_ISA_AVX512IFMA | OPTION_MASK_ISA_AVX512F_SET) | 78 (OPTION_MASK_ISA_AVX512IFMA | OPTION_MASK_ISA_AVX512F_SET) |
79 #define OPTION_MASK_ISA_AVX512VBMI_SET \ | 79 #define OPTION_MASK_ISA_AVX512VBMI_SET \ |
80 (OPTION_MASK_ISA_AVX512VBMI | OPTION_MASK_ISA_AVX512BW_SET) | 80 (OPTION_MASK_ISA_AVX512VBMI | OPTION_MASK_ISA_AVX512BW_SET) |
81 #define OPTION_MASK_ISA_AVX5124FMAPS_SET OPTION_MASK_ISA_AVX5124FMAPS | 81 #define OPTION_MASK_ISA2_AVX5124FMAPS_SET OPTION_MASK_ISA2_AVX5124FMAPS |
82 #define OPTION_MASK_ISA_AVX5124VNNIW_SET OPTION_MASK_ISA_AVX5124VNNIW | 82 #define OPTION_MASK_ISA2_AVX5124VNNIW_SET OPTION_MASK_ISA2_AVX5124VNNIW |
83 #define OPTION_MASK_ISA_AVX512VBMI2_SET \ | 83 #define OPTION_MASK_ISA_AVX512VBMI2_SET \ |
84 (OPTION_MASK_ISA_AVX512VBMI2 | OPTION_MASK_ISA_AVX512F_SET) | 84 (OPTION_MASK_ISA_AVX512VBMI2 | OPTION_MASK_ISA_AVX512F_SET) |
85 #define OPTION_MASK_ISA_AVX512VNNI_SET \ | 85 #define OPTION_MASK_ISA_AVX512VNNI_SET \ |
86 (OPTION_MASK_ISA_AVX512VNNI | OPTION_MASK_ISA_AVX512F_SET) | 86 (OPTION_MASK_ISA_AVX512VNNI | OPTION_MASK_ISA_AVX512F_SET) |
87 #define OPTION_MASK_ISA_AVX512VPOPCNTDQ_SET \ | 87 #define OPTION_MASK_ISA_AVX512VPOPCNTDQ_SET \ |
88 (OPTION_MASK_ISA_AVX512VPOPCNTDQ | OPTION_MASK_ISA_AVX512F_SET) | 88 (OPTION_MASK_ISA_AVX512VPOPCNTDQ | OPTION_MASK_ISA_AVX512F_SET) |
89 #define OPTION_MASK_ISA_AVX512BITALG_SET \ | 89 #define OPTION_MASK_ISA_AVX512BITALG_SET \ |
90 (OPTION_MASK_ISA_AVX512BITALG | OPTION_MASK_ISA_AVX512F_SET) | 90 (OPTION_MASK_ISA_AVX512BITALG | OPTION_MASK_ISA_AVX512F_SET) |
91 #define OPTION_MASK_ISA2_AVX512BF16_SET OPTION_MASK_ISA2_AVX512BF16 | |
91 #define OPTION_MASK_ISA_RTM_SET OPTION_MASK_ISA_RTM | 92 #define OPTION_MASK_ISA_RTM_SET OPTION_MASK_ISA_RTM |
92 #define OPTION_MASK_ISA_PRFCHW_SET OPTION_MASK_ISA_PRFCHW | 93 #define OPTION_MASK_ISA_PRFCHW_SET OPTION_MASK_ISA_PRFCHW |
93 #define OPTION_MASK_ISA_RDSEED_SET OPTION_MASK_ISA_RDSEED | 94 #define OPTION_MASK_ISA_RDSEED_SET OPTION_MASK_ISA_RDSEED |
94 #define OPTION_MASK_ISA_ADX_SET OPTION_MASK_ISA_ADX | 95 #define OPTION_MASK_ISA_ADX_SET OPTION_MASK_ISA_ADX |
95 #define OPTION_MASK_ISA_PREFETCHWT1_SET OPTION_MASK_ISA_PREFETCHWT1 | 96 #define OPTION_MASK_ISA_PREFETCHWT1_SET OPTION_MASK_ISA_PREFETCHWT1 |
97 #define OPTION_MASK_ISA_XSAVES_SET \ | 98 #define OPTION_MASK_ISA_XSAVES_SET \ |
98 (OPTION_MASK_ISA_XSAVES | OPTION_MASK_ISA_XSAVE_SET) | 99 (OPTION_MASK_ISA_XSAVES | OPTION_MASK_ISA_XSAVE_SET) |
99 #define OPTION_MASK_ISA_XSAVEC_SET \ | 100 #define OPTION_MASK_ISA_XSAVEC_SET \ |
100 (OPTION_MASK_ISA_XSAVEC | OPTION_MASK_ISA_XSAVE_SET) | 101 (OPTION_MASK_ISA_XSAVEC | OPTION_MASK_ISA_XSAVE_SET) |
101 #define OPTION_MASK_ISA_CLWB_SET OPTION_MASK_ISA_CLWB | 102 #define OPTION_MASK_ISA_CLWB_SET OPTION_MASK_ISA_CLWB |
103 #define OPTION_MASK_ISA2_AVX512VP2INTERSECT_SET OPTION_MASK_ISA2_AVX512VP2INTERSECT | |
102 | 104 |
103 /* SSE4 includes both SSE4.1 and SSE4.2. -msse4 should be the same | 105 /* SSE4 includes both SSE4.1 and SSE4.2. -msse4 should be the same |
104 as -msse4.2. */ | 106 as -msse4.2. */ |
105 #define OPTION_MASK_ISA_SSE4_SET OPTION_MASK_ISA_SSE4_2_SET | 107 #define OPTION_MASK_ISA_SSE4_SET OPTION_MASK_ISA_SSE4_2_SET |
106 | 108 |
123 (OPTION_MASK_ISA_PCLMUL | OPTION_MASK_ISA_SSE2_SET) | 125 (OPTION_MASK_ISA_PCLMUL | OPTION_MASK_ISA_SSE2_SET) |
124 | 126 |
125 #define OPTION_MASK_ISA_ABM_SET \ | 127 #define OPTION_MASK_ISA_ABM_SET \ |
126 (OPTION_MASK_ISA_ABM | OPTION_MASK_ISA_POPCNT) | 128 (OPTION_MASK_ISA_ABM | OPTION_MASK_ISA_POPCNT) |
127 | 129 |
128 #define OPTION_MASK_ISA_PCONFIG_SET OPTION_MASK_ISA_PCONFIG | 130 #define OPTION_MASK_ISA2_PCONFIG_SET OPTION_MASK_ISA2_PCONFIG |
129 #define OPTION_MASK_ISA_WBNOINVD_SET OPTION_MASK_ISA_WBNOINVD | 131 #define OPTION_MASK_ISA2_WBNOINVD_SET OPTION_MASK_ISA2_WBNOINVD |
130 #define OPTION_MASK_ISA_SGX_SET OPTION_MASK_ISA_SGX | 132 #define OPTION_MASK_ISA2_SGX_SET OPTION_MASK_ISA2_SGX |
131 #define OPTION_MASK_ISA_BMI_SET OPTION_MASK_ISA_BMI | 133 #define OPTION_MASK_ISA_BMI_SET OPTION_MASK_ISA_BMI |
132 #define OPTION_MASK_ISA_BMI2_SET OPTION_MASK_ISA_BMI2 | 134 #define OPTION_MASK_ISA_BMI2_SET OPTION_MASK_ISA_BMI2 |
133 #define OPTION_MASK_ISA_LZCNT_SET OPTION_MASK_ISA_LZCNT | 135 #define OPTION_MASK_ISA_LZCNT_SET OPTION_MASK_ISA_LZCNT |
134 #define OPTION_MASK_ISA_TBM_SET OPTION_MASK_ISA_TBM | 136 #define OPTION_MASK_ISA_TBM_SET OPTION_MASK_ISA_TBM |
135 #define OPTION_MASK_ISA_POPCNT_SET OPTION_MASK_ISA_POPCNT | 137 #define OPTION_MASK_ISA_POPCNT_SET OPTION_MASK_ISA_POPCNT |
136 #define OPTION_MASK_ISA_CX16_SET OPTION_MASK_ISA_CX16 | 138 #define OPTION_MASK_ISA2_CX16_SET OPTION_MASK_ISA2_CX16 |
137 #define OPTION_MASK_ISA_SAHF_SET OPTION_MASK_ISA_SAHF | 139 #define OPTION_MASK_ISA_SAHF_SET OPTION_MASK_ISA_SAHF |
138 #define OPTION_MASK_ISA_MOVBE_SET OPTION_MASK_ISA_MOVBE | 140 #define OPTION_MASK_ISA2_MOVBE_SET OPTION_MASK_ISA2_MOVBE |
139 #define OPTION_MASK_ISA_CRC32_SET OPTION_MASK_ISA_CRC32 | 141 #define OPTION_MASK_ISA_CRC32_SET OPTION_MASK_ISA_CRC32 |
140 | 142 |
141 #define OPTION_MASK_ISA_FSGSBASE_SET OPTION_MASK_ISA_FSGSBASE | 143 #define OPTION_MASK_ISA_FSGSBASE_SET OPTION_MASK_ISA_FSGSBASE |
142 #define OPTION_MASK_ISA_RDRND_SET OPTION_MASK_ISA_RDRND | 144 #define OPTION_MASK_ISA_RDRND_SET OPTION_MASK_ISA_RDRND |
145 #define OPTION_MASK_ISA2_PTWRITE_SET OPTION_MASK_ISA2_PTWRITE | |
143 #define OPTION_MASK_ISA_F16C_SET \ | 146 #define OPTION_MASK_ISA_F16C_SET \ |
144 (OPTION_MASK_ISA_F16C | OPTION_MASK_ISA_AVX_SET) | 147 (OPTION_MASK_ISA_F16C | OPTION_MASK_ISA_AVX_SET) |
145 #define OPTION_MASK_ISA_MWAITX_SET OPTION_MASK_ISA_MWAITX | 148 #define OPTION_MASK_ISA2_MWAITX_SET OPTION_MASK_ISA2_MWAITX |
146 #define OPTION_MASK_ISA_CLZERO_SET OPTION_MASK_ISA_CLZERO | 149 #define OPTION_MASK_ISA2_CLZERO_SET OPTION_MASK_ISA2_CLZERO |
147 #define OPTION_MASK_ISA_PKU_SET OPTION_MASK_ISA_PKU | 150 #define OPTION_MASK_ISA_PKU_SET OPTION_MASK_ISA_PKU |
148 #define OPTION_MASK_ISA_RDPID_SET OPTION_MASK_ISA_RDPID | 151 #define OPTION_MASK_ISA2_RDPID_SET OPTION_MASK_ISA2_RDPID |
149 #define OPTION_MASK_ISA_GFNI_SET OPTION_MASK_ISA_GFNI | 152 #define OPTION_MASK_ISA_GFNI_SET OPTION_MASK_ISA_GFNI |
150 #define OPTION_MASK_ISA_SHSTK_SET OPTION_MASK_ISA_SHSTK | 153 #define OPTION_MASK_ISA_SHSTK_SET OPTION_MASK_ISA_SHSTK |
151 #define OPTION_MASK_ISA_VAES_SET OPTION_MASK_ISA_VAES | 154 #define OPTION_MASK_ISA2_VAES_SET OPTION_MASK_ISA2_VAES |
152 #define OPTION_MASK_ISA_VPCLMULQDQ_SET OPTION_MASK_ISA_VPCLMULQDQ | 155 #define OPTION_MASK_ISA_VPCLMULQDQ_SET OPTION_MASK_ISA_VPCLMULQDQ |
153 #define OPTION_MASK_ISA_MOVDIRI_SET OPTION_MASK_ISA_MOVDIRI | 156 #define OPTION_MASK_ISA_MOVDIRI_SET OPTION_MASK_ISA_MOVDIRI |
154 #define OPTION_MASK_ISA_MOVDIR64B_SET OPTION_MASK_ISA_MOVDIR64B | 157 #define OPTION_MASK_ISA2_MOVDIR64B_SET OPTION_MASK_ISA2_MOVDIR64B |
155 #define OPTION_MASK_ISA_WAITPKG_SET OPTION_MASK_ISA_WAITPKG | 158 #define OPTION_MASK_ISA2_WAITPKG_SET OPTION_MASK_ISA2_WAITPKG |
156 #define OPTION_MASK_ISA_CLDEMOTE_SET OPTION_MASK_ISA_CLDEMOTE | 159 #define OPTION_MASK_ISA2_CLDEMOTE_SET OPTION_MASK_ISA2_CLDEMOTE |
160 #define OPTION_MASK_ISA2_ENQCMD_SET OPTION_MASK_ISA2_ENQCMD | |
157 | 161 |
158 /* Define a set of ISAs which aren't available when a given ISA is | 162 /* Define a set of ISAs which aren't available when a given ISA is |
159 disabled. MMX and SSE ISAs are handled separately. */ | 163 disabled. MMX and SSE ISAs are handled separately. */ |
160 | 164 |
161 #define OPTION_MASK_ISA_MMX_UNSET \ | 165 #define OPTION_MASK_ISA_MMX_UNSET \ |
206 #define OPTION_MASK_ISA_AVX512BW_UNSET \ | 210 #define OPTION_MASK_ISA_AVX512BW_UNSET \ |
207 (OPTION_MASK_ISA_AVX512BW | OPTION_MASK_ISA_AVX512VBMI_UNSET) | 211 (OPTION_MASK_ISA_AVX512BW | OPTION_MASK_ISA_AVX512VBMI_UNSET) |
208 #define OPTION_MASK_ISA_AVX512VL_UNSET OPTION_MASK_ISA_AVX512VL | 212 #define OPTION_MASK_ISA_AVX512VL_UNSET OPTION_MASK_ISA_AVX512VL |
209 #define OPTION_MASK_ISA_AVX512IFMA_UNSET OPTION_MASK_ISA_AVX512IFMA | 213 #define OPTION_MASK_ISA_AVX512IFMA_UNSET OPTION_MASK_ISA_AVX512IFMA |
210 #define OPTION_MASK_ISA_AVX512VBMI_UNSET OPTION_MASK_ISA_AVX512VBMI | 214 #define OPTION_MASK_ISA_AVX512VBMI_UNSET OPTION_MASK_ISA_AVX512VBMI |
211 #define OPTION_MASK_ISA_AVX5124FMAPS_UNSET OPTION_MASK_ISA_AVX5124FMAPS | 215 #define OPTION_MASK_ISA2_AVX5124FMAPS_UNSET OPTION_MASK_ISA2_AVX5124FMAPS |
212 #define OPTION_MASK_ISA_AVX5124VNNIW_UNSET OPTION_MASK_ISA_AVX5124VNNIW | 216 #define OPTION_MASK_ISA2_AVX5124VNNIW_UNSET OPTION_MASK_ISA2_AVX5124VNNIW |
213 #define OPTION_MASK_ISA_AVX512VBMI2_UNSET OPTION_MASK_ISA_AVX512VBMI2 | 217 #define OPTION_MASK_ISA_AVX512VBMI2_UNSET OPTION_MASK_ISA_AVX512VBMI2 |
214 #define OPTION_MASK_ISA_AVX512VNNI_UNSET OPTION_MASK_ISA_AVX512VNNI | 218 #define OPTION_MASK_ISA_AVX512VNNI_UNSET OPTION_MASK_ISA_AVX512VNNI |
215 #define OPTION_MASK_ISA_AVX512VPOPCNTDQ_UNSET OPTION_MASK_ISA_AVX512VPOPCNTDQ | 219 #define OPTION_MASK_ISA_AVX512VPOPCNTDQ_UNSET OPTION_MASK_ISA_AVX512VPOPCNTDQ |
216 #define OPTION_MASK_ISA_AVX512BITALG_UNSET OPTION_MASK_ISA_AVX512BITALG | 220 #define OPTION_MASK_ISA_AVX512BITALG_UNSET OPTION_MASK_ISA_AVX512BITALG |
221 #define OPTION_MASK_ISA2_AVX512BF16_UNSET OPTION_MASK_ISA2_AVX512BF16 | |
217 #define OPTION_MASK_ISA_RTM_UNSET OPTION_MASK_ISA_RTM | 222 #define OPTION_MASK_ISA_RTM_UNSET OPTION_MASK_ISA_RTM |
218 #define OPTION_MASK_ISA_PRFCHW_UNSET OPTION_MASK_ISA_PRFCHW | 223 #define OPTION_MASK_ISA_PRFCHW_UNSET OPTION_MASK_ISA_PRFCHW |
219 #define OPTION_MASK_ISA_RDSEED_UNSET OPTION_MASK_ISA_RDSEED | 224 #define OPTION_MASK_ISA_RDSEED_UNSET OPTION_MASK_ISA_RDSEED |
220 #define OPTION_MASK_ISA_ADX_UNSET OPTION_MASK_ISA_ADX | 225 #define OPTION_MASK_ISA_ADX_UNSET OPTION_MASK_ISA_ADX |
221 #define OPTION_MASK_ISA_PREFETCHWT1_UNSET OPTION_MASK_ISA_PREFETCHWT1 | 226 #define OPTION_MASK_ISA_PREFETCHWT1_UNSET OPTION_MASK_ISA_PREFETCHWT1 |
222 #define OPTION_MASK_ISA_CLFLUSHOPT_UNSET OPTION_MASK_ISA_CLFLUSHOPT | 227 #define OPTION_MASK_ISA_CLFLUSHOPT_UNSET OPTION_MASK_ISA_CLFLUSHOPT |
223 #define OPTION_MASK_ISA_XSAVEC_UNSET OPTION_MASK_ISA_XSAVEC | 228 #define OPTION_MASK_ISA_XSAVEC_UNSET OPTION_MASK_ISA_XSAVEC |
224 #define OPTION_MASK_ISA_XSAVES_UNSET OPTION_MASK_ISA_XSAVES | 229 #define OPTION_MASK_ISA_XSAVES_UNSET OPTION_MASK_ISA_XSAVES |
225 #define OPTION_MASK_ISA_CLWB_UNSET OPTION_MASK_ISA_CLWB | 230 #define OPTION_MASK_ISA_CLWB_UNSET OPTION_MASK_ISA_CLWB |
226 #define OPTION_MASK_ISA_MWAITX_UNSET OPTION_MASK_ISA_MWAITX | 231 #define OPTION_MASK_ISA2_MWAITX_UNSET OPTION_MASK_ISA2_MWAITX |
227 #define OPTION_MASK_ISA_CLZERO_UNSET OPTION_MASK_ISA_CLZERO | 232 #define OPTION_MASK_ISA2_CLZERO_UNSET OPTION_MASK_ISA2_CLZERO |
228 #define OPTION_MASK_ISA_PKU_UNSET OPTION_MASK_ISA_PKU | 233 #define OPTION_MASK_ISA_PKU_UNSET OPTION_MASK_ISA_PKU |
229 #define OPTION_MASK_ISA_RDPID_UNSET OPTION_MASK_ISA_RDPID | 234 #define OPTION_MASK_ISA2_RDPID_UNSET OPTION_MASK_ISA2_RDPID |
230 #define OPTION_MASK_ISA_GFNI_UNSET OPTION_MASK_ISA_GFNI | 235 #define OPTION_MASK_ISA_GFNI_UNSET OPTION_MASK_ISA_GFNI |
231 #define OPTION_MASK_ISA_SHSTK_UNSET OPTION_MASK_ISA_SHSTK | 236 #define OPTION_MASK_ISA_SHSTK_UNSET OPTION_MASK_ISA_SHSTK |
232 #define OPTION_MASK_ISA_VAES_UNSET OPTION_MASK_ISA_VAES | 237 #define OPTION_MASK_ISA2_VAES_UNSET OPTION_MASK_ISA2_VAES |
233 #define OPTION_MASK_ISA_VPCLMULQDQ_UNSET OPTION_MASK_ISA_VPCLMULQDQ | 238 #define OPTION_MASK_ISA_VPCLMULQDQ_UNSET OPTION_MASK_ISA_VPCLMULQDQ |
234 #define OPTION_MASK_ISA_MOVDIRI_UNSET OPTION_MASK_ISA_MOVDIRI | 239 #define OPTION_MASK_ISA_MOVDIRI_UNSET OPTION_MASK_ISA_MOVDIRI |
235 #define OPTION_MASK_ISA_MOVDIR64B_UNSET OPTION_MASK_ISA_MOVDIR64B | 240 #define OPTION_MASK_ISA2_MOVDIR64B_UNSET OPTION_MASK_ISA2_MOVDIR64B |
236 #define OPTION_MASK_ISA_WAITPKG_UNSET OPTION_MASK_ISA_WAITPKG | 241 #define OPTION_MASK_ISA2_WAITPKG_UNSET OPTION_MASK_ISA2_WAITPKG |
237 #define OPTION_MASK_ISA_CLDEMOTE_UNSET OPTION_MASK_ISA_CLDEMOTE | 242 #define OPTION_MASK_ISA2_CLDEMOTE_UNSET OPTION_MASK_ISA2_CLDEMOTE |
243 #define OPTION_MASK_ISA2_ENQCMD_UNSET OPTION_MASK_ISA2_ENQCMD | |
244 #define OPTION_MASK_ISA2_AVX512VP2INTERSECT_UNSET OPTION_MASK_ISA2_AVX512VP2INTERSECT | |
238 | 245 |
239 /* SSE4 includes both SSE4.1 and SSE4.2. -mno-sse4 should the same | 246 /* SSE4 includes both SSE4.1 and SSE4.2. -mno-sse4 should the same |
240 as -mno-sse4.1. */ | 247 as -mno-sse4.1. */ |
241 #define OPTION_MASK_ISA_SSE4_UNSET OPTION_MASK_ISA_SSE4_1_UNSET | 248 #define OPTION_MASK_ISA_SSE4_UNSET OPTION_MASK_ISA_SSE4_1_UNSET |
242 | 249 |
250 | 257 |
251 #define OPTION_MASK_ISA_AES_UNSET OPTION_MASK_ISA_AES | 258 #define OPTION_MASK_ISA_AES_UNSET OPTION_MASK_ISA_AES |
252 #define OPTION_MASK_ISA_SHA_UNSET OPTION_MASK_ISA_SHA | 259 #define OPTION_MASK_ISA_SHA_UNSET OPTION_MASK_ISA_SHA |
253 #define OPTION_MASK_ISA_PCLMUL_UNSET OPTION_MASK_ISA_PCLMUL | 260 #define OPTION_MASK_ISA_PCLMUL_UNSET OPTION_MASK_ISA_PCLMUL |
254 #define OPTION_MASK_ISA_ABM_UNSET OPTION_MASK_ISA_ABM | 261 #define OPTION_MASK_ISA_ABM_UNSET OPTION_MASK_ISA_ABM |
255 #define OPTION_MASK_ISA_PCONFIG_UNSET OPTION_MASK_ISA_PCONFIG | 262 #define OPTION_MASK_ISA2_PCONFIG_UNSET OPTION_MASK_ISA2_PCONFIG |
256 #define OPTION_MASK_ISA_WBNOINVD_UNSET OPTION_MASK_ISA_WBNOINVD | 263 #define OPTION_MASK_ISA2_WBNOINVD_UNSET OPTION_MASK_ISA2_WBNOINVD |
257 #define OPTION_MASK_ISA_SGX_UNSET OPTION_MASK_ISA_SGX | 264 #define OPTION_MASK_ISA2_SGX_UNSET OPTION_MASK_ISA2_SGX |
258 #define OPTION_MASK_ISA_BMI_UNSET OPTION_MASK_ISA_BMI | 265 #define OPTION_MASK_ISA_BMI_UNSET OPTION_MASK_ISA_BMI |
259 #define OPTION_MASK_ISA_BMI2_UNSET OPTION_MASK_ISA_BMI2 | 266 #define OPTION_MASK_ISA_BMI2_UNSET OPTION_MASK_ISA_BMI2 |
260 #define OPTION_MASK_ISA_LZCNT_UNSET OPTION_MASK_ISA_LZCNT | 267 #define OPTION_MASK_ISA_LZCNT_UNSET OPTION_MASK_ISA_LZCNT |
261 #define OPTION_MASK_ISA_TBM_UNSET OPTION_MASK_ISA_TBM | 268 #define OPTION_MASK_ISA_TBM_UNSET OPTION_MASK_ISA_TBM |
262 #define OPTION_MASK_ISA_POPCNT_UNSET OPTION_MASK_ISA_POPCNT | 269 #define OPTION_MASK_ISA_POPCNT_UNSET OPTION_MASK_ISA_POPCNT |
263 #define OPTION_MASK_ISA_CX16_UNSET OPTION_MASK_ISA_CX16 | 270 #define OPTION_MASK_ISA2_CX16_UNSET OPTION_MASK_ISA2_CX16 |
264 #define OPTION_MASK_ISA_SAHF_UNSET OPTION_MASK_ISA_SAHF | 271 #define OPTION_MASK_ISA_SAHF_UNSET OPTION_MASK_ISA_SAHF |
265 #define OPTION_MASK_ISA_MOVBE_UNSET OPTION_MASK_ISA_MOVBE | 272 #define OPTION_MASK_ISA2_MOVBE_UNSET OPTION_MASK_ISA2_MOVBE |
266 #define OPTION_MASK_ISA_CRC32_UNSET OPTION_MASK_ISA_CRC32 | 273 #define OPTION_MASK_ISA_CRC32_UNSET OPTION_MASK_ISA_CRC32 |
267 | 274 |
268 #define OPTION_MASK_ISA_FSGSBASE_UNSET OPTION_MASK_ISA_FSGSBASE | 275 #define OPTION_MASK_ISA_FSGSBASE_UNSET OPTION_MASK_ISA_FSGSBASE |
269 #define OPTION_MASK_ISA_RDRND_UNSET OPTION_MASK_ISA_RDRND | 276 #define OPTION_MASK_ISA_RDRND_UNSET OPTION_MASK_ISA_RDRND |
277 #define OPTION_MASK_ISA2_PTWRITE_UNSET OPTION_MASK_ISA2_PTWRITE | |
270 #define OPTION_MASK_ISA_F16C_UNSET OPTION_MASK_ISA_F16C | 278 #define OPTION_MASK_ISA_F16C_UNSET OPTION_MASK_ISA_F16C |
271 | 279 |
272 #define OPTION_MASK_ISA_GENERAL_REGS_ONLY_UNSET \ | 280 #define OPTION_MASK_ISA_GENERAL_REGS_ONLY_UNSET \ |
273 (OPTION_MASK_ISA_MMX_UNSET \ | 281 (OPTION_MASK_ISA_MMX_UNSET \ |
274 | OPTION_MASK_ISA_SSE_UNSET) | 282 | OPTION_MASK_ISA_SSE_UNSET) |
275 | 283 |
276 #define OPTION_MASK_ISA2_AVX512F_UNSET \ | 284 #define OPTION_MASK_ISA2_AVX512F_UNSET \ |
277 (OPTION_MASK_ISA_AVX5124FMAPS_UNSET | OPTION_MASK_ISA_AVX5124VNNIW_UNSET) | 285 (OPTION_MASK_ISA2_AVX512BF16_UNSET \ |
286 | OPTION_MASK_ISA2_AVX5124FMAPS_UNSET \ | |
287 | OPTION_MASK_ISA2_AVX5124VNNIW_UNSET \ | |
288 | OPTION_MASK_ISA2_AVX512VP2INTERSECT_UNSET) | |
278 #define OPTION_MASK_ISA2_GENERAL_REGS_ONLY_UNSET \ | 289 #define OPTION_MASK_ISA2_GENERAL_REGS_ONLY_UNSET \ |
279 (OPTION_MASK_ISA2_AVX512F_UNSET) | 290 (OPTION_MASK_ISA2_AVX512F_UNSET) |
291 | |
292 #define OPTION_MASK_ISA2_AVX512BW_UNSET OPTION_MASK_ISA2_AVX512BF16_UNSET | |
280 | 293 |
281 /* Set 1 << value as value of -malign-FLAG option. */ | 294 /* Set 1 << value as value of -malign-FLAG option. */ |
282 | 295 |
283 static void | 296 static void |
284 set_malign_value (const char **flag, unsigned value) | 297 set_malign_value (const char **flag, unsigned value) |
535 return true; | 548 return true; |
536 | 549 |
537 case OPT_mrdpid: | 550 case OPT_mrdpid: |
538 if (value) | 551 if (value) |
539 { | 552 { |
540 opts->x_ix86_isa_flags2 |= OPTION_MASK_ISA_RDPID_SET; | 553 opts->x_ix86_isa_flags2 |= OPTION_MASK_ISA2_RDPID_SET; |
541 opts->x_ix86_isa_flags2_explicit |= OPTION_MASK_ISA_RDPID_SET; | 554 opts->x_ix86_isa_flags2_explicit |= OPTION_MASK_ISA2_RDPID_SET; |
542 } | 555 } |
543 else | 556 else |
544 { | 557 { |
545 opts->x_ix86_isa_flags2 &= ~OPTION_MASK_ISA_RDPID_UNSET; | 558 opts->x_ix86_isa_flags2 &= ~OPTION_MASK_ISA2_RDPID_UNSET; |
546 opts->x_ix86_isa_flags2_explicit |= OPTION_MASK_ISA_RDPID_UNSET; | 559 opts->x_ix86_isa_flags2_explicit |= OPTION_MASK_ISA2_RDPID_UNSET; |
547 } | 560 } |
548 return true; | 561 return true; |
549 | 562 |
550 case OPT_mgfni: | 563 case OPT_mgfni: |
551 if (value) | 564 if (value) |
574 return true; | 587 return true; |
575 | 588 |
576 case OPT_mvaes: | 589 case OPT_mvaes: |
577 if (value) | 590 if (value) |
578 { | 591 { |
579 opts->x_ix86_isa_flags2 |= OPTION_MASK_ISA_VAES_SET; | 592 opts->x_ix86_isa_flags2 |= OPTION_MASK_ISA2_VAES_SET; |
580 opts->x_ix86_isa_flags2_explicit |= OPTION_MASK_ISA_VAES_SET; | 593 opts->x_ix86_isa_flags2_explicit |= OPTION_MASK_ISA2_VAES_SET; |
581 } | 594 } |
582 else | 595 else |
583 { | 596 { |
584 opts->x_ix86_isa_flags2 &= ~OPTION_MASK_ISA_VAES_UNSET; | 597 opts->x_ix86_isa_flags2 &= ~OPTION_MASK_ISA2_VAES_UNSET; |
585 opts->x_ix86_isa_flags2_explicit |= OPTION_MASK_ISA_VAES_UNSET; | 598 opts->x_ix86_isa_flags2_explicit |= OPTION_MASK_ISA2_VAES_UNSET; |
586 } | 599 } |
587 return true; | 600 return true; |
588 | 601 |
589 case OPT_mvpclmulqdq: | 602 case OPT_mvpclmulqdq: |
590 if (value) | 603 if (value) |
613 return true; | 626 return true; |
614 | 627 |
615 case OPT_mmovdir64b: | 628 case OPT_mmovdir64b: |
616 if (value) | 629 if (value) |
617 { | 630 { |
618 opts->x_ix86_isa_flags2 |= OPTION_MASK_ISA_MOVDIR64B_SET; | 631 opts->x_ix86_isa_flags2 |= OPTION_MASK_ISA2_MOVDIR64B_SET; |
619 opts->x_ix86_isa_flags2_explicit |= OPTION_MASK_ISA_MOVDIR64B_SET; | 632 opts->x_ix86_isa_flags2_explicit |= OPTION_MASK_ISA2_MOVDIR64B_SET; |
620 } | 633 } |
621 else | 634 else |
622 { | 635 { |
623 opts->x_ix86_isa_flags2 &= ~OPTION_MASK_ISA_MOVDIR64B_UNSET; | 636 opts->x_ix86_isa_flags2 &= ~OPTION_MASK_ISA2_MOVDIR64B_UNSET; |
624 opts->x_ix86_isa_flags2_explicit |= OPTION_MASK_ISA_MOVDIR64B_UNSET; | 637 opts->x_ix86_isa_flags2_explicit |= OPTION_MASK_ISA2_MOVDIR64B_UNSET; |
625 } | 638 } |
626 return true; | 639 return true; |
627 | 640 |
628 case OPT_mcldemote: | 641 case OPT_mcldemote: |
629 if (value) | 642 if (value) |
630 { | 643 { |
631 opts->x_ix86_isa_flags2 |= OPTION_MASK_ISA_CLDEMOTE_SET; | 644 opts->x_ix86_isa_flags2 |= OPTION_MASK_ISA2_CLDEMOTE_SET; |
632 opts->x_ix86_isa_flags2_explicit |= OPTION_MASK_ISA_CLDEMOTE_SET; | 645 opts->x_ix86_isa_flags2_explicit |= OPTION_MASK_ISA2_CLDEMOTE_SET; |
633 } | 646 } |
634 else | 647 else |
635 { | 648 { |
636 opts->x_ix86_isa_flags2 &= ~OPTION_MASK_ISA_CLDEMOTE_UNSET; | 649 opts->x_ix86_isa_flags2 &= ~OPTION_MASK_ISA2_CLDEMOTE_UNSET; |
637 opts->x_ix86_isa_flags2_explicit |= OPTION_MASK_ISA_CLDEMOTE_UNSET; | 650 opts->x_ix86_isa_flags2_explicit |= OPTION_MASK_ISA2_CLDEMOTE_UNSET; |
638 } | 651 } |
639 return true; | 652 return true; |
640 | 653 |
641 case OPT_mwaitpkg: | 654 case OPT_mwaitpkg: |
642 if (value) | 655 if (value) |
643 { | 656 { |
644 opts->x_ix86_isa_flags2 |= OPTION_MASK_ISA_WAITPKG_SET; | 657 opts->x_ix86_isa_flags2 |= OPTION_MASK_ISA2_WAITPKG_SET; |
645 opts->x_ix86_isa_flags2_explicit |= OPTION_MASK_ISA_WAITPKG_SET; | 658 opts->x_ix86_isa_flags2_explicit |= OPTION_MASK_ISA2_WAITPKG_SET; |
646 } | 659 } |
647 else | 660 else |
648 { | 661 { |
649 opts->x_ix86_isa_flags2 &= ~OPTION_MASK_ISA_WAITPKG_UNSET; | 662 opts->x_ix86_isa_flags2 &= ~OPTION_MASK_ISA2_WAITPKG_UNSET; |
650 opts->x_ix86_isa_flags2_explicit |= OPTION_MASK_ISA_WAITPKG_UNSET; | 663 opts->x_ix86_isa_flags2_explicit |= OPTION_MASK_ISA2_WAITPKG_UNSET; |
664 } | |
665 return true; | |
666 | |
667 case OPT_menqcmd: | |
668 if (value) | |
669 { | |
670 opts->x_ix86_isa_flags2 |= OPTION_MASK_ISA2_ENQCMD_SET; | |
671 opts->x_ix86_isa_flags2_explicit |= OPTION_MASK_ISA2_ENQCMD_SET; | |
672 } | |
673 else | |
674 { | |
675 opts->x_ix86_isa_flags2 &= ~OPTION_MASK_ISA2_ENQCMD_UNSET; | |
676 opts->x_ix86_isa_flags2_explicit |= OPTION_MASK_ISA2_ENQCMD_UNSET; | |
651 } | 677 } |
652 return true; | 678 return true; |
653 | 679 |
654 case OPT_mavx5124fmaps: | 680 case OPT_mavx5124fmaps: |
655 if (value) | 681 if (value) |
656 { | 682 { |
657 opts->x_ix86_isa_flags2 |= OPTION_MASK_ISA_AVX5124FMAPS_SET; | 683 opts->x_ix86_isa_flags2 |= OPTION_MASK_ISA2_AVX5124FMAPS_SET; |
658 opts->x_ix86_isa_flags2_explicit |= OPTION_MASK_ISA_AVX5124FMAPS_SET; | 684 opts->x_ix86_isa_flags2_explicit |= OPTION_MASK_ISA2_AVX5124FMAPS_SET; |
659 opts->x_ix86_isa_flags |= OPTION_MASK_ISA_AVX512F_SET; | 685 opts->x_ix86_isa_flags |= OPTION_MASK_ISA_AVX512F_SET; |
660 opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_AVX512F_SET; | 686 opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_AVX512F_SET; |
661 } | 687 } |
662 else | 688 else |
663 { | 689 { |
664 opts->x_ix86_isa_flags2 &= ~OPTION_MASK_ISA_AVX5124FMAPS_UNSET; | 690 opts->x_ix86_isa_flags2 &= ~OPTION_MASK_ISA2_AVX5124FMAPS_UNSET; |
665 opts->x_ix86_isa_flags2_explicit |= OPTION_MASK_ISA_AVX5124FMAPS_UNSET; | 691 opts->x_ix86_isa_flags2_explicit |= OPTION_MASK_ISA2_AVX5124FMAPS_UNSET; |
666 } | 692 } |
667 return true; | 693 return true; |
668 | 694 |
669 case OPT_mavx5124vnniw: | 695 case OPT_mavx5124vnniw: |
670 if (value) | 696 if (value) |
671 { | 697 { |
672 opts->x_ix86_isa_flags2 |= OPTION_MASK_ISA_AVX5124VNNIW_SET; | 698 opts->x_ix86_isa_flags2 |= OPTION_MASK_ISA2_AVX5124VNNIW_SET; |
673 opts->x_ix86_isa_flags2_explicit |= OPTION_MASK_ISA_AVX5124VNNIW_SET; | 699 opts->x_ix86_isa_flags2_explicit |= OPTION_MASK_ISA2_AVX5124VNNIW_SET; |
674 opts->x_ix86_isa_flags |= OPTION_MASK_ISA_AVX512F_SET; | 700 opts->x_ix86_isa_flags |= OPTION_MASK_ISA_AVX512F_SET; |
675 opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_AVX512F_SET; | 701 opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_AVX512F_SET; |
676 } | 702 } |
677 else | 703 else |
678 { | 704 { |
679 opts->x_ix86_isa_flags2 &= ~OPTION_MASK_ISA_AVX5124VNNIW_UNSET; | 705 opts->x_ix86_isa_flags2 &= ~OPTION_MASK_ISA2_AVX5124VNNIW_UNSET; |
680 opts->x_ix86_isa_flags2_explicit |= OPTION_MASK_ISA_AVX5124VNNIW_UNSET; | 706 opts->x_ix86_isa_flags2_explicit |= OPTION_MASK_ISA2_AVX5124VNNIW_UNSET; |
681 } | 707 } |
682 return true; | 708 return true; |
683 | 709 |
684 case OPT_mavx512vbmi2: | 710 case OPT_mavx512vbmi2: |
685 if (value) | 711 if (value) |
734 opts->x_ix86_isa_flags_explicit | 760 opts->x_ix86_isa_flags_explicit |
735 |= OPTION_MASK_ISA_AVX512BITALG_UNSET; | 761 |= OPTION_MASK_ISA_AVX512BITALG_UNSET; |
736 } | 762 } |
737 return true; | 763 return true; |
738 | 764 |
765 case OPT_mavx512bf16: | |
766 if (value) | |
767 { | |
768 opts->x_ix86_isa_flags2 |= OPTION_MASK_ISA2_AVX512BF16_SET; | |
769 opts->x_ix86_isa_flags2_explicit |= OPTION_MASK_ISA2_AVX512BF16_SET; | |
770 opts->x_ix86_isa_flags |= OPTION_MASK_ISA_AVX512BW_SET; | |
771 opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_AVX512BW_SET; | |
772 } | |
773 else | |
774 { | |
775 opts->x_ix86_isa_flags2 &= ~OPTION_MASK_ISA2_AVX512BF16_UNSET; | |
776 opts->x_ix86_isa_flags2_explicit |= OPTION_MASK_ISA2_AVX512BF16_UNSET; | |
777 } | |
778 return true; | |
779 | |
739 case OPT_msgx: | 780 case OPT_msgx: |
740 if (value) | 781 if (value) |
741 { | 782 { |
742 opts->x_ix86_isa_flags2 |= OPTION_MASK_ISA_SGX_SET; | 783 opts->x_ix86_isa_flags2 |= OPTION_MASK_ISA2_SGX_SET; |
743 opts->x_ix86_isa_flags2_explicit |= OPTION_MASK_ISA_SGX_SET; | 784 opts->x_ix86_isa_flags2_explicit |= OPTION_MASK_ISA2_SGX_SET; |
744 } | 785 } |
745 else | 786 else |
746 { | 787 { |
747 opts->x_ix86_isa_flags2 &= ~OPTION_MASK_ISA_SGX_UNSET; | 788 opts->x_ix86_isa_flags2 &= ~OPTION_MASK_ISA2_SGX_UNSET; |
748 opts->x_ix86_isa_flags2_explicit |= OPTION_MASK_ISA_SGX_UNSET; | 789 opts->x_ix86_isa_flags2_explicit |= OPTION_MASK_ISA2_SGX_UNSET; |
749 } | 790 } |
750 return true; | 791 return true; |
751 | 792 |
752 case OPT_mpconfig: | 793 case OPT_mpconfig: |
753 if (value) | 794 if (value) |
754 { | 795 { |
755 opts->x_ix86_isa_flags2 |= OPTION_MASK_ISA_PCONFIG_SET; | 796 opts->x_ix86_isa_flags2 |= OPTION_MASK_ISA2_PCONFIG_SET; |
756 opts->x_ix86_isa_flags2_explicit |= OPTION_MASK_ISA_PCONFIG_SET; | 797 opts->x_ix86_isa_flags2_explicit |= OPTION_MASK_ISA2_PCONFIG_SET; |
757 } | 798 } |
758 else | 799 else |
759 { | 800 { |
760 opts->x_ix86_isa_flags2 &= ~OPTION_MASK_ISA_PCONFIG_UNSET; | 801 opts->x_ix86_isa_flags2 &= ~OPTION_MASK_ISA2_PCONFIG_UNSET; |
761 opts->x_ix86_isa_flags2_explicit |= OPTION_MASK_ISA_PCONFIG_UNSET; | 802 opts->x_ix86_isa_flags2_explicit |= OPTION_MASK_ISA2_PCONFIG_UNSET; |
762 } | 803 } |
763 return true; | 804 return true; |
764 | 805 |
765 case OPT_mwbnoinvd: | 806 case OPT_mwbnoinvd: |
766 if (value) | 807 if (value) |
767 { | 808 { |
768 opts->x_ix86_isa_flags2 |= OPTION_MASK_ISA_WBNOINVD_SET; | 809 opts->x_ix86_isa_flags2 |= OPTION_MASK_ISA2_WBNOINVD_SET; |
769 opts->x_ix86_isa_flags2_explicit |= OPTION_MASK_ISA_WBNOINVD_SET; | 810 opts->x_ix86_isa_flags2_explicit |= OPTION_MASK_ISA2_WBNOINVD_SET; |
770 } | 811 } |
771 else | 812 else |
772 { | 813 { |
773 opts->x_ix86_isa_flags2 &= ~OPTION_MASK_ISA_WBNOINVD_UNSET; | 814 opts->x_ix86_isa_flags2 &= ~OPTION_MASK_ISA2_WBNOINVD_UNSET; |
774 opts->x_ix86_isa_flags2_explicit |= OPTION_MASK_ISA_WBNOINVD_UNSET; | 815 opts->x_ix86_isa_flags2_explicit |= OPTION_MASK_ISA2_WBNOINVD_UNSET; |
775 } | 816 } |
776 return true; | 817 return true; |
777 | 818 |
778 case OPT_mavx512dq: | 819 case OPT_mavx512dq: |
779 if (value) | 820 if (value) |
796 } | 837 } |
797 else | 838 else |
798 { | 839 { |
799 opts->x_ix86_isa_flags &= ~OPTION_MASK_ISA_AVX512BW_UNSET; | 840 opts->x_ix86_isa_flags &= ~OPTION_MASK_ISA_AVX512BW_UNSET; |
800 opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_AVX512BW_UNSET; | 841 opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_AVX512BW_UNSET; |
842 opts->x_ix86_isa_flags2 &= ~OPTION_MASK_ISA2_AVX512BW_UNSET; | |
843 opts->x_ix86_isa_flags2_explicit |= OPTION_MASK_ISA2_AVX512BW_UNSET; | |
801 } | 844 } |
802 return true; | 845 return true; |
803 | 846 |
804 case OPT_mavx512vl: | 847 case OPT_mavx512vl: |
805 if (value) | 848 if (value) |
835 } | 878 } |
836 else | 879 else |
837 { | 880 { |
838 opts->x_ix86_isa_flags &= ~OPTION_MASK_ISA_AVX512VBMI_UNSET; | 881 opts->x_ix86_isa_flags &= ~OPTION_MASK_ISA_AVX512VBMI_UNSET; |
839 opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_AVX512VBMI_UNSET; | 882 opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_AVX512VBMI_UNSET; |
883 } | |
884 return true; | |
885 | |
886 case OPT_mavx512vp2intersect: | |
887 if (value) | |
888 { | |
889 opts->x_ix86_isa_flags2 |= OPTION_MASK_ISA2_AVX512VP2INTERSECT_SET; | |
890 opts->x_ix86_isa_flags2_explicit |= | |
891 OPTION_MASK_ISA2_AVX512VP2INTERSECT_SET; | |
892 opts->x_ix86_isa_flags |= OPTION_MASK_ISA_AVX512F_SET; | |
893 opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_AVX512F_SET; | |
894 } | |
895 else | |
896 { | |
897 opts->x_ix86_isa_flags2 &= ~OPTION_MASK_ISA2_AVX512VP2INTERSECT_UNSET; | |
898 opts->x_ix86_isa_flags2_explicit |= | |
899 OPTION_MASK_ISA2_AVX512VP2INTERSECT_UNSET; | |
840 } | 900 } |
841 return true; | 901 return true; |
842 | 902 |
843 case OPT_mfma: | 903 case OPT_mfma: |
844 if (value) | 904 if (value) |
1022 return true; | 1082 return true; |
1023 | 1083 |
1024 case OPT_mcx16: | 1084 case OPT_mcx16: |
1025 if (value) | 1085 if (value) |
1026 { | 1086 { |
1027 opts->x_ix86_isa_flags2 |= OPTION_MASK_ISA_CX16_SET; | 1087 opts->x_ix86_isa_flags2 |= OPTION_MASK_ISA2_CX16_SET; |
1028 opts->x_ix86_isa_flags2_explicit |= OPTION_MASK_ISA_CX16_SET; | 1088 opts->x_ix86_isa_flags2_explicit |= OPTION_MASK_ISA2_CX16_SET; |
1029 } | 1089 } |
1030 else | 1090 else |
1031 { | 1091 { |
1032 opts->x_ix86_isa_flags2 &= ~OPTION_MASK_ISA_CX16_UNSET; | 1092 opts->x_ix86_isa_flags2 &= ~OPTION_MASK_ISA2_CX16_UNSET; |
1033 opts->x_ix86_isa_flags2_explicit |= OPTION_MASK_ISA_CX16_UNSET; | 1093 opts->x_ix86_isa_flags2_explicit |= OPTION_MASK_ISA2_CX16_UNSET; |
1034 } | 1094 } |
1035 return true; | 1095 return true; |
1036 | 1096 |
1037 case OPT_mmovbe: | 1097 case OPT_mmovbe: |
1038 if (value) | 1098 if (value) |
1039 { | 1099 { |
1040 opts->x_ix86_isa_flags2 |= OPTION_MASK_ISA_MOVBE_SET; | 1100 opts->x_ix86_isa_flags2 |= OPTION_MASK_ISA2_MOVBE_SET; |
1041 opts->x_ix86_isa_flags2_explicit |= OPTION_MASK_ISA_MOVBE_SET; | 1101 opts->x_ix86_isa_flags2_explicit |= OPTION_MASK_ISA2_MOVBE_SET; |
1042 } | 1102 } |
1043 else | 1103 else |
1044 { | 1104 { |
1045 opts->x_ix86_isa_flags2 &= ~OPTION_MASK_ISA_MOVBE_UNSET; | 1105 opts->x_ix86_isa_flags2 &= ~OPTION_MASK_ISA2_MOVBE_UNSET; |
1046 opts->x_ix86_isa_flags2_explicit |= OPTION_MASK_ISA_MOVBE_UNSET; | 1106 opts->x_ix86_isa_flags2_explicit |= OPTION_MASK_ISA2_MOVBE_UNSET; |
1047 } | 1107 } |
1048 return true; | 1108 return true; |
1049 | 1109 |
1050 case OPT_mcrc32: | 1110 case OPT_mcrc32: |
1051 if (value) | 1111 if (value) |
1123 opts->x_ix86_isa_flags &= ~OPTION_MASK_ISA_RDRND_UNSET; | 1183 opts->x_ix86_isa_flags &= ~OPTION_MASK_ISA_RDRND_UNSET; |
1124 opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_RDRND_UNSET; | 1184 opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_RDRND_UNSET; |
1125 } | 1185 } |
1126 return true; | 1186 return true; |
1127 | 1187 |
1188 case OPT_mptwrite: | |
1189 if (value) | |
1190 { | |
1191 opts->x_ix86_isa_flags2 |= OPTION_MASK_ISA2_PTWRITE_SET; | |
1192 opts->x_ix86_isa_flags2_explicit |= OPTION_MASK_ISA2_PTWRITE_SET; | |
1193 } | |
1194 else | |
1195 { | |
1196 opts->x_ix86_isa_flags2 &= ~OPTION_MASK_ISA2_PTWRITE_UNSET; | |
1197 opts->x_ix86_isa_flags2_explicit |= OPTION_MASK_ISA2_PTWRITE_UNSET; | |
1198 } | |
1199 return true; | |
1200 | |
1128 case OPT_mf16c: | 1201 case OPT_mf16c: |
1129 if (value) | 1202 if (value) |
1130 { | 1203 { |
1131 opts->x_ix86_isa_flags |= OPTION_MASK_ISA_F16C_SET; | 1204 opts->x_ix86_isa_flags |= OPTION_MASK_ISA_F16C_SET; |
1132 opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_F16C_SET; | 1205 opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_F16C_SET; |
1282 return true; | 1355 return true; |
1283 | 1356 |
1284 case OPT_mmwaitx: | 1357 case OPT_mmwaitx: |
1285 if (value) | 1358 if (value) |
1286 { | 1359 { |
1287 opts->x_ix86_isa_flags2 |= OPTION_MASK_ISA_MWAITX_SET; | 1360 opts->x_ix86_isa_flags2 |= OPTION_MASK_ISA2_MWAITX_SET; |
1288 opts->x_ix86_isa_flags2_explicit |= OPTION_MASK_ISA_MWAITX_SET; | 1361 opts->x_ix86_isa_flags2_explicit |= OPTION_MASK_ISA2_MWAITX_SET; |
1289 } | 1362 } |
1290 else | 1363 else |
1291 { | 1364 { |
1292 opts->x_ix86_isa_flags2 &= ~OPTION_MASK_ISA_MWAITX_UNSET; | 1365 opts->x_ix86_isa_flags2 &= ~OPTION_MASK_ISA2_MWAITX_UNSET; |
1293 opts->x_ix86_isa_flags2_explicit |= OPTION_MASK_ISA_MWAITX_UNSET; | 1366 opts->x_ix86_isa_flags2_explicit |= OPTION_MASK_ISA2_MWAITX_UNSET; |
1294 } | 1367 } |
1295 return true; | 1368 return true; |
1296 | 1369 |
1297 case OPT_mclzero: | 1370 case OPT_mclzero: |
1298 if (value) | 1371 if (value) |
1299 { | 1372 { |
1300 opts->x_ix86_isa_flags2 |= OPTION_MASK_ISA_CLZERO_SET; | 1373 opts->x_ix86_isa_flags2 |= OPTION_MASK_ISA2_CLZERO_SET; |
1301 opts->x_ix86_isa_flags2_explicit |= OPTION_MASK_ISA_CLZERO_SET; | 1374 opts->x_ix86_isa_flags2_explicit |= OPTION_MASK_ISA2_CLZERO_SET; |
1302 } | 1375 } |
1303 else | 1376 else |
1304 { | 1377 { |
1305 opts->x_ix86_isa_flags2 &= ~OPTION_MASK_ISA_CLZERO_UNSET; | 1378 opts->x_ix86_isa_flags2 &= ~OPTION_MASK_ISA2_CLZERO_UNSET; |
1306 opts->x_ix86_isa_flags2_explicit |= OPTION_MASK_ISA_CLZERO_UNSET; | 1379 opts->x_ix86_isa_flags2_explicit |= OPTION_MASK_ISA2_CLZERO_UNSET; |
1307 } | 1380 } |
1308 return true; | 1381 return true; |
1309 | 1382 |
1310 case OPT_mpku: | 1383 case OPT_mpku: |
1311 if (value) | 1384 if (value) |
1320 } | 1393 } |
1321 return true; | 1394 return true; |
1322 | 1395 |
1323 | 1396 |
1324 case OPT_malign_loops_: | 1397 case OPT_malign_loops_: |
1325 warning_at (loc, 0, "-malign-loops is obsolete, use -falign-loops"); | 1398 warning_at (loc, 0, "%<-malign-loops%> is obsolete, " |
1399 "use %<-falign-loops%>"); | |
1326 if (value > MAX_CODE_ALIGN) | 1400 if (value > MAX_CODE_ALIGN) |
1327 error_at (loc, "-malign-loops=%d is not between 0 and %d", | 1401 error_at (loc, "%<-malign-loops=%d%> is not between 0 and %d", |
1328 value, MAX_CODE_ALIGN); | 1402 value, MAX_CODE_ALIGN); |
1329 else | 1403 else |
1330 set_malign_value (&opts->x_str_align_loops, value); | 1404 set_malign_value (&opts->x_str_align_loops, value); |
1331 return true; | 1405 return true; |
1332 | 1406 |
1333 case OPT_malign_jumps_: | 1407 case OPT_malign_jumps_: |
1334 warning_at (loc, 0, "-malign-jumps is obsolete, use -falign-jumps"); | 1408 warning_at (loc, 0, "%<-malign-jumps%> is obsolete, " |
1409 "use %<-falign-jumps%>"); | |
1335 if (value > MAX_CODE_ALIGN) | 1410 if (value > MAX_CODE_ALIGN) |
1336 error_at (loc, "-malign-jumps=%d is not between 0 and %d", | 1411 error_at (loc, "%<-malign-jumps=%d%> is not between 0 and %d", |
1337 value, MAX_CODE_ALIGN); | 1412 value, MAX_CODE_ALIGN); |
1338 else | 1413 else |
1339 set_malign_value (&opts->x_str_align_jumps, value); | 1414 set_malign_value (&opts->x_str_align_jumps, value); |
1340 return true; | 1415 return true; |
1341 | 1416 |
1342 case OPT_malign_functions_: | 1417 case OPT_malign_functions_: |
1343 warning_at (loc, 0, | 1418 warning_at (loc, 0, |
1344 "-malign-functions is obsolete, use -falign-functions"); | 1419 "%<-malign-functions%> is obsolete, " |
1420 "use %<-falign-functions%>"); | |
1345 if (value > MAX_CODE_ALIGN) | 1421 if (value > MAX_CODE_ALIGN) |
1346 error_at (loc, "-malign-functions=%d is not between 0 and %d", | 1422 error_at (loc, "%<-malign-functions=%d%> is not between 0 and %d", |
1347 value, MAX_CODE_ALIGN); | 1423 value, MAX_CODE_ALIGN); |
1348 else | 1424 else |
1349 set_malign_value (&opts->x_str_align_functions, value); | 1425 set_malign_value (&opts->x_str_align_functions, value); |
1350 return true; | 1426 return true; |
1351 | 1427 |
1352 case OPT_mbranch_cost_: | 1428 case OPT_mbranch_cost_: |
1353 if (value > 5) | 1429 if (value > 5) |
1354 { | 1430 { |
1355 error_at (loc, "-mbranch-cost=%d is not between 0 and 5", value); | 1431 error_at (loc, "%<-mbranch-cost=%d%> is not between 0 and 5", value); |
1356 opts->x_ix86_branch_cost = 5; | 1432 opts->x_ix86_branch_cost = 5; |
1357 } | 1433 } |
1358 return true; | 1434 return true; |
1359 | 1435 |
1360 default: | 1436 default: |
1394 opts->x_flag_pcc_struct_return = 2; | 1470 opts->x_flag_pcc_struct_return = 2; |
1395 opts->x_flag_asynchronous_unwind_tables = 2; | 1471 opts->x_flag_asynchronous_unwind_tables = 2; |
1396 } | 1472 } |
1397 | 1473 |
1398 /* On the x86 -fsplit-stack and -fstack-protector both use the same | 1474 /* On the x86 -fsplit-stack and -fstack-protector both use the same |
1399 field in the TCB, so they can not be used together. */ | 1475 field in the TCB, so they cannot be used together. */ |
1400 | 1476 |
1401 static bool | 1477 static bool |
1402 ix86_supports_split_stack (bool report ATTRIBUTE_UNUSED, | 1478 ix86_supports_split_stack (bool report ATTRIBUTE_UNUSED, |
1403 struct gcc_options *opts ATTRIBUTE_UNUSED) | 1479 struct gcc_options *opts ATTRIBUTE_UNUSED) |
1404 { | 1480 { |
1461 | 1537 |
1462 #undef TARGET_SUPPORTS_SPLIT_STACK | 1538 #undef TARGET_SUPPORTS_SPLIT_STACK |
1463 #define TARGET_SUPPORTS_SPLIT_STACK ix86_supports_split_stack | 1539 #define TARGET_SUPPORTS_SPLIT_STACK ix86_supports_split_stack |
1464 | 1540 |
1465 /* This table must be in sync with enum processor_type in i386.h. */ | 1541 /* This table must be in sync with enum processor_type in i386.h. */ |
1466 const char *const processor_names[PROCESSOR_max] = | 1542 const char *const processor_names[] = |
1467 { | 1543 { |
1468 "generic", | 1544 "generic", |
1469 "i386", | 1545 "i386", |
1470 "i486", | 1546 "i486", |
1471 "pentium", | 1547 "pentium", |
1487 "skylake", | 1563 "skylake", |
1488 "skylake-avx512", | 1564 "skylake-avx512", |
1489 "cannonlake", | 1565 "cannonlake", |
1490 "icelake-client", | 1566 "icelake-client", |
1491 "icelake-server", | 1567 "icelake-server", |
1568 "cascadelake", | |
1569 "tigerlake", | |
1570 "cooperlake", | |
1492 "intel", | 1571 "intel", |
1493 "geode", | 1572 "geode", |
1494 "k6", | 1573 "k6", |
1495 "athlon", | 1574 "athlon", |
1496 "k8", | 1575 "k8", |
1499 "bdver2", | 1578 "bdver2", |
1500 "bdver3", | 1579 "bdver3", |
1501 "bdver4", | 1580 "bdver4", |
1502 "btver1", | 1581 "btver1", |
1503 "btver2", | 1582 "btver2", |
1504 "znver1" | 1583 "znver1", |
1584 "znver2" | |
1505 }; | 1585 }; |
1586 | |
1587 /* Guarantee that the array is aligned with enum processor_type. */ | |
1588 STATIC_ASSERT (ARRAY_SIZE (processor_names) == PROCESSOR_max); | |
1506 | 1589 |
1507 const pta processor_alias_table[] = | 1590 const pta processor_alias_table[] = |
1508 { | 1591 { |
1509 {"i386", PROCESSOR_I386, CPU_NONE, 0}, | 1592 {"i386", PROCESSOR_I386, CPU_NONE, 0}, |
1510 {"i486", PROCESSOR_I486, CPU_NONE, 0}, | 1593 {"i486", PROCESSOR_I486, CPU_NONE, 0}, |
1532 {"pentium3m", PROCESSOR_PENTIUMPRO, CPU_PENTIUMPRO, | 1615 {"pentium3m", PROCESSOR_PENTIUMPRO, CPU_PENTIUMPRO, |
1533 PTA_MMX | PTA_SSE | PTA_FXSR}, | 1616 PTA_MMX | PTA_SSE | PTA_FXSR}, |
1534 {"pentium-m", PROCESSOR_PENTIUMPRO, CPU_PENTIUMPRO, | 1617 {"pentium-m", PROCESSOR_PENTIUMPRO, CPU_PENTIUMPRO, |
1535 PTA_MMX | PTA_SSE | PTA_SSE2 | PTA_FXSR}, | 1618 PTA_MMX | PTA_SSE | PTA_SSE2 | PTA_FXSR}, |
1536 {"pentium4", PROCESSOR_PENTIUM4, CPU_NONE, | 1619 {"pentium4", PROCESSOR_PENTIUM4, CPU_NONE, |
1537 PTA_MMX |PTA_SSE | PTA_SSE2 | PTA_FXSR}, | 1620 PTA_MMX | PTA_SSE | PTA_SSE2 | PTA_FXSR}, |
1538 {"pentium4m", PROCESSOR_PENTIUM4, CPU_NONE, | 1621 {"pentium4m", PROCESSOR_PENTIUM4, CPU_NONE, |
1539 PTA_MMX | PTA_SSE | PTA_SSE2 | PTA_FXSR}, | 1622 PTA_MMX | PTA_SSE | PTA_SSE2 | PTA_FXSR}, |
1540 {"prescott", PROCESSOR_NOCONA, CPU_NONE, | 1623 {"prescott", PROCESSOR_NOCONA, CPU_NONE, |
1541 PTA_MMX | PTA_SSE | PTA_SSE2 | PTA_SSE3 | PTA_FXSR}, | 1624 PTA_MMX | PTA_SSE | PTA_SSE2 | PTA_SSE3 | PTA_FXSR}, |
1542 {"nocona", PROCESSOR_NOCONA, CPU_NONE, | 1625 {"nocona", PROCESSOR_NOCONA, CPU_NONE, |
1563 {"cannonlake", PROCESSOR_CANNONLAKE, CPU_HASWELL, PTA_CANNONLAKE}, | 1646 {"cannonlake", PROCESSOR_CANNONLAKE, CPU_HASWELL, PTA_CANNONLAKE}, |
1564 {"icelake-client", PROCESSOR_ICELAKE_CLIENT, CPU_HASWELL, | 1647 {"icelake-client", PROCESSOR_ICELAKE_CLIENT, CPU_HASWELL, |
1565 PTA_ICELAKE_CLIENT}, | 1648 PTA_ICELAKE_CLIENT}, |
1566 {"icelake-server", PROCESSOR_ICELAKE_SERVER, CPU_HASWELL, | 1649 {"icelake-server", PROCESSOR_ICELAKE_SERVER, CPU_HASWELL, |
1567 PTA_ICELAKE_SERVER}, | 1650 PTA_ICELAKE_SERVER}, |
1651 {"cascadelake", PROCESSOR_CASCADELAKE, CPU_HASWELL, | |
1652 PTA_CASCADELAKE}, | |
1653 {"tigerlake", PROCESSOR_TIGERLAKE, CPU_HASWELL, PTA_TIGERLAKE}, | |
1654 {"cooperlake", PROCESSOR_COOPERLAKE, CPU_HASWELL, PTA_COOPERLAKE}, | |
1568 {"bonnell", PROCESSOR_BONNELL, CPU_ATOM, PTA_BONNELL}, | 1655 {"bonnell", PROCESSOR_BONNELL, CPU_ATOM, PTA_BONNELL}, |
1569 {"atom", PROCESSOR_BONNELL, CPU_ATOM, PTA_BONNELL}, | 1656 {"atom", PROCESSOR_BONNELL, CPU_ATOM, PTA_BONNELL}, |
1570 {"silvermont", PROCESSOR_SILVERMONT, CPU_SLM, PTA_SILVERMONT}, | 1657 {"silvermont", PROCESSOR_SILVERMONT, CPU_SLM, PTA_SILVERMONT}, |
1571 {"slm", PROCESSOR_SILVERMONT, CPU_SLM, PTA_SILVERMONT}, | 1658 {"slm", PROCESSOR_SILVERMONT, CPU_SLM, PTA_SILVERMONT}, |
1572 {"goldmont", PROCESSOR_GOLDMONT, CPU_GLM, PTA_GOLDMONT}, | 1659 {"goldmont", PROCESSOR_GOLDMONT, CPU_GLM, PTA_GOLDMONT}, |
1675 | PTA_BMI | PTA_BMI2 | PTA_F16C | PTA_FMA | PTA_PRFCHW | 1762 | PTA_BMI | PTA_BMI2 | PTA_F16C | PTA_FMA | PTA_PRFCHW |
1676 | PTA_FXSR | PTA_XSAVE | PTA_XSAVEOPT | PTA_FSGSBASE | 1763 | PTA_FXSR | PTA_XSAVE | PTA_XSAVEOPT | PTA_FSGSBASE |
1677 | PTA_RDRND | PTA_MOVBE | PTA_MWAITX | PTA_ADX | PTA_RDSEED | 1764 | PTA_RDRND | PTA_MOVBE | PTA_MWAITX | PTA_ADX | PTA_RDSEED |
1678 | PTA_CLZERO | PTA_CLFLUSHOPT | PTA_XSAVEC | PTA_XSAVES | 1765 | PTA_CLZERO | PTA_CLFLUSHOPT | PTA_XSAVEC | PTA_XSAVES |
1679 | PTA_SHA | PTA_LZCNT | PTA_POPCNT}, | 1766 | PTA_SHA | PTA_LZCNT | PTA_POPCNT}, |
1767 {"znver2", PROCESSOR_ZNVER2, CPU_ZNVER2, | |
1768 PTA_64BIT | PTA_MMX | PTA_SSE | PTA_SSE2 | PTA_SSE3 | |
1769 | PTA_SSE4A | PTA_CX16 | PTA_ABM | PTA_SSSE3 | PTA_SSE4_1 | |
1770 | PTA_SSE4_2 | PTA_AES | PTA_PCLMUL | PTA_AVX | PTA_AVX2 | |
1771 | PTA_BMI | PTA_BMI2 | PTA_F16C | PTA_FMA | PTA_PRFCHW | |
1772 | PTA_FXSR | PTA_XSAVE | PTA_XSAVEOPT | PTA_FSGSBASE | |
1773 | PTA_RDRND | PTA_MOVBE | PTA_MWAITX | PTA_ADX | PTA_RDSEED | |
1774 | PTA_CLZERO | PTA_CLFLUSHOPT | PTA_XSAVEC | PTA_XSAVES | |
1775 | PTA_SHA | PTA_LZCNT | PTA_POPCNT | PTA_CLWB | PTA_RDPID | |
1776 | PTA_WBNOINVD}, | |
1680 {"btver1", PROCESSOR_BTVER1, CPU_GENERIC, | 1777 {"btver1", PROCESSOR_BTVER1, CPU_GENERIC, |
1681 PTA_64BIT | PTA_MMX | PTA_SSE | PTA_SSE2 | PTA_SSE3 | 1778 PTA_64BIT | PTA_MMX | PTA_SSE | PTA_SSE2 | PTA_SSE3 |
1682 | PTA_SSSE3 | PTA_SSE4A |PTA_ABM | PTA_CX16 | PTA_PRFCHW | 1779 | PTA_SSSE3 | PTA_SSE4A | PTA_ABM | PTA_CX16 | PTA_PRFCHW |
1683 | PTA_FXSR | PTA_XSAVE}, | 1780 | PTA_FXSR | PTA_XSAVE}, |
1684 {"btver2", PROCESSOR_BTVER2, CPU_BTVER2, | 1781 {"btver2", PROCESSOR_BTVER2, CPU_BTVER2, |
1685 PTA_64BIT | PTA_MMX | PTA_SSE | PTA_SSE2 | PTA_SSE3 | 1782 PTA_64BIT | PTA_MMX | PTA_SSE | PTA_SSE2 | PTA_SSE3 |
1686 | PTA_SSSE3 | PTA_SSE4A |PTA_ABM | PTA_CX16 | PTA_SSE4_1 | 1783 | PTA_SSSE3 | PTA_SSE4A | PTA_ABM | PTA_CX16 | PTA_SSE4_1 |
1687 | PTA_SSE4_2 | PTA_AES | PTA_PCLMUL | PTA_AVX | 1784 | PTA_SSE4_2 | PTA_AES | PTA_PCLMUL | PTA_AVX |
1688 | PTA_BMI | PTA_F16C | PTA_MOVBE | PTA_PRFCHW | 1785 | PTA_BMI | PTA_F16C | PTA_MOVBE | PTA_PRFCHW |
1689 | PTA_FXSR | PTA_XSAVE | PTA_XSAVEOPT}, | 1786 | PTA_FXSR | PTA_XSAVE | PTA_XSAVEOPT}, |
1690 | 1787 |
1691 {"generic", PROCESSOR_GENERIC, CPU_GENERIC, | 1788 {"generic", PROCESSOR_GENERIC, CPU_GENERIC, |
1707 | 1804 |
1708 switch (opt) | 1805 switch (opt) |
1709 { | 1806 { |
1710 case OPT_march_: | 1807 case OPT_march_: |
1711 for (unsigned i = 0; i < pta_size; i++) | 1808 for (unsigned i = 0; i < pta_size; i++) |
1712 v.safe_push (processor_alias_table[i].name); | 1809 { |
1810 const char *name = processor_alias_table[i].name; | |
1811 gcc_checking_assert (name != NULL); | |
1812 v.safe_push (name); | |
1813 } | |
1814 #ifdef HAVE_LOCAL_CPU_DETECT | |
1815 /* Add also "native" as possible value. */ | |
1816 v.safe_push ("native"); | |
1817 #endif | |
1818 | |
1713 break; | 1819 break; |
1714 case OPT_mtune_: | 1820 case OPT_mtune_: |
1715 for (unsigned i = 0; i < PROCESSOR_max; i++) | 1821 for (unsigned i = 0; i < PROCESSOR_max; i++) |
1716 v.safe_push (processor_names[i]); | 1822 { |
1823 const char *name = processor_names[i]; | |
1824 gcc_checking_assert (name != NULL); | |
1825 v.safe_push (name); | |
1826 } | |
1717 break; | 1827 break; |
1718 default: | 1828 default: |
1719 break; | 1829 break; |
1720 } | 1830 } |
1721 | 1831 |