1*8d67ca89SAndroid Build Coastguard Worker /* $OpenBSD: ieee.h,v 1.4 2011/11/08 17:06:51 deraadt Exp $ */ 2*8d67ca89SAndroid Build Coastguard Worker /* $NetBSD: ieee.h,v 1.2 2001/02/21 17:43:50 bjh21 Exp $ */ 3*8d67ca89SAndroid Build Coastguard Worker 4*8d67ca89SAndroid Build Coastguard Worker /* 5*8d67ca89SAndroid Build Coastguard Worker * Copyright (c) 1992, 1993 6*8d67ca89SAndroid Build Coastguard Worker * The Regents of the University of California. All rights reserved. 7*8d67ca89SAndroid Build Coastguard Worker * 8*8d67ca89SAndroid Build Coastguard Worker * This software was developed by the Computer Systems Engineering group 9*8d67ca89SAndroid Build Coastguard Worker * at Lawrence Berkeley Laboratory under DARPA contract BG 91-66 and 10*8d67ca89SAndroid Build Coastguard Worker * contributed to Berkeley. 11*8d67ca89SAndroid Build Coastguard Worker * 12*8d67ca89SAndroid Build Coastguard Worker * All advertising materials mentioning features or use of this software 13*8d67ca89SAndroid Build Coastguard Worker * must display the following acknowledgement: 14*8d67ca89SAndroid Build Coastguard Worker * This product includes software developed by the University of 15*8d67ca89SAndroid Build Coastguard Worker * California, Lawrence Berkeley Laboratory. 16*8d67ca89SAndroid Build Coastguard Worker * 17*8d67ca89SAndroid Build Coastguard Worker * Redistribution and use in source and binary forms, with or without 18*8d67ca89SAndroid Build Coastguard Worker * modification, are permitted provided that the following conditions 19*8d67ca89SAndroid Build Coastguard Worker * are met: 20*8d67ca89SAndroid Build Coastguard Worker * 1. Redistributions of source code must retain the above copyright 21*8d67ca89SAndroid Build Coastguard Worker * notice, this list of conditions and the following disclaimer. 22*8d67ca89SAndroid Build Coastguard Worker * 2. Redistributions in binary form must reproduce the above copyright 23*8d67ca89SAndroid Build Coastguard Worker * notice, this list of conditions and the following disclaimer in the 24*8d67ca89SAndroid Build Coastguard Worker * documentation and/or other materials provided with the distribution. 25*8d67ca89SAndroid Build Coastguard Worker * 3. All advertising materials mentioning features or use of this software 26*8d67ca89SAndroid Build Coastguard Worker * must display the following acknowledgement: 27*8d67ca89SAndroid Build Coastguard Worker * This product includes software developed by the University of 28*8d67ca89SAndroid Build Coastguard Worker * California, Berkeley and its contributors. 29*8d67ca89SAndroid Build Coastguard Worker * 4. Neither the name of the University nor the names of its contributors 30*8d67ca89SAndroid Build Coastguard Worker * may be used to endorse or promote products derived from this software 31*8d67ca89SAndroid Build Coastguard Worker * without specific prior written permission. 32*8d67ca89SAndroid Build Coastguard Worker * 33*8d67ca89SAndroid Build Coastguard Worker * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND 34*8d67ca89SAndroid Build Coastguard Worker * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 35*8d67ca89SAndroid Build Coastguard Worker * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 36*8d67ca89SAndroid Build Coastguard Worker * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE 37*8d67ca89SAndroid Build Coastguard Worker * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 38*8d67ca89SAndroid Build Coastguard Worker * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 39*8d67ca89SAndroid Build Coastguard Worker * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 40*8d67ca89SAndroid Build Coastguard Worker * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 41*8d67ca89SAndroid Build Coastguard Worker * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 42*8d67ca89SAndroid Build Coastguard Worker * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 43*8d67ca89SAndroid Build Coastguard Worker * SUCH DAMAGE. 44*8d67ca89SAndroid Build Coastguard Worker * 45*8d67ca89SAndroid Build Coastguard Worker * @(#)ieee.h 8.1 (Berkeley) 6/11/93 46*8d67ca89SAndroid Build Coastguard Worker */ 47*8d67ca89SAndroid Build Coastguard Worker 48*8d67ca89SAndroid Build Coastguard Worker #ifndef _MACHINE_IEEE_H_ 49*8d67ca89SAndroid Build Coastguard Worker #define _MACHINE_IEEE_H_ 50*8d67ca89SAndroid Build Coastguard Worker 51*8d67ca89SAndroid Build Coastguard Worker #include <sys/types.h> 52*8d67ca89SAndroid Build Coastguard Worker 53*8d67ca89SAndroid Build Coastguard Worker __BEGIN_DECLS 54*8d67ca89SAndroid Build Coastguard Worker 55*8d67ca89SAndroid Build Coastguard Worker #define SNG_EXPBITS 8 56*8d67ca89SAndroid Build Coastguard Worker #define SNG_FRACBITS 23 57*8d67ca89SAndroid Build Coastguard Worker 58*8d67ca89SAndroid Build Coastguard Worker #define SNG_EXP_INFNAN 255 59*8d67ca89SAndroid Build Coastguard Worker #define SNG_EXP_BIAS 127 60*8d67ca89SAndroid Build Coastguard Worker 61*8d67ca89SAndroid Build Coastguard Worker struct ieee_single { 62*8d67ca89SAndroid Build Coastguard Worker unsigned sng_frac:23; 63*8d67ca89SAndroid Build Coastguard Worker unsigned sng_exp:8; 64*8d67ca89SAndroid Build Coastguard Worker unsigned sng_sign:1; 65*8d67ca89SAndroid Build Coastguard Worker }; 66*8d67ca89SAndroid Build Coastguard Worker 67*8d67ca89SAndroid Build Coastguard Worker #define DBL_EXPBITS 11 68*8d67ca89SAndroid Build Coastguard Worker #define DBL_FRACHBITS 20 69*8d67ca89SAndroid Build Coastguard Worker #define DBL_FRACLBITS 32 70*8d67ca89SAndroid Build Coastguard Worker #define DBL_FRACBITS 52 71*8d67ca89SAndroid Build Coastguard Worker 72*8d67ca89SAndroid Build Coastguard Worker #define DBL_EXP_INFNAN 2047 73*8d67ca89SAndroid Build Coastguard Worker #define DBL_EXP_BIAS 1023 74*8d67ca89SAndroid Build Coastguard Worker 75*8d67ca89SAndroid Build Coastguard Worker struct ieee_double { 76*8d67ca89SAndroid Build Coastguard Worker unsigned dbl_fracl; 77*8d67ca89SAndroid Build Coastguard Worker unsigned dbl_frach:20; 78*8d67ca89SAndroid Build Coastguard Worker unsigned dbl_exp:11; 79*8d67ca89SAndroid Build Coastguard Worker unsigned dbl_sign:1; 80*8d67ca89SAndroid Build Coastguard Worker }; 81*8d67ca89SAndroid Build Coastguard Worker 82*8d67ca89SAndroid Build Coastguard Worker #if defined(__LP64__) 83*8d67ca89SAndroid Build Coastguard Worker 84*8d67ca89SAndroid Build Coastguard Worker /* 64-bit Android uses ld128 long doubles. */ 85*8d67ca89SAndroid Build Coastguard Worker 86*8d67ca89SAndroid Build Coastguard Worker #define EXT_EXPBITS 15 87*8d67ca89SAndroid Build Coastguard Worker #define EXT_FRACHBITS 16 88*8d67ca89SAndroid Build Coastguard Worker #define EXT_FRACHMBITS 32 89*8d67ca89SAndroid Build Coastguard Worker #define EXT_FRACLMBITS 32 90*8d67ca89SAndroid Build Coastguard Worker #define EXT_FRACLBITS 32 91*8d67ca89SAndroid Build Coastguard Worker #define EXT_FRACBITS 112 92*8d67ca89SAndroid Build Coastguard Worker 93*8d67ca89SAndroid Build Coastguard Worker #define EXT_EXP_INFNAN 32767 94*8d67ca89SAndroid Build Coastguard Worker #define EXT_EXP_BIAS 16383 95*8d67ca89SAndroid Build Coastguard Worker 96*8d67ca89SAndroid Build Coastguard Worker #define EXT_IMPLICIT_NBIT 97*8d67ca89SAndroid Build Coastguard Worker 98*8d67ca89SAndroid Build Coastguard Worker #define EXT_TO_ARRAY32(p, a) do { \ 99*8d67ca89SAndroid Build Coastguard Worker (a)[0] = (uint32_t)(p)->ext_fracl; \ 100*8d67ca89SAndroid Build Coastguard Worker (a)[1] = (uint32_t)(p)->ext_fraclm; \ 101*8d67ca89SAndroid Build Coastguard Worker (a)[2] = (uint32_t)(p)->ext_frachm; \ 102*8d67ca89SAndroid Build Coastguard Worker (a)[3] = (uint32_t)(p)->ext_frach; \ 103*8d67ca89SAndroid Build Coastguard Worker } while(0) 104*8d67ca89SAndroid Build Coastguard Worker 105*8d67ca89SAndroid Build Coastguard Worker struct ieee_ext { 106*8d67ca89SAndroid Build Coastguard Worker unsigned ext_fracl; 107*8d67ca89SAndroid Build Coastguard Worker unsigned ext_fraclm; 108*8d67ca89SAndroid Build Coastguard Worker unsigned ext_frachm; 109*8d67ca89SAndroid Build Coastguard Worker unsigned ext_frach:16; 110*8d67ca89SAndroid Build Coastguard Worker unsigned ext_exp:15; 111*8d67ca89SAndroid Build Coastguard Worker unsigned ext_sign:1; 112*8d67ca89SAndroid Build Coastguard Worker }; 113*8d67ca89SAndroid Build Coastguard Worker 114*8d67ca89SAndroid Build Coastguard Worker #endif 115*8d67ca89SAndroid Build Coastguard Worker 116*8d67ca89SAndroid Build Coastguard Worker __END_DECLS 117*8d67ca89SAndroid Build Coastguard Worker 118*8d67ca89SAndroid Build Coastguard Worker #endif /* _MACHINE_IEEE_H_ */ 119