diff options
author | peter <peter@FreeBSD.org> | 2003-07-23 04:23:36 +0000 |
---|---|---|
committer | peter <peter@FreeBSD.org> | 2003-07-23 04:23:36 +0000 |
commit | 07a2b34dd7719c79be09239a8a2b5d2e16ccb8c2 (patch) | |
tree | 6b396620b7053f77034f03f096bad5f767d732e1 /lib | |
parent | 6635082314c6f72e2650578374dc2a73d2788d6e (diff) | |
download | FreeBSD-src-07a2b34dd7719c79be09239a8a2b5d2e16ccb8c2.zip FreeBSD-src-07a2b34dd7719c79be09239a8a2b5d2e16ccb8c2.tar.gz |
Now that we do not need to do runtime detection for the broken default
fp emulator, stop doing the runtime selection of hardware or emulated
floating point operations on i386. Note that I have not suppressed the
duplicate compiles yet.
While here, fix the alpha. It has provided specific copysign/copysignf
functions since the beginning of time, but they have never been used.
Diffstat (limited to 'lib')
-rw-r--r-- | lib/msun/Makefile | 11 | ||||
-rw-r--r-- | lib/msun/src/math_private.h | 14 | ||||
-rw-r--r-- | lib/msun/src/s_copysignf.c | 2 |
3 files changed, 21 insertions, 6 deletions
diff --git a/lib/msun/Makefile b/lib/msun/Makefile index 1fb2169..de814b3 100644 --- a/lib/msun/Makefile +++ b/lib/msun/Makefile @@ -42,7 +42,6 @@ # .if ${MACHINE_ARCH} == "alpha" -.PATH: ${.CURDIR)/alpha ARCH= alpha ARCH_SRCS = s_copysign.S s_copysignf.S # XXX Comment from NetBSD/Alpha: @@ -52,7 +51,6 @@ ARCH_SRCS = s_copysign.S s_copysignf.S #CFLAGS += -mtrap-precision=i -mfp-trap-mode=su .elif ${MACHINE_ARCH} == "i386" ARCH= i387 -ARCH_PREFIX= ${ARCH}_ ARCH_SRCS = e_acos.S e_asin.S e_atan2.S e_exp.S e_fmod.S e_log.S e_log10.S \ e_remainder.S e_scalb.S e_sqrt.S s_atan.S s_ceil.S s_copysign.S \ s_cos.S s_finite.S s_floor.S s_ilogb.S s_logb.S \ @@ -62,11 +60,16 @@ ARCH_SRCS = e_acos.S e_asin.S e_atan2.S e_exp.S e_fmod.S e_log.S e_log10.S \ # Broken # ARCH_SRCS+= s_log1p.S +.if defined(ARCH) +.PATH: ${.CURDIR)/${ARCH} +ARCH_PREFIX= ${ARCH}_ +.endif + .PATH: ${.CURDIR}/bsdsrc .PATH: ${.CURDIR}/man .PATH: ${.CURDIR}/src -CFLAGS+= -D_IEEE_LIBM -D_ARCH_INDIRECT=${ARCH_PREFIX} +CFLAGS+= -D_IEEE_LIBM LIB= m COMMON_SRCS= b_exp.c b_log.c b_tgamma.c \ @@ -103,9 +106,9 @@ COMMON_SRCS= b_exp.c b_log.c b_tgamma.c \ # FreeBSD's C library supplies these functions: #COMMON_SRCS+= s_fabs.c s_frexp.c s_isnan.c s_ldexp.c s_modf.c -CLEANFILES+= ${RENAMED_ARCH_SRCS} RENAMED_ARCH_SRCS= ${ARCH_SRCS:S/^/${ARCH_PREFIX}/g} SRCS= ${COMMON_SRCS} ${RENAMED_ARCH_SRCS} +CLEANFILES+= ${RENAMED_ARCH_SRCS} # Generate rules to rename arch-specific sources to avoid conflicts. # The path to the arch-specific sources is given explicitly instead of diff --git a/lib/msun/src/math_private.h b/lib/msun/src/math_private.h index c4a7d2b..d9d854e 100644 --- a/lib/msun/src/math_private.h +++ b/lib/msun/src/math_private.h @@ -225,6 +225,19 @@ float __kernel_cosf(float,float); float __kernel_tanf(float,float,int); int __kernel_rem_pio2f(float*,float*,int,int,int,const int*); +/* alpha and i386 provide arch specific copysign() */ +#if defined(__ia64__) || defined(__sparc64__) || \ + defined(__powerpc__) || defined(__amd64__) +#define __generic_copysign copysign +#endif + +/* alpha provides arch specific copysignf() */ +#if defined(__i386__) || defined(__ia64__) || defined(__sparc64__) || \ + defined(__powerpc__) || defined(__amd64__) +#define __generic_copysignf copysignf +#endif + +/* i386 provides lots of arch specific functions */ #if defined(__alpha__) || defined(__ia64__) || defined(__sparc64__) || \ defined(__powerpc__) || defined(__amd64__) #define __generic___ieee754_acos __ieee754_acos @@ -239,7 +252,6 @@ int __kernel_rem_pio2f(float*,float*,int,int,int,const int*); #define __generic___ieee754_sqrt __ieee754_sqrt #define __generic_atan atan #define __generic_ceil ceil -#define __generic_copysign copysign #define __generic_cos cos #define __generic_finite finite #define __generic_floor floor diff --git a/lib/msun/src/s_copysignf.c b/lib/msun/src/s_copysignf.c index df5304f..2bcc055 100644 --- a/lib/msun/src/s_copysignf.c +++ b/lib/msun/src/s_copysignf.c @@ -27,7 +27,7 @@ static char rcsid[] = "$FreeBSD$"; #include "math_private.h" float -copysignf(float x, float y) +__generic_copysignf(float x, float y) { u_int32_t ix,iy; GET_FLOAT_WORD(ix,x); |