123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184 |
- #ifndef _FENV_H_
- #error "This file is meant to be included only by <fenv.h>."
- #endif
- extern int __softfloat_float_exception_flags;
- extern int __softfloat_float_exception_mask;
- extern int __softfloat_float_rounding_mode;
- void __softfloat_float_raise(int);
- __fenv_static inline int
- feclearexcept(int __excepts)
- {
- __softfloat_float_exception_flags &= ~__excepts;
- return (0);
- }
- __fenv_static inline int
- fegetexceptflag(fexcept_t *__flagp, int __excepts)
- {
- *__flagp = __softfloat_float_exception_flags & __excepts;
- return (0);
- }
- __fenv_static inline int
- fesetexceptflag(const fexcept_t *__flagp, int __excepts)
- {
- __softfloat_float_exception_flags &= ~__excepts;
- __softfloat_float_exception_flags |= *__flagp & __excepts;
- return (0);
- }
- __fenv_static inline int
- feraiseexcept(int __excepts)
- {
- __softfloat_float_raise(__excepts);
- return (0);
- }
- __fenv_static inline int
- fetestexcept(int __excepts)
- {
- return (__softfloat_float_exception_flags & __excepts);
- }
- __fenv_static inline int
- fegetround(void)
- {
- return (__softfloat_float_rounding_mode);
- }
- __fenv_static inline int
- fesetround(int __round)
- {
- __softfloat_float_rounding_mode = __round;
- return (0);
- }
- __fenv_static inline int
- fegetenv(fenv_t *__envp)
- {
- __set_env(*__envp, __softfloat_float_exception_flags,
- __softfloat_float_exception_mask, __softfloat_float_rounding_mode);
- return (0);
- }
- __fenv_static inline int
- feholdexcept(fenv_t *__envp)
- {
- fenv_t __env;
- fegetenv(__envp);
- __softfloat_float_exception_flags = 0;
- __softfloat_float_exception_mask = 0;
- return (0);
- }
- __fenv_static inline int
- fesetenv(const fenv_t *__envp)
- {
- __softfloat_float_exception_flags = __env_flags(*__envp);
- __softfloat_float_exception_mask = __env_mask(*__envp);
- __softfloat_float_rounding_mode = __env_round(*__envp);
- return (0);
- }
- __fenv_static inline int
- feupdateenv(const fenv_t *__envp)
- {
- int __oflags = __softfloat_float_exception_flags;
- fesetenv(__envp);
- feraiseexcept(__oflags);
- return (0);
- }
- #if __BSD_VISIBLE
- __fenv_static inline int
- feenableexcept(int __mask)
- {
- int __omask = __softfloat_float_exception_mask;
- __softfloat_float_exception_mask |= __mask;
- return (__omask);
- }
- __fenv_static inline int
- fedisableexcept(int __mask)
- {
- int __omask = __softfloat_float_exception_mask;
- __softfloat_float_exception_mask &= ~__mask;
- return (__omask);
- }
- __fenv_static inline int
- fegetexcept(void)
- {
- return (__softfloat_float_exception_mask);
- }
- #endif
|