diff options
Diffstat (limited to 'sysdeps/sparc/fpu/bits')
-rw-r--r-- | sysdeps/sparc/fpu/bits/fenv.h | 101 | ||||
-rw-r--r-- | sysdeps/sparc/fpu/bits/mathinline.h | 290 |
2 files changed, 0 insertions, 391 deletions
diff --git a/sysdeps/sparc/fpu/bits/fenv.h b/sysdeps/sparc/fpu/bits/fenv.h deleted file mode 100644 index 95e37d0b2c..0000000000 --- a/sysdeps/sparc/fpu/bits/fenv.h +++ /dev/null @@ -1,101 +0,0 @@ -/* Copyright (C) 1997-2017 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 _FENV_H -# error "Never use <bits/fenv.h> directly; include <fenv.h> instead." -#endif - -#include <bits/wordsize.h> - - -/* Define bits representing the exception. We use the bit positions - of the appropriate accrued exception bits from the FSR. */ -enum - { - FE_INVALID = -#define FE_INVALID (1 << 9) - FE_INVALID, - FE_OVERFLOW = -#define FE_OVERFLOW (1 << 8) - FE_OVERFLOW, - FE_UNDERFLOW = -#define FE_UNDERFLOW (1 << 7) - FE_UNDERFLOW, - FE_DIVBYZERO = -#define FE_DIVBYZERO (1 << 6) - FE_DIVBYZERO, - FE_INEXACT = -#define FE_INEXACT (1 << 5) - FE_INEXACT - }; - -#define FE_ALL_EXCEPT \ - (FE_INEXACT | FE_DIVBYZERO | FE_UNDERFLOW | FE_OVERFLOW | FE_INVALID) - -/* The Sparc FPU supports all of the four defined rounding modes. We - use again the bit positions in the FPU control word as the values - for the appropriate macros. */ -enum - { - FE_TONEAREST = -#define FE_TONEAREST (0 << 30) - FE_TONEAREST, - FE_TOWARDZERO = -#define FE_TOWARDZERO (1 << 30) - FE_TOWARDZERO, - FE_UPWARD = -#define FE_UPWARD (-0x7fffffff - 1) /* (2 << 30) */ - FE_UPWARD, - FE_DOWNWARD = -#define FE_DOWNWARD (-0x40000000) /* (3 << 30) */ - FE_DOWNWARD - }; - -#define __FE_ROUND_MASK (3U << 30) - - -/* Type representing exception flags. */ -typedef unsigned long int fexcept_t; - - -/* Type representing floating-point environment. */ -typedef unsigned long int fenv_t; - -/* If the default argument is used we use this value. */ -#define FE_DFL_ENV ((const fenv_t *) -1) - -#ifdef __USE_GNU -/* Floating-point environment where none of the exception is masked. */ -# define FE_NOMASK_ENV ((const fenv_t *) -2) -#endif - -/* For internal use only: access the fp state register. */ -#if __WORDSIZE == 64 -# define __fenv_stfsr(X) __asm__ __volatile__ ("stx %%fsr,%0" : "=m" (X)) -# define __fenv_ldfsr(X) __asm__ __volatile__ ("ldx %0,%%fsr" : : "m" (X)) -#else -# define __fenv_stfsr(X) __asm__ __volatile__ ("st %%fsr,%0" : "=m" (X)) -# define __fenv_ldfsr(X) __asm__ __volatile__ ("ld %0,%%fsr" : : "m" (X)) -#endif - -#if __GLIBC_USE (IEC_60559_BFP_EXT) -/* Type representing floating-point control modes. */ -typedef unsigned long int femode_t; - -/* Default floating-point control modes. */ -# define FE_DFL_MODE ((const femode_t *) -1L) -#endif diff --git a/sysdeps/sparc/fpu/bits/mathinline.h b/sysdeps/sparc/fpu/bits/mathinline.h deleted file mode 100644 index 60a2028f2c..0000000000 --- a/sysdeps/sparc/fpu/bits/mathinline.h +++ /dev/null @@ -1,290 +0,0 @@ -/* Inline math functions for SPARC. - Copyright (C) 1999-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Jakub Jelinek <jakub@redhat.com>. - - 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/mathinline.h> directly; include <math.h> instead." -#endif - -#include <bits/wordsize.h> - -#ifdef __GNUC__ - -#if defined __USE_ISOC99 && !__GNUC_PREREQ (3, 0) -# undef isgreater -# undef isgreaterequal -# undef isless -# undef islessequal -# undef islessgreater -# undef isunordered - -# if __WORDSIZE == 32 - -# ifndef __NO_LONG_DOUBLE_MATH - -# define __unordered_cmp(x, y) \ - (__extension__ \ - ({ unsigned __r; \ - if (sizeof (x) == 4 && sizeof (y) == 4) \ - { \ - float __x = (x); float __y = (y); \ - __asm__ ("fcmps %1,%2; st %%fsr, %0" : "=m" (__r) : "f" (__x), \ - "f" (__y) : "cc"); \ - } \ - else if (sizeof (x) <= 8 && sizeof (y) <= 8) \ - { \ - double __x = (x); double __y = (y); \ - __asm__ ("fcmpd\t%1,%2\n\tst\t%%fsr,%0" : "=m" (__r) : "f" (__x), \ - "f" (__y) : "cc"); \ - } \ - else \ - { \ - long double __x = (x); long double __y = (y); \ - extern int _Q_cmp (const long double a, const long double b); \ - __r = _Q_cmp (__x, __y) << 10; \ - } \ - __r; })) - -# else - -# define __unordered_cmp(x, y) \ - (__extension__ \ - ({ unsigned __r; \ - if (sizeof (x) == 4 && sizeof (y) == 4) \ - { \ - float __x = (x); float __y = (y); \ - __asm__ ("fcmps %1,%2; st %%fsr, %0" : "=m" (__r) : "f" (__x), \ - "f" (__y) : "cc"); \ - } \ - else \ - { \ - double __x = (x); double __y = (y); \ - __asm__ ("fcmpd\t%1,%2\n\tst\t%%fsr,%0" : "=m" (__r) : "f" (__x), \ - "f" (__y) : "cc"); \ - } \ - __r; })) - -# endif - -# define isgreater(x, y) ((__unordered_cmp (x, y) & (3 << 10)) == (2 << 10)) -# define isgreaterequal(x, y) ((__unordered_cmp (x, y) & (1 << 10)) == 0) -# define isless(x, y) ((__unordered_cmp (x, y) & (3 << 10)) == (1 << 10)) -# define islessequal(x, y) ((__unordered_cmp (x, y) & (2 << 10)) == 0) -# define islessgreater(x, y) (((__unordered_cmp (x, y) + (1 << 10)) & (2 << 10)) != 0) -# define isunordered(x, y) ((__unordered_cmp (x, y) & (3 << 10)) == (3 << 10)) - -# else /* sparc64 */ - -# define __unordered_v9cmp(x, y, op, qop) \ - (__extension__ \ - ({ unsigned __r; \ - if (sizeof (x) == 4 && sizeof (y) == 4) \ - { \ - float __x = (x); float __y = (y); \ - __asm__ ("fcmps\t%%fcc3,%1,%2\n\tmov" op "\t%%fcc3,1,%0" \ - : "=r" (__r) : "f" (__x), "f" (__y), "0" (0) : "cc"); \ - } \ - else if (sizeof (x) <= 8 && sizeof (y) <= 8) \ - { \ - double __x = (x); double __y = (y); \ - __asm__ ("fcmpd\t%%fcc3,%1,%2\n\tmov" op "\t%%fcc3,1,%0" \ - : "=r" (__r) : "f" (__x), "f" (__y), "0" (0) : "cc"); \ - } \ - else \ - { \ - long double __x = (x); long double __y = (y); \ - extern int _Qp_cmp (const long double *a, const long double *b); \ - __r = qop; \ - } \ - __r; })) - -# define isgreater(x, y) __unordered_v9cmp(x, y, "g", _Qp_cmp (&__x, &__y) == 2) -# define isgreaterequal(x, y) __unordered_v9cmp(x, y, "ge", (_Qp_cmp (&__x, &__y) & 1) == 0) -# define isless(x, y) __unordered_v9cmp(x, y, "l", _Qp_cmp (&__x, &__y) == 1) -# define islessequal(x, y) __unordered_v9cmp(x, y, "le", (_Qp_cmp (&__x, &__y) & 2) == 0) -# define islessgreater(x, y) __unordered_v9cmp(x, y, "lg", ((_Qp_cmp (&__x, &__y) + 1) & 2) != 0) -# define isunordered(x, y) __unordered_v9cmp(x, y, "u", _Qp_cmp (&__x, &__y) == 3) - -# endif /* sparc64 */ - -#endif /* __USE_ISOC99 */ - -#if (!defined __NO_MATH_INLINES || defined __LIBC_INTERNAL_MATH_INLINES) && defined __OPTIMIZE__ - -# ifndef __extern_inline -# define __MATH_INLINE __inline -# else -# define __MATH_INLINE __extern_inline -# endif /* __cplusplus */ - -/* The gcc, version 2.7 or below, has problems with all this inlining - code. So disable it for this version of the compiler. */ -# if __GNUC_PREREQ (2, 8) - -# ifdef __USE_ISOC99 - -/* Test for negative number. Used in the signbit() macro. */ -__MATH_INLINE int -__NTH (__signbitf (float __x)) -{ - __extension__ union { float __f; int __i; } __u = { __f: __x }; - return __u.__i < 0; -} - -# if __WORDSIZE == 32 - -__MATH_INLINE int -__NTH (__signbit (double __x)) -{ - __extension__ union { double __d; int __i[2]; } __u = { __d: __x }; - return __u.__i[0] < 0; -} - -# ifndef __NO_LONG_DOUBLE_MATH -__MATH_INLINE int -__NTH (__signbitl (long double __x)) -{ - __extension__ union { long double __l; int __i[4]; } __u = { __l: __x }; - return __u.__i[0] < 0; -} -# else -__MATH_INLINE int -__NTH (__signbitl (long double __x)) -{ - return __signbit ((double)__x); -} -# endif - -# else /* sparc64 */ - -__MATH_INLINE int -__NTH (__signbit (double __x)) -{ - __extension__ union { double __d; long int __i; } __u = { __d: __x }; - return __u.__i < 0; -} - -__MATH_INLINE int -__NTH (__signbitl (long double __x)) -{ - __extension__ union { long double __l; long int __i[2]; } __u = { __l: __x }; - return __u.__i[0] < 0; -} - -# endif /* sparc64 */ - -# endif /* __USE_ISOC99 */ - -# if !defined __NO_MATH_INLINES && !__GNUC_PREREQ (3, 2) - -__MATH_INLINE double -__NTH (sqrt (double __x)) -{ - register double __r; - __asm ("fsqrtd %1,%0" : "=f" (__r) : "f" (__x)); - return __r; -} - -__MATH_INLINE float -__NTH (sqrtf (float __x)) -{ - register float __r; - __asm ("fsqrts %1,%0" : "=f" (__r) : "f" (__x)); - return __r; -} - -# if __WORDSIZE == 64 -__MATH_INLINE long double -__NTH (sqrtl (long double __x)) -{ - long double __r; - extern void _Qp_sqrt (long double *, const long double *); - _Qp_sqrt (&__r, &__x); - return __r; -} -# elif !defined __NO_LONG_DOUBLE_MATH -__MATH_INLINE long double -sqrtl (long double __x) __THROW -{ - extern long double _Q_sqrt (const long double); - return _Q_sqrt (__x); -} -# endif /* sparc64 */ - -# endif /* !__NO_MATH_INLINES && !GCC 3.2+ */ - -/* This code is used internally in the GNU libc. */ -# ifdef __LIBC_INTERNAL_MATH_INLINES -__MATH_INLINE double -__ieee754_sqrt (double __x) -{ - register double __r; - __asm ("fsqrtd %1,%0" : "=f" (__r) : "f" (__x)); - return __r; -} - -__MATH_INLINE float -__ieee754_sqrtf (float __x) -{ - register float __r; - __asm ("fsqrts %1,%0" : "=f" (__r) : "f" (__x)); - return __r; -} - -# if __WORDSIZE == 64 -__MATH_INLINE long double -__ieee754_sqrtl (long double __x) -{ - long double __r; - extern void _Qp_sqrt (long double *, const long double *); - _Qp_sqrt(&__r, &__x); - return __r; -} -# elif !defined __NO_LONG_DOUBLE_MATH -__MATH_INLINE long double -__ieee754_sqrtl (long double __x) -{ - extern long double _Q_sqrt (const long double); - return _Q_sqrt (__x); -} -# endif /* sparc64 */ -# endif /* __LIBC_INTERNAL_MATH_INLINES */ -# endif /* gcc 2.8+ */ - -# ifdef __USE_ISOC99 - -# ifndef __NO_MATH_INLINES - -__MATH_INLINE double __NTH (fdim (double __x, double __y)); -__MATH_INLINE double -__NTH (fdim (double __x, double __y)) -{ - return __x <= __y ? 0 : __x - __y; -} - -__MATH_INLINE float __NTH (fdimf (float __x, float __y)); -__MATH_INLINE float -__NTH (fdimf (float __x, float __y)) -{ - return __x <= __y ? 0 : __x - __y; -} - -# endif /* !__NO_MATH_INLINES */ -# endif /* __USE_ISOC99 */ -#endif /* !__NO_MATH_INLINES && __OPTIMIZE__ */ -#endif /* __GNUC__ */ |