From OpenBSD:

apparently my understanding of '{FLT,DBL,LDBL}_{MIN,MAX}_EXP' ahs
been wrong and thus proven by many and there change it back to
what it is meaning explained in http://www-ccs.ucsd.edu/c/float.html .
also fix spmath to use it's own consts instead of (now) off by one
float.h values thus to avoid any kind of binary changes.

Fixes regress/lib/libc/ieeefp/nan
This commit is contained in:
skrll 2009-01-27 11:49:54 +00:00
parent afe25e2049
commit fd24e60b98
3 changed files with 24 additions and 21 deletions

View File

@ -1,6 +1,6 @@
/* $NetBSD: dbl_float.h,v 1.2 2008/04/06 08:03:36 skrll Exp $ */
/* $NetBSD: dbl_float.h,v 1.3 2009/01/27 11:49:54 skrll Exp $ */
/* $OpenBSD: dbl_float.h,v 1.5 2001/03/29 03:58:17 mickey Exp $ */
/* $OpenBSD: dbl_float.h,v 1.10 2004/01/02 14:39:01 mickey Exp $ */
/*
* Copyright 1996 1995 by Open Software Foundation, Inc.
@ -343,16 +343,16 @@
Deposit_dexponent(dbl_value,(exponent op DBL_WRAP))
#define Dbl_setlargestpositive(dbl_valueA,dbl_valueB) \
Dallp1(dbl_valueA) = ((DBL_MAX_EXP+DBL_BIAS) << (32-(1+DBL_EXP_LENGTH))) \
Dallp1(dbl_valueA) = ((DBL_EMAX+DBL_BIAS) << (32-(1+DBL_EXP_LENGTH))) \
| ((1<<(32-(1+DBL_EXP_LENGTH))) - 1 ); \
Dallp2(dbl_valueB) = 0xFFFFFFFF
#define Dbl_setlargestnegative(dbl_valueA,dbl_valueB) \
Dallp1(dbl_valueA) = ((DBL_MAX_EXP+DBL_BIAS) << (32-(1+DBL_EXP_LENGTH))) \
Dallp1(dbl_valueA) = ((DBL_EMAX+DBL_BIAS) << (32-(1+DBL_EXP_LENGTH))) \
| ((1<<(32-(1+DBL_EXP_LENGTH))) - 1 ) | (1<<31); \
Dallp2(dbl_valueB) = 0xFFFFFFFF
#define Dbl_setlargest_exponentmantissa(dbl_valueA,dbl_valueB) \
Deposit_dexponentmantissap1(dbl_valueA, \
(((DBL_MAX_EXP+DBL_BIAS) << (32-(1+DBL_EXP_LENGTH))) \
(((DBL_EMAX+DBL_BIAS) << (32-(1+DBL_EXP_LENGTH))) \
| ((1<<(32-(1+DBL_EXP_LENGTH))) - 1 ))); \
Dallp2(dbl_valueB) = 0xFFFFFFFF
@ -362,7 +362,7 @@
Dallp2(dbl_valueB) = 0
#define Dbl_setlargest(dbl_valueA,dbl_valueB,sign) \
Dallp1(dbl_valueA) = (sign << 31) | \
((DBL_MAX_EXP+DBL_BIAS) << (32-(1+DBL_EXP_LENGTH))) | \
((DBL_EMAX+DBL_BIAS) << (32-(1+DBL_EXP_LENGTH))) | \
((1 << (32-(1+DBL_EXP_LENGTH))) - 1 ); \
Dallp2(dbl_valueB) = 0xFFFFFFFF
@ -454,11 +454,11 @@
/* Need to Initialize */
#define Dbl_makequietnan(desta,destb) \
Dallp1(desta) = ((DBL_MAX_EXP+DBL_BIAS)+1)<< (32-(1+DBL_EXP_LENGTH)) \
Dallp1(desta) = ((DBL_EMAX+DBL_BIAS)+1)<< (32-(1+DBL_EXP_LENGTH)) \
| (1<<(32-(1+DBL_EXP_LENGTH+2))); \
Dallp2(destb) = 0
#define Dbl_makesignalingnan(desta,destb) \
Dallp1(desta) = ((DBL_MAX_EXP+DBL_BIAS)+1)<< (32-(1+DBL_EXP_LENGTH)) \
Dallp1(desta) = ((DBL_EMAX+DBL_BIAS)+1)<< (32-(1+DBL_EXP_LENGTH)) \
| (1<<(32-(1+DBL_EXP_LENGTH+1))); \
Dallp2(destb) = 0

View File

