Add again little and big endian patterns for NaN.

This commit is contained in:
kai
2014-01-04 17:48:36 +01:00
parent 27a9ede3fd
commit 9e33ec5433

View File

@@ -666,27 +666,61 @@ static PortInitializer portinitializer;
PortInitializer::PortInitializer()
{
#if IN_LLVM
union
{ unsigned int ui[2];
double d;
} nan =
#if __LITTLE_ENDIAN__
{{ 0, 0x7FF80000 }};
#else
{{ 0x7FF80000, 0 }};
#endif
#else
union
{ unsigned int ui[2];
double d;
} nan = {{ 0, 0x7FF80000 }};
#endif
Port::nan = nan.d;
assert(!signbit(Port::nan));
#if IN_LLVM
union
{ unsigned int ui[4];
longdouble ld;
} ldbl_nan =
#if __LITTLE_ENDIAN__
{{ 0, 0xC0000000, 0x7FFF, 0}};
#else
{{ 0, 0x7FFF, 0xC0000000, 0}};
#endif
#else
union
{ unsigned int ui[4];
longdouble ld;
} ldbl_nan = {{ 0, 0xC0000000, 0x7FFF, 0}};
#endif
Port::ldbl_nan = ldbl_nan.ld;
assert(!signbit(Port::ldbl_nan));
#if IN_LLVM
union
{ unsigned int ui[4];
longdouble ld;
} snan =
#if __LITTLE_ENDIAN__
{{ 0, 0xA0000000, 0x7FFF, 0 }};
#else
{{ 0, 0x7FFF, 0xA0000000, 0 }};
#endif
#else
union
{ unsigned int ui[4];
longdouble ld;
} snan = {{ 0, 0xA0000000, 0x7FFF, 0 }};
#endif
Port::snan = snan.ld;
#if __FreeBSD__ && __i386__