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]

RE: [PATCH][newlib][ARM] Add arm directory to libm, use vrint for standard rounding functions


> -----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]