This is the mail archive of the glibc-cvs@sourceware.org mailing list for the glibc 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]

GNU C Library master sources branch, master, updated. glibc-2.14-390-g581d30e


This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "GNU C Library master sources".

The branch, master has been updated
       via  581d30e386b9567b973a65d0bc82af782ac078ed (commit)
      from  d38f1dba009689d78af371cffa091b27e4ebe17d (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.

- Log -----------------------------------------------------------------
http://sources.redhat.com/git/gitweb.cgi?p=glibc.git;a=commitdiff;h=581d30e386b9567b973a65d0bc82af782ac078ed

commit 581d30e386b9567b973a65d0bc82af782ac078ed
Author: Ulrich Drepper <drepper@gmail.com>
Date:   Tue Oct 18 09:13:23 2011 -0400

    Add optimized nearbyint{,f} for x86-64

diff --git a/ChangeLog b/ChangeLog
index c391f61..3802f85 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,14 @@
 2011-10-18  Ulrich Drepper  <drepper@gmail.com>
 
+	* sysdeps/x86_64/fpu/multiarch/Makefile [math] (libm-sysdep-routines):
+	Add s_nearbyint-c and s_nearbyintf-c.
+	* sysdeps/x86_64/fpu/bits/mathinline.h: Define nearbyint and
+	nearbyintf inlines.
+	* sysdeps/x86_64/fpu/multiarch/s_nearbyint-c.c: New file.
+	* sysdeps/x86_64/fpu/multiarch/s_nearbyint.S: New file.
+	* sysdeps/x86_64/fpu/multiarch/s_nearbyintf-c.c: New file.
+	* sysdeps/x86_64/fpu/multiarch/s_nearbyintf.S: New file.
+
 	* math/math_private.h: Define defaults for libc_fegetround,
 	libc_fegetroundf, libc_fegetroundl, libc_fesetround, libc_fesetroundf,
 	libc_fesetroundl, libc_feholdexcept, libc_feholdexceptf,
diff --git a/sysdeps/x86_64/fpu/bits/mathinline.h b/sysdeps/x86_64/fpu/bits/mathinline.h
index 6221958..57d718d 100644
--- a/sysdeps/x86_64/fpu/bits/mathinline.h
+++ b/sysdeps/x86_64/fpu/bits/mathinline.h
@@ -167,6 +167,24 @@ __NTH (rintf (float __x))
   return __res;
 }
 
+#ifdef __USE_ISOC99
+/* Round to nearest integer without raising inexact exception.  */
+__MATH_INLINE double
+__NTH (nearbyint (double __x))
+{
+  double __res;
+  __asm ("roundsd $0xc, %1, %0" : "=x" (__res) : "xm" (__x));
+  return __res;
+}
+__MATH_INLINE float
+__NTH (nearbyintf (float __x))
+{
+  float __res;
+  __asm ("roundss $0xc, %1, %0" : "=x" (__res) : "xm" (__x));
+  return __res;
+}
+#endif
+
 __END_NAMESPACE_C99
 #  endif
 
diff --git a/sysdeps/x86_64/fpu/multiarch/Makefile b/sysdeps/x86_64/fpu/multiarch/Makefile
index b29feed..bd07e98 100644
--- a/sysdeps/x86_64/fpu/multiarch/Makefile
+++ b/sysdeps/x86_64/fpu/multiarch/Makefile
@@ -1,4 +1,4 @@
 ifeq ($(subdir),math)
 libm-sysdep_routines += s_floor-c s_ceil-c s_floorf-c s_ceilf-c \
-			s_rint-c s_rintf-c
+			s_rint-c s_rintf-c s_nearbyint-c s_nearbyintf-c
 endif
