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