From 35920e96a1bd6dcc5c803582ce9568c2f0a4fdc1 Mon Sep 17 00:00:00 2001 From: rsc Date: Thu, 10 May 2007 04:18:22 +0000 Subject: fix nan64 --- src/lib9/fmt/nan64.c | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/src/lib9/fmt/nan64.c b/src/lib9/fmt/nan64.c index 3a1f2111..7d719157 100644 --- a/src/lib9/fmt/nan64.c +++ b/src/lib9/fmt/nan64.c @@ -26,11 +26,18 @@ __NaN(void) int __isNaN(double d) { + /* + * Used to just say x = *(uvlong*)&d, + * but gcc miscompiles that! + */ + union { + uvlong i; + double f; + } u; uvlong x; - double *p; - - p = &d; - x = *(uvlong*)p; + + u.f = d; + x = u.i; /* IEEE 754: exponent bits 0x7FF and non-zero mantissa */ return (x&uvinf) == uvinf && (x&~uvneginf) != 0; } -- cgit v1.2.3