musl/src/math/lrint.c, branch master musl - an implementation of the standard library for Linux-based systems math: optimize lrint on 32bit targets 2019年09月27日T15:18:59+00:00 Szabolcs Nagy nsz@port70.net 2019年09月16日T20:33:11+00:00 ca577951138127dcf4190a2eb3c7148b2ad6d779 lrint in (LONG_MAX, 1/DBL_EPSILON) and in (-1/DBL_EPSILON, LONG_MIN) is not trivial: rounding to int may be inexact, but the conversion to int may overflow and then the inexact flag must not be raised. (the overflow threshold is rounding mode dependent). this matters on 32bit targets (without single instruction lrint or rint), so the common case (when there is no overflow) is optimized by inlining the lrint logic, otherwise the old code is kept as a fallback. on my laptop an i486 lrint call is asm:10ns, old c:30ns, new c:21ns on a smaller arm core: old c:71ns, new c:34ns on a bigger arm core: old c:27ns, new c:19ns
lrint in (LONG_MAX, 1/DBL_EPSILON) and in (-1/DBL_EPSILON, LONG_MIN)
is not trivial: rounding to int may be inexact, but the conversion to
int may overflow and then the inexact flag must not be raised. (the
overflow threshold is rounding mode dependent).
this matters on 32bit targets (without single instruction lrint or
rint), so the common case (when there is no overflow) is optimized by
inlining the lrint logic, otherwise the old code is kept as a fallback.
on my laptop an i486 lrint call is asm:10ns, old c:30ns, new c:21ns
on a smaller arm core: old c:71ns, new c:34ns
on a bigger arm core: old c:27ns, new c:19ns
math: use '#pragma STDC FENV_ACCESS ON' when fenv is accessed 2012年11月13日T12:34:45+00:00 Szabolcs Nagy nsz@port70.net 2012年11月13日T12:34:45+00:00 033a9d6ad2a65ac03156b179e7c6101d2e72c4c0
make lrint and llrint functions work without fenv support 2012年03月18日T19:40:43+00:00 nsz nsz@port70.net 2012年03月18日T19:40:43+00:00 65db00983f3fa5449f20f2694477f9d5116f6ea5
faster lrint and llrint functions 2012年03月18日T18:27:39+00:00 nsz nsz@port70.net 2012年03月18日T18:27:39+00:00 9b6899f2c5cec70af6cea80ead7ba98fd2366ce9 A faster workaround for spurious inexact exceptions when the result cannot be represented. The old code actually could be wrong, because gcc reordered the integer conversion and the exception check.
A faster workaround for spurious inexact exceptions
when the result cannot be represented. The old code
actually could be wrong, because gcc reordered the
integer conversion and the exception check.
make fma and lrint functions build without full fenv support 2012年03月17日T03:58:49+00:00 Rich Felker dalias@aerifal.cx 2012年03月17日T03:58:49+00:00 2e77dc13f8bc2053642fcb136996f5f36c88c775 this is necessary to support archs where fenv is incomplete or unavailable (presently arm). fma, fmal, and the lrint family should work perfectly fine with this change; fmaf is slightly broken with respect to rounding as it depends on non-default rounding modes to do its work.
this is necessary to support archs where fenv is incomplete or
unavailable (presently arm). fma, fmal, and the lrint family should
work perfectly fine with this change; fmaf is slightly broken with
respect to rounding as it depends on non-default rounding modes to do
its work.
first commit of the new libm! 2012年03月13日T05:17:53+00:00 Rich Felker dalias@aerifal.cx 2012年03月13日T05:17:53+00:00 b69f695acedd4ce2798ef9ea28d834ceccc789bd thanks to the hard work of Szabolcs Nagy (nsz), identifying the best (from correctness and license standpoint) implementations from freebsd and openbsd and cleaning them up! musl should now fully support c99 float and long double math functions, and has near-complete complex math support. tgmath should also work (fully on gcc-compatible compilers, and mostly on any c99 compiler). based largely on commit 0376d44a890fea261506f1fc63833e7a686dca19 from nsz's libm git repo, with some additions (dummy versions of a few missing long double complex functions, etc.) by me. various cleanups still need to be made, including re-adding (if they're correct) some asm functions that were dropped.
thanks to the hard work of Szabolcs Nagy (nsz), identifying the best
(from correctness and license standpoint) implementations from freebsd
and openbsd and cleaning them up! musl should now fully support c99
float and long double math functions, and has near-complete complex
math support. tgmath should also work (fully on gcc-compatible
compilers, and mostly on any c99 compiler).
based largely on commit 0376d44a890fea261506f1fc63833e7a686dca19 from
nsz's libm git repo, with some additions (dummy versions of a few
missing long double complex functions, etc.) by me.
various cleanups still need to be made, including re-adding (if
they're correct) some asm functions that were dropped.

AltStyle によって変換されたページ (->オリジナル) /