zig

fork of https://codeberg.org/ziglang/zig
Log | Files | Refs | README | LICENSE

fenv.h (2471B) - Raw


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