]> git.ipfire.org Git - thirdparty/gcc.git/blame - gcc/c-family/c-cppbuiltin.c
Implement P0035R4, C++17 new of over-aligned types.
[thirdparty/gcc.git] / gcc / c-family / c-cppbuiltin.c
CommitLineData
cb60f38d 1/* Define builtin-in macros for the C family front ends.
818ab71a 2 Copyright (C) 2002-2016 Free Software Foundation, Inc.
cb60f38d
NB
3
4This file is part of GCC.
5
6GCC is free software; you can redistribute it and/or modify it under
7the terms of the GNU General Public License as published by the Free
9dcd6f09 8Software Foundation; either version 3, or (at your option) any later
cb60f38d
NB
9version.
10
11GCC is distributed in the hope that it will be useful, but WITHOUT ANY
12WARRANTY; without even the implied warranty of MERCHANTABILITY or
13FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
14for more details.
15
16You should have received a copy of the GNU General Public License
9dcd6f09
NC
17along with GCC; see the file COPYING3. If not see
18<http://www.gnu.org/licenses/>. */
cb60f38d
NB
19
20#include "config.h"
21#include "system.h"
22#include "coretypes.h"
2adfab87 23#include "target.h"
2adfab87
AM
24#include "c-common.h"
25#include "tm_p.h" /* For TARGET_CPU_CPP_BUILTINS & friends. */
d8a2d370 26#include "stringpool.h"
2adfab87 27#include "stor-layout.h"
cb60f38d 28#include "flags.h"
cb60f38d 29#include "c-pragma.h"
a4b7d13c 30#include "output.h" /* For user_label_prefix. */
f4ce02c5 31#include "debug.h" /* For dwarf2out_do_cfi_asm. */
677f3fa8 32#include "common/common-target.h"
8e680db5 33#include "cpp-id-data.h"
82a1c2fe 34#include "cppbuiltin.h"
cb60f38d 35
4e2e315f
NB
36#ifndef TARGET_OS_CPP_BUILTINS
37# define TARGET_OS_CPP_BUILTINS()
38#endif
39
40#ifndef TARGET_OBJFMT_CPP_BUILTINS
41# define TARGET_OBJFMT_CPP_BUILTINS()
42#endif
43
cb60f38d
NB
44#ifndef REGISTER_PREFIX
45#define REGISTER_PREFIX ""
46#endif
47
21282b1e 48/* Non-static as some targets don't use it. */
35b1a6fa
AJ
49static void builtin_define_with_hex_fp_value (const char *, tree,
50 int, const char *,
264c41ed 51 const char *,
35b1a6fa 52 const char *);
85291069 53static void builtin_define_stdint_macros (void);
207bf79d
JM
54static void builtin_define_constants (const char *, tree);
55static void builtin_define_type_max (const char *, tree);
56static void builtin_define_type_minmax (const char *, const char *, tree);
c65248cb 57static void builtin_define_type_width (const char *, tree, tree);
b8698a0f 58static void builtin_define_float_constants (const char *,
1b1562a5 59 const char *,
264c41ed
CD
60 const char *,
61 const char *,
35b1a6fa 62 tree);
cb60f38d 63
0069111f
MM
64/* Return true if MODE provides a fast multiply/add (FMA) builtin function.
65 Originally this function used the fma optab, but that doesn't work with
66 -save-temps, so just rely on the HAVE_fma macros for the standard floating
67 point types. */
68
69static bool
ef4bddc2 70mode_has_fma (machine_mode mode)
0069111f
MM
71{
72 switch (mode)
73 {
74#ifdef HAVE_fmasf4
75 case SFmode:
76 return !!HAVE_fmasf4;
77#endif
78
79#ifdef HAVE_fmadf4
80 case DFmode:
81 return !!HAVE_fmadf4;
82#endif
83
84#ifdef HAVE_fmaxf4
85 case XFmode:
86 return !!HAVE_fmaxf4;
87#endif
88
89#ifdef HAVE_fmatf4
90 case TFmode:
91 return !!HAVE_fmatf4;
92#endif
93
94 default:
95 break;
96 }
97
98 return false;
99}
100
024a85ae 101/* Define NAME with value TYPE size_unit. */
7049e4eb 102void
024a85ae
AK
103builtin_define_type_sizeof (const char *name, tree type)
104{
105 builtin_define_with_int_value (name,
ae7e9ddd 106 tree_to_uhwi (TYPE_SIZE_UNIT (type)));
024a85ae
AK
107}
108
264c41ed
CD
109/* Define the float.h constants for TYPE using NAME_PREFIX, FP_SUFFIX,
110 and FP_CAST. */
cb60f38d 111static void
b8698a0f
L
112builtin_define_float_constants (const char *name_prefix,
113 const char *fp_suffix,
114 const char *fp_cast,
1b1562a5 115 const char *fma_suffix,
264c41ed 116 tree type)
cb60f38d
NB
117{
118 /* Used to convert radix-based values to base 10 values in several cases.
119
120 In the max_exp -> max_10_exp conversion for 128-bit IEEE, we need at
121 least 6 significant digits for correct results. Using the fraction
122 formed by (log(2)*1e6)/(log(10)*1e6) overflows a 32-bit integer as an
123 intermediate; perhaps someone can find a better approximation, in the
124 mean time, I suspect using doubles won't harm the bootstrap here. */
125
126 const double log10_2 = .30102999566398119521;
127 double log10_b;
128 const struct real_format *fmt;
c65699ef 129 const struct real_format *widefmt;
cb60f38d
NB
130
131 char name[64], buf[128];
132 int dig, min_10_exp, max_10_exp;
133 int decimal_dig;
2778d766 134 int type_decimal_dig;
cb60f38d 135
70a01792 136 fmt = REAL_MODE_FORMAT (TYPE_MODE (type));
9a8ce21f 137 gcc_assert (fmt->b != 10);
c65699ef
JM
138 widefmt = REAL_MODE_FORMAT (TYPE_MODE (long_double_type_node));
139 gcc_assert (widefmt->b != 10);
140 for (int i = 0; i < NUM_FLOATN_NX_TYPES; i++)
141 {
142 tree wtype = FLOATN_NX_TYPE_NODE (i);
143 if (wtype != NULL_TREE)
144 {
145 const struct real_format *wfmt
146 = REAL_MODE_FORMAT (TYPE_MODE (wtype));
147 gcc_assert (wfmt->b != 10);
148 if (wfmt->p > widefmt->p)
149 widefmt = wfmt;
150 }
151 }
cb60f38d
NB
152
153 /* The radix of the exponent representation. */
154 if (type == float_type_node)
155 builtin_define_with_int_value ("__FLT_RADIX__", fmt->b);
4d8a8a0a 156 log10_b = log10_2;
cb60f38d
NB
157
158 /* The number of radix digits, p, in the floating-point significand. */
159 sprintf (name, "__%s_MANT_DIG__", name_prefix);
160 builtin_define_with_int_value (name, fmt->p);
161
162 /* The number of decimal digits, q, such that any floating-point number
163 with q decimal digits can be rounded into a floating-point number with
164 p radix b digits and back again without change to the q decimal digits,
165
166 p log10 b if b is a power of 10
35b1a6fa 167 floor((p - 1) log10 b) otherwise
cb60f38d
NB
168 */
169 dig = (fmt->p - 1) * log10_b;
170 sprintf (name, "__%s_DIG__", name_prefix);
171 builtin_define_with_int_value (name, dig);
172
173 /* The minimum negative int x such that b**(x-1) is a normalized float. */
174 sprintf (name, "__%s_MIN_EXP__", name_prefix);
175 sprintf (buf, "(%d)", fmt->emin);
176 builtin_define_with_value (name, buf, 0);
177
178 /* The minimum negative int x such that 10**x is a normalized float,
179
180 ceil (log10 (b ** (emin - 1)))
181 = ceil (log10 (b) * (emin - 1))
182
183 Recall that emin is negative, so the integer truncation calculates
184 the ceiling, not the floor, in this case. */
185 min_10_exp = (fmt->emin - 1) * log10_b;
186 sprintf (name, "__%s_MIN_10_EXP__", name_prefix);
187 sprintf (buf, "(%d)", min_10_exp);
188 builtin_define_with_value (name, buf, 0);
189
190 /* The maximum int x such that b**(x-1) is a representable float. */
191 sprintf (name, "__%s_MAX_EXP__", name_prefix);
192 builtin_define_with_int_value (name, fmt->emax);
193
194 /* The maximum int x such that 10**x is in the range of representable
195 finite floating-point numbers,
196
197 floor (log10((1 - b**-p) * b**emax))
198 = floor (log10(1 - b**-p) + log10(b**emax))
199 = floor (log10(1 - b**-p) + log10(b)*emax)
200
201 The safest thing to do here is to just compute this number. But since
202 we don't link cc1 with libm, we cannot. We could implement log10 here
203 a series expansion, but that seems too much effort because:
204
205 Note that the first term, for all extant p, is a number exceedingly close
206 to zero, but slightly negative. Note that the second term is an integer
207 scaling an irrational number, and that because of the floor we are only
208 interested in its integral portion.
209
210 In order for the first term to have any effect on the integral portion
211 of the second term, the second term has to be exceedingly close to an
212 integer itself (e.g. 123.000000000001 or something). Getting a result
213 that close to an integer requires that the irrational multiplicand have
214 a long series of zeros in its expansion, which doesn't occur in the
215 first 20 digits or so of log10(b).
216
217 Hand-waving aside, crunching all of the sets of constants above by hand
218 does not yield a case for which the first term is significant, which
219 in the end is all that matters. */
220 max_10_exp = fmt->emax * log10_b;
221 sprintf (name, "__%s_MAX_10_EXP__", name_prefix);
222 builtin_define_with_int_value (name, max_10_exp);
223
224 /* The number of decimal digits, n, such that any floating-point number
225 can be rounded to n decimal digits and back again without change to
35b1a6fa 226 the value.
cb60f38d
NB
227
228 p * log10(b) if b is a power of 10
229 ceil(1 + p * log10(b)) otherwise
230
231 The only macro we care about is this number for the widest supported
232 floating type, but we want this value for rendering constants below. */
233 {
8ce94e44 234 double d_decimal_dig
c65699ef 235 = 1 + (fmt->p < widefmt->p ? widefmt->p : fmt->p) * log10_b;
cb60f38d
NB
236 decimal_dig = d_decimal_dig;
237 if (decimal_dig < d_decimal_dig)
238 decimal_dig++;
239 }
2778d766
JM
240 /* Similar, for this type rather than long double. */
241 {
242 double type_d_decimal_dig = 1 + fmt->p * log10_b;
243 type_decimal_dig = type_d_decimal_dig;
244 if (type_decimal_dig < type_d_decimal_dig)
245 type_decimal_dig++;
246 }
c65699ef
JM
247 /* Arbitrarily, define __DECIMAL_DIG__ when defining macros for long
248 double, although it may be greater than the value for long
249 double. */
cb60f38d
NB
250 if (type == long_double_type_node)
251 builtin_define_with_int_value ("__DECIMAL_DIG__", decimal_dig);
c65699ef
JM
252 sprintf (name, "__%s_DECIMAL_DIG__", name_prefix);
253 builtin_define_with_int_value (name, type_decimal_dig);
cb60f38d
NB
254
255 /* Since, for the supported formats, B is always a power of 2, we
256 construct the following numbers directly as a hexadecimal
257 constants. */
7faa1bbb 258 get_max_float (fmt, buf, sizeof (buf));
b8698a0f 259
cb60f38d 260 sprintf (name, "__%s_MAX__", name_prefix);
264c41ed 261 builtin_define_with_hex_fp_value (name, type, decimal_dig, buf, fp_suffix, fp_cast);
cb60f38d
NB
262
263 /* The minimum normalized positive floating-point number,
264 b**(emin-1). */
265 sprintf (name, "__%s_MIN__", name_prefix);
4d8a8a0a 266 sprintf (buf, "0x1p%d", fmt->emin - 1);
264c41ed 267 builtin_define_with_hex_fp_value (name, type, decimal_dig, buf, fp_suffix, fp_cast);
cb60f38d
NB
268
269 /* The difference between 1 and the least value greater than 1 that is
270 representable in the given floating point type, b**(1-p). */
271 sprintf (name, "__%s_EPSILON__", name_prefix);
59d7d767
GK
272 if (fmt->pnan < fmt->p)
273 /* This is an IBM extended double format, so 1.0 + any double is
274 representable precisely. */
4d8a8a0a 275 sprintf (buf, "0x1p%d", fmt->emin - fmt->p);
c22cacf3 276 else
4d8a8a0a 277 sprintf (buf, "0x1p%d", 1 - fmt->p);
264c41ed 278 builtin_define_with_hex_fp_value (name, type, decimal_dig, buf, fp_suffix, fp_cast);
cb60f38d 279
179b5a55
MG
280 /* For C++ std::numeric_limits<T>::denorm_min and C11 *_TRUE_MIN.
281 The minimum denormalized positive floating-point number, b**(emin-p).
282 The minimum normalized positive floating-point number for formats
283 that don't support denormals. */
cb60f38d 284 sprintf (name, "__%s_DENORM_MIN__", name_prefix);
179b5a55
MG
285 sprintf (buf, "0x1p%d", fmt->emin - (fmt->has_denorm ? fmt->p : 1));
286 builtin_define_with_hex_fp_value (name, type, decimal_dig,
287 buf, fp_suffix, fp_cast);
cb60f38d 288
264c41ed
CD
289 sprintf (name, "__%s_HAS_DENORM__", name_prefix);
290 builtin_define_with_value (name, fmt->has_denorm ? "1" : "0", 0);
291
cb60f38d
NB
292 /* For C++ std::numeric_limits<T>::has_infinity. */
293 sprintf (name, "__%s_HAS_INFINITY__", name_prefix);
35b1a6fa 294 builtin_define_with_int_value (name,
cb60f38d
NB
295 MODE_HAS_INFINITIES (TYPE_MODE (type)));
296 /* For C++ std::numeric_limits<T>::has_quiet_NaN. We do not have a
297 predicate to distinguish a target that has both quiet and
298 signalling NaNs from a target that has only quiet NaNs or only
299 signalling NaNs, so we assume that a target that has any kind of
300 NaN has quiet NaNs. */
301 sprintf (name, "__%s_HAS_QUIET_NAN__", name_prefix);
302 builtin_define_with_int_value (name, MODE_HAS_NANS (TYPE_MODE (type)));
1b1562a5
MM
303
304 /* Note whether we have fast FMA. */
c65699ef 305 if (mode_has_fma (TYPE_MODE (type)) && fma_suffix != NULL)
1b1562a5
MM
306 {
307 sprintf (name, "__FP_FAST_FMA%s", fma_suffix);
308 builtin_define_with_int_value (name, 1);
309 }
cb60f38d
NB
310}
311
9a8ce21f
JG
312/* Define __DECx__ constants for TYPE using NAME_PREFIX and SUFFIX. */
313static void
b8698a0f
L
314builtin_define_decimal_float_constants (const char *name_prefix,
315 const char *suffix,
9a8ce21f
JG
316 tree type)
317{
318 const struct real_format *fmt;
319 char name[64], buf[128], *p;
320 int digits;
321
322 fmt = REAL_MODE_FORMAT (TYPE_MODE (type));
323
324 /* The number of radix digits, p, in the significand. */
325 sprintf (name, "__%s_MANT_DIG__", name_prefix);
326 builtin_define_with_int_value (name, fmt->p);
327
328 /* The minimum negative int x such that b**(x-1) is a normalized float. */
329 sprintf (name, "__%s_MIN_EXP__", name_prefix);
330 sprintf (buf, "(%d)", fmt->emin);
331 builtin_define_with_value (name, buf, 0);
332
333 /* The maximum int x such that b**(x-1) is a representable float. */
334 sprintf (name, "__%s_MAX_EXP__", name_prefix);
335 builtin_define_with_int_value (name, fmt->emax);
336
337 /* Compute the minimum representable value. */
338 sprintf (name, "__%s_MIN__", name_prefix);
c52ec948 339 sprintf (buf, "1E%d%s", fmt->emin - 1, suffix);
b8698a0f 340 builtin_define_with_value (name, buf, 0);
9a8ce21f
JG
341
342 /* Compute the maximum representable value. */
343 sprintf (name, "__%s_MAX__", name_prefix);
344 p = buf;
345 for (digits = fmt->p; digits; digits--)
346 {
347 *p++ = '9';
348 if (digits == fmt->p)
349 *p++ = '.';
350 }
351 *p = 0;
c52ec948
JJ
352 /* fmt->p plus 1, to account for the decimal point and fmt->emax
353 minus 1 because the digits are nines, not 1.0. */
b8698a0f 354 sprintf (&buf[fmt->p + 1], "E%d%s", fmt->emax - 1, suffix);
9a8ce21f
JG
355 builtin_define_with_value (name, buf, 0);
356
357 /* Compute epsilon (the difference between 1 and least value greater
358 than 1 representable). */
359 sprintf (name, "__%s_EPSILON__", name_prefix);
360 sprintf (buf, "1E-%d%s", fmt->p - 1, suffix);
361 builtin_define_with_value (name, buf, 0);
362
c52ec948
JJ
363 /* Minimum subnormal positive decimal value. */
364 sprintf (name, "__%s_SUBNORMAL_MIN__", name_prefix);
9a8ce21f
JG
365 p = buf;
366 for (digits = fmt->p; digits > 1; digits--)
367 {
368 *p++ = '0';
369 if (digits == fmt->p)
370 *p++ = '.';
371 }
372 *p = 0;
b8698a0f 373 sprintf (&buf[fmt->p], "1E%d%s", fmt->emin - 1, suffix);
9a8ce21f
JG
374 builtin_define_with_value (name, buf, 0);
375}
376
0f996086
CF
377/* Define fixed-point constants for TYPE using NAME_PREFIX and SUFFIX. */
378
379static void
380builtin_define_fixed_point_constants (const char *name_prefix,
381 const char *suffix,
382 tree type)
383{
384 char name[64], buf[256], *new_buf;
385 int i, mod;
386
387 sprintf (name, "__%s_FBIT__", name_prefix);
388 builtin_define_with_int_value (name, TYPE_FBIT (type));
389
390 sprintf (name, "__%s_IBIT__", name_prefix);
391 builtin_define_with_int_value (name, TYPE_IBIT (type));
392
393 /* If there is no suffix, defines are for fixed-point modes.
394 We just return. */
395 if (strcmp (suffix, "") == 0)
396 return;
397
398 if (TYPE_UNSIGNED (type))
399 {
400 sprintf (name, "__%s_MIN__", name_prefix);
401 sprintf (buf, "0.0%s", suffix);
402 builtin_define_with_value (name, buf, 0);
403 }
404 else
405 {
406 sprintf (name, "__%s_MIN__", name_prefix);
407 if (ALL_ACCUM_MODE_P (TYPE_MODE (type)))
408 sprintf (buf, "(-0X1P%d%s-0X1P%d%s)", TYPE_IBIT (type) - 1, suffix,
409 TYPE_IBIT (type) - 1, suffix);
410 else
411 sprintf (buf, "(-0.5%s-0.5%s)", suffix, suffix);
412 builtin_define_with_value (name, buf, 0);
413 }
414
415 sprintf (name, "__%s_MAX__", name_prefix);
416 sprintf (buf, "0X");
417 new_buf = buf + 2;
418 mod = (TYPE_FBIT (type) + TYPE_IBIT (type)) % 4;
419 if (mod)
420 sprintf (new_buf++, "%x", (1 << mod) - 1);
421 for (i = 0; i < (TYPE_FBIT (type) + TYPE_IBIT (type)) / 4; i++)
422 sprintf (new_buf++, "F");
423 sprintf (new_buf, "P-%d%s", TYPE_FBIT (type), suffix);
424 builtin_define_with_value (name, buf, 0);
425
426 sprintf (name, "__%s_EPSILON__", name_prefix);
427 sprintf (buf, "0x1P-%d%s", TYPE_FBIT (type), suffix);
428 builtin_define_with_value (name, buf, 0);
429}
430
207bf79d 431/* Define macros used by <stdint.h>. */
85291069
JM
432static void
433builtin_define_stdint_macros (void)
434{
207bf79d
JM
435 builtin_define_type_max ("__INTMAX_MAX__", intmax_type_node);
436 builtin_define_constants ("__INTMAX_C", intmax_type_node);
437 builtin_define_type_max ("__UINTMAX_MAX__", uintmax_type_node);
438 builtin_define_constants ("__UINTMAX_C", uintmax_type_node);
c65248cb
JM
439 builtin_define_type_width ("__INTMAX_WIDTH__", intmax_type_node,
440 uintmax_type_node);
207bf79d 441 if (sig_atomic_type_node)
c65248cb
JM
442 {
443 builtin_define_type_minmax ("__SIG_ATOMIC_MIN__", "__SIG_ATOMIC_MAX__",
444 sig_atomic_type_node);
445 builtin_define_type_width ("__SIG_ATOMIC_WIDTH__", sig_atomic_type_node,
446 NULL_TREE);
447 }
207bf79d
JM
448 if (int8_type_node)
449 builtin_define_type_max ("__INT8_MAX__", int8_type_node);
450 if (int16_type_node)
451 builtin_define_type_max ("__INT16_MAX__", int16_type_node);
452 if (int32_type_node)
453 builtin_define_type_max ("__INT32_MAX__", int32_type_node);
454 if (int64_type_node)
455 builtin_define_type_max ("__INT64_MAX__", int64_type_node);
456 if (uint8_type_node)
457 builtin_define_type_max ("__UINT8_MAX__", uint8_type_node);
ac868f29
EB
458 if (c_uint16_type_node)
459 builtin_define_type_max ("__UINT16_MAX__", c_uint16_type_node);
207bf79d
JM
460 if (c_uint32_type_node)
461 builtin_define_type_max ("__UINT32_MAX__", c_uint32_type_node);
462 if (c_uint64_type_node)
463 builtin_define_type_max ("__UINT64_MAX__", c_uint64_type_node);
464 if (int_least8_type_node)
465 {
466 builtin_define_type_max ("__INT_LEAST8_MAX__", int_least8_type_node);
467 builtin_define_constants ("__INT8_C", int_least8_type_node);
c65248cb
JM
468 builtin_define_type_width ("__INT_LEAST8_WIDTH__", int_least8_type_node,
469 uint_least8_type_node);
207bf79d
JM
470 }
471 if (int_least16_type_node)
472 {
473 builtin_define_type_max ("__INT_LEAST16_MAX__", int_least16_type_node);
474 builtin_define_constants ("__INT16_C", int_least16_type_node);
c65248cb
JM
475 builtin_define_type_width ("__INT_LEAST16_WIDTH__",
476 int_least16_type_node,
477 uint_least16_type_node);
207bf79d
JM
478 }
479 if (int_least32_type_node)
480 {
481 builtin_define_type_max ("__INT_LEAST32_MAX__", int_least32_type_node);
482 builtin_define_constants ("__INT32_C", int_least32_type_node);
c65248cb
JM
483 builtin_define_type_width ("__INT_LEAST32_WIDTH__",
484 int_least32_type_node,
485 uint_least32_type_node);
207bf79d
JM
486 }
487 if (int_least64_type_node)
488 {
489 builtin_define_type_max ("__INT_LEAST64_MAX__", int_least64_type_node);
490 builtin_define_constants ("__INT64_C", int_least64_type_node);
c65248cb
JM
491 builtin_define_type_width ("__INT_LEAST64_WIDTH__",
492 int_least64_type_node,
493 uint_least64_type_node);
207bf79d
JM
494 }
495 if (uint_least8_type_node)
496 {
497 builtin_define_type_max ("__UINT_LEAST8_MAX__", uint_least8_type_node);
498 builtin_define_constants ("__UINT8_C", uint_least8_type_node);
499 }
500 if (uint_least16_type_node)
501 {
502 builtin_define_type_max ("__UINT_LEAST16_MAX__", uint_least16_type_node);
503 builtin_define_constants ("__UINT16_C", uint_least16_type_node);
504 }
505 if (uint_least32_type_node)
506 {
507 builtin_define_type_max ("__UINT_LEAST32_MAX__", uint_least32_type_node);
508 builtin_define_constants ("__UINT32_C", uint_least32_type_node);
509 }
510 if (uint_least64_type_node)
511 {
512 builtin_define_type_max ("__UINT_LEAST64_MAX__", uint_least64_type_node);
513 builtin_define_constants ("__UINT64_C", uint_least64_type_node);
514 }
515 if (int_fast8_type_node)
c65248cb
JM
516 {
517 builtin_define_type_max ("__INT_FAST8_MAX__", int_fast8_type_node);
518 builtin_define_type_width ("__INT_FAST8_WIDTH__", int_fast8_type_node,
519 uint_fast8_type_node);
520 }
207bf79d 521 if (int_fast16_type_node)
c65248cb
JM
522 {
523 builtin_define_type_max ("__INT_FAST16_MAX__", int_fast16_type_node);
524 builtin_define_type_width ("__INT_FAST16_WIDTH__", int_fast16_type_node,
525 uint_fast16_type_node);
526 }
207bf79d 527 if (int_fast32_type_node)
c65248cb
JM
528 {
529 builtin_define_type_max ("__INT_FAST32_MAX__", int_fast32_type_node);
530 builtin_define_type_width ("__INT_FAST32_WIDTH__", int_fast32_type_node,
531 uint_fast32_type_node);
532 }
207bf79d 533 if (int_fast64_type_node)
c65248cb
JM
534 {
535 builtin_define_type_max ("__INT_FAST64_MAX__", int_fast64_type_node);
536 builtin_define_type_width ("__INT_FAST64_WIDTH__", int_fast64_type_node,
537 uint_fast64_type_node);
538 }
207bf79d
JM
539 if (uint_fast8_type_node)
540 builtin_define_type_max ("__UINT_FAST8_MAX__", uint_fast8_type_node);
541 if (uint_fast16_type_node)
542 builtin_define_type_max ("__UINT_FAST16_MAX__", uint_fast16_type_node);
543 if (uint_fast32_type_node)
544 builtin_define_type_max ("__UINT_FAST32_MAX__", uint_fast32_type_node);
545 if (uint_fast64_type_node)
546 builtin_define_type_max ("__UINT_FAST64_MAX__", uint_fast64_type_node);
547 if (intptr_type_node)
c65248cb
JM
548 {
549 builtin_define_type_max ("__INTPTR_MAX__", intptr_type_node);
550 builtin_define_type_width ("__INTPTR_WIDTH__", intptr_type_node,
551 uintptr_type_node);
552 }
207bf79d
JM
553 if (uintptr_type_node)
554 builtin_define_type_max ("__UINTPTR_MAX__", uintptr_type_node);
85291069
JM
555}
556
ab442df7
MM
557/* Adjust the optimization macros when a #pragma GCC optimization is done to
558 reflect the current level. */
559void
560c_cpp_builtins_optimize_pragma (cpp_reader *pfile, tree prev_tree,
561 tree cur_tree)
562{
563 struct cl_optimization *prev = TREE_OPTIMIZATION (prev_tree);
564 struct cl_optimization *cur = TREE_OPTIMIZATION (cur_tree);
565 bool prev_fast_math;
566 bool cur_fast_math;
567
568 /* -undef turns off target-specific built-ins. */
569 if (flag_undef)
570 return;
571
572 /* Other target-independent built-ins determined by command-line
573 options. */
e3339d0f 574 if (!prev->x_optimize_size && cur->x_optimize_size)
ab442df7 575 cpp_define (pfile, "__OPTIMIZE_SIZE__");
e3339d0f 576 else if (prev->x_optimize_size && !cur->x_optimize_size)
ab442df7
MM
577 cpp_undef (pfile, "__OPTIMIZE_SIZE__");
578
e3339d0f 579 if (!prev->x_optimize && cur->x_optimize)
ab442df7 580 cpp_define (pfile, "__OPTIMIZE__");
e3339d0f 581 else if (prev->x_optimize && !cur->x_optimize)
ab442df7
MM
582 cpp_undef (pfile, "__OPTIMIZE__");
583
584 prev_fast_math = fast_math_flags_struct_set_p (prev);
585 cur_fast_math = fast_math_flags_struct_set_p (cur);
586 if (!prev_fast_math && cur_fast_math)
587 cpp_define (pfile, "__FAST_MATH__");
588 else if (prev_fast_math && !cur_fast_math)
589 cpp_undef (pfile, "__FAST_MATH__");
590
e3339d0f 591 if (!prev->x_flag_signaling_nans && cur->x_flag_signaling_nans)
ab442df7 592 cpp_define (pfile, "__SUPPORT_SNAN__");
e3339d0f 593 else if (prev->x_flag_signaling_nans && !cur->x_flag_signaling_nans)
ab442df7
MM
594 cpp_undef (pfile, "__SUPPORT_SNAN__");
595
2079956a
JM
596 if (!prev->x_flag_errno_math && cur->x_flag_errno_math)
597 cpp_undef (pfile, "__NO_MATH_ERRNO__");
598 else if (prev->x_flag_errno_math && !cur->x_flag_errno_math)
599 cpp_define (pfile, "__NO_MATH_ERRNO__");
600
e3339d0f 601 if (!prev->x_flag_finite_math_only && cur->x_flag_finite_math_only)
ab442df7
MM
602 {
603 cpp_undef (pfile, "__FINITE_MATH_ONLY__");
604 cpp_define (pfile, "__FINITE_MATH_ONLY__=1");
605 }
0e3fdb48 606 else if (prev->x_flag_finite_math_only && !cur->x_flag_finite_math_only)
ab442df7
MM
607 {
608 cpp_undef (pfile, "__FINITE_MATH_ONLY__");
609 cpp_define (pfile, "__FINITE_MATH_ONLY__=0");
610 }
611}
612
613
62bad7cd
AM
614/* This function will emit cpp macros to indicate the presence of various lock
615 free atomic operations. */
616
617static void
618cpp_atomic_builtins (cpp_reader *pfile)
619{
620 /* Set a flag for each size of object that compare and swap exists for up to
621 a 16 byte object. */
622#define SWAP_LIMIT 17
623 bool have_swap[SWAP_LIMIT];
624 unsigned int psize;
625
626 /* Clear the map of sizes compare_and swap exists for. */
627 memset (have_swap, 0, sizeof (have_swap));
628
629 /* Tell source code if the compiler makes sync_compare_and_swap
630 builtins available. */
631#ifndef HAVE_sync_compare_and_swapqi
632#define HAVE_sync_compare_and_swapqi 0
633#endif
634#ifndef HAVE_atomic_compare_and_swapqi
635#define HAVE_atomic_compare_and_swapqi 0
636#endif
637
638 if (HAVE_sync_compare_and_swapqi || HAVE_atomic_compare_and_swapqi)
639 {
640 cpp_define (pfile, "__GCC_HAVE_SYNC_COMPARE_AND_SWAP_1");
641 have_swap[1] = true;
642 }
643
644#ifndef HAVE_sync_compare_and_swaphi
645#define HAVE_sync_compare_and_swaphi 0
646#endif
647#ifndef HAVE_atomic_compare_and_swaphi
648#define HAVE_atomic_compare_and_swaphi 0
649#endif
650 if (HAVE_sync_compare_and_swaphi || HAVE_atomic_compare_and_swaphi)
651 {
652 cpp_define (pfile, "__GCC_HAVE_SYNC_COMPARE_AND_SWAP_2");
653 have_swap[2] = true;
654 }
655
656#ifndef HAVE_sync_compare_and_swapsi
657#define HAVE_sync_compare_and_swapsi 0
658#endif
659#ifndef HAVE_atomic_compare_and_swapsi
660#define HAVE_atomic_compare_and_swapsi 0
661#endif
662 if (HAVE_sync_compare_and_swapsi || HAVE_atomic_compare_and_swapsi)
663 {
664 cpp_define (pfile, "__GCC_HAVE_SYNC_COMPARE_AND_SWAP_4");
665 have_swap[4] = true;
666 }
667
668#ifndef HAVE_sync_compare_and_swapdi
669#define HAVE_sync_compare_and_swapdi 0
670#endif
671#ifndef HAVE_atomic_compare_and_swapdi
672#define HAVE_atomic_compare_and_swapdi 0
673#endif
674 if (HAVE_sync_compare_and_swapdi || HAVE_atomic_compare_and_swapdi)
675 {
676 cpp_define (pfile, "__GCC_HAVE_SYNC_COMPARE_AND_SWAP_8");
677 have_swap[8] = true;
678 }
679
680#ifndef HAVE_sync_compare_and_swapti
681#define HAVE_sync_compare_and_swapti 0
682#endif
683#ifndef HAVE_atomic_compare_and_swapti
684#define HAVE_atomic_compare_and_swapti 0
685#endif
686 if (HAVE_sync_compare_and_swapti || HAVE_atomic_compare_and_swapti)
687 {
688 cpp_define (pfile, "__GCC_HAVE_SYNC_COMPARE_AND_SWAP_16");
689 have_swap[16] = true;
690 }
691
48b0b196 692 /* Tell the source code about various types. These map to the C++11 and C11
62bad7cd
AM
693 macros where 2 indicates lock-free always, and 1 indicates sometimes
694 lock free. */
ae7e9ddd 695#define SIZEOF_NODE(T) (tree_to_uhwi (TYPE_SIZE_UNIT (T)))
62bad7cd
AM
696#define SWAP_INDEX(T) ((SIZEOF_NODE (T) < SWAP_LIMIT) ? SIZEOF_NODE (T) : 0)
697 builtin_define_with_int_value ("__GCC_ATOMIC_BOOL_LOCK_FREE",
698 (have_swap[SWAP_INDEX (boolean_type_node)]? 2 : 1));
699 builtin_define_with_int_value ("__GCC_ATOMIC_CHAR_LOCK_FREE",
700 (have_swap[SWAP_INDEX (signed_char_type_node)]? 2 : 1));
701 builtin_define_with_int_value ("__GCC_ATOMIC_CHAR16_T_LOCK_FREE",
702 (have_swap[SWAP_INDEX (char16_type_node)]? 2 : 1));
703 builtin_define_with_int_value ("__GCC_ATOMIC_CHAR32_T_LOCK_FREE",
704 (have_swap[SWAP_INDEX (char32_type_node)]? 2 : 1));
705 builtin_define_with_int_value ("__GCC_ATOMIC_WCHAR_T_LOCK_FREE",
706 (have_swap[SWAP_INDEX (wchar_type_node)]? 2 : 1));
707 builtin_define_with_int_value ("__GCC_ATOMIC_SHORT_LOCK_FREE",
708 (have_swap[SWAP_INDEX (short_integer_type_node)]? 2 : 1));
709 builtin_define_with_int_value ("__GCC_ATOMIC_INT_LOCK_FREE",
710 (have_swap[SWAP_INDEX (integer_type_node)]? 2 : 1));
711 builtin_define_with_int_value ("__GCC_ATOMIC_LONG_LOCK_FREE",
712 (have_swap[SWAP_INDEX (long_integer_type_node)]? 2 : 1));
713 builtin_define_with_int_value ("__GCC_ATOMIC_LLONG_LOCK_FREE",
714 (have_swap[SWAP_INDEX (long_long_integer_type_node)]? 2 : 1));
715
57c5ab1b
RH
716 /* If we're dealing with a "set" value that doesn't exactly correspond
717 to a boolean truth value, let the library work around that. */
718 builtin_define_with_int_value ("__GCC_ATOMIC_TEST_AND_SET_TRUEVAL",
719 targetm.atomic_test_and_set_trueval);
720
62bad7cd
AM
721 /* ptr_type_node can't be used here since ptr_mode is only set when
722 toplev calls backend_init which is not done with -E or pch. */
5b8300ea 723 psize = POINTER_SIZE_UNITS;
62bad7cd
AM
724 if (psize >= SWAP_LIMIT)
725 psize = 0;
726 builtin_define_with_int_value ("__GCC_ATOMIC_POINTER_LOCK_FREE",
727 (have_swap[psize]? 2 : 1));
728}
729
9193fb05
JM
730/* Return the value for __GCC_IEC_559. */
731static int
732cpp_iec_559_value (void)
733{
734 /* The default is support for IEEE 754-2008. */
735 int ret = 2;
736
737 /* float and double must be binary32 and binary64. If they are but
738 with reversed NaN convention, at most IEEE 754-1985 is
739 supported. */
740 const struct real_format *ffmt
741 = REAL_MODE_FORMAT (TYPE_MODE (float_type_node));
742 const struct real_format *dfmt
743 = REAL_MODE_FORMAT (TYPE_MODE (double_type_node));
744 if (!ffmt->qnan_msb_set || !dfmt->qnan_msb_set)
745 ret = 1;
746 if (ffmt->b != 2
747 || ffmt->p != 24
748 || ffmt->pnan != 24
749 || ffmt->emin != -125
750 || ffmt->emax != 128
751 || ffmt->signbit_rw != 31
752 || ffmt->round_towards_zero
753 || !ffmt->has_sign_dependent_rounding
754 || !ffmt->has_nans
755 || !ffmt->has_inf
756 || !ffmt->has_denorm
757 || !ffmt->has_signed_zero
758 || dfmt->b != 2
759 || dfmt->p != 53
760 || dfmt->pnan != 53
761 || dfmt->emin != -1021
762 || dfmt->emax != 1024
763 || dfmt->signbit_rw != 63
764 || dfmt->round_towards_zero
765 || !dfmt->has_sign_dependent_rounding
766 || !dfmt->has_nans
767 || !dfmt->has_inf
768 || !dfmt->has_denorm
769 || !dfmt->has_signed_zero)
770 ret = 0;
771
772 /* In strict C standards conformance mode, consider unpredictable
6dbe0958
JM
773 excess precision to mean lack of IEEE 754 support. The same
774 applies to unpredictable contraction. For C++, and outside
775 strict conformance mode, do not consider these options to mean
776 lack of IEEE 754 support. */
9193fb05
JM
777 if (flag_iso
778 && !c_dialect_cxx ()
779 && TARGET_FLT_EVAL_METHOD != 0
254a0760 780 && flag_excess_precision_cmdline != EXCESS_PRECISION_STANDARD)
9193fb05 781 ret = 0;
6dbe0958
JM
782 if (flag_iso
783 && !c_dialect_cxx ()
784 && flag_fp_contract_mode == FP_CONTRACT_FAST)
785 ret = 0;
9193fb05
JM
786
787 /* Various options are contrary to IEEE 754 semantics. */
788 if (flag_unsafe_math_optimizations
789 || flag_associative_math
790 || flag_reciprocal_math
791 || flag_finite_math_only
792 || !flag_signed_zeros
793 || flag_single_precision_constant)
794 ret = 0;
795
796 /* If the target does not support IEEE 754 exceptions and rounding
797 modes, consider IEEE 754 support to be absent. */
798 if (!targetm.float_exceptions_rounding_supported_p ())
799 ret = 0;
800
801 return ret;
802}
803
804/* Return the value for __GCC_IEC_559_COMPLEX. */
805static int
806cpp_iec_559_complex_value (void)
807{
808 /* The value is no bigger than that of __GCC_IEC_559. */
809 int ret = cpp_iec_559_value ();
810
811 /* Some options are contrary to the required default state of the
812 CX_LIMITED_RANGE pragma. */
813 if (flag_complex_method != 2)
814 ret = 0;
815
816 return ret;
817}
818
cb60f38d
NB
819/* Hook that registers front end and target-specific built-ins. */
820void
35b1a6fa 821c_cpp_builtins (cpp_reader *pfile)
cb60f38d 822{
78a7c317
DD
823 int i;
824
cb60f38d
NB
825 /* -undef turns off target-specific built-ins. */
826 if (flag_undef)
827 return;
828
82a1c2fe
FXC
829 define_language_independent_builtin_macros (pfile);
830
831 if (c_dialect_cxx ())
832 {
833 int major;
834 parse_basever (&major, NULL, NULL);
835 cpp_define_formatted (pfile, "__GNUG__=%d", major);
836 }
cb60f38d
NB
837
838 /* For stddef.h. They require macros defined in c-common.c. */
839 c_stddef_cpp_builtins ();
840
a15f7cb8 841 /* Set include test macros for all C/C++ (not for just C++11 etc.)
42fd12b1 842 The builtins __has_include__ and __has_include_next__ are defined
a15f7cb8
ESR
843 in libcpp. */
844 cpp_define (pfile, "__has_include(STR)=__has_include__(STR)");
845 cpp_define (pfile, "__has_include_next(STR)=__has_include_next__(STR)");
846
37fa72e9 847 if (c_dialect_cxx ())
cb60f38d 848 {
c22cacf3 849 if (flag_weak && SUPPORTS_ONE_ONLY)
cb60f38d
NB
850 cpp_define (pfile, "__GXX_WEAK__=1");
851 else
852 cpp_define (pfile, "__GXX_WEAK__=0");
a15f7cb8 853
cb60f38d
NB
854 if (warn_deprecated)
855 cpp_define (pfile, "__DEPRECATED");
a15f7cb8 856
ba551ec2 857 if (flag_rtti)
42fd12b1
ESR
858 {
859 cpp_define (pfile, "__GXX_RTTI");
860 cpp_define (pfile, "__cpp_rtti=199711");
861 }
a15f7cb8 862
604b2bfc 863 if (cxx_dialect >= cxx11)
c573f4d5 864 cpp_define (pfile, "__GXX_EXPERIMENTAL_CXX0X__");
a15f7cb8
ESR
865
866 /* Binary literals have been allowed in g++ before C++11
867 and were standardized for C++14. */
868 if (!pedantic || cxx_dialect > cxx11)
869 cpp_define (pfile, "__cpp_binary_literals=201304");
94a073b2 870
2aaeea19
JM
871 /* Similarly for hexadecimal floating point literals and C++17. */
872 if (!pedantic || cpp_get_options (parse_in)->extended_numbers)
873 cpp_define (pfile, "__cpp_hex_float=201603");
874
94a073b2
JM
875 /* Arrays of runtime bound were removed from C++14, but we still
876 support GNU VLAs. Let's define this macro to a low number
877 (corresponding to the initial test release of GNU C++) if we won't
878 complain about use of VLAs. */
879 if (c_dialect_cxx ()
880 && (pedantic ? warn_vla == 0 : warn_vla <= 0))
881 cpp_define (pfile, "__cpp_runtime_arrays=198712");
882
a15f7cb8
ESR
883 if (cxx_dialect >= cxx11)
884 {
329524f5 885 /* Set feature test macros for C++11. */
13b380a3
JM
886 if (cxx_dialect <= cxx14)
887 cpp_define (pfile, "__cpp_unicode_characters=200704");
a15f7cb8
ESR
888 cpp_define (pfile, "__cpp_raw_strings=200710");
889 cpp_define (pfile, "__cpp_unicode_literals=200710");
890 cpp_define (pfile, "__cpp_user_defined_literals=200809");
891 cpp_define (pfile, "__cpp_lambdas=200907");
acaa5911
JM
892 if (cxx_dialect == cxx11)
893 cpp_define (pfile, "__cpp_constexpr=200704");
9aa36ae5
JM
894 if (cxx_dialect <= cxx14)
895 cpp_define (pfile, "__cpp_range_based_for=200907");
329524f5
PC
896 if (cxx_dialect <= cxx14)
897 cpp_define (pfile, "__cpp_static_assert=200410");
a15f7cb8
ESR
898 cpp_define (pfile, "__cpp_decltype=200707");
899 cpp_define (pfile, "__cpp_attributes=200809");
900 cpp_define (pfile, "__cpp_rvalue_reference=200610");
98d44e93 901 cpp_define (pfile, "__cpp_rvalue_references=200610");
a15f7cb8 902 cpp_define (pfile, "__cpp_variadic_templates=200704");
42fd12b1
ESR
903 cpp_define (pfile, "__cpp_initializer_lists=200806");
904 cpp_define (pfile, "__cpp_delegating_constructors=200604");
905 cpp_define (pfile, "__cpp_nsdmi=200809");
906 cpp_define (pfile, "__cpp_inheriting_constructors=200802");
907 cpp_define (pfile, "__cpp_ref_qualifiers=200710");
a15f7cb8
ESR
908 cpp_define (pfile, "__cpp_alias_templates=200704");
909 }
910 if (cxx_dialect > cxx11)
911 {
329524f5 912 /* Set feature test macros for C++14. */
a15f7cb8
ESR
913 cpp_define (pfile, "__cpp_return_type_deduction=201304");
914 cpp_define (pfile, "__cpp_init_captures=201304");
915 cpp_define (pfile, "__cpp_generic_lambdas=201304");
98e5a19a
JM
916 if (cxx_dialect <= cxx14)
917 cpp_define (pfile, "__cpp_constexpr=201304");
a15f7cb8 918 cpp_define (pfile, "__cpp_decltype_auto=201304");
26f0e1d6 919 cpp_define (pfile, "__cpp_aggregate_nsdmi=201304");
a15f7cb8
ESR
920 cpp_define (pfile, "__cpp_variable_templates=201304");
921 cpp_define (pfile, "__cpp_digit_separators=201309");
a15f7cb8 922 }
329524f5
PC
923 if (cxx_dialect > cxx14)
924 {
925 /* Set feature test macros for C++1z. */
13b380a3 926 cpp_define (pfile, "__cpp_unicode_characters=201411");
329524f5 927 cpp_define (pfile, "__cpp_static_assert=201411");
bdaaa8b7 928 cpp_define (pfile, "__cpp_namespace_attributes=201411");
13b380a3 929 cpp_define (pfile, "__cpp_enumerator_attributes=201411");
bdaaa8b7 930 cpp_define (pfile, "__cpp_nested_namespace_definitions=201411");
08a1cadc 931 cpp_define (pfile, "__cpp_fold_expressions=201603");
2a9fb712 932 cpp_define (pfile, "__cpp_nontype_template_args=201411");
9aa36ae5 933 cpp_define (pfile, "__cpp_range_based_for=201603");
98e5a19a 934 cpp_define (pfile, "__cpp_constexpr=201603");
452df4a4 935 cpp_define (pfile, "__cpp_if_constexpr=201606");
329524f5 936 }
971e17ff
AS
937 if (flag_concepts)
938 /* Use a value smaller than the 201507 specified in
939 the TS, since we don't yet support extended auto. */
940 cpp_define (pfile, "__cpp_concepts=201500");
b8fd7909
JM
941 if (flag_tm)
942 /* Use a value smaller than the 201505 specified in
943 the TS, since we don't yet support atomic_cancel. */
944 cpp_define (pfile, "__cpp_transactional_memory=210500");
a7fa8d18
ESR
945 if (flag_sized_deallocation)
946 cpp_define (pfile, "__cpp_sized_deallocation=201309");
af63ba4b
JM
947 if (aligned_new_threshhold)
948 {
949 cpp_define (pfile, "__cpp_aligned_new=201606");
950 cpp_define_formatted (pfile, "__STDCPP_DEFAULT_NEW_ALIGNMENT__=%d",
951 aligned_new_threshhold);
952 }
cb60f38d 953 }
6cd77c3f
RH
954 /* Note that we define this for C as well, so that we know if
955 __attribute__((cleanup)) will interface with EH. */
2288bdbb 956 if (flag_exceptions)
42fd12b1
ESR
957 {
958 cpp_define (pfile, "__EXCEPTIONS");
959 if (c_dialect_cxx ())
960 cpp_define (pfile, "__cpp_exceptions=199711");
961 }
cb60f38d 962
e0a21ab9 963 /* Represents the C++ ABI version, always defined so it can be used while
cb60f38d 964 preprocessing C and assembler. */
57702a80 965 if (flag_abi_version == 0)
785f21af
JM
966 /* We should have set this to something real in c_common_post_options. */
967 gcc_unreachable ();
57702a80 968 else if (flag_abi_version == 1)
1f838355 969 /* Due to a historical accident, this version had the value
57702a80
MM
970 "102". */
971 builtin_define_with_int_value ("__GXX_ABI_VERSION", 102);
972 else
e0a21ab9 973 /* Newer versions have values 1002, 1003, .... */
c22cacf3 974 builtin_define_with_int_value ("__GXX_ABI_VERSION",
57702a80 975 1000 + flag_abi_version);
cb60f38d
NB
976
977 /* libgcc needs to know this. */
677f3fa8 978 if (targetm_common.except_unwind_info (&global_options) == UI_SJLJ)
cb60f38d
NB
979 cpp_define (pfile, "__USING_SJLJ_EXCEPTIONS__");
980
207bf79d
JM
981 /* limits.h and stdint.h need to know these. */
982 builtin_define_type_max ("__SCHAR_MAX__", signed_char_type_node);
983 builtin_define_type_max ("__SHRT_MAX__", short_integer_type_node);
984 builtin_define_type_max ("__INT_MAX__", integer_type_node);
985 builtin_define_type_max ("__LONG_MAX__", long_integer_type_node);
986 builtin_define_type_max ("__LONG_LONG_MAX__", long_long_integer_type_node);
987 builtin_define_type_minmax ("__WCHAR_MIN__", "__WCHAR_MAX__",
988 underlying_wchar_type_node);
989 builtin_define_type_minmax ("__WINT_MIN__", "__WINT_MAX__", wint_type_node);
990 builtin_define_type_max ("__PTRDIFF_MAX__", ptrdiff_type_node);
991 builtin_define_type_max ("__SIZE_MAX__", size_type_node);
cb60f38d 992
c65248cb
JM
993 /* These are needed for TS 18661-1. */
994 builtin_define_type_width ("__SCHAR_WIDTH__", signed_char_type_node,
995 unsigned_char_type_node);
996 builtin_define_type_width ("__SHRT_WIDTH__", short_integer_type_node,
997 short_unsigned_type_node);
998 builtin_define_type_width ("__INT_WIDTH__", integer_type_node,
999 unsigned_type_node);
1000 builtin_define_type_width ("__LONG_WIDTH__", long_integer_type_node,
1001 long_unsigned_type_node);
1002 builtin_define_type_width ("__LONG_LONG_WIDTH__",
1003 long_long_integer_type_node,
1004 long_long_unsigned_type_node);
1005 builtin_define_type_width ("__WCHAR_WIDTH__", underlying_wchar_type_node,
1006 NULL_TREE);
1007 builtin_define_type_width ("__WINT_WIDTH__", wint_type_node, NULL_TREE);
1008 builtin_define_type_width ("__PTRDIFF_WIDTH__", ptrdiff_type_node, NULL_TREE);
1009 builtin_define_type_width ("__SIZE_WIDTH__", size_type_node, NULL_TREE);
1010
e1217ac7
DD
1011 if (c_dialect_cxx ())
1012 for (i = 0; i < NUM_INT_N_ENTS; i ++)
1013 if (int_n_enabled_p[i])
1014 {
1015 char buf[35+20+20];
1016
1017 /* These are used to configure the C++ library. */
1018
1019 if (!flag_iso || int_n_data[i].bitsize == POINTER_SIZE)
1020 {
1021 sprintf (buf, "__GLIBCXX_TYPE_INT_N_%d=__int%d", i, int_n_data[i].bitsize);
1022 cpp_define (parse_in, buf);
1023
1024 sprintf (buf, "__GLIBCXX_BITSIZE_INT_N_%d=%d", i, int_n_data[i].bitsize);
1025 cpp_define (parse_in, buf);
1026 }
1027 }
78a7c317 1028
207bf79d 1029 /* stdint.h and the testsuite need to know these. */
85291069
JM
1030 builtin_define_stdint_macros ();
1031
9193fb05
JM
1032 /* Provide information for library headers to determine whether to
1033 define macros such as __STDC_IEC_559__ and
1034 __STDC_IEC_559_COMPLEX__. */
1035 builtin_define_with_int_value ("__GCC_IEC_559", cpp_iec_559_value ());
1036 builtin_define_with_int_value ("__GCC_IEC_559_COMPLEX",
1037 cpp_iec_559_complex_value ());
1038
82a1c2fe 1039 /* float.h needs to know this. */
cb60f38d
NB
1040 builtin_define_with_int_value ("__FLT_EVAL_METHOD__",
1041 TARGET_FLT_EVAL_METHOD);
1042
9a8ce21f
JG
1043 /* And decfloat.h needs this. */
1044 builtin_define_with_int_value ("__DEC_EVAL_METHOD__",
1045 TARGET_DEC_EVAL_METHOD);
1046
1b1562a5 1047 builtin_define_float_constants ("FLT", "F", "%s", "F", float_type_node);
6ec637a4
JJ
1048 /* Cast the double precision constants. This is needed when single
1049 precision constants are specified or when pragma FLOAT_CONST_DECIMAL64
1050 is used. The correct result is computed by the compiler when using
bb0a9581
NF
1051 macros that include a cast. We use a different cast for C++ to avoid
1052 problems with -Wold-style-cast. */
1053 builtin_define_float_constants ("DBL", "L",
1054 (c_dialect_cxx ()
1055 ? "double(%s)"
1056 : "((double)%s)"),
1057 "", double_type_node);
1b1562a5
MM
1058 builtin_define_float_constants ("LDBL", "L", "%s", "L",
1059 long_double_type_node);
cb60f38d 1060
c65699ef
JM
1061 for (int i = 0; i < NUM_FLOATN_NX_TYPES; i++)
1062 {
1063 if (FLOATN_NX_TYPE_NODE (i) == NULL_TREE)
1064 continue;
1065 char prefix[20], csuffix[20];
1066 sprintf (prefix, "FLT%d%s", floatn_nx_types[i].n,
1067 floatn_nx_types[i].extended ? "X" : "");
1068 sprintf (csuffix, "F%d%s", floatn_nx_types[i].n,
1069 floatn_nx_types[i].extended ? "x" : "");
1070 builtin_define_float_constants (prefix, csuffix, "%s", NULL,
1071 FLOATN_NX_TYPE_NODE (i));
1072 }
1073
9a8ce21f
JG
1074 /* For decfloat.h. */
1075 builtin_define_decimal_float_constants ("DEC32", "DF", dfloat32_type_node);
1076 builtin_define_decimal_float_constants ("DEC64", "DD", dfloat64_type_node);
1077 builtin_define_decimal_float_constants ("DEC128", "DL", dfloat128_type_node);
1078
0f996086
CF
1079 /* For fixed-point fibt, ibit, max, min, and epsilon. */
1080 if (targetm.fixed_point_supported_p ())
1081 {
1082 builtin_define_fixed_point_constants ("SFRACT", "HR",
1083 short_fract_type_node);
1084 builtin_define_fixed_point_constants ("USFRACT", "UHR",
1085 unsigned_short_fract_type_node);
1086 builtin_define_fixed_point_constants ("FRACT", "R",
1087 fract_type_node);
1088 builtin_define_fixed_point_constants ("UFRACT", "UR",
1089 unsigned_fract_type_node);
1090 builtin_define_fixed_point_constants ("LFRACT", "LR",
1091 long_fract_type_node);
1092 builtin_define_fixed_point_constants ("ULFRACT", "ULR",
1093 unsigned_long_fract_type_node);
1094 builtin_define_fixed_point_constants ("LLFRACT", "LLR",
1095 long_long_fract_type_node);
1096 builtin_define_fixed_point_constants ("ULLFRACT", "ULLR",
1097 unsigned_long_long_fract_type_node);
1098 builtin_define_fixed_point_constants ("SACCUM", "HK",
1099 short_accum_type_node);
1100 builtin_define_fixed_point_constants ("USACCUM", "UHK",
1101 unsigned_short_accum_type_node);
1102 builtin_define_fixed_point_constants ("ACCUM", "K",
1103 accum_type_node);
1104 builtin_define_fixed_point_constants ("UACCUM", "UK",
1105 unsigned_accum_type_node);
1106 builtin_define_fixed_point_constants ("LACCUM", "LK",
1107 long_accum_type_node);
1108 builtin_define_fixed_point_constants ("ULACCUM", "ULK",
1109 unsigned_long_accum_type_node);
1110 builtin_define_fixed_point_constants ("LLACCUM", "LLK",
1111 long_long_accum_type_node);
1112 builtin_define_fixed_point_constants ("ULLACCUM", "ULLK",
1113 unsigned_long_long_accum_type_node);
1114
1115 builtin_define_fixed_point_constants ("QQ", "", qq_type_node);
1116 builtin_define_fixed_point_constants ("HQ", "", hq_type_node);
1117 builtin_define_fixed_point_constants ("SQ", "", sq_type_node);
1118 builtin_define_fixed_point_constants ("DQ", "", dq_type_node);
1119 builtin_define_fixed_point_constants ("TQ", "", tq_type_node);
1120 builtin_define_fixed_point_constants ("UQQ", "", uqq_type_node);
1121 builtin_define_fixed_point_constants ("UHQ", "", uhq_type_node);
1122 builtin_define_fixed_point_constants ("USQ", "", usq_type_node);
1123 builtin_define_fixed_point_constants ("UDQ", "", udq_type_node);
1124 builtin_define_fixed_point_constants ("UTQ", "", utq_type_node);
1125 builtin_define_fixed_point_constants ("HA", "", ha_type_node);
1126 builtin_define_fixed_point_constants ("SA", "", sa_type_node);
1127 builtin_define_fixed_point_constants ("DA", "", da_type_node);
1128 builtin_define_fixed_point_constants ("TA", "", ta_type_node);
1129 builtin_define_fixed_point_constants ("UHA", "", uha_type_node);
1130 builtin_define_fixed_point_constants ("USA", "", usa_type_node);
1131 builtin_define_fixed_point_constants ("UDA", "", uda_type_node);
1132 builtin_define_fixed_point_constants ("UTA", "", uta_type_node);
1133 }
1134
10e48e39
RO
1135 /* For libgcc-internal use only. */
1136 if (flag_building_libgcc)
53d68b9f 1137 {
66bb34c0 1138 /* Properties of floating-point modes for libgcc2.c. */
ef4bddc2 1139 for (machine_mode mode = GET_CLASS_NARROWEST_MODE (MODE_FLOAT);
66bb34c0
JM
1140 mode != VOIDmode;
1141 mode = GET_MODE_WIDER_MODE (mode))
1142 {
1143 const char *name = GET_MODE_NAME (mode);
1144 char *macro_name
1145 = (char *) alloca (strlen (name)
1146 + sizeof ("__LIBGCC__MANT_DIG__"));
1147 sprintf (macro_name, "__LIBGCC_%s_MANT_DIG__", name);
1148 builtin_define_with_int_value (macro_name,
1149 REAL_MODE_FORMAT (mode)->p);
8cc4b7a2
JM
1150 if (!targetm.scalar_mode_supported_p (mode)
1151 || !targetm.libgcc_floating_mode_supported_p (mode))
1152 continue;
1153 macro_name = (char *) alloca (strlen (name)
1154 + sizeof ("__LIBGCC_HAS__MODE__"));
1155 sprintf (macro_name, "__LIBGCC_HAS_%s_MODE__", name);
1156 cpp_define (pfile, macro_name);
dd69f047
JM
1157 macro_name = (char *) alloca (strlen (name)
1158 + sizeof ("__LIBGCC__FUNC_EXT__"));
1159 sprintf (macro_name, "__LIBGCC_%s_FUNC_EXT__", name);
6dc198e3 1160 char suffix[20] = "";
dd69f047 1161 if (mode == TYPE_MODE (double_type_node))
6dc198e3 1162 ; /* Empty suffix correct. */
dd69f047 1163 else if (mode == TYPE_MODE (float_type_node))
6dc198e3 1164 suffix[0] = 'f';
dd69f047 1165 else if (mode == TYPE_MODE (long_double_type_node))
6dc198e3 1166 suffix[0] = 'l';
dd69f047 1167 else
6dc198e3
JM
1168 {
1169 bool found_suffix = false;
1170 for (int i = 0; i < NUM_FLOATN_NX_TYPES; i++)
1171 if (FLOATN_NX_TYPE_NODE (i) != NULL_TREE
1172 && mode == TYPE_MODE (FLOATN_NX_TYPE_NODE (i)))
1173 {
1174 sprintf (suffix, "f%d%s", floatn_nx_types[i].n,
1175 floatn_nx_types[i].extended ? "x" : "");
1176 found_suffix = true;
1177 break;
1178 }
1179 gcc_assert (found_suffix);
1180 }
dd69f047 1181 builtin_define_with_value (macro_name, suffix, 0);
9a79452d
JM
1182 bool excess_precision = false;
1183 if (TARGET_FLT_EVAL_METHOD != 0
1184 && mode != TYPE_MODE (long_double_type_node)
1185 && (mode == TYPE_MODE (float_type_node)
1186 || mode == TYPE_MODE (double_type_node)))
1187 switch (TARGET_FLT_EVAL_METHOD)
1188 {
1189 case -1:
1190 case 2:
1191 excess_precision = true;
1192 break;
1193
1194 case 1:
1195 excess_precision = mode == TYPE_MODE (float_type_node);
1196 break;
1197
1198 default:
1199 gcc_unreachable ();
1200 }
1201 macro_name = (char *) alloca (strlen (name)
1202 + sizeof ("__LIBGCC__EXCESS_"
1203 "PRECISION__"));
1204 sprintf (macro_name, "__LIBGCC_%s_EXCESS_PRECISION__", name);
1205 builtin_define_with_int_value (macro_name, excess_precision);
66bb34c0
JM
1206 }
1207
53d68b9f
JM
1208 /* For libgcc crtstuff.c and libgcc2.c. */
1209 builtin_define_with_int_value ("__LIBGCC_EH_TABLES_CAN_BE_READ_ONLY__",
1210 EH_TABLES_CAN_BE_READ_ONLY);
1211#ifdef EH_FRAME_SECTION_NAME
1212 builtin_define_with_value ("__LIBGCC_EH_FRAME_SECTION_NAME__",
1213 EH_FRAME_SECTION_NAME, 1);
1214#endif
1215#ifdef JCR_SECTION_NAME
1216 builtin_define_with_value ("__LIBGCC_JCR_SECTION_NAME__",
1217 JCR_SECTION_NAME, 1);
1218#endif
1219#ifdef CTORS_SECTION_ASM_OP
1220 builtin_define_with_value ("__LIBGCC_CTORS_SECTION_ASM_OP__",
1221 CTORS_SECTION_ASM_OP, 1);
1222#endif
1223#ifdef DTORS_SECTION_ASM_OP
1224 builtin_define_with_value ("__LIBGCC_DTORS_SECTION_ASM_OP__",
1225 DTORS_SECTION_ASM_OP, 1);
1226#endif
1227#ifdef TEXT_SECTION_ASM_OP
1228 builtin_define_with_value ("__LIBGCC_TEXT_SECTION_ASM_OP__",
1229 TEXT_SECTION_ASM_OP, 1);
1230#endif
1231#ifdef INIT_SECTION_ASM_OP
1232 builtin_define_with_value ("__LIBGCC_INIT_SECTION_ASM_OP__",
1233 INIT_SECTION_ASM_OP, 1);
1234#endif
1235#ifdef INIT_ARRAY_SECTION_ASM_OP
1236 /* Despite the name of this target macro, the expansion is not
1237 actually used, and may be empty rather than a string
1238 constant. */
1239 cpp_define (pfile, "__LIBGCC_INIT_ARRAY_SECTION_ASM_OP__");
1240#endif
1241
1242 /* For libgcc enable-execute-stack.c. */
1243 builtin_define_with_int_value ("__LIBGCC_TRAMPOLINE_SIZE__",
1244 TRAMPOLINE_SIZE);
1245
1246 /* For libgcc generic-morestack.c and unwinder code. */
581edfa3
TS
1247 if (STACK_GROWS_DOWNWARD)
1248 cpp_define (pfile, "__LIBGCC_STACK_GROWS_DOWNWARD__");
53d68b9f
JM
1249
1250 /* For libgcc unwinder code. */
1251#ifdef DONT_USE_BUILTIN_SETJMP
1252 cpp_define (pfile, "__LIBGCC_DONT_USE_BUILTIN_SETJMP__");
1253#endif
1254#ifdef DWARF_ALT_FRAME_RETURN_COLUMN
1255 builtin_define_with_int_value ("__LIBGCC_DWARF_ALT_FRAME_RETURN_COLUMN__",
1256 DWARF_ALT_FRAME_RETURN_COLUMN);
1257#endif
1258 builtin_define_with_int_value ("__LIBGCC_DWARF_FRAME_REGISTERS__",
1259 DWARF_FRAME_REGISTERS);
1260#ifdef EH_RETURN_STACKADJ_RTX
1261 cpp_define (pfile, "__LIBGCC_EH_RETURN_STACKADJ_RTX__");
1262#endif
1263#ifdef JMP_BUF_SIZE
1264 builtin_define_with_int_value ("__LIBGCC_JMP_BUF_SIZE__",
1265 JMP_BUF_SIZE);
1266#endif
1267 builtin_define_with_int_value ("__LIBGCC_STACK_POINTER_REGNUM__",
1268 STACK_POINTER_REGNUM);
1269
1270 /* For libgcov. */
1271 builtin_define_with_int_value ("__LIBGCC_VTABLE_USES_DESCRIPTORS__",
1272 TARGET_VTABLE_USES_DESCRIPTORS);
1273 }
10e48e39 1274
cb60f38d
NB
1275 /* For use in assembly language. */
1276 builtin_define_with_value ("__REGISTER_PREFIX__", REGISTER_PREFIX, 0);
1277 builtin_define_with_value ("__USER_LABEL_PREFIX__", user_label_prefix, 0);
1278
1279 /* Misc. */
da1c7394
ILT
1280 if (flag_gnu89_inline)
1281 cpp_define (pfile, "__GNUC_GNU_INLINE__");
1282 else
1283 cpp_define (pfile, "__GNUC_STDC_INLINE__");
1284
e90acd93 1285 if (flag_no_inline)
cb60f38d 1286 cpp_define (pfile, "__NO_INLINE__");
cb60f38d
NB
1287
1288 if (flag_iso)
1289 cpp_define (pfile, "__STRICT_ANSI__");
1290
1291 if (!flag_signed_char)
1292 cpp_define (pfile, "__CHAR_UNSIGNED__");
1293
8df83eae 1294 if (c_dialect_cxx () && TYPE_UNSIGNED (wchar_type_node))
cb60f38d
NB
1295 cpp_define (pfile, "__WCHAR_UNSIGNED__");
1296
62bad7cd
AM
1297 cpp_atomic_builtins (pfile);
1298
d4ea4622 1299#ifdef DWARF2_UNWIND_INFO
058514b3 1300 if (dwarf2out_do_cfi_asm ())
d4ea4622
RH
1301 cpp_define (pfile, "__GCC_HAVE_DWARF2_CFI_ASM");
1302#endif
1303
cb60f38d 1304 /* Make the choice of ObjC runtime visible to source code. */
37fa72e9 1305 if (c_dialect_objc () && flag_next_runtime)
cb60f38d
NB
1306 cpp_define (pfile, "__NEXT_RUNTIME__");
1307
84b8b0e0 1308 /* Show the availability of some target pragmas. */
c54d7dc9 1309 cpp_define (pfile, "__PRAGMA_REDEFINE_EXTNAME");
84b8b0e0 1310
0ffb94cd
JW
1311 /* Make the choice of the stack protector runtime visible to source code.
1312 The macro names and values here were chosen for compatibility with an
1313 earlier implementation, i.e. ProPolice. */
5434dc07
MD
1314 if (flag_stack_protect == 4)
1315 cpp_define (pfile, "__SSP_EXPLICIT__=4");
f6bc1c4a
HS
1316 if (flag_stack_protect == 3)
1317 cpp_define (pfile, "__SSP_STRONG__=3");
7d69de61
RH
1318 if (flag_stack_protect == 2)
1319 cpp_define (pfile, "__SSP_ALL__=2");
1320 else if (flag_stack_protect == 1)
1321 cpp_define (pfile, "__SSP__=1");
1322
41dbbb37
TS
1323 if (flag_openacc)
1324 cpp_define (pfile, "_OPENACC=201306");
1325
953ff289 1326 if (flag_openmp)
d9a6bd32 1327 cpp_define (pfile, "_OPENMP=201511");
953ff289 1328
78a7c317
DD
1329 for (i = 0; i < NUM_INT_N_ENTS; i ++)
1330 if (int_n_enabled_p[i])
1331 {
1332 char buf[15+20];
1333 sprintf(buf, "__SIZEOF_INT%d__", int_n_data[i].bitsize);
1334 builtin_define_type_sizeof (buf,
1335 int_n_trees[i].signed_type);
1336 }
024a85ae
AK
1337 builtin_define_type_sizeof ("__SIZEOF_WCHAR_T__", wchar_type_node);
1338 builtin_define_type_sizeof ("__SIZEOF_WINT_T__", wint_type_node);
1339 builtin_define_type_sizeof ("__SIZEOF_PTRDIFF_T__",
1340 unsigned_ptrdiff_type_node);
024a85ae 1341
cb60f38d
NB
1342 /* A straightforward target hook doesn't work, because of problems
1343 linking that hook's body when part of non-C front ends. */
1344# define preprocessing_asm_p() (cpp_get_options (pfile)->lang == CLK_ASM)
1345# define preprocessing_trad_p() (cpp_get_options (pfile)->traditional)
1346# define builtin_define(TXT) cpp_define (pfile, TXT)
1347# define builtin_assert(TXT) cpp_assert (pfile, TXT)
1348 TARGET_CPU_CPP_BUILTINS ();
1349 TARGET_OS_CPP_BUILTINS ();
4e2e315f 1350 TARGET_OBJFMT_CPP_BUILTINS ();
63c5b495
MM
1351
1352 /* Support the __declspec keyword by turning them into attributes.
1353 Note that the current way we do this may result in a collision
1354 with predefined attributes later on. This can be solved by using
1355 one attribute, say __declspec__, and passing args to it. The
1356 problem with that approach is that args are not accumulated: each
1357 new appearance would clobber any existing args. */
1358 if (TARGET_DECLSPEC)
1359 builtin_define ("__declspec(x)=__attribute__((x))");
79b87c74 1360
589dd995
JJ
1361 /* If decimal floating point is supported, tell the user if the
1362 alternate format (BID) is used instead of the standard (DPD)
1363 format. */
1364 if (ENABLE_DECIMAL_FLOAT && ENABLE_DECIMAL_BID_FORMAT)
1365 cpp_define (pfile, "__DECIMAL_BID_FORMAT__");
cb60f38d
NB
1366}
1367
1368/* Pass an object-like macro. If it doesn't lie in the user's
1369 namespace, defines it unconditionally. Otherwise define a version
1370 with two leading underscores, and another version with two leading
1371 and trailing underscores, and define the original only if an ISO
1372 standard was not nominated.
1373
1374 e.g. passing "unix" defines "__unix", "__unix__" and possibly
1375 "unix". Passing "_mips" defines "__mips", "__mips__" and possibly
1376 "_mips". */
21282b1e 1377void
35b1a6fa 1378builtin_define_std (const char *macro)
cb60f38d
NB
1379{
1380 size_t len = strlen (macro);
cceb1885 1381 char *buff = (char *) alloca (len + 5);
cb60f38d
NB
1382 char *p = buff + 2;
1383 char *q = p + len;
1384
1385 /* prepend __ (or maybe just _) if in user's namespace. */
1386 memcpy (p, macro, len + 1);
1387 if (!( *p == '_' && (p[1] == '_' || ISUPPER (p[1]))))
1388 {
1389 if (*p != '_')
1390 *--p = '_';
1391 if (p[1] != '_')
1392 *--p = '_';
1393 }
1394 cpp_define (parse_in, p);
1395
1396 /* If it was in user's namespace... */
1397 if (p != buff + 2)
1398 {
1399 /* Define the macro with leading and following __. */
1400 if (q[-1] != '_')
1401 *q++ = '_';
1402 if (q[-2] != '_')
1403 *q++ = '_';
1404 *q = '\0';
1405 cpp_define (parse_in, p);
1406
1407 /* Finally, define the original macro if permitted. */
1408 if (!flag_iso)
1409 cpp_define (parse_in, macro);
1410 }
1411}
1412
1413/* Pass an object-like macro and a value to define it to. The third
1414 parameter says whether or not to turn the value into a string
1415 constant. */
1416void
35b1a6fa 1417builtin_define_with_value (const char *macro, const char *expansion, int is_str)
cb60f38d
NB
1418{
1419 char *buf;
1420 size_t mlen = strlen (macro);
1421 size_t elen = strlen (expansion);
1422 size_t extra = 2; /* space for an = and a NUL */
1423
1424 if (is_str)
53d68b9f
JM
1425 {
1426 char *quoted_expansion = (char *) alloca (elen * 4 + 1);
1427 const char *p;
1428 char *q;
1429 extra += 2; /* space for two quote marks */
1430 for (p = expansion, q = quoted_expansion; *p; p++)
1431 {
1432 switch (*p)
1433 {
1434 case '\n':
1435 *q++ = '\\';
1436 *q++ = 'n';
1437 break;
1438
1439 case '\t':
1440 *q++ = '\\';
1441 *q++ = 't';
1442 break;
1443
1444 case '\\':
1445 *q++ = '\\';
1446 *q++ = '\\';
1447 break;
1448
1449 case '"':
1450 *q++ = '\\';
1451 *q++ = '"';
1452 break;
1453
1454 default:
1455 if (ISPRINT ((unsigned char) *p))
1456 *q++ = *p;
1457 else
1458 {
1459 sprintf (q, "\\%03o", (unsigned char) *p);
1460 q += 4;
1461 }
1462 }
1463 }
1464 *q = '\0';
1465 expansion = quoted_expansion;
1466 elen = q - expansion;
1467 }
cb60f38d 1468
cceb1885 1469 buf = (char *) alloca (mlen + elen + extra);
cb60f38d
NB
1470 if (is_str)
1471 sprintf (buf, "%s=\"%s\"", macro, expansion);
1472 else
1473 sprintf (buf, "%s=%s", macro, expansion);
1474
1475 cpp_define (parse_in, buf);
1476}
1477
cb60f38d
NB
1478
1479/* Pass an object-like macro and an integer value to define it to. */
7049e4eb 1480void
35b1a6fa 1481builtin_define_with_int_value (const char *macro, HOST_WIDE_INT value)
cb60f38d
NB
1482{
1483 char *buf;
1484 size_t mlen = strlen (macro);
1485 size_t vlen = 18;
1486 size_t extra = 2; /* space for = and NUL. */
1487
cceb1885 1488 buf = (char *) alloca (mlen + vlen + extra);
cb60f38d
NB
1489 memcpy (buf, macro, mlen);
1490 buf[mlen] = '=';
1491 sprintf (buf + mlen + 1, HOST_WIDE_INT_PRINT_DEC, value);
1492
1493 cpp_define (parse_in, buf);
1494}
1495
8e680db5
JJ
1496/* builtin_define_with_hex_fp_value is very expensive, so the following
1497 array and function allows it to be done lazily when __DBL_MAX__
1498 etc. is first used. */
1499
5bca794b 1500struct GTY(()) lazy_hex_fp_value_struct
8e680db5
JJ
1501{
1502 const char *hex_str;
1503 cpp_macro *macro;
ef4bddc2 1504 machine_mode mode;
8e680db5
JJ
1505 int digits;
1506 const char *fp_suffix;
5bca794b
JJ
1507};
1508static GTY(()) struct lazy_hex_fp_value_struct lazy_hex_fp_values[12];
1509static GTY(()) int lazy_hex_fp_value_count;
8e680db5
JJ
1510
1511static bool
1512lazy_hex_fp_value (cpp_reader *pfile ATTRIBUTE_UNUSED,
1513 cpp_hashnode *node)
1514{
1515 REAL_VALUE_TYPE real;
1516 char dec_str[64], buf1[256];
1517 unsigned int idx;
1518 if (node->value.builtin < BT_FIRST_USER
1519 || (int) node->value.builtin >= BT_FIRST_USER + lazy_hex_fp_value_count)
1520 return false;
1521
1522 idx = node->value.builtin - BT_FIRST_USER;
1523 real_from_string (&real, lazy_hex_fp_values[idx].hex_str);
1524 real_to_decimal_for_mode (dec_str, &real, sizeof (dec_str),
1525 lazy_hex_fp_values[idx].digits, 0,
1526 lazy_hex_fp_values[idx].mode);
1527
1528 sprintf (buf1, "%s%s", dec_str, lazy_hex_fp_values[idx].fp_suffix);
1529 node->flags &= ~(NODE_BUILTIN | NODE_USED);
1530 node->value.macro = lazy_hex_fp_values[idx].macro;
1531 for (idx = 0; idx < node->value.macro->count; idx++)
1532 if (node->value.macro->exp.tokens[idx].type == CPP_NUMBER)
1533 break;
1534 gcc_assert (idx < node->value.macro->count);
1535 node->value.macro->exp.tokens[idx].val.str.len = strlen (buf1);
1536 node->value.macro->exp.tokens[idx].val.str.text
5bca794b 1537 = (const unsigned char *) ggc_strdup (buf1);
8e680db5
JJ
1538 return true;
1539}
1540
cb60f38d
NB
1541/* Pass an object-like macro a hexadecimal floating-point value. */
1542static void
35b1a6fa 1543builtin_define_with_hex_fp_value (const char *macro,
3e479de3 1544 tree type, int digits,
b8698a0f 1545 const char *hex_str,
264c41ed
CD
1546 const char *fp_suffix,
1547 const char *fp_cast)
cb60f38d
NB
1548{
1549 REAL_VALUE_TYPE real;
264c41ed 1550 char dec_str[64], buf1[256], buf2[256];
cb60f38d 1551
8e680db5
JJ
1552 /* This is very expensive, so if possible expand them lazily. */
1553 if (lazy_hex_fp_value_count < 12
1554 && flag_dump_macros == 0
1555 && !cpp_get_options (parse_in)->traditional)
1556 {
1557 struct cpp_hashnode *node;
1558 if (lazy_hex_fp_value_count == 0)
1559 cpp_get_callbacks (parse_in)->user_builtin_macro = lazy_hex_fp_value;
1560 sprintf (buf2, fp_cast, "1.1");
1561 sprintf (buf1, "%s=%s", macro, buf2);
1562 cpp_define (parse_in, buf1);
1563 node = C_CPP_HASHNODE (get_identifier (macro));
5bca794b
JJ
1564 lazy_hex_fp_values[lazy_hex_fp_value_count].hex_str
1565 = ggc_strdup (hex_str);
8e680db5
JJ
1566 lazy_hex_fp_values[lazy_hex_fp_value_count].mode = TYPE_MODE (type);
1567 lazy_hex_fp_values[lazy_hex_fp_value_count].digits = digits;
1568 lazy_hex_fp_values[lazy_hex_fp_value_count].fp_suffix = fp_suffix;
1569 lazy_hex_fp_values[lazy_hex_fp_value_count].macro = node->value.macro;
1570 node->flags |= NODE_BUILTIN;
b49cf425
JR
1571 node->value.builtin
1572 = (enum cpp_builtin_type) (BT_FIRST_USER + lazy_hex_fp_value_count);
8e680db5
JJ
1573 lazy_hex_fp_value_count++;
1574 return;
1575 }
1576
cb60f38d
NB
1577 /* Hex values are really cool and convenient, except that they're
1578 not supported in strict ISO C90 mode. First, the "p-" sequence
1579 is not valid as part of a preprocessor number. Second, we get a
1580 pedwarn from the preprocessor, which has no context, so we can't
1581 suppress the warning with __extension__.
1582
35b1a6fa 1583 So instead what we do is construct the number in hex (because
cb60f38d
NB
1584 it's easy to get the exact correct value), parse it as a real,
1585 then print it back out as decimal. */
1586
1587 real_from_string (&real, hex_str);
3e479de3
UW
1588 real_to_decimal_for_mode (dec_str, &real, sizeof (dec_str), digits, 0,
1589 TYPE_MODE (type));
cb60f38d 1590
264c41ed
CD
1591 /* Assemble the macro in the following fashion
1592 macro = fp_cast [dec_str fp_suffix] */
1593 sprintf (buf1, "%s%s", dec_str, fp_suffix);
1594 sprintf (buf2, fp_cast, buf1);
1595 sprintf (buf1, "%s=%s", macro, buf2);
b8698a0f 1596
264c41ed 1597 cpp_define (parse_in, buf1);
cb60f38d
NB
1598}
1599
207bf79d
JM
1600/* Return a string constant for the suffix for a value of type TYPE
1601 promoted according to the integer promotions. The type must be one
1602 of the standard integer type nodes. */
1603
1604static const char *
1605type_suffix (tree type)
1606{
1607 static const char *const suffixes[] = { "", "U", "L", "UL", "LL", "ULL" };
1608 int unsigned_suffix;
1609 int is_long;
78a7c317 1610 int tp = TYPE_PRECISION (type);
207bf79d
JM
1611
1612 if (type == long_long_integer_type_node
78a7c317
DD
1613 || type == long_long_unsigned_type_node
1614 || tp > TYPE_PRECISION (long_integer_type_node))
207bf79d
JM
1615 is_long = 2;
1616 else if (type == long_integer_type_node
78a7c317
DD
1617 || type == long_unsigned_type_node
1618 || tp > TYPE_PRECISION (integer_type_node))
207bf79d
JM
1619 is_long = 1;
1620 else if (type == integer_type_node
1621 || type == unsigned_type_node
1622 || type == short_integer_type_node
1623 || type == short_unsigned_type_node
1624 || type == signed_char_type_node
1625 || type == unsigned_char_type_node
1626 /* ??? "char" is not a signed or unsigned integer type and
1627 so is not permitted for the standard typedefs, but some
1628 systems use it anyway. */
1629 || type == char_type_node)
1630 is_long = 0;
1631 else
1632 gcc_unreachable ();
1633
1634 unsigned_suffix = TYPE_UNSIGNED (type);
1635 if (TYPE_PRECISION (type) < TYPE_PRECISION (integer_type_node))
1636 unsigned_suffix = 0;
1637 return suffixes[is_long * 2 + unsigned_suffix];
1638}
1639
1640/* Define MACRO as a <stdint.h> constant-suffix macro for TYPE. */
1641static void
1642builtin_define_constants (const char *macro, tree type)
1643{
1644 const char *suffix;
1645 char *buf;
1646
1647 suffix = type_suffix (type);
1648
1649 if (suffix[0] == 0)
1650 {
1651 buf = (char *) alloca (strlen (macro) + 6);
1652 sprintf (buf, "%s(c)=c", macro);
1653 }
1654 else
1655 {
1656 buf = (char *) alloca (strlen (macro) + 9 + strlen (suffix) + 1);
1657 sprintf (buf, "%s(c)=c ## %s", macro, suffix);
1658 }
1659
1660 cpp_define (parse_in, buf);
1661}
1662
1663/* Define MAX for TYPE based on the precision of the type. */
1664
1665static void
1666builtin_define_type_max (const char *macro, tree type)
1667{
1668 builtin_define_type_minmax (NULL, macro, type);
1669}
1670
ca49b74e
DD
1671/* Given a value with COUNT LSBs set, fill BUF with a hexidecimal
1672 representation of that value. For example, a COUNT of 10 would
1673 return "0x3ff". */
1674
1675static void
1676print_bits_of_hex (char *buf, int bufsz, int count)
1677{
1678 gcc_assert (bufsz > 3);
1679 *buf++ = '0';
1680 *buf++ = 'x';
1681 bufsz -= 2;
1682
1683 gcc_assert (count > 0);
1684
1685 switch (count % 4) {
1686 case 0:
1687 break;
1688 case 1:
1689 *buf++ = '1';
1690 bufsz --;
1691 count -= 1;
1692 break;
1693 case 2:
1694 *buf++ = '3';
1695 bufsz --;
1696 count -= 2;
1697 break;
1698 case 3:
1699 *buf++ = '7';
1700 bufsz --;
1701 count -= 3;
1702 break;
1703 }
1704 while (count >= 4)
1705 {
1706 gcc_assert (bufsz > 1);
1707 *buf++ = 'f';
1708 bufsz --;
1709 count -= 4;
1710 }
1711 gcc_assert (bufsz > 0);
1712 *buf++ = 0;
1713}
1714
207bf79d
JM
1715/* Define MIN_MACRO (if not NULL) and MAX_MACRO for TYPE based on the
1716 precision of the type. */
cb60f38d
NB
1717
1718static void
207bf79d
JM
1719builtin_define_type_minmax (const char *min_macro, const char *max_macro,
1720 tree type)
cb60f38d 1721{
ca49b74e
DD
1722#define PBOH_SZ (MAX_BITSIZE_MODE_ANY_INT/4+4)
1723 char value[PBOH_SZ];
1724
1725 const char *suffix;
cb60f38d 1726 char *buf;
ca49b74e 1727 int bits;
cb60f38d 1728
ca49b74e
DD
1729 bits = TYPE_PRECISION (type) + (TYPE_UNSIGNED (type) ? 0 : -1);
1730
1731 print_bits_of_hex (value, PBOH_SZ, bits);
cb60f38d 1732
207bf79d 1733 suffix = type_suffix (type);
cb60f38d 1734
207bf79d 1735 buf = (char *) alloca (strlen (max_macro) + 1 + strlen (value)
cceb1885 1736 + strlen (suffix) + 1);
207bf79d 1737 sprintf (buf, "%s=%s%s", max_macro, value, suffix);
cb60f38d
NB
1738
1739 cpp_define (parse_in, buf);
207bf79d
JM
1740
1741 if (min_macro)
1742 {
1743 if (TYPE_UNSIGNED (type))
1744 {
1745 buf = (char *) alloca (strlen (min_macro) + 2 + strlen (suffix) + 1);
1746 sprintf (buf, "%s=0%s", min_macro, suffix);
1747 }
1748 else
1749 {
1750 buf = (char *) alloca (strlen (min_macro) + 3
1751 + strlen (max_macro) + 6);
1752 sprintf (buf, "%s=(-%s - 1)", min_macro, max_macro);
1753 }
1754 cpp_define (parse_in, buf);
1755 }
cb60f38d 1756}
5bca794b 1757
c65248cb
JM
1758/* Define WIDTH_MACRO for the width of TYPE. If TYPE2 is not NULL,
1759 both types must have the same width. */
1760
1761static void
1762builtin_define_type_width (const char *width_macro, tree type, tree type2)
1763{
1764 if (type2 != NULL_TREE)
1765 gcc_assert (TYPE_PRECISION (type) == TYPE_PRECISION (type2));
1766 builtin_define_with_int_value (width_macro, TYPE_PRECISION (type));
1767}
1768
5bca794b 1769#include "gt-c-family-c-cppbuiltin.h"