Module Name:    src
Committed By:   matt
Date:           Fri Jan 31 19:38:06 UTC 2014

Modified Files:
        src/sys/arch/arm/include: ieee.h math.h
        src/sys/arch/hppa/include: ieee.h math.h
        src/sys/arch/mips/include: ieee.h math.h
        src/sys/arch/sparc/include: ieee.h math.h
        src/sys/sys: ieee754.h

Log Message:
Consolidate the 128-bit long double defintions to <sys/ieee754.h>
Each arch that uses it now defines __HAVE_LONG_DOUBLE to 128.
<machine/ieee.h> is now just include the machine's math.h followed
by <sys/ieee754.h>


To generate a diff of this commit:
cvs rdiff -u -r1.10 -r1.11 src/sys/arch/arm/include/ieee.h
cvs rdiff -u -r1.3 -r1.4 src/sys/arch/arm/include/math.h
cvs rdiff -u -r1.13 -r1.14 src/sys/arch/hppa/include/ieee.h
cvs rdiff -u -r1.7 -r1.8 src/sys/arch/hppa/include/math.h
cvs rdiff -u -r1.10 -r1.11 src/sys/arch/mips/include/ieee.h
cvs rdiff -u -r1.6 -r1.7 src/sys/arch/mips/include/math.h
cvs rdiff -u -r1.17 -r1.18 src/sys/arch/sparc/include/ieee.h
cvs rdiff -u -r1.5 -r1.6 src/sys/arch/sparc/include/math.h
cvs rdiff -u -r1.9 -r1.10 src/sys/sys/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/arch/arm/include/ieee.h
diff -u src/sys/arch/arm/include/ieee.h:1.10 src/sys/arch/arm/include/ieee.h:1.11
--- src/sys/arch/arm/include/ieee.h:1.10	Wed Jan 29 01:34:44 2014
+++ src/sys/arch/arm/include/ieee.h	Fri Jan 31 19:38:06 2014
@@ -1,120 +1,4 @@
-/* $NetBSD: ieee.h,v 1.10 2014/01/29 01:34:44 matt Exp $ */
-
-/*-
- * Copyright (c) 2014 The NetBSD Foundation, Inc.
- * All rights reserved.
- *
- * This code is derived from software contributed to The NetBSD Foundation
- * by Matt Thomas of 3am Software Foundry.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
- * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
- * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
- * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- */
-
-/*
- * ieee.h defines the machine-dependent layout of the machine's IEEE
- * floating point.  It does *not* define (yet?) any of the rounding
- * mode bits, exceptions, and so forth.
- */
-
-#ifndef _ARM_IEEE_H_
-#define _ARM_IEEE_H_
+/* $NetBSD: ieee.h,v 1.11 2014/01/31 19:38:06 matt Exp $ */
 
+#include <arm/math.h>		/* for #define __HAVE_LONG_DOUBLE 128 */
 #include <sys/ieee754.h>
-
-#if 0
-#define	SNG_QUIETNAN	(1 << 22)
-#define	DBL_QUIETNAN	(1 << 19)
-#endif
-
-#ifdef __ARM_PCS_AAPCS64
-
-/*
- * The AArch64 architecture defines the following IEEE 754 compliant
- * 128-bit extended-precision format.
- */
-
-#define	EXT_EXPBITS	15
-#define EXT_FRACHBITS	48
-#define	EXT_FRACLBITS	64
-#define	EXT_FRACBITS	(EXT_FRACLBITS + EXT_FRACHBITS)
-
-#define	EXT_TO_ARRAY32(u, a) do {				\
-	(a)[0] = (uint32_t)((u).extu_ext.ext_fracl >>  0);	\
-	(a)[1] = (uint32_t)((u).extu_ext.ext_fracl >> 32);	\
-	(a)[2] = (uint32_t)((u).extu_ext.ext_frach >>  0);	\
-	(a)[3] = (uint32_t)((u).extu_ext.ext_frach >> 32);	\
-} while(/*CONSTCOND*/0)
-
-struct ieee_ext {
-#ifdef __AARCH64EB__
-	uint64_t	ext_sign:1;
-	uint64_t	ext_exp:EXT_EXPBITS;
-	uint64_t	ext_frach:EXT_FRACHBITS;
-	uint64_t	ext_fracl;
-#else
-	uint64_t	ext_fracl;
-	uint64_t	ext_frach:EXT_FRACHBITS;
-	uint64_t	ext_exp:EXT_EXPBITS;
-	uint64_t	ext_sign:1;
-#endif
-};
-
-/*
- * Floats whose exponent is in [1..INFNAN) (of whatever type) are
- * `normal'.  Floats whose exponent is INFNAN are either Inf or NaN.
- * Floats whose exponent is zero are either zero (iff all fraction
- * bits are zero) or subnormal values.
- *
- * A NaN is a `signalling NaN' if its QUIETNAN bit is clear in its
- * high fraction; if the bit is set, it is a `quiet NaN'.
- */
-#define	EXT_EXP_INFNAN	0x7fff
-#define	EXT_EXP_INF	0x7fff
-#define	EXT_EXP_NAN	0x7fff
-
-#if 0
-#define	EXT_QUIETNAN	(1 << 15)
-#endif
-
-/*
- * Exponent biases.
- */
-#define	EXT_EXP_BIAS	16383
-
-/*
- * Convenience data structures.
- */
-union ieee_ext_u {
-	long double		extu_ld;
-	struct ieee_ext		extu_ext;
-};
-
-#define extu_exp	extu_ext.ext_exp
-#define extu_sign	extu_ext.ext_sign
-#define extu_fracl	extu_ext.ext_fracl
-#define extu_frach	extu_ext.ext_frach
-
-#define LDBL_IMPLICIT_NBIT	1	/* our NBIT is implicit */
-
-#endif /* __ARM_PCS_AAPCS64 */
-
-#endif /* !_ARM_IEEE_H_ */

