]> git.ipfire.org Git - thirdparty/glibc.git/blame - include/fenv.h
ldbl-opt: Add argp_error and argp_failure (bug 23983)
[thirdparty/glibc.git] / include / fenv.h
CommitLineData
ed073f0e 1#ifndef _FENV_H
7cabd57c 2#include <math/fenv.h>
ed073f0e 3
a68d0680 4#ifndef _ISOMAC
b92a20b5 5# include <stdbool.h>
ed073f0e
AJ
6/* Now define the internal interfaces. */
7
8extern int __feclearexcept (int __excepts);
246ec411 9extern int __fegetexcept (void);
ed073f0e
AJ
10extern int __fegetexceptflag (fexcept_t *__flagp, int __excepts);
11extern int __feraiseexcept (int __excepts);
a784e502 12extern int __fesetexceptflag (const fexcept_t *__flagp, int __excepts);
ed073f0e 13extern int __fegetenv (fenv_t *__envp);
a784e502
UD
14extern int __fesetenv (const fenv_t *__envp);
15extern int __feupdateenv (const fenv_t *__envp);
223d1cac 16extern __typeof (fegetround) __fegetround __attribute_pure__;
ef9faf13 17extern __typeof (feholdexcept) __feholdexcept;
01238691 18extern __typeof (fesetround) __fesetround;
ed073f0e 19
76f2646f 20libm_hidden_proto (feraiseexcept)
0747f818 21libm_hidden_proto (__feraiseexcept)
7eb22e75 22libm_hidden_proto (fegetenv)
73a268c7 23libm_hidden_proto (__fegetenv)
3c1c46a6 24libm_hidden_proto (fegetround)
b93c2205 25libm_hidden_proto (__fegetround)
76f2646f 26libm_hidden_proto (fesetenv)
cd42798a 27libm_hidden_proto (__fesetenv)
9b8a7277 28libm_hidden_proto (fesetround)
01238691 29libm_hidden_proto (__fesetround)
9b8a7277 30libm_hidden_proto (feholdexcept)
ef9faf13 31libm_hidden_proto (__feholdexcept)
9ff8d36f 32libm_hidden_proto (feupdateenv)
8116321f 33libm_hidden_proto (__feupdateenv)
9ff8d36f 34libm_hidden_proto (fetestexcept)
5b5b04d6 35libm_hidden_proto (feclearexcept)
76f2646f 36
25061094
SP
37/* Rounding mode context. This allows functions to set/restore rounding mode
38 only when the desired rounding mode is different from the current rounding
39 mode. */
40struct rm_ctx
41{
42 fenv_t env;
43 bool updated_status;
44};
b1c347e2
JM
45
46/* Track whether rounding mode macros were defined, since
47 get-rounding-mode.h may define default versions if they weren't.
48 FE_TONEAREST must always be defined (even if no changes of rounding
49 mode are supported, glibc requires it to be defined to represent
50 the default rounding mode). */
51# ifndef FE_TONEAREST
52# error "FE_TONEAREST not defined"
53# endif
54# if defined FE_DOWNWARD || defined FE_TOWARDZERO || defined FE_UPWARD
55# define FE_HAVE_ROUNDING_MODES 1
56# else
57# define FE_HAVE_ROUNDING_MODES 0
58# endif
59
418d99e6
JM
60/* When no floating-point exceptions are defined in <fenv.h>, make
61 feraiseexcept ignore its argument so that unconditional
62 feraiseexcept calls do not cause errors for undefined exceptions.
63 Define it to expand to a void expression so that any calls testing
64 the result of feraiseexcept do produce errors. */
65# if FE_ALL_EXCEPT == 0
66# define feraiseexcept(excepts) ((void) 0)
67# define __feraiseexcept(excepts) ((void) 0)
68# endif
69
70/* Similarly, most <fenv.h> functions have trivial implementations in
71 the absence of support for floating-point exceptions and rounding
72 modes. */
73
74# if !FE_HAVE_ROUNDING_MODES
75# if FE_ALL_EXCEPT == 0
76extern inline int
77fegetenv (fenv_t *__e)
78{
79 return 0;
80}
81
82extern inline int
83__fegetenv (fenv_t *__e)
84{
85 return 0;
86}
87
88extern inline int
89feholdexcept (fenv_t *__e)
90{
91 return 0;
92}
93
94extern inline int
95__feholdexcept (fenv_t *__e)
96{
97 return 0;
98}
99
100extern inline int
101fesetenv (const fenv_t *__e)
102{
103 return 0;
104}
105
106extern inline int
107__fesetenv (const fenv_t *__e)
108{
109 return 0;
110}
111
112extern inline int
113feupdateenv (const fenv_t *__e)
114{
115 return 0;
116}
117
118extern inline int
119__feupdateenv (const fenv_t *__e)
120{
121 return 0;
122}
123# endif
124
125extern inline int
126fegetround (void)
127{
128 return FE_TONEAREST;
129}
130
131extern inline int
132__fegetround (void)
133{
134 return FE_TONEAREST;
135}
136
137extern inline int
138fesetround (int __d)
139{
140 return 0;
141}
142
143extern inline int
144__fesetround (int __d)
145{
146 return 0;
147}
148# endif
149
b92a20b5 150#endif
25061094 151
ed073f0e 152#endif