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.25-565-g001b09a


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  001b09a6a2176b22bd7524a8329950c1ef98f06f (commit)
      from  c271ff9469dd55896c5110194bb3668e4ddb2708 (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://sourceware.org/git/gitweb.cgi?p=glibc.git;a=commitdiff;h=001b09a6a2176b22bd7524a8329950c1ef98f06f

commit 001b09a6a2176b22bd7524a8329950c1ef98f06f
Author: Rajalakshmi Srinivasaraghavan <raji@linux.vnet.ibm.com>
Date:   Fri Jun 23 10:43:31 2017 +0530

    powerpc: Add optimized version of [l]lroundf
    
    This patch makes use of optimized double version of llround for single
    precision as both the versions return [long] long type.

diff --git a/ChangeLog b/ChangeLog
index e7a68b3..ed0192b 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,20 @@
+2017-06-23  Rajalakshmi Srinivasaraghavan  <raji@linux.vnet.ibm.com>
+
+	* sysdeps/powerpc/powerpc64/fpu/multiarch/Makefile
+	(libm-sysdep_routines): Add s_llroundf-ppc64.
+	* sysdeps/powerpc/powerpc64/power5+fpu/s_llround.S
+	(__llroundf): Define as strong alias of __llround.
+	(llroundf):  Define as weak alias of __llround.
+	(__lroundf): Define as strong alias of __llround.
+	(lroundf):  Define as weak alias of __llround.
+	* sysdeps/powerpc/powerpc64/power6x/fpu/s_llround.S:  Likewise.
+	* sysdeps/powerpc/powerpc64/power8/fpu/s_llround.S: Likewise.
+	* sysdeps/powerpc/powerpc64/fpu/multiarch/s_llroundf-ppc64.S: New file.
+	* sysdeps/powerpc/powerpc64/fpu/multiarch/s_llroundf.c: Likewise.
+	* sysdeps/powerpc/powerpc64/power5+/fpu/s_llroundf.S: Likewise.
+	* sysdeps/powerpc/powerpc64/power6x/fpu/s_llroundf.S: Likewise.
+	* sysdeps/powerpc/powerpc64/power8/fpu/s_llroundf.S: Likewise.
+
 2017-06-22  Joseph Myers  <joseph@codesourcery.com>
 
 	* sysdeps/ieee754/ldbl-96/bits/iscanonical.h
diff --git a/sysdeps/powerpc/powerpc64/fpu/multiarch/Makefile b/sysdeps/powerpc/powerpc64/fpu/multiarch/Makefile
index 317a988..d6f14f3 100644
--- a/sysdeps/powerpc/powerpc64/fpu/multiarch/Makefile
+++ b/sysdeps/powerpc/powerpc64/fpu/multiarch/Makefile
@@ -24,7 +24,7 @@ libm-sysdep_routines += s_isnan-power7 s_isnan-power6x s_isnan-power6 \
 			s_modff-power5+ s_modff-ppc64 e_hypot-ppc64 \
 			e_hypot-power7 e_hypotf-ppc64 e_hypotf-power7 \
 			s_isnan-power8 s_isinf-power8 s_finite-power8 \
-			s_llrint-power8 s_llround-power8 \
+			s_llrint-power8 s_llround-power8 s_llroundf-ppc64 \
 			e_expf-power8 e_expf-ppc64 \
 			s_sinf-ppc64 s_sinf-power8 \
 			s_cosf-ppc64 s_cosf-power8
diff --git a/sysdeps/powerpc/powerpc64/fpu/multiarch/s_llroundf-ppc64.S b/sysdeps/powerpc/powerpc64/fpu/multiarch/s_llroundf-ppc64.S
new file mode 100644
index 0000000..26d08a2
--- /dev/null
+++ b/sysdeps/powerpc/powerpc64/fpu/multiarch/s_llroundf-ppc64.S
@@ -0,0 +1,32 @@
+/* llroundf().  PowerPC64 default version.
+   Copyright (C) 2017 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   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, see
+   <http://www.gnu.org/licenses/>.  */
+
+#include <sysdep.h>
+#include <math_ldbl_opt.h>
+
+#undef weak_alias
+#define weak_alias(a,b)
+#undef strong_alias
+#define strong_alias(a,b)
+#undef compat_symbol
+#define compat_symbol(a,b,c,d)
+
+#define __llroundf __llroundf_ppc64
+#define __lroundf __lroundf_ppc64
+
+#include <sysdeps/powerpc/powerpc64/fpu/s_llroundf.S>
diff --git a/sysdeps/powerpc/powerpc64/fpu/multiarch/s_llroundf.c b/sysdeps/powerpc/powerpc64/fpu/multiarch/s_llroundf.c
new file mode 100644
index 0000000..1e34b5d
--- /dev/null
+++ b/sysdeps/powerpc/powerpc64/fpu/multiarch/s_llroundf.c
@@ -0,0 +1,46 @@
+/* Multiple versions of llroundf.
+   Copyright (C) 2017 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   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, see
+   <http://www.gnu.org/licenses/>.  */
+/* Redefine lroundf/__lroundf so that the compiler won't complain about
+   the type mismatch with the IFUNC selector in strong_alias below.  */
+#define lroundf __hidden_lroundf
+#define __lroundf __hidden___lroundf
+
+#include <math.h>
+#undef lroundf
+#undef __lroundf
+#include "init-arch.h"
+
+extern __typeof (__llroundf) __llroundf_ppc64 attribute_hidden;
+extern __typeof (__llroundf) __llround_power6x attribute_hidden;
+extern __typeof (__llroundf) __llround_power8 attribute_hidden;
+
+/* The ppc64 ABI passes float and double parameters in 64bit floating point
+   registers (at least up to a point) as IEEE binary64 format, so effectively
+   of "double" type.  Both l[l]round and l[l]roundf return long type.  So these
+   functions have identical signatures and functionality, and can use a
+   single implementation.  */
+libc_ifunc (__llroundf,
+	    (hwcap2 & PPC_FEATURE2_ARCH_2_07)
+	    ? __llround_power8 :
+	    (hwcap & PPC_FEATURE_POWER6_EXT)
+	    ? __llround_power6x
+	    : __llroundf_ppc64);
+
+weak_alias (__llroundf, llroundf)
+strong_alias (__llroundf, __lroundf)
+weak_alias (__lroundf, lroundf)
diff --git a/sysdeps/powerpc/powerpc64/power5+/fpu/s_llround.S b/sysdeps/powerpc/powerpc64/power5+/fpu/s_llround.S
index 4f9f850..ec42993 100644
--- a/sysdeps/powerpc/powerpc64/power5+/fpu/s_llround.S
+++ b/sysdeps/powerpc/powerpc64/power5+/fpu/s_llround.S
@@ -45,6 +45,13 @@ ENTRY_TOCLESS (__llround, 4)
 strong_alias (__llround, __lround)
 weak_alias (__llround, llround)
 weak_alias (__lround, lround)
+/* The double version also works for single-precision as both float and
+   double parameters are passed in 64bit FPRs and both versions are expected
+   to return [long] long type.  */
+strong_alias (__llround, __llroundf)
+weak_alias (__llround, llroundf)
+strong_alias (__lround, __lroundf)
+weak_alias (__lround, lroundf)
 
 #ifdef NO_LONG_DOUBLE
 weak_alias (__llround, llroundl)
diff --git a/sysdeps/powerpc/powerpc64/power5+/fpu/s_llroundf.S b/sysdeps/powerpc/powerpc64/power5+/fpu/s_llroundf.S
new file mode 100644
index 0000000..9ea6bd1
--- /dev/null
+++ b/sysdeps/powerpc/powerpc64/power5+/fpu/s_llroundf.S
@@ -0,0 +1 @@
+/* __lroundf is in s_llround.S.  */
diff --git a/sysdeps/powerpc/powerpc64/power6x/fpu/s_llround.S b/sysdeps/powerpc/powerpc64/power6x/fpu/s_llround.S
index 6d1db55..d58b338 100644
--- a/sysdeps/powerpc/powerpc64/power6x/fpu/s_llround.S
+++ b/sysdeps/powerpc/powerpc64/power6x/fpu/s_llround.S
@@ -41,6 +41,13 @@ ENTRY_TOCLESS (__llround)
 strong_alias (__llround, __lround)
 weak_alias (__llround, llround)
 weak_alias (__lround, lround)
+/* The double version also works for single-precision as both float and
+   double parameters are passed in 64bit FPRs and both versions are expected
+   to return [long] long type.  */
+strong_alias (__llround, __llroundf)
+weak_alias (__llround, llroundf)
+strong_alias (__lround, __lroundf)
+weak_alias (__lround, lroundf)
 
 #ifdef NO_LONG_DOUBLE
 weak_alias (__llround, llroundl)
diff --git a/sysdeps/powerpc/powerpc64/power6x/fpu/s_llroundf.S b/sysdeps/powerpc/powerpc64/power6x/fpu/s_llroundf.S
new file mode 100644
index 0000000..9ea6bd1
--- /dev/null
+++ b/sysdeps/powerpc/powerpc64/power6x/fpu/s_llroundf.S
@@ -0,0 +1 @@
+/* __lroundf is in s_llround.S.  */
diff --git a/sysdeps/powerpc/powerpc64/power8/fpu/s_llround.S b/sysdeps/powerpc/powerpc64/power8/fpu/s_llround.S
index 8bdc162..1dc5142 100644
--- a/sysdeps/powerpc/powerpc64/power8/fpu/s_llround.S
+++ b/sysdeps/powerpc/powerpc64/power8/fpu/s_llround.S
@@ -35,6 +35,13 @@ END (__llround)
 strong_alias (__llround, __lround)
 weak_alias (__llround, llround)
 weak_alias (__lround, lround)
+/* The double version also works for single-precision as both float and
+   double parameters are passed in 64bit FPRs and both versions are expected
+   to return [long] long type.  */
+strong_alias (__llround, __llroundf)
+weak_alias (__llround, llroundf)
+strong_alias (__lround, __lroundf)
+weak_alias (__lround, lroundf)
 
 #ifdef NO_LONG_DOUBLE
 weak_alias (__llround, llroundl)
diff --git a/sysdeps/powerpc/powerpc64/power8/fpu/s_llroundf.S b/sysdeps/powerpc/powerpc64/power8/fpu/s_llroundf.S
new file mode 100644
index 0000000..9ea6bd1
--- /dev/null
+++ b/sysdeps/powerpc/powerpc64/power8/fpu/s_llroundf.S
@@ -0,0 +1 @@
+/* __lroundf is in s_llround.S.  */

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

Summary of changes:
 ChangeLog                                          |   17 +++++++
 sysdeps/powerpc/powerpc64/fpu/multiarch/Makefile   |    2 +-
 .../powerpc64/fpu/multiarch/s_llroundf-ppc64.S     |   32 ++++++++++++++
 .../powerpc/powerpc64/fpu/multiarch/s_llroundf.c   |   46 ++++++++++++++++++++
 sysdeps/powerpc/powerpc64/power5+/fpu/s_llround.S  |    7 +++
 sysdeps/powerpc/powerpc64/power5+/fpu/s_llroundf.S |    1 +
 sysdeps/powerpc/powerpc64/power6x/fpu/s_llround.S  |    7 +++
 sysdeps/powerpc/powerpc64/power6x/fpu/s_llroundf.S |    1 +
 sysdeps/powerpc/powerpc64/power8/fpu/s_llround.S   |    7 +++
 sysdeps/powerpc/powerpc64/power8/fpu/s_llroundf.S  |    1 +
 10 files changed, 120 insertions(+), 1 deletions(-)
 create mode 100644 sysdeps/powerpc/powerpc64/fpu/multiarch/s_llroundf-ppc64.S
 create mode 100644 sysdeps/powerpc/powerpc64/fpu/multiarch/s_llroundf.c
 create mode 100644 sysdeps/powerpc/powerpc64/power5+/fpu/s_llroundf.S
 create mode 100644 sysdeps/powerpc/powerpc64/power6x/fpu/s_llroundf.S
 create mode 100644 sysdeps/powerpc/powerpc64/power8/fpu/s_llroundf.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]