]> git.ipfire.org Git - thirdparty/glibc.git/blame - math/fenv.h
Improve __ieee754_exp() performance by greater than 5x on sparc/x86.
[thirdparty/glibc.git] / math / fenv.h
CommitLineData
bfff8b1b 1/* Copyright (C) 1997-2017 Free Software Foundation, Inc.
63551311
UD
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
41bdb6e2
AJ
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.
63551311
UD
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
41bdb6e2 12 Lesser General Public License for more details.
63551311 13
41bdb6e2 14 You should have received a copy of the GNU Lesser General Public
59ba27a6
PE
15 License along with the GNU C Library; if not, see
16 <http://www.gnu.org/licenses/>. */
63551311
UD
17
18/*
63ae7b63 19 * ISO C99 7.6: Floating-point environment <fenv.h>
63551311
UD
20 */
21
22#ifndef _FENV_H
779ae82e 23#define _FENV_H 1
5107cf1d 24
5146356f
JM
25#define __GLIBC_INTERNAL_STARTING_HEADER_IMPLEMENTATION
26#include <bits/libc-header-start.h>
63551311
UD
27
28/* Get the architecture dependend definitions. The following definitions
29 are expected to be done:
30
31 fenv_t type for object representing an entire floating-point
32 environment
33
34 FE_DFL_ENV macro of type pointer to fenv_t to be used as the argument
35 to functions taking an argument of type fenv_t; in this
36 case the default environment will be used
37
38 fexcept_t type for object representing the floating-point exception
39 flags including status associated with the flags
40
ec94343f
JM
41 femode_t type for object representing floating-point control modes
42
43 FE_DFL_MODE macro of type pointer to const femode_t to be used as the
44 argument to fesetmode; in this case the default control
45 modes will be used
46
63551311
UD
47 The following macros are defined iff the implementation supports this
48 kind of exception.
779ae82e 49 FE_INEXACT inexact result
8267e47b 50 FE_DIVBYZERO division by zero
63551311
UD
51 FE_UNDERFLOW result not representable due to underflow
52 FE_OVERFLOW result not representable due to overflow
53 FE_INVALID invalid operation
54
55 FE_ALL_EXCEPT bitwise OR of all supported exceptions
56
57 The next macros are defined iff the appropriate rounding mode is
58 supported by the implementation.
59 FE_TONEAREST round to nearest
60 FE_UPWARD round toward +Inf
61 FE_DOWNWARD round toward -Inf
62 FE_TOWARDZERO round toward 0
63*/
5107cf1d 64#include <bits/fenv.h>
63551311
UD
65
66__BEGIN_DECLS
67
68/* Floating-point exception handling. */
69
70/* Clear the supported exceptions represented by EXCEPTS. */
63ae7b63 71extern int feclearexcept (int __excepts) __THROW;
63551311
UD
72
73/* Store implementation-defined representation of the exception flags
74 indicated by EXCEPTS in the object pointed to by FLAGP. */
63ae7b63 75extern int fegetexceptflag (fexcept_t *__flagp, int __excepts) __THROW;
63551311
UD
76
77/* Raise the supported exceptions represented by EXCEPTS. */
63ae7b63 78extern int feraiseexcept (int __excepts) __THROW;
63551311 79
5146356f
JM
80#if __GLIBC_USE (IEC_60559_BFP_EXT)
81/* Set the supported exception flags represented by EXCEPTS, without
82 causing enabled traps to be taken. */
83extern int fesetexcept (int __excepts) __THROW;
84#endif
85
1f205a47 86/* Set complete status for exceptions indicated by EXCEPTS according to
63551311 87 the representation in the object pointed to by FLAGP. */
a784e502 88extern int fesetexceptflag (const fexcept_t *__flagp, int __excepts) __THROW;
63551311
UD
89
90/* Determine which of subset of the exceptions specified by EXCEPTS are
91 currently set. */
4d3a563f 92extern int fetestexcept (int __excepts) __THROW;
63551311 93
780257d4
JM
94#if __GLIBC_USE (IEC_60559_BFP_EXT)
95/* Determine which of subset of the exceptions specified by EXCEPTS
96 are set in *FLAGP. */
97extern int fetestexceptflag (const fexcept_t *__flagp, int __excepts) __THROW;
98#endif
99
63551311
UD
100
101/* Rounding control. */
102
103/* Get current rounding direction. */
223d1cac 104extern int fegetround (void) __THROW __attribute_pure__;
63551311
UD
105
106/* Establish the rounding direction represented by ROUND. */
4d3a563f 107extern int fesetround (int __rounding_direction) __THROW;
63551311
UD
108
109
110/* Floating-point environment. */
111
112/* Store the current floating-point environment in the object pointed
113 to by ENVP. */
63ae7b63 114extern int fegetenv (fenv_t *__envp) __THROW;
63551311
UD
115
116/* Save the current environment in the object pointed to by ENVP, clear
117 exception flags and install a non-stop mode (if available) for all
118 exceptions. */
4d3a563f 119extern int feholdexcept (fenv_t *__envp) __THROW;
63551311
UD
120
121/* Establish the floating-point environment represented by the object
122 pointed to by ENVP. */
a784e502 123extern int fesetenv (const fenv_t *__envp) __THROW;
63551311
UD
124
125/* Save current exceptions in temporary storage, install environment
126 represented by object pointed to by ENVP and raise exceptions
127 according to saved exceptions. */
a784e502 128extern int feupdateenv (const fenv_t *__envp) __THROW;
63551311 129
7ad6d73d 130
ec94343f
JM
131/* Control modes. */
132
133#if __GLIBC_USE (IEC_60559_BFP_EXT)
134/* Store the current floating-point control modes in the object
135 pointed to by MODEP. */
136extern int fegetmode (femode_t *__modep) __THROW;
137
138/* Establish the floating-point control modes represented by the
139 object pointed to by MODEP. */
140extern int fesetmode (const femode_t *__modep) __THROW;
141#endif
142
7ad6d73d
UD
143/* Include optimization. */
144#ifdef __OPTIMIZE__
145# include <bits/fenvinline.h>
146#endif
147
c0b43536
JM
148/* NaN support. */
149
150#if (__GLIBC_USE (IEC_60559_BFP_EXT) \
151 && defined FE_INVALID \
152 && defined __SUPPORT_SNAN__)
153# define FE_SNANS_ALWAYS_SIGNAL 1
154#endif
155
05ef7ce9
UD
156#ifdef __USE_GNU
157
158/* Enable individual exceptions. Will not enable more exceptions than
159 EXCEPTS specifies. Returns the previous enabled exceptions if all
6e8afc1c 160 exceptions are successfully set, otherwise returns -1. */
05ef7ce9
UD
161extern int feenableexcept (int __excepts) __THROW;
162
163/* Disable individual exceptions. Will not disable more exceptions than
164 EXCEPTS specifies. Returns the previous enabled exceptions if all
6e8afc1c 165 exceptions are successfully disabled, otherwise returns -1. */
05ef7ce9
UD
166extern int fedisableexcept (int __excepts) __THROW;
167
168/* Return enabled exceptions. */
169extern int fegetexcept (void) __THROW;
170#endif
171
63551311
UD
172__END_DECLS
173
174#endif /* fenv.h */