1995-05-30 05:51:47 +00:00
|
|
|
# @(#)Makefile 5.1beta 93/09/24
|
1999-08-28 00:22:10 +00:00
|
|
|
# $FreeBSD$
|
1995-05-30 05:51:47 +00:00
|
|
|
#
|
1994-08-19 09:40:01 +00:00
|
|
|
# ====================================================
|
|
|
|
# Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved.
|
1995-05-30 05:51:47 +00:00
|
|
|
#
|
1994-08-19 09:40:01 +00:00
|
|
|
# Developed at SunPro, a Sun Microsystems, Inc. business.
|
|
|
|
# Permission to use, copy, modify, and distribute this
|
1995-05-30 05:51:47 +00:00
|
|
|
# software is freely granted, provided that this notice
|
1994-08-19 09:40:01 +00:00
|
|
|
# is preserved.
|
|
|
|
# ====================================================
|
1995-05-30 05:51:47 +00:00
|
|
|
#
|
|
|
|
#
|
1994-08-19 09:40:01 +00:00
|
|
|
|
2016-02-05 21:01:08 +00:00
|
|
|
PACKAGE= clibs
|
2016-09-28 17:44:03 +00:00
|
|
|
ARCH_SUBDIR= ${MACHINE_CPUARCH:S/i386/i387/}
|
2003-07-23 04:23:36 +00:00
|
|
|
|
2005-02-04 14:33:39 +00:00
|
|
|
.include "${ARCH_SUBDIR}/Makefile.inc"
|
2004-06-06 10:06:57 +00:00
|
|
|
|
2008-07-18 02:18:34 +00:00
|
|
|
.PATH: ${.CURDIR}/${ARCH_SUBDIR}
|
2013-06-05 05:33:01 +00:00
|
|
|
.if ${MACHINE_CPUARCH} == "i386" || ${MACHINE_CPUARCH} == "amd64"
|
|
|
|
.PATH: ${.CURDIR}/x86
|
|
|
|
CFLAGS+= -I${.CURDIR}/x86
|
|
|
|
.endif
|
1994-08-19 09:40:01 +00:00
|
|
|
|
2007-12-16 21:19:28 +00:00
|
|
|
# long double format
|
|
|
|
.if ${LDBL_PREC} == 64
|
|
|
|
.PATH: ${.CURDIR}/ld80
|
2008-07-31 22:41:26 +00:00
|
|
|
CFLAGS+= -I${.CURDIR}/ld80
|
2007-12-16 21:19:28 +00:00
|
|
|
.elif ${LDBL_PREC} == 113
|
|
|
|
.PATH: ${.CURDIR}/ld128
|
2008-07-31 22:41:26 +00:00
|
|
|
CFLAGS+= -I${.CURDIR}/ld128
|
2007-12-16 21:19:28 +00:00
|
|
|
.endif
|
|
|
|
|
2015-06-11 21:13:05 +00:00
|
|
|
CFLAGS+= -I${.CURDIR}/${ARCH_SUBDIR}
|
|
|
|
|
Avoid raising unexpected floating point exceptions in libm
When using clang with x86_64 CPUs that support AVX, some floating point
transformations may raise exceptions that would not have been raised by
the original code. To avoid this, use the -fp-exception-behavior=maytrap
flag, introduced in clang 10.0.0.
In particular, this fixes a number of test failures with ctanhf(3) and
ctanf(3), when libm is compiled with -mavx. An unexpected FE_INVALID
exception is then raised, because clang emits vdivps instructions to
perform certain divides. (The vdivps instruction operates on multiple
single-precision float operands simultaneously, but the exceptions may
be influenced by unused parts of the XMM registers. In this particular
case, it was calculating 0 / 0, which results in FE_INVALID.)
If -fp-exception-behavior=maytrap is specified however, clang uses
vdivss instructions instead, which work on one operand, and should not
raise unexpected exceptions.
Reported by: olivier
Reviewed by: arichardson
PR: 254911
MFC after: 1 week
Differential Revision: https://reviews.freebsd.org/D29686
2021-04-09 23:07:54 +00:00
|
|
|
.include <bsd.compiler.mk>
|
2021-04-10 14:02:49 +00:00
|
|
|
.if ${COMPILER_TYPE} == "clang" && ${COMPILER_VERSION} >= 100000 && \
|
|
|
|
(${MACHINE_CPUARCH} == "amd64" || ${MACHINE_CPUARCH} == "i386")
|
Avoid raising unexpected floating point exceptions in libm
When using clang with x86_64 CPUs that support AVX, some floating point
transformations may raise exceptions that would not have been raised by
the original code. To avoid this, use the -fp-exception-behavior=maytrap
flag, introduced in clang 10.0.0.
In particular, this fixes a number of test failures with ctanhf(3) and
ctanf(3), when libm is compiled with -mavx. An unexpected FE_INVALID
exception is then raised, because clang emits vdivps instructions to
perform certain divides. (The vdivps instruction operates on multiple
single-precision float operands simultaneously, but the exceptions may
be influenced by unused parts of the XMM registers. In this particular
case, it was calculating 0 / 0, which results in FE_INVALID.)
If -fp-exception-behavior=maytrap is specified however, clang uses
vdivss instructions instead, which work on one operand, and should not
raise unexpected exceptions.
Reported by: olivier
Reviewed by: arichardson
PR: 254911
MFC after: 1 week
Differential Revision: https://reviews.freebsd.org/D29686
2021-04-09 23:07:54 +00:00
|
|
|
# When using clang with x86_64 CPUs that support AVX, some floating point
|
|
|
|
# transformations may raise exceptions that would not have been raised by the
|
|
|
|
# original code. To avoid this, use the -fp-exception-behavior=maytrap flag,
|
|
|
|
# introduced in clang 10.0.0.
|
|
|
|
# See also: https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=254911
|
|
|
|
CFLAGS+= -ffp-exception-behavior=maytrap
|
|
|
|
.endif
|
|
|
|
|
2021-11-02 11:31:17 +00:00
|
|
|
# Tell the compiler we don't set errno in any of the math functions. This
|
|
|
|
# stops gcc from trying to generate a function call to set errno when using
|
|
|
|
# a builtin in the implementation
|
|
|
|
CFLAGS+= -fno-math-errno
|
|
|
|
|
2008-07-18 02:18:34 +00:00
|
|
|
.PATH: ${.CURDIR}/bsdsrc
|
|
|
|
.PATH: ${.CURDIR}/src
|
|
|
|
.PATH: ${.CURDIR}/man
|
|
|
|
|
1994-08-19 09:40:01 +00:00
|
|
|
LIB= m
|
2015-06-15 19:28:07 +00:00
|
|
|
SHLIBDIR?= /lib
|
2007-05-21 02:49:08 +00:00
|
|
|
SHLIB_MAJOR= 5
|
2008-07-31 20:11:37 +00:00
|
|
|
WARNS?= 1
|
2014-02-21 18:49:08 +00:00
|
|
|
IGNORE_PRAGMA=
|
2021-12-14 09:02:45 +00:00
|
|
|
COMMON_SRCS= b_tgamma.c \
|
2002-03-26 11:59:29 +00:00
|
|
|
e_acos.c e_acosf.c e_acosh.c e_acoshf.c e_asin.c e_asinf.c \
|
1994-08-19 09:40:01 +00:00
|
|
|
e_atan2.c e_atan2f.c e_atanh.c e_atanhf.c e_cosh.c e_coshf.c e_exp.c \
|
|
|
|
e_expf.c e_fmod.c e_fmodf.c e_gamma.c e_gamma_r.c e_gammaf.c \
|
|
|
|
e_gammaf_r.c e_hypot.c e_hypotf.c e_j0.c e_j0f.c e_j1.c e_j1f.c \
|
|
|
|
e_jn.c e_jnf.c e_lgamma.c e_lgamma_r.c e_lgammaf.c e_lgammaf_r.c \
|
2010-12-05 22:11:22 +00:00
|
|
|
e_log.c e_log10.c e_log10f.c e_log2.c e_log2f.c e_logf.c \
|
|
|
|
e_pow.c e_powf.c e_rem_pio2.c \
|
1994-08-19 09:40:01 +00:00
|
|
|
e_rem_pio2f.c e_remainder.c e_remainderf.c e_scalb.c e_scalbf.c \
|
2004-06-06 10:06:57 +00:00
|
|
|
e_sinh.c e_sinhf.c e_sqrt.c e_sqrtf.c fenv.c \
|
2011-10-21 06:27:56 +00:00
|
|
|
k_cos.c k_cosf.c k_exp.c k_expf.c k_rem_pio2.c k_sin.c k_sinf.c \
|
2005-02-04 14:08:32 +00:00
|
|
|
k_tan.c k_tanf.c \
|
2008-07-31 22:41:26 +00:00
|
|
|
s_asinh.c s_asinhf.c s_atan.c s_atanf.c s_carg.c s_cargf.c s_cargl.c \
|
2018-05-13 09:54:34 +00:00
|
|
|
s_cbrt.c s_cbrtf.c s_ceil.c s_ceilf.c s_clog.c s_clogf.c \
|
2007-12-15 08:38:44 +00:00
|
|
|
s_copysign.c s_copysignf.c s_cos.c s_cosf.c \
|
|
|
|
s_csqrt.c s_csqrtf.c s_erf.c s_erff.c \
|
2005-04-05 02:57:39 +00:00
|
|
|
s_exp2.c s_exp2f.c s_expm1.c s_expm1f.c s_fabsf.c s_fdim.c \
|
|
|
|
s_finite.c s_finitef.c \
|
2008-02-13 16:56:52 +00:00
|
|
|
s_floor.c s_floorf.c s_fma.c s_fmaf.c \
|
2016-10-11 20:31:59 +00:00
|
|
|
s_fmax.c s_fmaxf.c s_fmin.c \
|
|
|
|
s_fminf.c s_frexp.c s_frexpf.c s_ilogb.c s_ilogbf.c \
|
- Remove s_ldexpf.c (now aliased to scalbn.)
- Add nexttoward{,f,l} and nextafterl. On all platforms,
nexttowardl is an alias for nextafterl.
- Add fmal.
- Add man pages for new routines: fmal, nextafterl,
nexttoward{,f,l}, scalb{,l}nl.
Note that on platforms where long double is the same as double, we
generally just alias the double versions of the routines, since doing
so avoids extra work on the source code level and redundant code in
the binary. In particular:
ldbl53 ldbl64/113
fmal s_fma.c s_fmal.c
ldexpl s_scalbn.c s_scalbnl.c
nextafterl s_nextafter.c s_nextafterl.c
nexttoward s_nextafter.c s_nexttoward.c
nexttowardf s_nexttowardf.c s_nexttowardf.c
nexttowardl s_nextafter.c s_nextafterl.c
scalbnl s_scalbn.c s_scalbnl.c
2005-03-07 04:59:11 +00:00
|
|
|
s_ilogbl.c s_isfinite.c s_isnan.c s_isnormal.c \
|
2005-04-08 01:24:08 +00:00
|
|
|
s_llrint.c s_llrintf.c s_llround.c s_llroundf.c s_llroundl.c \
|
2005-01-11 23:12:55 +00:00
|
|
|
s_log1p.c s_log1pf.c s_logb.c s_logbf.c s_lrint.c s_lrintf.c \
|
2005-04-08 01:24:08 +00:00
|
|
|
s_lround.c s_lroundf.c s_lroundl.c s_modff.c \
|
2007-12-16 21:19:28 +00:00
|
|
|
s_nan.c s_nearbyint.c s_nextafter.c s_nextafterf.c \
|
2005-03-25 04:40:44 +00:00
|
|
|
s_nexttowardf.c s_remquo.c s_remquof.c \
|
2013-11-07 21:20:34 +00:00
|
|
|
s_rint.c s_rintf.c s_round.c s_roundf.c \
|
2004-07-19 08:16:10 +00:00
|
|
|
s_scalbln.c s_scalbn.c s_scalbnf.c s_signbit.c \
|
2017-05-28 06:13:38 +00:00
|
|
|
s_signgam.c s_significand.c s_significandf.c s_sin.c \
|
|
|
|
s_sincos.c s_sincosf.c s_sinf.c \
|
2008-02-18 17:27:11 +00:00
|
|
|
s_tan.c s_tanf.c s_tanh.c s_tanhf.c s_tgammaf.c s_trunc.c s_truncf.c \
|
2005-02-04 14:08:32 +00:00
|
|
|
w_cabs.c w_cabsf.c w_drem.c w_dremf.c
|
1994-08-19 09:40:01 +00:00
|
|
|
|
2021-10-26 20:53:51 +00:00
|
|
|
# IEEE-754 2008 and ISO/IEC TS 18661-4 half-cycle trignometric functions
|
|
|
|
COMMON_SRCS+= s_cospi.c s_cospif.c \
|
|
|
|
s_sinpi.c s_sinpif.c \
|
|
|
|
s_tanpi.c s_tanpif.c
|
|
|
|
|
2003-10-25 09:32:18 +00:00
|
|
|
# Location of fpmath.h and _fpmath.h
|
2015-12-01 22:20:04 +00:00
|
|
|
.if exists(${LIBCSRCDIR}/${MACHINE_ARCH})
|
2010-08-28 15:03:11 +00:00
|
|
|
LIBC_ARCH=${MACHINE_ARCH}
|
|
|
|
.else
|
|
|
|
LIBC_ARCH=${MACHINE_CPUARCH}
|
|
|
|
.endif
|
2015-12-01 22:20:04 +00:00
|
|
|
CFLAGS+= -I${.CURDIR}/src -I${LIBCSRCDIR}/include \
|
|
|
|
-I${LIBCSRCDIR}/${LIBC_ARCH}
|
2006-03-27 23:59:45 +00:00
|
|
|
SYM_MAPS+= ${.CURDIR}/Symbol.map
|
|
|
|
|
2015-12-01 22:20:04 +00:00
|
|
|
VERSION_DEF= ${LIBCSRCDIR}/Versions.def
|
2006-03-27 23:59:45 +00:00
|
|
|
SYMBOL_MAPS= ${SYM_MAPS}
|
2003-10-25 09:32:18 +00:00
|
|
|
|
|
|
|
# C99 long double functions
|
2008-01-14 02:12:07 +00:00
|
|
|
COMMON_SRCS+= s_copysignl.c s_fabsl.c s_llrintl.c s_lrintl.c s_modfl.c
|
- Remove s_ldexpf.c (now aliased to scalbn.)
- Add nexttoward{,f,l} and nextafterl. On all platforms,
nexttowardl is an alias for nextafterl.
- Add fmal.
- Add man pages for new routines: fmal, nextafterl,
nexttoward{,f,l}, scalb{,l}nl.
Note that on platforms where long double is the same as double, we
generally just alias the double versions of the routines, since doing
so avoids extra work on the source code level and redundant code in
the binary. In particular:
ldbl53 ldbl64/113
fmal s_fma.c s_fmal.c
ldexpl s_scalbn.c s_scalbnl.c
nextafterl s_nextafter.c s_nextafterl.c
nexttoward s_nextafter.c s_nexttoward.c
nexttowardf s_nexttowardf.c s_nexttowardf.c
nexttowardl s_nextafter.c s_nextafterl.c
scalbnl s_scalbn.c s_scalbnl.c
2005-03-07 04:59:11 +00:00
|
|
|
.if ${LDBL_PREC} != 53
|
|
|
|
# If long double != double use these; otherwise, we alias the double versions.
|
2021-12-14 09:08:57 +00:00
|
|
|
COMMON_SRCS+= b_tgammal.c catrigl.c \
|
2017-02-17 08:22:32 +00:00
|
|
|
e_acoshl.c e_acosl.c e_asinl.c e_atan2l.c e_atanhl.c \
|
2013-12-30 01:06:21 +00:00
|
|
|
e_coshl.c e_fmodl.c e_hypotl.c \
|
2018-07-15 00:23:10 +00:00
|
|
|
e_lgammal.c e_lgammal_r.c e_powl.c \
|
2013-12-30 01:06:21 +00:00
|
|
|
e_remainderl.c e_sinhl.c e_sqrtl.c \
|
2008-07-31 22:41:26 +00:00
|
|
|
invtrig.c k_cosl.c k_sinl.c k_tanl.c \
|
2021-11-05 02:04:01 +00:00
|
|
|
s_asinhl.c s_atanl.c s_cbrtl.c s_ceill.c s_cexpl.c \
|
2021-10-26 20:53:51 +00:00
|
|
|
s_clogl.c s_cosl.c s_cospil.c s_cprojl.c \
|
2014-07-13 17:05:03 +00:00
|
|
|
s_csqrtl.c s_erfl.c s_exp2l.c s_expl.c s_floorl.c s_fmal.c \
|
2016-10-11 20:31:59 +00:00
|
|
|
s_fmaxl.c s_fminl.c s_frexpl.c s_logbl.c s_logl.c s_nanl.c \
|
|
|
|
s_nextafterl.c s_nexttoward.c s_remquol.c s_rintl.c s_roundl.c \
|
2021-10-26 20:53:51 +00:00
|
|
|
s_scalbnl.c s_sinl.c s_sincosl.c s_sinpil.c \
|
|
|
|
s_tanhl.c s_tanl.c s_tanpil.c s_truncl.c w_cabsl.c
|
2020-05-12 15:22:40 +00:00
|
|
|
# Work around this warning from gcc:
|
2019-02-01 23:15:54 +00:00
|
|
|
# lib/msun/ld80/e_powl.c:275:1: error: floating constant exceeds range of
|
|
|
|
# 'long double' [-Werror=overflow]
|
|
|
|
# if( y >= LDBL_MAX )
|
|
|
|
# See also: https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=130067
|
2020-05-12 15:22:40 +00:00
|
|
|
.if ${COMPILER_TYPE} == "gcc"
|
2019-02-01 23:15:54 +00:00
|
|
|
CFLAGS.e_powl.c+= -Wno-error=overflow
|
|
|
|
.endif
|
- Remove s_ldexpf.c (now aliased to scalbn.)
- Add nexttoward{,f,l} and nextafterl. On all platforms,
nexttowardl is an alias for nextafterl.
- Add fmal.
- Add man pages for new routines: fmal, nextafterl,
nexttoward{,f,l}, scalb{,l}nl.
Note that on platforms where long double is the same as double, we
generally just alias the double versions of the routines, since doing
so avoids extra work on the source code level and redundant code in
the binary. In particular:
ldbl53 ldbl64/113
fmal s_fma.c s_fmal.c
ldexpl s_scalbn.c s_scalbnl.c
nextafterl s_nextafter.c s_nextafterl.c
nexttoward s_nextafter.c s_nexttoward.c
nexttowardf s_nexttowardf.c s_nexttowardf.c
nexttowardl s_nextafter.c s_nextafterl.c
scalbnl s_scalbn.c s_scalbnl.c
2005-03-07 04:59:11 +00:00
|
|
|
.endif
|
2003-10-25 09:32:18 +00:00
|
|
|
|
2004-05-30 09:21:56 +00:00
|
|
|
# C99 complex functions
|
2017-02-17 08:22:32 +00:00
|
|
|
COMMON_SRCS+= catrig.c catrigf.c \
|
2013-05-30 04:49:26 +00:00
|
|
|
s_ccosh.c s_ccoshf.c s_cexp.c s_cexpf.c \
|
2011-10-17 05:41:03 +00:00
|
|
|
s_cimag.c s_cimagf.c s_cimagl.c \
|
2011-03-07 03:09:24 +00:00
|
|
|
s_conj.c s_conjf.c s_conjl.c \
|
2018-07-15 00:23:10 +00:00
|
|
|
s_cpow.c s_cpowf.c s_cpowl.c \
|
2011-10-17 05:41:03 +00:00
|
|
|
s_cproj.c s_cprojf.c s_creal.c s_crealf.c s_creall.c \
|
|
|
|
s_csinh.c s_csinhf.c s_ctanh.c s_ctanhf.c
|
2004-05-30 09:21:56 +00:00
|
|
|
|
1994-08-19 09:40:01 +00:00
|
|
|
# FreeBSD's C library supplies these functions:
|
|
|
|
#COMMON_SRCS+= s_fabs.c s_frexp.c s_isnan.c s_ldexp.c s_modf.c
|
|
|
|
|
2003-07-23 04:53:47 +00:00
|
|
|
# Exclude the generic versions of what we provide in the MD area.
|
2004-06-06 10:06:57 +00:00
|
|
|
.if defined(ARCH_SRCS)
|
1995-03-08 01:41:40 +00:00
|
|
|
.for i in ${ARCH_SRCS}
|
2003-07-23 04:53:47 +00:00
|
|
|
COMMON_SRCS:= ${COMMON_SRCS:N${i:R}.c}
|
1995-03-08 01:41:40 +00:00
|
|
|
.endfor
|
2003-07-23 04:53:47 +00:00
|
|
|
.endif
|
|
|
|
|
|
|
|
SRCS= ${COMMON_SRCS} ${ARCH_SRCS}
|
1994-08-19 09:40:01 +00:00
|
|
|
|
2012-01-16 04:09:17 +00:00
|
|
|
INCS+= fenv.h math.h
|
2002-05-12 16:01:00 +00:00
|
|
|
|
2011-10-17 05:41:03 +00:00
|
|
|
MAN= acos.3 acosh.3 asin.3 asinh.3 atan.3 atan2.3 atanh.3 \
|
2013-05-30 04:49:26 +00:00
|
|
|
ceil.3 cacos.3 ccos.3 ccosh.3 cexp.3 \
|
[LIBM] implementations of sinpi[fl], cospi[fl], and tanpi[fl]
Both IEEE-754 2008 and ISO/IEC TS 18661-4 define the half-cycle
trignometric functions cospi, sinpi, and tanpi. The attached
patch implements cospi[fl], sinpi[fl], and tanpi[fl]. Limited
testing on the cospi and sinpi reveal a max ULP less than 0.89;
while tanpi is more problematic with a max ULP less than 2.01
in the interval [0,0.5]. The algorithms used in these functions
are documented in {ks}_cospi.c, {ks}_sinpi.c, and s_tanpi.c.
Note. I no longer have access to a system with ld128 and
adequate support to compile and test the ld128 implementations
of these functions. Given the almost complete lack of input from
others on improvements to libm, I doubt that anyone cares. If
someone does care, the ld128 files contain a number of FIXME comments,
and in particular, while the polynomial coefficients are given
I did not update the polynomial algorithms to properly use the
coefficients.
PR: 218514
MFC after: 2 weeks
2021-10-25 13:13:52 +00:00
|
|
|
cimag.3 clog.3 copysign.3 cos.3 cosh.3 cospi.3 \
|
|
|
|
cpow.3 csqrt.3 erf.3 \
|
2018-05-13 09:54:34 +00:00
|
|
|
exp.3 fabs.3 fdim.3 \
|
2005-03-16 19:04:28 +00:00
|
|
|
feclearexcept.3 feenableexcept.3 fegetenv.3 \
|
|
|
|
fegetround.3 fenv.3 floor.3 \
|
2005-01-27 05:46:17 +00:00
|
|
|
fma.3 fmax.3 fmod.3 hypot.3 ieee.3 ieee_test.3 ilogb.3 j0.3 \
|
2008-01-18 21:43:10 +00:00
|
|
|
lgamma.3 log.3 lrint.3 lround.3 math.3 nan.3 \
|
|
|
|
nextafter.3 remainder.3 rint.3 \
|
2017-05-28 06:13:38 +00:00
|
|
|
round.3 scalbn.3 signbit.3 sin.3 sincos.3 \
|
[LIBM] implementations of sinpi[fl], cospi[fl], and tanpi[fl]
Both IEEE-754 2008 and ISO/IEC TS 18661-4 define the half-cycle
trignometric functions cospi, sinpi, and tanpi. The attached
patch implements cospi[fl], sinpi[fl], and tanpi[fl]. Limited
testing on the cospi and sinpi reveal a max ULP less than 0.89;
while tanpi is more problematic with a max ULP less than 2.01
in the interval [0,0.5]. The algorithms used in these functions
are documented in {ks}_cospi.c, {ks}_sinpi.c, and s_tanpi.c.
Note. I no longer have access to a system with ld128 and
adequate support to compile and test the ld128 implementations
of these functions. Given the almost complete lack of input from
others on improvements to libm, I doubt that anyone cares. If
someone does care, the ld128 files contain a number of FIXME comments,
and in particular, while the polynomial coefficients are given
I did not update the polynomial algorithms to properly use the
coefficients.
PR: 218514
MFC after: 2 weeks
2021-10-25 13:13:52 +00:00
|
|
|
sinh.3 sinpi.3 sqrt.3 tan.3 tanh.3 tanpi.3 trunc.3 \
|
2011-02-20 05:29:00 +00:00
|
|
|
complex.3
|
1994-08-19 09:40:01 +00:00
|
|
|
|
2008-07-31 22:41:26 +00:00
|
|
|
MLINKS+=acos.3 acosf.3 acos.3 acosl.3
|
2013-06-10 06:04:58 +00:00
|
|
|
MLINKS+=acosh.3 acoshf.3 acosh.3 acoshl.3
|
2008-07-31 22:41:26 +00:00
|
|
|
MLINKS+=asin.3 asinf.3 asin.3 asinl.3
|
2013-06-10 06:04:58 +00:00
|
|
|
MLINKS+=asinh.3 asinhf.3 asinh.3 asinhl.3
|
2008-07-31 22:41:26 +00:00
|
|
|
MLINKS+=atan.3 atanf.3 atan.3 atanl.3
|
2013-06-10 06:04:58 +00:00
|
|
|
MLINKS+=atanh.3 atanhf.3 atanh.3 atanhl.3
|
2008-07-31 22:41:26 +00:00
|
|
|
MLINKS+=atan2.3 atan2f.3 atan2.3 atan2l.3 \
|
|
|
|
atan2.3 carg.3 atan2.3 cargf.3 atan2.3 cargl.3
|
2017-02-17 08:22:32 +00:00
|
|
|
MLINKS+=cacos.3 cacosf.3 cacos.3 cacosl.3 \
|
|
|
|
cacos.3 cacosh.3 cacos.3 cacoshf.3 cacos.3 cacoshl.3 \
|
|
|
|
cacos.3 casin.3 cacos.3 casinf.3 cacos.3 casinl.3 \
|
|
|
|
cacos.3 casinh.3 cacos.3 casinhf.3 cacos.3 casinhl.3 \
|
|
|
|
cacos.3 catan.3 cacos.3 catanf.3 cacos.3 catanl.3 \
|
|
|
|
cacos.3 catanh.3 cacos.3 catanhf.3 cacos.3 catanhl.3
|
2011-10-17 05:41:03 +00:00
|
|
|
MLINKS+=ccos.3 ccosf.3 ccos.3 csin.3 ccos.3 csinf.3 ccos.3 ctan.3 ccos.3 ctanf.3
|
|
|
|
MLINKS+=ccosh.3 ccoshf.3 ccosh.3 csinh.3 ccosh.3 csinhf.3 \
|
|
|
|
ccosh.3 ctanh.3 ccosh.3 ctanhf.3
|
2005-01-13 09:11:41 +00:00
|
|
|
MLINKS+=ceil.3 ceilf.3 ceil.3 ceill.3
|
2021-11-05 02:04:01 +00:00
|
|
|
MLINKS+=cexp.3 cexpf.3 cexp.3 cexpl.3
|
2004-08-07 23:03:36 +00:00
|
|
|
MLINKS+=cimag.3 cimagf.3 cimag.3 cimagl.3 \
|
|
|
|
cimag.3 conj.3 cimag.3 conjf.3 cimag.3 conjl.3 \
|
2008-08-07 15:07:48 +00:00
|
|
|
cimag.3 cproj.3 cimag.3 cprojf.3 cimag.3 cprojl.3 \
|
2004-08-07 23:03:36 +00:00
|
|
|
cimag.3 creal.3 cimag.3 crealf.3 cimag.3 creall.3
|
2018-05-13 09:54:34 +00:00
|
|
|
MLINKS+=clog.3 clogf.3 clog.3 clogl.3
|
2005-01-27 05:46:17 +00:00
|
|
|
MLINKS+=copysign.3 copysignf.3 copysign.3 copysignl.3
|
2008-02-17 07:33:51 +00:00
|
|
|
MLINKS+=cos.3 cosf.3 cos.3 cosl.3
|
2013-12-30 01:06:21 +00:00
|
|
|
MLINKS+=cosh.3 coshf.3 cosh.3 coshl.3
|
[LIBM] implementations of sinpi[fl], cospi[fl], and tanpi[fl]
Both IEEE-754 2008 and ISO/IEC TS 18661-4 define the half-cycle
trignometric functions cospi, sinpi, and tanpi. The attached
patch implements cospi[fl], sinpi[fl], and tanpi[fl]. Limited
testing on the cospi and sinpi reveal a max ULP less than 0.89;
while tanpi is more problematic with a max ULP less than 2.01
in the interval [0,0.5]. The algorithms used in these functions
are documented in {ks}_cospi.c, {ks}_sinpi.c, and s_tanpi.c.
Note. I no longer have access to a system with ld128 and
adequate support to compile and test the ld128 implementations
of these functions. Given the almost complete lack of input from
others on improvements to libm, I doubt that anyone cares. If
someone does care, the ld128 files contain a number of FIXME comments,
and in particular, while the polynomial coefficients are given
I did not update the polynomial algorithms to properly use the
coefficients.
PR: 218514
MFC after: 2 weeks
2021-10-25 13:13:52 +00:00
|
|
|
MLINKS+=cospi.3 cospif.3 cospi.3 cospil.3
|
2018-07-15 00:23:10 +00:00
|
|
|
MLINKS+=cpow.3 cpowf.3 cpow.3 cpowl.3
|
2008-03-30 20:07:15 +00:00
|
|
|
MLINKS+=csqrt.3 csqrtf.3 csqrt.3 csqrtl.3
|
2014-07-13 17:05:03 +00:00
|
|
|
MLINKS+=erf.3 erfc.3 erf.3 erff.3 erf.3 erfcf.3 erf.3 erfl.3 erf.3 erfcl.3
|
2013-06-04 05:41:38 +00:00
|
|
|
MLINKS+=exp.3 expm1.3 exp.3 expm1f.3 exp.3 expm1l.3 exp.3 pow.3 exp.3 powf.3 \
|
2015-11-09 10:40:16 +00:00
|
|
|
exp.3 powl.3 exp.3 exp2.3 exp.3 exp2f.3 exp.3 exp2l.3 exp.3 expf.3 \
|
|
|
|
exp.3 expl.3
|
2004-05-07 17:55:07 +00:00
|
|
|
MLINKS+=fabs.3 fabsf.3 fabs.3 fabsl.3
|
2004-06-30 07:04:01 +00:00
|
|
|
MLINKS+=fdim.3 fdimf.3 fdim.3 fdiml.3
|
2004-06-06 10:06:57 +00:00
|
|
|
MLINKS+=feclearexcept.3 fegetexceptflag.3 feclearexcept.3 feraiseexcept.3 \
|
|
|
|
feclearexcept.3 fesetexceptflag.3 feclearexcept.3 fetestexcept.3
|
2005-03-16 19:04:28 +00:00
|
|
|
MLINKS+=feenableexcept.3 fedisableexcept.3 feenableexcept.3 fegetexcept.3
|
2004-06-06 10:06:57 +00:00
|
|
|
MLINKS+=fegetenv.3 feholdexcept.3 fegetenv.3 fesetenv.3 \
|
|
|
|
fegetenv.3 feupdateenv.3
|
|
|
|
MLINKS+=fegetround.3 fesetround.3
|
2005-01-12 22:16:26 +00:00
|
|
|
MLINKS+=floor.3 floorf.3 floor.3 floorl.3
|
- Remove s_ldexpf.c (now aliased to scalbn.)
- Add nexttoward{,f,l} and nextafterl. On all platforms,
nexttowardl is an alias for nextafterl.
- Add fmal.
- Add man pages for new routines: fmal, nextafterl,
nexttoward{,f,l}, scalb{,l}nl.
Note that on platforms where long double is the same as double, we
generally just alias the double versions of the routines, since doing
so avoids extra work on the source code level and redundant code in
the binary. In particular:
ldbl53 ldbl64/113
fmal s_fma.c s_fmal.c
ldexpl s_scalbn.c s_scalbnl.c
nextafterl s_nextafter.c s_nextafterl.c
nexttoward s_nextafter.c s_nexttoward.c
nexttowardf s_nexttowardf.c s_nexttowardf.c
nexttowardl s_nextafter.c s_nextafterl.c
scalbnl s_scalbn.c s_scalbnl.c
2005-03-07 04:59:11 +00:00
|
|
|
MLINKS+=fma.3 fmaf.3 fma.3 fmal.3
|
2004-06-30 07:04:01 +00:00
|
|
|
MLINKS+=fmax.3 fmaxf.3 fmax.3 fmaxl.3 \
|
|
|
|
fmax.3 fmin.3 fmax.3 fminf.3 fmax.3 fminl.3
|
2008-06-19 22:39:53 +00:00
|
|
|
MLINKS+=fmod.3 fmodf.3 fmod.3 fmodl.3
|
2008-03-30 20:03:46 +00:00
|
|
|
MLINKS+=hypot.3 cabs.3 hypot.3 cabsf.3 hypot.3 cabsl.3 \
|
|
|
|
hypot.3 hypotf.3 hypot.3 hypotl.3
|
1996-02-09 00:45:45 +00:00
|
|
|
MLINKS+=ieee_test.3 scalb.3 ieee_test.3 scalbf.3
|
|
|
|
MLINKS+=ieee_test.3 significand.3 ieee_test.3 significandf.3
|
2005-11-06 12:18:27 +00:00
|
|
|
MLINKS+=ilogb.3 ilogbf.3 ilogb.3 ilogbl.3 \
|
2007-12-17 03:53:38 +00:00
|
|
|
ilogb.3 logb.3 ilogb.3 logbf.3 ilogb.3 logbl.3
|
1996-02-09 00:45:45 +00:00
|
|
|
MLINKS+=j0.3 j1.3 j0.3 jn.3 j0.3 y0.3 j0.3 y1.3 j0.3 y1f.3 j0.3 yn.3
|
|
|
|
MLINKS+=j0.3 j0f.3 j0.3 j1f.3 j0.3 jnf.3 j0.3 y0f.3 j0.3 ynf.3
|
2014-09-15 23:21:57 +00:00
|
|
|
MLINKS+=lgamma.3 gamma.3 lgamma.3 gammaf.3 \
|
|
|
|
lgamma.3 lgammaf.3 lgamma.3 lgammal.3 \
|
2008-02-18 17:27:11 +00:00
|
|
|
lgamma.3 tgamma.3 lgamma.3 tgammaf.3
|
2013-06-05 05:33:01 +00:00
|
|
|
MLINKS+=log.3 log10.3 log.3 log10f.3 log.3 log10l.3 \
|
|
|
|
log.3 log1p.3 log.3 log1pf.3 log.3 log1pl.3 \
|
|
|
|
log.3 logf.3 log.3 logl.3 \
|
2013-06-03 09:14:31 +00:00
|
|
|
log.3 log2.3 log.3 log2f.3 log.3 log2l.3
|
2008-01-14 02:12:07 +00:00
|
|
|
MLINKS+=lrint.3 llrint.3 lrint.3 llrintf.3 lrint.3 llrintl.3 \
|
|
|
|
lrint.3 lrintf.3 lrint.3 lrintl.3
|
2005-04-08 01:24:08 +00:00
|
|
|
MLINKS+=lround.3 llround.3 lround.3 llroundf.3 lround.3 llroundl.3 \
|
|
|
|
lround.3 lroundf.3 lround.3 lroundl.3
|
2007-12-16 21:19:28 +00:00
|
|
|
MLINKS+=nan.3 nanf.3 nan.3 nanl.3
|
- Remove s_ldexpf.c (now aliased to scalbn.)
- Add nexttoward{,f,l} and nextafterl. On all platforms,
nexttowardl is an alias for nextafterl.
- Add fmal.
- Add man pages for new routines: fmal, nextafterl,
nexttoward{,f,l}, scalb{,l}nl.
Note that on platforms where long double is the same as double, we
generally just alias the double versions of the routines, since doing
so avoids extra work on the source code level and redundant code in
the binary. In particular:
ldbl53 ldbl64/113
fmal s_fma.c s_fmal.c
ldexpl s_scalbn.c s_scalbnl.c
nextafterl s_nextafter.c s_nextafterl.c
nexttoward s_nextafter.c s_nexttoward.c
nexttowardf s_nexttowardf.c s_nexttowardf.c
nexttowardl s_nextafter.c s_nextafterl.c
scalbnl s_scalbn.c s_scalbnl.c
2005-03-07 04:59:11 +00:00
|
|
|
MLINKS+=nextafter.3 nextafterf.3 nextafter.3 nextafterl.3
|
|
|
|
MLINKS+=nextafter.3 nexttoward.3 nextafter.3 nexttowardf.3
|
|
|
|
MLINKS+=nextafter.3 nexttowardl.3
|
2008-03-30 20:48:02 +00:00
|
|
|
MLINKS+=remainder.3 remainderf.3 remainder.3 remainderl.3 \
|
|
|
|
remainder.3 remquo.3 remainder.3 remquof.3 remainder.3 remquol.3
|
2008-01-14 02:12:07 +00:00
|
|
|
MLINKS+=rint.3 rintf.3 rint.3 rintl.3 \
|
|
|
|
rint.3 nearbyint.3 rint.3 nearbyintf.3 rint.3 nearbyintl.3
|
2005-04-08 01:24:08 +00:00
|
|
|
MLINKS+=round.3 roundf.3 round.3 roundl.3
|
- Remove s_ldexpf.c (now aliased to scalbn.)
- Add nexttoward{,f,l} and nextafterl. On all platforms,
nexttowardl is an alias for nextafterl.
- Add fmal.
- Add man pages for new routines: fmal, nextafterl,
nexttoward{,f,l}, scalb{,l}nl.
Note that on platforms where long double is the same as double, we
generally just alias the double versions of the routines, since doing
so avoids extra work on the source code level and redundant code in
the binary. In particular:
ldbl53 ldbl64/113
fmal s_fma.c s_fmal.c
ldexpl s_scalbn.c s_scalbnl.c
nextafterl s_nextafter.c s_nextafterl.c
nexttoward s_nextafter.c s_nexttoward.c
nexttowardf s_nexttowardf.c s_nexttowardf.c
nexttowardl s_nextafter.c s_nextafterl.c
scalbnl s_scalbn.c s_scalbnl.c
2005-03-07 04:59:11 +00:00
|
|
|
MLINKS+=scalbn.3 scalbln.3 scalbn.3 scalblnf.3 scalbn.3 scalblnl.3
|
|
|
|
MLINKS+=scalbn.3 scalbnf.3 scalbn.3 scalbnl.3
|
2008-02-17 07:33:51 +00:00
|
|
|
MLINKS+=sin.3 sinf.3 sin.3 sinl.3
|
2017-05-28 06:13:38 +00:00
|
|
|
MLINKS+=sincos.3 sincosf.3 sin.3 sincosl.3
|
2013-12-30 01:06:21 +00:00
|
|
|
MLINKS+=sinh.3 sinhf.3 sinh.3 sinhl.3
|
[LIBM] implementations of sinpi[fl], cospi[fl], and tanpi[fl]
Both IEEE-754 2008 and ISO/IEC TS 18661-4 define the half-cycle
trignometric functions cospi, sinpi, and tanpi. The attached
patch implements cospi[fl], sinpi[fl], and tanpi[fl]. Limited
testing on the cospi and sinpi reveal a max ULP less than 0.89;
while tanpi is more problematic with a max ULP less than 2.01
in the interval [0,0.5]. The algorithms used in these functions
are documented in {ks}_cospi.c, {ks}_sinpi.c, and s_tanpi.c.
Note. I no longer have access to a system with ld128 and
adequate support to compile and test the ld128 implementations
of these functions. Given the almost complete lack of input from
others on improvements to libm, I doubt that anyone cares. If
someone does care, the ld128 files contain a number of FIXME comments,
and in particular, while the polynomial coefficients are given
I did not update the polynomial algorithms to properly use the
coefficients.
PR: 218514
MFC after: 2 weeks
2021-10-25 13:13:52 +00:00
|
|
|
MLINKS+=sinpi.3 sinpif.3 sinpi.3 sinpil.3
|
2011-03-12 16:50:39 +00:00
|
|
|
MLINKS+=sqrt.3 cbrt.3 sqrt.3 cbrtf.3 sqrt.3 cbrtl.3 sqrt.3 sqrtf.3 \
|
|
|
|
sqrt.3 sqrtl.3
|
2008-02-17 07:33:51 +00:00
|
|
|
MLINKS+=tan.3 tanf.3 tan.3 tanl.3
|
2013-12-30 01:06:21 +00:00
|
|
|
MLINKS+=tanh.3 tanhf.3 tanh.3 tanhl.3
|
[LIBM] implementations of sinpi[fl], cospi[fl], and tanpi[fl]
Both IEEE-754 2008 and ISO/IEC TS 18661-4 define the half-cycle
trignometric functions cospi, sinpi, and tanpi. The attached
patch implements cospi[fl], sinpi[fl], and tanpi[fl]. Limited
testing on the cospi and sinpi reveal a max ULP less than 0.89;
while tanpi is more problematic with a max ULP less than 2.01
in the interval [0,0.5]. The algorithms used in these functions
are documented in {ks}_cospi.c, {ks}_sinpi.c, and s_tanpi.c.
Note. I no longer have access to a system with ld128 and
adequate support to compile and test the ld128 implementations
of these functions. Given the almost complete lack of input from
others on improvements to libm, I doubt that anyone cares. If
someone does care, the ld128 files contain a number of FIXME comments,
and in particular, while the polynomial coefficients are given
I did not update the polynomial algorithms to properly use the
coefficients.
PR: 218514
MFC after: 2 weeks
2021-10-25 13:13:52 +00:00
|
|
|
MLINKS+=tanpi.3 tanpif.3 tanpi.3 tanpil.3
|
2005-04-17 19:57:52 +00:00
|
|
|
MLINKS+=trunc.3 truncf.3 trunc.3 truncl.3
|
1994-08-19 09:40:01 +00:00
|
|
|
|
2014-11-17 09:19:09 +00:00
|
|
|
.include <src.opts.mk>
|
|
|
|
|
2017-08-02 08:50:42 +00:00
|
|
|
HAS_TESTS=
|
2017-08-02 08:35:51 +00:00
|
|
|
SUBDIR.${MK_TESTS}+= tests
|
2014-11-17 09:19:09 +00:00
|
|
|
|
2021-04-15 15:27:52 +00:00
|
|
|
.include <bsd.compiler.mk>
|
|
|
|
.if ${COMPILER_TYPE} == "clang" && ${COMPILER_VERSION} >= 120000
|
|
|
|
# Silence '#pragma FENV_ACCESS' is not supported on this target - ignored
|
|
|
|
CWARNFLAGS+= -Wno-error=ignored-pragmas
|
|
|
|
.endif
|
|
|
|
|
1994-08-19 09:40:01 +00:00
|
|
|
.include <bsd.lib.mk>
|