From bb0fb64986eca97d042a7e04412c71360889678b Mon Sep 17 00:00:00 2001 From: asac Date: Wed, 21 Feb 2007 03:34:16 +0100 Subject: [PATCH] bz289394-align-double-on-ia64-deb-bug-303518 + align double on ia64 ... deb bug 303518 --- extensions/transformiix/source/base/Double.cpp | 35 +++++++++++------------ 1 files changed, 17 insertions(+), 18 deletions(-) diff --git a/extensions/transformiix/source/base/Double.cpp b/extensions/transformiix/source/base/Double.cpp index e8a2910..2ddcb93 100644 --- a/extensions/transformiix/source/base/Double.cpp +++ b/extensions/transformiix/source/base/Double.cpp @@ -75,14 +75,7 @@ fp_except_t oldmask = fpsetmask(~allmask); #define CPU_IS_ARM #endif -#if (__GNUC__ == 2 && __GNUC_MINOR__ > 95) || __GNUC__ > 2 -/** - * This version of the macros is safe for the alias optimizations - * that gcc does, but uses gcc-specific extensions. - */ - typedef union txdpun { - PRFloat64 d; struct { #if defined(IS_LITTLE_ENDIAN) && !defined(CPU_IS_ARM) PRUint32 lo, hi; @@ -90,8 +83,14 @@ typedef union txdpun { PRUint32 hi, lo; #endif } s; + PRFloat64 d; } txdpun; +#if (__GNUC__ == 2 && __GNUC_MINOR__ > 95) || __GNUC__ > 2 +/** + * This version of the macros is safe for the alias optimizations + * that gcc does, but uses gcc-specific extensions. + */ #define TX_DOUBLE_HI32(x) (__extension__ ({ txdpun u; u.d = (x); u.s.hi; })) #define TX_DOUBLE_LO32(x) (__extension__ ({ txdpun u; u.d = (x); u.s.lo; })) @@ -117,20 +116,20 @@ typedef union txdpun { //-- Initialize Double related constants #ifdef IS_BIG_ENDIAN -const PRUint32 nanMask[2] = {TX_DOUBLE_HI32_EXPMASK | TX_DOUBLE_HI32_MANTMASK, - 0xffffffff}; -const PRUint32 infMask[2] = {TX_DOUBLE_HI32_EXPMASK, 0}; -const PRUint32 negInfMask[2] = {TX_DOUBLE_HI32_EXPMASK | TX_DOUBLE_HI32_SIGNBIT, 0}; +const txdpun nanMask = {TX_DOUBLE_HI32_EXPMASK | TX_DOUBLE_HI32_MANTMASK, + 0xffffffff}; +const txdpun infMask = {TX_DOUBLE_HI32_EXPMASK, 0}; +const txdpun negInfMask = {TX_DOUBLE_HI32_EXPMASK | TX_DOUBLE_HI32_SIGNBIT, 0}; #else -const PRUint32 nanMask[2] = {0xffffffff, - TX_DOUBLE_HI32_EXPMASK | TX_DOUBLE_HI32_MANTMASK}; -const PRUint32 infMask[2] = {0, TX_DOUBLE_HI32_EXPMASK}; -const PRUint32 negInfMask[2] = {0, TX_DOUBLE_HI32_EXPMASK | TX_DOUBLE_HI32_SIGNBIT}; +const txdpun nanMask = {0xffffffff, + TX_DOUBLE_HI32_EXPMASK | TX_DOUBLE_HI32_MANTMASK}; +const txdpun infMask = {0, TX_DOUBLE_HI32_EXPMASK}; +const txdpun negInfMask = {0, TX_DOUBLE_HI32_EXPMASK | TX_DOUBLE_HI32_SIGNBIT}; #endif -const double Double::NaN = *((double*)nanMask); -const double Double::POSITIVE_INFINITY = *((double*)infMask); -const double Double::NEGATIVE_INFINITY = *((double*)negInfMask); +const double Double::NaN = nanMask.d; +const double Double::POSITIVE_INFINITY = infMask.d; +const double Double::NEGATIVE_INFINITY = negInfMask.d; /* * Determines whether the given double represents positive or negative -- 1.4.4.4