Blame sysdeps/ieee754/ldbl-128ibm/ieee754.h

Packit Service 82fcde
/* Copyright (C) 1992-2018 Free Software Foundation, Inc.
Packit Service 82fcde
   This file is part of the GNU C Library.
Packit Service 82fcde
Packit Service 82fcde
   The GNU C Library is free software; you can redistribute it and/or
Packit Service 82fcde
   modify it under the terms of the GNU Lesser General Public
Packit Service 82fcde
   License as published by the Free Software Foundation; either
Packit Service 82fcde
   version 2.1 of the License, or (at your option) any later version.
Packit Service 82fcde
Packit Service 82fcde
   The GNU C Library is distributed in the hope that it will be useful,
Packit Service 82fcde
   but WITHOUT ANY WARRANTY; without even the implied warranty of
Packit Service 82fcde
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
Packit Service 82fcde
   Lesser General Public License for more details.
Packit Service 82fcde
Packit Service 82fcde
   You should have received a copy of the GNU Lesser General Public
Packit Service 82fcde
   License along with the GNU C Library; if not, see
Packit Service 82fcde
   <http://www.gnu.org/licenses/>.  */
Packit Service 82fcde
Packit Service 82fcde
#ifndef _IEEE754_H
Packit Service 82fcde
Packit Service 82fcde
#define _IEEE754_H 1
Packit Service 82fcde
#include <features.h>
Packit Service 82fcde
Packit Service 82fcde
#include <endian.h>
Packit Service 82fcde
Packit Service 82fcde
__BEGIN_DECLS
Packit Service 82fcde
Packit Service 82fcde
union ieee754_float
Packit Service 82fcde
  {
Packit Service 82fcde
    float f;
Packit Service 82fcde
Packit Service 82fcde
    /* This is the IEEE 754 single-precision format.  */
Packit Service 82fcde
    struct
Packit Service 82fcde
      {
Packit Service 82fcde
#if	__BYTE_ORDER == __BIG_ENDIAN
Packit Service 82fcde
	unsigned int negative:1;
Packit Service 82fcde
	unsigned int exponent:8;
Packit Service 82fcde
	unsigned int mantissa:23;
Packit Service 82fcde
#endif				/* Big endian.  */
Packit Service 82fcde
#if	__BYTE_ORDER == __LITTLE_ENDIAN
Packit Service 82fcde
	unsigned int mantissa:23;
Packit Service 82fcde
	unsigned int exponent:8;
Packit Service 82fcde
	unsigned int negative:1;
Packit Service 82fcde
#endif				/* Little endian.  */
Packit Service 82fcde
      } ieee;
Packit Service 82fcde
Packit Service 82fcde
    /* This format makes it easier to see if a NaN is a signalling NaN.  */
Packit Service 82fcde
    struct
Packit Service 82fcde
      {
Packit Service 82fcde
#if	__BYTE_ORDER == __BIG_ENDIAN
Packit Service 82fcde
	unsigned int negative:1;
Packit Service 82fcde
	unsigned int exponent:8;
Packit Service 82fcde
	unsigned int quiet_nan:1;
Packit Service 82fcde
	unsigned int mantissa:22;
Packit Service 82fcde
#endif				/* Big endian.  */
Packit Service 82fcde
#if	__BYTE_ORDER == __LITTLE_ENDIAN
Packit Service 82fcde
	unsigned int mantissa:22;
Packit Service 82fcde
	unsigned int quiet_nan:1;
Packit Service 82fcde
	unsigned int exponent:8;
Packit Service 82fcde
	unsigned int negative:1;
Packit Service 82fcde
#endif				/* Little endian.  */
Packit Service 82fcde
      } ieee_nan;
Packit Service 82fcde
  };