diff --git a/sysdeps/x86_64/fpu/multiarch/s_nearbyint-c.c b/sysdeps/x86_64/fpu/multiarch/s_nearbyint-c.c
new file mode 100644
index 0000000..f897a2a
--- /dev/null
+++ b/sysdeps/x86_64/fpu/multiarch/s_nearbyint-c.c
@@ -0,0 +1,3 @@
+#undef __nearbyint
+#define __nearbyint __nearbyint_c
+#include <sysdeps/ieee754/dbl-64/wordsize-64/s_nearbyint.c>
diff --git a/sysdeps/x86_64/fpu/multiarch/s_nearbyint.S b/sysdeps/x86_64/fpu/multiarch/s_nearbyint.S
new file mode 100644
index 0000000..8ed90e7
--- /dev/null
+++ b/sysdeps/x86_64/fpu/multiarch/s_nearbyint.S
@@ -0,0 +1,40 @@
+/* Copyright (C) 2011 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+   Contributed by Ulrich Drepper <drepper@gmail.come>, 2011.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, write to the Free
+   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+   02111-1307 USA.  */
+
+#include <machine/asm.h>
+#include <init-arch.h>
+
+
+ENTRY(__nearbyint)
+	.type	__nearbyint, @gnu_indirect_function
+	call	__get_cpu_features@plt
+	movq	%rax, %rdx
+	leaq	__nearbyint_sse41(%rip), %rax
+	testl	$bit_SSE4_1, CPUID_OFFSET+index_SSE4_1(%rdx)
+	jnz	2f
+	leaq	__nearbyint_c(%rip), %rax
+2:	ret
+END(__nearbyint)
+weak_alias (__nearbyint, nearbyint)
+
+
+ENTRY(__nearbyint_sse41)
+	roundsd	$0xc, %xmm0, %xmm0
+	ret
+END(__nearbyint_sse41)
diff --git a/sysdeps/x86_64/fpu/multiarch/s_nearbyintf-c.c b/sysdeps/x86_64/fpu/multiarch/s_nearbyintf-c.c
new file mode 100644
index 0000000..aa77682
--- /dev/null
+++ b/sysdeps/x86_64/fpu/multiarch/s_nearbyintf-c.c
@@ -0,0 +1,3 @@
+#undef __nearbyintf
+#define __nearbyintf __nearbyintf_c
+#include <sysdeps/ieee754/flt-32/s_nearbyintf.c>
diff --git a/sysdeps/x86_64/fpu/multiarch/s_nearbyintf.S b/sysdeps/x86_64/fpu/multiarch/s_nearbyintf.S
new file mode 100644
index 0000000..943f35d
--- /dev/null
+++ b/sysdeps/x86_64/fpu/multiarch/s_nearbyintf.S
@@ -0,0 +1,40 @@
+/* Copyright (C) 2011 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+   Contributed by Ulrich Drepper <drepper@gmail.come>, 2011.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, write to the Free
+   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+   02111-1307 USA.  */
+
+#include <machine/asm.h>
+#include <init-arch.h>
+
+
+ENTRY(__nearbyintf)
+	.type	__nearbyintf, @gnu_indirect_function
+	call	__get_cpu_features@plt
+	movq	%rax, %rdx
+	leaq	__nearbyintf_sse41(%rip), %rax
+	testl	$bit_SSE4_1, CPUID_OFFSET+index_SSE4_1(%rdx)
+	jnz	2f
+	leaq	__nearbyintf_c(%rip), %rax
+2:	ret
+END(__nearbyintf)
+weak_alias (__nearbyintf, nearbyintf)
+
+
+ENTRY(__nearbyintf_sse41)
+	roundss	$0xc, %xmm0, %xmm0
+	ret
+END(__nearbyintf_sse41)

-----------------------------------------------------------------------

Summary of changes:
 ChangeLog                                     |    9 +++++
 sysdeps/x86_64/fpu/bits/mathinline.h          |   18 +++++++++++
 sysdeps/x86_64/fpu/multiarch/Makefile         |    2 +-
 sysdeps/x86_64/fpu/multiarch/s_nearbyint-c.c  |    3 ++
 sysdeps/x86_64/fpu/multiarch/s_nearbyint.S    |   40 +++++++++++++++++++++++++
 sysdeps/x86_64/fpu/multiarch/s_nearbyintf-c.c |    3 ++
 sysdeps/x86_64/fpu/multiarch/s_nearbyintf.S   |   40 +++++++++++++++++++++++++
 7 files changed, 114 insertions(+), 1 deletions(-)
 create mode 100644 sysdeps/x86_64/fpu/multiarch/s_nearbyint-c.c
 create mode 100644 sysdeps/x86_64/fpu/multiarch/s_nearbyint.S
 create mode 100644 sysdeps/x86_64/fpu/multiarch/s_nearbyintf-c.c
 create mode 100644 sysdeps/x86_64/fpu/multiarch/s_nearbyintf.S


hooks/post-receive
-- 
GNU C Library master sources


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