about summary refs log tree commit diff
path: root/sysdeps/i386/fpu/bits
diff options
context:
space:
mode:
authorUlrich Drepper <drepper@redhat.com>1999-10-24 22:04:52 +0000
committerUlrich Drepper <drepper@redhat.com>1999-10-24 22:04:52 +0000
commit15daa63995211cbe576b28f88ad70f57abe69a37 (patch)
tree72d2fe95e84d28e7d583894391d45e3b89e2c5f9 /sysdeps/i386/fpu/bits
parenteb3bf57345cb1451a5d2578dc3f7fbe5aff3b8b5 (diff)
downloadglibc-15daa63995211cbe576b28f88ad70f57abe69a37.tar.gz
glibc-15daa63995211cbe576b28f88ad70f57abe69a37.tar.xz
glibc-15daa63995211cbe576b28f88ad70f57abe69a37.zip
Update.
1999-10-24  Ulrich Drepper  <drepper@cygnus.com>

	* math/libm-test.inc: Disable some boundary case tests for inline
	function testing.

	* math/math.h: Pretty printing.

	* sysdeps/i386/fpu/e_atanh.S: Correct handling of NaN.
	* sysdeps/i386/fpu/e_atanhf.S: Likewise.
	* sysdeps/i386/fpu/e_atanhl.S: Likewise.
	* sysdeps/i386/fpu/e_log10.S: Likewise.
	* sysdeps/i386/fpu/e_log10f.S: Likewise.
	* sysdeps/i386/fpu/e_log10l.S: Likewise.
	* sysdeps/i386/fpu/s_log1p.S: Likewise.
	* sysdeps/i386/fpu/s_log1pf.S: Likewise.
	* sysdeps/i386/fpu/s_log1pl.S: Likewise.
	* sysdeps/i386/fpu/s_log2.S: Likewise.
	* sysdeps/i386/fpu/s_log2f.S: Likewise.
	* sysdeps/i386/fpu/s_log2l.S: Likewise.

	* sysdeps/i386/fpu/libm-test-ulps: New file.

	* sysdeps/i386/fpu/bits/mathinline.h (__expm1_code): Correct return
	value for x == 0.
	(pow): Correct case x == 0.
	(__sgn1l): Correct handling of -0.0.

1999-10-22  Andreas Jaeger  <aj@suse.de>

	* math/libm-test.inc (asinh_test): Add test for NaN as input parameter.
	(atan_test): Likewise.
	(atanh_test): Likewise.
	(atan2_test): Likewise.
	(carg_test): Likewise.
	(ceil_test): Likewise.
	(cos_test): Likewise.
	(cosh_test): Likewise.
	(cpow_test): Likewise.
	(erf_test): Likewise.
	(erfc_test): Likewise.
	(exp_test): Likewise.
	(exp10_test): Likewise.
	(exp2_test): Likewise.
	(expm1_test): Likewise.
	(fabs_test): Likewise.
	(floor_test): Likewise.
	(fmod_test): Likewise.
	(gamma_test): Likewise.
	(lgamma_test): Likewise.
	(log10_test): Likewise.
	(log1p_test): Likewise.
	(log2_test): Likewise.
	(logb_test): Likewise.
	(nearbyint_test): Likewise.
	(remainder_test): Likewise.
	(remquo_test): Likewise.
	(sin_test): Likewise.
	(sincos_test): Likewise.
	(sinh_test): Likewise.
	(sqrt_test): Likewise.
	(tan_test): Likewise.
	(tanh_test): Likewise.
	(tgamma_test): Likewise.
Diffstat (limited to 'sysdeps/i386/fpu/bits')
-rw-r--r--sysdeps/i386/fpu/bits/mathinline.h19
1 files changed, 15 insertions, 4 deletions
diff --git a/sysdeps/i386/fpu/bits/mathinline.h b/sysdeps/i386/fpu/bits/mathinline.h
index bf077ba527..8545f6536c 100644
--- a/sysdeps/i386/fpu/bits/mathinline.h
+++ b/sysdeps/i386/fpu/bits/mathinline.h
@@ -324,7 +324,7 @@ __sincosl (long double __x, long double *__sinx, long double *__cosx)
     ("fscale			# 2^int(x * log2(e))\n\t"		      \
      : "=t" (__temp) : "0" (1.0), "u" (__exponent));			      \
   __temp -= 1.0;							      \
-  return __temp + __value
+  return __temp + __value ?: __x
 __inline_mathcode_ (long double, __expm1l, __x, __expm1_code)
 
 
@@ -383,8 +383,14 @@ __inline_mathcode2 (pow, __x, __y, \
   register long double __value;						      \
   register long double __exponent;					      \
   __extension__ long long int __p = (long long int) __y;		      \
-  if (__x == 0.0 && __y > 0.0)						      \
-    return 0.0;								      \
+  if (__x == 0.0)							      \
+    {									      \
+       if (__y > 0.0)							      \
+	 return __y == (double) __p && (__p & 1) != 0 ? __x : 0.0;	      \
+       else if (__y < 0.0)						      \
+	 return (__y == (double) __p && (-__p & 1) != 0			      \
+		 ? 1.0 / __x : 1.0 / fabs (__x));			      \
+    }									      \
   if (__y == (double) __p)						      \
     {									      \
       long double __r = 1.0;						      \
@@ -448,7 +454,12 @@ __inline_mathop_decl (log10, "fldlg2; fxch; fyl2x", "0" (__x) : "st(1)")
 __inline_mathcode (asin, __x, return __atan2l (__x, __sqrtl (1.0 - __x * __x)))
 __inline_mathcode (acos, __x, return __atan2l (__sqrtl (1.0 - __x * __x), __x))
 
-__inline_mathcode_ (long double, __sgn1l, __x, return __x >= 0.0 ? 1.0 : -1.0)
+__inline_mathcode_ (long double, __sgn1l, __x, \
+  union { long double __xld; unsigned int __xi[3]; } __n = { .__xld = __x };  \
+  __n.__xi[2] = (__n.__xi[2] & 0x8000) | 0x3fff;			      \
+  __n.__xi[1] = 0x80000000;						      \
+  __n.__xi[0] = 0;							      \
+  return __n.__xld)
 
 
 /* The argument range of the inline version of sinhl is slightly reduced.  */