Index: src/sys/arch/arm/include/math.h
diff -u src/sys/arch/arm/include/math.h:1.3 src/sys/arch/arm/include/math.h:1.4
--- src/sys/arch/arm/include/math.h:1.3	Wed Jan 29 01:01:14 2014
+++ src/sys/arch/arm/include/math.h	Fri Jan 31 19:38:06 2014
@@ -1,6 +1,6 @@
-/*	$NetBSD: math.h,v 1.3 2014/01/29 01:01:14 matt Exp $	*/
+/*	$NetBSD: math.h,v 1.4 2014/01/31 19:38:06 matt Exp $	*/
 
 #define	__HAVE_NANF
 #ifdef __ARM_PCS_AAPCS64
-#define __HAVE_LONG_DOUBLE
+#define __HAVE_LONG_DOUBLE	128
 #endif

Index: src/sys/arch/hppa/include/ieee.h
diff -u src/sys/arch/hppa/include/ieee.h:1.13 src/sys/arch/hppa/include/ieee.h:1.14
--- src/sys/arch/hppa/include/ieee.h:1.13	Fri Jan 31 12:40:37 2014
+++ src/sys/arch/hppa/include/ieee.h	Fri Jan 31 19:38:06 2014
@@ -1,117 +1,4 @@
-/*	$NetBSD: ieee.h,v 1.13 2014/01/31 12:40:37 matt Exp $	*/
-
-/*	$OpenBSD: ieee.h,v 1.1 1999/04/20 19:44:04 mickey Exp $	*/
-
-/*
- * Copyright (c) 1992, 1993
- *	The Regents of the University of California.  All rights reserved.
- *
- * This software was developed by the Computer Systems Engineering group
- * at Lawrence Berkeley Laboratory under DARPA contract BG 91-66 and
- * contributed to Berkeley.
- *
- * All advertising materials mentioning features or use of this software
- * must display the following acknowledgement:
- *	This product includes software developed by the University of
- *	California, Lawrence Berkeley Laboratory.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the University nor the names of its contributors
- *    may be used to endorse or promote products derived from this software
- *    without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- *	@(#)ieee.h	8.1 (Berkeley) 6/11/93
- */
-
-#ifndef _HPPA_IEEE_H_
-#define _HPPA_IEEE_H_
-
-/*
- * ieee.h defines the machine-dependent layout of the machine's IEEE
- * floating point.  It does *not* define (yet?) any of the rounding
- * mode bits, exceptions, and so forth.
- */
+/*	$NetBSD: ieee.h,v 1.14 2014/01/31 19:38:06 matt Exp $	*/
 
+#include <hppa/math.h>		/* for #define __HAVE_LONG_DOUBLE 128 */
 #include <sys/ieee754.h>
