PR libstdc++/65978
[official-gcc.git] / gcc / c-family / c-cppbuiltin.c
blob60c2d7f38624e67f9b3f92f6d8a30380b91142cd
1 /* Define builtin-in macros for the C family front ends.
2 Copyright (C) 2002-2015 Free Software Foundation, Inc.
4 This file is part of GCC.
6 GCC is free software; you can redistribute it and/or modify it under
7 the terms of the GNU General Public License as published by the Free
8 Software Foundation; either version 3, or (at your option) any later
9 version.
11 GCC is distributed in the hope that it will be useful, but WITHOUT ANY
12 WARRANTY; without even the implied warranty of MERCHANTABILITY or
13 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
14 for more details.
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/>. */
20 #include "config.h"
21 #include "system.h"
22 #include "coretypes.h"
23 #include "tm.h"
24 #include "hash-set.h"
25 #include "machmode.h"
26 #include "vec.h"
27 #include "double-int.h"
28 #include "input.h"
29 #include "alias.h"
30 #include "symtab.h"
31 #include "wide-int.h"
32 #include "inchash.h"
33 #include "tree.h"
34 #include "stor-layout.h"
35 #include "stringpool.h"
36 #include "version.h"
37 #include "flags.h"
38 #include "c-common.h"
39 #include "c-pragma.h"
40 #include "output.h" /* For user_label_prefix. */
41 #include "debug.h" /* For dwarf2out_do_cfi_asm. */
42 #include "tm_p.h" /* For TARGET_CPU_CPP_BUILTINS & friends. */
43 #include "target.h"
44 #include "common/common-target.h"
45 #include "cpp-id-data.h"
46 #include "cppbuiltin.h"
48 #ifndef TARGET_OS_CPP_BUILTINS
49 # define TARGET_OS_CPP_BUILTINS()
50 #endif
52 #ifndef TARGET_OBJFMT_CPP_BUILTINS
53 # define TARGET_OBJFMT_CPP_BUILTINS()
54 #endif
56 #ifndef REGISTER_PREFIX
57 #define REGISTER_PREFIX ""
58 #endif
60 /* Non-static as some targets don't use it. */
61 void builtin_define_std (const char *) ATTRIBUTE_UNUSED;
62 static void builtin_define_with_int_value (const char *, HOST_WIDE_INT);
63 static void builtin_define_with_hex_fp_value (const char *, tree,
64 int, const char *,
65 const char *,
66 const char *);
67 static void builtin_define_stdint_macros (void);
68 static void builtin_define_constants (const char *, tree);
69 static void builtin_define_type_max (const char *, tree);
70 static void builtin_define_type_minmax (const char *, const char *, tree);
71 static void builtin_define_type_sizeof (const char *, tree);
72 static void builtin_define_float_constants (const char *,
73 const char *,
74 const char *,
75 const char *,
76 tree);
78 /* Return true if MODE provides a fast multiply/add (FMA) builtin function.
79 Originally this function used the fma optab, but that doesn't work with
80 -save-temps, so just rely on the HAVE_fma macros for the standard floating
81 point types. */
83 static bool
84 mode_has_fma (machine_mode mode)
86 switch (mode)
88 #ifdef HAVE_fmasf4
89 case SFmode:
90 return !!HAVE_fmasf4;
91 #endif
93 #ifdef HAVE_fmadf4
94 case DFmode:
95 return !!HAVE_fmadf4;
96 #endif
98 #ifdef HAVE_fmaxf4
99 case XFmode:
100 return !!HAVE_fmaxf4;
101 #endif
103 #ifdef HAVE_fmatf4
104 case TFmode:
105 return !!HAVE_fmatf4;
106 #endif
108 default:
109 break;
112 return false;
115 /* Define NAME with value TYPE size_unit. */
116 static void
117 builtin_define_type_sizeof (const char *name, tree type)
119 builtin_define_with_int_value (name,
120 tree_to_uhwi (TYPE_SIZE_UNIT (type)));
123 /* Define the float.h constants for TYPE using NAME_PREFIX, FP_SUFFIX,
124 and FP_CAST. */
125 static void
126 builtin_define_float_constants (const char *name_prefix,
127 const char *fp_suffix,
128 const char *fp_cast,
129 const char *fma_suffix,
130 tree type)
132 /* Used to convert radix-based values to base 10 values in several cases.
134 In the max_exp -> max_10_exp conversion for 128-bit IEEE, we need at
135 least 6 significant digits for correct results. Using the fraction
136 formed by (log(2)*1e6)/(log(10)*1e6) overflows a 32-bit integer as an
137 intermediate; perhaps someone can find a better approximation, in the
138 mean time, I suspect using doubles won't harm the bootstrap here. */
140 const double log10_2 = .30102999566398119521;
141 double log10_b;
142 const struct real_format *fmt;
143 const struct real_format *ldfmt;
145 char name[64], buf[128];
146 int dig, min_10_exp, max_10_exp;
147 int decimal_dig;
148 int type_decimal_dig;
150 fmt = REAL_MODE_FORMAT (TYPE_MODE (type));
151 gcc_assert (fmt->b != 10);
152 ldfmt = REAL_MODE_FORMAT (TYPE_MODE (long_double_type_node));
153 gcc_assert (ldfmt->b != 10);
155 /* The radix of the exponent representation. */
156 if (type == float_type_node)
157 builtin_define_with_int_value ("__FLT_RADIX__", fmt->b);
158 log10_b = log10_2;
160 /* The number of radix digits, p, in the floating-point significand. */
161 sprintf (name, "__%s_MANT_DIG__", name_prefix);
162 builtin_define_with_int_value (name, fmt->p);
164 /* The number of decimal digits, q, such that any floating-point number
165 with q decimal digits can be rounded into a floating-point number with
166 p radix b digits and back again without change to the q decimal digits,
168 p log10 b if b is a power of 10
169 floor((p - 1) log10 b) otherwise
171 dig = (fmt->p - 1) * log10_b;
172 sprintf (name, "__%s_DIG__", name_prefix);
173 builtin_define_with_int_value (name, dig);
175 /* The minimum negative int x such that b**(x-1) is a normalized float. */
176 sprintf (name, "__%s_MIN_EXP__", name_prefix);
177 sprintf (buf, "(%d)", fmt->emin);
178 builtin_define_with_value (name, buf, 0);
180 /* The minimum negative int x such that 10**x is a normalized float,
182 ceil (log10 (b ** (emin - 1)))
183 = ceil (log10 (b) * (emin - 1))
185 Recall that emin is negative, so the integer truncation calculates
186 the ceiling, not the floor, in this case. */
187 min_10_exp = (fmt->emin - 1) * log10_b;
188 sprintf (name, "__%s_MIN_10_EXP__", name_prefix);
189 sprintf (buf, "(%d)", min_10_exp);
190 builtin_define_with_value (name, buf, 0);
192 /* The maximum int x such that b**(x-1) is a representable float. */
193 sprintf (name, "__%s_MAX_EXP__", name_prefix);
194 builtin_define_with_int_value (name, fmt->emax);
196 /* The maximum int x such that 10**x is in the range of representable
197 finite floating-point numbers,
199 floor (log10((1 - b**-p) * b**emax))
200 = floor (log10(1 - b**-p) + log10(b**emax))
201 = floor (log10(1 - b**-p) + log10(b)*emax)
203 The safest thing to do here is to just compute this number. But since
204 we don't link cc1 with libm, we cannot. We could implement log10 here
205 a series expansion, but that seems too much effort because:
207 Note that the first term, for all extant p, is a number exceedingly close
208 to zero, but slightly negative. Note that the second term is an integer
209 scaling an irrational number, and that because of the floor we are only
210 interested in its integral portion.
212 In order for the first term to have any effect on the integral portion
213 of the second term, the second term has to be exceedingly close to an
214 integer itself (e.g. 123.000000000001 or something). Getting a result
215 that close to an integer requires that the irrational multiplicand have
216 a long series of zeros in its expansion, which doesn't occur in the
217 first 20 digits or so of log10(b).
219 Hand-waving aside, crunching all of the sets of constants above by hand
220 does not yield a case for which the first term is significant, which
221 in the end is all that matters. */
222 max_10_exp = fmt->emax * log10_b;
223 sprintf (name, "__%s_MAX_10_EXP__", name_prefix);
224 builtin_define_with_int_value (name, max_10_exp);
226 /* The number of decimal digits, n, such that any floating-point number
227 can be rounded to n decimal digits and back again without change to
228 the value.
230 p * log10(b) if b is a power of 10
231 ceil(1 + p * log10(b)) otherwise
233 The only macro we care about is this number for the widest supported
234 floating type, but we want this value for rendering constants below. */
236 double d_decimal_dig
237 = 1 + (fmt->p < ldfmt->p ? ldfmt->p : fmt->p) * log10_b;
238 decimal_dig = d_decimal_dig;
239 if (decimal_dig < d_decimal_dig)
240 decimal_dig++;
242 /* Similar, for this type rather than long double. */
244 double type_d_decimal_dig = 1 + fmt->p * log10_b;
245 type_decimal_dig = type_d_decimal_dig;
246 if (type_decimal_dig < type_d_decimal_dig)
247 type_decimal_dig++;
249 if (type == long_double_type_node)
250 builtin_define_with_int_value ("__DECIMAL_DIG__", decimal_dig);
251 else
253 sprintf (name, "__%s_DECIMAL_DIG__", name_prefix);
254 builtin_define_with_int_value (name, type_decimal_dig);
257 /* Since, for the supported formats, B is always a power of 2, we
258 construct the following numbers directly as a hexadecimal
259 constants. */
260 get_max_float (fmt, buf, sizeof (buf));
262 sprintf (name, "__%s_MAX__", name_prefix);
263 builtin_define_with_hex_fp_value (name, type, decimal_dig, buf, fp_suffix, fp_cast);
265 /* The minimum normalized positive floating-point number,
266 b**(emin-1). */
267 sprintf (name, "__%s_MIN__", name_prefix);
268 sprintf (buf, "0x1p%d", fmt->emin - 1);
269 builtin_define_with_hex_fp_value (name, type, decimal_dig, buf, fp_suffix, fp_cast);
271 /* The difference between 1 and the least value greater than 1 that is
272 representable in the given floating point type, b**(1-p). */
273 sprintf (name, "__%s_EPSILON__", name_prefix);
274 if (fmt->pnan < fmt->p)
275 /* This is an IBM extended double format, so 1.0 + any double is
276 representable precisely. */
277 sprintf (buf, "0x1p%d", fmt->emin - fmt->p);
278 else
279 sprintf (buf, "0x1p%d", 1 - fmt->p);
280 builtin_define_with_hex_fp_value (name, type, decimal_dig, buf, fp_suffix, fp_cast);
282 /* For C++ std::numeric_limits<T>::denorm_min and C11 *_TRUE_MIN.
283 The minimum denormalized positive floating-point number, b**(emin-p).
284 The minimum normalized positive floating-point number for formats
285 that don't support denormals. */
286 sprintf (name, "__%s_DENORM_MIN__", name_prefix);
287 sprintf (buf, "0x1p%d", fmt->emin - (fmt->has_denorm ? fmt->p : 1));
288 builtin_define_with_hex_fp_value (name, type, decimal_dig,
289 buf, fp_suffix, fp_cast);
291 sprintf (name, "__%s_HAS_DENORM__", name_prefix);
292 builtin_define_with_value (name, fmt->has_denorm ? "1" : "0", 0);
294 /* For C++ std::numeric_limits<T>::has_infinity. */
295 sprintf (name, "__%s_HAS_INFINITY__", name_prefix);
296 builtin_define_with_int_value (name,
297 MODE_HAS_INFINITIES (TYPE_MODE (type)));
298 /* For C++ std::numeric_limits<T>::has_quiet_NaN. We do not have a
299 predicate to distinguish a target that has both quiet and
300 signalling NaNs from a target that has only quiet NaNs or only
301 signalling NaNs, so we assume that a target that has any kind of
302 NaN has quiet NaNs. */
303 sprintf (name, "__%s_HAS_QUIET_NAN__", name_prefix);
304 builtin_define_with_int_value (name, MODE_HAS_NANS (TYPE_MODE (type)));
306 /* Note whether we have fast FMA. */
307 if (mode_has_fma (TYPE_MODE (type)))
309 sprintf (name, "__FP_FAST_FMA%s", fma_suffix);
310 builtin_define_with_int_value (name, 1);
314 /* Define __DECx__ constants for TYPE using NAME_PREFIX and SUFFIX. */
315 static void
316 builtin_define_decimal_float_constants (const char *name_prefix,
317 const char *suffix,
318 tree type)
320 const struct real_format *fmt;
321 char name[64], buf[128], *p;
322 int digits;
324 fmt = REAL_MODE_FORMAT (TYPE_MODE (type));
326 /* The number of radix digits, p, in the significand. */
327 sprintf (name, "__%s_MANT_DIG__", name_prefix);
328 builtin_define_with_int_value (name, fmt->p);
330 /* The minimum negative int x such that b**(x-1) is a normalized float. */
331 sprintf (name, "__%s_MIN_EXP__", name_prefix);
332 sprintf (buf, "(%d)", fmt->emin);
333 builtin_define_with_value (name, buf, 0);
335 /* The maximum int x such that b**(x-1) is a representable float. */
336 sprintf (name, "__%s_MAX_EXP__", name_prefix);
337 builtin_define_with_int_value (name, fmt->emax);
339 /* Compute the minimum representable value. */
340 sprintf (name, "__%s_MIN__", name_prefix);
341 sprintf (buf, "1E%d%s", fmt->emin - 1, suffix);
342 builtin_define_with_value (name, buf, 0);
344 /* Compute the maximum representable value. */
345 sprintf (name, "__%s_MAX__", name_prefix);
346 p = buf;
347 for (digits = fmt->p; digits; digits--)
349 *p++ = '9';
350 if (digits == fmt->p)
351 *p++ = '.';
353 *p = 0;
354 /* fmt->p plus 1, to account for the decimal point and fmt->emax
355 minus 1 because the digits are nines, not 1.0. */
356 sprintf (&buf[fmt->p + 1], "E%d%s", fmt->emax - 1, suffix);
357 builtin_define_with_value (name, buf, 0);
359 /* Compute epsilon (the difference between 1 and least value greater
360 than 1 representable). */
361 sprintf (name, "__%s_EPSILON__", name_prefix);
362 sprintf (buf, "1E-%d%s", fmt->p - 1, suffix);
363 builtin_define_with_value (name, buf, 0);
365 /* Minimum subnormal positive decimal value. */
366 sprintf (name, "__%s_SUBNORMAL_MIN__", name_prefix);
367 p = buf;
368 for (digits = fmt->p; digits > 1; digits--)
370 *p++ = '0';
371 if (digits == fmt->p)
372 *p++ = '.';
374 *p = 0;
375 sprintf (&buf[fmt->p], "1E%d%s", fmt->emin - 1, suffix);
376 builtin_define_with_value (name, buf, 0);
379 /* Define fixed-point constants for TYPE using NAME_PREFIX and SUFFIX. */
381 static void
382 builtin_define_fixed_point_constants (const char *name_prefix,
383 const char *suffix,
384 tree type)
386 char name[64], buf[256], *new_buf;
387 int i, mod;
389 sprintf (name, "__%s_FBIT__", name_prefix);
390 builtin_define_with_int_value (name, TYPE_FBIT (type));
392 sprintf (name, "__%s_IBIT__", name_prefix);
393 builtin_define_with_int_value (name, TYPE_IBIT (type));
395 /* If there is no suffix, defines are for fixed-point modes.
396 We just return. */
397 if (strcmp (suffix, "") == 0)
398 return;
400 if (TYPE_UNSIGNED (type))
402 sprintf (name, "__%s_MIN__", name_prefix);
403 sprintf (buf, "0.0%s", suffix);
404 builtin_define_with_value (name, buf, 0);
406 else
408 sprintf (name, "__%s_MIN__", name_prefix);
409 if (ALL_ACCUM_MODE_P (TYPE_MODE (type)))
410 sprintf (buf, "(-0X1P%d%s-0X1P%d%s)", TYPE_IBIT (type) - 1, suffix,
411 TYPE_IBIT (type) - 1, suffix);
412 else
413 sprintf (buf, "(-0.5%s-0.5%s)", suffix, suffix);
414 builtin_define_with_value (name, buf, 0);
417 sprintf (name, "__%s_MAX__", name_prefix);
418 sprintf (buf, "0X");
419 new_buf = buf + 2;
420 mod = (TYPE_FBIT (type) + TYPE_IBIT (type)) % 4;
421 if (mod)
422 sprintf (new_buf++, "%x", (1 << mod) - 1);
423 for (i = 0; i < (TYPE_FBIT (type) + TYPE_IBIT (type)) / 4; i++)
424 sprintf (new_buf++, "F");
425 sprintf (new_buf, "P-%d%s", TYPE_FBIT (type), suffix);
426 builtin_define_with_value (name, buf, 0);
428 sprintf (name, "__%s_EPSILON__", name_prefix);
429 sprintf (buf, "0x1P-%d%s", TYPE_FBIT (type), suffix);
430 builtin_define_with_value (name, buf, 0);
433 /* Define macros used by <stdint.h>. */
434 static void
435 builtin_define_stdint_macros (void)
437 builtin_define_type_max ("__INTMAX_MAX__", intmax_type_node);
438 builtin_define_constants ("__INTMAX_C", intmax_type_node);
439 builtin_define_type_max ("__UINTMAX_MAX__", uintmax_type_node);
440 builtin_define_constants ("__UINTMAX_C", uintmax_type_node);
441 if (sig_atomic_type_node)
442 builtin_define_type_minmax ("__SIG_ATOMIC_MIN__", "__SIG_ATOMIC_MAX__",
443 sig_atomic_type_node);
444 if (int8_type_node)
445 builtin_define_type_max ("__INT8_MAX__", int8_type_node);
446 if (int16_type_node)
447 builtin_define_type_max ("__INT16_MAX__", int16_type_node);
448 if (int32_type_node)
449 builtin_define_type_max ("__INT32_MAX__", int32_type_node);
450 if (int64_type_node)
451 builtin_define_type_max ("__INT64_MAX__", int64_type_node);
452 if (uint8_type_node)
453 builtin_define_type_max ("__UINT8_MAX__", uint8_type_node);
454 if (c_uint16_type_node)
455 builtin_define_type_max ("__UINT16_MAX__", c_uint16_type_node);
456 if (c_uint32_type_node)
457 builtin_define_type_max ("__UINT32_MAX__", c_uint32_type_node);
458 if (c_uint64_type_node)
459 builtin_define_type_max ("__UINT64_MAX__", c_uint64_type_node);
460 if (int_least8_type_node)
462 builtin_define_type_max ("__INT_LEAST8_MAX__", int_least8_type_node);
463 builtin_define_constants ("__INT8_C", int_least8_type_node);
465 if (int_least16_type_node)
467 builtin_define_type_max ("__INT_LEAST16_MAX__", int_least16_type_node);
468 builtin_define_constants ("__INT16_C", int_least16_type_node);
470 if (int_least32_type_node)
472 builtin_define_type_max ("__INT_LEAST32_MAX__", int_least32_type_node);
473 builtin_define_constants ("__INT32_C", int_least32_type_node);
475 if (int_least64_type_node)
477 builtin_define_type_max ("__INT_LEAST64_MAX__", int_least64_type_node);
478 builtin_define_constants ("__INT64_C", int_least64_type_node);
480 if (uint_least8_type_node)
482 builtin_define_type_max ("__UINT_LEAST8_MAX__", uint_least8_type_node);
483 builtin_define_constants ("__UINT8_C", uint_least8_type_node);
485 if (uint_least16_type_node)
487 builtin_define_type_max ("__UINT_LEAST16_MAX__", uint_least16_type_node);
488 builtin_define_constants ("__UINT16_C", uint_least16_type_node);
490 if (uint_least32_type_node)
492 builtin_define_type_max ("__UINT_LEAST32_MAX__", uint_least32_type_node);
493 builtin_define_constants ("__UINT32_C", uint_least32_type_node);
495 if (uint_least64_type_node)
497 builtin_define_type_max ("__UINT_LEAST64_MAX__", uint_least64_type_node);
498 builtin_define_constants ("__UINT64_C", uint_least64_type_node);
500 if (int_fast8_type_node)
501 builtin_define_type_max ("__INT_FAST8_MAX__", int_fast8_type_node);
502 if (int_fast16_type_node)
503 builtin_define_type_max ("__INT_FAST16_MAX__", int_fast16_type_node);
504 if (int_fast32_type_node)
505 builtin_define_type_max ("__INT_FAST32_MAX__", int_fast32_type_node);
506 if (int_fast64_type_node)
507 builtin_define_type_max ("__INT_FAST64_MAX__", int_fast64_type_node);
508 if (uint_fast8_type_node)
509 builtin_define_type_max ("__UINT_FAST8_MAX__", uint_fast8_type_node);
510 if (uint_fast16_type_node)
511 builtin_define_type_max ("__UINT_FAST16_MAX__", uint_fast16_type_node);
512 if (uint_fast32_type_node)
513 builtin_define_type_max ("__UINT_FAST32_MAX__", uint_fast32_type_node);
514 if (uint_fast64_type_node)
515 builtin_define_type_max ("__UINT_FAST64_MAX__", uint_fast64_type_node);
516 if (intptr_type_node)
517 builtin_define_type_max ("__INTPTR_MAX__", intptr_type_node);
518 if (uintptr_type_node)
519 builtin_define_type_max ("__UINTPTR_MAX__", uintptr_type_node);
522 /* Adjust the optimization macros when a #pragma GCC optimization is done to
523 reflect the current level. */
524 void
525 c_cpp_builtins_optimize_pragma (cpp_reader *pfile, tree prev_tree,
526 tree cur_tree)
528 struct cl_optimization *prev = TREE_OPTIMIZATION (prev_tree);
529 struct cl_optimization *cur = TREE_OPTIMIZATION (cur_tree);
530 bool prev_fast_math;
531 bool cur_fast_math;
533 /* -undef turns off target-specific built-ins. */
534 if (flag_undef)
535 return;
537 /* Other target-independent built-ins determined by command-line
538 options. */
539 if (!prev->x_optimize_size && cur->x_optimize_size)
540 cpp_define (pfile, "__OPTIMIZE_SIZE__");
541 else if (prev->x_optimize_size && !cur->x_optimize_size)
542 cpp_undef (pfile, "__OPTIMIZE_SIZE__");
544 if (!prev->x_optimize && cur->x_optimize)
545 cpp_define (pfile, "__OPTIMIZE__");
546 else if (prev->x_optimize && !cur->x_optimize)
547 cpp_undef (pfile, "__OPTIMIZE__");
549 prev_fast_math = fast_math_flags_struct_set_p (prev);
550 cur_fast_math = fast_math_flags_struct_set_p (cur);
551 if (!prev_fast_math && cur_fast_math)
552 cpp_define (pfile, "__FAST_MATH__");
553 else if (prev_fast_math && !cur_fast_math)
554 cpp_undef (pfile, "__FAST_MATH__");
556 if (!prev->x_flag_signaling_nans && cur->x_flag_signaling_nans)
557 cpp_define (pfile, "__SUPPORT_SNAN__");
558 else if (prev->x_flag_signaling_nans && !cur->x_flag_signaling_nans)
559 cpp_undef (pfile, "__SUPPORT_SNAN__");
561 if (!prev->x_flag_errno_math && cur->x_flag_errno_math)
562 cpp_undef (pfile, "__NO_MATH_ERRNO__");
563 else if (prev->x_flag_errno_math && !cur->x_flag_errno_math)
564 cpp_define (pfile, "__NO_MATH_ERRNO__");
566 if (!prev->x_flag_finite_math_only && cur->x_flag_finite_math_only)
568 cpp_undef (pfile, "__FINITE_MATH_ONLY__");
569 cpp_define (pfile, "__FINITE_MATH_ONLY__=1");
571 else if (prev->x_flag_finite_math_only && !cur->x_flag_finite_math_only)
573 cpp_undef (pfile, "__FINITE_MATH_ONLY__");
574 cpp_define (pfile, "__FINITE_MATH_ONLY__=0");
579 /* This function will emit cpp macros to indicate the presence of various lock
580 free atomic operations. */
582 static void
583 cpp_atomic_builtins (cpp_reader *pfile)
585 /* Set a flag for each size of object that compare and swap exists for up to
586 a 16 byte object. */
587 #define SWAP_LIMIT 17
588 bool have_swap[SWAP_LIMIT];
589 unsigned int psize;
591 /* Clear the map of sizes compare_and swap exists for. */
592 memset (have_swap, 0, sizeof (have_swap));
594 /* Tell source code if the compiler makes sync_compare_and_swap
595 builtins available. */
596 #ifndef HAVE_sync_compare_and_swapqi
597 #define HAVE_sync_compare_and_swapqi 0
598 #endif
599 #ifndef HAVE_atomic_compare_and_swapqi
600 #define HAVE_atomic_compare_and_swapqi 0
601 #endif
603 if (HAVE_sync_compare_and_swapqi || HAVE_atomic_compare_and_swapqi)
605 cpp_define (pfile, "__GCC_HAVE_SYNC_COMPARE_AND_SWAP_1");
606 have_swap[1] = true;
609 #ifndef HAVE_sync_compare_and_swaphi
610 #define HAVE_sync_compare_and_swaphi 0
611 #endif
612 #ifndef HAVE_atomic_compare_and_swaphi
613 #define HAVE_atomic_compare_and_swaphi 0
614 #endif
615 if (HAVE_sync_compare_and_swaphi || HAVE_atomic_compare_and_swaphi)
617 cpp_define (pfile, "__GCC_HAVE_SYNC_COMPARE_AND_SWAP_2");
618 have_swap[2] = true;
621 #ifndef HAVE_sync_compare_and_swapsi
622 #define HAVE_sync_compare_and_swapsi 0
623 #endif
624 #ifndef HAVE_atomic_compare_and_swapsi
625 #define HAVE_atomic_compare_and_swapsi 0
626 #endif
627 if (HAVE_sync_compare_and_swapsi || HAVE_atomic_compare_and_swapsi)
629 cpp_define (pfile, "__GCC_HAVE_SYNC_COMPARE_AND_SWAP_4");
630 have_swap[4] = true;
633 #ifndef HAVE_sync_compare_and_swapdi
634 #define HAVE_sync_compare_and_swapdi 0
635 #endif
636 #ifndef HAVE_atomic_compare_and_swapdi
637 #define HAVE_atomic_compare_and_swapdi 0
638 #endif
639 if (HAVE_sync_compare_and_swapdi || HAVE_atomic_compare_and_swapdi)
641 cpp_define (pfile, "__GCC_HAVE_SYNC_COMPARE_AND_SWAP_8");
642 have_swap[8] = true;
645 #ifndef HAVE_sync_compare_and_swapti
646 #define HAVE_sync_compare_and_swapti 0
647 #endif
648 #ifndef HAVE_atomic_compare_and_swapti
649 #define HAVE_atomic_compare_and_swapti 0
650 #endif
651 if (HAVE_sync_compare_and_swapti || HAVE_atomic_compare_and_swapti)
653 cpp_define (pfile, "__GCC_HAVE_SYNC_COMPARE_AND_SWAP_16");
654 have_swap[16] = true;
657 /* Tell the source code about various types. These map to the C++11 and C11
658 macros where 2 indicates lock-free always, and 1 indicates sometimes
659 lock free. */
660 #define SIZEOF_NODE(T) (tree_to_uhwi (TYPE_SIZE_UNIT (T)))
661 #define SWAP_INDEX(T) ((SIZEOF_NODE (T) < SWAP_LIMIT) ? SIZEOF_NODE (T) : 0)
662 builtin_define_with_int_value ("__GCC_ATOMIC_BOOL_LOCK_FREE",
663 (have_swap[SWAP_INDEX (boolean_type_node)]? 2 : 1));
664 builtin_define_with_int_value ("__GCC_ATOMIC_CHAR_LOCK_FREE",
665 (have_swap[SWAP_INDEX (signed_char_type_node)]? 2 : 1));
666 builtin_define_with_int_value ("__GCC_ATOMIC_CHAR16_T_LOCK_FREE",
667 (have_swap[SWAP_INDEX (char16_type_node)]? 2 : 1));
668 builtin_define_with_int_value ("__GCC_ATOMIC_CHAR32_T_LOCK_FREE",
669 (have_swap[SWAP_INDEX (char32_type_node)]? 2 : 1));
670 builtin_define_with_int_value ("__GCC_ATOMIC_WCHAR_T_LOCK_FREE",
671 (have_swap[SWAP_INDEX (wchar_type_node)]? 2 : 1));
672 builtin_define_with_int_value ("__GCC_ATOMIC_SHORT_LOCK_FREE",
673 (have_swap[SWAP_INDEX (short_integer_type_node)]? 2 : 1));
674 builtin_define_with_int_value ("__GCC_ATOMIC_INT_LOCK_FREE",
675 (have_swap[SWAP_INDEX (integer_type_node)]? 2 : 1));
676 builtin_define_with_int_value ("__GCC_ATOMIC_LONG_LOCK_FREE",
677 (have_swap[SWAP_INDEX (long_integer_type_node)]? 2 : 1));
678 builtin_define_with_int_value ("__GCC_ATOMIC_LLONG_LOCK_FREE",
679 (have_swap[SWAP_INDEX (long_long_integer_type_node)]? 2 : 1));
681 /* If we're dealing with a "set" value that doesn't exactly correspond
682 to a boolean truth value, let the library work around that. */
683 builtin_define_with_int_value ("__GCC_ATOMIC_TEST_AND_SET_TRUEVAL",
684 targetm.atomic_test_and_set_trueval);
686 /* ptr_type_node can't be used here since ptr_mode is only set when
687 toplev calls backend_init which is not done with -E or pch. */
688 psize = POINTER_SIZE_UNITS;
689 if (psize >= SWAP_LIMIT)
690 psize = 0;
691 builtin_define_with_int_value ("__GCC_ATOMIC_POINTER_LOCK_FREE",
692 (have_swap[psize]? 2 : 1));
695 /* Return the value for __GCC_IEC_559. */
696 static int
697 cpp_iec_559_value (void)
699 /* The default is support for IEEE 754-2008. */
700 int ret = 2;
702 /* float and double must be binary32 and binary64. If they are but
703 with reversed NaN convention, at most IEEE 754-1985 is
704 supported. */
705 const struct real_format *ffmt
706 = REAL_MODE_FORMAT (TYPE_MODE (float_type_node));
707 const struct real_format *dfmt
708 = REAL_MODE_FORMAT (TYPE_MODE (double_type_node));
709 if (!ffmt->qnan_msb_set || !dfmt->qnan_msb_set)
710 ret = 1;
711 if (ffmt->b != 2
712 || ffmt->p != 24
713 || ffmt->pnan != 24
714 || ffmt->emin != -125
715 || ffmt->emax != 128
716 || ffmt->signbit_rw != 31
717 || ffmt->round_towards_zero
718 || !ffmt->has_sign_dependent_rounding
719 || !ffmt->has_nans
720 || !ffmt->has_inf
721 || !ffmt->has_denorm
722 || !ffmt->has_signed_zero
723 || dfmt->b != 2
724 || dfmt->p != 53
725 || dfmt->pnan != 53
726 || dfmt->emin != -1021
727 || dfmt->emax != 1024
728 || dfmt->signbit_rw != 63
729 || dfmt->round_towards_zero
730 || !dfmt->has_sign_dependent_rounding
731 || !dfmt->has_nans
732 || !dfmt->has_inf
733 || !dfmt->has_denorm
734 || !dfmt->has_signed_zero)
735 ret = 0;
737 /* In strict C standards conformance mode, consider unpredictable
738 excess precision to mean lack of IEEE 754 support. The same
739 applies to unpredictable contraction. For C++, and outside
740 strict conformance mode, do not consider these options to mean
741 lack of IEEE 754 support. */
742 if (flag_iso
743 && !c_dialect_cxx ()
744 && TARGET_FLT_EVAL_METHOD != 0
745 && flag_excess_precision_cmdline != EXCESS_PRECISION_STANDARD)
746 ret = 0;
747 if (flag_iso
748 && !c_dialect_cxx ()
749 && flag_fp_contract_mode == FP_CONTRACT_FAST)
750 ret = 0;
752 /* Various options are contrary to IEEE 754 semantics. */
753 if (flag_unsafe_math_optimizations
754 || flag_associative_math
755 || flag_reciprocal_math
756 || flag_finite_math_only
757 || !flag_signed_zeros
758 || flag_single_precision_constant)
759 ret = 0;
761 /* If the target does not support IEEE 754 exceptions and rounding
762 modes, consider IEEE 754 support to be absent. */
763 if (!targetm.float_exceptions_rounding_supported_p ())
764 ret = 0;
766 return ret;
769 /* Return the value for __GCC_IEC_559_COMPLEX. */
770 static int
771 cpp_iec_559_complex_value (void)
773 /* The value is no bigger than that of __GCC_IEC_559. */
774 int ret = cpp_iec_559_value ();
776 /* Some options are contrary to the required default state of the
777 CX_LIMITED_RANGE pragma. */
778 if (flag_complex_method != 2)
779 ret = 0;
781 return ret;
784 /* Hook that registers front end and target-specific built-ins. */
785 void
786 c_cpp_builtins (cpp_reader *pfile)
788 int i;
790 /* -undef turns off target-specific built-ins. */
791 if (flag_undef)
792 return;
794 define_language_independent_builtin_macros (pfile);
796 if (c_dialect_cxx ())
798 int major;
799 parse_basever (&major, NULL, NULL);
800 cpp_define_formatted (pfile, "__GNUG__=%d", major);
803 /* For stddef.h. They require macros defined in c-common.c. */
804 c_stddef_cpp_builtins ();
806 /* Set include test macros for all C/C++ (not for just C++11 etc.)
807 The builtins __has_include__ and __has_include_next__ are defined
808 in libcpp. */
809 cpp_define (pfile, "__has_include(STR)=__has_include__(STR)");
810 cpp_define (pfile, "__has_include_next(STR)=__has_include_next__(STR)");
812 if (c_dialect_cxx ())
814 if (flag_weak && SUPPORTS_ONE_ONLY)
815 cpp_define (pfile, "__GXX_WEAK__=1");
816 else
817 cpp_define (pfile, "__GXX_WEAK__=0");
819 if (warn_deprecated)
820 cpp_define (pfile, "__DEPRECATED");
822 if (flag_rtti)
824 cpp_define (pfile, "__GXX_RTTI");
825 cpp_define (pfile, "__cpp_rtti=199711");
828 if (cxx_dialect >= cxx11)
829 cpp_define (pfile, "__GXX_EXPERIMENTAL_CXX0X__");
831 /* Binary literals have been allowed in g++ before C++11
832 and were standardized for C++14. */
833 if (!pedantic || cxx_dialect > cxx11)
834 cpp_define (pfile, "__cpp_binary_literals=201304");
836 /* Arrays of runtime bound were removed from C++14, but we still
837 support GNU VLAs. Let's define this macro to a low number
838 (corresponding to the initial test release of GNU C++) if we won't
839 complain about use of VLAs. */
840 if (c_dialect_cxx ()
841 && (pedantic ? warn_vla == 0 : warn_vla <= 0))
842 cpp_define (pfile, "__cpp_runtime_arrays=198712");
844 if (cxx_dialect >= cxx11)
846 /* Set feature test macros for C++11 */
847 cpp_define (pfile, "__cpp_unicode_characters=200704");
848 cpp_define (pfile, "__cpp_raw_strings=200710");
849 cpp_define (pfile, "__cpp_unicode_literals=200710");
850 cpp_define (pfile, "__cpp_user_defined_literals=200809");
851 cpp_define (pfile, "__cpp_lambdas=200907");
852 if (cxx_dialect == cxx11)
853 cpp_define (pfile, "__cpp_constexpr=200704");
854 cpp_define (pfile, "__cpp_range_based_for=200907");
855 cpp_define (pfile, "__cpp_static_assert=200410");
856 cpp_define (pfile, "__cpp_decltype=200707");
857 cpp_define (pfile, "__cpp_attributes=200809");
858 cpp_define (pfile, "__cpp_rvalue_reference=200610");
859 cpp_define (pfile, "__cpp_variadic_templates=200704");
860 cpp_define (pfile, "__cpp_initializer_lists=200806");
861 cpp_define (pfile, "__cpp_delegating_constructors=200604");
862 cpp_define (pfile, "__cpp_nsdmi=200809");
863 cpp_define (pfile, "__cpp_inheriting_constructors=200802");
864 cpp_define (pfile, "__cpp_ref_qualifiers=200710");
865 cpp_define (pfile, "__cpp_alias_templates=200704");
867 if (cxx_dialect > cxx11)
869 /* Set feature test macros for C++14 */
870 cpp_define (pfile, "__cpp_return_type_deduction=201304");
871 cpp_define (pfile, "__cpp_init_captures=201304");
872 cpp_define (pfile, "__cpp_generic_lambdas=201304");
873 cpp_define (pfile, "__cpp_constexpr=201304");
874 cpp_define (pfile, "__cpp_decltype_auto=201304");
875 cpp_define (pfile, "__cpp_aggregate_nsdmi=201304");
876 cpp_define (pfile, "__cpp_variable_templates=201304");
877 cpp_define (pfile, "__cpp_digit_separators=201309");
879 if (flag_sized_deallocation)
880 cpp_define (pfile, "__cpp_sized_deallocation=201309");
882 /* Note that we define this for C as well, so that we know if
883 __attribute__((cleanup)) will interface with EH. */
884 if (flag_exceptions)
886 cpp_define (pfile, "__EXCEPTIONS");
887 if (c_dialect_cxx ())
888 cpp_define (pfile, "__cpp_exceptions=199711");
891 /* Represents the C++ ABI version, always defined so it can be used while
892 preprocessing C and assembler. */
893 if (flag_abi_version == 0)
894 /* We should have set this to something real in c_common_post_options. */
895 gcc_unreachable ();
896 else if (flag_abi_version == 1)
897 /* Due to a historical accident, this version had the value
898 "102". */
899 builtin_define_with_int_value ("__GXX_ABI_VERSION", 102);
900 else
901 /* Newer versions have values 1002, 1003, .... */
902 builtin_define_with_int_value ("__GXX_ABI_VERSION",
903 1000 + flag_abi_version);
905 /* libgcc needs to know this. */
906 if (targetm_common.except_unwind_info (&global_options) == UI_SJLJ)
907 cpp_define (pfile, "__USING_SJLJ_EXCEPTIONS__");
909 /* limits.h and stdint.h need to know these. */
910 builtin_define_type_max ("__SCHAR_MAX__", signed_char_type_node);
911 builtin_define_type_max ("__SHRT_MAX__", short_integer_type_node);
912 builtin_define_type_max ("__INT_MAX__", integer_type_node);
913 builtin_define_type_max ("__LONG_MAX__", long_integer_type_node);
914 builtin_define_type_max ("__LONG_LONG_MAX__", long_long_integer_type_node);
915 builtin_define_type_minmax ("__WCHAR_MIN__", "__WCHAR_MAX__",
916 underlying_wchar_type_node);
917 builtin_define_type_minmax ("__WINT_MIN__", "__WINT_MAX__", wint_type_node);
918 builtin_define_type_max ("__PTRDIFF_MAX__", ptrdiff_type_node);
919 builtin_define_type_max ("__SIZE_MAX__", size_type_node);
921 if (c_dialect_cxx ())
922 for (i = 0; i < NUM_INT_N_ENTS; i ++)
923 if (int_n_enabled_p[i])
925 char buf[35+20+20];
927 /* These are used to configure the C++ library. */
929 if (!flag_iso || int_n_data[i].bitsize == POINTER_SIZE)
931 sprintf (buf, "__GLIBCXX_TYPE_INT_N_%d=__int%d", i, int_n_data[i].bitsize);
932 cpp_define (parse_in, buf);
934 sprintf (buf, "__GLIBCXX_BITSIZE_INT_N_%d=%d", i, int_n_data[i].bitsize);
935 cpp_define (parse_in, buf);
939 /* stdint.h and the testsuite need to know these. */
940 builtin_define_stdint_macros ();
942 /* Provide information for library headers to determine whether to
943 define macros such as __STDC_IEC_559__ and
944 __STDC_IEC_559_COMPLEX__. */
945 builtin_define_with_int_value ("__GCC_IEC_559", cpp_iec_559_value ());
946 builtin_define_with_int_value ("__GCC_IEC_559_COMPLEX",
947 cpp_iec_559_complex_value ());
949 /* float.h needs to know this. */
950 builtin_define_with_int_value ("__FLT_EVAL_METHOD__",
951 TARGET_FLT_EVAL_METHOD);
953 /* And decfloat.h needs this. */
954 builtin_define_with_int_value ("__DEC_EVAL_METHOD__",
955 TARGET_DEC_EVAL_METHOD);
957 builtin_define_float_constants ("FLT", "F", "%s", "F", float_type_node);
958 /* Cast the double precision constants. This is needed when single
959 precision constants are specified or when pragma FLOAT_CONST_DECIMAL64
960 is used. The correct result is computed by the compiler when using
961 macros that include a cast. We use a different cast for C++ to avoid
962 problems with -Wold-style-cast. */
963 builtin_define_float_constants ("DBL", "L",
964 (c_dialect_cxx ()
965 ? "double(%s)"
966 : "((double)%s)"),
967 "", double_type_node);
968 builtin_define_float_constants ("LDBL", "L", "%s", "L",
969 long_double_type_node);
971 /* For decfloat.h. */
972 builtin_define_decimal_float_constants ("DEC32", "DF", dfloat32_type_node);
973 builtin_define_decimal_float_constants ("DEC64", "DD", dfloat64_type_node);
974 builtin_define_decimal_float_constants ("DEC128", "DL", dfloat128_type_node);
976 /* For fixed-point fibt, ibit, max, min, and epsilon. */
977 if (targetm.fixed_point_supported_p ())
979 builtin_define_fixed_point_constants ("SFRACT", "HR",
980 short_fract_type_node);
981 builtin_define_fixed_point_constants ("USFRACT", "UHR",
982 unsigned_short_fract_type_node);
983 builtin_define_fixed_point_constants ("FRACT", "R",
984 fract_type_node);
985 builtin_define_fixed_point_constants ("UFRACT", "UR",
986 unsigned_fract_type_node);
987 builtin_define_fixed_point_constants ("LFRACT", "LR",
988 long_fract_type_node);
989 builtin_define_fixed_point_constants ("ULFRACT", "ULR",
990 unsigned_long_fract_type_node);
991 builtin_define_fixed_point_constants ("LLFRACT", "LLR",
992 long_long_fract_type_node);
993 builtin_define_fixed_point_constants ("ULLFRACT", "ULLR",
994 unsigned_long_long_fract_type_node);
995 builtin_define_fixed_point_constants ("SACCUM", "HK",
996 short_accum_type_node);
997 builtin_define_fixed_point_constants ("USACCUM", "UHK",
998 unsigned_short_accum_type_node);
999 builtin_define_fixed_point_constants ("ACCUM", "K",
1000 accum_type_node);
1001 builtin_define_fixed_point_constants ("UACCUM", "UK",
1002 unsigned_accum_type_node);
1003 builtin_define_fixed_point_constants ("LACCUM", "LK",
1004 long_accum_type_node);
1005 builtin_define_fixed_point_constants ("ULACCUM", "ULK",
1006 unsigned_long_accum_type_node);
1007 builtin_define_fixed_point_constants ("LLACCUM", "LLK",
1008 long_long_accum_type_node);
1009 builtin_define_fixed_point_constants ("ULLACCUM", "ULLK",
1010 unsigned_long_long_accum_type_node);
1012 builtin_define_fixed_point_constants ("QQ", "", qq_type_node);
1013 builtin_define_fixed_point_constants ("HQ", "", hq_type_node);
1014 builtin_define_fixed_point_constants ("SQ", "", sq_type_node);
1015 builtin_define_fixed_point_constants ("DQ", "", dq_type_node);
1016 builtin_define_fixed_point_constants ("TQ", "", tq_type_node);
1017 builtin_define_fixed_point_constants ("UQQ", "", uqq_type_node);
1018 builtin_define_fixed_point_constants ("UHQ", "", uhq_type_node);
1019 builtin_define_fixed_point_constants ("USQ", "", usq_type_node);
1020 builtin_define_fixed_point_constants ("UDQ", "", udq_type_node);
1021 builtin_define_fixed_point_constants ("UTQ", "", utq_type_node);
1022 builtin_define_fixed_point_constants ("HA", "", ha_type_node);
1023 builtin_define_fixed_point_constants ("SA", "", sa_type_node);
1024 builtin_define_fixed_point_constants ("DA", "", da_type_node);
1025 builtin_define_fixed_point_constants ("TA", "", ta_type_node);
1026 builtin_define_fixed_point_constants ("UHA", "", uha_type_node);
1027 builtin_define_fixed_point_constants ("USA", "", usa_type_node);
1028 builtin_define_fixed_point_constants ("UDA", "", uda_type_node);
1029 builtin_define_fixed_point_constants ("UTA", "", uta_type_node);
1032 /* For libgcc-internal use only. */
1033 if (flag_building_libgcc)
1035 /* Properties of floating-point modes for libgcc2.c. */
1036 for (machine_mode mode = GET_CLASS_NARROWEST_MODE (MODE_FLOAT);
1037 mode != VOIDmode;
1038 mode = GET_MODE_WIDER_MODE (mode))
1040 const char *name = GET_MODE_NAME (mode);
1041 char *macro_name
1042 = (char *) alloca (strlen (name)
1043 + sizeof ("__LIBGCC__MANT_DIG__"));
1044 sprintf (macro_name, "__LIBGCC_%s_MANT_DIG__", name);
1045 builtin_define_with_int_value (macro_name,
1046 REAL_MODE_FORMAT (mode)->p);
1047 if (!targetm.scalar_mode_supported_p (mode)
1048 || !targetm.libgcc_floating_mode_supported_p (mode))
1049 continue;
1050 macro_name = (char *) alloca (strlen (name)
1051 + sizeof ("__LIBGCC_HAS__MODE__"));
1052 sprintf (macro_name, "__LIBGCC_HAS_%s_MODE__", name);
1053 cpp_define (pfile, macro_name);
1054 macro_name = (char *) alloca (strlen (name)
1055 + sizeof ("__LIBGCC__FUNC_EXT__"));
1056 sprintf (macro_name, "__LIBGCC_%s_FUNC_EXT__", name);
1057 const char *suffix;
1058 if (mode == TYPE_MODE (double_type_node))
1059 suffix = "";
1060 else if (mode == TYPE_MODE (float_type_node))
1061 suffix = "f";
1062 else if (mode == TYPE_MODE (long_double_type_node))
1063 suffix = "l";
1064 /* ??? The following assumes the built-in functions (defined
1065 in target-specific code) match the suffixes used for
1066 constants. Because in fact such functions are not
1067 defined for the 'w' suffix, 'l' is used there
1068 instead. */
1069 else if (mode == targetm.c.mode_for_suffix ('q'))
1070 suffix = "q";
1071 else if (mode == targetm.c.mode_for_suffix ('w'))
1072 suffix = "l";
1073 else
1074 gcc_unreachable ();
1075 builtin_define_with_value (macro_name, suffix, 0);
1076 bool excess_precision = false;
1077 if (TARGET_FLT_EVAL_METHOD != 0
1078 && mode != TYPE_MODE (long_double_type_node)
1079 && (mode == TYPE_MODE (float_type_node)
1080 || mode == TYPE_MODE (double_type_node)))
1081 switch (TARGET_FLT_EVAL_METHOD)
1083 case -1:
1084 case 2:
1085 excess_precision = true;
1086 break;
1088 case 1:
1089 excess_precision = mode == TYPE_MODE (float_type_node);
1090 break;
1092 default:
1093 gcc_unreachable ();
1095 macro_name = (char *) alloca (strlen (name)
1096 + sizeof ("__LIBGCC__EXCESS_"
1097 "PRECISION__"));
1098 sprintf (macro_name, "__LIBGCC_%s_EXCESS_PRECISION__", name);
1099 builtin_define_with_int_value (macro_name, excess_precision);
1102 /* For libgcc crtstuff.c and libgcc2.c. */
1103 builtin_define_with_int_value ("__LIBGCC_EH_TABLES_CAN_BE_READ_ONLY__",
1104 EH_TABLES_CAN_BE_READ_ONLY);
1105 #ifdef EH_FRAME_SECTION_NAME
1106 builtin_define_with_value ("__LIBGCC_EH_FRAME_SECTION_NAME__",
1107 EH_FRAME_SECTION_NAME, 1);
1108 #endif
1109 #ifdef JCR_SECTION_NAME
1110 builtin_define_with_value ("__LIBGCC_JCR_SECTION_NAME__",
1111 JCR_SECTION_NAME, 1);
1112 #endif
1113 #ifdef CTORS_SECTION_ASM_OP
1114 builtin_define_with_value ("__LIBGCC_CTORS_SECTION_ASM_OP__",
1115 CTORS_SECTION_ASM_OP, 1);
1116 #endif
1117 #ifdef DTORS_SECTION_ASM_OP
1118 builtin_define_with_value ("__LIBGCC_DTORS_SECTION_ASM_OP__",
1119 DTORS_SECTION_ASM_OP, 1);
1120 #endif
1121 #ifdef TEXT_SECTION_ASM_OP
1122 builtin_define_with_value ("__LIBGCC_TEXT_SECTION_ASM_OP__",
1123 TEXT_SECTION_ASM_OP, 1);
1124 #endif
1125 #ifdef INIT_SECTION_ASM_OP
1126 builtin_define_with_value ("__LIBGCC_INIT_SECTION_ASM_OP__",
1127 INIT_SECTION_ASM_OP, 1);
1128 #endif
1129 #ifdef INIT_ARRAY_SECTION_ASM_OP
1130 /* Despite the name of this target macro, the expansion is not
1131 actually used, and may be empty rather than a string
1132 constant. */
1133 cpp_define (pfile, "__LIBGCC_INIT_ARRAY_SECTION_ASM_OP__");
1134 #endif
1136 /* For libgcc enable-execute-stack.c. */
1137 builtin_define_with_int_value ("__LIBGCC_TRAMPOLINE_SIZE__",
1138 TRAMPOLINE_SIZE);
1140 /* For libgcc generic-morestack.c and unwinder code. */
1141 #ifdef STACK_GROWS_DOWNWARD
1142 cpp_define (pfile, "__LIBGCC_STACK_GROWS_DOWNWARD__");
1143 #endif
1145 /* For libgcc unwinder code. */
1146 #ifdef DONT_USE_BUILTIN_SETJMP
1147 cpp_define (pfile, "__LIBGCC_DONT_USE_BUILTIN_SETJMP__");
1148 #endif
1149 #ifdef DWARF_ALT_FRAME_RETURN_COLUMN
1150 builtin_define_with_int_value ("__LIBGCC_DWARF_ALT_FRAME_RETURN_COLUMN__",
1151 DWARF_ALT_FRAME_RETURN_COLUMN);
1152 #endif
1153 builtin_define_with_int_value ("__LIBGCC_DWARF_FRAME_REGISTERS__",
1154 DWARF_FRAME_REGISTERS);
1155 #ifdef EH_RETURN_STACKADJ_RTX
1156 cpp_define (pfile, "__LIBGCC_EH_RETURN_STACKADJ_RTX__");
1157 #endif
1158 #ifdef JMP_BUF_SIZE
1159 builtin_define_with_int_value ("__LIBGCC_JMP_BUF_SIZE__",
1160 JMP_BUF_SIZE);
1161 #endif
1162 builtin_define_with_int_value ("__LIBGCC_STACK_POINTER_REGNUM__",
1163 STACK_POINTER_REGNUM);
1165 /* For libgcov. */
1166 builtin_define_with_int_value ("__LIBGCC_VTABLE_USES_DESCRIPTORS__",
1167 TARGET_VTABLE_USES_DESCRIPTORS);
1170 /* For use in assembly language. */
1171 builtin_define_with_value ("__REGISTER_PREFIX__", REGISTER_PREFIX, 0);
1172 builtin_define_with_value ("__USER_LABEL_PREFIX__", user_label_prefix, 0);
1174 /* Misc. */
1175 if (flag_gnu89_inline)
1176 cpp_define (pfile, "__GNUC_GNU_INLINE__");
1177 else
1178 cpp_define (pfile, "__GNUC_STDC_INLINE__");
1180 if (flag_no_inline)
1181 cpp_define (pfile, "__NO_INLINE__");
1183 if (flag_iso)
1184 cpp_define (pfile, "__STRICT_ANSI__");
1186 if (!flag_signed_char)
1187 cpp_define (pfile, "__CHAR_UNSIGNED__");
1189 if (c_dialect_cxx () && TYPE_UNSIGNED (wchar_type_node))
1190 cpp_define (pfile, "__WCHAR_UNSIGNED__");
1192 cpp_atomic_builtins (pfile);
1194 #ifdef DWARF2_UNWIND_INFO
1195 if (dwarf2out_do_cfi_asm ())
1196 cpp_define (pfile, "__GCC_HAVE_DWARF2_CFI_ASM");
1197 #endif
1199 /* Make the choice of ObjC runtime visible to source code. */
1200 if (c_dialect_objc () && flag_next_runtime)
1201 cpp_define (pfile, "__NEXT_RUNTIME__");
1203 /* Show the availability of some target pragmas. */
1204 cpp_define (pfile, "__PRAGMA_REDEFINE_EXTNAME");
1206 /* Make the choice of the stack protector runtime visible to source code.
1207 The macro names and values here were chosen for compatibility with an
1208 earlier implementation, i.e. ProPolice. */
1209 if (flag_stack_protect == 4)
1210 cpp_define (pfile, "__SSP_EXPLICIT__=4");
1211 if (flag_stack_protect == 3)
1212 cpp_define (pfile, "__SSP_STRONG__=3");
1213 if (flag_stack_protect == 2)
1214 cpp_define (pfile, "__SSP_ALL__=2");
1215 else if (flag_stack_protect == 1)
1216 cpp_define (pfile, "__SSP__=1");
1218 if (flag_openacc)
1219 cpp_define (pfile, "_OPENACC=201306");
1221 if (flag_openmp)
1222 cpp_define (pfile, "_OPENMP=201307");
1224 for (i = 0; i < NUM_INT_N_ENTS; i ++)
1225 if (int_n_enabled_p[i])
1227 char buf[15+20];
1228 sprintf(buf, "__SIZEOF_INT%d__", int_n_data[i].bitsize);
1229 builtin_define_type_sizeof (buf,
1230 int_n_trees[i].signed_type);
1232 builtin_define_type_sizeof ("__SIZEOF_WCHAR_T__", wchar_type_node);
1233 builtin_define_type_sizeof ("__SIZEOF_WINT_T__", wint_type_node);
1234 builtin_define_type_sizeof ("__SIZEOF_PTRDIFF_T__",
1235 unsigned_ptrdiff_type_node);
1237 /* A straightforward target hook doesn't work, because of problems
1238 linking that hook's body when part of non-C front ends. */
1239 # define preprocessing_asm_p() (cpp_get_options (pfile)->lang == CLK_ASM)
1240 # define preprocessing_trad_p() (cpp_get_options (pfile)->traditional)
1241 # define builtin_define(TXT) cpp_define (pfile, TXT)
1242 # define builtin_assert(TXT) cpp_assert (pfile, TXT)
1243 TARGET_CPU_CPP_BUILTINS ();
1244 TARGET_OS_CPP_BUILTINS ();
1245 TARGET_OBJFMT_CPP_BUILTINS ();
1247 /* Support the __declspec keyword by turning them into attributes.
1248 Note that the current way we do this may result in a collision
1249 with predefined attributes later on. This can be solved by using
1250 one attribute, say __declspec__, and passing args to it. The
1251 problem with that approach is that args are not accumulated: each
1252 new appearance would clobber any existing args. */
1253 if (TARGET_DECLSPEC)
1254 builtin_define ("__declspec(x)=__attribute__((x))");
1256 /* If decimal floating point is supported, tell the user if the
1257 alternate format (BID) is used instead of the standard (DPD)
1258 format. */
1259 if (ENABLE_DECIMAL_FLOAT && ENABLE_DECIMAL_BID_FORMAT)
1260 cpp_define (pfile, "__DECIMAL_BID_FORMAT__");
1263 /* Pass an object-like macro. If it doesn't lie in the user's
1264 namespace, defines it unconditionally. Otherwise define a version
1265 with two leading underscores, and another version with two leading
1266 and trailing underscores, and define the original only if an ISO
1267 standard was not nominated.
1269 e.g. passing "unix" defines "__unix", "__unix__" and possibly
1270 "unix". Passing "_mips" defines "__mips", "__mips__" and possibly
1271 "_mips". */
1272 void
1273 builtin_define_std (const char *macro)
1275 size_t len = strlen (macro);
1276 char *buff = (char *) alloca (len + 5);
1277 char *p = buff + 2;
1278 char *q = p + len;
1280 /* prepend __ (or maybe just _) if in user's namespace. */
1281 memcpy (p, macro, len + 1);
1282 if (!( *p == '_' && (p[1] == '_' || ISUPPER (p[1]))))
1284 if (*p != '_')
1285 *--p = '_';
1286 if (p[1] != '_')
1287 *--p = '_';
1289 cpp_define (parse_in, p);
1291 /* If it was in user's namespace... */
1292 if (p != buff + 2)
1294 /* Define the macro with leading and following __. */
1295 if (q[-1] != '_')
1296 *q++ = '_';
1297 if (q[-2] != '_')
1298 *q++ = '_';
1299 *q = '\0';
1300 cpp_define (parse_in, p);
1302 /* Finally, define the original macro if permitted. */
1303 if (!flag_iso)
1304 cpp_define (parse_in, macro);
1308 /* Pass an object-like macro and a value to define it to. The third
1309 parameter says whether or not to turn the value into a string
1310 constant. */
1311 void
1312 builtin_define_with_value (const char *macro, const char *expansion, int is_str)
1314 char *buf;
1315 size_t mlen = strlen (macro);
1316 size_t elen = strlen (expansion);
1317 size_t extra = 2; /* space for an = and a NUL */
1319 if (is_str)
1321 char *quoted_expansion = (char *) alloca (elen * 4 + 1);
1322 const char *p;
1323 char *q;
1324 extra += 2; /* space for two quote marks */
1325 for (p = expansion, q = quoted_expansion; *p; p++)
1327 switch (*p)
1329 case '\n':
1330 *q++ = '\\';
1331 *q++ = 'n';
1332 break;
1334 case '\t':
1335 *q++ = '\\';
1336 *q++ = 't';
1337 break;
1339 case '\\':
1340 *q++ = '\\';
1341 *q++ = '\\';
1342 break;
1344 case '"':
1345 *q++ = '\\';
1346 *q++ = '"';
1347 break;
1349 default:
1350 if (ISPRINT ((unsigned char) *p))
1351 *q++ = *p;
1352 else
1354 sprintf (q, "\\%03o", (unsigned char) *p);
1355 q += 4;
1359 *q = '\0';
1360 expansion = quoted_expansion;
1361 elen = q - expansion;
1364 buf = (char *) alloca (mlen + elen + extra);
1365 if (is_str)
1366 sprintf (buf, "%s=\"%s\"", macro, expansion);
1367 else
1368 sprintf (buf, "%s=%s", macro, expansion);
1370 cpp_define (parse_in, buf);
1374 /* Pass an object-like macro and an integer value to define it to. */
1375 static void
1376 builtin_define_with_int_value (const char *macro, HOST_WIDE_INT value)
1378 char *buf;
1379 size_t mlen = strlen (macro);
1380 size_t vlen = 18;
1381 size_t extra = 2; /* space for = and NUL. */
1383 buf = (char *) alloca (mlen + vlen + extra);
1384 memcpy (buf, macro, mlen);
1385 buf[mlen] = '=';
1386 sprintf (buf + mlen + 1, HOST_WIDE_INT_PRINT_DEC, value);
1388 cpp_define (parse_in, buf);
1391 /* builtin_define_with_hex_fp_value is very expensive, so the following
1392 array and function allows it to be done lazily when __DBL_MAX__
1393 etc. is first used. */
1395 struct GTY(()) lazy_hex_fp_value_struct
1397 const char *hex_str;
1398 cpp_macro *macro;
1399 machine_mode mode;
1400 int digits;
1401 const char *fp_suffix;
1403 static GTY(()) struct lazy_hex_fp_value_struct lazy_hex_fp_values[12];
1404 static GTY(()) int lazy_hex_fp_value_count;
1406 static bool
1407 lazy_hex_fp_value (cpp_reader *pfile ATTRIBUTE_UNUSED,
1408 cpp_hashnode *node)
1410 REAL_VALUE_TYPE real;
1411 char dec_str[64], buf1[256];
1412 unsigned int idx;
1413 if (node->value.builtin < BT_FIRST_USER
1414 || (int) node->value.builtin >= BT_FIRST_USER + lazy_hex_fp_value_count)
1415 return false;
1417 idx = node->value.builtin - BT_FIRST_USER;
1418 real_from_string (&real, lazy_hex_fp_values[idx].hex_str);
1419 real_to_decimal_for_mode (dec_str, &real, sizeof (dec_str),
1420 lazy_hex_fp_values[idx].digits, 0,
1421 lazy_hex_fp_values[idx].mode);
1423 sprintf (buf1, "%s%s", dec_str, lazy_hex_fp_values[idx].fp_suffix);
1424 node->flags &= ~(NODE_BUILTIN | NODE_USED);
1425 node->value.macro = lazy_hex_fp_values[idx].macro;
1426 for (idx = 0; idx < node->value.macro->count; idx++)
1427 if (node->value.macro->exp.tokens[idx].type == CPP_NUMBER)
1428 break;
1429 gcc_assert (idx < node->value.macro->count);
1430 node->value.macro->exp.tokens[idx].val.str.len = strlen (buf1);
1431 node->value.macro->exp.tokens[idx].val.str.text
1432 = (const unsigned char *) ggc_strdup (buf1);
1433 return true;
1436 /* Pass an object-like macro a hexadecimal floating-point value. */
1437 static void
1438 builtin_define_with_hex_fp_value (const char *macro,
1439 tree type, int digits,
1440 const char *hex_str,
1441 const char *fp_suffix,
1442 const char *fp_cast)
1444 REAL_VALUE_TYPE real;
1445 char dec_str[64], buf1[256], buf2[256];
1447 /* This is very expensive, so if possible expand them lazily. */
1448 if (lazy_hex_fp_value_count < 12
1449 && flag_dump_macros == 0
1450 && !cpp_get_options (parse_in)->traditional)
1452 struct cpp_hashnode *node;
1453 if (lazy_hex_fp_value_count == 0)
1454 cpp_get_callbacks (parse_in)->user_builtin_macro = lazy_hex_fp_value;
1455 sprintf (buf2, fp_cast, "1.1");
1456 sprintf (buf1, "%s=%s", macro, buf2);
1457 cpp_define (parse_in, buf1);
1458 node = C_CPP_HASHNODE (get_identifier (macro));
1459 lazy_hex_fp_values[lazy_hex_fp_value_count].hex_str
1460 = ggc_strdup (hex_str);
1461 lazy_hex_fp_values[lazy_hex_fp_value_count].mode = TYPE_MODE (type);
1462 lazy_hex_fp_values[lazy_hex_fp_value_count].digits = digits;
1463 lazy_hex_fp_values[lazy_hex_fp_value_count].fp_suffix = fp_suffix;
1464 lazy_hex_fp_values[lazy_hex_fp_value_count].macro = node->value.macro;
1465 node->flags |= NODE_BUILTIN;
1466 node->value.builtin
1467 = (enum cpp_builtin_type) (BT_FIRST_USER + lazy_hex_fp_value_count);
1468 lazy_hex_fp_value_count++;
1469 return;
1472 /* Hex values are really cool and convenient, except that they're
1473 not supported in strict ISO C90 mode. First, the "p-" sequence
1474 is not valid as part of a preprocessor number. Second, we get a
1475 pedwarn from the preprocessor, which has no context, so we can't
1476 suppress the warning with __extension__.
1478 So instead what we do is construct the number in hex (because
1479 it's easy to get the exact correct value), parse it as a real,
1480 then print it back out as decimal. */
1482 real_from_string (&real, hex_str);
1483 real_to_decimal_for_mode (dec_str, &real, sizeof (dec_str), digits, 0,
1484 TYPE_MODE (type));
1486 /* Assemble the macro in the following fashion
1487 macro = fp_cast [dec_str fp_suffix] */
1488 sprintf (buf1, "%s%s", dec_str, fp_suffix);
1489 sprintf (buf2, fp_cast, buf1);
1490 sprintf (buf1, "%s=%s", macro, buf2);
1492 cpp_define (parse_in, buf1);
1495 /* Return a string constant for the suffix for a value of type TYPE
1496 promoted according to the integer promotions. The type must be one
1497 of the standard integer type nodes. */
1499 static const char *
1500 type_suffix (tree type)
1502 static const char *const suffixes[] = { "", "U", "L", "UL", "LL", "ULL" };
1503 int unsigned_suffix;
1504 int is_long;
1505 int tp = TYPE_PRECISION (type);
1507 if (type == long_long_integer_type_node
1508 || type == long_long_unsigned_type_node
1509 || tp > TYPE_PRECISION (long_integer_type_node))
1510 is_long = 2;
1511 else if (type == long_integer_type_node
1512 || type == long_unsigned_type_node
1513 || tp > TYPE_PRECISION (integer_type_node))
1514 is_long = 1;
1515 else if (type == integer_type_node
1516 || type == unsigned_type_node
1517 || type == short_integer_type_node
1518 || type == short_unsigned_type_node
1519 || type == signed_char_type_node
1520 || type == unsigned_char_type_node
1521 /* ??? "char" is not a signed or unsigned integer type and
1522 so is not permitted for the standard typedefs, but some
1523 systems use it anyway. */
1524 || type == char_type_node)
1525 is_long = 0;
1526 else
1527 gcc_unreachable ();
1529 unsigned_suffix = TYPE_UNSIGNED (type);
1530 if (TYPE_PRECISION (type) < TYPE_PRECISION (integer_type_node))
1531 unsigned_suffix = 0;
1532 return suffixes[is_long * 2 + unsigned_suffix];
1535 /* Define MACRO as a <stdint.h> constant-suffix macro for TYPE. */
1536 static void
1537 builtin_define_constants (const char *macro, tree type)
1539 const char *suffix;
1540 char *buf;
1542 suffix = type_suffix (type);
1544 if (suffix[0] == 0)
1546 buf = (char *) alloca (strlen (macro) + 6);
1547 sprintf (buf, "%s(c)=c", macro);
1549 else
1551 buf = (char *) alloca (strlen (macro) + 9 + strlen (suffix) + 1);
1552 sprintf (buf, "%s(c)=c ## %s", macro, suffix);
1555 cpp_define (parse_in, buf);
1558 /* Define MAX for TYPE based on the precision of the type. */
1560 static void
1561 builtin_define_type_max (const char *macro, tree type)
1563 builtin_define_type_minmax (NULL, macro, type);
1566 /* Given a value with COUNT LSBs set, fill BUF with a hexidecimal
1567 representation of that value. For example, a COUNT of 10 would
1568 return "0x3ff". */
1570 static void
1571 print_bits_of_hex (char *buf, int bufsz, int count)
1573 gcc_assert (bufsz > 3);
1574 *buf++ = '0';
1575 *buf++ = 'x';
1576 bufsz -= 2;
1578 gcc_assert (count > 0);
1580 switch (count % 4) {
1581 case 0:
1582 break;
1583 case 1:
1584 *buf++ = '1';
1585 bufsz --;
1586 count -= 1;
1587 break;
1588 case 2:
1589 *buf++ = '3';
1590 bufsz --;
1591 count -= 2;
1592 break;
1593 case 3:
1594 *buf++ = '7';
1595 bufsz --;
1596 count -= 3;
1597 break;
1599 while (count >= 4)
1601 gcc_assert (bufsz > 1);
1602 *buf++ = 'f';
1603 bufsz --;
1604 count -= 4;
1606 gcc_assert (bufsz > 0);
1607 *buf++ = 0;
1610 /* Define MIN_MACRO (if not NULL) and MAX_MACRO for TYPE based on the
1611 precision of the type. */
1613 static void
1614 builtin_define_type_minmax (const char *min_macro, const char *max_macro,
1615 tree type)
1617 #define PBOH_SZ (MAX_BITSIZE_MODE_ANY_INT/4+4)
1618 char value[PBOH_SZ];
1620 const char *suffix;
1621 char *buf;
1622 int bits;
1624 bits = TYPE_PRECISION (type) + (TYPE_UNSIGNED (type) ? 0 : -1);
1626 print_bits_of_hex (value, PBOH_SZ, bits);
1628 suffix = type_suffix (type);
1630 buf = (char *) alloca (strlen (max_macro) + 1 + strlen (value)
1631 + strlen (suffix) + 1);
1632 sprintf (buf, "%s=%s%s", max_macro, value, suffix);
1634 cpp_define (parse_in, buf);
1636 if (min_macro)
1638 if (TYPE_UNSIGNED (type))
1640 buf = (char *) alloca (strlen (min_macro) + 2 + strlen (suffix) + 1);
1641 sprintf (buf, "%s=0%s", min_macro, suffix);
1643 else
1645 buf = (char *) alloca (strlen (min_macro) + 3
1646 + strlen (max_macro) + 6);
1647 sprintf (buf, "%s=(-%s - 1)", min_macro, max_macro);
1649 cpp_define (parse_in, buf);
1653 #include "gt-c-family-c-cppbuiltin.h"