Module Name:    src
Committed By:   matt
Date:           Thu Jul  7 18:23:18 UTC 2011

Modified Files:
        src/sys/sys: float_ieee754.h

Log Message:
Use a builtin __FOO__ for FOO if >= GCC 3.3
If C99, use hex floating point.


To generate a diff of this commit:
cvs rdiff -u -r1.8 -r1.9 src/sys/sys/float_ieee754.h

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/sys/sys/float_ieee754.h
diff -u src/sys/sys/float_ieee754.h:1.8 src/sys/sys/float_ieee754.h:1.9
--- src/sys/sys/float_ieee754.h:1.8	Sun Dec 11 12:25:20 2005
+++ src/sys/sys/float_ieee754.h	Thu Jul  7 18:23:18 2011
@@ -1,4 +1,4 @@
-/*	$NetBSD: float_ieee754.h,v 1.8 2005/12/11 12:25:20 christos Exp $	*/
+/*	$NetBSD: float_ieee754.h,v 1.9 2011/07/07 18:23:18 matt Exp $	*/
 
 /*
  * Copyright (c) 1992, 1993
@@ -57,33 +57,72 @@
     defined(_ISOC99_SOURCE) || defined(_NETBSD_SOURCE)
 #ifndef FLT_EVAL_METHOD
 #if __GNUC_PREREQ__(3, 3)
-#define	FLT_EVAL_METHOD	__FLT_EVAL_METHOD__
+#define FLT_EVAL_METHOD	__FLT_EVAL_METHOD__
 #endif /* GCC >= 3.3 */
 #endif /* defined(FLT_EVAL_METHOD) */
 #endif /* !defined(_ANSI_SOURCE) && ... */
 
+#if __GNUC_PREREQ__(3, 3)
+/*
+ * GCC 3,3 and later provide builtins for the FLT, DBL, and LDBL constants.
+ */
+#define FLT_RADIX	__FLT_RADIX__
+
+#define FLT_MANT_DIG	__FLT_MANT_DIG__
+#define FLT_EPSILON	__FLT_EPSILON__
+#define FLT_DIG		__FLT_DIG__
+#define FLT_MIN_EXP	__FLT_MIN_EXP__
+#define FLT_MIN		__FLT_MIN__
+#define FLT_MIN_10_EXP	__FLT_MIN_10_EXP__
+#define FLT_MAX_EXP	__FLT_MAX_EXP__
+#define FLT_MAX		__FLT_MAX__
+#define FLT_MAX_10_EXP	__FLT_MAX_10_EXP__
+
+#define DBL_MANT_DIG	__DBL_MANT_DIG__
+#define DBL_EPSILON	__DBL_EPSILON__
+#define DBL_DIG		__DBL_DIG__
+#define DBL_MIN_EXP	__DBL_MIN_EXP__
+#define DBL_MIN		__DBL_MIN__
+#define DBL_MIN_10_EXP	__DBL_MIN_10_EXP__
+#define DBL_MAX_EXP	__DBL_MAX_EXP__
+#define DBL_MAX		__DBL_MAX__
+#define DBL_MAX_10_EXP	__DBL_MAX_10_EXP__
+#else /* GCC < 3.3 */
 #define FLT_RADIX	2		/* b */
 
 #define FLT_MANT_DIG	24		/* p */
-#define FLT_EPSILON	1.19209290E-7F	/* b**(1-p) */
 #define FLT_DIG		6		/* floor((p-1)*log10(b))+(b == 10) */
 #define FLT_MIN_EXP	(-125)		/* emin */
-#define FLT_MIN		1.17549435E-38F	/* b**(emin-1) */
 #define FLT_MIN_10_EXP	(-37)		/* ceil(log10(b**(emin-1))) */
 #define FLT_MAX_EXP	128		/* emax */
-#define FLT_MAX		3.40282347E+38F	/* (1-b**(-p))*b**emax */
 #define FLT_MAX_10_EXP	38		/* floor(log10((1-b**(-p))*b**emax)) */
+#if __STDC_VERSION__ >= 199901L
+#define FLT_EPSILON	0x1.0p-23F
+#define FLT_MIN		0x1.0p-126F
+#define FLT_MAX		0x1.fffffep+127F
+#else
+#define FLT_EPSILON	1.19209290E-7F	/* b**(1-p) */
+#define FLT_MIN		1.17549435E-38F	/* b**(emin-1) */
+#define FLT_MAX		3.40282347E+38F	/* (1-b**(-p))*b**emax */
+#endif
 
 #define DBL_MANT_DIG	53
-#define DBL_EPSILON	2.2204460492503131E-16
 #define DBL_DIG		15
 #define DBL_MIN_EXP	(-1021)
-#define DBL_MIN		2.2250738585072014E-308
 #define DBL_MIN_10_EXP	(-307)
 #define DBL_MAX_EXP	1024
-#define DBL_MAX		1.7976931348623157E+308
 #define DBL_MAX_10_EXP	308
 
+#if __STDC_VERSION__ >= 199901L
+#define DBL_EPSILON	0x1.0p-52
+#define DBL_MIN		0x1.0p-1022
+#define DBL_MAX		0x1.fffffffffffffp+1023
+#else
+#define DBL_EPSILON	2.2204460492503131E-16
+#define DBL_MIN		2.2250738585072014E-308
+#define DBL_MAX		1.7976931348623157E+308
+#endif
+#endif /* GCC < 3.3 */
 /*
  * If no extended-precision type is defined by the machine-dependent
  * header including this, default to `long double' being double-precision.
@@ -104,7 +143,11 @@
     ((_POSIX_C_SOURCE - 0) >= 200112L) || \
     ((_XOPEN_SOURCE  - 0) >= 600) || \
     defined(_ISOC99_SOURCE) || defined(_NETBSD_SOURCE)
-#define	DECIMAL_DIG	17		/* ceil((1+p*log10(b))-(b==10) */
+#if __GNUC_PREREQ__(3, 3)
+#define DECIMAL_DIG	__DECIMAL_DIG__
+#else
+#define DECIMAL_DIG	17		/* ceil((1+p*log10(b))-(b==10) */
+#endif
 #endif /* !defined(_ANSI_SOURCE) && ... */
 #endif /* LDBL_MANT_DIG */
 

Reply via email to