Source-Changes-HG archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

[src/trunk]: src/sys/sys Use a builtin __FOO__ for FOO if >= GCC 3.3



details:   https://anonhg.NetBSD.org/src/rev/51d7e375146e
branches:  trunk
changeset: 767065:51d7e375146e
user:      matt <matt%NetBSD.org@localhost>
date:      Thu Jul 07 18:23:18 2011 +0000

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

diffstat:

 sys/sys/float_ieee754.h |  61 +++++++++++++++++++++++++++++++++++++++++-------
 1 files changed, 52 insertions(+), 9 deletions(-)

diffs (102 lines):

diff -r f25d3f7ffea7 -r 51d7e375146e sys/sys/float_ieee754.h
--- a/sys/sys/float_ieee754.h   Thu Jul 07 18:11:18 2011 +0000
+++ b/sys/sys/float_ieee754.h   Thu Jul 07 18:23:18 2011 +0000
@@ -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_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 */
-#define FLT_MAX_10_EXP 38              /* floor(log10((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 */
 



Home | Main Index | Thread Index | Old Index