[haiku-commits] haiku: hrev53732 - in src/system/libroot/posix/glibc: math include/arch/ppc/bits include/arch/x86/bits include/arch/m68k/bits include/arch/arm/bits

  • From: waddlesplash <waddlesplash@xxxxxxxxx>
  • To: haiku-commits@xxxxxxxxxxxxx
  • Date: Sat, 18 Jan 2020 23:45:47 -0500 (EST)

hrev53732 adds 2 changesets to branch 'master'
old head: aee487519dc403a64f9aaa60eb1fff08b95898c0
new head: 9df77ea390e29e28020bb5674aea40895750a8d3
overview: 
https://git.haiku-os.org/haiku/log/?qt=range&q=9df77ea390e2+%5Eaee487519dc4

----------------------------------------------------------------------------

9e419c309287: libroot: Avoid glibc-internal math function usage in printf.
  
  There's no reason for this, and we'd like to not export
  these functions anymore (under non-x86/x86_64), so just use
  the public macros.

9df77ea390e2: libroot: Make glibc use our math.h.
  
  Only a few definitions (and some "hacks", to force glibc to
  use __builtin_* where possible) that are not in our math.h
  remain. This cuts out a lot more of the "bits" headers.
  
  No "functional" change intended (but should help
  fix the build on arches where we do not include
  __fpclassify, etc. anymore.)

                              [ Augustin Cavalier <waddlesplash@xxxxxxxxx> ]

----------------------------------------------------------------------------

28 files changed, 35 insertions(+), 1570 deletions(-)
.../posix/glibc/include/arch/arm/bits/huge_val.h |  64 ---
.../posix/glibc/include/arch/arm/bits/mathdef.h  |  52 --
.../posix/glibc/include/arch/arm/bits/nan.h      |  48 --
.../glibc/include/arch/arm64/bits/huge_val.h     |  26 -
.../glibc/include/arch/arm64/bits/mathdef.h      |  43 --
.../posix/glibc/include/arch/arm64/bits/nan.h    |  25 -
.../glibc/include/arch/m68k/bits/huge_val.h      |  92 ----
.../posix/glibc/include/arch/m68k/bits/mathdef.h |  44 --
.../posix/glibc/include/arch/m68k/bits/nan.h     |  48 --
.../posix/glibc/include/arch/ppc/bits/huge_val.h | 103 ----
.../posix/glibc/include/arch/ppc/bits/mathdef.h  |  81 ----
.../posix/glibc/include/arch/ppc/bits/nan.h      |  48 --
.../glibc/include/arch/riscv64/bits/huge_val.h   |   8 -
.../glibc/include/arch/riscv64/bits/mathdef.h    |  31 --
.../posix/glibc/include/arch/riscv64/bits/nan.h  |   5 -
.../glibc/include/arch/sparc/bits/huge_val.h     |   8 -
.../glibc/include/arch/sparc/bits/mathdef.h      |  31 --
.../posix/glibc/include/arch/sparc/bits/nan.h    |   5 -
.../posix/glibc/include/arch/x86/bits/huge_val.h |  81 ----
.../posix/glibc/include/arch/x86/bits/mathdef.h  |  47 --
.../posix/glibc/include/arch/x86/bits/nan.h      |  48 --
.../glibc/include/arch/x86_64/bits/huge_val.h    |  40 --
.../glibc/include/arch/x86_64/bits/mathdef.h     |  57 ---
.../posix/glibc/include/arch/x86_64/bits/nan.h   |  52 --
src/system/libroot/posix/glibc/math/complex.h    |  12 +-
src/system/libroot/posix/glibc/math/math.h       | 474 +------------------
.../libroot/posix/glibc/stdio-common/printf_fp.c |  16 +-
.../posix/glibc/stdio-common/printf_size.c       |  16 +-

############################################################################

Commit:      9e419c309287fe41ebd658cee626c86194cc6fd0
URL:         https://git.haiku-os.org/haiku/commit/?id=9e419c309287
Author:      Augustin Cavalier <waddlesplash@xxxxxxxxx>
Date:        Sun Jan 19 04:42:03 2020 UTC

libroot: Avoid glibc-internal math function usage in printf.

There's no reason for this, and we'd like to not export
these functions anymore (under non-x86/x86_64), so just use
the public macros.

----------------------------------------------------------------------------

diff --git a/src/system/libroot/posix/glibc/stdio-common/printf_fp.c 
b/src/system/libroot/posix/glibc/stdio-common/printf_fp.c
index 0abbed9e55..a425b3312c 100644
--- a/src/system/libroot/posix/glibc/stdio-common/printf_fp.c
+++ b/src/system/libroot/posix/glibc/stdio-common/printf_fp.c
@@ -65,7 +65,7 @@
 # define PAD(f, c, n) __printf_pad (f, c, n)
 ssize_t __printf_pad __P ((FILE *, char pad, int n)); /* In vfprintf.c.  */
 #endif /* USE_IN_LIBIO */
-
+
 /* Macros for doing the actual output.  */
 
 #define outchar(ch)                                                          \
@@ -107,7 +107,7 @@ ssize_t __printf_pad __P ((FILE *, char pad, int n)); /* In 
vfprintf.c.  */
       done += len;                                                           \
     }                                                                        \
   while (0)
