Apply an atrocious hack to libm's pow() implementation, to work around

LLVM PR 24343.  This fixes the graphics/png build on i386, which
otherwise failed during its tests because of floating point exceptions,
leading to >5000 skipped other ports.
This commit is contained in:
Dimitry Andric 2015-08-07 20:13:04 +00:00
parent 5f78ec1c9f
commit a9b1b57bd5
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/projects/clang-trunk/; revision=286421

View File

@ -162,7 +162,13 @@ __ieee754_pow(double x, double y)
if(lx==0) {
if(ix==0x7ff00000||ix==0||ix==0x3ff00000){
z = ax; /*x is +-0,+-inf,+-1*/
if(hy<0) z = one/z; /* z = (1/|x|) */
if(hy<0) {
#ifdef __i386__
/* XXX: Work around llvm PR 24343: */
__compiler_membar();
#endif
z = one/z; /* z = (1/|x|) */
}
if(hx<0) {
if(((ix-0x3ff00000)|yisint)==0) {
z = (z-z)/(z-z); /* (-1)**non-int is NaN */