Branch data Line data Source code
1 : : /* Subroutines used for macro/preprocessor support on the ia-32.
2 : : Copyright (C) 2008-2025 Free Software Foundation, Inc.
3 : :
4 : : This file is part of GCC.
5 : :
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
8 : : the Free Software Foundation; either version 3, or (at your option)
9 : : any later version.
10 : :
11 : : GCC is distributed in the hope that it will be useful,
12 : : but WITHOUT ANY WARRANTY; without even the implied warranty of
13 : : MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 : : GNU General Public License for more details.
15 : :
16 : : You should have received a copy of the GNU General Public License
17 : : along with GCC; see the file COPYING3. If not see
18 : : <http://www.gnu.org/licenses/>. */
19 : :
20 : : #define IN_TARGET_CODE 1
21 : :
22 : : #include "config.h"
23 : : #include "system.h"
24 : : #include "coretypes.h"
25 : : #include "target.h"
26 : : #include "c-family/c-common.h"
27 : : #include "memmodel.h"
28 : : #include "tm_p.h"
29 : : #include "c-family/c-pragma.h"
30 : :
31 : : static bool ix86_pragma_target_parse (tree, tree);
32 : : static void ix86_target_macros_internal
33 : : (HOST_WIDE_INT, HOST_WIDE_INT, enum processor_type, enum processor_type, enum fpmath_unit,
34 : : void (*def_or_undef) (cpp_reader *, const char *));
35 : :
36 : : /* Internal function to either define or undef the appropriate system
37 : : macros. */
38 : : static void
39 : 2698415 : ix86_target_macros_internal (HOST_WIDE_INT isa_flag,
40 : : HOST_WIDE_INT isa_flag2,
41 : : enum processor_type arch,
42 : : enum processor_type tune,
43 : : enum fpmath_unit fpmath,
44 : : void (*def_or_undef) (cpp_reader *,
45 : : const char *))
46 : : {
47 : : /* For some of the k6/pentium varients there weren't separate ISA bits to
48 : : identify which tune/arch flag was passed, so figure it out here. */
49 : 2698415 : size_t arch_len = strlen (ix86_arch_string);
50 : 2698415 : size_t tune_len = strlen (ix86_tune_string);
51 : 2698415 : int last_arch_char = ix86_arch_string[arch_len - 1];
52 : 2698415 : int last_tune_char = ix86_tune_string[tune_len - 1];
53 : :
54 : : /* Built-ins based on -march=. */
55 : 2698415 : switch (arch)
56 : : {
57 : : case PROCESSOR_I386:
58 : : break;
59 : 0 : case PROCESSOR_I486:
60 : 0 : def_or_undef (parse_in, "__i486");
61 : 0 : def_or_undef (parse_in, "__i486__");
62 : 0 : break;
63 : 0 : case PROCESSOR_LAKEMONT:
64 : : /* Intel MCU is based on Intel Pentium CPU. */
65 : 0 : case PROCESSOR_PENTIUM:
66 : 0 : def_or_undef (parse_in, "__i586");
67 : 0 : def_or_undef (parse_in, "__i586__");
68 : 0 : def_or_undef (parse_in, "__pentium");
69 : 0 : def_or_undef (parse_in, "__pentium__");
70 : 0 : if (isa_flag & OPTION_MASK_ISA_MMX)
71 : 0 : def_or_undef (parse_in, "__pentium_mmx__");
72 : : break;
73 : 0 : case PROCESSOR_PENTIUMPRO:
74 : 0 : def_or_undef (parse_in, "__i686");
75 : 0 : def_or_undef (parse_in, "__i686__");
76 : 0 : def_or_undef (parse_in, "__pentiumpro");
77 : 0 : def_or_undef (parse_in, "__pentiumpro__");
78 : 0 : break;
79 : 0 : case PROCESSOR_GEODE:
80 : 0 : def_or_undef (parse_in, "__geode");
81 : 0 : def_or_undef (parse_in, "__geode__");
82 : 0 : break;
83 : 0 : case PROCESSOR_K6:
84 : 0 : def_or_undef (parse_in, "__k6");
85 : 0 : def_or_undef (parse_in, "__k6__");
86 : 0 : if (last_arch_char == '2')
87 : 0 : def_or_undef (parse_in, "__k6_2__");
88 : 0 : else if (last_arch_char == '3')
89 : 0 : def_or_undef (parse_in, "__k6_3__");
90 : 0 : else if (isa_flag & OPTION_MASK_ISA_3DNOW)
91 : 0 : def_or_undef (parse_in, "__k6_3__");
92 : : break;
93 : 0 : case PROCESSOR_ATHLON:
94 : 0 : def_or_undef (parse_in, "__athlon");
95 : 0 : def_or_undef (parse_in, "__athlon__");
96 : 0 : if (isa_flag & OPTION_MASK_ISA_SSE)
97 : 0 : def_or_undef (parse_in, "__athlon_sse__");
98 : : break;
99 : 203220 : case PROCESSOR_K8:
100 : 203220 : def_or_undef (parse_in, "__k8");
101 : 203220 : def_or_undef (parse_in, "__k8__");
102 : 203220 : break;
103 : 40 : case PROCESSOR_AMDFAM10:
104 : 40 : def_or_undef (parse_in, "__amdfam10");
105 : 40 : def_or_undef (parse_in, "__amdfam10__");
106 : 40 : break;
107 : 5 : case PROCESSOR_BDVER1:
108 : 5 : def_or_undef (parse_in, "__bdver1");
109 : 5 : def_or_undef (parse_in, "__bdver1__");
110 : 5 : break;
111 : 12 : case PROCESSOR_BDVER2:
112 : 12 : def_or_undef (parse_in, "__bdver2");
113 : 12 : def_or_undef (parse_in, "__bdver2__");
114 : 12 : break;
115 : 0 : case PROCESSOR_BDVER3:
116 : 0 : def_or_undef (parse_in, "__bdver3");
117 : 0 : def_or_undef (parse_in, "__bdver3__");
118 : 0 : break;
119 : 16 : case PROCESSOR_BDVER4:
120 : 16 : def_or_undef (parse_in, "__bdver4");
121 : 16 : def_or_undef (parse_in, "__bdver4__");
122 : 16 : break;
123 : 7 : case PROCESSOR_ZNVER1:
124 : 7 : def_or_undef (parse_in, "__znver1");
125 : 7 : def_or_undef (parse_in, "__znver1__");
126 : 7 : break;
127 : 16 : case PROCESSOR_ZNVER2:
128 : 16 : def_or_undef (parse_in, "__znver2");
129 : 16 : def_or_undef (parse_in, "__znver2__");
130 : 16 : break;
131 : 0 : case PROCESSOR_ZNVER3:
132 : 0 : def_or_undef (parse_in, "__znver3");
133 : 0 : def_or_undef (parse_in, "__znver3__");
134 : 0 : break;
135 : 13 : case PROCESSOR_ZNVER4:
136 : 13 : def_or_undef (parse_in, "__znver4");
137 : 13 : def_or_undef (parse_in, "__znver4__");
138 : 13 : break;
139 : 12 : case PROCESSOR_ZNVER5:
140 : 12 : def_or_undef (parse_in, "__znver5");
141 : 12 : def_or_undef (parse_in, "__znver5__");
142 : 12 : break;
143 : 0 : case PROCESSOR_BTVER1:
144 : 0 : def_or_undef (parse_in, "__btver1");
145 : 0 : def_or_undef (parse_in, "__btver1__");
146 : 0 : break;
147 : 2 : case PROCESSOR_BTVER2:
148 : 2 : def_or_undef (parse_in, "__btver2");
149 : 2 : def_or_undef (parse_in, "__btver2__");
150 : 2 : break;
151 : 0 : case PROCESSOR_LUJIAZUI:
152 : 0 : def_or_undef (parse_in, "__lujiazui");
153 : 0 : def_or_undef (parse_in, "__lujiazui__");
154 : 0 : break;
155 : 0 : case PROCESSOR_YONGFENG:
156 : 0 : def_or_undef (parse_in, "__yongfeng");
157 : 0 : def_or_undef (parse_in, "__yongfeng__");
158 : 0 : break;
159 : 0 : case PROCESSOR_SHIJIDADAO:
160 : 0 : def_or_undef (parse_in, "__shijidadao");
161 : 0 : def_or_undef (parse_in, "__shijidadao__");
162 : 0 : break;
163 : 0 : case PROCESSOR_PENTIUM4:
164 : 0 : def_or_undef (parse_in, "__pentium4");
165 : 0 : def_or_undef (parse_in, "__pentium4__");
166 : 0 : break;
167 : 8 : case PROCESSOR_NOCONA:
168 : 8 : def_or_undef (parse_in, "__nocona");
169 : 8 : def_or_undef (parse_in, "__nocona__");
170 : 8 : break;
171 : 17 : case PROCESSOR_CORE2:
172 : 17 : def_or_undef (parse_in, "__core2");
173 : 17 : def_or_undef (parse_in, "__core2__");
174 : 17 : break;
175 : 17 : case PROCESSOR_NEHALEM:
176 : 17 : def_or_undef (parse_in, "__corei7");
177 : 17 : def_or_undef (parse_in, "__corei7__");
178 : 17 : def_or_undef (parse_in, "__nehalem");
179 : 17 : def_or_undef (parse_in, "__nehalem__");
180 : 17 : break;
181 : 3 : case PROCESSOR_SANDYBRIDGE:
182 : 3 : def_or_undef (parse_in, "__corei7_avx");
183 : 3 : def_or_undef (parse_in, "__corei7_avx__");
184 : 3 : def_or_undef (parse_in, "__sandybridge");
185 : 3 : def_or_undef (parse_in, "__sandybridge__");
186 : 3 : break;
187 : 75 : case PROCESSOR_HASWELL:
188 : 75 : def_or_undef (parse_in, "__core_avx2");
189 : 75 : def_or_undef (parse_in, "__core_avx2__");
190 : 75 : def_or_undef (parse_in, "__haswell");
191 : 75 : def_or_undef (parse_in, "__haswell__");
192 : 75 : break;
193 : 21 : case PROCESSOR_BONNELL:
194 : 21 : def_or_undef (parse_in, "__atom");
195 : 21 : def_or_undef (parse_in, "__atom__");
196 : 21 : def_or_undef (parse_in, "__bonnell");
197 : 21 : def_or_undef (parse_in, "__bonnell__");
198 : 21 : break;
199 : 8 : case PROCESSOR_SILVERMONT:
200 : 8 : def_or_undef (parse_in, "__slm");
201 : 8 : def_or_undef (parse_in, "__slm__");
202 : 8 : def_or_undef (parse_in, "__silvermont");
203 : 8 : def_or_undef (parse_in, "__silvermont__");
204 : 8 : break;
205 : 3 : case PROCESSOR_GOLDMONT:
206 : 3 : def_or_undef (parse_in, "__goldmont");
207 : 3 : def_or_undef (parse_in, "__goldmont__");
208 : 3 : break;
209 : 0 : case PROCESSOR_GOLDMONT_PLUS:
210 : 0 : def_or_undef (parse_in, "__goldmont_plus");
211 : 0 : def_or_undef (parse_in, "__goldmont_plus__");
212 : 0 : break;
213 : 0 : case PROCESSOR_TREMONT:
214 : 0 : def_or_undef (parse_in, "__tremont");
215 : 0 : def_or_undef (parse_in, "__tremont__");
216 : 0 : break;
217 : 2 : case PROCESSOR_SIERRAFOREST:
218 : 2 : def_or_undef (parse_in, "__sierraforest");
219 : 2 : def_or_undef (parse_in, "__sierraforest__");
220 : 2 : break;
221 : 0 : case PROCESSOR_GRANDRIDGE:
222 : 0 : def_or_undef (parse_in, "__grandridge");
223 : 0 : def_or_undef (parse_in, "__grandridge__");
224 : 0 : break;
225 : 0 : case PROCESSOR_CLEARWATERFOREST:
226 : 0 : def_or_undef (parse_in, "__clearwaterforest");
227 : 0 : def_or_undef (parse_in, "__clearwaterforest__");
228 : 0 : break;
229 : : break;
230 : 59 : case PROCESSOR_SKYLAKE:
231 : 59 : def_or_undef (parse_in, "__skylake");
232 : 59 : def_or_undef (parse_in, "__skylake__");
233 : 59 : break;
234 : 162 : case PROCESSOR_SKYLAKE_AVX512:
235 : 162 : def_or_undef (parse_in, "__skylake_avx512");
236 : 162 : def_or_undef (parse_in, "__skylake_avx512__");
237 : 162 : break;
238 : 11 : case PROCESSOR_CANNONLAKE:
239 : 11 : def_or_undef (parse_in, "__cannonlake");
240 : 11 : def_or_undef (parse_in, "__cannonlake__");
241 : 11 : break;
242 : 0 : case PROCESSOR_ICELAKE_CLIENT:
243 : 0 : def_or_undef (parse_in, "__icelake_client");
244 : 0 : def_or_undef (parse_in, "__icelake_client__");
245 : 0 : break;
246 : 11 : case PROCESSOR_ICELAKE_SERVER:
247 : 11 : def_or_undef (parse_in, "__icelake_server");
248 : 11 : def_or_undef (parse_in, "__icelake_server__");
249 : 11 : break;
250 : 17 : case PROCESSOR_CASCADELAKE:
251 : 17 : def_or_undef (parse_in, "__cascadelake");
252 : 17 : def_or_undef (parse_in, "__cascadelake__");
253 : 17 : break;
254 : 7 : case PROCESSOR_TIGERLAKE:
255 : 7 : def_or_undef (parse_in, "__tigerlake");
256 : 7 : def_or_undef (parse_in, "__tigerlake__");
257 : 7 : break;
258 : 2 : case PROCESSOR_COOPERLAKE:
259 : 2 : def_or_undef (parse_in, "__cooperlake");
260 : 2 : def_or_undef (parse_in, "__cooperlake__");
261 : 2 : break;
262 : 30 : case PROCESSOR_SAPPHIRERAPIDS:
263 : 30 : def_or_undef (parse_in, "__sapphirerapids");
264 : 30 : def_or_undef (parse_in, "__sapphirerapids__");
265 : 30 : break;
266 : 0 : case PROCESSOR_GRANITERAPIDS:
267 : 0 : def_or_undef (parse_in, "__graniterapids");
268 : 0 : def_or_undef (parse_in, "__graniterapids__");
269 : 0 : break;
270 : 0 : case PROCESSOR_GRANITERAPIDS_D:
271 : 0 : def_or_undef (parse_in, "__graniterapids_d");
272 : 0 : def_or_undef (parse_in, "__graniterapids_d__");
273 : 0 : break;
274 : 7 : case PROCESSOR_ALDERLAKE:
275 : 7 : def_or_undef (parse_in, "__alderlake");
276 : 7 : def_or_undef (parse_in, "__alderlake__");
277 : 7 : break;
278 : 0 : case PROCESSOR_ROCKETLAKE:
279 : 0 : def_or_undef (parse_in, "__rocketlake");
280 : 0 : def_or_undef (parse_in, "__rocketlake__");
281 : 0 : break;
282 : 0 : case PROCESSOR_ARROWLAKE:
283 : 0 : def_or_undef (parse_in, "__arrowlake");
284 : 0 : def_or_undef (parse_in, "__arrowlake__");
285 : 0 : break;
286 : 0 : case PROCESSOR_ARROWLAKE_S:
287 : 0 : def_or_undef (parse_in, "__arrowlake_s");
288 : 0 : def_or_undef (parse_in, "__arrowlake_s__");
289 : 0 : break;
290 : 0 : case PROCESSOR_PANTHERLAKE:
291 : 0 : def_or_undef (parse_in, "__pantherlake");
292 : 0 : def_or_undef (parse_in, "__pantherlake__");
293 : 0 : break;
294 : 0 : case PROCESSOR_DIAMONDRAPIDS:
295 : 0 : def_or_undef (parse_in, "__diamondrapids");
296 : 0 : def_or_undef (parse_in, "__diamondrapids__");
297 : 0 : break;
298 : :
299 : : /* use PROCESSOR_max to not set/unset the arch macro. */
300 : : case PROCESSOR_max:
301 : : break;
302 : 0 : case PROCESSOR_INTEL:
303 : 0 : case PROCESSOR_GENERIC:
304 : 0 : gcc_unreachable ();
305 : : }
306 : :
307 : : /* Built-ins based on -mtune=. */
308 : 2698415 : switch (tune)
309 : : {
310 : 0 : case PROCESSOR_I386:
311 : 0 : def_or_undef (parse_in, "__tune_i386__");
312 : 0 : break;
313 : 0 : case PROCESSOR_I486:
314 : 0 : def_or_undef (parse_in, "__tune_i486__");
315 : 0 : break;
316 : 0 : case PROCESSOR_PENTIUM:
317 : 0 : def_or_undef (parse_in, "__tune_i586__");
318 : 0 : def_or_undef (parse_in, "__tune_pentium__");
319 : 0 : if (last_tune_char == 'x')
320 : 0 : def_or_undef (parse_in, "__tune_pentium_mmx__");
321 : : break;
322 : 0 : case PROCESSOR_PENTIUMPRO:
323 : 0 : def_or_undef (parse_in, "__tune_i686__");
324 : 0 : def_or_undef (parse_in, "__tune_pentiumpro__");
325 : 0 : switch (last_tune_char)
326 : : {
327 : 0 : case '3':
328 : 0 : def_or_undef (parse_in, "__tune_pentium3__");
329 : : /* FALLTHRU */
330 : 0 : case '2':
331 : 0 : def_or_undef (parse_in, "__tune_pentium2__");
332 : 0 : break;
333 : : }
334 : : break;
335 : 0 : case PROCESSOR_GEODE:
336 : 0 : def_or_undef (parse_in, "__tune_geode__");
337 : 0 : break;
338 : 0 : case PROCESSOR_K6:
339 : 0 : def_or_undef (parse_in, "__tune_k6__");
340 : 0 : if (last_tune_char == '2')
341 : 0 : def_or_undef (parse_in, "__tune_k6_2__");
342 : 0 : else if (last_tune_char == '3')
343 : 0 : def_or_undef (parse_in, "__tune_k6_3__");
344 : 0 : else if (isa_flag & OPTION_MASK_ISA_3DNOW)
345 : 0 : def_or_undef (parse_in, "__tune_k6_3__");
346 : : break;
347 : 0 : case PROCESSOR_ATHLON:
348 : 0 : def_or_undef (parse_in, "__tune_athlon__");
349 : 0 : if (isa_flag & OPTION_MASK_ISA_SSE)
350 : 0 : def_or_undef (parse_in, "__tune_athlon_sse__");
351 : : break;
352 : 101 : case PROCESSOR_K8:
353 : 101 : def_or_undef (parse_in, "__tune_k8__");
354 : 101 : break;
355 : 52 : case PROCESSOR_AMDFAM10:
356 : 52 : def_or_undef (parse_in, "__tune_amdfam10__");
357 : 52 : break;
358 : 7 : case PROCESSOR_BDVER1:
359 : 7 : def_or_undef (parse_in, "__tune_bdver1__");
360 : 7 : break;
361 : 12 : case PROCESSOR_BDVER2:
362 : 12 : def_or_undef (parse_in, "__tune_bdver2__");
363 : 12 : break;
364 : 0 : case PROCESSOR_BDVER3:
365 : 0 : def_or_undef (parse_in, "__tune_bdver3__");
366 : 0 : break;
367 : 17 : case PROCESSOR_BDVER4:
368 : 17 : def_or_undef (parse_in, "__tune_bdver4__");
369 : 17 : break;
370 : 8 : case PROCESSOR_ZNVER1:
371 : 8 : def_or_undef (parse_in, "__tune_znver1__");
372 : 8 : break;
373 : 16 : case PROCESSOR_ZNVER2:
374 : 16 : def_or_undef (parse_in, "__tune_znver2__");
375 : 16 : break;
376 : 1 : case PROCESSOR_ZNVER3:
377 : 1 : def_or_undef (parse_in, "__tune_znver3__");
378 : 1 : break;
379 : 13 : case PROCESSOR_ZNVER4:
380 : 13 : def_or_undef (parse_in, "__tune_znver4__");
381 : 13 : break;
382 : 13 : case PROCESSOR_ZNVER5:
383 : 13 : def_or_undef (parse_in, "__tune_znver5__");
384 : 13 : break;
385 : 0 : case PROCESSOR_BTVER1:
386 : 0 : def_or_undef (parse_in, "__tune_btver1__");
387 : 0 : break;
388 : 4 : case PROCESSOR_BTVER2:
389 : 4 : def_or_undef (parse_in, "__tune_btver2__");
390 : 4 : break;
391 : 0 : case PROCESSOR_LUJIAZUI:
392 : 0 : def_or_undef (parse_in, "__tune_lujiazui__");
393 : 0 : break;
394 : 0 : case PROCESSOR_YONGFENG:
395 : 0 : def_or_undef (parse_in, "__tune_yongfeng__");
396 : 0 : break;
397 : 0 : case PROCESSOR_SHIJIDADAO:
398 : 0 : def_or_undef (parse_in, "__tune_shijidadao__");
399 : 0 : break;
400 : 0 : case PROCESSOR_PENTIUM4:
401 : 0 : def_or_undef (parse_in, "__tune_pentium4__");
402 : 0 : break;
403 : 10 : case PROCESSOR_NOCONA:
404 : 10 : def_or_undef (parse_in, "__tune_nocona__");
405 : 10 : break;
406 : 60 : case PROCESSOR_CORE2:
407 : 60 : def_or_undef (parse_in, "__tune_core2__");
408 : 60 : break;
409 : 25 : case PROCESSOR_NEHALEM:
410 : 25 : def_or_undef (parse_in, "__tune_corei7__");
411 : 25 : def_or_undef (parse_in, "__tune_nehalem__");
412 : 25 : break;
413 : 16 : case PROCESSOR_SANDYBRIDGE:
414 : 16 : def_or_undef (parse_in, "__tune_corei7_avx__");
415 : 16 : def_or_undef (parse_in, "__tune_sandybridge__");
416 : 16 : break;
417 : 89 : case PROCESSOR_HASWELL:
418 : 89 : def_or_undef (parse_in, "__tune_core_avx2__");
419 : 89 : def_or_undef (parse_in, "__tune_haswell__");
420 : 89 : break;
421 : 38 : case PROCESSOR_BONNELL:
422 : 38 : def_or_undef (parse_in, "__tune_atom__");
423 : 38 : def_or_undef (parse_in, "__tune_bonnell__");
424 : 38 : break;
425 : 18 : case PROCESSOR_SILVERMONT:
426 : 18 : def_or_undef (parse_in, "__tune_slm__");
427 : 18 : def_or_undef (parse_in, "__tune_silvermont__");
428 : 18 : break;
429 : 9 : case PROCESSOR_GOLDMONT:
430 : 9 : def_or_undef (parse_in, "__tune_goldmont__");
431 : 9 : break;
432 : 0 : case PROCESSOR_GOLDMONT_PLUS:
433 : 0 : def_or_undef (parse_in, "__tune_goldmont_plus__");
434 : 0 : break;
435 : 0 : case PROCESSOR_TREMONT:
436 : 0 : def_or_undef (parse_in, "__tune_tremont__");
437 : 0 : break;
438 : 2 : case PROCESSOR_SIERRAFOREST:
439 : 2 : def_or_undef (parse_in, "__tune_sierraforest__");
440 : 2 : break;
441 : 0 : case PROCESSOR_GRANDRIDGE:
442 : 0 : def_or_undef (parse_in, "__tune_grandridge__");
443 : 0 : break;
444 : 0 : case PROCESSOR_CLEARWATERFOREST:
445 : 0 : def_or_undef (parse_in, "__tune_clearwaterforest__");
446 : 0 : break;
447 : 80 : case PROCESSOR_SKYLAKE:
448 : 80 : def_or_undef (parse_in, "__tune_skylake__");
449 : 80 : break;
450 : 187 : case PROCESSOR_SKYLAKE_AVX512:
451 : 187 : def_or_undef (parse_in, "__tune_skylake_avx512__");
452 : 187 : break;
453 : 11 : case PROCESSOR_CANNONLAKE:
454 : 11 : def_or_undef (parse_in, "__tune_cannonlake__");
455 : 11 : break;
456 : 0 : case PROCESSOR_ICELAKE_CLIENT:
457 : 0 : def_or_undef (parse_in, "__tune_icelake_client__");
458 : 0 : break;
459 : 21 : case PROCESSOR_ICELAKE_SERVER:
460 : 21 : def_or_undef (parse_in, "__tune_icelake_server__");
461 : 21 : break;
462 : 0 : case PROCESSOR_LAKEMONT:
463 : 0 : def_or_undef (parse_in, "__tune_lakemont__");
464 : 0 : break;
465 : 17 : case PROCESSOR_CASCADELAKE:
466 : 17 : def_or_undef (parse_in, "__tune_cascadelake__");
467 : 17 : break;
468 : 7 : case PROCESSOR_TIGERLAKE:
469 : 7 : def_or_undef (parse_in, "__tune_tigerlake__");
470 : 7 : break;
471 : 2 : case PROCESSOR_COOPERLAKE:
472 : 2 : def_or_undef (parse_in, "__tune_cooperlake__");
473 : 2 : break;
474 : 33 : case PROCESSOR_SAPPHIRERAPIDS:
475 : 33 : def_or_undef (parse_in, "__tune_sapphirerapids__");
476 : 33 : break;
477 : 7 : case PROCESSOR_ALDERLAKE:
478 : 7 : def_or_undef (parse_in, "__tune_alderlake__");
479 : 7 : break;
480 : 0 : case PROCESSOR_ROCKETLAKE:
481 : 0 : def_or_undef (parse_in, "__tune_rocketlake__");
482 : 0 : break;
483 : 0 : case PROCESSOR_GRANITERAPIDS:
484 : 0 : def_or_undef (parse_in, "__tune_graniterapids__");
485 : 0 : break;
486 : 0 : case PROCESSOR_GRANITERAPIDS_D:
487 : 0 : def_or_undef (parse_in, "__tune_graniterapids_d__");
488 : 0 : break;
489 : 0 : case PROCESSOR_ARROWLAKE:
490 : 0 : def_or_undef (parse_in, "__tune_arrowlake__");
491 : 0 : break;
492 : 0 : case PROCESSOR_ARROWLAKE_S:
493 : 0 : def_or_undef (parse_in, "__tune_arrowlake_s__");
494 : 0 : break;
495 : 0 : case PROCESSOR_PANTHERLAKE:
496 : 0 : def_or_undef (parse_in, "__tune_pantherlake__");
497 : 0 : break;
498 : 0 : case PROCESSOR_DIAMONDRAPIDS:
499 : 0 : def_or_undef (parse_in, "__tune_diamondrapids__");
500 : 0 : break;
501 : : case PROCESSOR_INTEL:
502 : : case PROCESSOR_GENERIC:
503 : : break;
504 : : /* use PROCESSOR_max to not set/unset the tune macro. */
505 : : case PROCESSOR_max:
506 : : break;
507 : : }
508 : :
509 : 2698415 : switch (ix86_cmodel)
510 : : {
511 : 2649409 : case CM_SMALL:
512 : 2649409 : case CM_SMALL_PIC:
513 : 2649409 : def_or_undef (parse_in, "__code_model_small__");
514 : 2649409 : break;
515 : 998 : case CM_MEDIUM:
516 : 998 : case CM_MEDIUM_PIC:
517 : 998 : def_or_undef (parse_in, "__code_model_medium__");
518 : 998 : break;
519 : 548 : case CM_LARGE:
520 : 548 : case CM_LARGE_PIC:
521 : 548 : def_or_undef (parse_in, "__code_model_large__");
522 : 548 : break;
523 : 47459 : case CM_32:
524 : 47459 : def_or_undef (parse_in, "__code_model_32__");
525 : 47459 : break;
526 : 1 : case CM_KERNEL:
527 : 1 : def_or_undef (parse_in, "__code_model_kernel__");
528 : 1 : break;
529 : 2698415 : default:
530 : 2698415 : ;
531 : : }
532 : :
533 : 2698415 : if (isa_flag2 & OPTION_MASK_ISA2_WBNOINVD)
534 : 10214 : def_or_undef (parse_in, "__WBNOINVD__");
535 : 2698415 : if (isa_flag2 & OPTION_MASK_ISA2_AVX512VP2INTERSECT)
536 : 20129 : def_or_undef (parse_in, "__AVX512VP2INTERSECT__");
537 : 2698415 : if (isa_flag & OPTION_MASK_ISA_MMX)
538 : 212350 : def_or_undef (parse_in, "__MMX__");
539 : 2698415 : if (isa_flag & OPTION_MASK_ISA_3DNOW)
540 : 2778 : def_or_undef (parse_in, "__3dNOW__");
541 : 2698415 : if (isa_flag & OPTION_MASK_ISA_3DNOW_A)
542 : 1470 : def_or_undef (parse_in, "__3dNOW_A__");
543 : 2698415 : if (isa_flag & OPTION_MASK_ISA_SSE)
544 : 214328 : def_or_undef (parse_in, "__SSE__");
545 : 2698415 : if (isa_flag & OPTION_MASK_ISA_SSE2)
546 : 214226 : def_or_undef (parse_in, "__SSE2__");
547 : 2698415 : if (isa_flag & OPTION_MASK_ISA_SSE3)
548 : 99882 : def_or_undef (parse_in, "__SSE3__");
549 : 2698415 : if (isa_flag & OPTION_MASK_ISA_SSSE3)
550 : 98144 : def_or_undef (parse_in, "__SSSE3__");
551 : 2698415 : if (isa_flag & OPTION_MASK_ISA_SSE4_1)
552 : 97304 : def_or_undef (parse_in, "__SSE4_1__");
553 : 2698415 : if (isa_flag & OPTION_MASK_ISA_SSE4_2)
554 : 97744 : def_or_undef (parse_in, "__SSE4_2__");
555 : 2698415 : if (isa_flag & OPTION_MASK_ISA_AES)
556 : 10414 : def_or_undef (parse_in, "__AES__");
557 : 2698415 : if (isa_flag & OPTION_MASK_ISA_SHA)
558 : 10118 : def_or_undef (parse_in, "__SHA__");
559 : 2698415 : if (isa_flag & OPTION_MASK_ISA_PCLMUL)
560 : 30302 : def_or_undef (parse_in, "__PCLMUL__");
561 : 2698415 : if (isa_flag & OPTION_MASK_ISA_AVX)
562 : 97456 : def_or_undef (parse_in, "__AVX__");
563 : 2698415 : if (isa_flag & OPTION_MASK_ISA_AVX2)
564 : 167773 : def_or_undef (parse_in, "__AVX2__");
565 : 2698415 : if (isa_flag & OPTION_MASK_ISA_AVX512F)
566 : 210464 : def_or_undef (parse_in, "__AVX512F__");
567 : 2698415 : if (isa_flag & OPTION_MASK_ISA_AVX512CD)
568 : 167894 : def_or_undef (parse_in, "__AVX512CD__");
569 : 2698415 : if (isa_flag & OPTION_MASK_ISA_AVX512DQ)
570 : 185079 : def_or_undef (parse_in, "__AVX512DQ__");
571 : 2698415 : if (isa_flag & OPTION_MASK_ISA_AVX512BW)
572 : 248384 : def_or_undef (parse_in, "__AVX512BW__");
573 : 2698415 : if (isa_flag & OPTION_MASK_ISA_AVX512VL)
574 : : {
575 : 228797 : def_or_undef (parse_in, "__AVX512VL__");
576 : 228797 : def_or_undef (parse_in, "__EVEX256__");
577 : : }
578 : 2698415 : if (isa_flag & OPTION_MASK_ISA_AVX512VBMI)
579 : 168385 : def_or_undef (parse_in, "__AVX512VBMI__");
580 : 2698415 : if (isa_flag & OPTION_MASK_ISA_AVX512IFMA)
581 : 168499 : def_or_undef (parse_in, "__AVX512IFMA__");
582 : 2698415 : if (isa_flag & OPTION_MASK_ISA_AVX512VBMI2)
583 : 167197 : def_or_undef (parse_in, "__AVX512VBMI2__");
584 : 2698415 : if (isa_flag & OPTION_MASK_ISA_AVX512VNNI)
585 : 168481 : def_or_undef (parse_in, "__AVX512VNNI__");
586 : 2698415 : if (isa_flag2 & OPTION_MASK_ISA2_PCONFIG)
587 : 10184 : def_or_undef (parse_in, "__PCONFIG__");
588 : 2698415 : if (isa_flag2 & OPTION_MASK_ISA2_SGX)
589 : 10415 : def_or_undef (parse_in, "__SGX__");
590 : 2698415 : if (isa_flag & OPTION_MASK_ISA_AVX512BITALG)
591 : 168333 : def_or_undef (parse_in, "__AVX512BITALG__");
592 : 2698415 : if (isa_flag & OPTION_MASK_ISA_AVX512VPOPCNTDQ)
593 : 168454 : def_or_undef (parse_in, "__AVX512VPOPCNTDQ__");
594 : 2698415 : if (isa_flag & OPTION_MASK_ISA_FMA)
595 : 10772 : def_or_undef (parse_in, "__FMA__");
596 : 2698415 : if (isa_flag & OPTION_MASK_ISA_RTM)
597 : 19708 : def_or_undef (parse_in, "__RTM__");
598 : 2698415 : if (isa_flag & OPTION_MASK_ISA_SSE4A)
599 : 4071 : def_or_undef (parse_in, "__SSE4A__");
600 : 2698415 : if (isa_flag & OPTION_MASK_ISA_FMA4)
601 : 2729 : def_or_undef (parse_in, "__FMA4__");
602 : 2698415 : if (isa_flag & OPTION_MASK_ISA_XOP)
603 : 1468 : def_or_undef (parse_in, "__XOP__");
604 : 2698415 : if (isa_flag & OPTION_MASK_ISA_LWP)
605 : 10195 : def_or_undef (parse_in, "__LWP__");
606 : 2698415 : if (isa_flag & OPTION_MASK_ISA_ABM)
607 : 138 : def_or_undef (parse_in, "__ABM__");
608 : 2698415 : if (isa_flag & OPTION_MASK_ISA_BMI)
609 : 10575 : def_or_undef (parse_in, "__BMI__");
610 : 2698415 : if (isa_flag & OPTION_MASK_ISA_BMI2)
611 : 10563 : def_or_undef (parse_in, "__BMI2__");
612 : 2698415 : if (isa_flag & OPTION_MASK_ISA_LZCNT)
613 : 10609 : def_or_undef (parse_in, "__LZCNT__");
614 : 2698415 : if (isa_flag & OPTION_MASK_ISA_TBM)
615 : 10184 : def_or_undef (parse_in, "__TBM__");
616 : 2698415 : if (isa_flag & OPTION_MASK_ISA_CRC32)
617 : 91845 : def_or_undef (parse_in, "__CRC32__");
618 : 2698415 : if (isa_flag & OPTION_MASK_ISA_POPCNT)
619 : 90020 : def_or_undef (parse_in, "__POPCNT__");
620 : 2698415 : if (isa_flag & OPTION_MASK_ISA_FSGSBASE)
621 : 10341 : def_or_undef (parse_in, "__FSGSBASE__");
622 : 2698415 : if (isa_flag & OPTION_MASK_ISA_RDRND)
623 : 20383 : def_or_undef (parse_in, "__RDRND__");
624 : 2698415 : if (isa_flag & OPTION_MASK_ISA_F16C)
625 : 10675 : def_or_undef (parse_in, "__F16C__");
626 : 2698415 : if (isa_flag & OPTION_MASK_ISA_RDSEED)
627 : 10459 : def_or_undef (parse_in, "__RDSEED__");
628 : 2698415 : if (isa_flag & OPTION_MASK_ISA_PRFCHW)
629 : 457 : def_or_undef (parse_in, "__PRFCHW__");
630 : 2698415 : if (isa_flag & OPTION_MASK_ISA_ADX)
631 : 382 : def_or_undef (parse_in, "__ADX__");
632 : 2698415 : if (isa_flag & OPTION_MASK_ISA_FXSR)
633 : 203802 : def_or_undef (parse_in, "__FXSR__");
634 : 2698415 : if (isa_flag & OPTION_MASK_ISA_XSAVE)
635 : 92563 : def_or_undef (parse_in, "__XSAVE__");
636 : 2698415 : if (isa_flag & OPTION_MASK_ISA_XSAVEOPT)
637 : 10531 : def_or_undef (parse_in, "__XSAVEOPT__");
638 : 2698415 : if ((fpmath & FPMATH_SSE) && (isa_flag & OPTION_MASK_ISA_SSE))
639 : 208795 : def_or_undef (parse_in, "__SSE_MATH__");
640 : 1879835 : if ((fpmath & FPMATH_SSE) && (isa_flag & OPTION_MASK_ISA_SSE2))
641 : 208693 : def_or_undef (parse_in, "__SSE2_MATH__");
642 : 2698415 : if (isa_flag & OPTION_MASK_ISA_CLFLUSHOPT)
643 : 10462 : def_or_undef (parse_in, "__CLFLUSHOPT__");
644 : 2698415 : if (isa_flag2 & OPTION_MASK_ISA2_CLZERO)
645 : 10204 : def_or_undef (parse_in, "__CLZERO__");
646 : 2698415 : if (isa_flag & OPTION_MASK_ISA_XSAVEC)
647 : 10461 : def_or_undef (parse_in, "__XSAVEC__");
648 : 2698415 : if (isa_flag & OPTION_MASK_ISA_XSAVES)
649 : 10461 : def_or_undef (parse_in, "__XSAVES__");
650 : 2698415 : if (isa_flag & OPTION_MASK_ISA_CLWB)
651 : 10396 : def_or_undef (parse_in, "__CLWB__");
652 : 2698415 : if (isa_flag2 & OPTION_MASK_ISA2_MWAITX)
653 : 10220 : def_or_undef (parse_in, "__MWAITX__");
654 : 2698415 : if (isa_flag & OPTION_MASK_ISA_PKU)
655 : 10382 : def_or_undef (parse_in, "__PKU__");
656 : 2698415 : if (isa_flag2 & OPTION_MASK_ISA2_RDPID)
657 : 10229 : def_or_undef (parse_in, "__RDPID__");
658 : 2698415 : if (isa_flag & OPTION_MASK_ISA_GFNI)
659 : 60003 : def_or_undef (parse_in, "__GFNI__");
660 : 2698415 : if ((isa_flag & OPTION_MASK_ISA_SHSTK))
661 : 28852 : def_or_undef (parse_in, "__SHSTK__");
662 : 2698415 : if (isa_flag2 & OPTION_MASK_ISA2_VAES)
663 : 20200 : def_or_undef (parse_in, "__VAES__");
664 : 2698415 : if (isa_flag & OPTION_MASK_ISA_VPCLMULQDQ)
665 : 20191 : def_or_undef (parse_in, "__VPCLMULQDQ__");
666 : 2698415 : if (isa_flag & OPTION_MASK_ISA_MOVDIRI)
667 : 10222 : def_or_undef (parse_in, "__MOVDIRI__");
668 : 2698415 : if (isa_flag2 & OPTION_MASK_ISA2_MOVDIR64B)
669 : 10228 : def_or_undef (parse_in, "__MOVDIR64B__");
670 : 2698415 : if (isa_flag2 & OPTION_MASK_ISA2_WAITPKG)
671 : 10203 : def_or_undef (parse_in, "__WAITPKG__");
672 : 2698415 : if (isa_flag2 & OPTION_MASK_ISA2_CLDEMOTE)
673 : 10204 : def_or_undef (parse_in, "__CLDEMOTE__");
674 : 2698415 : if (isa_flag2 & OPTION_MASK_ISA2_SERIALIZE)
675 : 10174 : def_or_undef (parse_in, "__SERIALIZE__");
676 : 2698415 : if (isa_flag2 & OPTION_MASK_ISA2_PTWRITE)
677 : 10206 : def_or_undef (parse_in, "__PTWRITE__");
678 : 2698415 : if (isa_flag2 & OPTION_MASK_ISA2_AVX512BF16)
679 : 178391 : def_or_undef (parse_in, "__AVX512BF16__");
680 : 2698415 : if (isa_flag2 & OPTION_MASK_ISA2_AVX512FP16)
681 : 161300 : def_or_undef (parse_in, "__AVX512FP16__");
682 : 2698415 : if (TARGET_MMX_WITH_SSE)
683 : 1866673 : def_or_undef (parse_in, "__MMX_WITH_SSE__");
684 : 2698415 : if (isa_flag2 & OPTION_MASK_ISA2_ENQCMD)
685 : 10171 : def_or_undef (parse_in, "__ENQCMD__");
686 : 2698415 : if (isa_flag2 & OPTION_MASK_ISA2_TSXLDTRK)
687 : 10167 : def_or_undef (parse_in, "__TSXLDTRK__");
688 : 2698415 : if (isa_flag2 & OPTION_MASK_ISA2_AMX_TILE)
689 : 89311 : def_or_undef (parse_in, "__AMX_TILE__");
690 : 2698415 : if (isa_flag2 & OPTION_MASK_ISA2_AMX_INT8)
691 : 10053 : def_or_undef (parse_in, "__AMX_INT8__");
692 : 2698415 : if (isa_flag2 & OPTION_MASK_ISA2_AMX_BF16)
693 : 19886 : def_or_undef (parse_in, "__AMX_BF16__");
694 : 2698415 : if (isa_flag & OPTION_MASK_ISA_SAHF)
695 : 5936 : def_or_undef (parse_in, "__LAHF_SAHF__");
696 : 2698415 : if (isa_flag2 & OPTION_MASK_ISA2_MOVBE)
697 : 562 : def_or_undef (parse_in, "__MOVBE__");
698 : 2698415 : if (isa_flag2 & OPTION_MASK_ISA2_UINTR)
699 : 9985 : def_or_undef (parse_in, "__UINTR__");
700 : 2698415 : if (isa_flag2 & OPTION_MASK_ISA2_HRESET)
701 : 10190 : def_or_undef (parse_in, "__HRESET__");
702 : 2698415 : if (isa_flag2 & OPTION_MASK_ISA2_KL)
703 : 20124 : def_or_undef (parse_in, "__KL__");
704 : 2698415 : if (isa_flag2 & OPTION_MASK_ISA2_WIDEKL)
705 : 10106 : def_or_undef (parse_in, "__WIDEKL__");
706 : 2698415 : if (isa_flag2 & OPTION_MASK_ISA2_AVXVNNI)
707 : 10157 : def_or_undef (parse_in, "__AVXVNNI__");
708 : 2698415 : if (isa_flag2 & OPTION_MASK_ISA2_AVXIFMA)
709 : 10096 : def_or_undef (parse_in, "__AVXIFMA__");
710 : 2698415 : if (isa_flag2 & OPTION_MASK_ISA2_AVXVNNIINT8)
711 : 10103 : def_or_undef (parse_in, "__AVXVNNIINT8__");
712 : 2698415 : if (isa_flag2 & OPTION_MASK_ISA2_AVXNECONVERT)
713 : 10100 : def_or_undef (parse_in, "__AVXNECONVERT__");
714 : 2698415 : if (isa_flag2 & OPTION_MASK_ISA2_CMPCCXADD)
715 : 9985 : def_or_undef (parse_in, "__CMPCCXADD__");
716 : 2698415 : if (isa_flag2 & OPTION_MASK_ISA2_AMX_FP16)
717 : 9869 : def_or_undef (parse_in, "__AMX_FP16__");
718 : 2698415 : if (isa_flag2 & OPTION_MASK_ISA2_PREFETCHI)
719 : 9996 : def_or_undef (parse_in, "__PREFETCHI__");
720 : 2698415 : if (isa_flag2 & OPTION_MASK_ISA2_RAOINT)
721 : 10155 : def_or_undef (parse_in, "__RAOINT__");
722 : 2698415 : if (isa_flag2 & OPTION_MASK_ISA2_AMX_COMPLEX)
723 : 19889 : def_or_undef (parse_in, "__AMX_COMPLEX__");
724 : 2698415 : if (isa_flag2 & OPTION_MASK_ISA2_AVXVNNIINT16)
725 : 10101 : def_or_undef (parse_in, "__AVXVNNIINT16__");
726 : 2698415 : if (isa_flag2 & OPTION_MASK_ISA2_SM3)
727 : 10091 : def_or_undef (parse_in, "__SM3__");
728 : 2698415 : if (isa_flag2 & OPTION_MASK_ISA2_SHA512)
729 : 10091 : def_or_undef (parse_in, "__SHA512__");
730 : 2698415 : if (isa_flag2 & OPTION_MASK_ISA2_SM4)
731 : 20114 : def_or_undef (parse_in, "__SM4__");
732 : 2698415 : if (isa_flag2 & OPTION_MASK_ISA2_EVEX512)
733 : 239710 : def_or_undef (parse_in, "__EVEX512__");
734 : 2698415 : if (isa_flag2 & OPTION_MASK_ISA2_USER_MSR)
735 : 10006 : def_or_undef (parse_in, "__USER_MSR__");
736 : 2698415 : if (isa_flag2 & OPTION_MASK_ISA2_AVX10_1_256)
737 : : {
738 : 149304 : def_or_undef (parse_in, "__AVX10_1_256__");
739 : 149304 : def_or_undef (parse_in, "__AVX10_1__");
740 : : }
741 : 2698415 : if (isa_flag2 & OPTION_MASK_ISA2_AVX10_1_512)
742 : 129700 : def_or_undef (parse_in, "__AVX10_1_512__");
743 : 2698415 : if (isa_flag2 & OPTION_MASK_ISA2_APX_F)
744 : 42 : def_or_undef (parse_in, "__APX_F__");
745 : 2698415 : if (ix86_apx_inline_asm_use_gpr32)
746 : 1 : def_or_undef (parse_in, "__APX_INLINE_ASM_USE_GPR32__");
747 : 2698415 : if (isa_flag2 & OPTION_MASK_ISA2_AVX10_2_256)
748 : 149425 : def_or_undef (parse_in, "__AVX10_2_256__");
749 : 2698415 : if (isa_flag2 & OPTION_MASK_ISA2_AVX10_2_512)
750 : 129716 : def_or_undef (parse_in, "__AVX10_2_512__");
751 : 2698415 : if (isa_flag2 & OPTION_MASK_ISA2_AMX_AVX512)
752 : 10090 : def_or_undef (parse_in, "__AMX_AVX512__");
753 : 2698415 : if (isa_flag2 & OPTION_MASK_ISA2_AMX_TF32)
754 : 19895 : def_or_undef (parse_in, "__AMX_TF32__");
755 : 2698415 : if (isa_flag2 & OPTION_MASK_ISA2_AMX_TRANSPOSE)
756 : 19896 : def_or_undef (parse_in, "__AMX_TRANSPOSE__");
757 : 2698415 : if (isa_flag2 & OPTION_MASK_ISA2_AMX_FP8)
758 : 16 : def_or_undef (parse_in, "__AMX_FP8__");
759 : 2698415 : if (isa_flag2 & OPTION_MASK_ISA2_MOVRS)
760 : 29742 : def_or_undef (parse_in, "__MOVRS__");
761 : 2698415 : if (isa_flag2 & OPTION_MASK_ISA2_AMX_MOVRS)
762 : 19729 : def_or_undef (parse_in, "__AMX_MOVRS__");
763 : 2698415 : if (TARGET_IAMCU)
764 : : {
765 : 0 : def_or_undef (parse_in, "__iamcu");
766 : 0 : def_or_undef (parse_in, "__iamcu__");
767 : : }
768 : 2698415 : }
769 : :
770 : :
771 : : /* Hook to validate the current #pragma GCC target and set the state, and
772 : : update the macros based on what was changed. If ARGS is NULL, then
773 : : POP_TARGET is used to reset the options. */
774 : :
775 : : static bool
776 : 1247576 : ix86_pragma_target_parse (tree args, tree pop_target)
777 : : {
778 : 1247576 : tree prev_tree
779 : 1247576 : = build_target_option_node (&global_options, &global_options_set);
780 : 1247576 : tree cur_tree;
781 : 1247576 : struct cl_target_option *prev_opt;
782 : 1247576 : struct cl_target_option *cur_opt;
783 : 1247576 : HOST_WIDE_INT prev_isa;
784 : 1247576 : HOST_WIDE_INT cur_isa;
785 : 1247576 : HOST_WIDE_INT diff_isa;
786 : 1247576 : HOST_WIDE_INT prev_isa2;
787 : 1247576 : HOST_WIDE_INT cur_isa2;
788 : 1247576 : HOST_WIDE_INT diff_isa2;
789 : 1247576 : enum processor_type prev_arch;
790 : 1247576 : enum processor_type prev_tune;
791 : 1247576 : enum processor_type cur_arch;
792 : 1247576 : enum processor_type cur_tune;
793 : :
794 : 1247576 : if (! args)
795 : : {
796 : 621376 : cur_tree = (pop_target ? pop_target : target_option_default_node);
797 : 621376 : cl_target_option_restore (&global_options, &global_options_set,
798 : 621376 : TREE_TARGET_OPTION (cur_tree));
799 : : }
800 : : else
801 : : {
802 : 626200 : cur_tree = ix86_valid_target_attribute_tree (NULL_TREE, args,
803 : : &global_options,
804 : : &global_options_set, 0);
805 : 626200 : if (!cur_tree || cur_tree == error_mark_node)
806 : : {
807 : 269 : cl_target_option_restore (&global_options, &global_options_set,
808 : 269 : TREE_TARGET_OPTION (prev_tree));
809 : 269 : return false;
810 : : }
811 : : }
812 : :
813 : 1247307 : target_option_current_node = cur_tree;
814 : 1247307 : ix86_reset_previous_fndecl ();
815 : :
816 : : /* Figure out the previous/current isa, arch, tune and the differences. */
817 : 1247307 : prev_opt = TREE_TARGET_OPTION (prev_tree);
818 : 1247307 : cur_opt = TREE_TARGET_OPTION (cur_tree);
819 : 1247307 : prev_isa = prev_opt->x_ix86_isa_flags;
820 : 1247307 : cur_isa = cur_opt->x_ix86_isa_flags;
821 : 1247307 : diff_isa = (prev_isa ^ cur_isa);
822 : 1247307 : prev_isa2 = prev_opt->x_ix86_isa_flags2;
823 : 1247307 : cur_isa2 = cur_opt->x_ix86_isa_flags2;
824 : 1247307 : diff_isa2 = (prev_isa2 ^ cur_isa2);
825 : 1247307 : prev_arch = (enum processor_type) prev_opt->arch;
826 : 1247307 : prev_tune = (enum processor_type) prev_opt->tune;
827 : 1247307 : cur_arch = (enum processor_type) cur_opt->arch;
828 : 1247307 : cur_tune = (enum processor_type) cur_opt->tune;
829 : :
830 : : /* If the same processor is used for both previous and current options, don't
831 : : change the macros. */
832 : 1247307 : if (cur_arch == prev_arch)
833 : 1247306 : cur_arch = prev_arch = PROCESSOR_max;
834 : :
835 : 1247307 : if (cur_tune == prev_tune)
836 : 1247306 : cur_tune = prev_tune = PROCESSOR_max;
837 : :
838 : : /* Undef all of the macros for that are no longer current. */
839 : 1247307 : cpp_force_token_locations (parse_in, BUILTINS_LOCATION);
840 : 1247307 : ix86_target_macros_internal (prev_isa & diff_isa,
841 : : prev_isa2 & diff_isa2,
842 : : prev_arch,
843 : : prev_tune,
844 : 1247307 : (enum fpmath_unit) prev_opt->x_ix86_fpmath,
845 : : cpp_undef);
846 : 1247307 : cpp_stop_forcing_token_locations (parse_in);
847 : :
848 : : /* For the definitions, ensure all newly defined macros are considered
849 : : as used for -Wunused-macros. There is no point warning about the
850 : : compiler predefined macros. */
851 : 1247307 : cpp_options *cpp_opts = cpp_get_options (parse_in);
852 : 1247307 : unsigned char saved_warn_unused_macros = cpp_opts->warn_unused_macros;
853 : 1247307 : cpp_opts->warn_unused_macros = 0;
854 : :
855 : : /* Define all of the macros for new options that were just turned on. */
856 : 1247307 : cpp_force_token_locations (parse_in, BUILTINS_LOCATION);
857 : 1247307 : ix86_target_macros_internal (cur_isa & diff_isa,
858 : : cur_isa2 & diff_isa2,
859 : : cur_arch,
860 : : cur_tune,
861 : 1247307 : (enum fpmath_unit) cur_opt->x_ix86_fpmath,
862 : : cpp_define);
863 : 1247307 : cpp_stop_forcing_token_locations (parse_in);
864 : :
865 : 1247307 : cpp_opts->warn_unused_macros = saved_warn_unused_macros;
866 : :
867 : 1247307 : return true;
868 : : }
869 : :
870 : : /* Function to tell the preprocessor about the defines for the current target. */
871 : :
872 : : void
873 : 203801 : ix86_target_macros (void)
874 : : {
875 : : /* 32/64-bit won't change with target specific options, so do the assert and
876 : : builtin_define_std calls here. */
877 : 203801 : if (TARGET_64BIT)
878 : : {
879 : 198522 : cpp_assert (parse_in, "cpu=x86_64");
880 : 198522 : cpp_assert (parse_in, "machine=x86_64");
881 : 198522 : cpp_define (parse_in, "__amd64");
882 : 198522 : cpp_define (parse_in, "__amd64__");
883 : 198522 : cpp_define (parse_in, "__x86_64");
884 : 198522 : cpp_define (parse_in, "__x86_64__");
885 : 198522 : if (TARGET_X32)
886 : : {
887 : 99 : cpp_define (parse_in, "_ILP32");
888 : 99 : cpp_define (parse_in, "__ILP32__");
889 : : }
890 : : }
891 : : else
892 : : {
893 : 5279 : cpp_assert (parse_in, "cpu=i386");
894 : 5279 : cpp_assert (parse_in, "machine=i386");
895 : 5279 : builtin_define_std ("i386");
896 : 5279 : cpp_define (parse_in, "_ILP32");
897 : 5279 : cpp_define (parse_in, "__ILP32__");
898 : : }
899 : :
900 : 203801 : if (!TARGET_80387)
901 : 206 : cpp_define (parse_in, "_SOFT_FLOAT");
902 : :
903 : : /* HFmode/BFmode is supported without depending any isa
904 : : in scalar_mode_supported_p and libgcc_floating_mode_supported_p,
905 : : but according to psABI, they're really supported w/ SSE2 and above.
906 : : Since libstdc++ uses __STDCPP_FLOAT16_T__ and __STDCPP_BFLOAT16_T__
907 : : for backend support of the types, undef the macros to avoid
908 : : build failure, see PR109504. */
909 : 203801 : if (!TARGET_SSE2)
910 : : {
911 : 376 : if (c_dialect_cxx () && cxx_dialect > cxx20)
912 : : {
913 : 5 : cpp_undef (parse_in, "__STDCPP_FLOAT16_T__");
914 : 5 : cpp_undef (parse_in, "__STDCPP_BFLOAT16_T__");
915 : : }
916 : : }
917 : :
918 : 203801 : if (TARGET_LONG_DOUBLE_64)
919 : 16 : cpp_define (parse_in, "__LONG_DOUBLE_64__");
920 : :
921 : 203801 : if (TARGET_LONG_DOUBLE_128)
922 : 6 : cpp_define (parse_in, "__LONG_DOUBLE_128__");
923 : :
924 : 203801 : cpp_define_formatted (parse_in, "__SIZEOF_FLOAT80__=%d",
925 : 203801 : GET_MODE_SIZE (XFmode));
926 : :
927 : 203801 : cpp_define (parse_in, "__SIZEOF_FLOAT128__=16");
928 : :
929 : 203801 : cpp_define_formatted (parse_in, "__ATOMIC_HLE_ACQUIRE=%d", IX86_HLE_ACQUIRE);
930 : 203801 : cpp_define_formatted (parse_in, "__ATOMIC_HLE_RELEASE=%d", IX86_HLE_RELEASE);
931 : :
932 : 203801 : cpp_define (parse_in, "__GCC_ASM_FLAG_OUTPUTS__");
933 : :
934 : 203801 : ix86_target_macros_internal (ix86_isa_flags,
935 : : ix86_isa_flags2,
936 : : ix86_arch,
937 : : ix86_tune,
938 : : ix86_fpmath,
939 : : cpp_define);
940 : :
941 : 203801 : cpp_define (parse_in, "__SEG_FS");
942 : 203801 : cpp_define (parse_in, "__SEG_GS");
943 : :
944 : 203801 : if (flag_cf_protection != CF_NONE)
945 : 19343 : cpp_define_formatted (parse_in, "__CET__=%d", flag_cf_protection & ~CF_SET);
946 : 203801 : }
947 : :
948 : :
949 : : /* Register target pragmas. We need to add the hook for parsing #pragma GCC
950 : : option here rather than in i386.cc since it will pull in various preprocessor
951 : : functions, and those are not present in languages like fortran without a
952 : : preprocessor. */
953 : :
954 : : void
955 : 204320 : ix86_register_pragmas (void)
956 : : {
957 : : /* Update pragma hook to allow parsing #pragma GCC target. */
958 : 204320 : targetm.target_option.pragma_parse = ix86_pragma_target_parse;
959 : :
960 : 204320 : c_register_addr_space ("__seg_fs", ADDR_SPACE_SEG_FS);
961 : 204320 : c_register_addr_space ("__seg_gs", ADDR_SPACE_SEG_GS);
962 : :
963 : : #ifdef REGISTER_SUBTARGET_PRAGMAS
964 : : REGISTER_SUBTARGET_PRAGMAS ();
965 : : #endif
966 : 204320 : }
|