Packit Service 82fcde
Packit Service 82fcde
#define IEEE754_FLOAT_BIAS	0x7f /* Added to exponent.  */
Packit Service 82fcde
Packit Service 82fcde
Packit Service 82fcde
union ieee754_double
Packit Service 82fcde
  {
Packit Service 82fcde
    double d;
Packit Service 82fcde
Packit Service 82fcde
    /* This is the IEEE 754 double-precision format.  */
Packit Service 82fcde
    struct
Packit Service 82fcde
      {
Packit Service 82fcde
#if	__BYTE_ORDER == __BIG_ENDIAN
Packit Service 82fcde
	unsigned int negative:1;
Packit Service 82fcde
	unsigned int exponent:11;
Packit Service 82fcde
	/* Together these comprise the mantissa.  */
Packit Service 82fcde
	unsigned int mantissa0:20;
Packit Service 82fcde
	unsigned int mantissa1:32;
Packit Service 82fcde
#endif				/* Big endian.  */
Packit Service 82fcde
#if	__BYTE_ORDER == __LITTLE_ENDIAN
Packit Service 82fcde
	/* Together these comprise the mantissa.  */
Packit Service 82fcde
	unsigned int mantissa1:32;
Packit Service 82fcde
	unsigned int mantissa0:20;
Packit Service 82fcde
	unsigned int exponent:11;
Packit Service 82fcde
	unsigned int negative:1;
Packit Service 82fcde
#endif				/* Little endian.  */
Packit Service 82fcde
      } ieee;
Packit Service 82fcde
Packit Service 82fcde
    /* This format makes it easier to see if a NaN is a signalling NaN.  */
Packit Service 82fcde
    struct
Packit Service 82fcde
      {
Packit Service 82fcde
#if	__BYTE_ORDER == __BIG_ENDIAN
Packit Service 82fcde
	unsigned int negative:1;
Packit Service 82fcde
	unsigned int exponent:11;
Packit Service 82fcde
	unsigned int quiet_nan:1;
Packit Service 82fcde
	/* Together these comprise the mantissa.  */
Packit Service 82fcde
	unsigned int mantissa0:19;
Packit Service 82fcde
	unsigned int mantissa1:32;
Packit Service 82fcde
#else
Packit Service 82fcde
	/* Together these comprise the mantissa.  */
Packit Service 82fcde
	unsigned int mantissa1:32;
Packit Service 82fcde
	unsigned int mantissa0:19;
Packit Service 82fcde
	unsigned int quiet_nan:1;
Packit Service 82fcde
	unsigned int exponent:11;
Packit Service 82fcde
	unsigned int negative:1;
Packit Service 82fcde
#endif
Packit Service 82fcde
      } ieee_nan;
Packit Service 82fcde
  };
Packit Service 82fcde
Packit Service 82fcde
#define IEEE754_DOUBLE_BIAS	0x3ff /* Added to exponent.  */
Packit Service 82fcde
Packit Service 82fcde
Packit Service 82fcde
/* IBM extended format for long double.
Packit Service 82fcde
Packit Service 82fcde
   Each long double is made up of two IEEE doubles.  The value of the
Packit Service 82fcde
   long double is the sum of the values of the two parts.  The most
Packit Service 82fcde
   significant part is required to be the value of the long double
Packit Service 82fcde
   rounded to the nearest double, as specified by IEEE.  For Inf
Packit Service 82fcde
   values, the least significant part is required to be one of +0.0 or
Packit Service 82fcde
   -0.0.  No other requirements are made; so, for example, 1.0 may be
Packit Service 82fcde
   represented as (1.0, +0.0) or (1.0, -0.0), and the low part of a
Packit Service 82fcde
   NaN is don't-care.  */
Packit Service 82fcde
Packit Service 82fcde
union ibm_extended_long_double
Packit Service 82fcde
  {
Packit Service 82fcde
    long double ld;
Packit Service 82fcde
    union ieee754_double d[2];
Packit Service 82fcde
   };
Packit Service 82fcde
Packit Service 82fcde
__END_DECLS
Packit Service 82fcde
Packit Service 82fcde
#endif /* ieee754.h */