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
|
lib/msun: Fix tgammal(3) on IEEE 128-bit platforms
Undo the 80-bit "stub" implementation of the 128-bit long double
tgammal(3) function. The latest (as of Feb 2024) version of the
src/contrib/arm-optimised-routines library includes a standalone,
full 128-bit replacement. This needs a small bit of wrapping to
fit it in, but is otherwise a drop-in replacement.
Testing this is hard, as most maths packages blow up as soon as
their 80-bit floating-point capability is exceeded. With 128-bit
tgammal(), this is easy to do, and this is the range that needs to
be checked the most carefully. Using my copy of Maple, I was able
to check that the output was within a few ULP of the correct answer,
right up to the point of 128-bit over- and underflow. Additionally,
the results are no worse, and indeed better than the 80-bit version.
Steve Kargl sent me his libm testing code, which I used to verify
that the excpetions for certain key values were correct. Tested in
this case were +-Inf, +-NaN, +-1 and +-0.
Differential Revision: https://reviews.freebsd.org/D44168
Reviewed by: theraven, andrew, imp
2024-03-01 15:53:58 +00:00
|
|
|
CFLAGS+= -I${.CURDIR}/ld128 -I${SRCTOP}/contrib/arm-optimized-routines/math
|
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
|
|
|
|
|
2023-09-05 20:58:06 +00:00
|
|
|
# LIBCSRCDIR is defined lazily, so can't be used for exists() below
|
|
|
|
LIBC_SRCTOP=${SRCTOP}/lib/libc
|
2003-10-25 09:32:18 +00:00
|
|
|
# Location of fpmath.h and _fpmath.h
|
2023-09-05 20:58:06 +00:00
|
|
|
|
|
|
|
# Pick the current architecture directory for libc. In general, this is named
|
|
|
|
# MACHINE_CPUARCH, but some ABIs are different enough to require their own libc,
|
|
|
|
# so allow a directory named MACHINE_ARCH to override this (though treat
|
|
|
|
# powerpc64le and powerpc64 the same).
|
|
|
|
# Note: This is copied from libc/Makefile
|
|
|
|
M=${MACHINE_ARCH:S/powerpc64le/powerpc64/}
|
|
|
|
.if exists(${LIBC_SRCTOP}/${M})
|
|
|
|
LIBC_ARCH=${M}
|
2010-08-28 15:03:11 +00:00
|
|
|
.else
|
|
|
|
LIBC_ARCH=${MACHINE_CPUARCH}
|
|
|
|
.endif
|
2023-09-05 20:58:06 +00:00
|
|
|
|
|
|
|
CFLAGS+= -I${.CURDIR}/src -I${LIBC_SRCTOP}/include \
|
|
|
|
-I${LIBC_SRCTOP}/${LIBC_ARCH}
|
2006-03-27 23:59:45 +00:00
|
|
|
SYM_MAPS+= ${.CURDIR}/Symbol.map
|
|
|
|
|
2023-09-05 20:58:06 +00:00
|
|
|
VERSION_DEF= ${LIBC_SRCTOP}/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
|
|
|
|
msun: remove fabs from Symbol.map, and adjust comment
We have s_fabs.c, but fabs(3) is already provided by libc due to
historical reasons, so it is not compiled into libm. When the linker
does not use --undefined-version, this leads to a complaint about the
symbol being nonexistent, so remove it from Symbol.map.
While here, adjust the comment about some functions being supplied by
libc: while it is true that all these are indeed in libc, libm still
includes its own versions of frexp(3), isnan(3), isnanf(3), and
isnanl(3).
Reported by: Steve Kargl <sgk@troutmask.apl.washington.edu>
MFC after: 3 days
2024-01-27 21:24:38 +00:00
|
|
|
# FreeBSD's C library supplies these functions (but note we still have s_frexp.c
|
|
|
|
# and s_isnan.c enabled above, so they are duplicated):
|
1994-08-19 09:40:01 +00:00
|
|
|
#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.
|
2022-09-09 07:48:48 +00:00
|
|
|
.if defined(ARCH_SRCS) && "${MK_MACHDEP_OPTIMIZATIONS}" != no
|
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>
|