-
+
 /* We use the GNU MP library to handle large numbers.
 
    An MP variable occupies a varying number of entries in its array.  We keep
@@ -120,8 +120,6 @@ ssize_t __printf_pad __P ((FILE *, char pad, int n)); /* In 
vfprintf.c.  */
 #define MPN_GE(u,v) \
   (u##size > v##size || (u##size == v##size && __mpn_cmp (u, v, u##size) >= 0))
 
-extern int __isinfl (long double), __isnanl (long double);
-
 extern mp_size_t __mpn_extract_double (mp_ptr res_ptr, mp_size_t size,
                                       int *expt, int *is_neg,
                                       double value);
@@ -328,7 +326,7 @@ hack_digit_end:
       fpnum.ldbl = *(const long double *) args[0];
 
       /* Check for special values: not a number or infinity.  */
-      if (__isnanl (fpnum.ldbl))
+      if (isnan (fpnum.ldbl))
        {
          if (isupper (info->spec))
            {
@@ -342,7 +340,7 @@ hack_digit_end:
              }
          is_neg = 0;
        }
-      else if (__isinfl (fpnum.ldbl))
+      else if (isinf (fpnum.ldbl))
        {
          if (isupper (info->spec))
            {
@@ -372,7 +370,7 @@ hack_digit_end:
       fpnum.dbl = *(const double *) args[0];
 
       /* Check for special values: not a number or infinity.  */
-      if (__isnan (fpnum.dbl))
+      if (isnan (fpnum.dbl))
        {
          if (isupper (info->spec))
            {
@@ -386,7 +384,7 @@ hack_digit_end:
            }
          is_neg = 0;
        }
-      else if (__isinf (fpnum.dbl))
+      else if (isinf (fpnum.dbl))
        {
          if (isupper (info->spec))
            {
@@ -1162,7 +1160,7 @@ hack_digit_callee3:
   }
   return done;
 }
-
+
 /* Return the number of extra grouping characters that will be inserted
    into a number with INTDIG_MAX integer digits.  */
 
diff --git a/src/system/libroot/posix/glibc/stdio-common/printf_size.c 
b/src/system/libroot/posix/glibc/stdio-common/printf_size.c
index 9837356e62..0c934d0ce4 100644
--- a/src/system/libroot/posix/glibc/stdio-common/printf_size.c
+++ b/src/system/libroot/posix/glibc/stdio-common/printf_size.c
@@ -45,7 +45,7 @@
 # define PAD(f, c, n) __printf_pad (f, c, n)
 ssize_t __printf_pad __P ((FILE *, char pad, int n)); /* In vfprintf.c.  */
 #endif /* USE_IN_LIBIO */
-
+
 /* Macros for doing the actual output.  */
 
 #define outchar(ch)                                                          \
@@ -87,12 +87,12 @@ ssize_t __printf_pad __P ((FILE *, char pad, int n)); /* In 
vfprintf.c.  */
       done += len;                                                           \
     }                                                                        \
   while (0)
-
+
 /* Prototype for helper functions.  */
 extern int __printf_fp (FILE *fp, const struct printf_info *info,
                        const void *const *args);
 
-
+
 int
 printf_size (FILE *fp, const struct printf_info *info, const void *const *args)
 {
@@ -134,13 +134,13 @@ printf_size (FILE *fp, const struct printf_info *info, 
const void *const *args)
       fpnum.ldbl.d = *(const long double *) args[0];
 
       /* Check for special values: not a number or infinity.  */
-      if (__isnanl (fpnum.ldbl.d))
+      if (isnan (fpnum.ldbl.d))
        {
          special = "nan";
          wspecial = L"nan";
          negative = 0;
        }
-      else if (__isinfl (fpnum.ldbl.d))
+      else if (isinf (fpnum.ldbl.d))
        {
          special = "inf";
          wspecial = L"inf";
@@ -160,13 +160,13 @@ printf_size (FILE *fp, const struct printf_info *info, 
const void *const *args)
       fpnum.dbl.d = *(const double *) args[0];
 
       /* Check for special values: not a number or infinity.  */
-      if (__isnan (fpnum.dbl.d))
+      if (isnan (fpnum.dbl.d))
        {
          special = "nan";
          wspecial = L"nan";
          negative = 0;
        }
-      else if (__isinf (fpnum.dbl.d))
+      else if (isinf (fpnum.dbl.d))
        {
          special = "inf";
          wspecial = L"inf";
@@ -250,7 +250,7 @@ printf_size (FILE *fp, const struct printf_info *info, 
const void *const *args)
 
   return done;
 }
-
+
 /* This is the function used by `vfprintf' to determine number and
    type of the arguments.  */
 int

############################################################################

Revision:    hrev53732
Commit:      9df77ea390e29e28020bb5674aea40895750a8d3
URL:         https://git.haiku-os.org/haiku/commit/?id=9df77ea390e2
Author:      Augustin Cavalier <waddlesplash@xxxxxxxxx>
Date:        Sun Jan 19 04:44:37 2020 UTC

libroot: Make glibc use our math.h.

Only a few definitions (and some "hacks", to force glibc to
use __builtin_* where possible) that are not in our math.h
remain. This cuts out a lot more of the "bits" headers.

No "functional" change intended (but should help
fix the build on arches where we do not include
__fpclassify, etc. anymore.)

----------------------------------------------------------------------------

diff --git a/src/system/libroot/posix/glibc/include/arch/arm/bits/huge_val.h 
b/src/system/libroot/posix/glibc/include/arch/arm/bits/huge_val.h
deleted file mode 100644
index ac432e39ed..0000000000
--- a/src/system/libroot/posix/glibc/include/arch/arm/bits/huge_val.h
+++ /dev/null
@@ -1,64 +0,0 @@
-/* `HUGE_VAL' constant for IEEE 754 machines (where it is infinity).
-   Used by <stdlib.h> and <math.h> functions for overflow.
-   ARM version.
-   Copyright (C) 1992, 95, 96, 97, 98, 99, 2000, 2004
-   Free Software Foundation, Inc.
-   This file is part of the GNU C Library.
-
-   The GNU C Library is free software; you can redistribute it and/or
-   modify it under the terms of the GNU Lesser General Public
-   License as published by the Free Software Foundation; either
-   version 2.1 of the License, or (at your option) any later version.
-
-   The GNU C 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
-   Lesser General Public License for more details.
-
-   You should have received a copy of the GNU Lesser General Public
-   License along with the GNU C Library; if not, write to the Free
-   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
-   02111-1307 USA.  */
-
-#ifndef _MATH_H
-# error "Never use <bits/huge_val.h> directly; include <math.h> instead."
-#endif
-
-/* IEEE positive infinity (-HUGE_VAL is negative infinity).  */
-
-#if __GNUC_PREREQ(3,3)
-# define HUGE_VAL  (__builtin_huge_val())
-#elif __GNUC_PREREQ(2,96)
-# define HUGE_VAL (__extension__ 0x1.0p2047)
-#elif defined __GNUC__
-
-# define HUGE_VAL \
-  (__extension__                                                             \
-   ((union { unsigned __l __attribute__((__mode__(__DI__))); double __d; })   \
-    { __l: 0x000000007ff00000ULL }).__d)
-
-#else /* not GCC */
-
-# include <endian.h>
-
-typedef union { unsigned char __c[8]; double __d; } __huge_val_t;
-
-# if __BYTE_ORDER == __BIG_ENDIAN
-#  define __HUGE_VAL_bytes     { 0, 0, 0, 0, 0x7f, 0xf0, 0, 0 }
-# endif
-# if __BYTE_ORDER == __LITTLE_ENDIAN
-#  define __HUGE_VAL_bytes     { 0, 0, 0xf0, 0x7f, 0, 0, 0, 0 }
-# endif
-
-static __huge_val_t __huge_val = { __HUGE_VAL_bytes };
-# define HUGE_VAL      (__huge_val.__d)
-
-#endif /* GCC.  */
-
-#if __GNUC_PREREQ(3,3)
-# define HUGE_VALL  (__builtin_huge_vall())
-#else
-# define HUGE_VALL  ((long double) HUGE_VAL)
-#endif
-
-#define HUGE_VALF HUGE_VAL
diff --git a/src/system/libroot/posix/glibc/include/arch/arm/bits/mathdef.h 
b/src/system/libroot/posix/glibc/include/arch/arm/bits/mathdef.h
deleted file mode 100644
index 5d9a3349cf..0000000000
--- a/src/system/libroot/posix/glibc/include/arch/arm/bits/mathdef.h
+++ /dev/null
@@ -1,52 +0,0 @@
-/* Copyright (C) 1999, 2000, 2004, 2006, 2007
-   Free Software Foundation, Inc.
-   This file is part of the GNU C Library.
-
-   The GNU C Library is free software; you can redistribute it and/or
-   modify it under the terms of the GNU Lesser General Public
-   License as published by the Free Software Foundation; either
-   version 2.1 of the License, or (at your option) any later version.
-
-   The GNU C 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
-   Lesser General Public License for more details.
-
-   You should have received a copy of the GNU Lesser General Public
-   License along with the GNU C Library; if not, write to the Free
-   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
-   02111-1307 USA.  */
-
-#if !defined _MATH_H && !defined _COMPLEX_H
-# error "Never use <bits/mathdef.h> directly; include <math.h> instead"
-#endif
-
-#if defined  __USE_ISOC99 && defined _MATH_H && !defined _MATH_H_MATHDEF
-# define _MATH_H_MATHDEF       1
-
-/* GCC does not promote `float' values to `double'.  */
-typedef float float_t;         /* `float' expressions are evaluated as
-                                  `float'.  */
-typedef double double_t;       /* `double' expressions are evaluated as
-                                  `double'.  */
-
-/* Signal that both types are `long double'.  */
-# define FLT_EVAL_METHOD       2
-
-/* Define `INFINITY' as value of type `float'.  */
-# define INFINITY      HUGE_VALF
-
-/* The values returned by `ilogb' for 0 and NaN respectively.  */
-# define FP_ILOGB0     (-2147483647)
-# define FP_ILOGBNAN   (2147483647)
-
-#endif /* ISO C99 */
-
-#ifndef __NO_LONG_DOUBLE_MATH
-/* Signal that we do not really have a `long double'.  This disables the
-   declaration of all the `long double' function variants.  */
-# define __NO_LONG_DOUBLE_MATH 1
-#endif
-
-/* Number of decimal digits for the `long double' type.  */
-# define DECIMAL_DIG   21
diff --git a/src/system/libroot/posix/glibc/include/arch/arm/bits/nan.h 
b/src/system/libroot/posix/glibc/include/arch/arm/bits/nan.h
deleted file mode 100644
index 6d88b551b1..0000000000
--- a/src/system/libroot/posix/glibc/include/arch/arm/bits/nan.h
+++ /dev/null
@@ -1,48 +0,0 @@
-/* `NAN' constant for IEEE 754 machines.
-   Copyright (C) 1992, 1996, 1997, 1999 Free Software Foundation, Inc.
-   This file is part of the GNU C Library.
-
-   The GNU C Library is free software; you can redistribute it and/or
-   modify it under the terms of the GNU Lesser General Public
-   License as published by the Free Software Foundation; either
-   version 2.1 of the License, or (at your option) any later version.
-
-   The GNU C 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
-   Lesser General Public License for more details.
-
-   You should have received a copy of the GNU Lesser General Public
-   License along with the GNU C Library; if not, write to the Free
-   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
-   02111-1307 USA.  */
-
-#ifndef _MATH_H
-# error "Never use <bits/nan.h> directly; include <math.h> instead."
-#endif
-
-
-/* IEEE Not A Number.  */
-
-#ifdef __GNUC__
-
-# define NAN \
-  (__extension__                                                            \
-   ((union { unsigned __l __attribute__((__mode__(__SI__))); float __d; })  \
-    { __l: 0x7fc00000UL }).__d)
-
-#else
-
-# include <endian.h>
-
-# if __BYTE_ORDER == __BIG_ENDIAN
-#  define __nan_bytes          { 0x7f, 0xc0, 0, 0 }
-# endif
-# if __BYTE_ORDER == __LITTLE_ENDIAN
-#  define __nan_bytes          { 0, 0, 0xc0, 0x7f }
-# endif
-
-static union { unsigned char __c[4]; float __d; } __nan_union = { __nan_bytes 
};
-# define NAN   (__nan_union.__d)
-
-#endif /* GCC.  */
diff --git a/src/system/libroot/posix/glibc/include/arch/arm64/bits/huge_val.h 
b/src/system/libroot/posix/glibc/include/arch/arm64/bits/huge_val.h
deleted file mode 100644
index 188da414c9..0000000000
--- a/src/system/libroot/posix/glibc/include/arch/arm64/bits/huge_val.h
+++ /dev/null
@@ -1,26 +0,0 @@
-/* Stub `HUGE_VAL' constant.
-   Used by <stdlib.h> and <math.h> functions for overflow.
-   Copyright (C) 1992, 1996, 1997, 2004 Free Software Foundation, Inc.
-   This file is part of the GNU C Library.
-
-   The GNU C Library is free software; you can redistribute it and/or
-   modify it under the terms of the GNU Lesser General Public
-   License as published by the Free Software Foundation; either
-   version 2.1 of the License, or (at your option) any later version.
-
-   The GNU C 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
-   Lesser General Public License for more details.
-
-   You should have received a copy of the GNU Lesser General Public
-   License along with the GNU C Library; if not, see
-   <http://www.gnu.org/licenses/>.  */
-
-#ifndef _MATH_H
-# error "Never use <bits/huge_val.h> directly; include <math.h> instead."
-#endif
-
-# define HUGE_VAL      (__builtin_huge_val())
-# define HUGE_VALF  (__builtin_huge_valf())
-# define HUGE_VALL  (__builtin_huge_vall())
diff --git a/src/system/libroot/posix/glibc/include/arch/arm64/bits/mathdef.h 
b/src/system/libroot/posix/glibc/include/arch/arm64/bits/mathdef.h
deleted file mode 100644
index 9b36a2bab4..0000000000
--- a/src/system/libroot/posix/glibc/include/arch/arm64/bits/mathdef.h
+++ /dev/null
@@ -1,43 +0,0 @@
-/* Copyright (C) 1999, 2000, 2004, 2006, 2007
-   Free Software Foundation, Inc.
-   This file is part of the GNU C Library.
-
-   The GNU C Library is free software; you can redistribute it and/or
-   modify it under the terms of the GNU Lesser General Public
-   License as published by the Free Software Foundation; either
-   version 2.1 of the License, or (at your option) any later version.
-
-   The GNU C 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
-   Lesser General Public License for more details.
-
-   You should have received a copy of the GNU Lesser General Public
-   License along with the GNU C Library; if not, write to the Free
-   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
-   02111-1307 USA.  */
-
-#if !defined _MATH_H && !defined _COMPLEX_H
-# error "Never use <bits/mathdef.h> directly; include <math.h> instead"
-#endif
-
-#if defined  __USE_ISOC99 && defined _MATH_H && !defined _MATH_H_MATHDEF
-# define _MATH_H_MATHDEF       1
-
-/* GCC does not promote `float' values to `double'.  */
-typedef float float_t;         /* `float' expressions are evaluated as
-                                  `float'.  */
-typedef double double_t;       /* `double' expressions are evaluated as
-                                  `double'.  */
-
-#ifdef __FLT_EVAL_METHOD__
-# if __FLT_EVAL_METHOD__ == -1
-#  define FLT_EVAL_METHOD      2
-# else
-#  define FLT_EVAL_METHOD      __FLT_EVAL_METHOD__
-# endif
-#else
-# define FLT_EVAL_METHOD       0
-#endif
-
-#endif /* ISO C99 */
diff --git a/src/system/libroot/posix/glibc/include/arch/arm64/bits/nan.h 
b/src/system/libroot/posix/glibc/include/arch/arm64/bits/nan.h
deleted file mode 100644
index 61204bc398..0000000000
--- a/src/system/libroot/posix/glibc/include/arch/arm64/bits/nan.h
+++ /dev/null
@@ -1,25 +0,0 @@
-/* `NAN' constant for IEEE 754 machines.
-   Copyright (C) 1992,1996,1997,1999,2004,2006 Free Software Foundation, Inc.
-   This file is part of the GNU C Library.
-
-   The GNU C Library is free software; you can redistribute it and/or
-   modify it under the terms of the GNU Lesser General Public
-   License as published by the Free Software Foundation; either
-   version 2.1 of the License, or (at your option) any later version.
-
-   The GNU C 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
-   Lesser General Public License for more details.
-
-   You should have received a copy of the GNU Lesser General Public
-   License along with the GNU C Library; if not, see
-   <http://www.gnu.org/licenses/>.  */
-
-#ifndef _MATH_H
-# error "Never use <bits/nan.h> directly; include <math.h> instead."
-#endif
-
-
-/* IEEE Not A Number.  */
-# define NAN   (__builtin_nanf (""))
diff --git a/src/system/libroot/posix/glibc/include/arch/m68k/bits/huge_val.h 
b/src/system/libroot/posix/glibc/include/arch/m68k/bits/huge_val.h
deleted file mode 100644
index ad5253429f..0000000000
--- a/src/system/libroot/posix/glibc/include/arch/m68k/bits/huge_val.h
+++ /dev/null
@@ -1,92 +0,0 @@
-/* `HUGE_VAL' constants for m68k (where it is infinity).
-   Used by <stdlib.h> and <math.h> functions for overflow.
-   Copyright (C) 1992, 1995, 1996, 1997, 1999, 2000 Free Software Foundation, 
Inc.
-   This file is part of the GNU C Library.
-
-   The GNU C Library is free software; you can redistribute it and/or
-   modify it under the terms of the GNU Lesser General Public
-   License as published by the Free Software Foundation; either
-   version 2.1 of the License, or (at your option) any later version.
-
-   The GNU C 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
-   Lesser General Public License for more details.
-
-   You should have received a copy of the GNU Lesser General Public
-   License along with the GNU C Library; if not, write to the Free
-   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
-   02111-1307 USA.  */
-
-#ifndef _MATH_H
-# error "Never use <bits/huge_val.h> directly; include <math.h> instead."
-#endif
-
-
-#include <features.h>
-#include <sys/cdefs.h>
-
-/* IEEE positive infinity (-HUGE_VAL is negative infinity).  */
-
-#ifdef __GNUC__
-
-# if __GNUC_PREREQ(2,96)
-
-#  define HUGE_VAL (__extension__ 0x1.0p2047)
-
-# else
-
-#  define HUGE_VAL                                     \
-  (__extension__                                       \
-   ((union { unsigned long long __l; double __d; })    \
-    { __l: 0x7ff0000000000000ULL }).__d)
-
-# endif
-
-#else /* not GCC */
-
-static union { unsigned char __c[8]; double __d; } __huge_val =
-  { { 0x7f, 0xf0, 0, 0, 0, 0, 0, 0 } };
-# define HUGE_VAL      (__huge_val.__d)
-
-#endif /* GCC.  */
-
-
-/* ISO C 99 extensions: (float) HUGE_VALF and (long double) HUGE_VALL.  */
-
-#ifdef __USE_ISOC99
-
-# if __GNUC_PREREQ(2,96)
-
-#  define HUGE_VALF (__extension__ 0x1.0p255f)
-#  define HUGE_VALL (__extension__ 0x1.0p32767L)
-
-# else
-
-#  ifdef __GNUC__
-
-#   define HUGE_VALF                                   \
-  (__extension__                                       \
-   ((union { unsigned long __l; float __f; })          \
-    { __l: 0x7f800000UL }).__f)
-
-#   define HUGE_VALL                                   \
-  (__extension__                                       \
-   ((union { unsigned long __l[3]; long double __ld; })        \
-    { __l: { 0x7fff0000UL, 0x80000000UL, 0UL } }).__ld)
-
-#  else /* not GCC */
-
-static union { unsigned char __c[4]; float __f; } __huge_valf =
-  { { 0x7f, 0x80, 0, 0 } };
-#   define HUGE_VALF   (__huge_valf.__f)
-
-static union { unsigned char __c[12]; long double __ld; } __huge_vall =
-  { { 0x7f, 0xff, 0, 0, 0x80, 0, 0, 0, 0, 0, 0, 0 } };
-#   define HUGE_VALL   (__huge_vall.__ld)
-
-#  endif /* GCC.  */
-
-# endif /* GCC 2.95.  */
-
-#endif /* __USE_ISOC99.  */
diff --git a/src/system/libroot/posix/glibc/include/arch/m68k/bits/mathdef.h 
b/src/system/libroot/posix/glibc/include/arch/m68k/bits/mathdef.h
deleted file mode 100644
index 8b02db0899..0000000000
--- a/src/system/libroot/posix/glibc/include/arch/m68k/bits/mathdef.h
+++ /dev/null
@@ -1,44 +0,0 @@
-/* Copyright (C) 1997, 1998, 1999, 2000 Free Software Foundation, Inc.
-   This file is part of the GNU C Library.
-
-   The GNU C Library is free software; you can redistribute it and/or
-   modify it under the terms of the GNU Lesser General Public
-   License as published by the Free Software Foundation; either
-   version 2.1 of the License, or (at your option) any later version.
-
-   The GNU C 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
-   Lesser General Public License for more details.
-
-   You should have received a copy of the GNU Lesser General Public
-   License along with the GNU C Library; if not, write to the Free
-   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
-   02111-1307 USA.  */
-
-#if !defined _MATH_H && !defined _COMPLEX_H
-# error "Never use <bits/mathdef.h> directly; include <math.h> instead"
-#endif
-
-#if defined __USE_ISOC99 && defined _MATH_H && !defined _MATH_H_MATHDEF
-# define _MATH_H_MATHDEF       1
-
-/* The m68k FPUs evaluate all values in the 96 bit floating-point format
-   which is also available for the user as `long double'.  Therefore we
-   define: */
-typedef long double float_t;   /* `float' expressions are evaluated as
-                                  `long double'.  */
-typedef long double double_t;  /* `double' expressions are evaluated as
-                                  `long double'.  */
-
-/* Signal that types are long double */
-# define FLT_EVAL_METHOD      2
-
-/* Define `INFINITY' as value of type `float'.  */
-# define INFINITY      HUGE_VALF
-
-/* The values returned by `ilogb' for 0 and NaN respectively.  */
-# define FP_ILOGB0     (-2147483647 - 1)
-# define FP_ILOGBNAN   (2147483647)
-
-#endif /* ISO C99 */
diff --git a/src/system/libroot/posix/glibc/include/arch/m68k/bits/nan.h 
b/src/system/libroot/posix/glibc/include/arch/m68k/bits/nan.h
deleted file mode 100644
index 6d88b551b1..0000000000
--- a/src/system/libroot/posix/glibc/include/arch/m68k/bits/nan.h
+++ /dev/null
@@ -1,48 +0,0 @@
-/* `NAN' constant for IEEE 754 machines.
-   Copyright (C) 1992, 1996, 1997, 1999 Free Software Foundation, Inc.
-   This file is part of the GNU C Library.
-
-   The GNU C Library is free software; you can redistribute it and/or
-   modify it under the terms of the GNU Lesser General Public
-   License as published by the Free Software Foundation; either
-   version 2.1 of the License, or (at your option) any later version.
-
-   The GNU C 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
-   Lesser General Public License for more details.
-
-   You should have received a copy of the GNU Lesser General Public
-   License along with the GNU C Library; if not, write to the Free
-   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
-   02111-1307 USA.  */
-
-#ifndef _MATH_H
-# error "Never use <bits/nan.h> directly; include <math.h> instead."
-#endif
-
-
-/* IEEE Not A Number.  */
-
-#ifdef __GNUC__
-
-# define NAN \
-  (__extension__                                                            \
-   ((union { unsigned __l __attribute__((__mode__(__SI__))); float __d; })  \
-    { __l: 0x7fc00000UL }).__d)
-
-#else
-
-# include <endian.h>
-
-# if __BYTE_ORDER == __BIG_ENDIAN
-#  define __nan_bytes          { 0x7f, 0xc0, 0, 0 }
-# endif
-# if __BYTE_ORDER == __LITTLE_ENDIAN
-#  define __nan_bytes          { 0, 0, 0xc0, 0x7f }
-# endif
-
-static union { unsigned char __c[4]; float __d; } __nan_union = { __nan_bytes 
};
-# define NAN   (__nan_union.__d)
-
-#endif /* GCC.  */
diff --git a/src/system/libroot/posix/glibc/include/arch/ppc/bits/huge_val.h 
b/src/system/libroot/posix/glibc/include/arch/ppc/bits/huge_val.h
deleted file mode 100644
index b33974364c..0000000000
--- a/src/system/libroot/posix/glibc/include/arch/ppc/bits/huge_val.h
+++ /dev/null
@@ -1,103 +0,0 @@
-/* `HUGE_VAL' constants for IEEE 754 machines (where it is infinity).
-   Used by <stdlib.h> and <math.h> functions for overflow.
-   Copyright (C) 1992, 1995, 1996, 1997, 1999, 2000 Free Software Foundation, 
Inc.
-   This file is part of the GNU C Library.
-
-   The GNU C Library is free software; you can redistribute it and/or
-   modify it under the terms of the GNU Lesser General Public
-   License as published by the Free Software Foundation; either
-   version 2.1 of the License, or (at your option) any later version.
-
-   The GNU C 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
-   Lesser General Public License for more details.
-
-   You should have received a copy of the GNU Lesser General Public
-   License along with the GNU C Library; if not, write to the Free
-   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
-   02111-1307 USA.  */
-
-#ifndef _MATH_H
-# error "Never use <bits/huge_val.h> directly; include <math.h> instead."
-#endif
-
-#include <features.h>
-
-/* IEEE positive infinity (-HUGE_VAL is negative infinity).  */
-
-#ifdef __GNUC__
-
-# if __GNUC_PREREQ(2,96)
-
-#  define HUGE_VAL (__extension__ 0x1.0p2047)
-
-# else
-
-#  define HUGE_VAL \
-  (__extension__                                                             \
-   ((union { unsigned __l __attribute__((__mode__(__DI__))); double __d; })   \
-    { __l: 0x7ff0000000000000ULL }).__d)
-
-# endif
-
-#else /* not GCC */
-
-# include <endian.h>
-
-typedef union { unsigned char __c[8]; double __d; } __huge_val_t;
-
-# if __BYTE_ORDER == __BIG_ENDIAN
-#  define __HUGE_VAL_bytes     { 0x7f, 0xf0, 0, 0, 0, 0, 0, 0 }
-# endif
-# if __BYTE_ORDER == __LITTLE_ENDIAN
-#  define __HUGE_VAL_bytes     { 0, 0, 0, 0, 0, 0, 0xf0, 0x7f }
-# endif
-
-static __huge_val_t __huge_val = { __HUGE_VAL_bytes };
-# define HUGE_VAL      (__huge_val.__d)
-
-#endif /* GCC.  */
-
-
-/* ISO C99 extensions: (float) HUGE_VALF and (long double) HUGE_VALL.  */
-
-#ifdef __USE_ISOC99
-
-# ifdef __GNUC__
-
-#  if __GNUC_PREREQ(2,96)
-
-#   define HUGE_VALF (__extension__ 0x1.0p255f)
-
-#  else
-
-#   define HUGE_VALF \
-  (__extension__                                                             \
-   ((union { unsigned __l __attribute__((__mode__(__SI__))); float __d; })    \
-    { __l: 0x7f800000UL }).__d)
-
-#  endif
-
-# else /* not GCC */
-
-typedef union { unsigned char __c[4]; float __f; } __huge_valf_t;
-
-#  if __BYTE_ORDER == __BIG_ENDIAN
-#   define __HUGE_VALF_bytes   { 0x7f, 0x80, 0, 0 }
-#  endif
-#  if __BYTE_ORDER == __LITTLE_ENDIAN
-#   define __HUGE_VALF_bytes   { 0, 0, 0x80, 0x7f }
-#  endif
-
-static __huge_valf_t __huge_valf = { __HUGE_VALF_bytes };
-#  define HUGE_VALF    (__huge_valf.__f)
-
-# endif        /* GCC.  */
-
-
-/* Generally there is no separate `long double' format and it is the
-   same as `double'.  */
-# define HUGE_VALL HUGE_VAL
-
-#endif /* __USE_ISOC99.  */
diff --git a/src/system/libroot/posix/glibc/include/arch/ppc/bits/mathdef.h 
b/src/system/libroot/posix/glibc/include/arch/ppc/bits/mathdef.h
deleted file mode 100644
index 5eaf41ea67..0000000000
--- a/src/system/libroot/posix/glibc/include/arch/ppc/bits/mathdef.h
+++ /dev/null
@@ -1,81 +0,0 @@
-/* Copyright (C) 1997, 1998, 1999, 2000 Free Software Foundation, Inc.
-   This file is part of the GNU C Library.
-
-   The GNU C Library is free software; you can redistribute it and/or
-   modify it under the terms of the GNU Lesser General Public
-   License as published by the Free Software Foundation; either
-   version 2.1 of the License, or (at your option) any later version.
-
-   The GNU C 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
-   Lesser General Public License for more details.
-
-   You should have received a copy of the GNU Lesser General Public
-   License along with the GNU C Library; if not, write to the Free
-   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
-   02111-1307 USA.  */
-
-#if !defined _MATH_H && !defined _COMPLEX_H
-# error "Never use <bits/mathdef.h> directly; include <math.h> instead"
-#endif
-
-
-/* FIXME! This file describes properties of the compiler, not the machine;
-   it should not be part of libc!
-
-   FIXME! This file does not deal with the -fshort-double option of
-   gcc! */
-
-#if defined __USE_ISOC99 && defined _MATH_H && !defined _MATH_H_MATHDEF
-# define _MATH_H_MATHDEF       1
-
-# ifdef __GNUC__
-#  if __STDC__ == 1
-
-/* In GNU or ANSI mode, gcc leaves `float' expressions as-is.  */
-typedef float float_t;         /* `float' expressions are evaluated as
-                                  `float'.  */
-typedef double double_t;       /* `double' expressions are evaluated as
-                                  `double'.  */
-
-/* Signal that types stay as they were declared.  */
-#   define FLT_EVAL_METHOD     0
-
-/* Define `INFINITY' as value of type `float'.  */
-#   define INFINITY    HUGE_VALF
-
-#  else
-
-/* For `gcc -traditional', `float' expressions are evaluated as `double'. */
-typedef double float_t;                /* `float' expressions are evaluated as
-                                  `double'.  */
-typedef double double_t;       /* `double' expressions are evaluated as
-                                  `double'.  */
-
-/* Define `INFINITY' as value of type `float'.  */
-#   define INFINITY    HUGE_VALF
-
-#  endif
-# else
-
-/* Wild guess at types for float_t and double_t. */
-typedef double float_t;
-typedef double double_t;
-
-/* Define `INFINITY' as value of type `float'.  */
-#  define INFINITY     HUGE_VALF
-
-# endif
-
-/* The values returned by `ilogb' for 0 and NaN respectively.  */
-# define FP_ILOGB0     (-2147483647)
-# define FP_ILOGBNAN   (2147483647)
-
-#endif /* ISO C99 */
-
-#ifndef __NO_LONG_DOUBLE_MATH
-/* Signal that we do not really have a `long double'.  The disables the
-   declaration of all the `long double' function variants.  */
-# define __NO_LONG_DOUBLE_MATH 1
-#endif
diff --git a/src/system/libroot/posix/glibc/include/arch/ppc/bits/nan.h 
b/src/system/libroot/posix/glibc/include/arch/ppc/bits/nan.h
deleted file mode 100644
index 6d88b551b1..0000000000
--- a/src/system/libroot/posix/glibc/include/arch/ppc/bits/nan.h
+++ /dev/null
@@ -1,48 +0,0 @@
-/* `NAN' constant for IEEE 754 machines.
-   Copyright (C) 1992, 1996, 1997, 1999 Free Software Foundation, Inc.
-   This file is part of the GNU C Library.
-
-   The GNU C Library is free software; you can redistribute it and/or
-   modify it under the terms of the GNU Lesser General Public
-   License as published by the Free Software Foundation; either
-   version 2.1 of the License, or (at your option) any later version.
-
-   The GNU C 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
-   Lesser General Public License for more details.
-
-   You should have received a copy of the GNU Lesser General Public
-   License along with the GNU C Library; if not, write to the Free
-   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
-   02111-1307 USA.  */
-
-#ifndef _MATH_H
-# error "Never use <bits/nan.h> directly; include <math.h> instead."
-#endif
-
-
-/* IEEE Not A Number.  */
-
-#ifdef __GNUC__
-
-# define NAN \
-  (__extension__                                                            \
-   ((union { unsigned __l __attribute__((__mode__(__SI__))); float __d; })  \
-    { __l: 0x7fc00000UL }).__d)
-
-#else
-
-# include <endian.h>
-
-# if __BYTE_ORDER == __BIG_ENDIAN
-#  define __nan_bytes          { 0x7f, 0xc0, 0, 0 }
-# endif
-# if __BYTE_ORDER == __LITTLE_ENDIAN
-#  define __nan_bytes          { 0, 0, 0xc0, 0x7f }
-# endif
-
-static union { unsigned char __c[4]; float __d; } __nan_union = { __nan_bytes 
};
-# define NAN   (__nan_union.__d)
-
-#endif /* GCC.  */
diff --git 
a/src/system/libroot/posix/glibc/include/arch/riscv64/bits/huge_val.h 
b/src/system/libroot/posix/glibc/include/arch/riscv64/bits/huge_val.h
deleted file mode 100644
index 4870e3c4ff..0000000000
--- a/src/system/libroot/posix/glibc/include/arch/riscv64/bits/huge_val.h
+++ /dev/null
@@ -1,8 +0,0 @@
-#ifndef _MATH_H
-# error "Never use <bits/huge_val.h> directly; include <math.h> instead."
-#endif
-
-
-# define HUGE_VAL      (__builtin_huge_val())
-# define HUGE_VALF  (__builtin_huge_valf())
-# define HUGE_VALL  (__builtin_huge_vall())
diff --git a/src/system/libroot/posix/glibc/include/arch/riscv64/bits/mathdef.h 
b/src/system/libroot/posix/glibc/include/arch/riscv64/bits/mathdef.h
deleted file mode 100644
index 13b271dec2..0000000000
--- a/src/system/libroot/posix/glibc/include/arch/riscv64/bits/mathdef.h
+++ /dev/null
@@ -1,31 +0,0 @@
-#if !defined _MATH_H && !defined _COMPLEX_H
-# error "Never use <bits/mathdef.h> directly; include <math.h> instead"
-#endif
-
-#if defined __USE_ISOC99 && defined _MATH_H && !defined _MATH_H_MATHDEF
-# define _MATH_H_MATHDEF       1
-
-typedef float float_t;
-typedef double double_t;
-
-/* The values returned by `ilogb' for 0 and NaN respectively.  */
-# define FP_ILOGB0       (-2147483647)
-# define FP_ILOGBNAN     (2147483647)
-
-# define INFINITY   (__builtin_inff())
-
-/* The GCC 4.6 compiler will define __FP_FAST_FMA{,F,L} if the fma{,f,l}
-   builtins are supported.  */
-# if __FP_FAST_FMA
-#  define FP_FAST_FMA 1
-# endif
-
-# if __FP_FAST_FMAF
-#  define FP_FAST_FMAF 1
-# endif
-
-# if __FP_FAST_FMAL
-#  define FP_FAST_FMAL 1
-# endif
-
-#endif /* ISO C99 */
diff --git a/src/system/libroot/posix/glibc/include/arch/riscv64/bits/nan.h 
b/src/system/libroot/posix/glibc/include/arch/riscv64/bits/nan.h
deleted file mode 100644
index c17012bcaa..0000000000
--- a/src/system/libroot/posix/glibc/include/arch/riscv64/bits/nan.h
+++ /dev/null
@@ -1,5 +0,0 @@
-#ifndef _MATH_H
-# error "Never use <bits/nan.h> directly; include <math.h> instead."
-#endif
-
-# define NAN   (__builtin_nanf (""))
diff --git a/src/system/libroot/posix/glibc/include/arch/sparc/bits/huge_val.h 
b/src/system/libroot/posix/glibc/include/arch/sparc/bits/huge_val.h
deleted file mode 100644
index 4870e3c4ff..0000000000
--- a/src/system/libroot/posix/glibc/include/arch/sparc/bits/huge_val.h
+++ /dev/null
@@ -1,8 +0,0 @@
-#ifndef _MATH_H
-# error "Never use <bits/huge_val.h> directly; include <math.h> instead."
-#endif
-
-
-# define HUGE_VAL      (__builtin_huge_val())
-# define HUGE_VALF  (__builtin_huge_valf())
-# define HUGE_VALL  (__builtin_huge_vall())
diff --git a/src/system/libroot/posix/glibc/include/arch/sparc/bits/mathdef.h 
b/src/system/libroot/posix/glibc/include/arch/sparc/bits/mathdef.h
deleted file mode 100644
index 13b271dec2..0000000000
--- a/src/system/libroot/posix/glibc/include/arch/sparc/bits/mathdef.h
+++ /dev/null
@@ -1,31 +0,0 @@
-#if !defined _MATH_H && !defined _COMPLEX_H
-# error "Never use <bits/mathdef.h> directly; include <math.h> instead"
-#endif
-
-#if defined __USE_ISOC99 && defined _MATH_H && !defined _MATH_H_MATHDEF
-# define _MATH_H_MATHDEF       1
-
-typedef float float_t;
-typedef double double_t;
-
-/* The values returned by `ilogb' for 0 and NaN respectively.  */
-# define FP_ILOGB0       (-2147483647)
-# define FP_ILOGBNAN     (2147483647)
-
-# define INFINITY   (__builtin_inff())
-
-/* The GCC 4.6 compiler will define __FP_FAST_FMA{,F,L} if the fma{,f,l}
-   builtins are supported.  */
-# if __FP_FAST_FMA
-#  define FP_FAST_FMA 1
-# endif
-
-# if __FP_FAST_FMAF
-#  define FP_FAST_FMAF 1
-# endif
-
-# if __FP_FAST_FMAL
-#  define FP_FAST_FMAL 1
-# endif
-
-#endif /* ISO C99 */
diff --git a/src/system/libroot/posix/glibc/include/arch/sparc/bits/nan.h 
b/src/system/libroot/posix/glibc/include/arch/sparc/bits/nan.h
deleted file mode 100644
index c17012bcaa..0000000000
--- a/src/system/libroot/posix/glibc/include/arch/sparc/bits/nan.h
+++ /dev/null
@@ -1,5 +0,0 @@
-#ifndef _MATH_H
-# error "Never use <bits/nan.h> directly; include <math.h> instead."
-#endif
-
-# define NAN   (__builtin_nanf (""))
diff --git a/src/system/libroot/posix/glibc/include/arch/x86/bits/huge_val.h 
b/src/system/libroot/posix/glibc/include/arch/x86/bits/huge_val.h
deleted file mode 100644
index 43f576d8ae..0000000000
--- a/src/system/libroot/posix/glibc/include/arch/x86/bits/huge_val.h
+++ /dev/null
@@ -1,81 +0,0 @@
-/* `HUGE_VAL' constants for ix86 (where it is infinity).
-   Used by <stdlib.h> and <math.h> functions for overflow.
-   Copyright (C) 1992, 1995, 1996, 1997, 1999, 2000 Free Software Foundation, 
Inc.
-   This file is part of the GNU C Library.
-
-   The GNU C Library is free software; you can redistribute it and/or
-   modify it under the terms of the GNU Lesser General Public
-   License as published by the Free Software Foundation; either
-   version 2.1 of the License, or (at your option) any later version.
-
-   The GNU C 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
-   Lesser General Public License for more details.
-
-   You should have received a copy of the GNU Lesser General Public
-   License along with the GNU C Library; if not, write to the Free
-   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
-   02111-1307 USA.  */
-
-#ifndef _MATH_H
-# error "Never use <bits/huge_val.h> directly; include <math.h> instead."
-#endif
-
-#include <features.h>
-
-/* IEEE positive infinity (-HUGE_VAL is negative infinity).  */
-
-#if __GNUC_PREREQ(2,96)
-# define HUGE_VAL      (__extension__ 0x1.0p2047)
-#else
-# define __HUGE_VAL_bytes      { 0, 0, 0, 0, 0, 0, 0xf0, 0x7f }
-
-# define __huge_val_t  union { unsigned char __c[8]; double __d; }
-# ifdef        __GNUC__
-#  define HUGE_VAL     (__extension__ \
-                        ((__huge_val_t) { __c: __HUGE_VAL_bytes }).__d)
-# else /* Not GCC.  */
-static __huge_val_t __huge_val = { __HUGE_VAL_bytes };
-#  define HUGE_VAL     (__huge_val.__d)
-# endif        /* GCC.  */
-#endif /* GCC 2.95 */
-
-
-/* ISO C99 extensions: (float) HUGE_VALF and (long double) HUGE_VALL.  */
-
-#ifdef __USE_ISOC99
-
-# if __GNUC_PREREQ(2,96)
-
-#  define HUGE_VALF (__extension__ 0x1.0p255f)
-#  define HUGE_VALL (__extension__ 0x1.0p32767L)
-
-# else
-
-#  define __HUGE_VALF_bytes    { 0, 0, 0x80, 0x7f }
-
-#  define __huge_valf_t        union { unsigned char __c[4]; float __f; }
-#  ifdef       __GNUC__
-#   define HUGE_VALF   (__extension__ \
-                        ((__huge_valf_t) { __c: __HUGE_VALF_bytes }).__f)
-#  else        /* Not GCC.  */
-static __huge_valf_t __huge_valf = { __HUGE_VALF_bytes };
-#   define HUGE_VALF   (__huge_valf.__f)
-#  endif       /* GCC.  */
-
-
-#  define __HUGE_VALL_bytes    { 0, 0, 0, 0, 0, 0, 0, 0x80, 0xff, 0x7f, 0, 0 }
-
-#  define __huge_vall_t        union { unsigned char __c[12]; long double 
__ld; }
-#  ifdef __GNUC__
-#   define HUGE_VALL   (__extension__ \
-                        ((__huge_vall_t) { __c: __HUGE_VALL_bytes }).__ld)
-#  else        /* Not GCC.  */
-static __huge_vall_t __huge_vall = { __HUGE_VALL_bytes };
-#   define HUGE_VALL   (__huge_vall.__ld)
-#  endif /* GCC.  */
-
-# endif /* GCC 2.95 */
-
-#endif /* __USE_ISOC99.  */
diff --git a/src/system/libroot/posix/glibc/include/arch/x86/bits/mathdef.h 
b/src/system/libroot/posix/glibc/include/arch/x86/bits/mathdef.h
deleted file mode 100644
index 8301db55e0..0000000000
--- a/src/system/libroot/posix/glibc/include/arch/x86/bits/mathdef.h
+++ /dev/null
@@ -1,47 +0,0 @@
-/* Copyright (C) 1997, 1998, 1999, 2000 Free Software Foundation, Inc.
-   This file is part of the GNU C Library.
-
-   The GNU C Library is free software; you can redistribute it and/or
-   modify it under the terms of the GNU Library General Public License as
-   published by the Free Software Foundation; either version 2 of the
-   License, or (at your option) any later version.
-
-   The GNU C 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
-   Library General Public License for more details.
-
-   You should have received a copy of the GNU Library General Public
-   License along with the GNU C Library; see the file COPYING.LIB.  If not,
-   write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-   Boston, MA 02111-1307, USA.  */
-
-#if !defined _MATH_H && !defined _COMPLEX_H
-# error "Never use <bits/mathdef.h> directly; include <math.h> instead"
-#endif
-
-#if defined __USE_ISOC99 && defined _MATH_H && !defined _MATH_H_MATHDEF
-# define _MATH_H_MATHDEF       1
-
-/* The ix87 FPUs evaluate all values in the 80 bit floating-point format
-   which is also available for the user as `long double'.  Therefore we
-   define:  */
-typedef long double float_t;   /* `float' expressions are evaluated as
-                                  `long double'.  */
-typedef long double double_t;  /* `double' expressions are evaluated as
-                                  `long double'.  */
-
-/* Signal that both types are `long double'.  */
-# define FLT_EVAL_METHOD       2
-
-/* Define `INFINITY' as value of type `float'.  */
-# define INFINITY      HUGE_VALF
-
-/* The values returned by `ilogb' for 0 and NaN respectively.  */
-# define FP_ILOGB0     (-2147483647 - 1)
-# define FP_ILOGBNAN   (-2147483647 - 1)
-
-/* Number of decimal digits for the `long double' type.  */
-# define DECIMAL_DIG   21
-
-#endif /* ISO C99 */
diff --git a/src/system/libroot/posix/glibc/include/arch/x86/bits/nan.h 
b/src/system/libroot/posix/glibc/include/arch/x86/bits/nan.h
deleted file mode 100644
index 6d88b551b1..0000000000
--- a/src/system/libroot/posix/glibc/include/arch/x86/bits/nan.h
+++ /dev/null
@@ -1,48 +0,0 @@
-/* `NAN' constant for IEEE 754 machines.
-   Copyright (C) 1992, 1996, 1997, 1999 Free Software Foundation, Inc.
-   This file is part of the GNU C Library.
-
-   The GNU C Library is free software; you can redistribute it and/or
-   modify it under the terms of the GNU Lesser General Public
-   License as published by the Free Software Foundation; either
-   version 2.1 of the License, or (at your option) any later version.
-
-   The GNU C 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
-   Lesser General Public License for more details.
-
-   You should have received a copy of the GNU Lesser General Public
-   License along with the GNU C Library; if not, write to the Free
-   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
-   02111-1307 USA.  */
-
-#ifndef _MATH_H
-# error "Never use <bits/nan.h> directly; include <math.h> instead."
-#endif
-
-
-/* IEEE Not A Number.  */
-
-#ifdef __GNUC__
-
-# define NAN \
-  (__extension__                                                            \
-   ((union { unsigned __l __attribute__((__mode__(__SI__))); float __d; })  \
-    { __l: 0x7fc00000UL }).__d)
-
-#else
-
-# include <endian.h>
-
-# if __BYTE_ORDER == __BIG_ENDIAN
-#  define __nan_bytes          { 0x7f, 0xc0, 0, 0 }
-# endif
-# if __BYTE_ORDER == __LITTLE_ENDIAN
-#  define __nan_bytes          { 0, 0, 0xc0, 0x7f }
-# endif
-
-static union { unsigned char __c[4]; float __d; } __nan_union = { __nan_bytes 
};
-# define NAN   (__nan_union.__d)
-
-#endif /* GCC.  */
diff --git a/src/system/libroot/posix/glibc/include/arch/x86_64/bits/huge_val.h 
b/src/system/libroot/posix/glibc/include/arch/x86_64/bits/huge_val.h
deleted file mode 100644
index f2bddf2874..0000000000
--- a/src/system/libroot/posix/glibc/include/arch/x86_64/bits/huge_val.h
+++ /dev/null
@@ -1,40 +0,0 @@
-/* Stub `HUGE_VAL' constant.
-   Used by <stdlib.h> and <math.h> functions for overflow.
-   Copyright (C) 1992, 1996, 1997, 2004 Free Software Foundation, Inc.
-   This file is part of the GNU C Library.
-
-   The GNU C Library is free software; you can redistribute it and/or
-   modify it under the terms of the GNU Lesser General Public
-   License as published by the Free Software Foundation; either
-   version 2.1 of the License, or (at your option) any later version.
-
-   The GNU C 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
-   Lesser General Public License for more details.
-
-   You should have received a copy of the GNU Lesser General Public
-   License along with the GNU C Library; if not, see
-   <http://www.gnu.org/licenses/>.  */
-
-#ifndef _MATH_H
-# error "Never use <bits/huge_val.h> directly; include <math.h> instead."
-#endif
-
-#if __GNUC_PREREQ(3,3)
-# define HUGE_VAL      (__builtin_huge_val())
-#else
-# define HUGE_VAL      1e37
-#endif
-
-#if __GNUC_PREREQ(3,3)
-# define HUGE_VALF  (__builtin_huge_valf())
-#else
-# define HUGE_VALF  1e37f
-#endif
-
-#if __GNUC_PREREQ(3,3)
-# define HUGE_VALL  (__builtin_huge_vall())
-#else
-# define HUGE_VALL  ((long double) HUGE_VAL)
-#endif
diff --git a/src/system/libroot/posix/glibc/include/arch/x86_64/bits/mathdef.h 
b/src/system/libroot/posix/glibc/include/arch/x86_64/bits/mathdef.h
deleted file mode 100644
index 19d1fcaa7a..0000000000
--- a/src/system/libroot/posix/glibc/include/arch/x86_64/bits/mathdef.h
+++ /dev/null
@@ -1,57 +0,0 @@
-/* Copyright (C) 2001-2012 Free Software Foundation, Inc.
-   This file is part of the GNU C Library.
-
-   The GNU C Library is free software; you can redistribute it and/or
-   modify it under the terms of the GNU Lesser General Public
-   License as published by the Free Software Foundation; either
-   version 2.1 of the License, or (at your option) any later version.
-
-   The GNU C 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
-   Lesser General Public License for more details.
-
-   You should have received a copy of the GNU Lesser General Public
-   License along with the GNU C Library; if not, see
-   <http://www.gnu.org/licenses/>.  */
-
-#if !defined _MATH_H && !defined _COMPLEX_H
-# error "Never use <bits/mathdef.h> directly; include <math.h> instead"
-#endif
-
-#if defined __USE_ISOC99 && defined _MATH_H && !defined _MATH_H_MATHDEF
-# define _MATH_H_MATHDEF       1
-
-/* The x86-64 architecture computes values with the precission of the
-   used type.  Similarly for -m32 -mfpmath=sse.  */
-typedef float float_t;         /* `float' expressions are evaluated as 
`float'.  */
-typedef double double_t;       /* `double' expressions are evaluated
-                                  as `double'.  */
-
-#define FLT_EVAL_METHOD        0
-
-#if __GNUC_PREREQ(3,3)
-# define INFINITY   (__builtin_inff())
-#else
-# define INFINITY   HUGE_VALF
-#endif
-
-/* The values returned by `ilogb' for 0 and NaN respectively.  */
-# define FP_ILOGB0     (-2147483647 - 1)
-# define FP_ILOGBNAN   (-2147483647 - 1)
-
-/* The GCC 4.6 compiler will define __FP_FAST_FMA{,F,L} if the fma{,f,l}
-   builtins are supported.  */
-# if __FP_FAST_FMA
-#  define FP_FAST_FMA 1
-# endif
-
-# if __FP_FAST_FMAF
-#  define FP_FAST_FMAF 1
-# endif
-
-# if __FP_FAST_FMAL
-#  define FP_FAST_FMAL 1
-# endif
-
-#endif /* ISO C99 */
diff --git a/src/system/libroot/posix/glibc/include/arch/x86_64/bits/nan.h 
b/src/system/libroot/posix/glibc/include/arch/x86_64/bits/nan.h
deleted file mode 100644
index 00cb405f18..0000000000
--- a/src/system/libroot/posix/glibc/include/arch/x86_64/bits/nan.h
+++ /dev/null
@@ -1,52 +0,0 @@
-/* `NAN' constant for IEEE 754 machines.
-   Copyright (C) 1992,1996,1997,1999,2004,2006 Free Software Foundation, Inc.
-   This file is part of the GNU C Library.
-
-   The GNU C Library is free software; you can redistribute it and/or
-   modify it under the terms of the GNU Lesser General Public
-   License as published by the Free Software Foundation; either
-   version 2.1 of the License, or (at your option) any later version.
-
-   The GNU C 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
-   Lesser General Public License for more details.
-
-   You should have received a copy of the GNU Lesser General Public
-   License along with the GNU C Library; if not, see
-   <http://www.gnu.org/licenses/>.  */
-
-#ifndef _MATH_H
-# error "Never use <bits/nan.h> directly; include <math.h> instead."
-#endif
-
-
-/* IEEE Not A Number.  */
-
-#if __GNUC_PREREQ(3,3)
-
-# define NAN   (__builtin_nanf (""))
-
-#elif defined __GNUC__
-
-# define NAN \
-  (__extension__                                                             \
-   ((union { unsigned __l __attribute__ ((__mode__ (__SI__))); float __d; })  \
-    { __l: 0x7fc00000UL }).__d)
-
-#else
-
-# include <endian.h>
-
-# if __BYTE_ORDER == __BIG_ENDIAN
-#  define __nan_bytes          { 0x7f, 0xc0, 0, 0 }
-# endif
-# if __BYTE_ORDER == __LITTLE_ENDIAN
-#  define __nan_bytes          { 0, 0, 0xc0, 0x7f }
-# endif
-
-static union { unsigned char __c[4]; float __d; } __nan_union
-    __attribute_used__ = { __nan_bytes };
-# define NAN   (__nan_union.__d)
-
-#endif /* GCC.  */
diff --git a/src/system/libroot/posix/glibc/math/complex.h 
b/src/system/libroot/posix/glibc/math/complex.h
index 448b0ca787..7172cb6b63 100644
--- a/src/system/libroot/posix/glibc/math/complex.h
+++ b/src/system/libroot/posix/glibc/math/complex.h
@@ -25,11 +25,17 @@
 
 #include <features.h>
 
