/* Copyright (C) 1997, 1998, 1999, 2000, 2001 Free Software Foundation, Inc. This file is part of the GNU C Library. The GNU C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. The GNU C Library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with the GNU C Library; if not, see . */ #ifndef _FENV_H # error "Never use directly; include instead." #endif /* $cs register number for use in kvx builtins */ #define KVX_SFR_CS 4 /* Each core of the Coolidge processor has a coprocessor. They share the CS register but have distinct bit-fields for their floating-point environment. This implementation synchronizes them in such a way that they cannot be managed separately. */ /* Compute Status ($cs) register contains the following bit-fields for floating-point execption flags. Bit-field Condition of the IEEE 754 binary floating-point standard --------- -------------------------------------------------------- IO Invalid Operation DZ Divide by Zero OV Overflow UN Underflow IN Inexact XIO Invalid Operation (coprocessor) XDZ Divide by Zero (coprocessor) XOV Overflow (coprocessor) XUN Underflow (coprocessor) XIN Inexact (coprocessor) */ #define _FE_INVALID 0x02 #define _FE_DIVBYZERO 0x04 #define _FE_OVERFLOW 0x08 #define _FE_UNDERFLOW 0x10 #define _FE_INEXACT 0x20 #define _FE_X_INVALID 0x0200 #define _FE_X_DIVBYZERO 0x0400 #define _FE_X_OVERFLOW 0x0800 #define _FE_X_UNDERFLOW 0x1000 #define _FE_X_INEXACT 0x2000 #define FE_INVALID (_FE_INVALID | _FE_X_INVALID) #define FE_DIVBYZERO (_FE_DIVBYZERO | _FE_X_DIVBYZERO) #define FE_OVERFLOW (_FE_OVERFLOW | _FE_X_OVERFLOW) #define FE_UNDERFLOW (_FE_UNDERFLOW | _FE_X_UNDERFLOW) #define FE_INEXACT (_FE_INEXACT | _FE_X_INEXACT) #define FE_ALL_EXCEPT (FE_INVALID|FE_DIVBYZERO|FE_OVERFLOW|FE_UNDERFLOW|FE_INEXACT) /* Compute Status ($cs) register contains the following bit-fields for floating-point rounding modes. Following table describes both the RM and XRM (coproc) bit-fields. Value Rounding Mode of the IEEE 754 binary floating-point standard ----- ------------------------------------------------------------ 0b00 to nearest even 0b01 toward +inf 0b10 toward -inf 0b11 toward zero */ #define _FE_TONEAREST 0 #define _FE_UPWARD 1 #define _FE_DOWNWARD 2 #define _FE_TOWARDZERO 3 #define _FE_X_TONEAREST 0 #define _FE_X_UPWARD 1 #define _FE_X_DOWNWARD 2 #define _FE_X_TOWARDZERO 3 #define FE_TONEAREST ((_FE_TONEAREST << 16) | (_FE_X_TONEAREST << 20)) #define FE_UPWARD ((_FE_UPWARD << 16) | (_FE_X_UPWARD << 20)) #define FE_DOWNWARD ((_FE_DOWNWARD << 16) | (_FE_X_DOWNWARD << 20)) #define FE_TOWARDZERO ((_FE_TOWARDZERO << 16) | (_FE_X_TOWARDZERO << 20)) #define FE_RND_MASK FE_TOWARDZERO /* The type representing all floating-point status flags collectively. The environment is simply a copy from the FPU related bits in the CS register, but can be improved in the future. */ typedef unsigned int fexcept_t; /* The type representing the entire floating-point environment. The environment is simply a copy from the FPU related bits in the CS register. */ typedef unsigned int fenv_t; extern const fenv_t __fe_dfl_env; #define FE_DFL_ENV __fe_dfl_env