text: /* Copyright (C) 1992-2019 Free Software Foundation, Inc.
     This file is part of the GNU C Library.
  
     The GNU C Library is free software; you can redistribute it and/or
     modify it under the terms of the GNU Lesser General Public
     License as published by the Free Software Foundation; either
     version 2.1 of the License, or (at your option) any later version.
  
     The GNU C Library is distributed in the hope that it will be useful,
     but WITHOUT ANY WARRANTY; without even the implied warranty of
     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
     Lesser General Public License for more details.
  
     You should have received a copy of the GNU Lesser General Public
     License along with the GNU C Library; if not, see
     <http://www.gnu.org/licenses/>.  */
  
  #ifndef _IEEE754_H
  
  #define _IEEE754_H 1
  #include <features.h>
  
  #include <endian.h>
  
  __BEGIN_DECLS
  
  union ieee754_float
    {
      float f;
  
      /* This is the IEEE 754 single-precision format.  */
      struct
        {
  #if	__BYTE_ORDER == __BIG_ENDIAN
  	unsigned int negative:1;
  	unsigned int exponent:8;
  	unsigned int mantissa:23;
  #endif				/* Big endian.  */
  #if	__BYTE_ORDER == __LITTLE_ENDIAN
  	unsigned int mantissa:23;
  	unsigned int exponent:8;
  	unsigned int negative:1;
  #endif				/* Little endian.  */
        } ieee;
  
      /* This format makes it easier to see if a NaN is a signalling NaN.  */
      struct
        {
  #if	__BYTE_ORDER == __BIG_ENDIAN
  	unsigned int negative:1;
  	unsigned int exponent:8;
  	unsigned int quiet_nan:1;
  	unsigned int mantissa:22;
  #endif				/* Big endian.  */
  #if	__BYTE_ORDER == __LITTLE_ENDIAN
  	unsigned int mantissa:22;
  	unsigned int quiet_nan:1;
  	unsigned int exponent:8;
  	unsigned int negative:1;
  #endif				/* Little endian.  */
        } ieee_nan;
    };
  
  #define IEEE754_FLOAT_BIAS	0x7f /* Added to exponent.  */
  
  
  union ieee754_double
    {
      double d;
  
      /* This is the IEEE 754 double-precision format.  */
      struct
        {
  #if	__BYTE_ORDER == __BIG_ENDIAN
  	unsigned int negative:1;
  	unsigned int exponent:11;
  	/* Together these comprise the mantissa.  */
  	unsigned int mantissa0:20;
  	unsigned int mantissa1:32;
  #endif				/* Big endian.  */
  #if	__BYTE_ORDER == __LITTLE_ENDIAN
  	/* Together these comprise the mantissa.  */
  	unsigned int mantissa1:32;
  	unsigned int mantissa0:20;
  	unsigned int exponent:11;
  	unsigned int negative:1;
  #endif				/* Little endian.  */
        } ieee;
  
      /* This format makes it easier to see if a NaN is a signalling NaN.  */
      struct
        {
  #if	__BYTE_ORDER == __BIG_ENDIAN
  	unsigned int negative:1;
  	unsigned int exponent:11;
  	unsigned int quiet_nan:1;
  	/* Together these comprise the mantissa.  */
  	unsigned int mantissa0:19;
  	unsigned int mantissa1:32;
  #else
  	/* Together these comprise the mantissa.  */
  	unsigned int mantissa1:32;
  	unsigned int mantissa0:19;
  	unsigned int quiet_nan:1;
  	unsigned int exponent:11;
  	unsigned int negative:1;
  #endif
        } ieee_nan;
    };
  
  #define IEEE754_DOUBLE_BIAS	0x3ff /* Added to exponent.  */
  
  
  union ieee854_long_double
    {
      long double d;
  
      /* This is the IEEE 854 quad-precision format.  */
      struct
        {
  #if	__BYTE_ORDER == __BIG_ENDIAN
  	unsigned int negative:1;
  	unsigned int exponent:15;
  	/* Together these comprise the mantissa.  */
  	unsigned int mantissa0:16;
  	unsigned int mantissa1:32;
  	unsigned int mantissa2:32;
  	unsigned int mantissa3:32;
  #endif				/* Big endian.  */
  #if	__BYTE_ORDER == __LITTLE_ENDIAN
  	/* Together these comprise the mantissa.  */
  	unsigned int mantissa3:32;
  	unsigned int mantissa2:32;
  	unsigned int mantissa1:32;
  	unsigned int mantissa0:16;
  	unsigned int exponent:15;
  	unsigned int negative:1;
  #endif				/* Little endian.  */
        } ieee;
  
      /* This format makes it easier to see if a NaN is a signalling NaN.  */
      struct
        {
  #if	__BYTE_ORDER == __BIG_ENDIAN
  	unsigned int negative:1;
  	unsigned int exponent:15;
  	unsigned int quiet_nan:1;
  	/* Together these comprise the mantissa.  */
  	unsigned int mantissa0:15;
  	unsigned int mantissa1:32;
  	unsigned int mantissa2:32;
  	unsigned int mantissa3:32;
  #else
  	/* Together these comprise the mantissa.  */
  	unsigned int mantissa3:32;
  	unsigned int mantissa2:32;
  	unsigned int mantissa1:32;
  	unsigned int mantissa0:15;
  	unsigned int quiet_nan:1;
  	unsigned int exponent:15;
  	unsigned int negative:1;
  #endif
        } ieee_nan;
    };
  
  #define IEEE854_LONG_DOUBLE_BIAS 0x3fff /* Added to exponent.  */
  
  __END_DECLS
  
  #endif /* ieee754.h */
  