aboutsummaryrefslogtreecommitdiffstats
path: root/www/firefox3-devel/files/patch-Double.cpp
blob: 64d920f548e57d68ba5d1ee049331734c465b622 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
$FreeBSD$
  $MCom: ports/www/firefox-devel/files/patch-Double.cpp,v 1.6 2005/07/14 05:25:43 ahze Exp $

--- extensions/transformiix/source/base/Double.cpp.orig Thu Jan 30 09:26:46 2003
+++ extensions/transformiix/source/base/Double.cpp  Sun Nov 16 01:46:42 2003
@@ -51,10 +51,10 @@
 //A trick to handle IEEE floating point exceptions on FreeBSD - E.D.
 #ifdef __FreeBSD__
 #include <ieeefp.h>
-#ifdef __alpha__
-fp_except_t allmask = FP_X_INV|FP_X_OFL|FP_X_UFL|FP_X_DZ|FP_X_IMP;
-#else
+#if defined(__i386__)
 fp_except_t allmask = FP_X_INV|FP_X_OFL|FP_X_UFL|FP_X_DZ|FP_X_IMP|FP_X_DNML;
+#else
+fp_except_t allmask = FP_X_INV|FP_X_OFL|FP_X_UFL|FP_X_DZ|FP_X_IMP;
 #endif
 fp_except_t oldmask = fpsetmask(~allmask);
 #endif
@@ -75,22 +75,31 @@
 #define TX_DOUBLE_HI32_EXPMASK   0x7ff00000
 #define TX_DOUBLE_HI32_MANTMASK  0x000fffff
 
+union ui32dun {
+    PRUint32 i[2];
+    double d;
+};
+
 //-- 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 union ui32dun nanMask =
+    {{TX_DOUBLE_HI32_EXPMASK | TX_DOUBLE_HI32_MANTMASK, 0xffffffff}};
+const union ui32dun infMask =
+    {{TX_DOUBLE_HI32_EXPMASK, 0}};
+const union ui32dun 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 union ui32dun nanMask =
+    {{0xffffffff, TX_DOUBLE_HI32_EXPMASK | TX_DOUBLE_HI32_MANTMASK}};
+const union ui32dun infMask =
+    {{0, TX_DOUBLE_HI32_EXPMASK}};
+const union ui32dun 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