-
-#ifdef _LP64
-#define	EXT_EXPBITS	15
-#define EXT_FRACHBITS	48
-#define EXT_FRACLBITS	64
-#define EXT_FRACBITS	(EXT_FRACLBITS + EXT_FRACHBITS)
-
-#define EXT_TO_ARRAY32(u, a) do {				\
-	(a)[0] = (uint32_t)((u).extu_ext.ext_fracl >>  0);	\
-	(a)[1] = (uint32_t)((u).extu_ext.ext_fracl >> 32);	\
-	(a)[2] = (uint32_t)((u).extu_ext.ext_frach >>  0);	\
-	(a)[3] = (uint32_t)((u).extu_ext.ext_frach >> 32);	\
-} while(/*CONSTCOND*/0)
-
-struct ieee_ext {
-	uint64_t ext_sign:1;
-	uint64_t ext_exp:EXT_EXPBITS;
-	uint64_t ext_frach:EXT_FRACHBITS;
-	uint64_t ext_fracl;
-};
-
-/*
- * Floats whose exponent is in [1..INFNAN) (of whatever type) are
- * `normal'.  Floats whose exponent is INFNAN are either Inf or NaN.
- * Floats whose exponent is zero are either zero (iff all fraction
- * bits are zero) or subnormal values.
- *
- * A NaN is a `signalling NaN' if its QUIETNAN bit is set in its
- * high fraction; if the bit is clear, it is a `quiet NaN'.
- */
-#define	EXT_EXP_INFNAN	0x7fff
-#define	EXT_EXP_INF	0x7fff
-#define	EXT_EXP_NAN	0x7fff
-
-#if 0
-#define	SNG_QUIETNAN	(1 << 22)
-#define	DBL_QUIETNAN	(1 << 19)
-#define	EXT_QUIETNAN	(1 << 15)
-#endif
-
-/*
- * Exponent biases.
- */
-#define	EXT_EXP_BIAS	16383
-
-/*
- * Convenience data structures.
- */
-union ieee_ext_u {
-	long double		extu_ld;
-	struct ieee_ext		extu_ext;
-};
-
-#define extu_exp	extu_ext.ext_exp
-#define extu_sign	extu_ext.ext_sign
-#define extu_fracl	extu_ext.ext_fracl
-#define extu_frach	extu_ext.ext_frach
-
-#define LDBL_IMPLICIT_NBIT	1	/* our NBIT is implicit */
-
-#endif /* _LP64 */
-
-#endif /* !_HPPA_IEEE_H_ */

Index: src/sys/arch/hppa/include/math.h
diff -u src/sys/arch/hppa/include/math.h:1.7 src/sys/arch/hppa/include/math.h:1.8
--- src/sys/arch/hppa/include/math.h:1.7	Sun Dec 11 12:17:37 2005
+++ src/sys/arch/hppa/include/math.h	Fri Jan 31 19:38:06 2014
@@ -1,6 +1,6 @@
-/*	$NetBSD: math.h,v 1.7 2005/12/11 12:17:37 christos Exp $	*/
+/*	$NetBSD: math.h,v 1.8 2014/01/31 19:38:06 matt Exp $	*/
 
 #ifdef _LP64
-#define	__HAVE_LONG_DOUBLE
+#define	__HAVE_LONG_DOUBLE	128
 #endif
 #define	__HAVE_NANF

Index: src/sys/arch/mips/include/ieee.h
diff -u src/sys/arch/mips/include/ieee.h:1.10 src/sys/arch/mips/include/ieee.h:1.11
--- src/sys/arch/mips/include/ieee.h:1.10	Fri Jan 31 11:53:37 2014
+++ src/sys/arch/mips/include/ieee.h	Fri Jan 31 19:38:06 2014
@@ -1,129 +1,4 @@
-/*	$NetBSD: ieee.h,v 1.10 2014/01/31 11:53:37 matt Exp $	*/
-
-/*
- * Copyright (c) 1992, 1993
- *	The Regents of the University of California.  All rights reserved.
- *
- * This software was developed by the Computer Systems Engineering group
- * at Lawrence Berkeley Laboratory under DARPA contract BG 91-66 and
- * contributed to Berkeley.
- *
- * All advertising materials mentioning features or use of this software
- * must display the following acknowledgement:
- *	This product includes software developed by the University of
- *	California, Lawrence Berkeley Laboratory.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the University nor the names of its contributors
- *    may be used to endorse or promote products derived from this software
- *    without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- *	@(#)ieee.h	8.1 (Berkeley) 6/11/93
- */
-
-/*
- * ieee.h defines the machine-dependent layout of the machine's IEEE
- * floating point.  It does *not* define (yet?) any of the rounding
- * mode bits, exceptions, and so forth.
- */
-
-#ifndef _MIPS_IEEE_H
-#define _MIPS_IEEE_H
+/*	$NetBSD: ieee.h,v 1.11 2014/01/31 19:38:06 matt Exp $	*/
 
