diff options
author | Joel Sherrill <joel@rtems.org> | 2019-08-08 19:27:06 +0300 |
---|---|---|
committer | Corinna Vinschen <corinna@vinschen.de> | 2019-08-09 18:49:16 +0300 |
commit | eae68bfc877ef245b3a1550f70eb2c039d3c4fb0 (patch) | |
tree | b61a8b8a1e2e64f01bb382fac55b731817b67d1b /newlib/libm/fenv | |
parent | 03f802846fdf72e102fa6bbbac8c5d713cdb129c (diff) |
Add default implementation of fenv.h and all methods
The default implementation of the fenv.h methods return
-EOPNOTSUP. Some of these have implementations appropriate
for soft-float.
The intention of the new fenv.h is that it be portable
and that architectures provide their own implementation
of sys/fenv.h.
Diffstat (limited to 'newlib/libm/fenv')
-rw-r--r-- | newlib/libm/fenv/Makefile.am | 36 | ||||
-rw-r--r-- | newlib/libm/fenv/fe_dfl_env.c | 42 | ||||
-rw-r--r-- | newlib/libm/fenv/feclearexcept.c | 67 | ||||
-rw-r--r-- | newlib/libm/fenv/fegetenv.c | 67 | ||||
-rw-r--r-- | newlib/libm/fenv/fegetexceptflag.c | 68 | ||||
-rw-r--r-- | newlib/libm/fenv/fegetround.c | 66 | ||||
-rw-r--r-- | newlib/libm/fenv/feholdexcept.c | 70 | ||||
-rw-r--r-- | newlib/libm/fenv/feraiseexcept.c | 67 | ||||
-rw-r--r-- | newlib/libm/fenv/fesetenv.c | 72 | ||||
-rw-r--r-- | newlib/libm/fenv/fesetexceptflag.c | 73 | ||||
-rw-r--r-- | newlib/libm/fenv/fesetround.c | 67 | ||||
-rw-r--r-- | newlib/libm/fenv/fetestexcept.c | 68 | ||||
-rw-r--r-- | newlib/libm/fenv/feupdateenv.c | 72 |
13 files changed, 835 insertions, 0 deletions
diff --git a/newlib/libm/fenv/Makefile.am b/newlib/libm/fenv/Makefile.am new file mode 100644 index 000000000..fef5c3609 --- /dev/null +++ b/newlib/libm/fenv/Makefile.am @@ -0,0 +1,36 @@ +## Process this file with automake to generate Makefile.in + +AUTOMAKE_OPTIONS = cygnus + +INCLUDES = $(NEWLIB_CFLAGS) $(CROSS_CFLAGS) $(TARGET_CFLAGS) + +src = feclearexcept.c fe_dfl_env.c fegetenv.c fegetexceptflag.c \ + fegetround.c feholdexcept.c feraiseexcept.c fesetenv.c \ + fesetexceptflag.c fesetround.c fetestexcept.c feupdateenv.c + +libcommon_la_LDFLAGS = -Xcompiler -nostdlib +lib_a_CFLAGS = -fbuiltin -fno-math-errno + +if USE_LIBTOOL +noinst_LTLIBRARIES = libcommon.la +libcommon_la_SOURCES = $(src) +noinst_DATA = objectlist.awk.in +else +noinst_LIBRARIES = lib.a +lib_a_SOURCES = $(src) +lib_a_CFLAGS += $(AM_CFLAGS) +noinst_DATA = +endif # USE_LIBTOOL + +include $(srcdir)/../../Makefile.shared + +CHEWOUT_FILES = feclearexcept.def fe_dfl_env.def fegetenv.def \ + fegetexceptflag.def fegetround.def feholdexcept.def \ + feraiseexcept.def fesetenv.def fesetexceptflag.def fesetround.def \ + fetestexcept.def feupdateenv.def + +CHAPTERS = + +# A partial dependency list. + +$(lib_a_OBJECTS): $(srcdir)/../../libc/include/fenv.h diff --git a/newlib/libm/fenv/fe_dfl_env.c b/newlib/libm/fenv/fe_dfl_env.c new file mode 100644 index 000000000..0606327fa --- /dev/null +++ b/newlib/libm/fenv/fe_dfl_env.c @@ -0,0 +1,42 @@ +/* + (c) Copyright 2019 Joel Sherrill <joel@rtems.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 COPYRIGHT HOLDERS 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 COPYRIGHT + HOLDER 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. +*/ + +#include <fenv.h> + +/* + * This is a non-functional implementation that should be overridden + * by an architecture specific implementation in newlib/libm/machine/ARCH. + * + * The implementation must defined FE_DFL_ENV to point to a default + * environment of type fenv_t. + */ + +/* Non-static and writable to allow initialization at startup. */ +fenv_t __fe_dfl_env = { 0 }; + +const fenv_t *_fe_dfl_env = &__fe_dfl_env; diff --git a/newlib/libm/fenv/feclearexcept.c b/newlib/libm/fenv/feclearexcept.c new file mode 100644 index 000000000..534da63d3 --- /dev/null +++ b/newlib/libm/fenv/feclearexcept.c @@ -0,0 +1,67 @@ +/* + (c) Copyright 2019 Joel Sherrill <joel@rtems.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 COPYRIGHT HOLDERS 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 COPYRIGHT + HOLDER 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. +*/ + +/* +FUNCTION +<<feclearexcept>>---clear floating-point exception + +INDEX + feclearexcept +SYNOPSIS + #include <fenv.h> + int feclearexcept(int <[except]>); + + Link with -lm. + +DESCRIPTION +This method attempts to clear the floating-point exceptions specified +in <[except]>. + +RETURNS +If the <[except]> argument is zero or all requested exceptions were +successfully cleared, this method returns zero. Otherwise, a non-zero +value is returned. + +PORTABILITY +ANSI C requires <<feclearexcept>>. + +Not all Newlib targets have a working implementation. Refer to +the file <<sys/fenv.h>> to see the status for your target. +*/ + +#include <fenv.h> +#include <errno.h> + +/* + * This is a non-functional implementation that should be overridden + * by an architecture specific implementation in newlib/libm/machine/ARCH. + */ +int feclearexcept(int excepts) +{ + return (excepts ? -ENOTSUP : 0); +} diff --git a/newlib/libm/fenv/fegetenv.c b/newlib/libm/fenv/fegetenv.c new file mode 100644 index 000000000..67ebb3f0d --- /dev/null +++ b/newlib/libm/fenv/fegetenv.c @@ -0,0 +1,67 @@ +/* + (c) Copyright 2019 Joel Sherrill <joel@rtems.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 COPYRIGHT HOLDERS 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 COPYRIGHT + HOLDER 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. +*/ + +#include <fenv.h> +#include <errno.h> + +/* +FUNCTION +<<fegetenv>>---get current floating-point environment + +INDEX + fegetenv + +SYNOPSIS + #include <fenv.h> + int fegetenv(fenv_t *<[envp]>); + + Link with -lm. + +DESCRIPTION +This method attempts to return the floating-point environment +in the area specified by <[envp]>. + +RETURNS +If floating-point environment was successfully returned, then +this method returns zero. Otherwise, a non-zero value is returned. + +PORTABILITY +ANSI C requires <<fegetenv>>. + +Not all Newlib targets have a working implementation. Refer to +the file <<sys/fenv.h>> to see the status for your target. +*/ + +/* + * This is a non-functional implementation that should be overridden + * by an architecture specific implementation in newlib/libm/machine/ARCH. + */ +int fegetenv(fenv_t *envp) +{ + return -ENOTSUP; +} diff --git a/newlib/libm/fenv/fegetexceptflag.c b/newlib/libm/fenv/fegetexceptflag.c new file mode 100644 index 000000000..e0e20b926 --- /dev/null +++ b/newlib/libm/fenv/fegetexceptflag.c @@ -0,0 +1,68 @@ +/* + (c) Copyright 2019 Joel Sherrill <joel@rtems.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 COPYRIGHT HOLDERS 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 COPYRIGHT + HOLDER 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. +*/ + +#include <fenv.h> +#include <errno.h> + +/* +FUNCTION +<<fegetexceptflag>>---get floating-point status flags + +INDEX + fegetexceptflag + +SYNOPSIS + #include <fenv.h> + int fegetexceptflag(fexcept_t *<[flagp]>, int <[excepts]>); + + Link with -lm. + +DESCRIPTION +This method attempts to store an implementation-defined representation +of the states of the floating-point status flags specified by <[excepts]> +in the memory pointed to by <[flagp>]. + +RETURNS +If the information was successfully returned, this method returns +zero. Otherwise, a non-zero value is returned. + +PORTABILITY +ANSI C requires <<fegetexceptflag>>. + +Not all Newlib targets have a working implementation. Refer to +the file <<sys/fenv.h>> to see the status for your target. +*/ + +/* + * This is a non-functional implementation that should be overridden + * by an architecture specific implementation in newlib/libm/machine/ARCH. + */ +int fegetexceptflag(fexcept_t *flagp, int excepts) +{ + return -ENOTSUP; +} diff --git a/newlib/libm/fenv/fegetround.c b/newlib/libm/fenv/fegetround.c new file mode 100644 index 000000000..1a7c2fd34 --- /dev/null +++ b/newlib/libm/fenv/fegetround.c @@ -0,0 +1,66 @@ +/* + (c) Copyright 2019 Joel Sherrill <joel@rtems.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 COPYRIGHT HOLDERS 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 COPYRIGHT + HOLDER 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. +*/ + +#include <fenv.h> +#include <errno.h> + +/* +FUNCTION +<<fegetround>>---get current rounding direction + +INDEX + fegetround +SYNOPSIS + #include <fenv.h> + int fegetround(void); + + Link with -lm. + +DESCRIPTION +This method returns the current rounding direction. + +RETURNS +This method returns the rounding direction, corresponding to the value +of the respective rouding macro. If the current rounding direction cannot +be determined, then a negative value is returned. + +PORTABILITY +ANSI C requires <<fegetround>>. + +Not all Newlib targets have a working implementation. Refer to +the file <<sys/fenv.h>> to see the status for your target. +*/ + +/* + * This is a non-functional implementation that should be overridden + * by an architecture specific implementation in newlib/libm/machine/ARCH. + */ +int fegetround(void) +{ + return -ENOTSUP; +} diff --git a/newlib/libm/fenv/feholdexcept.c b/newlib/libm/fenv/feholdexcept.c new file mode 100644 index 000000000..7d066a7fb --- /dev/null +++ b/newlib/libm/fenv/feholdexcept.c @@ -0,0 +1,70 @@ +/* + (c) Copyright 2019 Joel Sherrill <joel@rtems.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 COPYRIGHT HOLDERS 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 COPYRIGHT + HOLDER 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. +*/ + +#include <fenv.h> +#include <errno.h> + +/* +FUNCTION +<<feholdexcept>>---save current floating-point environment + +INDEX + feholdexcept + +SYNOPSIS + #include <fenv.h> + int feholdexcept(fenv_t *<[envp]>); + + Link with -lm. + +DESCRIPTION +This method attempts to save the current floating-point environment +in the fenv_t instance pointed to by <[envp]>, clear the floating +point status flags, and then, if supported by the target architecture, +install a "non-stop" (e.g. continue on floating point exceptions) mode +for all floating-point exceptions. + +RETURNS +This method will return zero if the non-stop floating-point exception +handler was installed. Otherwise, a non-zero value is returned. + +PORTABILITY +ANSI C requires <<feholdexcept>>. + +Not all Newlib targets have a working implementation. Refer to +the file <<sys/fenv.h>> to see the status for your target. +*/ + +/* + * This is a non-functional implementation that should be overridden + * by an architecture specific implementation in newlib/libm/machine/ARCH. + */ +int feholdexcept(fenv_t *envp) +{ + return -ENOTSUP; +} diff --git a/newlib/libm/fenv/feraiseexcept.c b/newlib/libm/fenv/feraiseexcept.c new file mode 100644 index 000000000..c8f4b2efb --- /dev/null +++ b/newlib/libm/fenv/feraiseexcept.c @@ -0,0 +1,67 @@ +/* + (c) Copyright 2019 Joel Sherrill <joel@rtems.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 COPYRIGHT HOLDERS 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 COPYRIGHT + HOLDER 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. +*/ + +#include <fenv.h> +#include <errno.h> + +/* +FUNCTION +<<feraiseexcept>>---raise floating-point exception + +INDEX + feraiseexcept +SYNOPSIS + #include <fenv.h> + int feraiseexcept(int <[excepts]>); + + Link with -lm. + +DESCRIPTION +This method attempts to raise the floating-point exceptions specified +in <[except]>. + +RETURNS +If the <[excepts]> argument is zero or all requested exceptions were +successfully raised, this method returns zero. Otherwise, a non-zero +value is returned. + +PORTABILITY +ANSI C requires <<feraiseexcept>>. + +Not all Newlib targets have a working implementation. Refer to +the file <<sys/fenv.h>> to see the status for your target. +*/ + +/* + * This is a non-functional implementation that should be overridden + * by an architecture specific implementation in newlib/libm/machine/ARCH. + */ +int feraiseexcept(int excepts) +{ + return (excepts ? -ENOTSUP : 0); +} diff --git a/newlib/libm/fenv/fesetenv.c b/newlib/libm/fenv/fesetenv.c new file mode 100644 index 000000000..410abcc4f --- /dev/null +++ b/newlib/libm/fenv/fesetenv.c @@ -0,0 +1,72 @@ +/* + (c) Copyright 2019 Joel Sherrill <joel@rtems.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 COPYRIGHT HOLDERS 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 COPYRIGHT + HOLDER 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. +*/ + +#include <fenv.h> +#include <errno.h> + +/* +FUNCTION +<<fesetenv>>---set current floating-point environment + +INDEX + fesetenv + +SYNOPSIS + #include <fenv.h> + int fesetenv(const fenv_t *[<envp>]); + + Link with -lm. + +DESCRIPTION +This method attempts to establish the floating-point environment +pointed to by <[envp]>. The argument [<envp>] must point to a +floating-point environment obtained via <<fegetenv>> or <<feholdexcept>> +or a floating-point environment macro such as <<FE_DFL_ENV>>. + +It only sets the states of the flags as recorded in its argument, and +does not actually raise the associated floating-point exceptions. + +RETURNS +If floating-point environment was successfully established, then +this method returns zero. Otherwise, a non-zero value is returned. + +PORTABILITY +ANSI C requires <<fesetenv>>. + +Not all Newlib targets have a working implementation. Refer to +the file <<sys/fenv.h>> to see the status for your target. +*/ + +/* + * This is a non-functional implementation that should be overridden + * by an architecture specific implementation in newlib/libm/machine/ARCH. + */ +int fesetenv(const fenv_t *envp) +{ + return -ENOTSUP; +} diff --git a/newlib/libm/fenv/fesetexceptflag.c b/newlib/libm/fenv/fesetexceptflag.c new file mode 100644 index 000000000..1f350933c --- /dev/null +++ b/newlib/libm/fenv/fesetexceptflag.c @@ -0,0 +1,73 @@ +/* + (c) Copyright 2019 Joel Sherrill <joel@rtems.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 COPYRIGHT HOLDERS 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 COPYRIGHT + HOLDER 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. +*/ + +#include <fenv.h> +#include <errno.h> + +/* +FUNCTION +<<fesetexceptflag>>---set floating-point status flags + +INDEX + fesetexceptflag + +SYNOPSIS + #include <fenv.h> + int fesetexceptflag(const fexcept_t *<[flagp]>, int <[excepts]>); + + Link with -lm. + +DESCRIPTION +This method attempts to set the floating-point status flags specified +by <[excepts]> to the states indicated by <[flagp>]. The argument +[<flagp>] must point to an fexcept_t instance obtained via calling +<<fegetexceptflag>> with at least the floating-point exceptions specified +by the argument <[excepts]>. + +This method does not raise any floating-point exceptions. It only +sets the state of the flags. + +RETURNS +If the information was successfully returned, this method returns +zero. Otherwise, a non-zero value is returned. + +PORTABILITY +ANSI C requires <<fesetexceptflag>>. + +Not all Newlib targets have a working implementation. Refer to +the file <<sys/fenv.h>> to see the status for your target. +*/ + +/* + * This is a non-functional implementation that should be overridden + * by an architecture specific implementation in newlib/libm/machine/ARCH. + */ +int fesetexceptflag(const fexcept_t *flagp, int excepts) +{ + return -ENOTSUP; +} diff --git a/newlib/libm/fenv/fesetround.c b/newlib/libm/fenv/fesetround.c new file mode 100644 index 000000000..d07efe86d --- /dev/null +++ b/newlib/libm/fenv/fesetround.c @@ -0,0 +1,67 @@ +/* + (c) Copyright 2019 Joel Sherrill <joel@rtems.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 COPYRIGHT HOLDERS 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 COPYRIGHT + HOLDER 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. +*/ + +#include <fenv.h> +#include <errno.h> + +/* +FUNCTION +<<fesetround>>---set current rounding direction + +INDEX + fesetround +SYNOPSIS + #include <fenv.h> + int fesetround(int <[round]>); + + Link with -lm. + +DESCRIPTION +This method attempts to set the current rounding direction represented +by <[round]>. <[round]> must be the value of one of the +rounding-direction macros. + +RETURNS +If the rounding mode was successfully established, this method returns +zero. Otherwise, a non-zero value is returned. + +PORTABILITY +ANSI C requires <<fesetround>>. + +Not all Newlib targets have a working implementation. Refer to +the file <<sys/fenv.h>> to see the status for your target. +*/ + +/* + * This is a non-functional implementation that should be overridden + * by an architecture specific implementation in newlib/libm/machine/ARCH. + */ +int fesetround(int round) +{ + return -ENOTSUP; +} diff --git a/newlib/libm/fenv/fetestexcept.c b/newlib/libm/fenv/fetestexcept.c new file mode 100644 index 000000000..d81fb3f6a --- /dev/null +++ b/newlib/libm/fenv/fetestexcept.c @@ -0,0 +1,68 @@ + +/* + (c) Copyright 2019 Joel Sherrill <joel@rtems.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 COPYRIGHT HOLDERS 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 COPYRIGHT + HOLDER 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. +*/ + +#include <fenv.h> +#include <errno.h> + +/* +FUNCTION +<<fetestexcept>>---test floating-point exception flags + +INDEX + fetestexcept +SYNOPSIS + #include <fenv.h> + int fetestexcept(int <[except]>); + + Link with -lm. + +DESCRIPTION +This method test the current floating-point exceptions to determine +which of those specified in <[except]> are currently set. + +RETURNS +This method returns the bitwise-inclusive OR of the floating point +exception macros which correspond to the currently set floating point +exceptions. + +PORTABILITY +ANSI C requires <<fetestexcept>>. + +Not all Newlib targets have a working implementation. Refer to +the file <<sys/fenv.h>> to see the status for your target. +*/ + +/* + * This is a non-functional implementation that should be overridden + * by an architecture specific implementation in newlib/libm/machine/ARCH. + */ +int fetestexcept(int excepts) +{ + return 0; +} diff --git a/newlib/libm/fenv/feupdateenv.c b/newlib/libm/fenv/feupdateenv.c new file mode 100644 index 000000000..e1dd9657f --- /dev/null +++ b/newlib/libm/fenv/feupdateenv.c @@ -0,0 +1,72 @@ +/* + (c) Copyright 2019 Joel Sherrill <joel@rtems.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 COPYRIGHT HOLDERS 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 COPYRIGHT + HOLDER 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. +*/ + +#include <fenv.h> +#include <errno.h> + +/* +FUNCTION +<<feupdateenv>>---update current floating-point environment + +INDEX + feupdateenv + +SYNOPSIS + #include <fenv.h> + int feupdateenv(const fenv_t *[<envp>]); + + Link with -lm. + +DESCRIPTION +This method attempts to save the currently raised floating point +exceptions in its automatic storage, install the floating point +environment specified by [<envp]>, and raise the saved floating +point exceptions. + +The argument [<envp>] must point to a floating-point environment +obtained via <<fegetenv>> or <<feholdexcept>>. + +RETURNS +If all actions are completed successfully, then this method returns zero. +Otherwise, a non-zero value is returned. + +PORTABILITY +ANSI C requires <<feupdateenv>>. + +Not all Newlib targets have a working implementation. Refer to +the file <<sys/fenv.h>> to see the status for your target. +*/ + +/* + * This is a non-functional implementation that should be overridden + * by an architecture specific implementation in newlib/libm/machine/ARCH. + */ +int feupdateenv(const fenv_t *envp) +{ + return -ENOTSUP; +} |