aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEshan dhawan <eshandhawan51@gmail.com>2021-02-04 03:34:06 +0530
committerCorinna Vinschen <corinna@vinschen.de>2021-02-05 10:32:16 +0100
commit55a6e49a0813232bbca3b3e97bb03c22c5857639 (patch)
tree1c576619c3ddc07c7569f4e253bb1095bfdf3535
parent6aa0ab1c5ddeef7a970127c22a1c33a01d801e94 (diff)
downloadnewlib-55a6e49a0813232bbca3b3e97bb03c22c5857639.zip
newlib-55a6e49a0813232bbca3b3e97bb03c22c5857639.tar.gz
newlib-55a6e49a0813232bbca3b3e97bb03c22c5857639.tar.bz2
Removed Soft float from MIPS
This Patch removes Soft Float code from MIPS. Instead It adds the soft float code from RISCV The code came from FreeBSD and assumes the FreeBSD softfp implementation not the one with GCC. That was an overlooked and fixed in the other fenv code already. Signed-off-by: Eshan Dhawan <eshandhawan51@gmail.com>
-rw-r--r--newlib/libc/machine/mips/machine/fenv-softfloat.h49
-rw-r--r--newlib/libm/machine/mips/fenv.c10
2 files changed, 18 insertions, 41 deletions
diff --git a/newlib/libc/machine/mips/machine/fenv-softfloat.h b/newlib/libc/machine/mips/machine/fenv-softfloat.h
index cf13e73..43340e5 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 <errno.h>
-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 6e4bb8f..e2179eb 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 <machine/fenv-softfloat.h>
#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);