+#include <mips/math.h>		/* for #define __HAVE_LONG_DOUBLE 128 */
 #include <sys/ieee754.h>
-
-/*
- * The MIPS architecture defines the following IEEE 754 compliant
- * 128-bit extended-precision format, which is supported only by the
- * v9 toolchain.
- */
-
-#if defined(__mips_n32) || defined(__mips_n64)
-
-#define	EXT_EXPBITS	15
-#define EXT_FRACHBITS	48
-#define	EXT_FRACLBITS	64
-#define	EXT_FRACBITS	(EXT_FRACLBITS + EXT_FRACHBITS)
-
-#define	EXT_TO_ARRAY32(u, a) do {				\
-	(a)[0] = (uint32_t)((u).extu_ext.ext_fracl >>  0);	\
-	(a)[1] = (uint32_t)((u).extu_ext.ext_fracl >> 32);	\
-	(a)[2] = (uint32_t)((u).extu_ext.ext_frach >>  0);	\
-	(a)[3] = (uint32_t)((u).extu_ext.ext_frach >> 32);	\
-} while(/*CONSTCOND*/0)
-
-struct ieee_ext {
-#if _BYTE_ORDER == _BIG_ENDIAN
-	uint64_t ext_sign:1;
-	uint64_t ext_exp:EXT_EXPBITS;
-	uint64_t ext_frach:EXT_FRACHBITS;
-	uint64_t ext_fracl;
-#else
-	uint64_t ext_fracl;
-	uint64_t ext_frach:EXT_FRACHBITS;
-	uint64_t ext_exp:EXT_EXPBITS;
-	uint64_t ext_sign:1;
-#endif
-};
-
-/*
- * Floats whose exponent is in [1..INFNAN) (of whatever type) are
- * `normal'.  Floats whose exponent is INFNAN are either Inf or NaN.
- * Floats whose exponent is zero are either zero (iff all fraction
- * bits are zero) or subnormal values.
- *
- * A NaN is a `signalling NaN' if its QUIETNAN bit is clear in its
- * high fraction; if the bit is set, it is a `quiet NaN'.
- */
-#define	EXT_EXP_INFNAN	0x7fff
-#define	EXT_EXP_INF	0x7fff
-#define	EXT_EXP_NAN	0x7fff
-
-#if 0
-#define	SNG_QUIETNAN	(1 << 22)
-#define	DBL_QUIETNAN	(1 << 19)
-#define	EXT_QUIETNAN	(1 << 15)
-#endif
-
-/*
- * Exponent biases.
- */
-#define	EXT_EXP_BIAS	16383
-
-/*
- * Convenience data structures.
- */
-union ieee_ext_u {
-	long double		extu_ld;
-	struct ieee_ext		extu_ext;
-};
-
-#define extu_exp	extu_ext.ext_exp
-#define extu_sign	extu_ext.ext_sign
-#define extu_fracl	extu_ext.ext_fracl
-#define extu_frach	extu_ext.ext_frach
-
-#define LDBL_IMPLICIT_NBIT	1	/* our NBIT is implicit */
-
-#endif /* __mips_n32 || __mips_n64 */
-
-#endif /* _MIPS_IEEE_H */

Index: src/sys/arch/mips/include/math.h
diff -u src/sys/arch/mips/include/math.h:1.6 src/sys/arch/mips/include/math.h:1.7
--- src/sys/arch/mips/include/math.h:1.6	Thu May 23 21:39:49 2013
+++ src/sys/arch/mips/include/math.h	Fri Jan 31 19:38:06 2014
@@ -1,4 +1,4 @@
-/*	$NetBSD: math.h,v 1.6 2013/05/23 21:39:49 christos Exp $	*/
+/*	$NetBSD: math.h,v 1.7 2014/01/31 19:38:06 matt Exp $	*/
 
 /*-
  * Copyright (c) 2013 The NetBSD Foundation, Inc.
@@ -27,5 +27,5 @@
  */
 #define	__HAVE_NANF
 #if defined(__mips_n32) || defined(__mips_n64)
-#define __HAVE_LONG_DOUBLE
+#define __HAVE_LONG_DOUBLE	128
 #endif

