From 1716bebdaaae7247728cf84f6250a4da49cbcaba Mon Sep 17 00:00:00 2001 From: "toshok%hungry.com" Date: Wed, 16 Dec 1998 01:38:18 +0000 Subject: [PATCH] (at least for GNUC platforms) don't rely on nasty division-by-zero tricks to generate +-inf and nan. instead borrow the bitlevel twiddling javascript uses. I would imagine that this would work for all platforms that use IEEE floats (which is necessarily all platforms for which EF will work), but someone else needs to figure out if windows will work with this code. git-svn-id: svn://10.0.0.236/trunk@16481 18797224-902f-48f8-a5cc-f745e15eee43 --- mozilla/ef/Utilities/General/FloatUtils.cpp | 38 +++++++++++++-------- 1 file changed, 23 insertions(+), 15 deletions(-) diff --git a/mozilla/ef/Utilities/General/FloatUtils.cpp b/mozilla/ef/Utilities/General/FloatUtils.cpp index adbf477431c..284361aefcd 100644 --- a/mozilla/ef/Utilities/General/FloatUtils.cpp +++ b/mozilla/ef/Utilities/General/FloatUtils.cpp @@ -79,29 +79,37 @@ union dpun { Flt64 d; }; +union spun { + uint32 s; + Flt32 f; +}; + struct DummyInit { DummyInit() { - union dpun u; + union dpun du; + union spun su; -#if notyet - floatPositiveInfinity = 1.0f/fZero; - floatNegativeInfinity = -1.0f/fZero; - floatNaN = fZero/fZero; -#endif + su.s = 0x7f800000; + floatPositiveInfinity = su.f; - u.s.hi = DOUBLE_HI32_EXPMASK; - u.s.lo = 0x00000000; - doublePositiveInfinity = u.d; + du.s.hi = DOUBLE_HI32_EXPMASK; + du.s.lo = 0x00000000; + doublePositiveInfinity = du.d; + + su.s = 0xff800000; + floatNegativeInfinity = su.f; - u.s.hi = DOUBLE_HI32_SIGNBIT | DOUBLE_HI32_EXPMASK; - u.s.lo = 0x00000000; - doubleNegativeInfinity = u.d; + du.s.hi = DOUBLE_HI32_SIGNBIT | DOUBLE_HI32_EXPMASK; + du.s.lo = 0x00000000; + doubleNegativeInfinity = du.d; + su.s = 0x7f900000; + floatNaN = su.f; - u.s.hi = DOUBLE_HI32_EXPMASK | DOUBLE_HI32_MANTMASK; - u.s.lo = 0xffffffff; - doubleNaN = u.d; + du.s.hi = DOUBLE_HI32_EXPMASK | DOUBLE_HI32_MANTMASK; + du.s.lo = 0xffffffff; + doubleNaN = du.d; } };