11dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project/*	$OpenBSD: ieee.h,v 1.1 2004/02/01 05:09:49 drahn Exp $	*/
21dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project/*	$NetBSD: ieee.h,v 1.2 2001/02/21 17:43:50 bjh21 Exp $	*/
31dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project
41dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project/*
51dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * Copyright (c) 1992, 1993
61dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project *	The Regents of the University of California.  All rights reserved.
71dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project *
81dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * This software was developed by the Computer Systems Engineering group
91dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * at Lawrence Berkeley Laboratory under DARPA contract BG 91-66 and
101dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * contributed to Berkeley.
111dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project *
121dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * All advertising materials mentioning features or use of this software
131dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * must display the following acknowledgement:
141dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project *	This product includes software developed by the University of
151dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project *	California, Lawrence Berkeley Laboratory.
161dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project *
171dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * Redistribution and use in source and binary forms, with or without
181dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * modification, are permitted provided that the following conditions
191dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * are met:
201dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * 1. Redistributions of source code must retain the above copyright
211dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project *    notice, this list of conditions and the following disclaimer.
221dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * 2. Redistributions in binary form must reproduce the above copyright
231dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project *    notice, this list of conditions and the following disclaimer in the
241dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project *    documentation and/or other materials provided with the distribution.
251dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * 3. All advertising materials mentioning features or use of this software
261dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project *    must display the following acknowledgement:
271dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project *	This product includes software developed by the University of
281dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project *	California, Berkeley and its contributors.
291dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * 4. Neither the name of the University nor the names of its contributors
301dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project *    may be used to endorse or promote products derived from this software
311dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project *    without specific prior written permission.
321dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project *
331dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
341dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
351dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
361dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
371dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
381dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
391dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
401dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
411dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
421dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
431dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * SUCH DAMAGE.
441dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project *
451dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project *	@(#)ieee.h	8.1 (Berkeley) 6/11/93
461dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project */
471dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project
481dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project/*
491dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * ieee.h defines the machine-dependent layout of the machine's IEEE
501dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * floating point.
511dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project */
521dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project
531dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project/*
541dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * Define the number of bits in each fraction and exponent.
551dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project *
561dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project *		     k	         k+1
571dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * Note that  1.0 x 2  == 0.1 x 2      and that denorms are represented
581dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project *
591dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project *					  (-exp_bias+1)
601dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * as fractions that look like 0.fffff x 2             .  This means that
611dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project *
621dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project *			 -126
631dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * the number 0.10000 x 2    , for instance, is the same as the normalized
641dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project *
651dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project *		-127			   -128
661dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * float 1.0 x 2    .  Thus, to represent 2    , we need one leading zero
671dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project *
681dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project *				  -129
691dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * in the fraction; to represent 2    , we need two, and so on.  This
701dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project *
711dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project *						     (-exp_bias-fracbits+1)
721dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * implies that the smallest denormalized number is 2
731dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project *
741dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * for whichever format we are talking about: for single precision, for
751dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project *
761dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project *						-126		-149
771dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * instance, we get .00000000000000000000001 x 2    , or 1.0 x 2    , and
781dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project *
791dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * -149 == -127 - 23 + 1.
801dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project */
811dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project
821dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project/*
831dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * The ARM has two sets of FP data formats.  The FPA supports 32-bit, 64-bit
841dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * and 96-bit IEEE formats, with the words in big-endian order.  VFP supports
851dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * 32-bin and 64-bit IEEE formats with the words in the CPU's native byte
861dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * order.
871dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project *
881dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * The FPA also has two packed decimal formats, but we ignore them here.
891dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project */
901dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project
911dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#define	SNG_EXPBITS	8
921dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#define	SNG_FRACBITS	23
931dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project
941dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#define	DBL_EXPBITS	11
951dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#define	DBL_FRACBITS	52
961dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project
971dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#ifndef __VFP_FP__
981dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#define	E80_EXPBITS	15
991dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#define	E80_FRACBITS	64
1001dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project
1011dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#define	EXT_EXPBITS	15
1021dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#define	EXT_FRACBITS	112
1031dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#endif
1041dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project
1051dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Projectstruct ieee_single {
1061dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project	u_int	sng_frac:23;
1071dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project	u_int	sng_exponent:8;
1081dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project	u_int	sng_sign:1;
1091dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project};
1101dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project
1111dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#ifdef __VFP_FP__
1121dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Projectstruct ieee_double {
1131dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#ifdef __ARMEB__
1141dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project	u_int	dbl_sign:1;
1151dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project	u_int	dbl_exp:11;
1161dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project	u_int	dbl_frach:20;
1171dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project	u_int	dbl_fracl;
1181dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#else /* !__ARMEB__ */
1191dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project	u_int	dbl_fracl;
1201dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project	u_int	dbl_frach:20;
1211dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project	u_int	dbl_exp:11;
1221dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project	u_int	dbl_sign:1;
1231dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#endif /* !__ARMEB__ */
1241dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project};
1251dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#else /* !__VFP_FP__ */
1261dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Projectstruct ieee_double {
1271dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project	u_int	dbl_frach:20;
1281dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project	u_int	dbl_exp:11;
1291dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project	u_int	dbl_sign:1;
1301dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project	u_int	dbl_fracl;
1311dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project};
1321dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project
1331dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Projectunion ieee_double_u {
1341dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project	double                  dblu_d;
1351dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project	struct ieee_double      dblu_dbl;
1361dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project};
1371dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project
1381dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project
1391dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Projectstruct ieee_e80 {
1401dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project	u_int	e80_exp:15;
1411dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project	u_int	e80_zero:16;
1421dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project	u_int	e80_sign:1;
1431dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project	u_int	e80_frach:31;
1441dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project	u_int	e80_j:1;
1451dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project	u_int	e80_fracl;
1461dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project};
1471dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project
1481dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Projectstruct ieee_ext {
1491dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project	u_int	ext_frach:16;
1501dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project	u_int	ext_exp:15;
1511dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project	u_int	ext_sign:1;
1521dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project	u_int	ext_frachm;
1531dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project	u_int	ext_fraclm;
1541dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project	u_int	ext_fracl;
1551dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project};
1561dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#endif /* !__VFP_FP__ */
1571dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project
1581dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project/*
1591dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * Floats whose exponent is in [1..INFNAN) (of whatever type) are
1601dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * `normal'.  Floats whose exponent is INFNAN are either Inf or NaN.
1611dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * Floats whose exponent is zero are either zero (iff all fraction
1621dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * bits are zero) or subnormal values.
1631dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project *
1641dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * A NaN is a `signalling NaN' if its QUIETNAN bit is clear in its
1651dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * high fraction; if the bit is set, it is a `quiet NaN'.
1661dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project */
1671dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#define	SNG_EXP_INFNAN	255
1681dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#define	DBL_EXP_INFNAN	2047
1691dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#ifndef __VFP_FP__
1701dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#define	E80_EXP_INFNAN	32767
1711dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#define	EXT_EXP_INFNAN	32767
1721dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#endif /* !__VFP_FP__ */
1731dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project
1741dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#if 0
1751dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#define	SNG_QUIETNAN	(1 << 22)
1761dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#define	DBL_QUIETNAN	(1 << 19)
1771dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#ifndef __VFP_FP__
1781dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#define	E80_QUIETNAN	(1 << 15)
1791dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#define	EXT_QUIETNAN	(1 << 15)
1801dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#endif /* !__VFP_FP__ */
1811dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#endif
1821dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project
1831dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project/*
1841dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * Exponent biases.
1851dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project */
1861dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#define	SNG_EXP_BIAS	127
1871dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#define	DBL_EXP_BIAS	1023
1881dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#ifndef __VFP_FP__
1891dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#define	E80_EXP_BIAS	16383
1901dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#define	EXT_EXP_BIAS	16383
1911dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#endif /* !__VFP_FP__ */
192