-/* Get general and ISO C99 specific information.  */
-#include <bits/mathdef.h>
-
 __BEGIN_DECLS
 
+#if __GNUC__ >= 7
+#define __isinfl(value) __builtin_isinfl(value)
+#define __isnan(value) __builtin_isnan(value)
+#define __isnanf(value) __builtin_isnanf(value)
+#define __isnanl(value) __builtin_isnanl(value)
+#define __isinf(value) __builtin_isinf(value)
+#define __isinff(value) __builtin_isinff(value)
+#endif
+
 /* We might need to add support for more compilers here.  But since ISO
    C99 is out hopefully all maintained compilers will soon provide the data
    types `float complex' and `double complex'.  */
diff --git a/src/system/libroot/posix/glibc/math/math.h 
b/src/system/libroot/posix/glibc/math/math.h
index 2e87fc8393..0fada501cb 100644
--- a/src/system/libroot/posix/glibc/math/math.h
+++ b/src/system/libroot/posix/glibc/math/math.h
@@ -1,8 +1,4 @@
-/* Declarations for math functions.
-   Copyright (C) 1991-1993,1995-1999,2001,2002 Free Software Foundation, Inc.
-   This file is part of the GNU C Library.
-
-   The GNU C Library is free software; you can redistribute it and/or
+/* The GNU C Library is free software; you can redistribute it and/or
    modify it under the terms of the GNU Lesser General Public
    License as published by the Free Software Foundation; either
    version 2.1 of the License, or (at your option) any later version.
@@ -17,407 +13,24 @@
    Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
    02111-1307 USA.  */
 
