diff options
| author | martin <martin@NetBSD.org> | 2013-11-20 22:22:20 +0000 |
|---|---|---|
| committer | martin <martin@NetBSD.org> | 2013-11-20 22:22:20 +0000 |
| commit | 6219794ab9a3cbbe906c9791106b48cd5707fc0c (patch) | |
| tree | d9e7af7f9973bfb9b6af0e50721c9fe2f5e22c1b | |
| parent | 5471305928d770453dfdc3c52b688eab4b4be7c7 (diff) | |
PR 48384: reorganize struct ieee_ext for sparc64 to only use a high/low
part for the mantissa.
Adjust arch specific code accordingly.
| -rw-r--r-- | lib/libc/arch/sparc64/gen/fpclassifyl.c | 10 | ||||
| -rw-r--r-- | lib/libc/arch/sparc64/gen/isinfl.c | 7 | ||||
| -rw-r--r-- | lib/libc/arch/sparc64/gen/isnanl.c | 7 | ||||
| -rw-r--r-- | sys/arch/sparc/include/ieee.h | 39 |
4 files changed, 30 insertions, 33 deletions
diff --git a/lib/libc/arch/sparc64/gen/fpclassifyl.c b/lib/libc/arch/sparc64/gen/fpclassifyl.c index 613798a7181..1a745bb5f85 100644 --- a/lib/libc/arch/sparc64/gen/fpclassifyl.c +++ b/lib/libc/arch/sparc64/gen/fpclassifyl.c @@ -1,4 +1,4 @@ -/* $NetBSD: fpclassifyl.c,v 1.2 2008/04/28 20:22:57 martin Exp $ */ +/* $NetBSD: fpclassifyl.c,v 1.3 2013/11/20 22:22:20 martin Exp $ */ /*- * Copyright (c) 2003 The NetBSD Foundation, Inc. @@ -31,7 +31,7 @@ #include <sys/cdefs.h> #if defined(LIBC_SCCS) && !defined(lint) -__RCSID("$NetBSD: fpclassifyl.c,v 1.2 2008/04/28 20:22:57 martin Exp $"); +__RCSID("$NetBSD: fpclassifyl.c,v 1.3 2013/11/20 22:22:20 martin Exp $"); #endif #include <machine/ieee.h> @@ -49,14 +49,12 @@ __fpclassifyl(long double x) u.extu_ld = x; if (u.extu_ext.ext_exp == 0) { - if (u.extu_ext.ext_frach == 0 && u.extu_ext.ext_frachm == 0 && - u.extu_ext.ext_fraclm == 0 && u.extu_ext.ext_fracl == 0) + if (u.extu_ext.ext_frach == 0 && u.extu_ext.ext_fracl == 0) return FP_ZERO; else return FP_SUBNORMAL; } else if (u.extu_ext.ext_exp == EXT_EXP_INFNAN) { - if (u.extu_ext.ext_frach == 0 && u.extu_ext.ext_frachm == 0 && - u.extu_ext.ext_fraclm == 0 && u.extu_ext.ext_fracl == 0) + if (u.extu_ext.ext_frach == 0 && u.extu_ext.ext_fracl == 0) return FP_INFINITE; else return FP_NAN; diff --git a/lib/libc/arch/sparc64/gen/isinfl.c b/lib/libc/arch/sparc64/gen/isinfl.c index 8d7acc6ddc5..5ce6731799a 100644 --- a/lib/libc/arch/sparc64/gen/isinfl.c +++ b/lib/libc/arch/sparc64/gen/isinfl.c @@ -1,4 +1,4 @@ -/* $NetBSD: isinfl.c,v 1.4 2004/03/04 23:42:39 kleink Exp $ */ +/* $NetBSD: isinfl.c,v 1.5 2013/11/20 22:22:20 martin Exp $ */ /* * Copyright (c) 1992, 1993 @@ -40,7 +40,7 @@ #if 0 static char sccsid[] = "@(#)isinf.c 8.1 (Berkeley) 6/4/93"; #else -__RCSID("$NetBSD: isinfl.c,v 1.4 2004/03/04 23:42:39 kleink Exp $"); +__RCSID("$NetBSD: isinfl.c,v 1.5 2013/11/20 22:22:20 martin Exp $"); #endif #endif /* LIBC_SCCS and not lint */ @@ -59,6 +59,5 @@ __isinfl(long double x) u.extu_ld = x; return (u.extu_ext.ext_exp == EXT_EXP_INFNAN && - (u.extu_ext.ext_frach == 0 && u.extu_ext.ext_frachm == 0 && - u.extu_ext.ext_fraclm == 0 && u.extu_ext.ext_fracl == 0)); + (u.extu_ext.ext_frach == 0 && u.extu_ext.ext_fracl == 0)); } diff --git a/lib/libc/arch/sparc64/gen/isnanl.c b/lib/libc/arch/sparc64/gen/isnanl.c index 2b67f0866db..efa59d531ae 100644 --- a/lib/libc/arch/sparc64/gen/isnanl.c +++ b/lib/libc/arch/sparc64/gen/isnanl.c @@ -1,4 +1,4 @@ -/* $NetBSD: isnanl.c,v 1.4 2004/03/04 23:42:39 kleink Exp $ */ +/* $NetBSD: isnanl.c,v 1.5 2013/11/20 22:22:20 martin Exp $ */ /* * Copyright (c) 1992, 1993 @@ -40,7 +40,7 @@ #if 0 static char sccsid[] = "@(#)isinf.c 8.1 (Berkeley) 6/4/93"; #else -__RCSID("$NetBSD: isnanl.c,v 1.4 2004/03/04 23:42:39 kleink Exp $"); +__RCSID("$NetBSD: isnanl.c,v 1.5 2013/11/20 22:22:20 martin Exp $"); #endif #endif /* LIBC_SCCS and not lint */ @@ -59,6 +59,5 @@ __isnanl(long double x) u.extu_ld = x; return (u.extu_ext.ext_exp == EXT_EXP_INFNAN && - (u.extu_ext.ext_frach != 0 || u.extu_ext.ext_frachm != 0 || - u.extu_ext.ext_fraclm != 0 || u.extu_ext.ext_fracl != 0)); + (u.extu_ext.ext_frach != 0 || u.extu_ext.ext_fracl != 0)); } diff --git a/sys/arch/sparc/include/ieee.h b/sys/arch/sparc/include/ieee.h index 04080e2c588..4d26fba28a3 100644 --- a/sys/arch/sparc/include/ieee.h +++ b/sys/arch/sparc/include/ieee.h @@ -1,4 +1,4 @@ -/* $NetBSD: ieee.h,v 1.15 2013/02/14 09:34:46 martin Exp $ */ +/* $NetBSD: ieee.h,v 1.16 2013/11/20 22:22:20 martin Exp $ */ /* * Copyright (c) 1992, 1993 @@ -57,27 +57,28 @@ #if defined(__arch64__) || defined(_KERNEL) #define EXT_EXPBITS 15 -#define EXT_FRACHBITS 16 -#define EXT_FRACHMBITS 32 -#define EXT_FRACLMBITS 32 -#define EXT_FRACLBITS 32 -#define EXT_FRACBITS (EXT_FRACLBITS + EXT_FRACLMBITS + EXT_FRACHMBITS + EXT_FRACHBITS) - -#define EXT_TO_ARRAY32(u, a) do { \ - (a)[0] = (uint32_t)(u).extu_ext.ext_fracl; \ - (a)[1] = (uint32_t)(u).extu_ext.ext_fraclm; \ - (a)[2] = (uint32_t)(u).extu_ext.ext_frachm; \ - (a)[3] = (uint32_t)(u).extu_ext.ext_frach; \ -} while(/*CONSTCOND*/0) +#define EXT_FRACHBITS (16+32) +#define EXT_FRACLBITS (32+32) +#define EXT_FRACBITS (EXT_FRACLBITS + EXT_FRACHBITS) struct ieee_ext { - u_int ext_sign:1; - u_int ext_exp:EXT_EXPBITS; - u_int ext_frach:EXT_FRACHBITS; - u_int ext_frachm; - u_int ext_fraclm; - u_int ext_fracl; + uint64_t ext_sign:1; + uint64_t ext_exp:EXT_EXPBITS; + uint64_t ext_frach:EXT_FRACHBITS; + uint64_t ext_fracl; }; +__CTASSERT(sizeof(struct ieee_ext) == 16); + +/* + * Copy all mantissa bits to an array of uint32_t big enough to hold them all. + * This is an insane API (seems to only be needed in gdtoa). + */ +#define EXT_TO_ARRAY32(u, a) do { \ + (a)[0] = (uint32_t)((u).extu_ext.ext_fracl & 0x0ffffffffL); \ + (a)[1] = (uint32_t)((u).extu_ext.ext_fracl >> 32); \ + (a)[2] = (uint32_t)((u).extu_ext.ext_frach & 0x0ffffffffL); \ + (a)[3] = (uint32_t)((u).extu_ext.ext_frach >> 32) & 0x0ffff; \ +} while(/*CONSTCOND*/0) /* * Floats whose exponent is in [1..INFNAN) (of whatever type) are |
