Blame sysdeps/m68k/bits/fenv.h

Packit 6c4009
/* Copyright (C) 1997-2018 Free Software Foundation, Inc.
Packit 6c4009
   This file is part of the GNU C Library.
Packit 6c4009
Packit 6c4009
   The GNU C Library is free software; you can redistribute it and/or
Packit 6c4009
   modify it under the terms of the GNU Lesser General Public
Packit 6c4009
   License as published by the Free Software Foundation; either
Packit 6c4009
   version 2.1 of the License, or (at your option) any later version.
Packit 6c4009
Packit 6c4009
   The GNU C Library is distributed in the hope that it will be useful,
Packit 6c4009
   but WITHOUT ANY WARRANTY; without even the implied warranty of
Packit 6c4009
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
Packit 6c4009
   Lesser General Public License for more details.
Packit 6c4009
Packit 6c4009
   You should have received a copy of the GNU Lesser General Public
Packit 6c4009
   License along with the GNU C Library.  If not, see
Packit 6c4009
   <http://www.gnu.org/licenses/>.  */
Packit 6c4009
Packit 6c4009
#ifndef _FENV_H
Packit 6c4009
# error "Never use <bits/fenv.h> directly; include <fenv.h> instead."
Packit 6c4009
#endif
Packit 6c4009
Packit 6c4009
Packit 6c4009
#if defined __HAVE_68881__ || defined __HAVE_FPU__ || defined __mcffpu__
Packit 6c4009
Packit 6c4009
/* Define bits representing the exception.  We use the bit positions of
Packit 6c4009
   the appropriate bits in the FPSR Accrued Exception Byte.  */
Packit 6c4009
enum
Packit 6c4009
  {
Packit 6c4009
    FE_INEXACT =
Packit 6c4009
# define FE_INEXACT	(1 << 3)
Packit 6c4009
      FE_INEXACT,
Packit 6c4009
    FE_DIVBYZERO =
Packit 6c4009
# define FE_DIVBYZERO	(1 << 4)
Packit 6c4009
      FE_DIVBYZERO,
Packit 6c4009
    FE_UNDERFLOW =
Packit 6c4009
# define FE_UNDERFLOW	(1 << 5)
Packit 6c4009
      FE_UNDERFLOW,
Packit 6c4009
    FE_OVERFLOW =
Packit 6c4009
# define FE_OVERFLOW	(1 << 6)
Packit 6c4009
      FE_OVERFLOW,
Packit 6c4009
    FE_INVALID =
Packit 6c4009
# define FE_INVALID	(1 << 7)
Packit 6c4009
      FE_INVALID
Packit 6c4009
  };
Packit 6c4009
Packit 6c4009
# define FE_ALL_EXCEPT \
Packit 6c4009
	(FE_INEXACT | FE_DIVBYZERO | FE_UNDERFLOW | FE_OVERFLOW | FE_INVALID)
Packit 6c4009
Packit 6c4009
/* The m68k FPU supports all of the four defined rounding modes.  We use
Packit 6c4009
   the bit positions in the FPCR Mode Control Byte as the values for the
Packit 6c4009
   appropriate macros.  */
Packit 6c4009
enum
Packit 6c4009
  {
Packit 6c4009
    FE_TONEAREST =
Packit 6c4009
# define FE_TONEAREST	0
Packit 6c4009
      FE_TONEAREST,
Packit 6c4009
    FE_TOWARDZERO =
Packit 6c4009
# define FE_TOWARDZERO	(1 << 4)
Packit 6c4009
      FE_TOWARDZERO,
Packit 6c4009
    FE_DOWNWARD =
Packit 6c4009
# define FE_DOWNWARD	(2 << 4)
Packit 6c4009
      FE_DOWNWARD,
Packit 6c4009
    FE_UPWARD =
Packit 6c4009
# define FE_UPWARD	(3 << 4)
Packit 6c4009
      FE_UPWARD
Packit 6c4009
  };
Packit 6c4009
Packit 6c4009
#else
Packit 6c4009
Packit 6c4009
/* In the soft-float case, only rounding to nearest is supported, with
Packit 6c4009
   no exceptions.  */
Packit 6c4009
Packit 6c4009
# define FE_ALL_EXCEPT 0
Packit 6c4009
Packit 6c4009
enum
Packit 6c4009
  {
Packit 6c4009
    __FE_UNDEFINED = -1,
Packit 6c4009
Packit 6c4009
    FE_TONEAREST =
Packit 6c4009
# define FE_TONEAREST	0
Packit 6c4009
      FE_TONEAREST
Packit 6c4009
  };
Packit 6c4009
Packit 6c4009
#endif
Packit 6c4009
Packit 6c4009
Packit 6c4009
/* Type representing exception flags.  */
Packit 6c4009
typedef unsigned int fexcept_t;
Packit 6c4009
Packit 6c4009
Packit 6c4009
#if defined __HAVE_68881__ || defined __HAVE_FPU__ || defined __mcffpu__
Packit 6c4009
Packit 6c4009
/* Type representing floating-point environment.  This structure
Packit 6c4009
   corresponds to the layout of the block written by `fmovem'.  */
Packit 6c4009
typedef struct
Packit 6c4009
  {
Packit 6c4009
    unsigned int __control_register;
Packit 6c4009
    unsigned int __status_register;
Packit 6c4009
    unsigned int __instruction_address;
Packit 6c4009
  }
Packit 6c4009
fenv_t;
Packit 6c4009
Packit 6c4009
#else
Packit 6c4009
Packit 6c4009
/* Keep ABI compatibility with the type used in the generic
Packit 6c4009
   bits/fenv.h, formerly used for no-FPU ColdFire.  */
Packit 6c4009
typedef struct
Packit 6c4009
  {
Packit 6c4009
    fexcept_t __excepts;
Packit 6c4009
  }
Packit 6c4009
fenv_t;
Packit 6c4009
Packit 6c4009
#endif
Packit 6c4009
Packit 6c4009
/* If the default argument is used we use this value.  */
Packit 6c4009
#define FE_DFL_ENV	((const fenv_t *) -1)
Packit 6c4009
Packit 6c4009
#if defined __USE_GNU && (defined __HAVE_68881__	\
Packit 6c4009
			  || defined __HAVE_FPU__	\
Packit 6c4009
			  || defined __mcffpu__)
Packit 6c4009
/* Floating-point environment where none of the exceptions are masked.  */
Packit 6c4009
# define FE_NOMASK_ENV	((const fenv_t *) -2)
Packit 6c4009
#endif
Packit 6c4009
Packit 6c4009
#if __GLIBC_USE (IEC_60559_BFP_EXT)
Packit 6c4009
/* Type representing floating-point control modes.  */
Packit 6c4009
typedef unsigned int femode_t;
Packit 6c4009
Packit 6c4009
/* Default floating-point control modes.  */
Packit 6c4009
# define FE_DFL_MODE	((const femode_t *) -1L)
Packit 6c4009
#endif