diff options
author | peter <peter@FreeBSD.org> | 2008-06-01 00:03:21 +0000 |
---|---|---|
committer | peter <peter@FreeBSD.org> | 2008-06-01 00:03:21 +0000 |
commit | a2be5f0c15218b0177d73b17d9bcb7589965d685 (patch) | |
tree | c9f0cd9c22378356a1716d32e13e70bc90f98b9c /libstdc++/libmath/mathconf.h | |
parent | 9e0f3cc19c9df1594c9cc36cfd8fddc83c52ad12 (diff) | |
download | FreeBSD-src-a2be5f0c15218b0177d73b17d9bcb7589965d685.zip FreeBSD-src-a2be5f0c15218b0177d73b17d9bcb7589965d685.tar.gz |
Reorganize the gcc vendor import work area. This flattens out a bunch
of unnecessary path components that are relics of cvs2svn.
(These are directory moves)
Diffstat (limited to 'libstdc++/libmath/mathconf.h')
-rw-r--r-- | libstdc++/libmath/mathconf.h | 309 |
1 files changed, 309 insertions, 0 deletions
diff --git a/libstdc++/libmath/mathconf.h b/libstdc++/libmath/mathconf.h new file mode 100644 index 0000000..be8e96a --- /dev/null +++ b/libstdc++/libmath/mathconf.h @@ -0,0 +1,309 @@ +/* Configuration data for libmath subpart of libstdc++. */ + +/* Copyright (C) 1997-1999, 2000, 2001 Free Software Foundation, Inc. + + This file is part of the GNU ISO C++ Library. This library 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 2, or (at your option) + any later version. + + This library 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 this library; see the file COPYING. If not, write to the Free + Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, + USA. + + As a special exception, you may use this file as part of a free software + library without restriction. Specifically, if other files instantiate + templates or use macros or inline functions from this file, or you compile + this file and link it with other files to produce an executable, this + file does not by itself cause the resulting executable to be covered by + the GNU General Public License. This exception does not however + invalidate any other reasons why the executable file might be covered by + the GNU General Public License. */ + + +#include <config.h> + +#ifdef HAVE_ENDIAN_H +# include <endian.h> +#else +# ifdef HAVE_MACHINE_ENDIAN_H +# ifdef HAVE_SYS_TYPES_H +# include <sys/types.h> +# endif +# include <machine/endian.h> +# else +# ifdef HAVE_SYS_MACHINE_H +# include <sys/machine.h> +# else +# if defined HAVE_SYS_ISA_DEFS_H || defined HAVE_MACHINE_PARAM_H +/* This is on Solaris. */ +# ifdef HAVE_SYS_ISA_DEFS_H +# include <sys/isa_defs.h> +# endif +# ifdef HAVE_MACHINE_PARAM_H +# include <machine/param.h> +# endif +# ifdef _LITTLE_ENDIAN +# define LITTLE_ENDIAN 1 +# endif +# ifdef _BIG_ENDIAN +# define BIG_ENDIAN 1 +# endif +# define BYTE_ORDER 1 +# else +/* We have to rely on the AC_C_BIGENDIAN test. */ +# ifdef WORDS_BIGENDIAN +# define BIG_ENDIAN 1 +# else +# define LITTLE_ENDIAN 1 +# endif +# define BYTE_ORDER 1 +# endif +# endif +# endif +#endif + +typedef unsigned int U_int32_t __attribute ((mode (SI))); +typedef int Int32_t __attribute ((mode (SI))); +typedef unsigned int U_int64_t __attribute ((mode (DI))); +typedef int Int64_t __attribute ((mode (DI))); + +#ifdef HAVE_NAN_H +# include <nan.h> +#endif + +#ifdef HAVE_IEEEFP_H +# include <ieeefp.h> +#endif + +#ifdef HAVE_FP_H +# include <fp.h> +#endif + +#ifdef HAVE_FLOAT_H +# include <float.h> +#endif + +/* `float' variant of HUGE_VAL. */ +#ifndef HUGE_VALF +# ifdef HUGE_VALf +# define HUGE_VALF HUGE_VALf +# else +# define HUGE_VALF HUGE_VAL +# endif +#endif + +/* `long double' variant of HUGE_VAL. */ +#ifndef HUGE_VALL +# ifdef HUGE_VALl +# define HUGE_VALL HUGE_VALl +# else +# define HUGE_VALL HUGE_VAL +# endif +#endif + +/* Make sure that at least HUGE_VAL is defined. */ +#ifndef HUGE_VAL +# ifdef HUGE +# define HUGE_VAL HUGE +# else +# ifdef MAXFLOAT +# define HUGE_VAL MAXFLOAT +# else +# error "We need HUGE_VAL!" +# endif +# endif +#endif + +#ifndef M_PI +# define M_PI 3.14159265358979323846 +#endif + + +#ifdef __cplusplus +extern "C" { +#endif + +/* signbit is a macro in ISO C99. */ +#ifndef signbit +extern int __signbitf (float); +extern int __signbit (double); +extern int __signbitl (long double); + +# define signbit(x) \ + (sizeof (x) == sizeof (float) ? \ + __signbitf (x) \ + : sizeof (x) == sizeof (double) ? \ + __signbit (x) : __signbitl (x)) +#endif + +#if BYTE_ORDER == BIG_ENDIAN +typedef union +{ + double value; + struct + { + U_int32_t msw; + U_int32_t lsw; + } parts; +} ieee_double_shape_type; +#endif +#if BYTE_ORDER == LITTLE_ENDIAN +typedef union +{ + double value; + struct + { + U_int32_t lsw; + U_int32_t msw; + } parts; +} ieee_double_shape_type; +#endif +/* Get the more significant 32 bit int from a double. */ +#define GET_HIGH_WORD(i,d) \ +do { \ + ieee_double_shape_type gh_u; \ + gh_u.value = (d); \ + (i) = gh_u.parts.msw; \ +} while (0) + + +typedef union +{ + float value; + U_int32_t word; +} ieee_float_shape_type; +/* Get a 32 bit int from a float. */ +#define GET_FLOAT_WORD(i,d) \ +do { \ + ieee_float_shape_type gf_u; \ + gf_u.value = (d); \ + (i) = gf_u.word; \ +} while (0) + + +#if BYTE_ORDER == BIG_ENDIAN +typedef union +{ + long double value; + struct + { + unsigned int sign_exponent:16; + unsigned int empty:16; + U_int32_t msw; + U_int32_t lsw; + } parts; +} ieee_long_double_shape_type; +#endif +#if BYTE_ORDER == LITTLE_ENDIAN +typedef union +{ + long double value; + struct + { + U_int32_t lsw; + U_int32_t msw; + unsigned int sign_exponent:16; + unsigned int empty:16; + } parts; +} ieee_long_double_shape_type; +#endif +/* Get int from the exponent of a long double. */ +#define GET_LDOUBLE_EXP(exp,d) \ +do { \ + ieee_long_double_shape_type ge_u; \ + ge_u.value = (d); \ + (exp) = ge_u.parts.sign_exponent; \ +} while (0) + +#if BYTE_ORDER == BIG_ENDIAN +typedef union +{ + long double value; + struct + { + U_int64_t msw; + U_int64_t lsw; + } parts64; + struct + { + U_int32_t w0, w1, w2, w3; + } parts32; +} ieee_quad_double_shape_type; +#endif +#if BYTE_ORDER == LITTLE_ENDIAN +typedef union +{ + long double value; + struct + { + U_int64_t lsw; + U_int64_t msw; + } parts64; + struct + { + U_int32_t w3, w2, w1, w0; + } parts32; +} ieee_quad_double_shape_type; +#endif +/* Get most significant 64 bit int from a quad long double. */ +#define GET_LDOUBLE_MSW64(msw,d) \ +do { \ + ieee_quad_double_shape_type qw_u; \ + qw_u.value = (d); \ + (msw) = qw_u.parts64.msw; \ +} while (0) + + +/* Replacement for non-existing float functions. */ +#if !defined(HAVE_FABSF) && !defined(HAVE___BUILTIN_FABSF) +# define fabsf(x) fabs (x) +#endif +#if !defined(HAVE_COSF) && !defined(HAVE___BUILTIN_COSF) +# define cosf(x) cos (x) +#endif +#ifndef HAVE_COSHF +# define coshf(x) cosh (x) +#endif +#ifndef HAVE_EXPF +# define expf(x) expf (x) +#endif +#ifndef HAVE_LOGF +# define logf(x) log(x) +#endif +#ifndef HAVE_LOG10F +# define log10f(x) log10 (x) +#endif +#ifndef HAVE_POWF +# define powf(x, y) pow (x, y) +#endif +#if !defined(HAVE_SINF) && !defined(HAVE___BUILTIN_SINF) +# define sinf(x) sin (x) +#endif +#ifndef HAVE_SINHF +# define sinhf(x) sinh (x) +#endif +#if !defined(HAVE_SQRTF) && !defined(HAVE___BUILTIN_SQRTF) +# define sqrtf(x) sqrt (x) +#endif +#ifndef HAVE_TANF +# define tanf(x) tan (x) +#endif +#ifndef HAVE_TANHF +# define tanhf(x) tanh (x) +#endif +#ifndef HAVE_STRTOF +# define strtof(s, e) strtod (s, e) +#endif + +#ifdef __cplusplus +} +#endif + |