1 /* Copyright (C) 2004-2022 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 83