(root)/
glibc-2.38/
sysdeps/
aarch64/
bits/
fenv.h
       1  /* Copyright (C) 2004-2023 Free Software Foundation, Inc.
       2  
       3     This file is part of the GNU C Library.
       4  
       5     The GNU C Library is free software; you can redistribute it and/or
       6     modify it under the terms of the GNU Lesser General Public License as
       7     published by the Free Software Foundation; either version 2.1 of the
       8     License, or (at your option) any later version.
       9  
      10     The GNU C Library is distributed in the hope that it will be useful,
      11     but WITHOUT ANY WARRANTY; without even the implied warranty of
      12     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
      13     Lesser General Public License for more details.
      14  
      15     You should have received a copy of the GNU Lesser General Public
      16     License along with the GNU C Library; if not, see
      17     <https://www.gnu.org/licenses/>.  */
      18  
      19  #ifndef _FENV_H
      20  # error "Never use <bits/fenv.h> directly; include <fenv.h> instead."
      21  #endif
      22  
      23  /* Define bits representing exceptions in the FPSR status word.  */
      24  enum
      25    {
      26      FE_INVALID =
      27  #define FE_INVALID	1
      28        FE_INVALID,
      29      FE_DIVBYZERO =
      30  #define FE_DIVBYZERO	2
      31        FE_DIVBYZERO,
      32      FE_OVERFLOW =
      33  #define FE_OVERFLOW	4
      34        FE_OVERFLOW,
      35      FE_UNDERFLOW =
      36  #define FE_UNDERFLOW	8
      37        FE_UNDERFLOW,
      38      FE_INEXACT =
      39  #define FE_INEXACT	16
      40        FE_INEXACT,
      41    };
      42  
      43  /* Amount to shift by to convert an exception bit in FPSR to a an
      44     exception bit mask in FPCR.  */
      45  #define FE_EXCEPT_SHIFT	8
      46  
      47  /* All supported exceptions.  */
      48  #define FE_ALL_EXCEPT	\
      49  	(FE_INVALID | FE_DIVBYZERO | FE_OVERFLOW | FE_UNDERFLOW | FE_INEXACT)
      50  
      51  /* Define bits representing rounding modes in the FPCR Rmode field.  */
      52  #define FE_TONEAREST  0x000000
      53  #define FE_UPWARD     0x400000
      54  #define FE_DOWNWARD   0x800000
      55  #define FE_TOWARDZERO 0xc00000
      56  
      57  /* Type representing exception flags. */
      58  typedef unsigned int fexcept_t;
      59  
      60  /* Type representing floating-point environment.  */
      61  typedef struct
      62    {
      63      unsigned int __fpcr;
      64      unsigned int __fpsr;
      65    }
      66  fenv_t;
      67  
      68  /* If the default argument is used we use this value.  */
      69  #define FE_DFL_ENV	((const fenv_t *) -1l)
      70  
      71  #ifdef __USE_GNU
      72  /* Floating-point environment where none of the exceptions are masked.  */
      73  # define FE_NOMASK_ENV  ((const fenv_t *) -2)
      74  #endif
      75  
      76  #if __GLIBC_USE (IEC_60559_BFP_EXT_C2X)
      77  /* Type representing floating-point control modes.  */
      78  typedef unsigned int femode_t;
      79  
      80  /* Default floating-point control modes.  */
      81  # define FE_DFL_MODE	((const femode_t *) -1L)
      82  #endif