summaryrefslogtreecommitdiffstats
path: root/generic/tclStrToD.c
diff options
context:
space:
mode:
authorKevin B Kenny <kennykb@acm.org>2005-05-10 20:17:28 (GMT)
committerKevin B Kenny <kennykb@acm.org>2005-05-10 20:17:28 (GMT)
commit2bfc68501866a3efdbc3da722c3968f8ce0004ec (patch)
tree44715e3214b51e3cda135dcf59337464d7960aa1 /generic/tclStrToD.c
parent1fa3f8714cf2fac0c01da703897397454a410d9b (diff)
downloadtcl-2bfc68501866a3efdbc3da722c3968f8ce0004ec.zip
tcl-2bfc68501866a3efdbc3da722c3968f8ce0004ec.tar.gz
tcl-2bfc68501866a3efdbc3da722c3968f8ce0004ec.tar.bz2
Fixes for C++-style comment and bad NaN on PA-RISC
Diffstat (limited to 'generic/tclStrToD.c')
-rwxr-xr-xgeneric/tclStrToD.c19
1 files changed, 16 insertions, 3 deletions
diff --git a/generic/tclStrToD.c b/generic/tclStrToD.c
index 2d622a7..feb0278 100755
--- a/generic/tclStrToD.c
+++ b/generic/tclStrToD.c
@@ -15,7 +15,7 @@
* See the file "license.terms" for information on usage and redistribution
* of this file, and for a DISCLAIMER OF ALL WARRANTIES.
*
- * RCS: @(#) $Id: tclStrToD.c,v 1.2 2005/05/10 18:34:49 kennykb Exp $
+ * RCS: @(#) $Id: tclStrToD.c,v 1.3 2005/05/10 20:17:42 kennykb Exp $
*
*----------------------------------------------------------------------
*/
@@ -60,6 +60,19 @@ typedef unsigned int fpu_control_t __attribute__ ((__mode__ (__HI__)));
#define _FPU_SETCW(cw) __asm__ ("fldcw %0" : : "m" (*&cw))
#endif
+/*
+ * HP's PA_RISC architecture uses 7ff4000000000000 to represent a
+ * quiet NaN. Everyone else uses 7ff8000000000000. (Why, HP, why?)
+ */
+
+#ifdef __hppa
+# define NAN_START 0x7ff4
+# define NAN_MASK (((Tcl_WideUInt) 1) << 50)
+#else
+# define NAN_START 0x7ff8
+# define NAN_MASK (((Tcl_WideUInt) 1) << 51)
+#endif
+
/* The powers of ten that can be represented exactly as IEEE754 doubles. */
#define MAXPOW 22
@@ -762,7 +775,7 @@ ParseNaN( int signum, /* Flag == 1 if minus sign has been
} else if ( c >= 'a' && c <= 'f' ) {
c = c - 'a' + 10;
} else {
- theNaN.iv = ( ((Tcl_WideUInt) 0x7ff8) << 48 )
+ theNaN.iv = ( ((Tcl_WideUInt) NAN_START) << 48 )
| ( ((Tcl_WideUInt) signum) << 63 );
return theNaN.dv;
}
@@ -778,7 +791,7 @@ ParseNaN( int signum, /* Flag == 1 if minus sign has been
if ( signum ) {
theNaN.iv |= ((Tcl_WideUInt) 0xfff8) << 48;
} else {
- theNaN.iv |= ((Tcl_WideUInt) 0x7ff8) << 48;
+ theNaN.iv |= ((Tcl_WideUInt) NAN_START) << 48;
}
*endPtr = p;