123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201 |
- /* Definitions of C specific functions for GNU compiler.
- Copyright (C) 2002-2015 Free Software Foundation, Inc.
- Contributed by Steve Ellcey <sje@cup.hp.com>
- This file is part of GCC.
- GCC is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3, or (at your option)
- any later version.
- GCC is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
- You should have received a copy of the GNU General Public License
- along with GCC; see the file COPYING3. If not see
- <http://www.gnu.org/licenses/>. */
- #include "config.h"
- #include "system.h"
- #include "coretypes.h"
- #include "tm.h"
- #include "hash-set.h"
- #include "machmode.h"
- #include "vec.h"
- #include "double-int.h"
- #include "input.h"
- #include "alias.h"
- #include "symtab.h"
- #include "wide-int.h"
- #include "inchash.h"
- #include "tree.h"
- #include "stringpool.h"
- #include "cpplib.h"
- #include "c-family/c-common.h"
- #include "c-family/c-pragma.h"
- #include "diagnostic-core.h"
- #include "tm_p.h"
- static void ia64_hpux_add_pragma_builtin (tree func);
- void
- ia64_hpux_handle_builtin_pragma (cpp_reader *pfile ATTRIBUTE_UNUSED)
- {
- /* #pragma builtin name, name, name */
- enum cpp_ttype type;
- tree x;
- type = pragma_lex (&x);
- while (type == CPP_NAME)
- {
- ia64_hpux_add_pragma_builtin (x);
- type = pragma_lex (&x);
- if (type == CPP_COMMA)
- type = pragma_lex (&x);
- }
- if (type != CPP_EOF)
- warning (OPT_Wpragmas, "malformed #pragma builtin");
- }
- /* List of standard math functions which do not set matherr by default
- and which have a different version which does set errno and which we
- want to call *if* we have seen an extern for the routine and we have
- asked for strict C89 compatibility. */
- typedef struct c89_mathlib_names
- {
- const char *realname; /* User visible function name. */
- const char *c89name; /* libm special name needed to set errno. */
- } c89_mathlib_names;
- static const c89_mathlib_names c89_mathlib_name_list [] =
- {
- {"acos", "_Acos_e#"},
- {"acosd", "_Acosd_e#"},
- {"acosdf", "_Acosdf_e#"},
- {"acosdl", "_Acosdl_e#"},
- {"acosdw", "_Acosdw_e#"},
- {"acosf", "_Acosf_e#"},
- {"acosh", "_Acosh_e#"},
- {"acoshf", "_Acoshf_e#"},
- {"acoshl", "_Acoshl_e#"},
- {"acoshw", "_Acoshw_e#"},
- {"acosl", "_Acosl_e#"},
- {"acosw", "_Acosw_e#"},
- {"asin", "_Asin_e#"},
- {"asind", "_Asind_e#"},
- {"asindf", "_Asindf_e#"},
- {"asindl", "_Asindl_e#"},
- {"asindw", "_Asindw_e#"},
- {"asinf", "_Asinf_e#"},
- {"asinl", "_Asinl_e#"},
- {"asinw", "_Asinw_e#"},
- {"atanh", "_Atanh_e#"},
- {"atanhf", "_Atanhf_e#"},
- {"atanhl", "_Atanhl_e#"},
- {"atanhw", "_Atanhw_e#"},
- {"cosh", "_Cosh_e#"},
- {"coshf", "_Coshf_e#"},
- {"coshl", "_Coshl_e#"},
- {"coshw", "_Coshw_e#"},
- {"exp2", "_Exp2_e#"},
- {"exp2f", "_Exp2f_e#"},
- {"exp2l", "_Exp2l_e#"},
- {"exp2w", "_Exp2w_e#"},
- {"exp", "_Exp_e#"},
- {"expf", "_Expf_e#"},
- {"expl", "_Expl_e#"},
- {"expm1", "_Expm1_e#"},
- {"expm1f", "_Expm1f_e#"},
- {"expm1l", "_Expm1l_e#"},
- {"expm1w", "_Expm1w_e#"},
- {"expw", "_Expw_e#"},
- {"fmod", "_Fmod_e#"},
- {"fmodf", "_Fmodf_e#"},
- {"fmodl", "_Fmodl_e#"},
- {"fmodw", "_Fmodw_e#"},
- {"gamma", "_Gamma_e#"},
- {"gammaf", "_Gammaf_e#"},
- {"gammal", "_Gammal_e#"},
- {"gammaw", "_Gammaw_e#"},
- {"ldexp", "_Ldexp_e#"},
- {"ldexpf", "_Ldexpf_e#"},
- {"ldexpl", "_Ldexpl_e#"},
- {"ldexpw", "_Ldexpw_e#"},
- {"lgamma", "_Lgamma_e#"},
- {"lgammaf", "_Lgammaf_e#"},
- {"lgammal", "_Lgammal_e#"},
- {"lgammaw", "_Lgammaw_e#"},
- {"log10", "_Log10_e#"},
- {"log10f", "_Log10f_e#"},
- {"log10l", "_Log10l_e#"},
- {"log10w", "_Log10w_e#"},
- {"log1p", "_Log1p_e#"},
- {"log1pf", "_Log1pf_e#"},
- {"log1pl", "_Log1pl_e#"},
- {"log1pw", "_Log1pw_e#"},
- {"log2", "_Log2_e#"},
- {"log2f", "_Log2f_e#"},
- {"log2l", "_Log2l_e#"},
- {"log2w", "_Log2w_e#"},
- {"log", "_Log_e#"},
- {"logb", "_Logb_e#"},
- {"logbf", "_Logbf_e#"},
- {"logbl", "_Logbl_e#"},
- {"logbw", "_Logbw_e#"},
- {"logf", "_Logf_e#"},
- {"logl", "_Logl_e#"},
- {"logw", "_Logw_e#"},
- {"nextafter", "_Nextafter_e#"},
- {"nextafterf", "_Nextafterf_e#"},
- {"nextafterl", "_Nextafterl_e#"},
- {"nextafterw", "_Nextafterw_e#"},
- {"pow", "_Pow_e#"},
- {"powf", "_Powf_e#"},
- {"powl", "_Powl_e#"},
- {"poww", "_Poww_e#"},
- {"remainder", "_Remainder_e#"},
- {"remainderf", "_Remainderf_e#"},
- {"remainderl", "_Remainderl_e#"},
- {"remainderw", "_Remainderw_e#"},
- {"scalb", "_Scalb_e#"},
- {"scalbf", "_Scalbf_e#"},
- {"scalbl", "_Scalbl_e#"},
- {"scalbw", "_Scalbw_e#"},
- {"sinh", "_Sinh_e#"},
- {"sinhf", "_Sinhf_e#"},
- {"sinhl", "_Sinhl_e#"},
- {"sinhw", "_Sinhw_e#"},
- {"sqrt", "_Sqrt_e#"},
- {"sqrtf", "_Sqrtf_e#"},
- {"sqrtl", "_Sqrtl_e#"},
- {"sqrtw", "_Sqrtw_e#"},
- {"tgamma", "_Tgamma_e#"},
- {"tgammaf", "_Tgammaf_e#"},
- {"tgammal", "_Tgammal_e#"},
- {"tgammaw", "_Tgammaw_e#"}
- };
- static void
- ia64_hpux_add_pragma_builtin (tree func)
- {
- size_t i;
- if (!flag_isoc94 && flag_iso)
- {
- for (i = 0; i < ARRAY_SIZE (c89_mathlib_name_list); i++)
- {
- if (!strcmp(c89_mathlib_name_list[i].realname,
- IDENTIFIER_POINTER (func)))
- {
- add_to_renaming_pragma_list(func,
- get_identifier(c89_mathlib_name_list[i].c89name));
- }
- }
- }
- }
|