diff options
-rw-r--r-- | ChangeLog | 8 | ||||
-rw-r--r-- | NEWS | 4 | ||||
-rw-r--r-- | math/Makefile | 4 | ||||
-rw-r--r-- | math/test-powl.c | 51 | ||||
-rw-r--r-- | sysdeps/x86_64/fpu/e_powl.S | 4 |
5 files changed, 66 insertions, 5 deletions
diff --git a/ChangeLog b/ChangeLog index c427a2f96a..c1bf490c1a 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,11 @@ +2011-05-17 H.J. Lu <hongjiu.lu@intel.com> + + [BZ #12775] + * sysdeps/x86_64/fpu/e_powl.S: Fix a typo. + * math/Makefile (tests): Add test-powl. + (CFLAGS-test-powl.c): Define. + * math/test-powl.c: New file. + 2011-05-16 H.J. Lu <hongjiu.lu@intel.com> * fileops.c (_IO_new_file_fopen): Get fd from _IO_fileno. diff --git a/NEWS b/NEWS index 6fe7074497..a5d803498d 100644 --- a/NEWS +++ b/NEWS @@ -1,4 +1,4 @@ -GNU C Library NEWS -- history of user-visible changes. 2011-5-17 +GNU C Library NEWS -- history of user-visible changes. 2011-5-18 Copyright (C) 1992-2009, 2010, 2011 Free Software Foundation, Inc. See the end for copying conditions. @@ -16,7 +16,7 @@ Version 2.14 12469, 12489, 12509, 12510, 12511, 12518, 12527, 12541, 12545, 12551, 12582, 12583, 12587, 12597, 12601, 12611, 12625, 12626, 12631, 12650, 12653, 12655, 12660, 12681, 12685, 12711, 12713, 12714, 12717, 12723, - 12724, 12734, 12738, 12746, 12766 + 12724, 12734, 12738, 12746, 12766, 12775 * The RPC implementation in libc is obsoleted. Old programs keep working but new programs cannot be linked with the routines in libc anymore. diff --git a/math/Makefile b/math/Makefile index 7e3a626c63..45954e2e87 100644 --- a/math/Makefile +++ b/math/Makefile @@ -90,7 +90,8 @@ distribute += $(filter-out $(generated),$(long-m-yes:=.c) $(long-c-yes:=.c)) # Rules for the test suite. tests = test-matherr test-fenv atest-exp atest-sincos atest-exp2 basic-test \ test-misc test-fpucw tst-definitions test-tgmath test-tgmath-ret \ - bug-nextafter bug-nexttoward bug-tgmath1 test-tgmath-int test-tgmath2 + bug-nextafter bug-nexttoward bug-tgmath1 test-tgmath-int \ + test-tgmath2 test-powl # We do the `long double' tests only if this data type is available and # distinct from `double'. test-longdouble-yes = test-ldouble test-ildoubl @@ -131,6 +132,7 @@ CFLAGS-test-ldouble.c = -fno-inline -ffloat-store -fno-builtin CFLAGS-test-tgmath.c = -fno-builtin CFLAGS-test-tgmath2.c = -fno-builtin CFLAGS-test-tgmath-ret.c = -fno-builtin +CFLAGS-test-powl.c = -fno-builtin CPPFLAGS-test-ifloat.c = -U__LIBC_INTERNAL_MATH_INLINES -D__FAST_MATH__ \ -DTEST_FAST_MATH -fno-builtin CPPFLAGS-test-idouble.c = -U__LIBC_INTERNAL_MATH_INLINES -D__FAST_MATH__ \ diff --git a/math/test-powl.c b/math/test-powl.c new file mode 100644 index 0000000000..960f2167ca --- /dev/null +++ b/math/test-powl.c @@ -0,0 +1,51 @@ +/* Test for powl + Copyright (C) 2011 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. */ + +#include <stdio.h> +#include <math.h> +#include <float.h> +#include <ieee754.h> + +int +main (void) +{ + int result = 0; + +#ifndef NO_LONG_DOUBLE +# if LDBL_MANT_DIG == 64 + { + long double x = 1e-20; + union ieee854_long_double u; + u.ieee.mantissa0 = 1; + u.ieee.mantissa1 = 1; + u.ieee.exponent = 0; + u.ieee.negative = 0; + (void) powl (0.2, u.d); + x = powl (x, 1.5); + if (fabsl (x - 1e-30) > 1e-10) + { + printf ("powl (1e-20, 1.5): wrong result: %Lg\n", x); + result = 1; + } + } +# endif +#endif + + return result; +} diff --git a/sysdeps/x86_64/fpu/e_powl.S b/sysdeps/x86_64/fpu/e_powl.S index 4959bea7ac..a0b1b1df1e 100644 --- a/sysdeps/x86_64/fpu/e_powl.S +++ b/sysdeps/x86_64/fpu/e_powl.S @@ -1,5 +1,5 @@ /* ix87 specific implementation of pow function. - Copyright (C) 1996, 1997, 1998, 1999, 2001, 2004, 2007 + Copyright (C) 1996, 1997, 1998, 1999, 2001, 2004, 2007, 2011 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Ulrich Drepper <drepper@cygnus.com>, 1996. @@ -154,7 +154,7 @@ ENTRY(__ieee754_powl) fucompp // 1.0 : x : y fnstsw fxch // x : 1.0 : y - test $4500,%eax + test $0x4500,%eax jz 7f fsub %st(1) // x-1 : 1.0 : y fyl2xp1 // log2(x) : y |