This is the mail archive of the libc-hacker@sources.redhat.com mailing list for the glibc project.
Note that libc-hacker is a closed list. You may look at the archives of this list, but subscription and posting are not open.
Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
---|---|---|
Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |
Since testing for existence of function may cause exceptions, I clear all exceptions in init_max_error. Or we can modify all those functions to set and check errno for ENOSYS before continue. Together with my previous ia64 patch for long double header files, "make check" passes on ia64 now. H.J. ---- 2000-09-30 H.J. Lu <hjl@gnu.org> * sysdeps/ieee754/ldbl-96/s_ceill.c (__ceill): Handle overflow. * sysdeps/ieee754/ldbl-96/s_floorl.c (__floorl): Likewise. 2000-09-29 H.J. Lu <hjl@gnu.org> * math/libm-test.inc (init_max_error): Clear all exceptions before starting test. (acosh_test): Test for existence of function. (asinh_test): Likewise. (atan2_test): Likewise. (cabs_test): Likewise. (cacos_test): Likewise. (cacosh_test): Likewise. (casin_test): Likewise. (casinh_test): Likewise. (catan_test): Likewise. (catanh_test): Likewise. (ccos_test): Likewise. (ccosh_test): Likewise. (cexp_test): Likewise. (clog_test): Likewise. (clog10_test): Likewise. (cosh_test): Likewise. (cpow_test): Likewise. (csin_test): Likewise. (csinh_test): Likewise. (csqrt_test): Likewise. (ctan_test): Likewise. (ctanh_test): Likewise. (fmod_test): Likewise. (hypot_test): Likewise. (remainder_test): Likewise. (remquo_test): Likewise. (sincos_test): Likewise. (sinh_test): Likewise. (tanh_test): Likewise. Index: sysdeps/ieee754/ldbl-96/s_ceill.c =================================================================== RCS file: /work/cvs/gnu/glibc/sysdeps/ieee754/ldbl-96/s_ceill.c,v retrieving revision 1.1.1.1 diff -u -p -r1.1.1.1 s_ceill.c --- sysdeps/ieee754/ldbl-96/s_ceill.c 2000/05/21 21:11:36 1.1.1.1 +++ sysdeps/ieee754/ldbl-96/s_ceill.c 2000/09/30 07:11:14 @@ -59,8 +59,13 @@ static long double huge = 1.0e4930; if(((i0&i)|i1)==0) return x; /* x is integral */ if(huge+x>0.0) { /* raise inexact flag */ if(sx==0) { - if (j0>0) i0 += (0x80000000)>>j0; - else ++se; + if (j0>0 && (i0+(0x80000000>>j0))>i0) + i0+=0x80000000>>j0; + else + { + i = 0x7fffffff; + ++se; + } } i0 &= (~i); i1=0; } Index: sysdeps/ieee754/ldbl-96/s_floorl.c =================================================================== RCS file: /work/cvs/gnu/glibc/sysdeps/ieee754/ldbl-96/s_floorl.c,v retrieving revision 1.1.1.1 diff -u -p -r1.1.1.1 s_floorl.c --- sysdeps/ieee754/ldbl-96/s_floorl.c 2000/05/21 21:11:36 1.1.1.1 +++ sysdeps/ieee754/ldbl-96/s_floorl.c 2000/09/30 07:11:59 @@ -60,8 +60,13 @@ static long double huge = 1.0e4930; if(((i0&i)|i1)==0) return x; /* x is integral */ if(huge+x>0.0) { /* raise inexact flag */ if(sx) { - if (j0>0) i0 += (0x80000000)>>j0; - else ++se; + if (j0>0 && (i0+(0x80000000>>j0))>i0) + i0 += (0x80000000)>>j0; + else + { + i = 0x7fffffff; + ++se; + } } i0 &= (~i); i1=0; } Index: math/libm-test.inc =================================================================== RCS file: /work/cvs/gnu/glibc/math/libm-test.inc,v retrieving revision 1.1.1.3 diff -u -p -r1.1.1.3 libm-test.inc --- math/libm-test.inc 2000/09/26 00:29:07 1.1.1.3 +++ math/libm-test.inc 2000/09/30 01:18:21 @@ -189,6 +189,7 @@ init_max_error (void) max_error = 0; real_max_error = 0; imag_max_error = 0; + feclearexcept (FE_ALL_EXCEPT); } static void @@ -723,6 +724,12 @@ acos_test (void) static void acosh_test (void) { + errno = 0; + FUNC(acosh) (7); + if (errno == ENOSYS) + /* Function not implemented. */ + return; + START (acosh); TEST_f_f (acosh, plus_infty, plus_infty); @@ -770,6 +777,12 @@ asin_test (void) static void asinh_test (void) { + errno = 0; + FUNC(asinh) (0.7); + if (errno == ENOSYS) + /* Function not implemented. */ + return; + START (asinh); TEST_f_f (asinh, 0, 0); @@ -815,6 +828,11 @@ atan_test (void) static void atanh_test (void) { + errno = 0; + FUNC(atanh) (0.7); + if (errno == ENOSYS) + /* Function not implemented. */ + return; START (atanh); @@ -838,6 +856,12 @@ atanh_test (void) static void atan2_test (void) { + errno = 0; + FUNC(atan2) (-0, 1); + if (errno == ENOSYS) + /* Function not implemented. */ + return; + START (atan2); /* atan2 (0,x) == 0 for x > 0. */ @@ -904,6 +928,12 @@ atan2_test (void) static void cabs_test (void) { + errno = 0; + FUNC(cabs) (BUILD_COMPLEX (0.7, 12.4)); + if (errno == ENOSYS) + /* Function not implemented. */ + return; + START (cabs); /* cabs (x + iy) is specified as hypot (x,y) */ @@ -944,6 +974,12 @@ cabs_test (void) static void cacos_test (void) { + errno = 0; + FUNC(cacos) (BUILD_COMPLEX (0.7, 1.2)); + if (errno == ENOSYS) + /* Function not implemented. */ + return; + START (cacos); @@ -1002,6 +1038,12 @@ cacos_test (void) static void cacosh_test (void) { + errno = 0; + FUNC(cacosh) (BUILD_COMPLEX (0.7, 1.2)); + if (errno == ENOSYS) + /* Function not implemented. */ + return; + START (cacosh); @@ -1125,6 +1167,12 @@ carg_test (void) static void casin_test (void) { + errno = 0; + FUNC(casin) (BUILD_COMPLEX (0.7, 1.2)); + if (errno == ENOSYS) + /* Function not implemented. */ + return; + START (casin); TEST_c_c (casin, 0, 0, 0.0, 0.0); @@ -1183,6 +1231,12 @@ casin_test (void) static void casinh_test (void) { + errno = 0; + FUNC(casinh) (BUILD_COMPLEX (0.7, 1.2)); + if (errno == ENOSYS) + /* Function not implemented. */ + return; + START (casinh); TEST_c_c (casinh, 0, 0, 0.0, 0.0); @@ -1241,6 +1295,12 @@ casinh_test (void) static void catan_test (void) { + errno = 0; + FUNC(catan) (BUILD_COMPLEX (0.7, 1.2)); + if (errno == ENOSYS) + /* Function not implemented. */ + return; + START (catan); TEST_c_c (catan, 0, 0, 0, 0); @@ -1303,6 +1363,12 @@ catan_test (void) static void catanh_test (void) { + errno = 0; + FUNC(catanh) (BUILD_COMPLEX (0.7, 1.2)); + if (errno == ENOSYS) + /* Function not implemented. */ + return; + START (catanh); TEST_c_c (catanh, 0, 0, 0.0, 0.0); @@ -1384,6 +1450,11 @@ cbrt_test (void) static void ccos_test (void) { + errno = 0; + FUNC(ccos) (BUILD_COMPLEX (0, 0)); + if (errno == ENOSYS) + /* Function not implemented. */ + return; START (ccos); @@ -1448,6 +1519,11 @@ ccos_test (void) static void ccosh_test (void) { + errno = 0; + FUNC(ccosh) (BUILD_COMPLEX (0.7, 1.2)); + if (errno == ENOSYS) + /* Function not implemented. */ + return; START (ccosh); @@ -1530,6 +1606,12 @@ ceil_test (void) static void cexp_test (void) { + errno = 0; + FUNC(cexp) (BUILD_COMPLEX (0, 0)); + if (errno == ENOSYS) + /* Function not implemented. */ + return; + START (cexp); TEST_c_c (cexp, plus_zero, plus_zero, 1, 0.0); @@ -1602,6 +1684,12 @@ cimag_test (void) static void clog_test (void) { + errno = 0; + FUNC(clog) (BUILD_COMPLEX (-2, -3)); + if (errno == ENOSYS) + /* Function not implemented. */ + return; + START (clog); TEST_c_c (clog, minus_zero, 0, minus_infty, M_PIl, DIVIDE_BY_ZERO_EXCEPTION); @@ -1661,6 +1749,12 @@ clog_test (void) static void clog10_test (void) { + errno = 0; + FUNC(clog10) (BUILD_COMPLEX (0.7, 1.2)); + if (errno == ENOSYS) + /* Function not implemented. */ + return; + START (clog10); TEST_c_c (clog10, minus_zero, 0, minus_infty, M_PIl, DIVIDE_BY_ZERO_EXCEPTION); @@ -1791,6 +1885,12 @@ cos_test (void) static void cosh_test (void) { + errno = 0; + FUNC(cosh) (0.7); + if (errno == ENOSYS) + /* Function not implemented. */ + return; + START (cosh); TEST_f_f (cosh, 0, 1); TEST_f_f (cosh, minus_zero, 1); @@ -1809,6 +1909,12 @@ cosh_test (void) static void cpow_test (void) { + errno = 0; + FUNC(cpow) (BUILD_COMPLEX (1, 0), BUILD_COMPLEX (0, 0)); + if (errno == ENOSYS) + /* Function not implemented. */ + return; + START (cpow); TEST_cc_c (cpow, 1, 0, 0, 0, 1.0, 0.0); @@ -1862,6 +1968,11 @@ creal_test (void) static void csin_test (void) { + errno = 0; + FUNC(csin) (BUILD_COMPLEX (0.7, 1.2)); + if (errno == ENOSYS) + /* Function not implemented. */ + return; START (csin); @@ -1926,6 +2037,11 @@ csin_test (void) static void csinh_test (void) { + errno = 0; + FUNC(csinh) (BUILD_COMPLEX (0.7, 1.2)); + if (errno == ENOSYS) + /* Function not implemented. */ + return; START (csinh); @@ -1988,6 +2104,12 @@ csinh_test (void) static void csqrt_test (void) { + errno = 0; + FUNC(csqrt) (BUILD_COMPLEX (-1, 0)); + if (errno == ENOSYS) + /* Function not implemented. */ + return; + START (csqrt); TEST_c_c (csqrt, 0, 0, 0.0, 0.0); @@ -2048,6 +2170,12 @@ csqrt_test (void) static void ctan_test (void) { + errno = 0; + FUNC(ctan) (BUILD_COMPLEX (0.7, 1.2)); + if (errno == ENOSYS) + /* Function not implemented. */ + return; + START (ctan); TEST_c_c (ctan, 0, 0, 0.0, 0.0); @@ -2100,6 +2228,12 @@ ctan_test (void) static void ctanh_test (void) { + errno = 0; + FUNC(ctanh) (BUILD_COMPLEX (0, 0)); + if (errno == ENOSYS) + /* Function not implemented. */ + return; + START (ctanh); TEST_c_c (ctanh, 0, 0, 0.0, 0.0); @@ -2485,6 +2619,12 @@ fmin_test (void) static void fmod_test (void) { + errno = 0; + FUNC(fmod) (6.5, 2.3); + if (errno == ENOSYS) + /* Function not implemented. */ + return; + START (fmod); /* fmod (+0, y) == +0 for y != 0. */ @@ -2585,6 +2725,12 @@ gamma_test (void) static void hypot_test (void) { + errno = 0; + FUNC(hypot) (0.7, 12.4); + if (errno == ENOSYS) + /* Function not implemented. */ + return; + START (hypot); TEST_ff_f (hypot, plus_infty, 1, plus_infty, IGNORE_ZERO_INF_SIGN); @@ -3399,6 +3545,11 @@ pow_test (void) static void remainder_test (void) { + errno = 0; + FUNC(remainder) (1.625, 1.0); + if (errno == ENOSYS) + /* Function not implemented. */ + return; START (remainder); @@ -3424,6 +3575,12 @@ remquo_test (void) /* x is needed. */ int x; + errno = 0; + FUNC(remquo) (1.625, 1.0, &x); + if (errno == ENOSYS) + /* Function not implemented. */ + return; + START (remquo); TEST_ffI_f1 (remquo, 1, 0, nan_value, IGNORE, INVALID_EXCEPTION); @@ -3637,6 +3794,12 @@ sincos_test (void) { FLOAT sin_res, cos_res; + errno = 0; + FUNC(sincos) (0, &sin_res, &cos_res); + if (errno == ENOSYS) + /* Function not implemented. */ + return; + START (sincos); /* sincos is treated differently because it returns void. */ @@ -3658,6 +3821,12 @@ sincos_test (void) static void sinh_test (void) { + errno = 0; + FUNC(sinh) (0.7); + if (errno == ENOSYS) + /* Function not implemented. */ + return; + START (sinh); TEST_f_f (sinh, 0, 0); TEST_f_f (sinh, minus_zero, minus_zero); @@ -3732,6 +3901,12 @@ tan_test (void) static void tanh_test (void) { + errno = 0; + FUNC(tanh) (0.7); + if (errno == ENOSYS) + /* Function not implemented. */ + return; + START (tanh); TEST_f_f (tanh, 0, 0);
Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
---|---|---|
Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |