From 9e33ec54332cfa73895ab6ca248ad83c49d31bb3 Mon Sep 17 00:00:00 2001 From: kai Date: Sat, 4 Jan 2014 17:48:36 +0100 Subject: [PATCH] Add again little and big endian patterns for NaN. --- dmd2/root/port.c | 38 ++++++++++++++++++++++++++++++++++++-- 1 file changed, 36 insertions(+), 2 deletions(-) diff --git a/dmd2/root/port.c b/dmd2/root/port.c index 028ec462..f182caf1 100644 --- a/dmd2/root/port.c +++ b/dmd2/root/port.c @@ -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__