tfix nan64 - plan9port - [fork] Plan 9 from user space (HTM) git clone git://src.adamsgaard.dk/plan9port (DIR) Log (DIR) Files (DIR) Refs (DIR) README (DIR) LICENSE --- (DIR) commit 35920e96a1bd6dcc5c803582ce9568c2f0a4fdc1 (DIR) parent e54f9a4ad2f163f9455f3de4b3e5574884391790 (HTM) Author: rsc <devnull@localhost> Date: Thu, 10 May 2007 04:18:22 +0000 fix nan64 Diffstat: M src/lib9/fmt/nan64.c | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) --- (DIR) diff --git a/src/lib9/fmt/nan64.c b/src/lib9/fmt/nan64.c t@@ -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; }