From ea38f4d89c9698895b1cf53a5946429dc1d8bbaa Mon Sep 17 00:00:00 2001 From: Sergey Cherkashin <4erkashin@list.ru> Date: Tue, 3 Oct 2017 15:26:34 +0300 Subject: math: add exception handling functionality According to standards SVID and SYSV. Modified lgamma calling in case when 'signgam' variable should not be used. Signed-off-by: Waldemar Brodkorb --- libm/ldouble_wrappers.c | 171 +++++++++--------------------------------------- 1 file changed, 32 insertions(+), 139 deletions(-) (limited to 'libm/ldouble_wrappers.c') diff --git a/libm/ldouble_wrappers.c b/libm/ldouble_wrappers.c index 3387698cf..f60fab539 100644 --- a/libm/ldouble_wrappers.c +++ b/libm/ldouble_wrappers.c @@ -42,34 +42,17 @@ long long func##l(long double x) \ return func((double) x); \ } -#ifndef __DO_XSI_MATH__ -# undef L_j0l /* long double j0l(long double x); */ -# undef L_j1l /* long double j1l(long double x); */ -# undef L_jnl /* long double jnl(int n, long double x); */ -# undef L_y0l /* long double y0l(long double x); */ -# undef L_y1l /* long double y1l(long double x); */ -# undef L_ynl /* long double ynl(int n, long double x); */ -#endif - /* Implement the following, as defined by SuSv3 */ #if 0 -long double acoshl(long double); -long double acosl(long double); long double asinhl(long double); -long double asinl(long double); -long double atan2l(long double, long double); -long double atanhl(long double); long double atanl(long double); long double cargl(long double complex); long double cbrtl(long double); long double ceill(long double); long double copysignl(long double, long double); -long double coshl(long double); long double cosl(long double); long double erfcl(long double); long double erfl(long double); -long double exp2l(long double); -long double expl(long double); long double expm1l(long double); long double fabsl(long double); long double fdiml(long double, long double); @@ -77,65 +60,69 @@ long double floorl(long double); long double fmal(long double, long double, long double); long double fmaxl(long double, long double); long double fminl(long double, long double); -long double fmodl(long double, long double); long double frexpl(long double value, int *); -long double hypotl(long double, long double); int ilogbl(long double); long double ldexpl(long double, int); -long double lgammal(long double); long long llrintl(long double); long long llroundl(long double); -long double log10l(long double); long double log1pl(long double); -long double log2l(long double); long double logbl(long double); -long double logl(long double); long lrintl(long double); long lroundl(long double); long double modfl(long double, long double *); long double nearbyintl(long double); long double nextafterl(long double, long double); long double nexttowardl(long double, long double); -long double powl(long double, long double); -long double remainderl(long double, long double); long double remquol(long double, long double, int *); long double rintl(long double); long double roundl(long double); long double scalblnl(long double, long); long double scalbnl(long double, int); -long double sinhl(long double); long double sinl(long double); -long double sqrtl(long double); long double tanhl(long double); long double tanl(long double); -long double tgammal(long double); long double truncl(long double); #endif -#ifdef L_acoshl -WRAPPER1(acosh) -#endif +/* The following functions implemented as wrappers + * in separate files (w_funcl.c) + */ +#if 0 +long double acosl(long double); +long double acoshl(long double); +long double asinl(long double); +long double atan2l(long double, long double); +long double atanhl(long double); +long double coshl(long double); +long double exp2l(long double); +long double expl(long double); +long double fmodl(long double, long double); +long double hypotl(long double, long double); +long double lgammal(long double); +long double log10l(long double); +long double log2l(long double); +long double logl(long double); +long double powl(long double, long double); +long double remainderl(long double, long double); +long double sinhl(long double); +long double sqrtl(long double); +long double j0l(long double x); +long double j1l(long double x); +long double jnl(int n, long double x); +long double y0l(long double x); +long double y1l(long double x); +long double ynl(int n, long double x); +long double tgammal(long double x); +long double scalbl(long double x, long double fn); +long double gammal(long double x); +long double scalbl(long double x, long double fn); -#ifdef L_acosl -WRAPPER1(acos) #endif #ifdef L_asinhl WRAPPER1(asinh) #endif -#ifdef L_asinl -WRAPPER1(asin) -#endif - -#ifdef L_atan2l -WRAPPER2(atan2) -#endif - -#ifdef L_atanhl -WRAPPER1(atanh) -#endif - #ifdef L_atanl WRAPPER1(atan) #endif @@ -159,10 +146,6 @@ WRAPPER1(ceil) WRAPPER2(copysign) #endif -#ifdef L_coshl -WRAPPER1(cosh) -#endif - #ifdef L_cosl WRAPPER1(cos) libm_hidden_def(cosl) @@ -176,15 +159,6 @@ WRAPPER1(erfc) WRAPPER1(erf) #endif -#ifdef L_exp2l -WRAPPER1(exp2) -#endif - -#ifdef L_expl -WRAPPER1(exp) -libm_hidden_def(expl) -#endif - #ifdef L_expm1l WRAPPER1(expm1) #endif @@ -216,10 +190,6 @@ WRAPPER2(fmax) WRAPPER2(fmin) #endif -#ifdef L_fmodl -WRAPPER2(fmod) -#endif - #ifdef L_frexpl long double frexpl (long double x, int *ex) { @@ -227,34 +197,10 @@ long double frexpl (long double x, int *ex) } #endif -#ifdef L_gammal -WRAPPER1(gamma) -#endif - -#ifdef L_hypotl -WRAPPER2(hypot) -libm_hidden_def(hypotl) -#endif - #ifdef L_ilogbl int_WRAPPER1(ilogb) #endif -#ifdef L_j0l - WRAPPER1(j0) -#endif - -#ifdef L_j1l - WRAPPER1(j1) -#endif - -#ifdef L_jnl -long double jnl(int n, long double x) -{ - return (long double) jn(n, (double)x); -} -#endif - #ifdef L_ldexpl long double ldexpl (long double x, int ex) { @@ -262,10 +208,6 @@ long double ldexpl (long double x, int ex) } #endif -#ifdef L_lgammal -WRAPPER1(lgamma) -#endif - #ifdef L_llrintl long_long_WRAPPER1(llrint) #endif @@ -274,26 +216,14 @@ long_long_WRAPPER1(llrint) long_long_WRAPPER1(llround) #endif -#ifdef L_log10l -WRAPPER1(log10) -#endif - #ifdef L_log1pl WRAPPER1(log1p) #endif -#ifdef L_log2l -WRAPPER1(log2) -#endif - #ifdef L_logbl WRAPPER1(logb) #endif -#ifdef L_logl -WRAPPER1(log) -#endif - #ifdef L_lrintl long_WRAPPER1(lrint) #endif @@ -332,14 +262,6 @@ long double nexttowardl(long double x, long double y) #endif #endif -#ifdef L_powl -WRAPPER2(pow) -#endif - -#ifdef L_remainderl -WRAPPER2(remainder) -#endif - #ifdef L_remquol long double remquol (long double x, long double y, int *quo) { @@ -369,21 +291,11 @@ long double scalbnl (long double x, int ex) } #endif -/* scalb is an obsolete function */ - -#ifdef L_sinhl -WRAPPER1(sinh) -#endif - #ifdef L_sinl WRAPPER1(sin) libm_hidden_def(sinl) #endif -#ifdef L_sqrtl -WRAPPER1(sqrt) -#endif - #ifdef L_tanhl WRAPPER1(tanh) #endif @@ -392,10 +304,6 @@ WRAPPER1(tanh) WRAPPER1(tan) #endif -#ifdef L_tgammal -WRAPPER1(tgamma) -#endif - #ifdef L_truncl WRAPPER1(trunc) #endif @@ -404,21 +312,6 @@ WRAPPER1(trunc) WRAPPER1(significand) #endif -#ifdef L_y0l -WRAPPER1(y0) -#endif - -#ifdef L_y1l -WRAPPER1(y1) -#endif - -#ifdef L_ynl -long double ynl(int n, long double x) -{ - return (long double) yn(n, (double)x); -} -#endif - #if defined __DO_C99_MATH__ && !defined __NO_LONG_DOUBLE_MATH -- cgit v1.2.3