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