]> sourceware.org Git - newlib-cygwin.git/commitdiff
Removed Soft float from MIPS
authorEshan dhawan <eshandhawan51@gmail.com>
Wed, 3 Feb 2021 22:04:06 +0000 (03:34 +0530)
committerCorinna Vinschen <corinna@vinschen.de>
Fri, 5 Feb 2021 09:32:16 +0000 (10:32 +0100)
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>
newlib/libc/machine/mips/machine/fenv-softfloat.h
newlib/libm/machine/mips/fenv.c

index cf13e73fc5a233ed8051e54488c7bdf2f4ba31c9..43340e59609eeb65e408cc139898c90e2fc6cc99 100644 (file)
  * 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 */
index 6e4bb8f331de906f560d3efe21f7dcb436fcfb23..e2179eb2017f79633473ddc49da26cfd892070df 100644 (file)
  * 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);
This page took 0.036404 seconds and 5 git commands to generate.