Message ID | 20200812213535.25430-1-eshandhawan51@gmail.com |
---|---|
State | Superseded |
Headers | show |
Series |
|
Related | show |
On Aug 13 03:05, Eshan dhawan via Newlib wrote: > This Patch removes Soft Float code from MIPS. > Instead It adds the soft float code from RISCV Why, and why is that the right thing to do? Thanks, Corinna > Signed-off-by: Eshan dhawan <eshandhawan51@gmail.com> > --- > .../machine/mips/machine/fenv-softfloat.h | 55 +++++++------------ > newlib/libm/machine/mips/fenv.c | 10 ---- > 2 files changed, 21 insertions(+), 44 deletions(-)
On Thu, Aug 13, 2020 at 3:19 AM Corinna Vinschen via Newlib < newlib@sourceware.org> wrote: > On Aug 13 03:05, Eshan dhawan via Newlib wrote: > > This Patch removes Soft Float code from MIPS. > > Instead It adds the soft float code from RISCV > > Why, and why is that the right thing to do? > 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. --joel > > > Thanks, > Corinna > > > Signed-off-by: Eshan dhawan <eshandhawan51@gmail.com> > > --- > > .../machine/mips/machine/fenv-softfloat.h | 55 +++++++------------ > > newlib/libm/machine/mips/fenv.c | 10 ---- > > 2 files changed, 21 insertions(+), 44 deletions(-) > >
On 13/08/2020 15:10, Joel Sherrill wrote: > On Thu, Aug 13, 2020 at 3:19 AM Corinna Vinschen via Newlib < > newlib@sourceware.org> wrote: > >> On Aug 13 03:05, Eshan dhawan via Newlib wrote: >>> This Patch removes Soft Float code from MIPS. >>> Instead It adds the soft float code from RISCV >> Why, and why is that the right thing to do? >> > 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. There is now a lot of copy and paste involved in the fenv support. I think the soft float support should be unified with a shared implementation. This can be later enhanced with support for the GCC soft float implementation.
On Aug 13 08:10, Joel Sherrill wrote: > On Thu, Aug 13, 2020 at 3:19 AM Corinna Vinschen via Newlib < > newlib@sourceware.org> wrote: > > > On Aug 13 03:05, Eshan dhawan via Newlib wrote: > > > This Patch removes Soft Float code from MIPS. > > > Instead It adds the soft float code from RISCV > > > > Why, and why is that the right thing to do? > > > > 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. > > --joel That information belongs into the commit message. Corinna
On Aug 14 06:51, Sebastian Huber wrote: > On 13/08/2020 15:10, Joel Sherrill wrote: > > > On Thu, Aug 13, 2020 at 3:19 AM Corinna Vinschen via Newlib < > > newlib@sourceware.org> wrote: > > > > > On Aug 13 03:05, Eshan dhawan via Newlib wrote: > > > > This Patch removes Soft Float code from MIPS. > > > > Instead It adds the soft float code from RISCV > > > Why, and why is that the right thing to do? > > > > > 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. > There is now a lot of copy and paste involved in the fenv support. I think > the soft float support should be unified with a shared implementation. This > can be later enhanced with support for the GCC soft float implementation. Sounds like a good idea to me. Corinna
diff --git a/newlib/libc/machine/mips/machine/fenv-softfloat.h b/newlib/libc/machine/mips/machine/fenv-softfloat.h index cf13e73fc..7c8bc3a89 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 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 <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 Patch removes Soft Float code from MIPS. Instead It adds the soft float code from RISCV Signed-off-by: Eshan dhawan <eshandhawan51@gmail.com> --- .../machine/mips/machine/fenv-softfloat.h | 55 +++++++------------ newlib/libm/machine/mips/fenv.c | 10 ---- 2 files changed, 21 insertions(+), 44 deletions(-) -- 2.17.1