700593fdd7
Remove the now unused target specific__ieee754_sqrt(f/l) inlines. Also remove inlines of sqrt which are for really old GCC versions. Removing these is desirable, under the general principle of leaving such inlining to the compiler rather than trying to do it in installed headers, especially when only very old compilers are affected. Note that removing inlines for __ieee754_sqrt disables inlining in the sqrt wrapper functions. Given the sqrt function will typically only be called for negative arguments, it doesn't matter whether the inlining happens or not. * sysdeps/aarch64/fpu/math_private.h (__ieee754_sqrt): Remove. (__ieee754_sqrtf): Remove. * sysdeps/alpha/fpu/math_private.h (__ieee754_sqrt): Remove. (__ieee754_sqrtf): Remove. * sysdeps/generic/math-type-macros.h (M_SQRT): Use sqrt. * sysdeps/m68k/m680x0/fpu/mathimpl.h (__ieee754_sqrt): Remove. * sysdeps/powerpc/fpu/math_private.h (__ieee754_sqrt): Remove. (__ieee754_sqrtf): Remove. * sysdeps/s390/fpu/bits/mathinline.h: Remove file. * sysdeps/sparc/fpu/bits/mathinline.h (sqrt) Remove. (sqrtf): Remove. (sqrtl): Remove. (__ieee754_sqrt): Remove. (__ieee754_sqrtf): Remove. (__ieee754_sqrtl): Remove. * sysdeps/m68k/m680x0/fpu/mathimpl.h (__ieee754_sqrt): Remove. * sysdeps/x86/fpu/math_private.h (__ieee754_sqrt): Remove. * sysdeps/x86_64/fpu/math_private.h (__ieee754_sqrt): Remove. (__ieee754_sqrtf): Remove. (__ieee754_sqrtl): Remove.
130 lines
3.0 KiB
C
130 lines
3.0 KiB
C
/* Private inline math functions for powerpc.
|
|
Copyright (C) 2006-2018 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 _PPC_MATH_PRIVATE_H_
|
|
#define _PPC_MATH_PRIVATE_H_
|
|
|
|
#include <sysdep.h>
|
|
#include <ldsodefs.h>
|
|
#include <dl-procinfo.h>
|
|
#include <fenv_private.h>
|
|
|
|
/* Avoid putting floating point values in memory. */
|
|
# define math_opt_barrier(x) \
|
|
({ __typeof (x) __x = (x); __asm ("" : "+dwa" (__x)); __x; })
|
|
# define math_force_eval(x) \
|
|
({ __typeof (x) __x = (x); __asm __volatile__ ("" : : "dwa" (__x)); })
|
|
|
|
#include_next <math_private.h>
|
|
|
|
#if defined _ARCH_PWR9 && __HAVE_DISTINCT_FLOAT128
|
|
extern __always_inline _Float128
|
|
__ieee754_sqrtf128 (_Float128 __x)
|
|
{
|
|
_Float128 __z;
|
|
asm ("xssqrtqp %0,%1" : "=v" (__z) : "v" (__x));
|
|
return __z;
|
|
}
|
|
#endif
|
|
|
|
#if defined _ARCH_PWR5X
|
|
|
|
# ifndef __round
|
|
# define __round(x) \
|
|
({ double __z; \
|
|
__asm __volatile ( \
|
|
" frin %0,%1\n" \
|
|
: "=f" (__z) \
|
|
: "f" (x)); \
|
|
__z; })
|
|
# endif
|
|
# ifndef __roundf
|
|
# define __roundf(x) \
|
|
({ float __z; \
|
|
__asm __volatile ( \
|
|
" frin %0,%1\n" \
|
|
" frsp %0,%0\n" \
|
|
: "=f" (__z) \
|
|
: "f" (x)); \
|
|
__z; })
|
|
# endif
|
|
|
|
# ifndef __trunc
|
|
# define __trunc(x) \
|
|
({ double __z; \
|
|
__asm __volatile ( \
|
|
" friz %0,%1\n" \
|
|
: "=f" (__z) \
|
|
: "f" (x)); \
|
|
__z; })
|
|
# endif
|
|
# ifndef __truncf
|
|
# define __truncf(x) \
|
|
({ float __z; \
|
|
__asm __volatile ( \
|
|
" friz %0,%1\n" \
|
|
" frsp %0,%0\n" \
|
|
: "=f" (__z) \
|
|
: "f" (x)); \
|
|
__z; })
|
|
# endif
|
|
|
|
# ifndef __ceil
|
|
# define __ceil(x) \
|
|
({ double __z; \
|
|
__asm __volatile ( \
|
|
" frip %0,%1\n" \
|
|
: "=f" (__z) \
|
|
: "f" (x)); \
|
|
__z; })
|
|
# endif
|
|
# ifndef __ceilf
|
|
# define __ceilf(x) \
|
|
({ float __z; \
|
|
__asm __volatile ( \
|
|
" frip %0,%1\n" \
|
|
" frsp %0,%0\n" \
|
|
: "=f" (__z) \
|
|
: "f" (x)); \
|
|
__z; })
|
|
# endif
|
|
|
|
# ifndef __floor
|
|
# define __floor(x) \
|
|
({ double __z; \
|
|
__asm __volatile ( \
|
|
" frim %0,%1\n" \
|
|
: "=f" (__z) \
|
|
: "f" (x)); \
|
|
__z; })
|
|
# endif
|
|
# ifndef __floorf
|
|
# define __floorf(x) \
|
|
({ float __z; \
|
|
__asm __volatile ( \
|
|
" frim %0,%1\n" \
|
|
" frsp %0,%0\n" \
|
|
: "=f" (__z) \
|
|
: "f" (x)); \
|
|
__z; })
|
|
# endif
|
|
|
|
#endif /* defined _ARCH_PWR5X */
|
|
|
|
#endif /* _PPC_MATH_PRIVATE_H_ */
|