@@ -34,52 +34,171 @@ typedef unsigned char fexcept_t;
3434extern const fenv_t __fe_dfl_env ;
3535#define FE_DFL_ENV (&__fe_dfl_env)
3636
37- __BEGIN_DECLS
37+ //------------------------------------------------------------------------------
38+ // functions
39+ //------------------------------------------------------------------------------
3840
39- inline int feclearexcept (int __excepts ) {
41+ static inline __attribute__((__always_inline__ ))
42+ int __feclearexcept (int __excepts ) {
4043 return (__fe_cur_env &= ~((__excepts ) & FE_ALL_EXCEPT ), 0 );
4144}
4245
43- inline int fegetexceptflag (fexcept_t * __flagp , int __excepts ) {
46+ static inline __attribute__((__always_inline__ ))
47+ int __fegetexceptflag (fexcept_t * __flagp , int __excepts ) {
4448 return (* (__flagp ) = __fe_cur_env & (__excepts ) & FE_ALL_EXCEPT , 0 );
4549}
4650
47- inline int feraiseexcept (int __excepts ) {
51+ static inline __attribute__((__always_inline__ ))
52+ int __feraiseexcept (int __excepts ) {
4853 return (__fe_cur_env |= (__excepts ) & FE_ALL_EXCEPT , 0 );
4954}
5055
51- inline int fesetexceptflag (const fexcept_t * __flagp , int __excepts ) {
56+ static inline __attribute__((__always_inline__ ))
57+ int __fesetexceptflag (const fexcept_t * __flagp , int __excepts ) {
5258 return (__fe_cur_env = (__fe_cur_env & ~((__excepts ) & FE_ALL_EXCEPT )) | (* (__flagp ) & (__excepts ) & FE_ALL_EXCEPT ), 0 );
5359}
5460
55- inline int fetestexcept (int __excepts ) {
61+ static inline __attribute__((__always_inline__ ))
62+ int __fetestexcept (int __excepts ) {
5663 return (__fe_cur_env & (__excepts ) & FE_ALL_EXCEPT );
5764}
5865
59- inline int fegetround (void ) {
66+ static inline __attribute__((__always_inline__ ))
67+ int __fegetround (void ) {
6068 return (__fe_cur_env & 3 );
6169}
6270
63- inline int fesetround (int __rounding_mode ) {
71+ static inline __attribute__((__always_inline__ ))
72+ int __fesetround (int __rounding_mode ) {
6473 return (__fe_cur_env = (__fe_cur_env & ~3 ) | ((__rounding_mode ) & 3 ), 0 );
6574}
6675
67- inline int fegetenv (fenv_t * __envp ) {
76+ static inline __attribute__((__always_inline__ ))
77+ int __fegetenv (fenv_t * __envp ) {
6878 return (* (__envp ) = __fe_cur_env , 0 );
6979}
7080
71- inline int feholdexcept (fenv_t * __envp ) {
81+ static inline __attribute__((__always_inline__ ))
82+ int __feholdexcept (fenv_t * __envp ) {
7283 return (* (__envp ) = __fe_cur_env , __fe_cur_env &= ~FE_ALL_EXCEPT , 0 );
7384}
7485
75- inline int fesetenv (const fenv_t * __envp ) {
86+ static inline __attribute__((__always_inline__ ))
87+ int __fesetenv (const fenv_t * __envp ) {
7688 return (__fe_cur_env = * (__envp ), 0 );
7789}
7890
79- inline int feupdateenv (const fenv_t * __envp ) {
91+ static inline __attribute__((__always_inline__ ))
92+ int __feupdateenv (const fenv_t * __envp ) {
8093 return (__fe_cur_env = (__fe_cur_env & FE_ALL_EXCEPT ) | * (__envp ), 0 );
8194}
8295
96+ //------------------------------------------------------------------------------
97+ // prototypes
98+ //------------------------------------------------------------------------------
99+
100+ __BEGIN_DECLS
101+
102+ int feclearexcept (int __excepts ) __NOEXCEPT ;
103+
104+ int fegetexceptflag (fexcept_t * __flagp , int __excepts ) __NOEXCEPT ;
105+
106+ int feraiseexcept (int __excepts ) __NOEXCEPT ;
107+
108+ int fesetexceptflag (const fexcept_t * __flagp , int __excepts ) __NOEXCEPT ;
109+
110+ int fetestexcept (int __excepts ) __NOEXCEPT_PURE ;
111+
112+ int fegetround (void ) __NOEXCEPT_PURE ;
113+
114+ int fesetround (int __rounding_mode ) __NOEXCEPT ;
115+
116+ int fegetenv (fenv_t * __envp ) __NOEXCEPT ;
117+
118+ int feholdexcept (fenv_t * __envp ) __NOEXCEPT ;
119+
120+ int fesetenv (const fenv_t * __envp ) __NOEXCEPT ;
121+
122+ int feupdateenv (const fenv_t * __envp ) __NOEXCEPT ;
123+
124+ #ifdef __cplusplus
125+
126+ inline int feclearexcept (int __excepts ) __NOEXCEPT {
127+ return __feclearexcept (__excepts );
128+ }
129+
130+ inline int fegetexceptflag (fexcept_t * __flagp , int __excepts ) __NOEXCEPT {
131+ return __fegetexceptflag (__flagp , __excepts );
132+ }
133+
134+ inline int feraiseexcept (int __excepts ) __NOEXCEPT {
135+ return __feraiseexcept (__excepts );
136+ }
137+
138+ inline int fesetexceptflag (const fexcept_t * __flagp , int __excepts ) __NOEXCEPT {
139+ return __fesetexceptflag (__flagp , __excepts );
140+ }
141+
142+ inline int fetestexcept (int __excepts ) __NOEXCEPT {
143+ return __fetestexcept (__excepts );
144+ }
145+
146+ inline int fegetround (void ) __NOEXCEPT {
147+ return __fegetround ();
148+ }
149+
150+ inline int fesetround (int __rounding_mode ) __NOEXCEPT {
151+ return __fesetround (__rounding_mode );
152+ }
153+
154+ inline int fegetenv (fenv_t * __envp ) __NOEXCEPT {
155+ return __fegetenv (__envp );
156+ }
157+
158+ inline int feholdexcept (fenv_t * __envp ) __NOEXCEPT {
159+ return __feholdexcept (__envp );
160+ }
161+
162+ inline int fesetenv (const fenv_t * __envp ) __NOEXCEPT {
163+ return __fesetenv (__envp );
164+ }
165+
166+ inline int feupdateenv (const fenv_t * __envp ) __NOEXCEPT {
167+ return __feupdateenv (__envp );
168+ }
169+
170+ #endif /* __cplusplus */
171+
83172__END_DECLS
84173
174+ //------------------------------------------------------------------------------
175+ // macros
176+ //------------------------------------------------------------------------------
177+
178+ #ifndef __cplusplus
179+
180+ #define feclearexcept (excepts ) __feclearexcept(excepts)
181+
182+ #define fegetexceptflag (flagp , excepts ) __fegetexceptflag(flagp, excepts)
183+
184+ #define feraiseexcept (excepts ) __feraiseexcept(excepts)
185+
186+ #define fesetexceptflag (flagp , excepts ) __fesetexceptflag(flagp, excepts)
187+
188+ #define fetestexcept (excepts ) __fetestexcept(excepts)
189+
190+ #define fegetround () __fegetround()
191+
192+ #define fesetround (rounding_mode ) __fesetround(rounding_mode)
193+
194+ #define fegetenv (envp ) __fegetenv(envp)
195+
196+ #define feholdexcept (envp ) __feholdexcept(envp)
197+
198+ #define fesetenv (envp ) __fesetenv(envp)
199+
200+ #define feupdateenv (envp ) __feupdateenv(envp)
201+
202+ #endif /* __cplusplus */
203+
85204#endif /* _FENV_H */
0 commit comments