Index: src/sys/arch/sparc/include/ieee.h
diff -u src/sys/arch/sparc/include/ieee.h:1.17 src/sys/arch/sparc/include/ieee.h:1.18
--- src/sys/arch/sparc/include/ieee.h:1.17	Sun Dec 15 03:45:07 2013
+++ src/sys/arch/sparc/include/ieee.h	Fri Jan 31 19:38:06 2014
@@ -1,124 +1,4 @@
-/*	$NetBSD: ieee.h,v 1.17 2013/12/15 03:45:07 christos Exp $	*/
-
-/*
- * Copyright (c) 1992, 1993
- *	The Regents of the University of California.  All rights reserved.
- *
- * This software was developed by the Computer Systems Engineering group
- * at Lawrence Berkeley Laboratory under DARPA contract BG 91-66 and
- * contributed to Berkeley.
- *
- * All advertising materials mentioning features or use of this software
- * must display the following acknowledgement:
- *	This product includes software developed by the University of
- *	California, Lawrence Berkeley Laboratory.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the University nor the names of its contributors
- *    may be used to endorse or promote products derived from this software
- *    without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- *	@(#)ieee.h	8.1 (Berkeley) 6/11/93
- */
-
-/*
- * ieee.h defines the machine-dependent layout of the machine's IEEE
- * floating point.  It does *not* define (yet?) any of the rounding
- * mode bits, exceptions, and so forth.
- */
+/*	$NetBSD: ieee.h,v 1.18 2014/01/31 19:38:06 matt Exp $	*/
 
+#include <sparc/math.h>		/* for #define __HAVE_LONG_DOUBLE 128 */
 #include <sys/ieee754.h>