@ -1,6 +1,6 @@
/* $NetBSD: float.h,v 1.3 2005/12/11 12:17:40 christos Exp $ */
/* $NetBSD: float.h,v 1.4 2009/01/27 11:49:54 skrll Exp $ */
/* $OpenBSD: float.h,v 1.4 2001/03/29 03:58:18 mickey Exp $ */
/* $OpenBSD: float.h,v 1.7 2004/01/02 14:39:01 mickey Exp $ */
/*
* Copyright 1996 1995 by Open Software Foundation, Inc.
@ -333,25 +333,28 @@ typedef struct dint dbl_integer;
* Define the different precisions' parameters.
*/
#define SGL_BITLENGTH 32
#define SGL_EMAX 127
#define SGL_BIAS 127
#define SGL_WRAP 192
#define SGL_INFINITY_EXPONENT (FLT_MAX_EXP+SGL_BIAS+1)
#define SGL_INFINITY_EXPONENT (SGL_EMAX+SGL_BIAS+1)
#define SGL_THRESHOLD 32
#define SGL_EXP_LENGTH 8
#define SGL_P 24
#define DBL_BITLENGTH 64
#define DBL_EMAX 1023
#define DBL_BIAS 1023
#define DBL_WRAP 1536
#define DBL_INFINITY_EXPONENT (DBL_MAX_EXP+DBL_BIAS+1)
#define DBL_INFINITY_EXPONENT (DBL_EMAX+DBL_BIAS+1)
#define DBL_THRESHOLD 64
#define DBL_EXP_LENGTH 11
#define DBL_P 53
#define QUAD_BITLENGTH 128
#define QUAD_EMAX 16383
#define QUAD_BIAS 16383
#define QUAD_WRAP 24576
#define QUAD_INFINITY_EXPONENT (LDBL_MAX_EXP+QUAD_BIAS+1)
#define QUAD_INFINITY_EXPONENT (QUAD_EMAX+QUAD_BIAS+1)
#define QUAD_P 113
/* Boolean Values etc. */

View File

@ -1,6 +1,6 @@
/* $NetBSD: sgl_float.h,v 1.2 2008/04/06 08:03:36 skrll Exp $ */
/* $NetBSD: sgl_float.h,v 1.3 2009/01/27 11:49:54 skrll Exp $ */
/* $OpenBSD: sgl_float.h,v 1.5 2001/03/29 03:58:19 mickey Exp $ */
/* $OpenBSD: sgl_float.h,v 1.10 2004/01/02 14:39:01 mickey Exp $ */
/*
* Copyright 1996 1995 by Open Software Foundation, Inc.
@ -218,10 +218,10 @@
Deposit_sexponent(sgl_value,(exponent op SGL_WRAP))
#define Sgl_setlargestpositive(sgl_value) \
Sall(sgl_value) = ((FLT_MAX_EXP+SGL_BIAS) << (32-(1+SGL_EXP_LENGTH))) \
Sall(sgl_value) = ((SGL_EMAX+SGL_BIAS) << (32-(1+SGL_EXP_LENGTH))) \
| ((1<<(32-(1+SGL_EXP_LENGTH))) - 1)
#define Sgl_setlargestnegative(sgl_value) \
Sall(sgl_value) = ((FLT_MAX_EXP+SGL_BIAS) << (32-(1+SGL_EXP_LENGTH))) \
Sall(sgl_value) = ((SGL_EMAX+SGL_BIAS) << (32-(1+SGL_EXP_LENGTH))) \
| ((1<<(32-(1+SGL_EXP_LENGTH))) - 1 ) | (1<<31)
#define Sgl_setnegativeinfinity(sgl_value) \
@ -229,11 +229,11 @@
((1<<SGL_EXP_LENGTH) | SGL_INFINITY_EXPONENT) << (32-(1+SGL_EXP_LENGTH))
#define Sgl_setlargest(sgl_value,sign) \
Sall(sgl_value) = ((sign) << 31) | \
(((FLT_MAX_EXP+SGL_BIAS) << (32-(1+SGL_EXP_LENGTH))) \
(((SGL_EMAX+SGL_BIAS) << (32-(1+SGL_EXP_LENGTH))) \
| ((1 << (32-(1+SGL_EXP_LENGTH))) - 1 ))
#define Sgl_setlargest_exponentmantissa(sgl_value) \
Sall(sgl_value) = (Sall(sgl_value) & (1<<31)) | \
(((FLT_MAX_EXP+SGL_BIAS) << (32-(1+SGL_EXP_LENGTH))) \
(((SGL_EMAX+SGL_BIAS) << (32-(1+SGL_EXP_LENGTH))) \
| ((1 << (32-(1+SGL_EXP_LENGTH))) - 1 ))
/* The high bit is always zero so arithmetic or logical shifts will work. */
@ -274,10 +274,10 @@
/* Need to Initialize */
#define Sgl_makequietnan(dest) \
Sall(dest) = ((FLT_MAX_EXP+SGL_BIAS)+1)<< (32-(1+SGL_EXP_LENGTH)) \
Sall(dest) = ((SGL_EMAX+SGL_BIAS)+1)<< (32-(1+SGL_EXP_LENGTH)) \
| (1<<(32-(1+SGL_EXP_LENGTH+2)))
#define Sgl_makesignalingnan(dest) \
Sall(dest) = ((FLT_MAX_EXP+SGL_BIAS)+1)<< (32-(1+SGL_EXP_LENGTH)) \
Sall(dest) = ((SGL_EMAX+SGL_BIAS)+1)<< (32-(1+SGL_EXP_LENGTH)) \
| (1<<(32-(1+SGL_EXP_LENGTH+1)))
#define Sgl_normalize(sgl_opnd,exponent) \