From 3dc191b56de30fd9d9042742178434f086afb91c Mon Sep 17 00:00:00 2001 From: Mike Hommey Date: Mon, 11 Jul 2011 07:57:35 +0200 Subject: [PATCH] Bug 654664 - Optimize JSDOUBLE_IS_NEGZERO after bug 640494. r=jimb --- js/src/jsvalue.h | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/js/src/jsvalue.h b/js/src/jsvalue.h index ebe6cc987779..75064bd38670 100644 --- a/js/src/jsvalue.h +++ b/js/src/jsvalue.h @@ -92,16 +92,25 @@ #define JSDOUBLE_SIGNBIT (((uint64) 1) << 63) #define JSDOUBLE_EXPMASK (((uint64) 0x7ff) << 52) #define JSDOUBLE_MANTMASK ((((uint64) 1) << 52) - 1) +#define JSDOUBLE_HI32_SIGNBIT 0x80000000 static JS_ALWAYS_INLINE JSBool JSDOUBLE_IS_NEGZERO(jsdouble d) { + if (d != 0) + return false; union { + struct { +#if defined(IS_LITTLE_ENDIAN) && !defined(FPU_IS_ARM_FPA) + uint32 lo, hi; +#else + uint32 hi, lo; +#endif + } s; jsdouble d; - uint64 bits; } x; x.d = d; - return x.bits == JSDOUBLE_SIGNBIT; + return (x.s.hi & JSDOUBLE_HI32_SIGNBIT) != 0; } static inline bool