-/*
- *     ISO C99 Standard: 7.12 Mathematics      <math.h>
- */
-
 #ifndef        _MATH_H
 #define        _MATH_H 1
 
-#include <features.h>
-
-__BEGIN_DECLS
-
-/* Get machine-dependent HUGE_VAL value (returned on overflow).
-   On all IEEE754 machines, this is +Infinity.  */
-#include <bits/huge_val.h>
-
-/* Get machine-dependent NAN value (returned for some domain errors).  */
-#ifdef  __USE_ISOC99
-# include <bits/nan.h>
-#endif
-/* Get general and ISO C99 specific information.  */
-#include <bits/mathdef.h>
-
-
-/* The file <bits/mathcalls.h> contains the prototypes for all the
-   actual math functions.  These macros are used for those prototypes,
-   so we can easily declare each function as both `name' and `__name',
-   and can declare the float versions `namef' and `__namef'.  */
-
-#define __MATHCALL(function,suffix, args)      \
-  __MATHDECL (_Mdouble_,function,suffix, args)
-#define __MATHDECL(type, function,suffix, args) \
-  __MATHDECL_1(type, function,suffix, args); \
-  __MATHDECL_1(type, __CONCAT(__,function),suffix, args)
-#define __MATHCALLX(function,suffix, args, attrib)     \
-  __MATHDECLX (_Mdouble_,function,suffix, args, attrib)
-#define __MATHDECLX(type, function,suffix, args, attrib) \
-  __MATHDECL_1(type, function,suffix, args) __attribute__ (attrib); \
-  __MATHDECL_1(type, __CONCAT(__,function),suffix, args) __attribute__ (attrib)
-#define __MATHDECL_1(type, function,suffix, args) \
-  extern type __MATH_PRECNAME(function,suffix) args __THROW
-
-#define _Mdouble_              double
-#define __MATH_PRECNAME(name,r)        __CONCAT(name,r)
-# define _Mdouble_BEGIN_NAMESPACE __BEGIN_NAMESPACE_STD
-# define _Mdouble_END_NAMESPACE   __END_NAMESPACE_STD
-#include <bits/mathcalls.h>
-#undef _Mdouble_
-#undef _Mdouble_BEGIN_NAMESPACE
-#undef _Mdouble_END_NAMESPACE
-#undef __MATH_PRECNAME
-
-#if defined __USE_MISC || defined __USE_ISOC99
-
-
-/* Include the file of declarations again, this time using `float'
-   instead of `double' and appending f to each function name.  */
-
-# ifndef _Mfloat_
-#  define _Mfloat_             float
-# endif
-# define _Mdouble_             _Mfloat_
-# ifdef __STDC__
-#  define __MATH_PRECNAME(name,r) name##f##r
-# else
-#  define __MATH_PRECNAME(name,r) name/**/f/**/r
-# endif
-# define _Mdouble_BEGIN_NAMESPACE __BEGIN_NAMESPACE_C99
-# define _Mdouble_END_NAMESPACE   __END_NAMESPACE_C99
-# include <bits/mathcalls.h>
-# undef        _Mdouble_
-# undef _Mdouble_BEGIN_NAMESPACE
-# undef _Mdouble_END_NAMESPACE
-# undef        __MATH_PRECNAME
-
-# if (__STDC__ - 0 || __GNUC__ - 0) && !defined __NO_LONG_DOUBLE_MATH
-/* Include the file of declarations again, this time using `long double'
-   instead of `double' and appending l to each function name.  */
-
-#  ifndef _Mlong_double_
-#   define _Mlong_double_      long double
-#  endif
-#  define _Mdouble_            _Mlong_double_
-#  ifdef __STDC__
-#   define __MATH_PRECNAME(name,r) name##l##r
-#  else
-#   define __MATH_PRECNAME(name,r) name/**/l/**/r
-#  endif
-#  define _Mdouble_BEGIN_NAMESPACE __BEGIN_NAMESPACE_C99
-#  define _Mdouble_END_NAMESPACE   __END_NAMESPACE_C99
-#  include <bits/mathcalls.h>
-#  undef _Mdouble_
-# undef _Mdouble_BEGIN_NAMESPACE
-# undef _Mdouble_END_NAMESPACE
-#  undef __MATH_PRECNAME
-
-# endif /* __STDC__ || __GNUC__ */
-
-#endif /* Use misc or ISO C99.  */
-#undef __MATHDECL_1
-#undef __MATHDECL
-#undef __MATHCALL
-
-
-#if defined __USE_MISC || defined __USE_XOPEN
-/* This variable is used by `gamma' and `lgamma'.  */
-extern int signgam;
-#endif
-
-
-/* Depending on the type of TG_ARG, call an appropriately suffixed
-   version of FUNC with arguments (including parentheses) ARGS.
-   Suffixed functions may not exist for long double if it has the same
-   format as double, or for other types with the same format as float,
-   double or long double.  The behavior is undefined if the argument
-   does not have a real floating type.  The definition may use a
-   conditional expression, so all suffixed versions of FUNC must
-   return the same type (FUNC may include a cast if necessary rather
-   than being a single identifier).  */
-#ifdef __NO_LONG_DOUBLE_MATH
-# if __HAVE_DISTINCT_FLOAT128
-#  error "Distinct _Float128 without distinct long double not supported."
-# endif
-# define __MATH_TG(TG_ARG, FUNC, ARGS)                                 \
-  (sizeof (TG_ARG) == sizeof (float) ? FUNC ## f ARGS : FUNC ARGS)
-#elif __HAVE_DISTINCT_FLOAT128
-# if __HAVE_GENERIC_SELECTION
-#  if __HAVE_FLOATN_NOT_TYPEDEF && __HAVE_FLOAT32
-#   define __MATH_TG_F32(FUNC, ARGS) _Float32: FUNC ## f ARGS,
-#  else
-#   define __MATH_TG_F32(FUNC, ARGS)
-#  endif
-#  if __HAVE_FLOATN_NOT_TYPEDEF && __HAVE_FLOAT64X
-#   if __HAVE_FLOAT64X_LONG_DOUBLE
-#    define __MATH_TG_F64X(FUNC, ARGS) _Float64x: FUNC ## l ARGS,
-#   else
-#    define __MATH_TG_F64X(FUNC, ARGS) _Float64x: FUNC ## f128 ARGS,
-#   endif
-#  else
-#   define __MATH_TG_F64X(FUNC, ARGS)
-#  endif
-#  define __MATH_TG(TG_ARG, FUNC, ARGS)        \
-     _Generic ((TG_ARG),                       \
-              float: FUNC ## f ARGS,           \
-              __MATH_TG_F32 (FUNC, ARGS)       \
-              default: FUNC ARGS,              \
-              long double: FUNC ## l ARGS,     \
-              __MATH_TG_F64X (FUNC, ARGS)      \
-              _Float128: FUNC ## f128 ARGS)
-# else
-#  if __HAVE_FLOATN_NOT_TYPEDEF
-#   error "Non-typedef _FloatN but no _Generic."
-#  endif
-#  define __MATH_TG(TG_ARG, FUNC, ARGS)                                        
\
-     __builtin_choose_expr                                             \
-     (__builtin_types_compatible_p (__typeof (TG_ARG), float),         \
-      FUNC ## f ARGS,                                                  \
-      __builtin_choose_expr                                            \
-      (__builtin_types_compatible_p (__typeof (TG_ARG), double),       \
-       FUNC ARGS,                                                      \
-       __builtin_choose_expr                                           \
-       (__builtin_types_compatible_p (__typeof (TG_ARG), long double), \
-       FUNC ## l ARGS,                                                 \
-       FUNC ## f128 ARGS)))
-# endif
-#else
-# define __MATH_TG(TG_ARG, FUNC, ARGS)         \
-  (sizeof (TG_ARG) == sizeof (float)           \
-   ? FUNC ## f ARGS                            \
-   : sizeof (TG_ARG) == sizeof (double)                \
-   ? FUNC ARGS                                 \
-   : FUNC ## l ARGS)
-#endif
-
-
-/* ISO C99 defines some generic macros which work on any data type.  */
-#if __USE_ISOC99
-
-/* Get the architecture specific values describing the floating-point
-   evaluation.  The following symbols will get defined:
-
-    float_t    floating-point type at least as wide as `float' used
-               to evaluate `float' expressions
-    double_t   floating-point type at least as wide as `double' used
-               to evaluate `double' expressions
-
-    FLT_EVAL_METHOD
-               Defined to
-                 0     if `float_t' is `float' and `double_t' is `double'
-                 1     if `float_t' and `double_t' are `double'
-                 2     if `float_t' and `double_t' are `long double'
-                 else  `float_t' and `double_t' are unspecified
-
-    INFINITY   representation of the infinity value of type `float'
-
-    FP_FAST_FMA
-    FP_FAST_FMAF
-    FP_FAST_FMAL
-               If defined it indicates that the `fma' function
-               generally executes about as fast as a multiply and an add.
-               This macro is defined only iff the `fma' function is
-               implemented directly with a hardware multiply-add instructions.
-
-    FP_ILOGB0  Expands to a value returned by `ilogb (0.0)'.
-    FP_ILOGBNAN        Expands to a value returned by `ilogb (NAN)'.
-
-    DECIMAL_DIG        Number of decimal digits supported by conversion between
-               decimal and all internal floating-point formats.
-
-*/
-
-/* All floating-point numbers can be put in one of these categories.  */
-enum
-  {
-    FP_NAN,
-# define FP_NAN FP_NAN
-    FP_INFINITE,
-# define FP_INFINITE FP_INFINITE
-    FP_ZERO,
-# define FP_ZERO FP_ZERO
-    FP_SUBNORMAL,
-# define FP_SUBNORMAL FP_SUBNORMAL
-    FP_NORMAL
-# define FP_NORMAL FP_NORMAL
-  };
-
-/* Return number of classification appropriate for X.  */
-# ifdef __NO_LONG_DOUBLE_MATH
-#  define fpclassify(x) \
-     (sizeof (x) == sizeof (float) ? __fpclassifyf (x) : __fpclassify (x))
-# else
-#  define fpclassify(x) \
-     (sizeof (x) == sizeof (float)                                           \
-      ? __fpclassifyf (x)                                                    \
-      : sizeof (x) == sizeof (double)                                        \
-      ? __fpclassify (x) : __fpclassifyl (x))
-# endif
+#include_next <math.h>
 
-/* Return nonzero value if sign of X is negative.  */
-# ifdef __NO_LONG_DOUBLE_MATH
-#  define signbit(x) \
-     (sizeof (x) == sizeof (float) ? __signbitf (x) : __signbit (x))
-# else
-#  define signbit(x) \
-     (sizeof (x) == sizeof (float)                                           \
-      ? __signbitf (x)                                                       \
-      : sizeof (x) == sizeof (double)                                        \
-      ? __signbit (x) : __signbitl (x))
-# endif
-
-/* Return nonzero value if X is not +-Inf or NaN.  */
-# ifdef __NO_LONG_DOUBLE_MATH
-#  define isfinite(x) \
-     (sizeof (x) == sizeof (float) ? __finitef (x) : __finite (x))
-# else
-#  define isfinite(x) \
-     (sizeof (x) == sizeof (float)                                           \
-      ? __finitef (x)                                                        \
-      : sizeof (x) == sizeof (double)                                        \
-      ? __finite (x) : __finitel (x))
-# endif
-
-/* Return nonzero value if X is neither zero, subnormal, Inf, nor NaN.  */
-# define isnormal(x) (fpclassify (x) == FP_NORMAL)
-
-/* Return nonzero value if X is a NaN.  We could use `fpclassify' but
-   we already have this functions `__isnan' and it is faster.  */
-# ifdef __NO_LONG_DOUBLE_MATH
-#  define isnan(x) \
-     (sizeof (x) == sizeof (float) ? __isnanf (x) : __isnan (x))
-# else
-#  define isnan(x) \
-     (sizeof (x) == sizeof (float)                                           \
-      ? __isnanf (x)                                                         \
-      : sizeof (x) == sizeof (double)                                        \
-      ? __isnan (x) : __isnanl (x))
-# endif
-
-/* Return nonzero value is X is positive or negative infinity.  */
-# ifdef __NO_LONG_DOUBLE_MATH
-#  define isinf(x) \
-     (sizeof (x) == sizeof (float) ? __isinff (x) : __isinf (x))
-# else
-#  define isinf(x) \
-     (sizeof (x) == sizeof (float)                                           \
-      ? __isinff (x)                                                         \
-      : sizeof (x) == sizeof (double)                                        \
-      ? __isinf (x) : __isinfl (x))
-# endif
-
-/* Bitmasks for the math_errhandling macro.  */
-# define MATH_ERRNO    1       /* errno set by math functions.  */
-# define MATH_ERREXCEPT        2       /* Exceptions raised by math functions. 
 */
-
-#endif /* Use ISO C99.  */
-
-/* Return nonzero value if X is a signaling NaN.  */
-# ifndef __cplusplus
-#  define issignaling(x) __MATH_TG ((x), __issignaling, (x))
-# else
-   /* In C++ mode, __MATH_TG cannot be used, because it relies on
-      __builtin_types_compatible_p, which is a C-only builtin. */
-# ifdef __NO_LONG_DOUBLE_MATH
-#  define issignaling(x) \
-     (sizeof (x) == sizeof (float) ? __issignalingf (x) : __issignaling (x))
-# else
-#  define issignaling(x) \
-     (sizeof (x) == sizeof (float)                                           \
-      ? __issignalingf (x)                                                   \
-      : sizeof (x) == sizeof (double)                                        \
-      ? __issignaling (x) : __issignalingl (x))
-# endif
-# endif
-
-
-#ifdef __USE_MISC
-/* Support for various different standard error handling behaviors.  */
-typedef enum
-{
-  _IEEE_ = -1, /* According to IEEE 754/IEEE 854.  */
-  _SVID_,      /* According to System V, release 4.  */
-  _XOPEN_,     /* Nowadays also Unix98.  */
-  _POSIX_,
-  _ISOC_       /* Actually this is ISO C99.  */
-} _LIB_VERSION_TYPE;
-
-/* This variable can be changed at run-time to any of the values above to
-   affect floating point error handling behavior (it may also be necessary
-   to change the hardware FPU exception settings).  */
-extern _LIB_VERSION_TYPE _LIB_VERSION;
-#endif
-
-
-#ifdef __USE_SVID
-/* In SVID error handling, `matherr' is called with this description
-   of the exceptional condition.
-
-   We have a problem when using C++ since `exception' is a reserved
-   name in C++.  */
-# ifdef __cplusplus
-struct __exception
-# else
-struct exception
-# endif
-  {
-    int type;
-    char *name;
-    double arg1;
-    double arg2;
-    double retval;
-  };
-
-# ifdef __cplusplus
-extern int matherr (struct __exception *__exc) throw ();
-# else
-extern int matherr (struct exception *__exc);
-# endif
-
-# define X_TLOSS       1.41484755040568800000e+16
-
-/* Types of exceptions in the `type' field.  */
-# define DOMAIN                1
-# define SING          2
-# define OVERFLOW      3
-# define UNDERFLOW     4
-# define TLOSS         5
-# define PLOSS         6
-
-/* SVID mode specifies returning this large value instead of infinity.  */
-# define HUGE          3.40282347e+38F
-
-#else  /* !SVID */
-
-# ifdef __USE_XOPEN
-/* X/Open wants another strange constant.  */
-#  define MAXFLOAT     3.40282347e+38F
-# endif
-
-#endif /* SVID */
+#include <features.h>
 
+#if __GNUC__ == 2
+#define __HUGE_VALL_bytes      { 0, 0, 0, 0, 0, 0, 0, 0x80, 0xff, 0x7f, 0, 0 }
 
-/* Some useful constants.  */
-#if defined __USE_BSD || defined __USE_XOPEN
-# define M_E           2.7182818284590452354   /* e */
-# define M_LOG2E       1.4426950408889634074   /* log_2 e */
-# define M_LOG10E      0.43429448190325182765  /* log_10 e */
-# define M_LN2         0.69314718055994530942  /* log_e 2 */
-# define M_LN10                2.30258509299404568402  /* log_e 10 */
-# define M_PI          3.14159265358979323846  /* pi */
-# define M_PI_2                1.57079632679489661923  /* pi/2 */
-# define M_PI_4                0.78539816339744830962  /* pi/4 */
-# define M_1_PI                0.31830988618379067154  /* 1/pi */
-# define M_2_PI                0.63661977236758134308  /* 2/pi */
-# define M_2_SQRTPI    1.12837916709551257390  /* 2/sqrt(pi) */
-# define M_SQRT2       1.41421356237309504880  /* sqrt(2) */
-# define M_SQRT1_2     0.70710678118654752440  /* 1/sqrt(2) */
+#define __huge_vall_t  union { unsigned char __c[12]; long double __ld; }
+#define HUGE_VALL      (__extension__ \
+                        ((__huge_vall_t) { __c: __HUGE_VALL_bytes }).__ld)
 #endif
 
 /* The above constants are not adequate for computation using `long double's.
    Therefore we provide as an extension constants with similar names as a
    GNU extension.  Provide enough digits for the 128-bit IEEE quad.  */
-#ifdef __USE_GNU
 # define M_El          2.7182818284590452353602874713526625L  /* e */
 # define M_LOG2El      1.4426950408889634073599246810018921L  /* log_2 e */
 # define M_LOG10El     0.4342944819032518276511289189166051L  /* log_10 e */
@@ -431,74 +44,9 @@ extern int matherr (struct exception *__exc);
 # define M_2_SQRTPIl   1.1283791670955125738961589031215452L  /* 2/sqrt(pi) */
 # define M_SQRT2l      1.4142135623730950488016887242096981L  /* sqrt(2) */
 # define M_SQRT1_2l    0.7071067811865475244008443621048490L  /* 1/sqrt(2) */
-#endif
-
-
-/* When compiling in strict ISO C compatible mode we must not use the
-   inline functions since they, among other things, do not set the
-   `errno' variable correctly.  */
-#if defined __STRICT_ANSI__ && !defined __NO_MATH_INLINES
-# define __NO_MATH_INLINES     1
-#endif
-
-#if __USE_ISOC99
-/* ISO C99 defines some macros to compare number while taking care
-   for unordered numbers.  Since many FPUs provide special
-   instructions to support these operations and these tests are
-   defined in <bits/mathinline.h>, we define the generic macros at
-   this late point and only if they are not defined yet.  */
-
-/* Return nonzero value if X is greater than Y.  */
-# ifndef isgreater
-#  define isgreater(x, y) \
-  (__extension__                                                             \
-   ({ __typeof__(x) __x = (x); __typeof__(y) __y = (y);                        
      \
-      !isunordered (__x, __y) && __x > __y; }))
-# endif
-
-/* Return nonzero value if X is greater than or equal to Y.  */
-# ifndef isgreaterequal
-#  define isgreaterequal(x, y) \
-  (__extension__                                                             \
-   ({ __typeof__(x) __x = (x); __typeof__(y) __y = (y);                        
      \
-      !isunordered (__x, __y) && __x >= __y; }))
-# endif
-
-/* Return nonzero value if X is less than Y.  */
-# ifndef isless
-#  define isless(x, y) \
-  (__extension__                                                             \
-   ({ __typeof__(x) __x = (x); __typeof__(y) __y = (y);                        
      \
-      !isunordered (__x, __y) && __x < __y; }))
-# endif
-
-/* Return nonzero value if X is less than or equal to Y.  */
-# ifndef islessequal
-#  define islessequal(x, y) \
-  (__extension__                                                             \
-   ({ __typeof__(x) __x = (x); __typeof__(y) __y = (y);                        
      \
-      !isunordered (__x, __y) && __x <= __y; }))
-# endif
-
-/* Return nonzero value if either X is less than Y or Y is less than X.  */
-# ifndef islessgreater
-#  define islessgreater(x, y) \
-  (__extension__                                                             \
-   ({ __typeof__(x) __x = (x); __typeof__(y) __y = (y);                        
      \
-      !isunordered (__x, __y) && (__x < __y || __y < __x); }))
-# endif
-
-/* Return nonzero value if arguments are unordered.  */
-# ifndef isunordered
-#  define isunordered(u, v) \
-  (__extension__                                                             \
-   ({ __typeof__(u) __u = (u); __typeof__(v) __v = (v);                        
      \
-      fpclassify (__u) == FP_NAN || fpclassify (__v) == FP_NAN; }))
-# endif
-
-#endif
-
-__END_DECLS
 
+extern void sincos(double x, double *sin, double *cos);
+extern void sincosf(float x, float *sin, float *cos);
+extern void sincosl(long double x, long double *sin, long double *cos);
 
 #endif /* math.h  */


Other related posts:

  • » [haiku-commits] haiku: hrev53732 - in src/system/libroot/posix/glibc: math include/arch/ppc/bits include/arch/x86/bits include/arch/m68k/bits include/arch/arm/bits - waddlesplash