[PATCH 1/1] fenv support arm

Joel Sherrill joel@rtems.org
Thu Jul 2 15:48:00 GMT 2020


On Thu, Jul 2, 2020 at 7:11 AM Szabolcs Nagy <szabolcs.nagy@arm.com> wrote:

> The 06/03/2020 23:15, Eshan dhawan via Newlib wrote:
> > --- /dev/null
> > +++ b/newlib/libc/machine/arm/sys/fenv.h
> ...
> > +#ifndef __ARM_PCS_VFP
> > +
> > +int feclearexcept(int excepts);
> > +int fegetexceptflag(fexcept_t *flagp, int excepts);
> > +int fesetexceptflag(const fexcept_t *flagp, int excepts);
> > +int feraiseexcept(int excepts);
> > +int fetestexcept(int excepts);
> > +int fegetround(void);
> > +int fesetround(int round);
> > +int fegetenv(fenv_t *envp);
> > +int feholdexcept(fenv_t *envp);
> > +int fesetenv(const fenv_t *envp);
> > +int feupdateenv(const fenv_t *envp);
> > +#if __BSD_VISIBLE
> > +int feenableexcept(int __mask);
> > +int fedisableexcept(int __mask);
> > +int fegetexcept(void);
> > +#endif /* __BSD_VISIBLE */
> > +
> > +#endif       /* __ARM_PCS_VFP */
>
> why are these declarations conditional?
>

The prototypes for the POSIX methods are in the shared fenv.h.

Since the ARM has the BSD_VISIBLE extras, those should be left in the arm
specific sys/fenv.h.

But (I don't think) they need a ARM_PCS_VFP wrapper since there should be
an implementation for all multilibs.  We could discuss the BSD_VISIBLE
prototypes being moved to <fenv.h> and removed from all the architecture
<sys/fenv.h>
but that was also how the code I moved from Cygwin to newlib libm was done
so
maybe there is a reason that I don't know to leave it here.

>
> i get build failures e.g. in libgfortran
> because configure detects the availability
> of feenableexcept in libm.a so it starts
> using it but then fenv.h does not have the
> declaration so compilation fails.
>
> it seems there is vfp code for all this
> so why are the declarations removed?
>

The FreeBSD headers rely on the architecture sys/fenv.h prototypes
even for POSIX standard methods. Most of the block of code is removed
because the prototypes were in <fenv.h> which is where this file is included
from.

Eshan... re-add the BSD_VISIBLE block please and resubmit. It also
looks like the test code isn't exercising those methods so that should
be updated after this patch is updated. We don't want libfortran broken
for longer than neccessary.

--joel


More information about the Newlib mailing list