diff options
author | Rich Felker <dalias@aerifal.cx> | 2012-03-16 23:58:49 -0400 |
---|---|---|
committer | Rich Felker <dalias@aerifal.cx> | 2012-03-16 23:58:49 -0400 |
commit | 2e77dc13f8bc2053642fcb136996f5f36c88c775 (patch) | |
tree | c0fc346570b01898381431c51cd7520a22c402fb /src/math/fmaf.c | |
parent | 8c071f872b2844ca297275176047f8d23eec96a7 (diff) | |
download | musl-2e77dc13f8bc2053642fcb136996f5f36c88c775.tar.gz musl-2e77dc13f8bc2053642fcb136996f5f36c88c775.tar.xz musl-2e77dc13f8bc2053642fcb136996f5f36c88c775.zip |
make fma and lrint functions build without full fenv support
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.
Diffstat (limited to 'src/math/fmaf.c')
-rw-r--r-- | src/math/fmaf.c | 2 |
1 files changed, 2 insertions, 0 deletions
diff --git a/src/math/fmaf.c b/src/math/fmaf.c index 0dccf108..cc427fb5 100644 --- a/src/math/fmaf.c +++ b/src/math/fmaf.c @@ -54,7 +54,9 @@ float fmaf(float x, float y, float z) * If result is inexact, and exactly halfway between two float values, * we need to adjust the low-order bit in the direction of the error. */ +#ifdef FE_TOWARDZERO fesetround(FE_TOWARDZERO); +#endif volatile double vxy = xy; /* XXX work around gcc CSE bug */ double adjusted_result = vxy + z; fesetround(FE_TONEAREST); |