-
-/*
- * The SPARC architecture defines the following IEEE 754 compliant
- * 128-bit extended-precision format, which is supported only by the
- * v9 toolchain.
- */
-
-#if defined(__arch64__) || defined(_KERNEL)
-
-#define	EXT_EXPBITS	15
-#define EXT_FRACHBITS	(16+32)
-#define	EXT_FRACLBITS	(32+32)
-#define	EXT_FRACBITS	(EXT_FRACLBITS + EXT_FRACHBITS)
-
-struct ieee_ext {
-	/*LINTED35*/	uint64_t	ext_sign:1;
-	/*LINTED35*/	uint64_t	ext_exp:EXT_EXPBITS;
-	/*LINTED35*/	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
- * `normal'.  Floats whose exponent is INFNAN are either Inf or NaN.
- * Floats whose exponent is zero are either zero (iff all fraction
- * bits are zero) or subnormal values.
- *
- * A NaN is a `signalling NaN' if its QUIETNAN bit is clear in its
- * high fraction; if the bit is set, it is a `quiet NaN'.
- */
-#define	EXT_EXP_INFNAN	0x7fff
-#define	EXT_EXP_INF	0x7fff
-#define	EXT_EXP_NAN	0x7fff
-
-#if 0
-#define	SNG_QUIETNAN	(1 << 22)
-#define	DBL_QUIETNAN	(1 << 19)
-#define	EXT_QUIETNAN	(1 << 15)
-#endif
-
-/*
- * Exponent biases.
- */
-#define	EXT_EXP_BIAS	16383
-
-/*
- * Convenience data structures.
- */
-union ieee_ext_u {
-	long double		extu_ld;
-	struct ieee_ext		extu_ext;
-};
-
-#define extu_exp	extu_ext.ext_exp
-#define extu_sign	extu_ext.ext_sign
-#define extu_fracl	extu_ext.ext_fracl
-#define extu_fraclm	extu_ext.ext_fraclm
-#define extu_frachm	extu_ext.ext_frachm
-#define extu_frach	extu_ext.ext_frach
-
-#define	LDBL_IMPLICIT_NBIT	1
-
-#endif /* __arch64__ || _KERNEL */

Index: src/sys/arch/sparc/include/math.h
diff -u src/sys/arch/sparc/include/math.h:1.5 src/sys/arch/sparc/include/math.h:1.6
--- src/sys/arch/sparc/include/math.h:1.5	Mon Dec 15 00:25:05 2008
+++ src/sys/arch/sparc/include/math.h	Fri Jan 31 19:38:06 2014
@@ -1,7 +1,7 @@
-/*	$NetBSD: math.h,v 1.5 2008/12/15 00:25:05 mrg Exp $	*/
+/*	$NetBSD: math.h,v 1.6 2014/01/31 19:38:06 matt Exp $	*/
 
 #define	__HAVE_NANF
 
 #ifdef _LP64
-#define	__HAVE_LONG_DOUBLE
+#define	__HAVE_LONG_DOUBLE	128
 #endif

Index: src/sys/sys/ieee754.h
diff -u src/sys/sys/ieee754.h:1.9 src/sys/sys/ieee754.h:1.10
--- src/sys/sys/ieee754.h:1.9	Wed May  8 05:27:01 2013
+++ src/sys/sys/ieee754.h	Fri Jan 31 19:38:06 2014
@@ -1,4 +1,4 @@
-/*	$NetBSD: ieee754.h,v 1.9 2013/05/08 05:27:01 matt Exp $	*/
+/*	$NetBSD: ieee754.h,v 1.10 2014/01/31 19:38:06 matt Exp $	*/
 
 /*
  * Copyright (c) 1992, 1993
@@ -52,7 +52,8 @@
 /*
  * <sys/ieee754.h> defines the layout of IEEE 754 floating point types.
  * Only single-precision and double-precision types are defined here;
- * extended types, if available, are defined in the machine-dependent
+ * 128-bit long doubles are define here IFF __HAVE_LONG_DOUBLE equals 128.
+ * Otherwise extended types, if available, are defined in the machine-dependent
  * header.
  */
 
@@ -118,6 +119,35 @@ struct ieee_double {
 #endif
 };
 
+#if __HAVE_LONG_DOUBLE == 128
+
+#define	EXT_EXPBITS	15
+#define EXT_FRACHBITS	48
+#define	EXT_FRACLBITS	64
+#define	EXT_FRACBITS	(EXT_FRACLBITS + EXT_FRACHBITS)
+
+#define	EXT_TO_ARRAY32(u, a) do {				\
+	(a)[0] = (uint32_t)((u).extu_ext.ext_fracl >>  0);	\
+	(a)[1] = (uint32_t)((u).extu_ext.ext_fracl >> 32);	\
+	(a)[2] = (uint32_t)((u).extu_ext.ext_frach >>  0);	\
+	(a)[3] = (uint32_t)((u).extu_ext.ext_frach >> 32);	\
+} while(/*CONSTCOND*/0)
+
+struct ieee_ext {
+#if _BYTE_ORDER == _BIG_ENDIAN
+	uint64_t ext_sign:1;
+	uint64_t ext_exp:EXT_EXPBITS;
+	uint64_t ext_frach:EXT_FRACHBITS;
+	uint64_t ext_fracl;
+#else
+	uint64_t ext_fracl;
+	uint64_t ext_frach:EXT_FRACHBITS;
+	uint64_t ext_exp:EXT_EXPBITS;
+	uint64_t ext_sign:1;
+#endif
+};
+#endif /* __HAVE_LONG_DOUBLE == 128 */
+
 /*
  * Floats whose exponent is in [1..INFNAN) (of whatever type) are
  * `normal'.  Floats whose exponent is INFNAN are either Inf or NaN.
@@ -130,12 +160,18 @@ struct ieee_double {
  */
 #define	SNG_EXP_INFNAN	255
 #define	DBL_EXP_INFNAN	2047
+#if __HAVE_LONG_DOUBLE == 128
+#define	EXT_EXP_INFNAN	0x7fff
+#endif
 
 /*
  * Exponent biases.
  */
 #define	SNG_EXP_BIAS	127
 #define	DBL_EXP_BIAS	1023
+#if __HAVE_LONG_DOUBLE == 128
+#define	EXT_EXP_BIAS	16383
+#endif
 
 /*
  * Convenience data structures.
@@ -161,4 +197,22 @@ union ieee_double_u {
 #define	dblu_fracl	dblu_dbl.dbl_fracl
 #define	DBLU_ZEROFRAC_P(u)	(((u).dblu_frach|(u).dblu_fracl) != 0)
 
+#if __HAVE_LONG_DOUBLE
+union ieee_ext_u {
+	long double		extu_ld;
+	struct ieee_ext		extu_ext;
+};
+
+#define extu_exp	extu_ext.ext_exp
+#define extu_sign	extu_ext.ext_sign
+#define extu_fracl	extu_ext.ext_fracl
+#define extu_frach	extu_ext.ext_frach
+#define	EXTU_ZEROFRAC_P(u)	(((u).extu_frach|(u).extu_fracl) != 0)
+
+#ifndef LDBL_NBIT
+#define LDBL_IMPLICIT_NBIT	1	/* our NBIT is implicit */
+#endif
+
+#endif /* __HAVE_LONG_DOUBLE */
+
 #endif /* _SYS_IEEE754_H_ */

Reply via email to