diff --git a/newlib/libc/machine/mips/machine/fenv-softfloat.h b/newlib/libc/machine/mips/machine/fenv-softfloat.h index cf13e73fc..43340e596 100644 --- a/newlib/libc/machine/mips/machine/fenv-softfloat.h +++ b/newlib/libc/machine/mips/machine/fenv-softfloat.h @@ -50,16 +50,11 @@ * doesn't matter how you define them. */ #include -int __softfloat_float_exception_flags; -int __softfloat_float_exception_mask; -int __softfloat_float_rounding_mode; - __fenv_static inline int feclearexcept(int excepts) { - __softfloat_float_exception_flags &= ~excepts; return (0); } @@ -67,16 +62,14 @@ __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); } @@ -84,7 +77,7 @@ __fenv_static inline int feraiseexcept(int excepts) { -return(excepts ? -ENOTSUP : 0 ); + return( excepts != 0 ); } @@ -92,21 +85,25 @@ __fenv_static inline int fetestexcept(int excepts) { - return (__softfloat_float_exception_flags & excepts); + return (0); } __fenv_static inline int fegetround(void) { - return (__softfloat_float_rounding_mode); +#ifdef FE_TONEAREST + return FE_TONEAREST; +#else + return 0; +#endif + } __fenv_static inline int fesetround(int rounding_mode) { - __softfloat_float_rounding_mode = rounding_mode; return (0); } @@ -114,19 +111,13 @@ __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); } @@ -134,19 +125,19 @@ __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); +#if defined FE_NOMASK_ENV && FE_ALL_EXCEPT != 0 + if (envp == FE_NOMASK_ENV) + return 1; +#endif + return (0); } @@ -157,26 +148,22 @@ feupdateenv(const fenv_t *envp) __fenv_static inline int feenableexcept(int __mask) { - int __omask = __softfloat_float_exception_mask; - __softfloat_float_exception_mask |= __mask; - return (__omask); + return (0); } __fenv_static inline int fedisableexcept(int __mask) { - int __omask = __softfloat_float_exception_mask; - __softfloat_float_exception_mask &= ~__mask; - return (__omask); + return (0); } __fenv_static inline int fegetexcept(void) { - return (__softfloat_float_exception_mask); + return (0); } #endif /* __BSD_VISIBLE */ diff --git a/newlib/libm/machine/mips/fenv.c b/newlib/libm/machine/mips/fenv.c index 6e4bb8f33..e2179eb20 100644 --- a/newlib/libm/machine/mips/fenv.c +++ b/newlib/libm/machine/mips/fenv.c @@ -44,20 +44,10 @@ * this as a default environment. */ - #ifdef __mips_soft_float -#define __set_env(env, flags, mask, rnd) env = ((flags) \ - | (mask)<<_FPUSW_SHIFT \ - | (rnd) << 24) -#define __env_flags(env) ((env) & FE_ALL_EXCEPT) -#define __env_mask(env) (((env) >> _FPUSW_SHIFT) \ - & FE_ALL_EXCEPT) -#define __env_round(env) (((env) >> 24) & _ROUND_MASK) #include #endif - - extern inline int feclearexcept(int excepts); extern inline int fegetexceptflag(fexcept_t *flagp, int excepts); extern inline int fesetexceptflag(const fexcept_t *flagp, int excepts);