about summary refs log tree commit diff
path: root/sysdeps
diff options
context:
space:
mode:
Diffstat (limited to 'sysdeps')
-rw-r--r--sysdeps/powerpc/bits/fenvinline.h108
-rw-r--r--sysdeps/powerpc/fpu/fegetround.c8
-rw-r--r--sysdeps/powerpc/fpu/fraiseexcpt.c1
-rw-r--r--sysdeps/powerpc/nofpu/fraiseexcpt.c1
4 files changed, 5 insertions, 113 deletions
diff --git a/sysdeps/powerpc/bits/fenvinline.h b/sysdeps/powerpc/bits/fenvinline.h
deleted file mode 100644
index f2d095a72f..0000000000
--- a/sysdeps/powerpc/bits/fenvinline.h
+++ /dev/null
@@ -1,108 +0,0 @@
-/* Inline floating-point environment handling functions for powerpc.
-   Copyright (C) 1995-2020 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
-   <https://www.gnu.org/licenses/>.  */
-
-#if defined __GNUC__ && !defined _SOFT_FLOAT && !defined __NO_FPRS__
-
-/* Inline definitions for fegetround.  */
-# define __fegetround_ISA300()						\
-  (__extension__  ({							\
-    union { double __d; unsigned long long __ll; } __u;			\
-    __asm__ __volatile__ (						\
-      ".machine push; .machine \"power9\"; mffsl %0; .machine pop"	\
-      : "=f" (__u.__d));						\
-    __u.__ll & 0x0000000000000003LL;					\
-  }))
-
-# define __fegetround_ISA2()						\
-  (__extension__  ({							\
-     int __fegetround_result;						\
-     __asm__ __volatile__ ("mcrfs 7,7 ; mfcr %0"			\
-			   : "=r"(__fegetround_result) : : "cr7");	\
-     __fegetround_result & 3;						\
-  }))
-
-# ifdef _ARCH_PWR9
-#  define __fegetround() __fegetround_ISA300()
-# elif defined __BUILTIN_CPU_SUPPORTS__
-#  define __fegetround()						\
-  (__glibc_likely (__builtin_cpu_supports ("arch_3_00"))		\
-   ? __fegetround_ISA300()						\
-   : __fegetround_ISA2()						\
-  )
-# else
-#  define __fegetround() __fegetround_ISA2()
-# endif
-
-# define fegetround() __fegetround ()
-
-# ifndef __NO_MATH_INLINES
-
-/* Builtins to mtfsb0 and mtfsb1 was introduced on GCC 9.  */
-#  if !__GNUC_PREREQ(9, 0)
-/* The weird 'i#*X' constraints on the following suppress a gcc
-   warning when __excepts is not a constant.  Otherwise, they mean the
-   same as just plain 'i'.  This warning only happens in old GCC
-   versions (gcc 3 or less).  Otherwise plain 'i' works fine.  */
-#   define __MTFSB0(__b) __asm__ __volatile__ ("mtfsb0 %0" : : "i#*X" (__b))
-#   define __MTFSB1(__b) __asm__ __volatile__ ("mtfsb1 %0" : : "i#*X" (__b))
-#  else
-#   define __MTFSB0(__b) __builtin_mtfsb0 (__b)
-#   define __MTFSB1(__b) __builtin_mtfsb1 (__b)
-#  endif
-
-#  if __GNUC_PREREQ(3, 4)
-
-#include <sys/param.h>
-
-/* Inline definition for feraiseexcept.  */
-#   define feraiseexcept(__excepts) \
-  (__extension__  ({ 							      \
-    int __e = __excepts;						      \
-    int __ret = 0;							      \
-    if (__builtin_constant_p (__e)					      \
-        && __builtin_popcount (__e) == 1				      \
-        && __e != FE_INVALID)						      \
-      {									      \
-	__MTFSB1 ((__builtin_clz (__e)));				      \
-      }									      \
-    else								      \
-      __ret = feraiseexcept (__e);					      \
-    __ret;								      \
-  }))
-
-/* Inline definition for feclearexcept.  */
-#   define feclearexcept(__excepts) \
-  (__extension__  ({ 							      \
-    int __e = __excepts;						      \
-    int __ret = 0;							      \
-    if (__builtin_constant_p (__e)					      \
-        && __builtin_popcount (__e) == 1				      \
-        && __e != FE_INVALID)						      \
-      {									      \
-	__MTFSB0 ((__builtin_clz (__e)));				      \
-      }									      \
-    else								      \
-      __ret = feclearexcept (__e);					      \
-    __ret;								      \
-  }))
-
-#  endif /* __GNUC_PREREQ(3, 4).  */
-
-# endif /* !__NO_MATH_INLINES.  */
-
-#endif /* __GNUC__ && !_SOFT_FLOAT && !__NO_FPRS__ */
diff --git a/sysdeps/powerpc/fpu/fegetround.c b/sysdeps/powerpc/fpu/fegetround.c
index 00b4462624..7f50c58177 100644
--- a/sysdeps/powerpc/fpu/fegetround.c
+++ b/sysdeps/powerpc/fpu/fegetround.c
@@ -21,10 +21,12 @@
 int
 (__fegetround) (void)
 {
-  return __fegetround();
+  fenv_union_t fe;
+
+  fe.fenv = fegetenv_control ();
+
+  return fe.l & 0x3;
 }
-#undef fegetround
-#undef __fegetround
 libm_hidden_def (__fegetround)
 weak_alias (__fegetround, fegetround)
 libm_hidden_weak (fegetround)
diff --git a/sysdeps/powerpc/fpu/fraiseexcpt.c b/sysdeps/powerpc/fpu/fraiseexcpt.c
index daa13de500..1bcd31ae14 100644
--- a/sysdeps/powerpc/fpu/fraiseexcpt.c
+++ b/sysdeps/powerpc/fpu/fraiseexcpt.c
@@ -18,7 +18,6 @@
 
 #include <fenv_libc.h>
 
-#undef feraiseexcept
 int
 __feraiseexcept (int excepts)
 {
diff --git a/sysdeps/powerpc/nofpu/fraiseexcpt.c b/sysdeps/powerpc/nofpu/fraiseexcpt.c
index 2193a604e2..e60ed68048 100644
--- a/sysdeps/powerpc/nofpu/fraiseexcpt.c
+++ b/sysdeps/powerpc/nofpu/fraiseexcpt.c
@@ -21,7 +21,6 @@
 #include "soft-supp.h"
 #include <signal.h>
 
-#undef feraiseexcept
 int
 __feraiseexcept (int x)
 {