[PATCH] Adding fenv support arm.

Joel Sherrill joel at rtems.org
Mon May 25 17:15:16 UTC 2020


I suspect there are no fielded FreeBSD (or NetBSD) systems with soft
floating point so this is just broken.

On top of that, we will be using GCC's soft float implementation which will
do something different.

I'm going to ask this over on newlib's mailing list and cc you.

--joel

On Mon, May 25, 2020 at 11:50 AM Eshan Dhawan <eshandhawan51 at gmail.com>
wrote:

> Hello,
> I ran the script and made a few changes
> but there are errors in the soft float.
> I have attached the logs with the mail.
>
> the error is coming due to no definition of the function
> __softfloat_float_raise
> I searched in freebsd for the definition but couldn't find any thing.
>
> Thanks
> -eshan
>
> On Sat, May 23, 2020 at 11:27 PM Eshan Dhawan <eshandhawan51 at gmail.com>
> wrote:
>
>> Hello Dr Joel,
>> I ran the script, The logs show error in soft float variants and don't
>> show there exe files as well.
>> I have attached the log file.
>>
>> Thanks
>> -Eshan
>>
>> On Sat, May 23, 2020 at 10:29 PM Joel Sherrill <joel at rtems.org> wrote:
>>
>>> This is both a holiday weekend and my birthday weekend. I won't get a
>>> chance to review this for a bit.
>>>
>>> But I am attaching a simple shell script and test program which iterates
>>> over all multilib variants, compiles a simple program which should end up
>>> linking against every multilib variant. If the script looks right, then
>>> this should prove useful in the future.
>>>
>>> Please check that the right set of exe's for the various multilib
>>> options is generated and the fenv code is code for each. My parsing of the
>>> multilib variants from gcc needs a double check.
>>>
>>> On Fri, May 22, 2020 at 6:36 PM Eshan dhawan <eshandhawan51 at gmail.com>
>>> wrote:
>>>
>>>> This patch adds FENV support for ARM
>>>>
>>>> The code is ported from FreeBSD.
>>>>
>>>> Signed-off-by: Eshan dhawan <eshandhawan51 at gmail.com>
>>>> ---
>>>>  newlib/libc/machine/arm/machine/acle-compat.h | 182 ++++++++++
>>>>  newlib/libc/machine/arm/machine/fenv-mangle.h |  53 +++
>>>>  .../libc/machine/arm/machine/fenv-softfloat.h | 187 ++++++++++
>>>>  newlib/libc/machine/arm/machine/fenv-vfp.h    | 187 ++++++++++
>>>>  newlib/libc/machine/arm/sys/fenv.h            | 122 +++++++
>>>>  newlib/libm/machine/arm/Makefile.am           |  18 +-
>>>>  newlib/libm/machine/arm/Makefile.in           | 174 +++++++++-
>>>>  newlib/libm/machine/arm/fe_dfl_env.c          |   7 +
>>>>  newlib/libm/machine/arm/feclearexcept.c       |   7 +
>>>>  newlib/libm/machine/arm/fegetenv.c            |   7 +
>>>>  newlib/libm/machine/arm/fegetexceptflag.c     |   7 +
>>>>  newlib/libm/machine/arm/fegetround.c          |   7 +
>>>>  newlib/libm/machine/arm/feholdexcept.c        |   7 +
>>>>  newlib/libm/machine/arm/fenv-softfp.c         |  32 ++
>>>>  newlib/libm/machine/arm/fenv-vfp.c            |  32 ++
>>>>  newlib/libm/machine/arm/fenv.c                | 328 ++++++++++++++++++
>>>>  newlib/libm/machine/arm/feraiseexcept.c       |   7 +
>>>>  newlib/libm/machine/arm/fesetenv.c            |   7 +
>>>>  newlib/libm/machine/arm/fesetexceptflag.c     |   7 +
>>>>  newlib/libm/machine/arm/fesetround.c          |   7 +
>>>>  newlib/libm/machine/arm/fetestexcept.c        |   7 +
>>>>  newlib/libm/machine/arm/feupdateenv.c         |   7 +
>>>>  22 files changed, 1380 insertions(+), 19 deletions(-)
>>>>  create mode 100644 newlib/libc/machine/arm/machine/acle-compat.h
>>>>  create mode 100644 newlib/libc/machine/arm/machine/fenv-mangle.h
>>>>  create mode 100644 newlib/libc/machine/arm/machine/fenv-softfloat.h
>>>>  create mode 100644 newlib/libc/machine/arm/machine/fenv-vfp.h
>>>>  create mode 100644 newlib/libc/machine/arm/sys/fenv.h
>>>>  create mode 100644 newlib/libm/machine/arm/fe_dfl_env.c
>>>>  create mode 100644 newlib/libm/machine/arm/feclearexcept.c
>>>>  create mode 100644 newlib/libm/machine/arm/fegetenv.c
>>>>  create mode 100644 newlib/libm/machine/arm/fegetexceptflag.c
>>>>  create mode 100644 newlib/libm/machine/arm/fegetround.c
>>>>  create mode 100644 newlib/libm/machine/arm/feholdexcept.c
>>>>  create mode 100644 newlib/libm/machine/arm/fenv-softfp.c
>>>>  create mode 100644 newlib/libm/machine/arm/fenv-vfp.c
>>>>  create mode 100644 newlib/libm/machine/arm/fenv.c
>>>>  create mode 100644 newlib/libm/machine/arm/feraiseexcept.c
>>>>  create mode 100644 newlib/libm/machine/arm/fesetenv.c
>>>>  create mode 100644 newlib/libm/machine/arm/fesetexceptflag.c
>>>>  create mode 100644 newlib/libm/machine/arm/fesetround.c
>>>>  create mode 100644 newlib/libm/machine/arm/fetestexcept.c
>>>>  create mode 100644 newlib/libm/machine/arm/feupdateenv.c
>>>>
>>>> diff --git a/newlib/libc/machine/arm/machine/acle-compat.h
>>>> b/newlib/libc/machine/arm/machine/acle-compat.h
>>>> new file mode 100644
>>>> index 000000000..888ae2ea8
>>>> --- /dev/null
>>>> +++ b/newlib/libc/machine/arm/machine/acle-compat.h
>>>> @@ -0,0 +1,182 @@
>>>> +/*
>>>> + * Copyright (c) 2014 ARM Ltd
>>>> + * All rights reserved.
>>>> + *
>>>> + * Redistribution and use in source and binary forms, with or without
>>>> + * modification, are permitted provided that the following conditions
>>>> + * are met:
>>>> + * 1. Redistributions of source code must retain the above copyright
>>>> + *    notice, this list of conditions and the following disclaimer.
>>>> + * 2. Redistributions in binary form must reproduce the above copyright
>>>> + *    notice, this list of conditions and the following disclaimer in
>>>> the
>>>> + *    documentation and/or other materials provided with the
>>>> distribution.
>>>> + * 3. The name of the company may not be used to endorse or promote
>>>> + *    products derived from this software without specific prior
>>>> written
>>>> + *    permission.
>>>> + *
>>>> + * THIS SOFTWARE IS PROVIDED BY ARM LTD ``AS IS'' AND ANY EXPRESS OR
>>>> IMPLIED
>>>> + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
>>>> + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
>>>> + * IN NO EVENT SHALL ARM LTD BE LIABLE FOR ANY DIRECT, INDIRECT,
>>>> INCIDENTAL,
>>>> + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
>>>> LIMITED
>>>> + * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
>>>> OR
>>>> + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
>>>> OF
>>>> + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
>>>> + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
>>>> + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
>>>> + */
>>>> +
>>>> +#ifndef __ARM_ARCH
>>>> +
>>>> +/* ACLE standardises a set of pre-defines that describe the ARM
>>>> architecture.
>>>> +   These were mostly implemented in GCC around GCC-4.8; older versions
>>>> +   have no, or only partial support.  To provide a level of backwards
>>>> +   compatibility we try to work out what the definitions should be,
>>>> given
>>>> +   the older pre-defines that GCC did produce.  This isn't complete,
>>>> but
>>>> +   it should be enough for use by routines that depend on this
>>>> header.  */
>>>> +
>>>> +/* No need to handle ARMv8, GCC had ACLE support before that.  */
>>>> +
>>>> +# ifdef __ARM_ARCH_7__
>>>> +/* The common subset of ARMv7 in all profiles.  */
>>>> +#  define __ARM_ARCH 7
>>>> +#  define __ARM_ARCH_ISA_THUMB 2
>>>> +#  define __ARM_FEATURE_CLZ
>>>> +#  define __ARM_FEATURE_LDREX 7
>>>> +#  define __ARM_FEATURE_UNALIGNED
>>>> +# endif
>>>> +
>>>> +# if defined (__ARM_ARCH_7A__) || defined (__ARM_ARCH_7R__)
>>>> +#  define __ARM_ARCH 7
>>>> +#  define __ARM_ARCH_ISA_THUMB 2
>>>> +#  define __ARM_ARCH_ISA_ARM
>>>> +#  define __ARM_FEATURE_CLZ
>>>> +#  define __ARM_FEATURE_SIMD32
>>>> +#  define __ARM_FEATURE_DSP
>>>> +#  define __ARM_FEATURE_QBIT
>>>> +#  define __ARM_FEATURE_SAT
>>>> +#  define __ARM_FEATURE_LDREX 15
>>>> +#  define __ARM_FEATURE_UNALIGNED
>>>> +#  ifdef __ARM_ARCH_7A__
>>>> +#   define __ARM_ARCH_PROFILE 'A'
>>>> +#  else
>>>> +#   define __ARM_ARCH_PROFILE 'R'
>>>> +#  endif
>>>> +# endif
>>>> +
>>>> +# ifdef __ARM_ARCH_7EM__
>>>> +#  define __ARM_ARCH 7
>>>> +#  define __ARM_ARCH_ISA_THUMB 2
>>>> +#  define __ARM_FEATURE_CLZ
>>>> +#  define __ARM_FEATURE_SIMD32
>>>> +#  define __ARM_FEATURE_DSP
>>>> +#  define __ARM_FEATURE_QBIT
>>>> +#  define __ARM_FEATURE_SAT
>>>> +#  define __ARM_FEATURE_LDREX 7
>>>> +#  define __ARM_FEATURE_UNALIGNED
>>>> +#  define __ARM_ARCH_PROFILE 'M'
>>>> +# endif
>>>> +
>>>> +# ifdef __ARM_ARCH_7M__
>>>> +#  define __ARM_ARCH 7
>>>> +#  define __ARM_ARCH_ISA_THUMB 2
>>>> +#  define __ARM_FEATURE_CLZ
>>>> +#  define __ARM_FEATURE_QBIT
>>>> +#  define __ARM_FEATURE_SAT
>>>> +#  define __ARM_FEATURE_LDREX 7
>>>> +#  define __ARM_FEATURE_UNALIGNED
>>>> +#  define __ARM_ARCH_PROFILE 'M'
>>>> +# endif
>>>> +
>>>> +# ifdef __ARM_ARCH_6T2__
>>>> +#  define __ARM_ARCH 6
>>>> +#  define __ARM_ARCH_ISA_THUMB 2
>>>> +#  define __ARM_ARCH_ISA_ARM
>>>> +#  define __ARM_FEATURE_CLZ
>>>> +#  define __ARM_FEATURE_SIMD32
>>>> +#  define __ARM_FEATURE_DSP
>>>> +#  define __ARM_FEATURE_QBIT
>>>> +#  define __ARM_FEATURE_SAT
>>>> +#  define __ARM_FEATURE_LDREX 4
>>>> +#  define __ARM_FEATURE_UNALIGNED
>>>> +# endif
>>>> +
>>>> +# ifdef __ARM_ARCH_6M__
>>>> +#  define __ARM_ARCH 6
>>>> +#  define __ARM_ARCH_ISA_THUMB 1
>>>> +#  define __ARM_ARCH_PROFILE 'M'
>>>> +# endif
>>>> +
>>>> +# if defined (__ARM_ARCH_6__) || defined (__ARM_ARCH_6J__) \
>>>> +  || defined (__ARM_ARCH_6K__) || defined (__ARM_ARCH_6Z__) \
>>>> +  || defined (__ARM_ARCH_6ZK__)
>>>> +#  define __ARM_ARCH 6
>>>> +#  define __ARM_ARCH_ISA_THUMB 1
>>>> +#  define __ARM_ARCH_ISA_ARM
>>>> +#  define __ARM_FEATURE_CLZ
>>>> +#  define __ARM_FEATURE_SIMD32
>>>> +#  define __ARM_FEATURE_DSP
>>>> +#  define __ARM_FEATURE_QBIT
>>>> +#  define __ARM_FEATURE_SAT
>>>> +#  define __ARM_FEATURE_UNALIGNED
>>>> +#  ifndef __thumb__
>>>> +#   if defined (__ARM_ARCH_6K__) || defined (__ARM_ARCH_6ZK__)
>>>> +#    define __ARM_FEATURE_LDREX 15
>>>> +#   else
>>>> +#    define __ARM_FEATURE_LDREX 4
>>>> +#   endif
>>>> +#  endif
>>>> +# endif
>>>> +
>>>> +# if defined (__ARM_ARCH_5TE__) || defined (__ARM_ARCH_5E__)
>>>> +#  define __ARM_ARCH 5
>>>> +#  define __ARM_ARCH_ISA_ARM
>>>> +#  ifdef __ARM_ARCH_5TE__
>>>> +#   define __ARM_ARCH_ISA_THUMB 1
>>>> +#  endif
>>>> +#  define __ARM_FEATURE_CLZ
>>>> +#  define __ARM_FEATURE_DSP
>>>> +# endif
>>>> +
>>>> +# if defined (__ARM_ARCH_5T__) || defined (__ARM_ARCH_5__)
>>>> +#  define __ARM_ARCH 5
>>>> +#  define __ARM_ARCH_ISA_ARM
>>>> +#  ifdef __ARM_ARCH_5TE__
>>>> +#   define __ARM_ARCH_ISA_THUMB 1
>>>> +#  endif
>>>> +#  define __ARM_FEATURE_CLZ
>>>> +# endif
>>>> +
>>>> +# ifdef __ARM_ARCH_4T__
>>>> +#  define __ARM_ARCH 4
>>>> +#  define __ARM_ARCH_ISA_ARM
>>>> +#  define __ARM_ARCH_ISA_THUMB 1
>>>> +# endif
>>>> +
>>>> +# ifdef __ARM_ARCH_4__
>>>> +#  define __ARM_ARCH 4
>>>> +#  define __ARM_ARCH_ISA_ARM
>>>> +# endif
>>>> +
>>>> +# if defined (__ARM_ARCH_3__) || defined (__ARM_ARCH_3M__)
>>>> +#  define __ARM_ARCH 3
>>>> +#  define __ARM_ARCH_ISA_ARM
>>>> +# endif
>>>> +
>>>> +# ifdef __ARM_ARCH_2__
>>>> +#  define __ARM_ARCH 2
>>>> +#  define __ARM_ARCH_ISA_ARM
>>>> +# endif
>>>> +
>>>> +# ifdef __ARMEB__
>>>> +#  define __ARM_BIG_ENDIAN
>>>> +# endif
>>>> +
>>>> +/* If we still don't know what the target architecture is, then we're
>>>> +   probably not using GCC.  */
>>>> +# ifndef __ARM_ARCH
>>>> +#  error Unable to determine architecture version.
>>>> +# endif
>>>> +
>>>> +#endif /* __ARM_ARCH  */
>>>> +
>>>> diff --git a/newlib/libc/machine/arm/machine/fenv-mangle.h
>>>> b/newlib/libc/machine/arm/machine/fenv-mangle.h
>>>> new file mode 100644
>>>> index 000000000..476f7b20c
>>>> --- /dev/null
>>>> +++ b/newlib/libc/machine/arm/machine/fenv-mangle.h
>>>> @@ -0,0 +1,53 @@
>>>> +/*-
>>>> + * Copyright (c) 2013 Andrew Turner <andrew at FreeBSD.ORG>
>>>> + * All rights reserved.
>>>> + *
>>>> + * Redistribution and use in source and binary forms, with or without
>>>> + * modification, are permitted provided that the following conditions
>>>> + * are met:
>>>> + * 1. Redistributions of source code must retain the above copyright
>>>> + *    notice, this list of conditions and the following disclaimer.
>>>> + * 2. Redistributions in binary form must reproduce the above copyright
>>>> + *    notice, this list of conditions and the following disclaimer in
>>>> the
>>>> + *    documentation and/or other materials provided with the
>>>> distribution.
>>>> + *
>>>> + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS''
>>>> AND
>>>> + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
>>>> THE
>>>> + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
>>>> PURPOSE
>>>> + * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE
>>>> LIABLE
>>>> + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
>>>> CONSEQUENTIAL
>>>> + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
>>>> GOODS
>>>> + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
>>>> INTERRUPTION)
>>>> + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
>>>> STRICT
>>>> + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
>>>> ANY WAY
>>>> + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
>>>> OF
>>>> + * SUCH DAMAGE.
>>>> + *
>>>> + * $FreeBSD$
>>>> + */
>>>> +
>>>> +#ifdef _FENV_MANGLE_H_
>>>> +#error Only include fenv-mangle.h once
>>>> +#endif
>>>> +
>>>> +#define        _FENV_MANGLE_H_
>>>> +
>>>> +#ifndef FENV_MANGLE
>>>> +#error FENV_MANGLE is undefined
>>>> +#endif
>>>> +
>>>> +#define        feclearexcept   FENV_MANGLE(feclearexcept)
>>>> +#define        fegetexceptflag FENV_MANGLE(fegetexceptflag)
>>>> +#define        fesetexceptflag FENV_MANGLE(fesetexceptflag)
>>>> +#define        feraiseexcept   FENV_MANGLE(feraiseexcept)
>>>> +#define        fetestexcept    FENV_MANGLE(fetestexcept)
>>>> +#define        fegetround      FENV_MANGLE(fegetround)
>>>> +#define        fesetround      FENV_MANGLE(fesetround)
>>>> +#define        fegetenv        FENV_MANGLE(fegetenv)
>>>> +#define        feholdexcept    FENV_MANGLE(feholdexcept)
>>>> +#define        fesetenv        FENV_MANGLE(fesetenv)
>>>> +#define        feupdateenv     FENV_MANGLE(feupdateenv)
>>>> +#define        feenableexcept  FENV_MANGLE(feenableexcept)
>>>> +#define        fedisableexcept FENV_MANGLE(fedisableexcept)
>>>> +#define        fegetexcept     FENV_MANGLE(fegetexcept)
>>>> +
>>>> diff --git a/newlib/libc/machine/arm/machine/fenv-softfloat.h
>>>> b/newlib/libc/machine/arm/machine/fenv-softfloat.h
>>>> new file mode 100644
>>>> index 000000000..e53e54f54
>>>> --- /dev/null
>>>> +++ b/newlib/libc/machine/arm/machine/fenv-softfloat.h
>>>> @@ -0,0 +1,187 @@
>>>> + /*-
>>>> + * SPDX-License-Identifier: BSD-2-Clause-FreeBSD
>>>> + *
>>>> + * Copyright (c) 2004-2011 David Schultz <das at FreeBSD.ORG>
>>>> + * All rights reserved.
>>>> + *
>>>> + * Redistribution and use in source and binary forms, with or without
>>>> + * modification, are permitted provided that the following conditions
>>>> + * are met:
>>>> + * 1. Redistributions of source code must retain the above copyright
>>>> + *    notice, this list of conditions and the following disclaimer.
>>>> + * 2. Redistributions in binary form must reproduce the above copyright
>>>> + *    notice, this list of conditions and the following disclaimer in
>>>> the
>>>> + *    documentation and/or other materials provided with the
>>>> distribution.
>>>> + *
>>>> + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS''
>>>> AND
>>>> + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
>>>> THE
>>>> + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
>>>> PURPOSE
>>>> + * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE
>>>> LIABLE
>>>> + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
>>>> CONSEQUENTIAL
>>>> + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
>>>> GOODS
>>>> + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
>>>> INTERRUPTION)
>>>> + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
>>>> STRICT
>>>> + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
>>>> ANY WAY
>>>> + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
>>>> OF
>>>> + * SUCH DAMAGE.
>>>> + *
>>>> + * $FreeBSD$
>>>> + */
>>>> +
>>>> +#ifndef        _SYS_FENV_H_
>>>> +#error "This file is meant to be included only by <sys/fenv.h>."
>>>> +#endif
>>>> +/* the file can be added from architecture specific fenv.h file found
>>>> in
>>>> + *libc/sys/arch/sys *
>>>> + *
>>>> + * This file implements the functionality of <fenv.h> on platforms that
>>>> + * lack an FPU and use softfloat in libc for floating point.  To use
>>>> it,
>>>> + * you must write an <fenv.h> that provides the following:
>>>> + *
>>>> + *   - a typedef for fenv_t, which may be an integer or struct type
>>>> + *   - a typedef for fexcept_t (XXX This file assumes fexcept_t is a
>>>> + *     simple integer type containing the exception mask.)
>>>> + *   - definitions of FE_* constants for the five exceptions and four
>>>> + *     rounding modes in IEEE 754, as described in fenv(3)
>>>> + *   - a definition, and the corresponding external symbol, for
>>>> FE_DFL_ENV
>>>> + *   - a macro __set_env(env, flags, mask, rnd), which sets the given
>>>> fenv_t
>>>> + *     from the exception flags, mask, and rounding mode
>>>> + *   - macros __env_flags(env), __env_mask(env), and __env_round(env),
>>>> which
>>>> + *     extract fields from an fenv_t
>>>> + *   - a definition of __fenv_static
>>>> + *
>>>> + * If the architecture supports an optional FPU, it's recommended that
>>>> you
>>>> + * define fenv_t and fexcept_t to match the hardware ABI.  Otherwise,
>>>> it
>>>> + * doesn't matter how you define them.
>>>> + */
>>>> +
>>>> +extern int __softfloat_float_exception_flags;
>>>> +extern int __softfloat_float_exception_mask;
>>>> +extern int __softfloat_float_rounding_mode;
>>>> +void __softfloat_float_raise(int);
>>>> +
>>>> +__fenv_static inline int
>>>> +feclearexcept(int excepts)
>>>> +{
>>>> +
>>>> +       __softfloat_float_exception_flags &= ~excepts;
>>>> +       return (0);
>>>> +}
>>>> +
>>>> +__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);
>>>> +}
>>>> +
>>>> +__fenv_static inline int
>>>> +feraiseexcept(int excepts)
>>>> +{
>>>> +
>>>> +       __softfloat_float_raise(excepts);
>>>> +       return (0);
>>>> +}
>>>> +
>>>> +__fenv_static inline int
>>>> +fetestexcept(int excepts)
>>>> +{
>>>> +
>>>> +       return (__softfloat_float_exception_flags & excepts);
>>>> +}
>>>> +
>>>> +__fenv_static inline int
>>>> +fegetround(void)
>>>> +{
>>>> +
>>>> +       return (__softfloat_float_rounding_mode);
>>>> +}
>>>> +
>>>> +__fenv_static inline int
>>>> +fesetround(int round)
>>>> +{
>>>> +
>>>> +       __softfloat_float_rounding_mode = round;
>>>> +       return (0);
>>>> +}
>>>> +
>>>> +__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);
>>>> +}
>>>> +
>>>> +__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);
>>>> +       return (0);
>>>> +}
>>>> +
>>>> +#if __BSD_VISIBLE
>>>> +
>>>> +/* We currently provide no external definitions of the functions
>>>> below. */
>>>> +
>>>> +__fenv_static inline int
>>>> +feenableexcept(int __mask)
>>>> +{
>>>> +       int __omask = __softfloat_float_exception_mask;
>>>> +
>>>> +       __softfloat_float_exception_mask |= __mask;
>>>> +       return (__omask);
>>>> +}
>>>> +
>>>> +__fenv_static inline int
>>>> +fedisableexcept(int __mask)
>>>> +{
>>>> +       int __omask = __softfloat_float_exception_mask;
>>>> +
>>>> +       __softfloat_float_exception_mask &= ~__mask;
>>>> +       return (__omask);
>>>> +}
>>>> +
>>>> +__fenv_static inline int
>>>> +fegetexcept(void)
>>>> +{
>>>> +
>>>> +       return (__softfloat_float_exception_mask);
>>>> +}
>>>> +
>>>> +#endif /* __BSD_VISIBLE */
>>>> diff --git a/newlib/libc/machine/arm/machine/fenv-vfp.h
>>>> b/newlib/libc/machine/arm/machine/fenv-vfp.h
>>>> new file mode 100644
>>>> index 000000000..25d71f3ab
>>>> --- /dev/null
>>>> +++ b/newlib/libc/machine/arm/machine/fenv-vfp.h
>>>> @@ -0,0 +1,187 @@
>>>> +/*-
>>>> + * SPDX-License-Identifier: BSD-2-Clause-FreeBSD
>>>> + *
>>>> + * Copyright (c) 2004-2005 David Schultz <das at FreeBSD.ORG>
>>>> + * All rights reserved.
>>>> + *
>>>> + * Redistribution and use in source and binary forms, with or without
>>>> + * modification, are permitted provided that the following conditions
>>>> + * are met:
>>>> + * 1. Redistributions of source code must retain the above copyright
>>>> + *    notice, this list of conditions and the following disclaimer.
>>>> + * 2. Redistributions in binary form must reproduce the above copyright
>>>> + *    notice, this list of conditions and the following disclaimer in
>>>> the
>>>> + *    documentation and/or other materials provided with the
>>>> distribution.
>>>> + *
>>>> + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS''
>>>> AND
>>>> + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
>>>> THE
>>>> + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
>>>> PURPOSE
>>>> + * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE
>>>> LIABLE
>>>> + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
>>>> CONSEQUENTIAL
>>>> + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
>>>> GOODS
>>>> + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
>>>> INTERRUPTION)
>>>> + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
>>>> STRICT
>>>> + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
>>>> ANY WAY
>>>> + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
>>>> OF
>>>> + * SUCH DAMAGE.
>>>> + *
>>>> + * $FreeBSD$
>>>> + */
>>>> +
>>>> +
>>>> +
>>>> +#define        vmrs_fpscr(__r) __asm __volatile("vmrs %0, fpscr" :
>>>> "=&r"(__r))
>>>> +#define        vmsr_fpscr(__r) __asm __volatile("vmsr fpscr, %0" : :
>>>> "r"(__r))
>>>> +
>>>> +
>>>> +#define _FPU_MASK_SHIFT        8
>>>> +
>>>> +__fenv_static inline int feclearexcept(int excepts)
>>>> +{
>>>> +       fexcept_t __fpsr;
>>>> +
>>>> +       vmrs_fpscr(__fpsr);
>>>> +       __fpsr &= ~excepts;
>>>> +       vmsr_fpscr(__fpsr);
>>>> +       return (0);
>>>> +}
>>>> +
>>>> +__fenv_static inline int
>>>> +fegetexceptflag(fexcept_t *flagp, int excepts)
>>>> +{
>>>> +       fexcept_t __fpsr;
>>>> +
>>>> +       vmrs_fpscr(__fpsr);
>>>> +       *flagp = __fpsr & excepts;
>>>> +       return (0);
>>>> +}
>>>> +
>>>> +__fenv_static inline int
>>>> +fesetexceptflag(const fexcept_t *flagp, int excepts)
>>>> +{
>>>> +       fexcept_t __fpsr;
>>>> +
>>>> +       vmrs_fpscr(__fpsr);
>>>> +       __fpsr &= ~excepts;
>>>> +       __fpsr |= *flagp & excepts;
>>>> +       vmsr_fpscr(__fpsr);
>>>> +       return (0);
>>>> +}
>>>> +
>>>> +__fenv_static inline int
>>>> +feraiseexcept(int excepts)
>>>> +{
>>>> +       fexcept_t __ex = excepts;
>>>> +
>>>> +       fesetexceptflag(&__ex, excepts);        /* XXX */
>>>> +       return (0);
>>>> +}
>>>> +
>>>> +__fenv_static inline int
>>>> +fetestexcept(int excepts)
>>>> +{
>>>> +       fexcept_t __fpsr;
>>>> +
>>>> +       vmrs_fpscr(__fpsr);
>>>> +       return (__fpsr & excepts);
>>>> +}
>>>> +
>>>> +__fenv_static inline int
>>>> +fegetround(void)
>>>> +{
>>>> +       fenv_t __fpsr;
>>>> +
>>>> +       vmrs_fpscr(__fpsr);
>>>> +       return (__fpsr & _ROUND_MASK);
>>>> +}
>>>> +
>>>> +__fenv_static inline int
>>>> +fesetround(int round)
>>>> +{
>>>> +       fenv_t __fpsr;
>>>> +
>>>> +       vmrs_fpscr(__fpsr);
>>>> +       __fpsr &= ~(_ROUND_MASK);
>>>> +       __fpsr |= round;
>>>> +       vmsr_fpscr(__fpsr);
>>>> +       return (0);
>>>> +}
>>>> +
>>>> +__fenv_static inline int
>>>> +fegetenv(fenv_t *envp)
>>>> +{
>>>> +
>>>> +       vmrs_fpscr(*envp);
>>>> +       return (0);
>>>> +}
>>>> +
>>>> +__fenv_static inline int
>>>> +feholdexcept(fenv_t *envp)
>>>> +{
>>>> +       fenv_t __env;
>>>> +
>>>> +       vmrs_fpscr(__env);
>>>> +       *envp = __env;
>>>> +       __env &= ~(FE_ALL_EXCEPT);
>>>> +       vmsr_fpscr(__env);
>>>> +       return (0);
>>>> +}
>>>> +
>>>> +__fenv_static inline int
>>>> +fesetenv(const fenv_t *envp)
>>>> +{
>>>> +
>>>> +       vmsr_fpscr(*envp);
>>>> +       return (0);
>>>> +}
>>>> +
>>>> +__fenv_static inline int
>>>> +feupdateenv(const fenv_t *envp)
>>>> +{
>>>> +       fexcept_t __fpsr;
>>>> +
>>>> +       vmrs_fpscr(__fpsr);
>>>> +       vmsr_fpscr(*envp);
>>>> +       feraiseexcept(__fpsr & FE_ALL_EXCEPT);
>>>> +       return (0);
>>>> +}
>>>> +
>>>> +#if __BSD_VISIBLE
>>>> +
>>>> +/* We currently provide no external definitions of the functions
>>>> below. */
>>>> +
>>>> +__fenv_static inline int
>>>> +feenableexcept(int __mask)
>>>> +{
>>>> +       fenv_t __old_fpsr, __new_fpsr;
>>>> +
>>>> +       vmrs_fpscr(__old_fpsr);
>>>> +       __new_fpsr = __old_fpsr |
>>>> +           ((__mask & FE_ALL_EXCEPT) << _FPU_MASK_SHIFT);
>>>> +       vmsr_fpscr(__new_fpsr);
>>>> +       return ((__old_fpsr >> _FPU_MASK_SHIFT) & FE_ALL_EXCEPT);
>>>> +}
>>>> +
>>>> +__fenv_static inline int
>>>> +fedisableexcept(int __mask)
>>>> +{
>>>> +       fenv_t __old_fpsr, __new_fpsr;
>>>> +
>>>> +       vmrs_fpscr(__old_fpsr);
>>>> +       __new_fpsr = __old_fpsr &
>>>> +           ~((__mask & FE_ALL_EXCEPT) << _FPU_MASK_SHIFT);
>>>> +       vmsr_fpscr(__new_fpsr);
>>>> +       return ((__old_fpsr >> _FPU_MASK_SHIFT) & FE_ALL_EXCEPT);
>>>> +}
>>>> +
>>>> +__fenv_static inline int
>>>> +fegetexcept(void)
>>>> +{
>>>> +       fenv_t __fpsr;
>>>> +
>>>> +       vmrs_fpscr(__fpsr);
>>>> +       return (__fpsr & FE_ALL_EXCEPT);
>>>> +}
>>>> +
>>>> +#endif /* __BSD_VISIBLE */
>>>> +
>>>> diff --git a/newlib/libc/machine/arm/sys/fenv.h
>>>> b/newlib/libc/machine/arm/sys/fenv.h
>>>> new file mode 100644
>>>> index 000000000..af74c5f47
>>>> --- /dev/null
>>>> +++ b/newlib/libc/machine/arm/sys/fenv.h
>>>> @@ -0,0 +1,122 @@
>>>> +/*-
>>>> + * SPDX-License-Identifier: BSD-2-Clause-FreeBSD
>>>> + *
>>>> + * Copyright (c) 2004-2005 David Schultz <das at FreeBSD.ORG>
>>>> + * All rights reserved.
>>>> + *
>>>> + * Redistribution and use in source and binary forms, with or without
>>>> + * modification, are permitted provided that the following conditions
>>>> + * are met:
>>>> + * 1. Redistributions of source code must retain the above copyright
>>>> + *    notice, this list of conditions and the following disclaimer.
>>>> + * 2. Redistributions in binary form must reproduce the above copyright
>>>> + *    notice, this list of conditions and the following disclaimer in
>>>> the
>>>> + *    documentation and/or other materials provided with the
>>>> distribution.
>>>> + *
>>>> + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS''
>>>> AND
>>>> + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
>>>> THE
>>>> + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
>>>> PURPOSE
>>>> + * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE
>>>> LIABLE
>>>> + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
>>>> CONSEQUENTIAL
>>>> + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
>>>> GOODS
>>>> + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
>>>> INTERRUPTION)
>>>> + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
>>>> STRICT
>>>> + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
>>>> ANY WAY
>>>> + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
>>>> OF
>>>> + * SUCH DAMAGE.
>>>> + *
>>>> + * $FreeBSD$
>>>> + */
>>>> +
>>>> +#ifndef _SYS_FENV_H_
>>>> +#define _SYS_FENV_H_ 1
>>>> +
>>>> +#include <sys/_types.h>
>>>> +#include <sys/cdefs.h>
>>>> +
>>>> +#ifdef __cplusplus
>>>> +extern "C" {
>>>> +#endif
>>>> +
>>>> +#ifndef        __fenv_static
>>>> +#define        __fenv_static static
>>>> +#endif
>>>> +
>>>> +typedef int fenv_t;
>>>> +typedef int fexcept_t;
>>>> +
>>>> +/* Exception flags */
>>>> +#define        FE_INVALID      0x0001
>>>> +#define        FE_DIVBYZERO    0x0002
>>>> +#define        FE_OVERFLOW     0x0004
>>>> +#define        FE_UNDERFLOW    0x0008
>>>> +#define        FE_INEXACT      0x0010
>>>> +#ifdef __ARM_PCS_VFP
>>>> +#define        FE_DENORMAL     0x0080
>>>> +#define        FE_ALL_EXCEPT   (FE_DIVBYZERO | FE_INEXACT | \
>>>> +                        FE_INVALID | FE_OVERFLOW | FE_UNDERFLOW |
>>>> FE_DENORMAL)
>>>> +#else
>>>> +#define        FE_ALL_EXCEPT   (FE_DIVBYZERO | FE_INEXACT | \
>>>> +                        FE_INVALID | FE_OVERFLOW | FE_UNDERFLOW)
>>>> +#endif
>>>> +
>>>> +
>>>> +
>>>> +/* Rounding modes */
>>>> +#define        VFP_FE_TONEAREST        0x00000000
>>>> +#define        VFP_FE_UPWARD           0x00400000
>>>> +#define        VFP_FE_DOWNWARD         0x00800000
>>>> +#define        VFP_FE_TOWARDZERO       0x00c00000
>>>> +
>>>> +#ifdef __ARM_PCS_VFP
>>>> +#define        FE_TONEAREST    VFP_FE_TONEAREST
>>>> +#define        FE_UPWARD       VFP_FE_UPWARD
>>>> +#define        FE_DOWNWARD     VFP_FE_DOWNWARD
>>>> +#define        FE_TOWARDZERO   VFP_FE_TOWARDZERO
>>>> +#else
>>>> +#define        FE_TONEAREST    0x0000
>>>> +#define        FE_TOWARDZERO   0x0001
>>>> +#define        FE_UPWARD       0x0002
>>>> +#define        FE_DOWNWARD     0x0003
>>>> +#endif
>>>> +#define        _ROUND_MASK     (FE_TONEAREST | FE_DOWNWARD | \
>>>> +                        FE_UPWARD | FE_TOWARDZERO)
>>>> +
>>>> +
>>>> +/* Default floating-point environment */
>>>> +
>>>> +extern const fenv_t    *_fe_dfl_env;
>>>> +#define        FE_DFL_ENV      (_fe_dfl_env)
>>>> +
>>>> +/* We need to be able to map status flag positions to mask flag
>>>> positions */
>>>> +#ifndef __ARM_PCS_VFP
>>>> +#define        _FPUSW_SHIFT    16
>>>> +#define        _ENABLE_MASK    (FE_ALL_EXCEPT << _FPUSW_SHIFT)
>>>> +#endif
>>>> +
>>>> +#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 */
>>>> +
>>>> +#ifdef __cplusplus
>>>> +}
>>>> +#endif
>>>> +
>>>> +#endif /* _SYS_FENV_H_ */
>>>> diff --git a/newlib/libm/machine/arm/Makefile.am
>>>> b/newlib/libm/machine/arm/Makefile.am
>>>> index 1f10a7a40..a64ee59d5 100644
>>>> --- a/newlib/libm/machine/arm/Makefile.am
>>>> +++ b/newlib/libm/machine/arm/Makefile.am
>>>> @@ -19,7 +19,23 @@ LIB_SOURCES = \
>>>>         sf_nearbyint.c \
>>>>         sf_rint.c \
>>>>         sf_round.c \
>>>> -       sf_trunc.c
>>>> +       sf_trunc.c \
>>>> +       feclearexcept.c \
>>>> +       fe_dfl_env.c\
>>>> +       fegetenv.c \
>>>> +       fegetexceptflag.c \
>>>> +       fegetround.c \
>>>> +       feholdexcept.c \
>>>> +       fenv.c \
>>>> +       feraiseexcept.c \
>>>> +       fesetenv.c \
>>>> +       fesetexceptflag.c \
>>>> +       fesetround.c \
>>>> +       fetestexcept.c \
>>>> +       feupdateenv.c \
>>>> +       fenv-vfp.c \
>>>> +       fenv-softfp.c
>>>> +
>>>>
>>>>  noinst_LIBRARIES = lib.a
>>>>  lib_a_SOURCES = $(LIB_SOURCES)
>>>> diff --git a/newlib/libm/machine/arm/Makefile.in
>>>> b/newlib/libm/machine/arm/Makefile.in
>>>> index 0a5a27327..70b03df46 100644
>>>> --- a/newlib/libm/machine/arm/Makefile.in
>>>> +++ b/newlib/libm/machine/arm/Makefile.in
>>>> @@ -1,9 +1,8 @@
>>>> -# Makefile.in generated by automake 1.11.6 from Makefile.am.
>>>> +# Makefile.in generated by automake 1.12.6 from Makefile.am.
>>>>  # @configure_input@
>>>>
>>>> -# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
>>>> -# 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software
>>>> -# Foundation, Inc.
>>>> +# Copyright (C) 1994-2012 Free Software Foundation, Inc.
>>>> +
>>>>  # This Makefile.in is free software; the Free Software Foundation
>>>>  # gives unlimited permission to copy and/or distribute it,
>>>>  # with or without modifications, as long as this notice is preserved.
>>>> @@ -54,7 +53,7 @@ build_triplet = @build@
>>>>  host_triplet = @host@
>>>>  DIST_COMMON = $(srcdir)/../../../Makefile.shared $(srcdir)/Makefile.in
>>>> \
>>>>         $(srcdir)/Makefile.am $(top_srcdir)/configure \
>>>> -       $(am__configure_deps) $(srcdir)/../../../../mkinstalldirs
>>>> +       $(am__configure_deps) $(top_srcdir)/../../../../mkinstalldirs
>>>>  subdir = .
>>>>  ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
>>>>  am__aclocal_m4_deps = $(top_srcdir)/../../../acinclude.m4 \
>>>> @@ -76,7 +75,15 @@ am__objects_1 = lib_a-e_sqrt.$(OBJEXT)
>>>> lib_a-ef_sqrt.$(OBJEXT) \
>>>>         lib_a-s_round.$(OBJEXT) lib_a-s_trunc.$(OBJEXT) \
>>>>         lib_a-sf_ceil.$(OBJEXT) lib_a-sf_floor.$(OBJEXT) \
>>>>         lib_a-sf_nearbyint.$(OBJEXT) lib_a-sf_rint.$(OBJEXT) \
>>>> -       lib_a-sf_round.$(OBJEXT) lib_a-sf_trunc.$(OBJEXT)
>>>> +       lib_a-sf_round.$(OBJEXT) lib_a-sf_trunc.$(OBJEXT) \
>>>> +       lib_a-feclearexcept.$(OBJEXT) lib_a-fe_dfl_env.$(OBJEXT) \
>>>> +       lib_a-fegetenv.$(OBJEXT) lib_a-fegetexceptflag.$(OBJEXT) \
>>>> +       lib_a-fegetround.$(OBJEXT) lib_a-feholdexcept.$(OBJEXT) \
>>>> +       lib_a-fenv.$(OBJEXT) lib_a-feraiseexcept.$(OBJEXT) \
>>>> +       lib_a-fesetenv.$(OBJEXT) lib_a-fesetexceptflag.$(OBJEXT) \
>>>> +       lib_a-fesetround.$(OBJEXT) lib_a-fetestexcept.$(OBJEXT) \
>>>> +       lib_a-feupdateenv.$(OBJEXT) lib_a-fenv-vfp.$(OBJEXT) \
>>>> +       lib_a-fenv-softfp.$(OBJEXT)
>>>>  am_lib_a_OBJECTS = $(am__objects_1)
>>>>  lib_a_OBJECTS = $(am_lib_a_OBJECTS)
>>>>  DEFAULT_INCLUDES = -I. at am__isrc@
>>>> @@ -95,6 +102,8 @@ am__can_run_installinfo = \
>>>>  DATA = $(noinst_DATA)
>>>>  ETAGS = etags
>>>>  CTAGS = ctags
>>>> +CSCOPE = cscope
>>>> +AM_RECURSIVE_TARGETS = cscope
>>>>  ACLOCAL = @ACLOCAL@
>>>>  AMTAR = @AMTAR@
>>>>  AR = @AR@
>>>> @@ -216,7 +225,22 @@ LIB_SOURCES = \
>>>>         sf_nearbyint.c \
>>>>         sf_rint.c \
>>>>         sf_round.c \
>>>> -       sf_trunc.c
>>>> +       sf_trunc.c \
>>>> +       feclearexcept.c \
>>>> +       fe_dfl_env.c\
>>>> +       fegetenv.c \
>>>> +       fegetexceptflag.c \
>>>> +       fegetround.c \
>>>> +       feholdexcept.c \
>>>> +       fenv.c \
>>>> +       feraiseexcept.c \
>>>> +       fesetenv.c \
>>>> +       fesetexceptflag.c \
>>>> +       fesetround.c \
>>>> +       fetestexcept.c \
>>>> +       feupdateenv.c \
>>>> +       fenv-vfp.c \
>>>> +       fenv-softfp.c
>>>>
>>>>  noinst_LIBRARIES = lib.a
>>>>  lib_a_SOURCES = $(LIB_SOURCES)
>>>> @@ -378,6 +402,96 @@ lib_a-sf_trunc.o: sf_trunc.c
>>>>  lib_a-sf_trunc.obj: sf_trunc.c
>>>>         $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS)
>>>> $(CPPFLAGS) $(lib_a_CFLAGS) $(CFLAGS) -c -o lib_a-sf_trunc.obj `if test -f
>>>> 'sf_trunc.c'; then $(CYGPATH_W) 'sf_trunc.c'; else $(CYGPATH_W)
>>>> '$(srcdir)/sf_trunc.c'; fi`
>>>>
>>>> +lib_a-feclearexcept.o: feclearexcept.c
>>>> +       $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS)
>>>> $(CPPFLAGS) $(lib_a_CFLAGS) $(CFLAGS) -c -o lib_a-feclearexcept.o `test -f
>>>> 'feclearexcept.c' || echo '$(srcdir)/'`feclearexcept.c
>>>> +
>>>> +lib_a-feclearexcept.obj: feclearexcept.c
>>>> +       $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS)
>>>> $(CPPFLAGS) $(lib_a_CFLAGS) $(CFLAGS) -c -o lib_a-feclearexcept.obj `if
>>>> test -f 'feclearexcept.c'; then $(CYGPATH_W) 'feclearexcept.c'; else
>>>> $(CYGPATH_W) '$(srcdir)/feclearexcept.c'; fi`
>>>> +
>>>> +lib_a-fe_dfl_env.o: fe_dfl_env.c
>>>> +       $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS)
>>>> $(CPPFLAGS) $(lib_a_CFLAGS) $(CFLAGS) -c -o lib_a-fe_dfl_env.o `test -f
>>>> 'fe_dfl_env.c' || echo '$(srcdir)/'`fe_dfl_env.c
>>>> +
>>>> +lib_a-fe_dfl_env.obj: fe_dfl_env.c
>>>> +       $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS)
>>>> $(CPPFLAGS) $(lib_a_CFLAGS) $(CFLAGS) -c -o lib_a-fe_dfl_env.obj `if test
>>>> -f 'fe_dfl_env.c'; then $(CYGPATH_W) 'fe_dfl_env.c'; else $(CYGPATH_W)
>>>> '$(srcdir)/fe_dfl_env.c'; fi`
>>>> +
>>>> +lib_a-fegetenv.o: fegetenv.c
>>>> +       $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS)
>>>> $(CPPFLAGS) $(lib_a_CFLAGS) $(CFLAGS) -c -o lib_a-fegetenv.o `test -f
>>>> 'fegetenv.c' || echo '$(srcdir)/'`fegetenv.c
>>>> +
>>>> +lib_a-fegetenv.obj: fegetenv.c
>>>> +       $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS)
>>>> $(CPPFLAGS) $(lib_a_CFLAGS) $(CFLAGS) -c -o lib_a-fegetenv.obj `if test -f
>>>> 'fegetenv.c'; then $(CYGPATH_W) 'fegetenv.c'; else $(CYGPATH_W)
>>>> '$(srcdir)/fegetenv.c'; fi`
>>>> +
>>>> +lib_a-fegetexceptflag.o: fegetexceptflag.c
>>>> +       $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS)
>>>> $(CPPFLAGS) $(lib_a_CFLAGS) $(CFLAGS) -c -o lib_a-fegetexceptflag.o `test
>>>> -f 'fegetexceptflag.c' || echo '$(srcdir)/'`fegetexceptflag.c
>>>> +
>>>> +lib_a-fegetexceptflag.obj: fegetexceptflag.c
>>>> +       $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS)
>>>> $(CPPFLAGS) $(lib_a_CFLAGS) $(CFLAGS) -c -o lib_a-fegetexceptflag.obj `if
>>>> test -f 'fegetexceptflag.c'; then $(CYGPATH_W) 'fegetexceptflag.c'; else
>>>> $(CYGPATH_W) '$(srcdir)/fegetexceptflag.c'; fi`
>>>> +
>>>> +lib_a-fegetround.o: fegetround.c
>>>> +       $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS)
>>>> $(CPPFLAGS) $(lib_a_CFLAGS) $(CFLAGS) -c -o lib_a-fegetround.o `test -f
>>>> 'fegetround.c' || echo '$(srcdir)/'`fegetround.c
>>>> +
>>>> +lib_a-fegetround.obj: fegetround.c
>>>> +       $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS)
>>>> $(CPPFLAGS) $(lib_a_CFLAGS) $(CFLAGS) -c -o lib_a-fegetround.obj `if test
>>>> -f 'fegetround.c'; then $(CYGPATH_W) 'fegetround.c'; else $(CYGPATH_W)
>>>> '$(srcdir)/fegetround.c'; fi`
>>>> +
>>>> +lib_a-feholdexcept.o: feholdexcept.c
>>>> +       $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS)
>>>> $(CPPFLAGS) $(lib_a_CFLAGS) $(CFLAGS) -c -o lib_a-feholdexcept.o `test -f
>>>> 'feholdexcept.c' || echo '$(srcdir)/'`feholdexcept.c
>>>> +
>>>> +lib_a-feholdexcept.obj: feholdexcept.c
>>>> +       $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS)
>>>> $(CPPFLAGS) $(lib_a_CFLAGS) $(CFLAGS) -c -o lib_a-feholdexcept.obj `if test
>>>> -f 'feholdexcept.c'; then $(CYGPATH_W) 'feholdexcept.c'; else $(CYGPATH_W)
>>>> '$(srcdir)/feholdexcept.c'; fi`
>>>> +
>>>> +lib_a-fenv.o: fenv.c
>>>> +       $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS)
>>>> $(CPPFLAGS) $(lib_a_CFLAGS) $(CFLAGS) -c -o lib_a-fenv.o `test -f 'fenv.c'
>>>> || echo '$(srcdir)/'`fenv.c
>>>> +
>>>> +lib_a-fenv.obj: fenv.c
>>>> +       $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS)
>>>> $(CPPFLAGS) $(lib_a_CFLAGS) $(CFLAGS) -c -o lib_a-fenv.obj `if test -f
>>>> 'fenv.c'; then $(CYGPATH_W) 'fenv.c'; else $(CYGPATH_W) '$(srcdir)/fenv.c';
>>>> fi`
>>>> +
>>>> +lib_a-feraiseexcept.o: feraiseexcept.c
>>>> +       $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS)
>>>> $(CPPFLAGS) $(lib_a_CFLAGS) $(CFLAGS) -c -o lib_a-feraiseexcept.o `test -f
>>>> 'feraiseexcept.c' || echo '$(srcdir)/'`feraiseexcept.c
>>>> +
>>>> +lib_a-feraiseexcept.obj: feraiseexcept.c
>>>> +       $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS)
>>>> $(CPPFLAGS) $(lib_a_CFLAGS) $(CFLAGS) -c -o lib_a-feraiseexcept.obj `if
>>>> test -f 'feraiseexcept.c'; then $(CYGPATH_W) 'feraiseexcept.c'; else
>>>> $(CYGPATH_W) '$(srcdir)/feraiseexcept.c'; fi`
>>>> +
>>>> +lib_a-fesetenv.o: fesetenv.c
>>>> +       $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS)
>>>> $(CPPFLAGS) $(lib_a_CFLAGS) $(CFLAGS) -c -o lib_a-fesetenv.o `test -f
>>>> 'fesetenv.c' || echo '$(srcdir)/'`fesetenv.c
>>>> +
>>>> +lib_a-fesetenv.obj: fesetenv.c
>>>> +       $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS)
>>>> $(CPPFLAGS) $(lib_a_CFLAGS) $(CFLAGS) -c -o lib_a-fesetenv.obj `if test -f
>>>> 'fesetenv.c'; then $(CYGPATH_W) 'fesetenv.c'; else $(CYGPATH_W)
>>>> '$(srcdir)/fesetenv.c'; fi`
>>>> +
>>>> +lib_a-fesetexceptflag.o: fesetexceptflag.c
>>>> +       $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS)
>>>> $(CPPFLAGS) $(lib_a_CFLAGS) $(CFLAGS) -c -o lib_a-fesetexceptflag.o `test
>>>> -f 'fesetexceptflag.c' || echo '$(srcdir)/'`fesetexceptflag.c
>>>> +
>>>> +lib_a-fesetexceptflag.obj: fesetexceptflag.c
>>>> +       $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS)
>>>> $(CPPFLAGS) $(lib_a_CFLAGS) $(CFLAGS) -c -o lib_a-fesetexceptflag.obj `if
>>>> test -f 'fesetexceptflag.c'; then $(CYGPATH_W) 'fesetexceptflag.c'; else
>>>> $(CYGPATH_W) '$(srcdir)/fesetexceptflag.c'; fi`
>>>> +
>>>> +lib_a-fesetround.o: fesetround.c
>>>> +       $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS)
>>>> $(CPPFLAGS) $(lib_a_CFLAGS) $(CFLAGS) -c -o lib_a-fesetround.o `test -f
>>>> 'fesetround.c' || echo '$(srcdir)/'`fesetround.c
>>>> +
>>>> +lib_a-fesetround.obj: fesetround.c
>>>> +       $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS)
>>>> $(CPPFLAGS) $(lib_a_CFLAGS) $(CFLAGS) -c -o lib_a-fesetround.obj `if test
>>>> -f 'fesetround.c'; then $(CYGPATH_W) 'fesetround.c'; else $(CYGPATH_W)
>>>> '$(srcdir)/fesetround.c'; fi`
>>>> +
>>>> +lib_a-fetestexcept.o: fetestexcept.c
>>>> +       $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS)
>>>> $(CPPFLAGS) $(lib_a_CFLAGS) $(CFLAGS) -c -o lib_a-fetestexcept.o `test -f
>>>> 'fetestexcept.c' || echo '$(srcdir)/'`fetestexcept.c
>>>> +
>>>> +lib_a-fetestexcept.obj: fetestexcept.c
>>>> +       $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS)
>>>> $(CPPFLAGS) $(lib_a_CFLAGS) $(CFLAGS) -c -o lib_a-fetestexcept.obj `if test
>>>> -f 'fetestexcept.c'; then $(CYGPATH_W) 'fetestexcept.c'; else $(CYGPATH_W)
>>>> '$(srcdir)/fetestexcept.c'; fi`
>>>> +
>>>> +lib_a-feupdateenv.o: feupdateenv.c
>>>> +       $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS)
>>>> $(CPPFLAGS) $(lib_a_CFLAGS) $(CFLAGS) -c -o lib_a-feupdateenv.o `test -f
>>>> 'feupdateenv.c' || echo '$(srcdir)/'`feupdateenv.c
>>>> +
>>>> +lib_a-feupdateenv.obj: feupdateenv.c
>>>> +       $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS)
>>>> $(CPPFLAGS) $(lib_a_CFLAGS) $(CFLAGS) -c -o lib_a-feupdateenv.obj `if test
>>>> -f 'feupdateenv.c'; then $(CYGPATH_W) 'feupdateenv.c'; else $(CYGPATH_W)
>>>> '$(srcdir)/feupdateenv.c'; fi`
>>>> +
>>>> +lib_a-fenv-vfp.o: fenv-vfp.c
>>>> +       $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS)
>>>> $(CPPFLAGS) $(lib_a_CFLAGS) $(CFLAGS) -c -o lib_a-fenv-vfp.o `test -f
>>>> 'fenv-vfp.c' || echo '$(srcdir)/'`fenv-vfp.c
>>>> +
>>>> +lib_a-fenv-vfp.obj: fenv-vfp.c
>>>> +       $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS)
>>>> $(CPPFLAGS) $(lib_a_CFLAGS) $(CFLAGS) -c -o lib_a-fenv-vfp.obj `if test -f
>>>> 'fenv-vfp.c'; then $(CYGPATH_W) 'fenv-vfp.c'; else $(CYGPATH_W)
>>>> '$(srcdir)/fenv-vfp.c'; fi`
>>>> +
>>>> +lib_a-fenv-softfp.o: fenv-softfp.c
>>>> +       $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS)
>>>> $(CPPFLAGS) $(lib_a_CFLAGS) $(CFLAGS) -c -o lib_a-fenv-softfp.o `test -f
>>>> 'fenv-softfp.c' || echo '$(srcdir)/'`fenv-softfp.c
>>>> +
>>>> +lib_a-fenv-softfp.obj: fenv-softfp.c
>>>> +       $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS)
>>>> $(CPPFLAGS) $(lib_a_CFLAGS) $(CFLAGS) -c -o lib_a-fenv-softfp.obj `if test
>>>> -f 'fenv-softfp.c'; then $(CYGPATH_W) 'fenv-softfp.c'; else $(CYGPATH_W)
>>>> '$(srcdir)/fenv-softfp.c'; fi`
>>>> +
>>>>  ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
>>>>         list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
>>>>         unique=`for i in $$list; do \
>>>> @@ -427,8 +541,32 @@ GTAGS:
>>>>           && $(am__cd) $(top_srcdir) \
>>>>           && gtags -i $(GTAGS_ARGS) "$$here"
>>>>
>>>> +cscope: cscope.files
>>>> +       test ! -s cscope.files \
>>>> +         || $(CSCOPE) -b -q $(AM_CSCOPEFLAGS) $(CSCOPEFLAGS) -i
>>>> cscope.files $(CSCOPE_ARGS)
>>>> +
>>>> +clean-cscope:
>>>> +       -rm -f cscope.files
>>>> +
>>>> +cscope.files: clean-cscope  cscopelist
>>>> +
>>>> +cscopelist:  $(HEADERS) $(SOURCES) $(LISP)
>>>> +       list='$(SOURCES) $(HEADERS) $(LISP)'; \
>>>> +       case "$(srcdir)" in \
>>>> +         [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
>>>> +         *) sdir=$(subdir)/$(srcdir) ;; \
>>>> +       esac; \
>>>> +       for i in $$list; do \
>>>> +         if test -f "$$i"; then \
>>>> +           echo "$(subdir)/$$i"; \
>>>> +         else \
>>>> +           echo "$$sdir/$$i"; \
>>>> +         fi; \
>>>> +       done >> $(top_builddir)/cscope.files
>>>> +
>>>>  distclean-tags:
>>>>         -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
>>>> +       -rm -f cscope.out cscope.in.out cscope.po.out cscope.files
>>>>  check-am:
>>>>  check: check-am
>>>>  all-am: Makefile $(LIBRARIES) $(DATA)
>>>> @@ -537,17 +675,17 @@ uninstall-am:
>>>>  .MAKE: install-am install-strip
>>>>
>>>>  .PHONY: CTAGS GTAGS all all-am am--refresh check check-am clean \
>>>> -       clean-generic clean-noinstLIBRARIES ctags distclean \
>>>> -       distclean-compile distclean-generic distclean-tags dvi dvi-am \
>>>> -       html html-am info info-am install install-am install-data \
>>>> -       install-data-am install-dvi install-dvi-am install-exec \
>>>> -       install-exec-am install-html install-html-am install-info \
>>>> -       install-info-am install-man install-pdf install-pdf-am \
>>>> -       install-ps install-ps-am install-strip installcheck \
>>>> -       installcheck-am installdirs maintainer-clean \
>>>> -       maintainer-clean-generic mostlyclean mostlyclean-compile \
>>>> -       mostlyclean-generic pdf pdf-am ps ps-am tags uninstall \
>>>> -       uninstall-am
>>>> +       clean-cscope clean-generic clean-noinstLIBRARIES cscope \
>>>> +       cscopelist ctags distclean distclean-compile distclean-generic \
>>>> +       distclean-tags dvi dvi-am html html-am info info-am install \
>>>> +       install-am install-data install-data-am install-dvi \
>>>> +       install-dvi-am install-exec install-exec-am install-html \
>>>> +       install-html-am install-info install-info-am install-man \
>>>> +       install-pdf install-pdf-am install-ps install-ps-am \
>>>> +       install-strip installcheck installcheck-am installdirs \
>>>> +       maintainer-clean maintainer-clean-generic mostlyclean \
>>>> +       mostlyclean-compile mostlyclean-generic pdf pdf-am ps ps-am \
>>>> +       tags uninstall uninstall-am
>>>>
>>>>  objectlist.awk.in: $(noinst_LTLIBRARIES)
>>>>         -rm -f objectlist.awk.in
>>>> diff --git a/newlib/libm/machine/arm/fe_dfl_env.c
>>>> b/newlib/libm/machine/arm/fe_dfl_env.c
>>>> new file mode 100644
>>>> index 000000000..8cbee7771
>>>> --- /dev/null
>>>> +++ b/newlib/libm/machine/arm/fe_dfl_env.c
>>>> @@ -0,0 +1,7 @@
>>>> +/*
>>>> + * SPDX-License-Identifier: BSD-2-Clause
>>>> + *
>>>> + * (c) Copyright 2019 Joel Sherrill <joel at rtems.org>
>>>> + */
>>>> +
>>>> +#include "../../fenv/fenv_stub.c"
>>>> diff --git a/newlib/libm/machine/arm/feclearexcept.c
>>>> b/newlib/libm/machine/arm/feclearexcept.c
>>>> new file mode 100644
>>>> index 000000000..8cbee7771
>>>> --- /dev/null
>>>> +++ b/newlib/libm/machine/arm/feclearexcept.c
>>>> @@ -0,0 +1,7 @@
>>>> +/*
>>>> + * SPDX-License-Identifier: BSD-2-Clause
>>>> + *
>>>> + * (c) Copyright 2019 Joel Sherrill <joel at rtems.org>
>>>> + */
>>>> +
>>>> +#include "../../fenv/fenv_stub.c"
>>>> diff --git a/newlib/libm/machine/arm/fegetenv.c
>>>> b/newlib/libm/machine/arm/fegetenv.c
>>>> new file mode 100644
>>>> index 000000000..8cbee7771
>>>> --- /dev/null
>>>> +++ b/newlib/libm/machine/arm/fegetenv.c
>>>> @@ -0,0 +1,7 @@
>>>> +/*
>>>> + * SPDX-License-Identifier: BSD-2-Clause
>>>> + *
>>>> + * (c) Copyright 2019 Joel Sherrill <joel at rtems.org>
>>>> + */
>>>> +
>>>> +#include "../../fenv/fenv_stub.c"
>>>> diff --git a/newlib/libm/machine/arm/fegetexceptflag.c
>>>> b/newlib/libm/machine/arm/fegetexceptflag.c
>>>> new file mode 100644
>>>> index 000000000..8cbee7771
>>>> --- /dev/null
>>>> +++ b/newlib/libm/machine/arm/fegetexceptflag.c
>>>> @@ -0,0 +1,7 @@
>>>> +/*
>>>> + * SPDX-License-Identifier: BSD-2-Clause
>>>> + *
>>>> + * (c) Copyright 2019 Joel Sherrill <joel at rtems.org>
>>>> + */
>>>> +
>>>> +#include "../../fenv/fenv_stub.c"
>>>> diff --git a/newlib/libm/machine/arm/fegetround.c
>>>> b/newlib/libm/machine/arm/fegetround.c
>>>> new file mode 100644
>>>> index 000000000..8cbee7771
>>>> --- /dev/null
>>>> +++ b/newlib/libm/machine/arm/fegetround.c
>>>> @@ -0,0 +1,7 @@
>>>> +/*
>>>> + * SPDX-License-Identifier: BSD-2-Clause
>>>> + *
>>>> + * (c) Copyright 2019 Joel Sherrill <joel at rtems.org>
>>>> + */
>>>> +
>>>> +#include "../../fenv/fenv_stub.c"
>>>> diff --git a/newlib/libm/machine/arm/feholdexcept.c
>>>> b/newlib/libm/machine/arm/feholdexcept.c
>>>> new file mode 100644
>>>> index 000000000..8cbee7771
>>>> --- /dev/null
>>>> +++ b/newlib/libm/machine/arm/feholdexcept.c
>>>> @@ -0,0 +1,7 @@
>>>> +/*
>>>> + * SPDX-License-Identifier: BSD-2-Clause
>>>> + *
>>>> + * (c) Copyright 2019 Joel Sherrill <joel at rtems.org>
>>>> + */
>>>> +
>>>> +#include "../../fenv/fenv_stub.c"
>>>> diff --git a/newlib/libm/machine/arm/fenv-softfp.c
>>>> b/newlib/libm/machine/arm/fenv-softfp.c
>>>> new file mode 100644
>>>> index 000000000..a576cc1b2
>>>> --- /dev/null
>>>> +++ b/newlib/libm/machine/arm/fenv-softfp.c
>>>> @@ -0,0 +1,32 @@
>>>> +/*-
>>>> + * Copyright (c) 2013 Andrew Turner <andrew at FreeBSD.ORG>
>>>> + * All rights reserved.
>>>> + *
>>>> + * Redistribution and use in source and binary forms, with or without
>>>> + * modification, are permitted provided that the following conditions
>>>> + * are met:
>>>> + * 1. Redistributions of source code must retain the above copyright
>>>> + *    notice, this list of conditions and the following disclaimer.
>>>> + * 2. Redistributions in binary form must reproduce the above copyright
>>>> + *    notice, this list of conditions and the following disclaimer in
>>>> the
>>>> + *    documentation and/or other materials provided with the
>>>> distribution.
>>>> + *
>>>> + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS''
>>>> AND
>>>> + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
>>>> THE
>>>> + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
>>>> PURPOSE
>>>> + * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE
>>>> LIABLE
>>>> + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
>>>> CONSEQUENTIAL
>>>> + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
>>>> GOODS
>>>> + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
>>>> INTERRUPTION)
>>>> + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
>>>> STRICT
>>>> + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
>>>> ANY WAY
>>>> + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
>>>> OF
>>>> + * SUCH DAMAGE.
>>>> + *
>>>> + * $FreeBSD$
>>>> + */
>>>> +
>>>> +#define        FENV_MANGLE(x)  __softfp_ ##x
>>>> +#include <machine/fenv-mangle.h>
>>>> +#include "fenv.c"
>>>> +
>>>> diff --git a/newlib/libm/machine/arm/fenv-vfp.c
>>>> b/newlib/libm/machine/arm/fenv-vfp.c
>>>> new file mode 100644
>>>> index 000000000..297e81296
>>>> --- /dev/null
>>>> +++ b/newlib/libm/machine/arm/fenv-vfp.c
>>>> @@ -0,0 +1,32 @@
>>>> +/*-
>>>> + * Copyright (c) 2013 Andrew Turner <andrew at FreeBSD.ORG>
>>>> + * All rights reserved.
>>>> + *
>>>> + * Redistribution and use in source and binary forms, with or without
>>>> + * modification, are permitted provided that the following conditions
>>>> + * are met:
>>>> + * 1. Redistributions of source code must retain the above copyright
>>>> + *    notice, this list of conditions and the following disclaimer.
>>>> + * 2. Redistributions in binary form must reproduce the above copyright
>>>> + *    notice, this list of conditions and the following disclaimer in
>>>> the
>>>> + *    documentation and/or other materials provided with the
>>>> distribution.
>>>> + *
>>>> + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS''
>>>> AND
>>>> + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
>>>> THE
>>>> + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
>>>> PURPOSE
>>>> + * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE
>>>> LIABLE
>>>> + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
>>>> CONSEQUENTIAL
>>>> + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
>>>> GOODS
>>>> + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
>>>> INTERRUPTION)
>>>> + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
>>>> STRICT
>>>> + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
>>>> ANY WAY
>>>> + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
>>>> OF
>>>> + * SUCH DAMAGE.
>>>> + *
>>>> + * $FreeBSD$
>>>> + */
>>>> +
>>>> +#define        FENV_MANGLE(x)  __vfp_ ##x
>>>> +#include <machine/fenv-mangle.h>
>>>> +#include "fenv.c"
>>>> +
>>>> diff --git a/newlib/libm/machine/arm/fenv.c
>>>> b/newlib/libm/machine/arm/fenv.c
>>>> new file mode 100644
>>>> index 000000000..278de8633
>>>> --- /dev/null
>>>> +++ b/newlib/libm/machine/arm/fenv.c
>>>> @@ -0,0 +1,328 @@
>>>> +/*-
>>>> + * SPDX-License-Identifier: BSD-2-Clause-FreeBSD
>>>> + *
>>>> + * Copyright (c) 2004 David Schultz <das at FreeBSD.ORG>
>>>> + * Copyright (c) 2013 Andrew Turner <andrew at FreeBSD.ORG>
>>>> + * All rights reserved.
>>>> + *
>>>> + * Redistribution and use in source and binary forms, with or without
>>>> + * modification, are permitted provided that the following conditions
>>>> + * are met:
>>>> + * 1. Redistributions of source code must retain the above copyright
>>>> + *    notice, this list of conditions and the following disclaimer.
>>>> + * 2. Redistributions in binary form must reproduce the above copyright
>>>> + *    notice, this list of conditions and the following disclaimer in
>>>> the
>>>> + *    documentation and/or other materials provided with the
>>>> distribution.
>>>> + *
>>>> + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS''
>>>> AND
>>>> + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
>>>> THE
>>>> + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
>>>> PURPOSE
>>>> + * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE
>>>> LIABLE
>>>> + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
>>>> CONSEQUENTIAL
>>>> + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
>>>> GOODS
>>>> + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
>>>> INTERRUPTION)
>>>> + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
>>>> STRICT
>>>> + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
>>>> ANY WAY
>>>> + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
>>>> OF
>>>> + * SUCH DAMAGE.
>>>> + *
>>>> + * $FreeBSD$
>>>> + */
>>>> +
>>>> +#define        __fenv_static
>>>> +#include <fenv.h>
>>>> +
>>>> +#include <machine/acle-compat.h>
>>>> +
>>>> +#if __ARM_ARCH >= 6
>>>> +#define FENV_ARMv6
>>>> +#endif
>>>> +
>>>> +/* When SOFTFP_ABI is defined we are using the softfp ABI. */
>>>> +#if defined(__VFP_FP__) && !defined(__ARM_PCS_VFP)
>>>> +#define SOFTFP_ABI
>>>> +#endif
>>>> +
>>>> +
>>>> +#ifndef FENV_MANGLE
>>>> +/*
>>>> + * Hopefully the system ID byte is immutable, so it's valid to use
>>>> + * this as a default environment.
>>>> + */
>>>> +fenv_t __fe_dfl_env = { 0 };
>>>> +
>>>> +const fenv_t *_fe_dfl_env = &__fe_dfl_env;
>>>> +#endif
>>>> +
>>>> +
>>>> +/* If this is a non-mangled softfp version special processing is
>>>> required */
>>>> +#if defined(FENV_MANGLE) || !defined(SOFTFP_ABI) ||
>>>> !defined(FENV_ARMv6)
>>>> +
>>>> +/*
>>>> + * The following macros map between the softfloat emulator's flags and
>>>> + * the hardware's FPSR.  The hardware this file was written for doesn't
>>>> + * have rounding control bits, so we stick those in the system ID byte.
>>>> + */
>>>> +#ifndef __ARM_PCS_VFP
>>>> +#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>
>>>> +
>>>> +#else /* __ARM_PCS_VFP PRESENT */
>>>> +
>>>> +#include <machine/fenv-vfp.h>
>>>> +
>>>> +#endif /* __ARM_PCS_VFP */
>>>> +
>>>> +#ifdef __GNUC_GNU_INLINE__
>>>> +#error "This file must be compiled with C99 'inline' semantics"
>>>> +#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);
>>>> +extern inline int feraiseexcept(int excepts);
>>>> +extern inline int fetestexcept(int excepts);
>>>> +extern inline int fegetround(void);
>>>> +extern inline int fesetround(int round);
>>>> +extern inline int fegetenv(fenv_t *envp);
>>>> +extern inline int feholdexcept(fenv_t *envp);
>>>> +extern inline int fesetenv(const fenv_t *envp);
>>>> +extern inline int feupdateenv(const fenv_t *envp);
>>>> +extern inline int feenableexcept(int __mask);
>>>> +extern inline int fedisableexcept(int __mask);
>>>> +extern inline int fegetexcept(void);
>>>> +
>>>> +#else /* !FENV_MANGLE && SOFTFP_ABI */
>>>> +/* Set by libc when the VFP unit is enabled */
>>>> +
>>>> +extern int _libc_arm_fpu_present;
>>>> +
>>>> +int __softfp_feclearexcept(int excepts);
>>>> +int __softfp_fegetexceptflag(fexcept_t *flagp, int excepts);
>>>> +int __softfp_fesetexceptflag(const fexcept_t *flagp, int excepts);
>>>> +int __softfp_feraiseexcept(int excepts);
>>>> +int __softfp_fetestexcept(int excepts);
>>>> +int __softfp_fegetround(void);
>>>> +int __softfp_fesetround(int round);
>>>> +int __softfp_fegetenv(fenv_t *envp);
>>>> +int __softfp_feholdexcept(fenv_t *envp);
>>>> +int __softfp_fesetenv(const fenv_t *envp);
>>>> +int __softfp_feupdateenv(const fenv_t *envp);
>>>> +int __softfp_feenableexcept(int __mask);
>>>> +int __softfp_fedisableexcept(int __mask);
>>>> +int __softfp_fegetexcept(void);
>>>> +
>>>> +int __vfp_feclearexcept(int excepts);
>>>> +int __vfp_fegetexceptflag(fexcept_t *flagp, int excepts);
>>>> +int __vfp_fesetexceptflag(const fexcept_t *flagp, int excepts);
>>>> +int __vfp_feraiseexcept(int excepts);
>>>> +int __vfp_fetestexcept(int excepts);
>>>> +int __vfp_fegetround(void);
>>>> +int __vfp_fesetround(int round);
>>>> +int __vfp_fegetenv(fenv_t *envp);
>>>> +int __vfp_feholdexcept(fenv_t *envp);
>>>> +int __vfp_fesetenv(const fenv_t *envp);
>>>> +int __vfp_feupdateenv(const fenv_t *envp);
>>>> +int __vfp_feenableexcept(int __mask);
>>>> +int __vfp_fedisableexcept(int __mask);
>>>> +int __vfp_fegetexcept(void);
>>>> +
>>>> +static int
>>>> +__softfp_round_to_vfp(int round)
>>>> +{
>>>> +
>>>> +       switch (round) {
>>>> +       case FE_TONEAREST:
>>>> +       default:
>>>> +               return VFP_FE_TONEAREST;
>>>> +       case FE_TOWARDZERO:
>>>> +               return VFP_FE_TOWARDZERO;
>>>> +       case FE_UPWARD:
>>>> +               return VFP_FE_UPWARD;
>>>> +       case FE_DOWNWARD:
>>>> +               return VFP_FE_DOWNWARD;
>>>> +       }
>>>> +}
>>>> +
>>>> +static int
>>>> +__softfp_round_from_vfp(int round)
>>>> +{
>>>> +
>>>> +       switch (round) {
>>>> +       case VFP_FE_TONEAREST:
>>>> +       default:
>>>> +               return FE_TONEAREST;
>>>> +       case VFP_FE_TOWARDZERO:
>>>> +               return FE_TOWARDZERO;
>>>> +       case VFP_FE_UPWARD:
>>>> +               return FE_UPWARD;
>>>> +       case VFP_FE_DOWNWARD:
>>>> +               return FE_DOWNWARD;
>>>> +       }
>>>> +}
>>>> +
>>>> +int feclearexcept(int excepts)
>>>> +{
>>>> +
>>>> +       if (_libc_arm_fpu_present)
>>>> +               __vfp_feclearexcept(excepts);
>>>> +       __softfp_feclearexcept(excepts);
>>>> +
>>>> +       return (0);
>>>> +}
>>>> +
>>>> +int fegetexceptflag(fexcept_t *flagp, int excepts)
>>>> +{
>>>> +       fexcept_t __vfp_flagp;
>>>> +
>>>> +       __vfp_flagp = 0;
>>>> +       if (_libc_arm_fpu_present)
>>>> +               __vfp_fegetexceptflag(&__vfp_flagp, excepts);
>>>> +       __softfp_fegetexceptflag(flagp, excepts);
>>>> +
>>>> +       *flagp |= __vfp_flagp;
>>>> +
>>>> +       return (0);
>>>> +}
>>>> +
>>>> +int fesetexceptflag(const fexcept_t *flagp, int excepts)
>>>> +{
>>>> +
>>>> +       if (_libc_arm_fpu_present)
>>>> +               __vfp_fesetexceptflag(flagp, excepts);
>>>> +       __softfp_fesetexceptflag(flagp, excepts);
>>>> +
>>>> +       return (0);
>>>> +}
>>>> +
>>>> +int feraiseexcept(int excepts)
>>>> +{
>>>> +
>>>> +       if (_libc_arm_fpu_present)
>>>> +               __vfp_feraiseexcept(excepts);
>>>> +       __softfp_feraiseexcept(excepts);
>>>> +
>>>> +       return (0);
>>>> +}
>>>> +
>>>> +int fetestexcept(int excepts)
>>>> +{
>>>> +       int __got_excepts;
>>>> +
>>>> +       __got_excepts = 0;
>>>> +       if (_libc_arm_fpu_present)
>>>> +               __got_excepts = __vfp_fetestexcept(excepts);
>>>> +       __got_excepts |= __softfp_fetestexcept(excepts);
>>>> +
>>>> +       return (__got_excepts);
>>>> +}
>>>> +
>>>> +int fegetround(void)
>>>> +{
>>>> +
>>>> +       if (_libc_arm_fpu_present)
>>>> +               return __softfp_round_from_vfp(__vfp_fegetround());
>>>> +       return __softfp_fegetround();
>>>> +}
>>>> +
>>>> +int fesetround(int round)
>>>> +{
>>>> +
>>>> +       if (_libc_arm_fpu_present)
>>>> +               __vfp_fesetround(__softfp_round_to_vfp(round));
>>>> +       __softfp_fesetround(round);
>>>> +
>>>> +       return (0);
>>>> +}
>>>> +
>>>> +int fegetenv(fenv_t *envp)
>>>> +{
>>>> +       fenv_t __vfp_envp;
>>>> +
>>>> +       __vfp_envp = 0;
>>>> +       if (_libc_arm_fpu_present)
>>>> +               __vfp_fegetenv(&__vfp_envp);
>>>> +       __softfp_fegetenv(envp);
>>>> +       *envp |= __vfp_envp;
>>>> +
>>>> +       return (0);
>>>> +}
>>>> +
>>>> +int feholdexcept(fenv_t *envp)
>>>> +{
>>>> +       fenv_t __vfp_envp;
>>>> +
>>>> +       __vfp_envp = 0;
>>>> +       if (_libc_arm_fpu_present)
>>>> +               __vfp_feholdexcept(&__vfp_envp);
>>>> +       __softfp_feholdexcept(envp);
>>>> +       *envp |= __vfp_envp;
>>>> +
>>>> +       return (0);
>>>> +}
>>>> +
>>>> +int fesetenv(const fenv_t *envp)
>>>> +{
>>>> +
>>>> +       if (_libc_arm_fpu_present)
>>>> +               __vfp_fesetenv(envp);
>>>> +       __softfp_fesetenv(envp);
>>>> +
>>>> +       return (0);
>>>> +}
>>>> +
>>>> +int feupdateenv(const fenv_t *envp)
>>>> +{
>>>> +
>>>> +       if (_libc_arm_fpu_present)
>>>> +               __vfp_feupdateenv(envp);
>>>> +       __softfp_feupdateenv(envp);
>>>> +
>>>> +       return (0);
>>>> +}
>>>> +
>>>> +int feenableexcept(int __mask)
>>>> +{
>>>> +       int __unmasked;
>>>> +
>>>> +       __unmasked = 0;
>>>> +       if (_libc_arm_fpu_present)
>>>> +               __unmasked = __vfp_feenableexcept(__mask);
>>>> +       __unmasked |= __softfp_feenableexcept(__mask);
>>>> +
>>>> +       return (__unmasked);
>>>> +}
>>>> +
>>>> +int fedisableexcept(int __mask)
>>>> +{
>>>> +       int __unmasked;
>>>> +
>>>> +       __unmasked = 0;
>>>> +       if (_libc_arm_fpu_present)
>>>> +               __unmasked = __vfp_fedisableexcept(__mask);
>>>> +       __unmasked |= __softfp_fedisableexcept(__mask);
>>>> +
>>>> +       return (__unmasked);
>>>> +}
>>>> +
>>>> +int fegetexcept(void)
>>>> +{
>>>> +       int __unmasked;
>>>> +
>>>> +       __unmasked = 0;
>>>> +       if (_libc_arm_fpu_present)
>>>> +               __unmasked = __vfp_fegetexcept();
>>>> +       __unmasked |= __softfp_fegetexcept();
>>>> +
>>>> +       return (__unmasked);
>>>> +}
>>>> +
>>>> +#endif
>>>> +
>>>> diff --git a/newlib/libm/machine/arm/feraiseexcept.c
>>>> b/newlib/libm/machine/arm/feraiseexcept.c
>>>> new file mode 100644
>>>> index 000000000..8cbee7771
>>>> --- /dev/null
>>>> +++ b/newlib/libm/machine/arm/feraiseexcept.c
>>>> @@ -0,0 +1,7 @@
>>>> +/*
>>>> + * SPDX-License-Identifier: BSD-2-Clause
>>>> + *
>>>> + * (c) Copyright 2019 Joel Sherrill <joel at rtems.org>
>>>> + */
>>>> +
>>>> +#include "../../fenv/fenv_stub.c"
>>>> diff --git a/newlib/libm/machine/arm/fesetenv.c
>>>> b/newlib/libm/machine/arm/fesetenv.c
>>>> new file mode 100644
>>>> index 000000000..8cbee7771
>>>> --- /dev/null
>>>> +++ b/newlib/libm/machine/arm/fesetenv.c
>>>> @@ -0,0 +1,7 @@
>>>> +/*
>>>> + * SPDX-License-Identifier: BSD-2-Clause
>>>> + *
>>>> + * (c) Copyright 2019 Joel Sherrill <joel at rtems.org>
>>>> + */
>>>> +
>>>> +#include "../../fenv/fenv_stub.c"
>>>> diff --git a/newlib/libm/machine/arm/fesetexceptflag.c
>>>> b/newlib/libm/machine/arm/fesetexceptflag.c
>>>> new file mode 100644
>>>> index 000000000..8cbee7771
>>>> --- /dev/null
>>>> +++ b/newlib/libm/machine/arm/fesetexceptflag.c
>>>> @@ -0,0 +1,7 @@
>>>> +/*
>>>> + * SPDX-License-Identifier: BSD-2-Clause
>>>> + *
>>>> + * (c) Copyright 2019 Joel Sherrill <joel at rtems.org>
>>>> + */
>>>> +
>>>> +#include "../../fenv/fenv_stub.c"
>>>> diff --git a/newlib/libm/machine/arm/fesetround.c
>>>> b/newlib/libm/machine/arm/fesetround.c
>>>> new file mode 100644
>>>> index 000000000..8cbee7771
>>>> --- /dev/null
>>>> +++ b/newlib/libm/machine/arm/fesetround.c
>>>> @@ -0,0 +1,7 @@
>>>> +/*
>>>> + * SPDX-License-Identifier: BSD-2-Clause
>>>> + *
>>>> + * (c) Copyright 2019 Joel Sherrill <joel at rtems.org>
>>>> + */
>>>> +
>>>> +#include "../../fenv/fenv_stub.c"
>>>> diff --git a/newlib/libm/machine/arm/fetestexcept.c
>>>> b/newlib/libm/machine/arm/fetestexcept.c
>>>> new file mode 100644
>>>> index 000000000..8cbee7771
>>>> --- /dev/null
>>>> +++ b/newlib/libm/machine/arm/fetestexcept.c
>>>> @@ -0,0 +1,7 @@
>>>> +/*
>>>> + * SPDX-License-Identifier: BSD-2-Clause
>>>> + *
>>>> + * (c) Copyright 2019 Joel Sherrill <joel at rtems.org>
>>>> + */
>>>> +
>>>> +#include "../../fenv/fenv_stub.c"
>>>> diff --git a/newlib/libm/machine/arm/feupdateenv.c
>>>> b/newlib/libm/machine/arm/feupdateenv.c
>>>> new file mode 100644
>>>> index 000000000..8cbee7771
>>>> --- /dev/null
>>>> +++ b/newlib/libm/machine/arm/feupdateenv.c
>>>> @@ -0,0 +1,7 @@
>>>> +/*
>>>> + * SPDX-License-Identifier: BSD-2-Clause
>>>> + *
>>>> + * (c) Copyright 2019 Joel Sherrill <joel at rtems.org>
>>>> + */
>>>> +
>>>> +#include "../../fenv/fenv_stub.c"
>>>> --
>>>> 2.17.1
>>>>
>>>>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.rtems.org/pipermail/devel/attachments/20200525/e6d0c092/attachment-0001.html>


More information about the devel mailing list