This is the mail archive of the newlib@sourceware.org mailing list for the newlib project.
Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
---|---|---|
Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |
Other format: | [Raw text] |
> -----Original Message----- > From: Jeff Johnston [mailto:jjohnstn@redhat.com] > Sent: 04 December 2012 21:45 > To: Kyrylo Tkachov > Cc: Richard Earnshaw; newlib@sourceware.org; nickc@redhat.com > Subject: Re: [PATCH][newlib][ARM] Add arm directory to libm, use vrint > for standard rounding functions > > Patch checked in. > > -- Jeff J. Hi Jeff, Thanks for checking it in. Unfortunately, it seems that libm/machine/configure was not regenerated. Could you please fix that? Attached is a patch that adds the fixes to libm/machine/configure. I have a different version of autoconf installed on my machine, so sending a regenerated file would probably be ugly. This patch adds the changes to the configure script manually (they have been cherry-picked from my autoconf output and tested). If you prefer, you can reapply the original patch and regenerate the file instead. The original patch is at: http://sourceware.org/ml/newlib/2012/msg00539.html Thanks, Kyrill 2012-12-06 Kyrylo Tkachov <kyrylo.tkachov@arm.com> * libm/machine/configure: Add arm where appropriate. > On 12/04/2012 07:28 AM, Kyrylo Tkachov wrote: > > Hi all, > > Thanks for the comments, Richard. > > > > Here is an updated patch using the condition: > > #if __ARM_ARCH>= 8&& !defined (__SOFTFP__) > > > > No changes otherwise. > > > > Thanks, > > Kyrill > > > > > > newlib/ChangeLog > > > > 2012-12-04 Kyrylo Tkachov<kyrylo.tkachov@arm.com> > > > > * configure.host: Define libm_machine_dir value for arm. > > * libm/machine/configure.in: Add arm to libm machines list. > > * libm/machine/configure: Regenerate. > > * libm/machine/arm/Makefile.am: New file. > > * libm/machine/arm/Makefile.in: Generated. > > * libm/machine/arm/aclocal.m4: Generated. > > * libm/machine/arm/configure: Generated. > > * libm/machine/arm/configure.in: New file. > > * libm/machine/arm/s_ceil.c: Likewise. > > * libm/machine/arm/s_floor.c: Likewise. > > * libm/machine/arm/s_nearbyint.c: Likewise. > > * libm/machine/arm/s_rint.c: Likewise. > > * libm/machine/arm/s_round.c: Likewise. > > * libm/machine/arm/s_trunc.c: Likewise. > > * libm/machine/arm/sf_ceil.c: Likewise. > > * libm/machine/arm/sf_floor.c: Likewise. > > * libm/machine/arm/sf_nearbyint.c: Likewise. > > * libm/machine/arm/sf_rint.c: Likewise. > > * libm/machine/arm/sf_round.c: Likewise. > > * libm/machine/arm/sf_trunc.c: Likewise. > > > > > >> -----Original Message----- > >> From: Richard Earnshaw > >> Sent: 04 December 2012 10:47 > >> To: Kyrylo Tkachov > >> Cc: newlib@sourceware.org; corinna@vinschen.de; nickc@redhat.com > >> Subject: Re: [PATCH][newlib][ARM] Add arm directory to libm, use > vrint > >> for standard rounding functions > >> > >> On 16/11/12 11:38, Kyrylo Tkachov wrote: > >>> Hi all, > >>> > >>> This patch adds ARM-specific support for the single and double > >> precision > >>> libm functions: ceil, floor, nearbyint, rint, round, trunk. > >>> These functions can be implemented using the vrint family of > >> instructions > >>> introduced in ARMv8 so we use those when the target supports it, > >> otherwise > >>> we revert to the generic implementations. > >>> If approved, can the commiter please generate/regenerate the > >> appropriate > >>> files? > >>> An arm directory is added to libm/machine. The following files need > >> to be > >>> generated with autoconf/automake: > >>> * libm/machine/arm/Makefile.in > >>> * libm/machine/arm/aclocal.m4 > >>> * libm/machine/arm/configure > >>> > >>> The file > >>> * libm/machine/configure needs to be regenerated. > >>> > >>> The patch has been tested with an arm-eabi toolchain running on a > >> model. It > >>> is for the AArch32 / ARM backend of newlib. > >>> > >>> Thanks, > >>> Kyrill > >>> > >>> P.S. I had sent this to a wrong address before... Sorry if you > >> received this > >>> multiple times. > >>> > >>> newlib/ChangeLog > >>> > >>> 2012-11-14 Kyrylo Tkachov<kyrylo.tkachov@arm.com> > >>> > >>> * configure.host: Define libm_machine_dir value for arm. > >>> * libm/machine/configure.in: Add arm to libm machines list. > >>> * libm/machine/configure: Regenerate. > >>> * libm/machine/arm/Makefile.am: New file. > >>> * libm/machine/arm/Makefile.in: Generated. > >>> * libm/machine/arm/aclocal.m4: Generated. > >>> * libm/machine/arm/configure: Generated. > >>> * libm/machine/arm/configure.in: New file. > >>> * libm/machine/arm/s_ceil.c: Likewise. > >>> * libm/machine/arm/s_floor.c: Likewise. > >>> * libm/machine/arm/s_nearbyint.c: Likewise. > >>> * libm/machine/arm/s_rint.c: Likewise. > >>> * libm/machine/arm/s_round.c: Likewise. > >>> * libm/machine/arm/s_trunc.c: Likewise. > >>> * libm/machine/arm/sf_ceil.c: Likewise. > >>> * libm/machine/arm/sf_floor.c: Likewise. > >>> * libm/machine/arm/sf_nearbyint.c: Likewise. > >>> * libm/machine/arm/sf_rint.c: Likewise. > >>> * libm/machine/arm/sf_round.c: Likewise. > >>> * libm/machine/arm/sf_trunc.c: Likewise. > >>> > >>> > >> Nearly, but not quite. > >> > >> When building soft-float, we need to fall back to the standard C > >> implementations. Secondly, for future proofing, you should use > >> __ARM_ARCH rather than testing a specific architecture version. > >> > >> So instead of > >> > >> #ifdef __ARM_ARCH_8A__ > >> > >> use something like: > >> > >> #if __ARM_ARCH>= 8&& !defined(__SOFTFP__) > >> > >> R. > >> > >> > >>> newlib_vrint2.txt > >>> > >>> > >>> --- a/newlib/configure.host > >>> +++ b/newlib/configure.host > >>> @@ -104,6 +104,7 @@ case "${host_cpu}" in > >>> ;; > >>> arm*) > >>> machine_dir=arm > >>> + libm_machine_dir=arm > >>> ;; > >>> avr*) > >>> newlib_cflags="${newlib_cflags} -DPREFER_SIZE_OVER_SPEED - > mcall- > >> prologues" > >>> diff --git a/newlib/libm/machine/arm/Makefile.am > >> b/newlib/libm/machine/arm/Makefile.am > >>> new file mode 100644 > >>> index 0000000..f0ab84f > >>> --- /dev/null > >>> +++ b/newlib/libm/machine/arm/Makefile.am > >>> @@ -0,0 +1,31 @@ > >>> +## Process this file with automake to generate Makefile.in > >>> + > >>> +AUTOMAKE_OPTIONS = cygnus > >>> + > >>> +INCLUDES = -I $(newlib_basedir)/../newlib/libm/common > >> $(NEWLIB_CFLAGS) \ > >>> + $(CROSS_CFLAGS) $(TARGET_CFLAGS) > >>> + > >>> +LIB_SOURCES = \ > >>> + s_ceil.c \ > >>> + s_floor.c \ > >>> + s_nearbyint.c \ > >>> + s_rint.c \ > >>> + s_round.c \ > >>> + s_trunc.c \ > >>> + sf_ceil.c \ > >>> + sf_floor.c \ > >>> + sf_nearbyint.c \ > >>> + sf_rint.c \ > >>> + sf_round.c \ > >>> + sf_trunc.c > >>> + > >>> +noinst_LIBRARIES = lib.a > >>> +lib_a_SOURCES = $(LIB_SOURCES) > >>> +lib_a_CFLAGS = $(AM_CFLAGS) > >>> +lib_a_CCASFLAGS = $(AM_CCASFLAGS) > >>> +noinst_DATA = > >>> + > >>> +include $(srcdir)/../../../Makefile.shared > >>> + > >>> +ACLOCAL_AMFLAGS = -I ../../.. -I ../../../.. > >>> +CONFIG_STATUS_DEPENDENCIES = $(newlib_basedir)/configure.host > >>> diff --git a/newlib/libm/machine/arm/configure.in > >> b/newlib/libm/machine/arm/configure.in > >>> new file mode 100644 > >>> index 0000000..acbbadc > >>> --- /dev/null > >>> +++ b/newlib/libm/machine/arm/configure.in > >>> @@ -0,0 +1,14 @@ > >>> +dnl This is the newlib/libm/machine/arm configure.in file. > >>> +dnl Process this file with autoconf to produce a configure script. > >>> + > >>> +AC_PREREQ(2.59) > >>> +AC_INIT([newlib],[NEWLIB_VERSION]) > >>> +AC_CONFIG_SRCDIR([Makefile.am]) > >>> + > >>> +dnl Can't be done in NEWLIB_CONFIGURE because that confuses > >> automake. > >>> +AC_CONFIG_AUX_DIR(../../../..) > >>> + > >>> +NEWLIB_CONFIGURE(../../..) > >>> + > >>> +AC_CONFIG_FILES([Makefile]) > >>> +AC_OUTPUT > >>> diff --git a/newlib/libm/machine/arm/s_ceil.c > >> b/newlib/libm/machine/arm/s_ceil.c > >>> new file mode 100644 > >>> index 0000000..e1d33b7 > >>> --- /dev/null > >>> +++ b/newlib/libm/machine/arm/s_ceil.c > >>> @@ -0,0 +1,40 @@ > >>> +/* s_ceil.c -- define ceil > >>> + Copyright (c) 2012 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. */ > >>> + > >>> +#ifdef __ARM_ARCH_8A__ > >>> +#include<math.h> > >>> + > >>> +double > >>> +ceil (double x) > >>> +{ > >>> + double result; > >>> + asm volatile ( "vrintp.f64\t%P0, %P1" : "=w" (result) : "w" (x) > ); > >>> + return result; > >>> +} > >>> + > >>> +#else > >>> +#include "../../math/s_ceil.c" > >>> +#endif > >>> diff --git a/newlib/libm/machine/arm/s_floor.c > >> b/newlib/libm/machine/arm/s_floor.c > >>> new file mode 100644 > >>> index 0000000..49f7dff > >>> --- /dev/null > >>> +++ b/newlib/libm/machine/arm/s_floor.c > >>> @@ -0,0 +1,40 @@ > >>> +/* s_floor.c -- define floor > >>> + Copyright (c) 2012 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. */ > >>> + > >>> +#ifdef __ARM_ARCH_8A__ > >>> +#include<math.h> > >>> + > >>> +double > >>> +floor (double x) > >>> +{ > >>> + double result; > >>> + asm volatile ("vrintm.f64\t%P0, %P1" : "=w" (result) : "w" (x)); > >>> + return result; > >>> +} > >>> + > >>> +#else > >>> +#include "../../math/s_floor.c" > >>> +#endif > >>> diff --git a/newlib/libm/machine/arm/s_nearbyint.c > >> b/newlib/libm/machine/arm/s_nearbyint.c > >>> new file mode 100644 > >>> index 0000000..eacb33c > >>> --- /dev/null > >>> +++ b/newlib/libm/machine/arm/s_nearbyint.c > >>> @@ -0,0 +1,40 @@ > >>> +/* s_nearbyint.c -- define nearbyint > >>> + Copyright (c) 2012 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. */ > >>> + > >>> +#ifdef __ARM_ARCH_8A__ > >>> +#include<math.h> > >>> + > >>> +double > >>> +nearbyint (double x) > >>> +{ > >>> + double result; > >>> + asm volatile ("vrintr.f64\t%P0, %P1" : "=w" (result) : "w" (x)); > >>> + return result; > >>> +} > >>> + > >>> +#else > >>> +#include "../../common/s_nearbyint.c" > >>> +#endif > >>> diff --git a/newlib/libm/machine/arm/s_rint.c > >> b/newlib/libm/machine/arm/s_rint.c > >>> new file mode 100644 > >>> index 0000000..01d6997 > >>> --- /dev/null > >>> +++ b/newlib/libm/machine/arm/s_rint.c > >>> @@ -0,0 +1,40 @@ > >>> +/* s_rint.c -- define rint > >>> + Copyright (c) 2012 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. */ > >>> + > >>> +#ifdef __ARM_ARCH_8A__ > >>> +#include<math.h> > >>> + > >>> +double > >>> +rint (double x) > >>> +{ > >>> + double result; > >>> + asm volatile ("vrintx.f64\t%P0, %P1" : "=w" (result) : "w" (x)); > >>> + return result; > >>> +} > >>> + > >>> +#else > >>> +#include "../../common/s_rint.c" > >>> +#endif > >>> diff --git a/newlib/libm/machine/arm/s_round.c > >> b/newlib/libm/machine/arm/s_round.c > >>> new file mode 100644 > >>> index 0000000..9e378c8 > >>> --- /dev/null > >>> +++ b/newlib/libm/machine/arm/s_round.c > >>> @@ -0,0 +1,40 @@ > >>> +/* s_round.c -- define round > >>> + Copyright (c) 2012 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. */ > >>> + > >>> +#ifdef __ARM_ARCH_8A__ > >>> +#include<math.h> > >>> + > >>> +double > >>> +round (double x) > >>> +{ > >>> + double result; > >>> + asm volatile ("vrinta.f64\t%P0, %P1" : "=w" (result) : "w" (x)); > >>> + return result; > >>> +} > >>> + > >>> +#else > >>> +#include "../../common/s_round.c" > >>> +#endif > >>> diff --git a/newlib/libm/machine/arm/s_trunc.c > >> b/newlib/libm/machine/arm/s_trunc.c > >>> new file mode 100644 > >>> index 0000000..a58cbc6 > >>> --- /dev/null > >>> +++ b/newlib/libm/machine/arm/s_trunc.c > >>> @@ -0,0 +1,40 @@ > >>> +/* s_trunc.c -- define trunc > >>> + Copyright (c) 2012 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. */ > >>> + > >>> +#ifdef __ARM_ARCH_8A__ > >>> +#include<math.h> > >>> + > >>> +double > >>> +trunc (double x) > >>> +{ > >>> + double result; > >>> + asm volatile ("vrintz.f64\t%P0, %P1" : "=w" (result) : "w" (x)); > >>> + return result; > >>> +} > >>> + > >>> +#else > >>> +#include "../../common/s_trunc.c" > >>> +#endif > >>> diff --git a/newlib/libm/machine/arm/sf_ceil.c > >> b/newlib/libm/machine/arm/sf_ceil.c > >>> new file mode 100644 > >>> index 0000000..61a2aad > >>> --- /dev/null > >>> +++ b/newlib/libm/machine/arm/sf_ceil.c > >>> @@ -0,0 +1,40 @@ > >>> +/* sf_ceil.c -- define ceilf > >>> + Copyright (c) 2012 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. */ > >>> + > >>> +#ifdef __ARM_ARCH_8A__ > >>> +#include<math.h> > >>> + > >>> +float > >>> +ceilf (float x) > >>> +{ > >>> + float result; > >>> + asm volatile ( "vrintp.f32\t%0, %1" : "=t" (result) : "t" (x) ); > >>> + return result; > >>> +} > >>> + > >>> +#else > >>> +#include "../../math/sf_ceil.c" > >>> +#endif > >>> diff --git a/newlib/libm/machine/arm/sf_floor.c > >> b/newlib/libm/machine/arm/sf_floor.c > >>> new file mode 100644 > >>> index 0000000..65a89b1 > >>> --- /dev/null > >>> +++ b/newlib/libm/machine/arm/sf_floor.c > >>> @@ -0,0 +1,40 @@ > >>> +/* sf_floor.c -- define floorf > >>> + Copyright (c) 2012 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. */ > >>> + > >>> +#ifdef __ARM_ARCH_8A__ > >>> +#include<math.h> > >>> + > >>> +float > >>> +floorf (float x) > >>> +{ > >>> + float result; > >>> + asm volatile ( "vrintm.f32\t%0, %1" : "=t" (result) : "t" (x) ); > >>> + return result; > >>> +} > >>> + > >>> +#else > >>> +#include "../../math/sf_floor.c" > >>> +#endif > >>> diff --git a/newlib/libm/machine/arm/sf_nearbyint.c > >> b/newlib/libm/machine/arm/sf_nearbyint.c > >>> new file mode 100644 > >>> index 0000000..5fdcb65 > >>> --- /dev/null > >>> +++ b/newlib/libm/machine/arm/sf_nearbyint.c > >>> @@ -0,0 +1,40 @@ > >>> +/* sf_nearbyint.c -- define nearbyintf > >>> + Copyright (c) 2012 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. */ > >>> + > >>> +#ifdef __ARM_ARCH_8A__ > >>> +#include<math.h> > >>> + > >>> +float > >>> +nearbyintf (float x) > >>> +{ > >>> + float result; > >>> + asm volatile ("vrintr.f32\t%0, %1" : "=t" (result) : "t" (x)); > >>> + return result; > >>> +} > >>> + > >>> +#else > >>> +#include "../../common/sf_nearbyint.c" > >>> +#endif > >>> diff --git a/newlib/libm/machine/arm/sf_rint.c > >> b/newlib/libm/machine/arm/sf_rint.c > >>> new file mode 100644 > >>> index 0000000..f425d61 > >>> --- /dev/null > >>> +++ b/newlib/libm/machine/arm/sf_rint.c > >>> @@ -0,0 +1,40 @@ > >>> +/* sf_rint.c -- define rintf > >>> + Copyright (c) 2012 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. */ > >>> + > >>> +#ifdef __ARM_ARCH_8A__ > >>> +#include<math.h> > >>> + > >>> +float > >>> +rintf (float x) > >>> +{ > >>> + float result; > >>> + asm volatile ("vrintx.f32\t%0, %1" : "=t" (result) : "t" (x)); > >>> + return result; > >>> +} > >>> + > >>> +#else > >>> +#include "../../common/sf_rint.c" > >>> +#endif > >>> diff --git a/newlib/libm/machine/arm/sf_round.c > >> b/newlib/libm/machine/arm/sf_round.c > >>> new file mode 100644 > >>> index 0000000..3217ea3 > >>> --- /dev/null > >>> +++ b/newlib/libm/machine/arm/sf_round.c > >>> @@ -0,0 +1,40 @@ > >>> +/* sf_round.c -- define roundf > >>> + Copyright (c) 2012 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. */ > >>> + > >>> +#ifdef __ARM_ARCH_8A__ > >>> +#include<math.h> > >>> + > >>> +float > >>> +roundf (float x) > >>> +{ > >>> + float result; > >>> + asm volatile ("vrinta.f32\t%0, %1" : "=t" (result) : "t" (x)); > >>> + return result; > >>> +} > >>> + > >>> +#else > >>> +#include "../../common/sf_round.c" > >>> +#endif > >>> diff --git a/newlib/libm/machine/arm/sf_trunc.c > >> b/newlib/libm/machine/arm/sf_trunc.c > >>> new file mode 100644 > >>> index 0000000..bb4e134 > >>> --- /dev/null > >>> +++ b/newlib/libm/machine/arm/sf_trunc.c > >>> @@ -0,0 +1,40 @@ > >>> +/* sf_trunc.c -- define truncf > >>> + Copyright (c) 2012 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. */ > >>> + > >>> +#ifdef __ARM_ARCH_8A__ > >>> +#include<math.h> > >>> + > >>> +float > >>> +truncf (float x) > >>> +{ > >>> + float result; > >>> + asm volatile ("vrintz.f32\t%0, %1" : "=t" (result) : "t" (x)); > >>> + return result; > >>> +} > >>> + > >>> +#else > >>> +#include "../../common/sf_trunc.c" > >>> +#endif > >>> diff --git a/newlib/libm/machine/configure.in > >> b/newlib/libm/machine/configure.in > >>> index b236491..85c5c41 100644 > >>> --- a/newlib/libm/machine/configure.in > >>> +++ b/newlib/libm/machine/configure.in > >>> @@ -26,6 +26,7 @@ machlib= > >>> if test -n "${libm_machine_dir}"; then > >>> case ${libm_machine_dir} in > >>> aarch64) AC_CONFIG_SUBDIRS(aarch64) ;; > >>> + arm) AC_CONFIG_SUBDIRS(arm) ;; > >>> i386) AC_CONFIG_SUBDIRS(i386) ;; > >>> spu) AC_CONFIG_SUBDIRS(spu) ;; > >>> esac; > >>> >
Attachment:
newlib_configure_fix.txt
Description: Text document
Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
---|---|---|
Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |