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


Patch checked in.

-- Jeff J.

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;



Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]