* sysdeps/powerpc/fpu/fenv_libc.h: Add libm_hidden_proto for
__fe_nomask_env. * sysdeps/powerpc/fpu/fe_nomask.c: Add libm_hidden_def. * sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/fe_nomask.c: Likewise. * sysdeps/unix/sysv/linux/powerpc/powerpc64/fpu/fe_nomask.c: Likewise. * sysdeps/powerpc/bits/fenv.h: Make safe for C++. * sysdeps/unix/sysv/linux/powerpc/bits/mathinline.h: New file. * sysdeps/powerpc/fpu/fegetexcept.c (__fegetexcept): Rename function from fegetexcept and make old name weak alias. * include/fenv.h: Declare __fegetexcept. * sysdeps/powerpc/fpu/fedisblxcpt.c: Use __fegetexcept instead of fegetexcept. * sysdeps/powerpc/fpu/feenablxcpt.c: Likewise. * sysdeps/powerpc/fpu/fraiseexcpt.c (__feraiseexcept): Avoid call to fetestexcept. * sysdeps/ieee754/ldbl-128ibm/s_log1pl.c (__log1pl): Use __frexpl instead of frexpl to avoid local PLT. * math/s_significandl.c (__significandl): Use __ilogbl instead of ilogbl to avoid local PLT. * sysdeps/ieee754/ldbl-128ibm/s_expm1l.c (__expm1l): Use __ldexpl instead of ldexpl to avoid local PLT. * sysdeps/ieee754/ldbl-128ibm/e_expl.c (__ieee754_expl): Use __roundl not roundl to avoid local PLT. * sysdeps/ieee754/ldbl-128/e_j0l.c: Use function names which avoid local PLTs. Use __sincosl instead of separate sinl and cosl calls. * sysdeps/ieee754/ldbl-128/e_j1l.c: Likewise.
This commit is contained in:
parent
2dc4a2fd9e
commit
246ec41199
30
ChangeLog
30
ChangeLog
@ -1,5 +1,35 @@
|
||||
2008-04-11 Ulrich Drepper <drepper@redhat.com>
|
||||
|
||||
* sysdeps/powerpc/fpu/fenv_libc.h: Add libm_hidden_proto for
|
||||
__fe_nomask_env.
|
||||
* sysdeps/powerpc/fpu/fe_nomask.c: Add libm_hidden_def.
|
||||
* sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/fe_nomask.c: Likewise.
|
||||
* sysdeps/unix/sysv/linux/powerpc/powerpc64/fpu/fe_nomask.c: Likewise.
|
||||
|
||||
* sysdeps/powerpc/bits/fenv.h: Make safe for C++.
|
||||
|
||||
* sysdeps/unix/sysv/linux/powerpc/bits/mathinline.h: New file.
|
||||
* sysdeps/powerpc/fpu/fegetexcept.c (__fegetexcept): Rename
|
||||
function from fegetexcept and make old name weak alias.
|
||||
* include/fenv.h: Declare __fegetexcept.
|
||||
* sysdeps/powerpc/fpu/fedisblxcpt.c: Use __fegetexcept instead of
|
||||
fegetexcept.
|
||||
* sysdeps/powerpc/fpu/feenablxcpt.c: Likewise.
|
||||
* sysdeps/powerpc/fpu/fraiseexcpt.c (__feraiseexcept): Avoid call
|
||||
to fetestexcept.
|
||||
* sysdeps/ieee754/ldbl-128ibm/s_log1pl.c (__log1pl): Use __frexpl
|
||||
instead of frexpl to avoid local PLT.
|
||||
* math/s_significandl.c (__significandl): Use __ilogbl instead of
|
||||
ilogbl to avoid local PLT.
|
||||
* sysdeps/ieee754/ldbl-128ibm/s_expm1l.c (__expm1l): Use __ldexpl
|
||||
instead of ldexpl to avoid local PLT.
|
||||
* sysdeps/ieee754/ldbl-128ibm/e_expl.c (__ieee754_expl): Use
|
||||
__roundl not roundl to avoid local PLT.
|
||||
* sysdeps/ieee754/ldbl-128/e_j0l.c: Use function names which avoid
|
||||
local PLTs. Use __sincosl instead of separate sinl and cosl
|
||||
calls.
|
||||
* sysdeps/ieee754/ldbl-128/e_j1l.c: Likewise.
|
||||
|
||||
* sysdeps/unix/sysv/linux/configure.in: Bump minimal kernel
|
||||
version for ppc64 to 2.4.21 since without it makecontext will fail.
|
||||
|
||||
|
@ -4,6 +4,7 @@
|
||||
/* Now define the internal interfaces. */
|
||||
|
||||
extern int __feclearexcept (int __excepts);
|
||||
extern int __fegetexcept (void);
|
||||
extern int __fegetexceptflag (fexcept_t *__flagp, int __excepts);
|
||||
extern int __feraiseexcept (int __excepts);
|
||||
extern int __fesetexceptflag (__const fexcept_t *__flagp, int __excepts);
|
||||
|
@ -34,6 +34,6 @@ static char rcsid[] = "$NetBSD: $";
|
||||
long double x;
|
||||
#endif
|
||||
{
|
||||
return __ieee754_scalbl(x,(long double) -ilogbl(x));
|
||||
return __ieee754_scalbl(x,(long double) -__ilogbl(x));
|
||||
}
|
||||
weak_alias (__significandl, significandl)
|
||||
|
@ -768,16 +768,15 @@ __ieee754_j0l (long double x)
|
||||
= 1/sqrt(2) * (sin(x) - cos(x))
|
||||
sin(x) +- cos(x) = -cos(2x)/(sin(x) -+ cos(x))
|
||||
cf. Fdlibm. */
|
||||
c = cosl (xx);
|
||||
s = sinl (xx);
|
||||
__sincosl (xx, &s, &c);
|
||||
ss = s - c;
|
||||
cc = s + c;
|
||||
z = -cosl (xx + xx);
|
||||
z = -__cosl (xx + xx);
|
||||
if ((s * c) < 0)
|
||||
cc = z / ss;
|
||||
else
|
||||
ss = z / cc;
|
||||
z = ONEOSQPI * (p * cc - q * ss) / sqrtl (xx);
|
||||
z = ONEOSQPI * (p * cc - q * ss) / __ieee754_sqrtl (xx);
|
||||
return z;
|
||||
}
|
||||
|
||||
@ -836,7 +835,7 @@ long double
|
||||
/* 0 <= x <= 2 */
|
||||
z = xx * xx;
|
||||
p = neval (z, Y0_2N, NY0_2N) / deval (z, Y0_2D, NY0_2D);
|
||||
p = TWOOPI * logl(x) * __ieee754_j0l(x) + p;
|
||||
p = TWOOPI * __ieee754_logl (x) * __ieee754_j0l (x) + p;
|
||||
return p;
|
||||
}
|
||||
|
||||
@ -908,15 +907,14 @@ long double
|
||||
= 1/sqrt(2) * (sin(x) - cos(x))
|
||||
sin(x) +- cos(x) = -cos(2x)/(sin(x) -+ cos(x))
|
||||
cf. Fdlibm. */
|
||||
c = cosl (x);
|
||||
s = sinl (x);
|
||||
__sincosl (x, &s, &c);
|
||||
ss = s - c;
|
||||
cc = s + c;
|
||||
z = -cosl (x + x);
|
||||
z = -__cosl (x + x);
|
||||
if ((s * c) < 0)
|
||||
cc = z / ss;
|
||||
else
|
||||
ss = z / cc;
|
||||
z = ONEOSQPI * (p * ss + q * cc) / sqrtl (x);
|
||||
z = ONEOSQPI * (p * ss + q * cc) / __ieee754_sqrtl (x);
|
||||
return z;
|
||||
}
|
||||
|
@ -773,16 +773,15 @@ __ieee754_j1l (long double x)
|
||||
sin(X) = sin(x) cos(3 pi/4) - cos(x) sin(3 pi/4)
|
||||
= -1/sqrt(2) * (sin(x) + cos(x))
|
||||
cf. Fdlibm. */
|
||||
c = cosl (xx);
|
||||
s = sinl (xx);
|
||||
__sincosl (xx, &s, &c);
|
||||
ss = -s - c;
|
||||
cc = s - c;
|
||||
z = cosl (xx + xx);
|
||||
z = __cosl (xx + xx);
|
||||
if ((s * c) > 0)
|
||||
cc = z / ss;
|
||||
else
|
||||
ss = z / cc;
|
||||
z = ONEOSQPI * (p * cc - q * ss) / sqrtl (xx);
|
||||
z = ONEOSQPI * (p * cc - q * ss) / __ieee754_sqrtl (xx);
|
||||
if (x < 0)
|
||||
z = -z;
|
||||
return z;
|
||||
@ -844,7 +843,7 @@ __ieee754_y1l (long double x)
|
||||
z = xx * xx;
|
||||
p = xx * neval (z, Y0_2N, NY0_2N) / deval (z, Y0_2D, NY0_2D);
|
||||
p = -TWOOPI / xx + p;
|
||||
p = TWOOPI * logl(x) * __ieee754_j1l (x) + p;
|
||||
p = TWOOPI * __ieee754_logl (x) * __ieee754_j1l (x) + p;
|
||||
return p;
|
||||
}
|
||||
|
||||
@ -915,15 +914,14 @@ __ieee754_y1l (long double x)
|
||||
sin(X) = sin(x) cos(3 pi/4) - cos(x) sin(3 pi/4)
|
||||
= -1/sqrt(2) * (sin(x) + cos(x))
|
||||
cf. Fdlibm. */
|
||||
c = cosl (xx);
|
||||
s = sinl (xx);
|
||||
__sincosl (xx, &s, &c);
|
||||
ss = -s - c;
|
||||
cc = s - c;
|
||||
z = cosl (xx + xx);
|
||||
z = __cosl (xx + xx);
|
||||
if ((s * c) > 0)
|
||||
cc = z / ss;
|
||||
else
|
||||
ss = z / cc;
|
||||
z = ONEOSQPI * (p * ss + q * cc) / sqrtl (xx);
|
||||
z = ONEOSQPI * (p * ss + q * cc) / __ieee754_sqrtl (xx);
|
||||
return z;
|
||||
}
|
||||
|
@ -1,5 +1,5 @@
|
||||
/* Quad-precision floating point e^x.
|
||||
Copyright (C) 1999,2004,2006 Free Software Foundation, Inc.
|
||||
Copyright (C) 1999,2004,2006, 2008 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
Contributed by Jakub Jelinek <jj@ultra.linux.cz>
|
||||
Partly based on double-precision code
|
||||
@ -148,15 +148,15 @@ __ieee754_expl (long double x)
|
||||
fesetround (FE_TONEAREST);
|
||||
#endif
|
||||
|
||||
n = roundl(x*M_1_LN2);
|
||||
n = __roundl (x*M_1_LN2);
|
||||
x = x-n*M_LN2_0;
|
||||
xl = n*M_LN2_1;
|
||||
|
||||
tval1 = roundl(x*TWO8);
|
||||
tval1 = __roundl (x*TWO8);
|
||||
x -= __expl_table[T_EXPL_ARG1+2*tval1];
|
||||
xl -= __expl_table[T_EXPL_ARG1+2*tval1+1];
|
||||
|
||||
tval2 = roundl(x*TWO15);
|
||||
tval2 = __roundl (x*TWO15);
|
||||
x -= __expl_table[T_EXPL_ARG2+2*tval2];
|
||||
xl -= __expl_table[T_EXPL_ARG2+2*tval2+1];
|
||||
|
||||
|
@ -152,7 +152,7 @@ __expm1l (long double x)
|
||||
exp(x) - 1 = 2^k (qx + 1) - 1
|
||||
= 2^k qx + 2^k - 1. */
|
||||
|
||||
px = ldexpl (1.0L, k);
|
||||
px = __ldexpl (1.0L, k);
|
||||
x = px * qx + (px - 1.0);
|
||||
return x;
|
||||
}
|
||||
|
@ -121,12 +121,6 @@ static const long double maxlog = 1.1356523406294143949491931077970764891253E4L;
|
||||
static const long double big = 2e300L;
|
||||
static const long double zero = 0.0L;
|
||||
|
||||
#if 1
|
||||
/* Make sure these are prototyped. */
|
||||
long double frexpl (long double, int *);
|
||||
long double ldexpl (long double, int);
|
||||
#endif
|
||||
|
||||
|
||||
long double
|
||||
__log1pl (long double xm1)
|
||||
@ -161,7 +155,7 @@ __log1pl (long double xm1)
|
||||
/* Separate mantissa from exponent. */
|
||||
|
||||
/* Use frexp used so that denormal numbers will be handled properly. */
|
||||
x = frexpl (x, &e);
|
||||
x = __frexpl (x, &e);
|
||||
|
||||
/* Logarithm using log(x) = z + z^3 P(z^2)/Q(z^2),
|
||||
where z = 2(x-1)/x+1). */
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* Copyright (C) 1997, 1998, 1999 Free Software Foundation, Inc.
|
||||
/* Copyright (C) 1997, 1998, 1999, 2008 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
|
||||
@ -136,6 +136,8 @@ extern const fenv_t __fe_enabled_env;
|
||||
extern const fenv_t __fe_nonieee_env;
|
||||
# define FE_NONIEEE_ENV (&__fe_nonieee_env)
|
||||
|
||||
__BEGIN_DECLS
|
||||
|
||||
/* Floating-point environment with all exceptions enabled. Note that
|
||||
just evaluating this value does not change the processor exception mode.
|
||||
Passing this mask to fesetenv will result in a prctl syscall to change
|
||||
@ -152,4 +154,7 @@ extern const fenv_t *__fe_nomask_env (void);
|
||||
this allows the fastest possible floating point execution.*/
|
||||
extern const fenv_t *__fe_mask_env (void);
|
||||
# define FE_MASK_ENV FE_DFL_ENV
|
||||
|
||||
__END_DECLS
|
||||
|
||||
#endif
|
||||
|
@ -1,5 +1,5 @@
|
||||
/* Procedure definition for FE_NOMASK_ENV.
|
||||
Copyright (C) 1997 Free Software Foundation, Inc.
|
||||
Copyright (C) 1997, 2008 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
|
||||
@ -17,7 +17,7 @@
|
||||
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
|
||||
02111-1307 USA. */
|
||||
|
||||
#include <fenv.h>
|
||||
#include <fenv_libc.h>
|
||||
#include <errno.h>
|
||||
|
||||
/* This is a generic stub. An OS specific override is required to set
|
||||
@ -30,4 +30,5 @@ __fe_nomask_env(void)
|
||||
__set_errno (ENOSYS);
|
||||
return FE_ENABLED_ENV;
|
||||
}
|
||||
libm_hidden_def (__fe_nomask_env)
|
||||
stub_warning (__fe_nomask_env)
|
||||
|
@ -1,5 +1,5 @@
|
||||
/* Disable floating-point exceptions.
|
||||
Copyright (C) 2000 Free Software Foundation, Inc.
|
||||
Copyright (C) 2000, 2008 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
Contributed by Geoffrey Keating <geoffk@geoffk.org>, 2000.
|
||||
|
||||
@ -26,7 +26,7 @@ fedisableexcept (int excepts)
|
||||
fenv_union_t fe;
|
||||
int result, new;
|
||||
|
||||
result = fegetexcept ();
|
||||
result = __fegetexcept ();
|
||||
|
||||
if ((excepts & FE_ALL_INVALID) == FE_ALL_INVALID)
|
||||
excepts = (excepts | FE_INVALID) & ~ FE_ALL_INVALID;
|
||||
@ -44,7 +44,7 @@ fedisableexcept (int excepts)
|
||||
fe.l[1] &= ~(1 << (31 - FPSCR_VE));
|
||||
fesetenv_register (fe.fenv);
|
||||
|
||||
new = fegetexcept ();
|
||||
new = __fegetexcept ();
|
||||
if (new == 0 && result != 0)
|
||||
(void)__fe_mask_env ();
|
||||
|
||||
|
@ -1,5 +1,5 @@
|
||||
/* Enable floating-point exceptions.
|
||||
Copyright (C) 2000 Free Software Foundation, Inc.
|
||||
Copyright (C) 2000, 2008 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
Contributed by Geoffrey Keating <geoffk@geoffk.org>, 2000.
|
||||
|
||||
@ -26,7 +26,7 @@ feenableexcept (int excepts)
|
||||
fenv_union_t fe;
|
||||
int result, new;
|
||||
|
||||
result = fegetexcept ();
|
||||
result = __fegetexcept ();
|
||||
|
||||
if ((excepts & FE_ALL_INVALID) == FE_ALL_INVALID)
|
||||
excepts = (excepts | FE_INVALID) & ~ FE_ALL_INVALID;
|
||||
@ -44,7 +44,7 @@ feenableexcept (int excepts)
|
||||
fe.l[1] |= (1 << (31 - FPSCR_VE));
|
||||
fesetenv_register (fe.fenv);
|
||||
|
||||
new = fegetexcept ();
|
||||
new = __fegetexcept ();
|
||||
if (new != 0 && result == 0)
|
||||
(void)__fe_nomask_env ();
|
||||
|
||||
|
@ -1,5 +1,5 @@
|
||||
/* Get floating-point exceptions.
|
||||
Copyright (C) 2000 Free Software Foundation, Inc.
|
||||
Copyright (C) 2000, 2008 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
Contributed by Geoffrey Keating <geoffk@geoffk.org>, 2000.
|
||||
|
||||
@ -21,13 +21,13 @@
|
||||
#include <fenv_libc.h>
|
||||
|
||||
int
|
||||
fegetexcept (void)
|
||||
__fegetexcept (void)
|
||||
{
|
||||
fenv_union_t fe;
|
||||
int result = 0;
|
||||
|
||||
fe.fenv = fegetenv_register ();
|
||||
|
||||
|
||||
if (fe.l[1] & (1 << (31 - FPSCR_XE)))
|
||||
result |= FE_INEXACT;
|
||||
if (fe.l[1] & (1 << (31 - FPSCR_ZE)))
|
||||
@ -41,3 +41,4 @@ fegetexcept (void)
|
||||
|
||||
return result;
|
||||
}
|
||||
weak_alias (__fegetexcept, fegetexcept)
|
||||
|
@ -1,5 +1,5 @@
|
||||
/* Internal libc stuff for floating point environment routines.
|
||||
Copyright (C) 1997, 2006 Free Software Foundation, Inc.
|
||||
Copyright (C) 1997, 2006, 2008 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
|
||||
@ -22,6 +22,8 @@
|
||||
|
||||
#include <fenv.h>
|
||||
|
||||
libm_hidden_proto (__fe_nomask_env)
|
||||
|
||||
/* The sticky bits in the FPSCR indicating exceptions have occurred. */
|
||||
#define FPSCR_STICKY_BITS ((FE_ALL_EXCEPT | FE_ALL_INVALID) & ~FE_INVALID)
|
||||
|
||||
@ -137,5 +139,5 @@ enum {
|
||||
({ float f; asm volatile ("fmuls %0,%1,%2" \
|
||||
: "=f"(f) \
|
||||
: "f" (x), "f"((float)1.0)); f; })
|
||||
|
||||
|
||||
#endif /* fenv_libc.h */
|
||||
|
@ -1,5 +1,5 @@
|
||||
/* Raise given exceptions.
|
||||
Copyright (C) 1997,99,2000,01,02 Free Software Foundation, Inc.
|
||||
Copyright (C) 1997,1999-2002, 2008 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
|
||||
@ -45,12 +45,15 @@ __feraiseexcept (int excepts)
|
||||
triggering any appropriate exceptions. */
|
||||
fesetenv_register (u.fenv);
|
||||
|
||||
if ((excepts & FE_INVALID)
|
||||
if ((excepts & FE_INVALID))
|
||||
{
|
||||
/* For some reason, some PowerPC chips (the 601, in particular)
|
||||
don't have FE_INVALID_SOFTWARE implemented. Detect this
|
||||
case and raise FE_INVALID_SNAN instead. */
|
||||
&& !fetestexcept (FE_INVALID))
|
||||
set_fpscr_bit (FPSCR_VXSNAN);
|
||||
u.fenv = fegetenv_register ();
|
||||
if ((u.l[1] & FE_INVALID) == 0)
|
||||
set_fpscr_bit (FPSCR_VXSNAN);
|
||||
}
|
||||
|
||||
/* Success. */
|
||||
return 0;
|
||||
|
191
sysdeps/unix/sysv/linux/configure
vendored
191
sysdeps/unix/sysv/linux/configure
vendored
@ -22,23 +22,170 @@ if test -n "$sysheaders"; then
|
||||
fi
|
||||
|
||||
|
||||
echo "$as_me:$LINENO: checking for egrep" >&5
|
||||
echo $ECHO_N "checking for egrep... $ECHO_C" >&6
|
||||
if test "${ac_cv_prog_egrep+set}" = set; then
|
||||
{ echo "$as_me:$LINENO: checking for grep that handles long lines and -e" >&5
|
||||
echo $ECHO_N "checking for grep that handles long lines and -e... $ECHO_C" >&6; }
|
||||
if test "${ac_cv_path_GREP+set}" = set; then
|
||||
echo $ECHO_N "(cached) $ECHO_C" >&6
|
||||
else
|
||||
if echo a | (grep -E '(a|b)') >/dev/null 2>&1
|
||||
then ac_cv_prog_egrep='grep -E'
|
||||
else ac_cv_prog_egrep='egrep'
|
||||
# Extract the first word of "grep ggrep" to use in msg output
|
||||
if test -z "$GREP"; then
|
||||
set dummy grep ggrep; ac_prog_name=$2
|
||||
if test "${ac_cv_path_GREP+set}" = set; then
|
||||
echo $ECHO_N "(cached) $ECHO_C" >&6
|
||||
else
|
||||
ac_path_GREP_found=false
|
||||
# Loop through the user's path and test for each of PROGNAME-LIST
|
||||
as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
|
||||
for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin
|
||||
do
|
||||
IFS=$as_save_IFS
|
||||
test -z "$as_dir" && as_dir=.
|
||||
for ac_prog in grep ggrep; do
|
||||
for ac_exec_ext in '' $ac_executable_extensions; do
|
||||
ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext"
|
||||
{ test -f "$ac_path_GREP" && $as_test_x "$ac_path_GREP"; } || continue
|
||||
# Check for GNU ac_path_GREP and select it if it is found.
|
||||
# Check for GNU $ac_path_GREP
|
||||
case `"$ac_path_GREP" --version 2>&1` in
|
||||
*GNU*)
|
||||
ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;;
|
||||
*)
|
||||
ac_count=0
|
||||
echo $ECHO_N "0123456789$ECHO_C" >"conftest.in"
|
||||
while :
|
||||
do
|
||||
cat "conftest.in" "conftest.in" >"conftest.tmp"
|
||||
mv "conftest.tmp" "conftest.in"
|
||||
cp "conftest.in" "conftest.nl"
|
||||
echo 'GREP' >> "conftest.nl"
|
||||
"$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break
|
||||
diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break
|
||||
ac_count=`expr $ac_count + 1`
|
||||
if test $ac_count -gt ${ac_path_GREP_max-0}; then
|
||||
# Best one so far, save it but keep looking for a better one
|
||||
ac_cv_path_GREP="$ac_path_GREP"
|
||||
ac_path_GREP_max=$ac_count
|
||||
fi
|
||||
# 10*(2^10) chars as input seems more than enough
|
||||
test $ac_count -gt 10 && break
|
||||
done
|
||||
rm -f conftest.in conftest.tmp conftest.nl conftest.out;;
|
||||
esac
|
||||
|
||||
|
||||
$ac_path_GREP_found && break 3
|
||||
done
|
||||
done
|
||||
|
||||
done
|
||||
IFS=$as_save_IFS
|
||||
|
||||
|
||||
fi
|
||||
|
||||
GREP="$ac_cv_path_GREP"
|
||||
if test -z "$GREP"; then
|
||||
{ { echo "$as_me:$LINENO: error: no acceptable $ac_prog_name could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&5
|
||||
echo "$as_me: error: no acceptable $ac_prog_name could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&2;}
|
||||
{ (exit 1); exit 1; }; }
|
||||
fi
|
||||
|
||||
else
|
||||
ac_cv_path_GREP=$GREP
|
||||
fi
|
||||
echo "$as_me:$LINENO: result: $ac_cv_prog_egrep" >&5
|
||||
echo "${ECHO_T}$ac_cv_prog_egrep" >&6
|
||||
EGREP=$ac_cv_prog_egrep
|
||||
|
||||
|
||||
echo "$as_me:$LINENO: checking installed Linux kernel header files" >&5
|
||||
echo $ECHO_N "checking installed Linux kernel header files... $ECHO_C" >&6
|
||||
fi
|
||||
{ echo "$as_me:$LINENO: result: $ac_cv_path_GREP" >&5
|
||||
echo "${ECHO_T}$ac_cv_path_GREP" >&6; }
|
||||
GREP="$ac_cv_path_GREP"
|
||||
|
||||
|
||||
{ echo "$as_me:$LINENO: checking for egrep" >&5
|
||||
echo $ECHO_N "checking for egrep... $ECHO_C" >&6; }
|
||||
if test "${ac_cv_path_EGREP+set}" = set; then
|
||||
echo $ECHO_N "(cached) $ECHO_C" >&6
|
||||
else
|
||||
if echo a | $GREP -E '(a|b)' >/dev/null 2>&1
|
||||
then ac_cv_path_EGREP="$GREP -E"
|
||||
else
|
||||
# Extract the first word of "egrep" to use in msg output
|
||||
if test -z "$EGREP"; then
|
||||
set dummy egrep; ac_prog_name=$2
|
||||
if test "${ac_cv_path_EGREP+set}" = set; then
|
||||
echo $ECHO_N "(cached) $ECHO_C" >&6
|
||||
else
|
||||
ac_path_EGREP_found=false
|
||||
# Loop through the user's path and test for each of PROGNAME-LIST
|
||||
as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
|
||||
for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin
|
||||
do
|
||||
IFS=$as_save_IFS
|
||||
test -z "$as_dir" && as_dir=.
|
||||
for ac_prog in egrep; do
|
||||
for ac_exec_ext in '' $ac_executable_extensions; do
|
||||
ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext"
|
||||
{ test -f "$ac_path_EGREP" && $as_test_x "$ac_path_EGREP"; } || continue
|
||||
# Check for GNU ac_path_EGREP and select it if it is found.
|
||||
# Check for GNU $ac_path_EGREP
|
||||
case `"$ac_path_EGREP" --version 2>&1` in
|
||||
*GNU*)
|
||||
ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;;
|
||||
*)
|
||||
ac_count=0
|
||||
echo $ECHO_N "0123456789$ECHO_C" >"conftest.in"
|
||||
while :
|
||||
do
|
||||
cat "conftest.in" "conftest.in" >"conftest.tmp"
|
||||
mv "conftest.tmp" "conftest.in"
|
||||
cp "conftest.in" "conftest.nl"
|
||||
echo 'EGREP' >> "conftest.nl"
|
||||
"$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break
|
||||
diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break
|
||||
ac_count=`expr $ac_count + 1`
|
||||
if test $ac_count -gt ${ac_path_EGREP_max-0}; then
|
||||
# Best one so far, save it but keep looking for a better one
|
||||
ac_cv_path_EGREP="$ac_path_EGREP"
|
||||
ac_path_EGREP_max=$ac_count
|
||||
fi
|
||||
# 10*(2^10) chars as input seems more than enough
|
||||
test $ac_count -gt 10 && break
|
||||
done
|
||||
rm -f conftest.in conftest.tmp conftest.nl conftest.out;;
|
||||
esac
|
||||
|
||||
|
||||
$ac_path_EGREP_found && break 3
|
||||
done
|
||||
done
|
||||
|
||||
done
|
||||
IFS=$as_save_IFS
|
||||
|
||||
|
||||
fi
|
||||
|
||||
EGREP="$ac_cv_path_EGREP"
|
||||
if test -z "$EGREP"; then
|
||||
{ { echo "$as_me:$LINENO: error: no acceptable $ac_prog_name could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&5
|
||||
echo "$as_me: error: no acceptable $ac_prog_name could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&2;}
|
||||
{ (exit 1); exit 1; }; }
|
||||
fi
|
||||
|
||||
else
|
||||
ac_cv_path_EGREP=$EGREP
|
||||
fi
|
||||
|
||||
|
||||
fi
|
||||
fi
|
||||
{ echo "$as_me:$LINENO: result: $ac_cv_path_EGREP" >&5
|
||||
echo "${ECHO_T}$ac_cv_path_EGREP" >&6; }
|
||||
EGREP="$ac_cv_path_EGREP"
|
||||
|
||||
|
||||
{ echo "$as_me:$LINENO: checking installed Linux kernel header files" >&5
|
||||
echo $ECHO_N "checking installed Linux kernel header files... $ECHO_C" >&6; }
|
||||
if test "${libc_cv_linux2010+set}" = set; then
|
||||
echo $ECHO_N "(cached) $ECHO_C" >&6
|
||||
else
|
||||
@ -62,8 +209,8 @@ fi
|
||||
rm -f conftest*
|
||||
|
||||
fi
|
||||
echo "$as_me:$LINENO: result: $libc_cv_linux2010" >&5
|
||||
echo "${ECHO_T}$libc_cv_linux2010" >&6
|
||||
{ echo "$as_me:$LINENO: result: $libc_cv_linux2010" >&5
|
||||
echo "${ECHO_T}$libc_cv_linux2010" >&6; }
|
||||
if test "$libc_cv_linux2010" != '2.0.10 or later'; then
|
||||
{ { echo "$as_me:$LINENO: error: GNU libc requires kernel header files from
|
||||
Linux 2.0.10 or later to be installed before configuring.
|
||||
@ -120,7 +267,7 @@ case "$machine" in
|
||||
arch_minimum_kernel=2.0.10
|
||||
;;
|
||||
powerpc/powerpc64)
|
||||
arch_minimum_kernel=2.4.19
|
||||
arch_minimum_kernel=2.4.21
|
||||
;;
|
||||
s390/s390-32)
|
||||
libc_cv_gcc_unwind_find_fde=yes
|
||||
@ -166,8 +313,8 @@ else
|
||||
fi
|
||||
|
||||
if test -n "$minimum_kernel"; then
|
||||
echo "$as_me:$LINENO: checking for kernel header at least $minimum_kernel" >&5
|
||||
echo $ECHO_N "checking for kernel header at least $minimum_kernel... $ECHO_C" >&6
|
||||
{ echo "$as_me:$LINENO: checking for kernel header at least $minimum_kernel" >&5
|
||||
echo $ECHO_N "checking for kernel header at least $minimum_kernel... $ECHO_C" >&6; }
|
||||
decnum=`echo "$minimum_kernel.0.0.0" | sed 's/\([0-9]*\)\.\([0-9]*\)\.\([0-9]*\).*/(\1 * 65536 + \2 * 256 + \3)/'`;
|
||||
abinum=`echo "$minimum_kernel.0.0.0" | sed 's/\([0-9]*\)\.\([0-9]*\)\.\([0-9]*\).*/\1,\2,\3/'`;
|
||||
cat >conftest.$ac_ext <<_ACEOF
|
||||
@ -189,8 +336,8 @@ else
|
||||
fi
|
||||
rm -f conftest*
|
||||
|
||||
echo "$as_me:$LINENO: result: $libc_minimum_kernel" >&5
|
||||
echo "${ECHO_T}$libc_minimum_kernel" >&6
|
||||
{ echo "$as_me:$LINENO: result: $libc_minimum_kernel" >&5
|
||||
echo "${ECHO_T}$libc_minimum_kernel" >&6; }
|
||||
if test "$libc_minimum_kernel" = ok; then
|
||||
cat >>confdefs.h <<_ACEOF
|
||||
#define __LINUX_KERNEL_VERSION $decnum
|
||||
@ -333,8 +480,8 @@ if test $host = $build; then
|
||||
else
|
||||
ac_prefix=$ac_default_prefix
|
||||
fi
|
||||
echo "$as_me:$LINENO: checking for symlinks in ${ac_prefix}/include" >&5
|
||||
echo $ECHO_N "checking for symlinks in ${ac_prefix}/include... $ECHO_C" >&6
|
||||
{ echo "$as_me:$LINENO: checking for symlinks in ${ac_prefix}/include" >&5
|
||||
echo $ECHO_N "checking for symlinks in ${ac_prefix}/include... $ECHO_C" >&6; }
|
||||
ac_message=
|
||||
if test -L ${ac_prefix}/include/net; then
|
||||
ac_message="$ac_message
|
||||
@ -355,8 +502,8 @@ Delete the links and re-run configure, or better still, move the entire
|
||||
${ac_prefix}/include directory out of the way." >&2;}
|
||||
{ (exit 1); exit 1; }; }
|
||||
else
|
||||
echo "$as_me:$LINENO: result: ok" >&5
|
||||
echo "${ECHO_T}ok" >&6
|
||||
{ echo "$as_me:$LINENO: result: ok" >&5
|
||||
echo "${ECHO_T}ok" >&6; }
|
||||
fi
|
||||
fi
|
||||
|
||||
|
132
sysdeps/unix/sysv/linux/powerpc/bits/mathinline.h
Normal file
132
sysdeps/unix/sysv/linux/powerpc/bits/mathinline.h
Normal file
@ -0,0 +1,132 @@
|
||||
/* Inline math functions for powerpc.
|
||||
Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2004, 2006, 2007, 2008
|
||||
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/mathinline.h> directly; include <math.h> instead."
|
||||
#endif
|
||||
|
||||
#ifndef __extern_inline
|
||||
# define __MATH_INLINE __inline
|
||||
#else
|
||||
# define __MATH_INLINE __extern_inline
|
||||
#endif /* __cplusplus */
|
||||
|
||||
#if defined __GNUC__ && !defined _SOFT_FLOAT
|
||||
|
||||
#ifdef __USE_ISOC99
|
||||
# if !__GNUC_PREREQ (2,97)
|
||||
# define __unordered_cmp(x, y) \
|
||||
(__extension__ \
|
||||
({ __typeof__(x) __x = (x); __typeof__(y) __y = (y); \
|
||||
unsigned __r; \
|
||||
__asm__("fcmpu 7,%1,%2 ; mfcr %0" : "=r" (__r) : "f" (__x), "f"(__y) \
|
||||
: "cr7"); \
|
||||
__r; }))
|
||||
|
||||
# undef isgreater
|
||||
# undef isgreaterequal
|
||||
# undef isless
|
||||
# undef islessequal
|
||||
# undef islessgreater
|
||||
# undef isunordered
|
||||
|
||||
# define isgreater(x, y) (__unordered_cmp (x, y) >> 2 & 1)
|
||||
# define isgreaterequal(x, y) ((__unordered_cmp (x, y) & 6) != 0)
|
||||
# define isless(x, y) (__unordered_cmp (x, y) >> 3 & 1)
|
||||
# define islessequal(x, y) ((__unordered_cmp (x, y) & 0xA) != 0)
|
||||
# define islessgreater(x, y) ((__unordered_cmp (x, y) & 0xC) != 0)
|
||||
# define isunordered(x, y) (__unordered_cmp (x, y) & 1)
|
||||
|
||||
# endif /* __GNUC_PREREQ (2,97) */
|
||||
|
||||
/* 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)
|
||||
/* 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;
|
||||
}
|
||||
__MATH_INLINE int
|
||||
__NTH (__signbit (double __x))
|
||||
{
|
||||
__extension__ union { double __d; int __i[2]; } __u = { __d: __x };
|
||||
return __u.__i[0] < 0;
|
||||
}
|
||||
# if defined __powerpc64__ && defined __LONGDOUBLE128
|
||||
__MATH_INLINE int
|
||||
__NTH (__signbitl (long double __x))
|
||||
{
|
||||
__extension__ union { long double __d; long int __i[2]; } __u = { __d: __x };
|
||||
return __u.__i[0] < 0;
|
||||
}
|
||||
# endif
|
||||
# endif
|
||||
#endif /* __USE_ISOC99 */
|
||||
|
||||
#if !defined __NO_MATH_INLINES && defined __OPTIMIZE__
|
||||
|
||||
#ifdef __USE_ISOC99
|
||||
|
||||
# ifndef __powerpc64__
|
||||
__MATH_INLINE long int lrint (double __x) __THROW;
|
||||
__MATH_INLINE long int
|
||||
__NTH (lrint (double __x))
|
||||
{
|
||||
union {
|
||||
double __d;
|
||||
int __ll[2];
|
||||
} __u;
|
||||
__asm__ ("fctiw %0,%1" : "=f"(__u.__d) : "f"(__x));
|
||||
return __u.__ll[1];
|
||||
}
|
||||
|
||||
__MATH_INLINE long int lrintf (float __x) __THROW;
|
||||
__MATH_INLINE long int
|
||||
__NTH (lrintf (float __x))
|
||||
{
|
||||
union {
|
||||
double __d;
|
||||
int __ll[2];
|
||||
} __u;
|
||||
__asm__ ("fctiw %0,%1" : "=f"(__u.__d) : "f"(__x));
|
||||
return __u.__ll[1];
|
||||
}
|
||||
# endif
|
||||
|
||||
__MATH_INLINE double fdim (double __x, double __y) __THROW;
|
||||
__MATH_INLINE double
|
||||
__NTH (fdim (double __x, double __y))
|
||||
{
|
||||
return __x <= __y ? 0 : __x - __y;
|
||||
}
|
||||
|
||||
__MATH_INLINE float fdimf (float __x, float __y) __THROW;
|
||||
__MATH_INLINE float
|
||||
__NTH (fdimf (float __x, float __y))
|
||||
{
|
||||
return __x <= __y ? 0 : __x - __y;
|
||||
}
|
||||
|
||||
#endif /* __USE_ISOC99 */
|
||||
#endif /* !__NO_MATH_INLINES && __OPTIMIZE__ */
|
||||
#endif /* __GNUC__ && !_SOFT_FLOAT */
|
@ -1,5 +1,5 @@
|
||||
/* Procedure definition for FE_NOMASK_ENV for Linux/ppc.
|
||||
Copyright (C) 2000, 2006 Free Software Foundation, Inc.
|
||||
Copyright (C) 2000, 2006, 2008 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
|
||||
@ -66,3 +66,4 @@ __fe_nomask_env (void)
|
||||
|
||||
return FE_ENABLED_ENV;
|
||||
}
|
||||
libm_hidden_def (__fe_nomask_env)
|
||||
|
@ -1,5 +1,5 @@
|
||||
/* Procedure definition for FE_NOMASK_ENV for Linux/ppc64.
|
||||
Copyright (C) 2003, 2006 Free Software Foundation, Inc.
|
||||
Copyright (C) 2003, 2006, 2008 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
|
||||
@ -17,7 +17,7 @@
|
||||
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
|
||||
02111-1307 USA. */
|
||||
|
||||
#include <fenv.h>
|
||||
#include <fenv_libc.h>
|
||||
#include <errno.h>
|
||||
#include <sysdep.h>
|
||||
#include <sys/syscall.h>
|
||||
@ -41,3 +41,4 @@ __fe_nomask_env (void)
|
||||
#endif
|
||||
return FE_ENABLED_ENV;
|
||||
}
|
||||
libm_hidden_def (__fe_nomask_env)
|
||||
|
Loading…
x
Reference in New Issue
Block a user