Module Name: src Committed By: martin Date: Fri Nov 22 13:37:24 UTC 2013
Modified Files: src/lib/libm: Makefile src/lib/libm/src: e_sqrtl.c Log Message: Try to fix the build (again): move e_sqrtl.c to common soure, but move the include of fenv.h into the #ifdef __HAVE_LONG_DOUBLE block and also provide a -DHAVE_FENV_H from the makefile for archs that have it - leaving out exception settings on architectures that do not provide it. To generate a diff of this commit: cvs rdiff -u -r1.151 -r1.152 src/lib/libm/Makefile cvs rdiff -u -r1.2 -r1.3 src/lib/libm/src/e_sqrtl.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/lib/libm/Makefile diff -u src/lib/libm/Makefile:1.151 src/lib/libm/Makefile:1.152 --- src/lib/libm/Makefile:1.151 Thu Nov 21 11:21:54 2013 +++ src/lib/libm/Makefile Fri Nov 22 13:37:24 2013 @@ -1,4 +1,4 @@ -# $NetBSD: Makefile,v 1.151 2013/11/21 11:21:54 martin Exp $ +# $NetBSD: Makefile,v 1.152 2013/11/22 13:37:24 martin Exp $ # # @(#)Makefile 5.1beta 93/09/24 # @@ -53,6 +53,7 @@ ARCH_SRCS = s_copysign.S s_copysignf.S l .elif (${MACHINE_CPU} == "arm") .PATH: ${.CURDIR}/arch/arm COMMON_SRCS+= fenv.c +COPTS.e_sqrtl.c += -DHAVE_FENV_H .if (${MKSOFTFLOAT} == "no") ARCH_SRCS = e_sqrt.S e_sqrtf.S lrint.S lrintf.S s_fabsf.S s_fma.S s_fmaf.S .else @@ -63,11 +64,13 @@ ${i} ${i:.o=.po} ${i:.o=.pico} ${i:.o=.g .elif (${MACHINE_ARCH} == "sparc") .PATH: ${.CURDIR}/arch/sparc COMMON_SRCS+= fenv.c +COPTS.e_sqrtl.c += -DHAVE_FENV_H COMMON_SRCS+= s_fma.c s_fmaf.c s_fmal.c .elif (${MACHINE_ARCH} == "sparc64") .PATH: ${.CURDIR}/arch/sparc64 COMMON_SRCS+= fenv.c s_nexttowardf.c \ - s_nearbyint.c s_rintl.c e_sqrtl.c + s_nearbyint.c s_rintl.c +COPTS.e_sqrtl.c += -DHAVE_FENV_H .ifndef _COMPAT_M32_MK_ COMMON_SRCS+= s_nexttoward.c .endif @@ -80,8 +83,9 @@ COMMON_SRCS+= s_fma.c s_fmaf.c s_fmal.c .PATH: ${.CURDIR}/arch/i387 COMMON_SRCS+= fenv.c s_nexttoward.c s_nexttowardf.c \ - s_nearbyint.c s_rintl.c e_sqrtl.c + s_nearbyint.c s_rintl.c COMMON_SRCS+= s_fma.c s_fmaf.c s_fmal.c +COPTS.e_sqrtl.c += -DHAVE_FENV_H ARCH_SRCS = e_acos.S e_asin.S e_atan2.S e_exp.S e_expf.S e_fmod.S e_log.S \ e_logf.S e_log10.S e_log10f.S e_log2.S e_log2f.S e_remainder.S \ @@ -156,7 +160,7 @@ COMMON_SRCS+= b_exp.c b_log.c b_tgamma.c e_j1.c e_j1f.c e_jn.c e_jnf.c e_lgamma_r.c e_lgammaf_r.c e_log.c \ e_log2.c e_log10.c e_log10f.c e_log2f.c e_logf.c e_pow.c e_powf.c \ e_rem_pio2.c e_rem_pio2f.c e_remainder.c e_remainderf.c e_scalb.c \ - e_scalbf.c e_sinh.c e_sinhf.c e_sqrt.c e_sqrtf.c \ + e_scalbf.c e_sinh.c e_sinhf.c e_sqrt.c e_sqrtf.c e_sqrtl.c \ k_cos.c k_cosf.c k_rem_pio2.c k_rem_pio2f.c k_sin.c k_sinf.c \ k_standard.c k_tan.c k_tanf.c \ ldbl_dummy.c \ Index: src/lib/libm/src/e_sqrtl.c diff -u src/lib/libm/src/e_sqrtl.c:1.2 src/lib/libm/src/e_sqrtl.c:1.3 --- src/lib/libm/src/e_sqrtl.c:1.2 Wed Nov 20 21:12:30 2013 +++ src/lib/libm/src/e_sqrtl.c Fri Nov 22 13:37:24 2013 @@ -28,10 +28,9 @@ #if 0 __FBSDID("$FreeBSD: head/lib/msun/src/e_sqrtl.c 176720 2008-03-02 01:47:58Z das $"); #endif -__RCSID("$NetBSD: e_sqrtl.c,v 1.2 2013/11/20 21:12:30 martin Exp $"); +__RCSID("$NetBSD: e_sqrtl.c,v 1.3 2013/11/22 13:37:24 martin Exp $"); #include <machine/ieee.h> -#include <fenv.h> #include <float.h> #include "math.h" @@ -39,6 +38,10 @@ __RCSID("$NetBSD: e_sqrtl.c,v 1.2 2013/1 #ifdef __HAVE_LONG_DOUBLE +#ifdef HAVE_FENV_H +#include <fenv.h> +#endif + #ifdef LDBL_IMPLICIT_NBIT #define LDBL_NBIT 0 #endif @@ -84,7 +87,9 @@ __ieee754_sqrtl(long double x) union ieee_ext_u ux = { .extu_ld = x, }; int k, r; long double lo, xn; +#ifdef HAVE_FENV_H fenv_t env; +#endif /* If x = NaN, then sqrt(x) = NaN. */ /* If x = Inf, then sqrt(x) = Inf. */ @@ -100,7 +105,9 @@ __ieee754_sqrtl(long double x) if (ux.extu_sign) return ((x - x) / (x - x)); +#ifdef HAVE_FENV_H feholdexcept(&env); +#endif if (ux.extu_exp == 0) { /* Adjust subnormal numbers. */ @@ -143,7 +150,9 @@ __ieee754_sqrtl(long double x) if (!fetestexcept(FE_INEXACT)) { /* Quotient is exact. */ if (xn == ux.extu_ld) { +#ifdef HAVE_FENV_H fesetenv(&env); +#endif return (ux.extu_ld); } /* Round correctly for inputs like x = y**2 - ulp. */ @@ -157,7 +166,9 @@ __ieee754_sqrtl(long double x) xn = inc(xn); /* xn = xn + ulp. */ } ux.extu_ld = ux.extu_ld + xn; /* Chopped sum. */ +#ifdef HAVE_FENV_H feupdateenv(&env); /* Restore env and raise inexact */ +#endif ux.extu_exp--; return (ux.extu_ld); }