[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
mingw isnanl-nolibm failure
From: |
Eric Blake |
Subject: |
mingw isnanl-nolibm failure |
Date: |
Tue, 4 Dec 2007 16:27:34 +0000 (UTC) |
User-agent: |
Loom/3.14 (http://gmane.org/) |
When compiling natively on mingw:
checking for float.h... yes
checking whether byte ordering is bigendian... no
checking whether isnan(long double) can be used without linking with libm... yes
checking whether isnanl works... no
checking where to find the exponent in a 'long double'... word 2 bit 0
checking where to find the exponent in a 'long double'... (cached) word 2 bit 0
and the resulting rpl_isnanl works.
But when cross-compiling:
checking for float.h... yes
checking whether isnan(long double) can be used without linking with libm... yes
checking whether isnanl works... guessing no
checking where to find the exponent in a 'long double'... unknown
checking where to find the exponent in a 'long double'... unknown
And the resulting rpl_isnanl fails on:
{ /* Pseudo-Denormal. */
static memory_long_double x =
{ LDBL80_WORDS (0x0000, 0x83333333, 0x00000000) };
ASSERT (isnanl (x.value));
}
because gcc 3.4.4 emitted code for (x == x) that returns true for pseudo-
denormal long doubles.
I'm not sure how to fix this, but it seems like rpl_isnanl needs to check for
invalid x86 long double bit patterns before falling back to ==.
--
Eric Blake
- mingw isnanl-nolibm failure,
Eric Blake <=