mirror of git://sourceware.org/git/glibc.git
math: Optimize fma call on asinpif
The fma is required only for x == +/-0x1.6371e8p-4f in FE_TOWARDZERO to provide correctly rounded results. Checked on x86_64-linux-gnu and aarch64-linux-gnu. Reviewed-by: Wilco Dijkstra <Wilco.Dijkstra@arm.com>
This commit is contained in:
parent
fab32b6526
commit
82a4f50b4e
|
|
@ -524,6 +524,8 @@ asinpi 0x1.f1c012p-1
|
||||||
asinpi -0x1.8805060cb885cp-3
|
asinpi -0x1.8805060cb885cp-3
|
||||||
asinpi 0x8.14d7e32b5c44642p-4
|
asinpi 0x8.14d7e32b5c44642p-4
|
||||||
asinpi -0xa.7ca6c96caefe80b9d757de58a578p-4
|
asinpi -0xa.7ca6c96caefe80b9d757de58a578p-4
|
||||||
|
asinpi 0x1.6371e8p-4
|
||||||
|
asinpi -0x1.6371e8p-4
|
||||||
|
|
||||||
atan inf
|
atan inf
|
||||||
atan -inf
|
atan -inf
|
||||||
|
|
|
||||||
|
|
@ -2780,3 +2780,53 @@ asinpi -0xa.7ca6c96caefe80b9d757de58a578p-4
|
||||||
= asinpi tonearest ibm128 -0xa.7ca6c96caefe80b9d757de58a8p-4 : -0x3.a3e55379cf8d0f73aac00cc2e5p-4 : inexact-ok
|
= asinpi tonearest ibm128 -0xa.7ca6c96caefe80b9d757de58a8p-4 : -0x3.a3e55379cf8d0f73aac00cc2e5p-4 : inexact-ok
|
||||||
= asinpi towardzero ibm128 -0xa.7ca6c96caefe80b9d757de58a8p-4 : -0x3.a3e55379cf8d0f73aac00cc2e4p-4 : inexact-ok
|
= asinpi towardzero ibm128 -0xa.7ca6c96caefe80b9d757de58a8p-4 : -0x3.a3e55379cf8d0f73aac00cc2e4p-4 : inexact-ok
|
||||||
= asinpi upward ibm128 -0xa.7ca6c96caefe80b9d757de58a8p-4 : -0x3.a3e55379cf8d0f73aac00cc2e4p-4 : inexact-ok
|
= asinpi upward ibm128 -0xa.7ca6c96caefe80b9d757de58a8p-4 : -0x3.a3e55379cf8d0f73aac00cc2e4p-4 : inexact-ok
|
||||||
|
asinpi 0x1.6371e8p-4
|
||||||
|
= asinpi downward binary32 0x1.6371e8p-4 : 0x7.148bcp-8 : inexact-ok
|
||||||
|
= asinpi tonearest binary32 0x1.6371e8p-4 : 0x7.148bc8p-8 : inexact-ok
|
||||||
|
= asinpi towardzero binary32 0x1.6371e8p-4 : 0x7.148bcp-8 : inexact-ok
|
||||||
|
= asinpi upward binary32 0x1.6371e8p-4 : 0x7.148bc8p-8 : inexact-ok
|
||||||
|
= asinpi downward binary64 0x1.6371e8p-4 : 0x7.148bc7fffff78p-8 : inexact-ok
|
||||||
|
= asinpi tonearest binary64 0x1.6371e8p-4 : 0x7.148bc7fffff7cp-8 : inexact-ok
|
||||||
|
= asinpi towardzero binary64 0x1.6371e8p-4 : 0x7.148bc7fffff78p-8 : inexact-ok
|
||||||
|
= asinpi upward binary64 0x1.6371e8p-4 : 0x7.148bc7fffff7cp-8 : inexact-ok
|
||||||
|
= asinpi downward intel96 0x1.6371e8p-4 : 0x7.148bc7fffff7af9p-8 : inexact-ok
|
||||||
|
= asinpi tonearest intel96 0x1.6371e8p-4 : 0x7.148bc7fffff7af98p-8 : inexact-ok
|
||||||
|
= asinpi towardzero intel96 0x1.6371e8p-4 : 0x7.148bc7fffff7af9p-8 : inexact-ok
|
||||||
|
= asinpi upward intel96 0x1.6371e8p-4 : 0x7.148bc7fffff7af98p-8 : inexact-ok
|
||||||
|
= asinpi downward m68k96 0x1.6371e8p-4 : 0x7.148bc7fffff7af9p-8 : inexact-ok
|
||||||
|
= asinpi tonearest m68k96 0x1.6371e8p-4 : 0x7.148bc7fffff7af98p-8 : inexact-ok
|
||||||
|
= asinpi towardzero m68k96 0x1.6371e8p-4 : 0x7.148bc7fffff7af9p-8 : inexact-ok
|
||||||
|
= asinpi upward m68k96 0x1.6371e8p-4 : 0x7.148bc7fffff7af98p-8 : inexact-ok
|
||||||
|
= asinpi downward binary128 0x1.6371e8p-4 : 0x7.148bc7fffff7af94c63520731f08p-8 : inexact-ok
|
||||||
|
= asinpi tonearest binary128 0x1.6371e8p-4 : 0x7.148bc7fffff7af94c63520731f08p-8 : inexact-ok
|
||||||
|
= asinpi towardzero binary128 0x1.6371e8p-4 : 0x7.148bc7fffff7af94c63520731f08p-8 : inexact-ok
|
||||||
|
= asinpi upward binary128 0x1.6371e8p-4 : 0x7.148bc7fffff7af94c63520731f0cp-8 : inexact-ok
|
||||||
|
= asinpi downward ibm128 0x1.6371e8p-4 : 0x7.148bc7fffff7af94c63520731ep-8 : inexact-ok
|
||||||
|
= asinpi tonearest ibm128 0x1.6371e8p-4 : 0x7.148bc7fffff7af94c63520732p-8 : inexact-ok
|
||||||
|
= asinpi towardzero ibm128 0x1.6371e8p-4 : 0x7.148bc7fffff7af94c63520731ep-8 : inexact-ok
|
||||||
|
= asinpi upward ibm128 0x1.6371e8p-4 : 0x7.148bc7fffff7af94c63520732p-8 : inexact-ok
|
||||||
|
asinpi -0x1.6371e8p-4
|
||||||
|
= asinpi downward binary32 -0x1.6371e8p-4 : -0x7.148bc8p-8 : inexact-ok
|
||||||
|
= asinpi tonearest binary32 -0x1.6371e8p-4 : -0x7.148bc8p-8 : inexact-ok
|
||||||
|
= asinpi towardzero binary32 -0x1.6371e8p-4 : -0x7.148bcp-8 : inexact-ok
|
||||||
|
= asinpi upward binary32 -0x1.6371e8p-4 : -0x7.148bcp-8 : inexact-ok
|
||||||
|
= asinpi downward binary64 -0x1.6371e8p-4 : -0x7.148bc7fffff7cp-8 : inexact-ok
|
||||||
|
= asinpi tonearest binary64 -0x1.6371e8p-4 : -0x7.148bc7fffff7cp-8 : inexact-ok
|
||||||
|
= asinpi towardzero binary64 -0x1.6371e8p-4 : -0x7.148bc7fffff78p-8 : inexact-ok
|
||||||
|
= asinpi upward binary64 -0x1.6371e8p-4 : -0x7.148bc7fffff78p-8 : inexact-ok
|
||||||
|
= asinpi downward intel96 -0x1.6371e8p-4 : -0x7.148bc7fffff7af98p-8 : inexact-ok
|
||||||
|
= asinpi tonearest intel96 -0x1.6371e8p-4 : -0x7.148bc7fffff7af98p-8 : inexact-ok
|
||||||
|
= asinpi towardzero intel96 -0x1.6371e8p-4 : -0x7.148bc7fffff7af9p-8 : inexact-ok
|
||||||
|
= asinpi upward intel96 -0x1.6371e8p-4 : -0x7.148bc7fffff7af9p-8 : inexact-ok
|
||||||
|
= asinpi downward m68k96 -0x1.6371e8p-4 : -0x7.148bc7fffff7af98p-8 : inexact-ok
|
||||||
|
= asinpi tonearest m68k96 -0x1.6371e8p-4 : -0x7.148bc7fffff7af98p-8 : inexact-ok
|
||||||
|
= asinpi towardzero m68k96 -0x1.6371e8p-4 : -0x7.148bc7fffff7af9p-8 : inexact-ok
|
||||||
|
= asinpi upward m68k96 -0x1.6371e8p-4 : -0x7.148bc7fffff7af9p-8 : inexact-ok
|
||||||
|
= asinpi downward binary128 -0x1.6371e8p-4 : -0x7.148bc7fffff7af94c63520731f0cp-8 : inexact-ok
|
||||||
|
= asinpi tonearest binary128 -0x1.6371e8p-4 : -0x7.148bc7fffff7af94c63520731f08p-8 : inexact-ok
|
||||||
|
= asinpi towardzero binary128 -0x1.6371e8p-4 : -0x7.148bc7fffff7af94c63520731f08p-8 : inexact-ok
|
||||||
|
= asinpi upward binary128 -0x1.6371e8p-4 : -0x7.148bc7fffff7af94c63520731f08p-8 : inexact-ok
|
||||||
|
= asinpi downward ibm128 -0x1.6371e8p-4 : -0x7.148bc7fffff7af94c63520732p-8 : inexact-ok
|
||||||
|
= asinpi tonearest ibm128 -0x1.6371e8p-4 : -0x7.148bc7fffff7af94c63520732p-8 : inexact-ok
|
||||||
|
= asinpi towardzero ibm128 -0x1.6371e8p-4 : -0x7.148bc7fffff7af94c63520731ep-8 : inexact-ok
|
||||||
|
= asinpi upward ibm128 -0x1.6371e8p-4 : -0x7.148bc7fffff7af94c63520731ep-8 : inexact-ok
|
||||||
|
|
|
||||||
|
|
@ -79,8 +79,13 @@ __asinpif (float x)
|
||||||
c0 += c2 * z2;
|
c0 += c2 * z2;
|
||||||
c4 += c6 * z2;
|
c4 += c6 * z2;
|
||||||
c0 += c4 * z4;
|
c0 += c4 * z4;
|
||||||
double r = fma (-c0, copysign (f, x), copysign (0.5, x));
|
#ifndef __FP_FAST_FMA
|
||||||
return r;
|
/* The fma is required only for x == 0x1.6371e8p-4f in FE_TOWARDZERO
|
||||||
|
to provide correctly rounded results. */
|
||||||
|
if (__glibc_likely (ax != 0x1.6371e8p-4f))
|
||||||
|
return copysign (0.5, x) - c0 * copysign (f, x);
|
||||||
|
#endif
|
||||||
|
return fma (-c0, copysign (f, x), copysign (0.5, x));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
libm_alias_float (__asinpi, asinpi)
|
libm_alias_float (__asinpi, asinpi)
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue