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.20-287-g0f0a1c8


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  0f0a1c82f5d8e7b8d24f9eddc2b7728abd3d5bc4 (commit)
       via  bb2542e0ae6f82197e804e7e9b78fed461553fc0 (commit)
       via  2e8a2de2dafa3238b5b58eecb407af6825a780cd (commit)
      from  08f1e1d2bca9ef087813357780ec0bafe71c7d29 (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=0f0a1c82f5d8e7b8d24f9eddc2b7728abd3d5bc4

commit 0f0a1c82f5d8e7b8d24f9eddc2b7728abd3d5bc4
Author: Adhemerval Zanella <azanella@linux.vnet.ibm.com>
Date:   Wed Nov 19 16:27:56 2014 -0500

    powerpc: Add powerpc64 strpbrk optimization
    
    This patch makes the POWER7 optimized strpbrk generic by using
    default doubleword stores to zero the hash, instead of VSX
    instructions.  Performance on POWER7/POWER8 does not change.

diff --git a/ChangeLog b/ChangeLog
index 5679760..35535eb 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,14 @@
 2014-12-02  Adhemerval Zanella  <azanella@linux.vnet.ibm.com>
-	
+
+	* sysdeps/powerpc/powerpc64/multiarch/Makefile [sysdep_routines]:
+	Remove strpbrk objects.
+	* sysdeps/powerpc/powerpc64/multiarch/ifunc-impl-list.c
+	(__libc_ifunc_impl_list): Remove strpbrk implementation.
+	* sysdeps/powerpc/powerpc64/multiarch/strpbrk-ppc64.c: Remove file.
+	* sysdeps/powerpc/powerpc64/multiarch/strpbrk.c: Remove file.
+	* sysdeps/powerpc/powerpc64/power7/strpbrk.S: Remove file.
+	* sysdeps/powerpc/powerpc64/strpbrk.S: New file.
+
 	* sysdeps/powerpc/powerpc64/multiarch/Makefile [sysdep_routines]:
 	Remove strcspn objects.
 	* sysdeps/powerpc/powerpc64/multiarch/ifunc-impl-list.c
diff --git a/sysdeps/powerpc/powerpc64/multiarch/Makefile b/sysdeps/powerpc/powerpc64/multiarch/Makefile
index 05dab25..39e441b 100644
--- a/sysdeps/powerpc/powerpc64/multiarch/Makefile
+++ b/sysdeps/powerpc/powerpc64/multiarch/Makefile
@@ -15,7 +15,7 @@ sysdep_routines += memcpy-power7 memcpy-a2 memcpy-power6 memcpy-cell \
 		   wordcopy-power7 wordcopy-power6 wordcopy-ppc64 \
 		   strcpy-power7 strcpy-ppc64 stpcpy-power7 stpcpy-ppc64 \
 		   strrchr-power7 strrchr-ppc64 strncat-power7 strncat-ppc64 \
-		   strpbrk-power7 strpbrk-ppc64 strncpy-power7 strncpy-ppc64 \
+		   strncpy-power7 strncpy-ppc64 \
 		   stpncpy-power7 stpncpy-ppc64 strcmp-power7 strcmp-ppc64 \
 		   strcat-power7 strcat-ppc64 memmove-power7 memmove-ppc64 \
 		   bcopy-ppc64
diff --git a/sysdeps/powerpc/powerpc64/multiarch/ifunc-impl-list.c b/sysdeps/powerpc/powerpc64/multiarch/ifunc-impl-list.c
index 1a2e38d..8f1e3e1 100644
--- a/sysdeps/powerpc/powerpc64/multiarch/ifunc-impl-list.c
+++ b/sysdeps/powerpc/powerpc64/multiarch/ifunc-impl-list.c
@@ -272,14 +272,6 @@ __libc_ifunc_impl_list (const char *name, struct libc_ifunc_impl *array,
 	      IFUNC_IMPL_ADD (array, i, strncat, 1,
 			      __strncat_ppc))
 
-  /* Support sysdeps/powerpc/powerpc64/multiarch/strpbrk.c.  */
-  IFUNC_IMPL (i, name, strpbrk,
-	      IFUNC_IMPL_ADD (array, i, strpbrk,
-			      hwcap & PPC_FEATURE_HAS_VSX,
-			      __strpbrk_power7)
-	      IFUNC_IMPL_ADD (array, i, strpbrk, 1,
-			     __strpbrk_ppc))
-
   /* Support sysdeps/powerpc/powerpc64/multiarch/strncpy.c.  */
   IFUNC_IMPL (i, name, strncpy,
 	      IFUNC_IMPL_ADD (array, i, strncpy,
diff --git a/sysdeps/powerpc/powerpc64/multiarch/strpbrk-power7.S b/sysdeps/powerpc/powerpc64/multiarch/strpbrk-power7.S
deleted file mode 100644
index 663ca36..0000000
--- a/sysdeps/powerpc/powerpc64/multiarch/strpbrk-power7.S
+++ /dev/null
@@ -1,40 +0,0 @@
-/* Optimized strpbrk implementation for POWER7.
-   Copyright (C) 2014 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>
-
-#undef EALIGN
-#define EALIGN(name, alignt, words)				\
-  .section ".text";						\
-  ENTRY_2(__strpbrk_power7)					\
-  .align ALIGNARG(alignt);					\
-  EALIGN_W_##words;						\
-  BODY_LABEL(__strpbrk_power7):					\
-  cfi_startproc;						\
-  LOCALENTRY(__strpbrk_power7)
-
-#undef END
-#define END(name)						\
-  cfi_endproc;							\
-  TRACEBACK(__strpbrk_power7)					\
-  END_2(__strpbrk_power7)
-
-#undef libc_hidden_builtin_def
-#define libc_hidden_builtin_def(name)
-
-#include <sysdeps/powerpc/powerpc64/power7/strpbrk.S>
diff --git a/sysdeps/powerpc/powerpc64/multiarch/strpbrk-ppc64.c b/sysdeps/powerpc/powerpc64/multiarch/strpbrk-ppc64.c
deleted file mode 100644
index 8dea70e..0000000
--- a/sysdeps/powerpc/powerpc64/multiarch/strpbrk-ppc64.c
+++ /dev/null
@@ -1,30 +0,0 @@
-/* Copyright (C) 2014 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 <string.h>
-
-#define STRPBRK __strpbrk_ppc
-#ifdef SHARED
-
-# undef libc_hidden_builtin_def
-# define libc_hidden_builtin_def(name) \
-  __hidden_ver1 (__strpbrk_ppc, __GI_strpbrk, __strpbrk_ppc);
-#endif
-
-extern __typeof (strpbrk) __strpbrk_ppc attribute_hidden;
-
-#include <string/strpbrk.c>
diff --git a/sysdeps/powerpc/powerpc64/multiarch/strpbrk.c b/sysdeps/powerpc/powerpc64/multiarch/strpbrk.c
deleted file mode 100644
index 47ab6d3..0000000
--- a/sysdeps/powerpc/powerpc64/multiarch/strpbrk.c
+++ /dev/null
@@ -1,31 +0,0 @@
-/* Multiple versions of strpbrk. PowerPC64 version.
-   Copyright (C) 2014 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/>.  */
-
-#if IS_IN (libc)
-# include <string.h>
-# include <shlib-compat.h>
-# include "init-arch.h"
-
-extern __typeof (strpbrk) __strpbrk_ppc attribute_hidden;
-extern __typeof (strpbrk) __strpbrk_power7 attribute_hidden;
-
-libc_ifunc (strpbrk,
-	    (hwcap & PPC_FEATURE_HAS_VSX)
-	    ? __strpbrk_power7
-	    : __strpbrk_ppc);
-#endif
diff --git a/sysdeps/powerpc/powerpc64/power7/strpbrk.S b/sysdeps/powerpc/powerpc64/strpbrk.S
similarity index 78%
rename from sysdeps/powerpc/powerpc64/power7/strpbrk.S
rename to sysdeps/powerpc/powerpc64/strpbrk.S
index d6204a7..6b2ad4d 100644
--- a/sysdeps/powerpc/powerpc64/power7/strpbrk.S
+++ b/sysdeps/powerpc/powerpc64/strpbrk.S
@@ -1,4 +1,4 @@
-/* Optimized strpbrk implementation for PowerPC64/POWER7.
+/* Optimized strpbrk implementation for PowerPC64.
    Copyright (C) 2014 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
 
@@ -20,7 +20,6 @@
 
 /* char [r3] *strpbrk(const char [r4] *s, const char [r5] *accept)  */
 
-	.machine power7
 EALIGN (strpbrk, 4, 0)
 	CALL_MCOUNT 3
 
@@ -32,43 +31,31 @@ EALIGN (strpbrk, 4, 0)
 	   for fast check if input character should be considered.  For ASCII
 	   or ISO-8859-X character sets it has 256 positions.  */
 
-	/* First the table should be cleared and to avoid unaligned accesses
-	   when using the VSX stores the table address is aligned to 16
-	   bytes.  */
-	xxlxor	v0,v0,v0
-
-	/* PPC64 ELF ABI stack is aligned to 16 bytes  */
+	/* PPC64 ELF ABI stack is aligned to 16 bytes.  */
 	addi 	r9,r1,-256
-
-	li	r5,16
-	li	r6,32
-	li	r8,48
-	addi	r12,r9,64
 	/* Clear the table with 0 values  */
-	stxvw4x v0,r0,r9
-	addi	r11,r9,128
-	addi	r7,r9,192
-	stxvw4x	v0,r9,r5
-	li	r0,1
-	stxvw4x v0,r9,r6
-	stxvw4x v0,r9,r8
-	stxvw4x v0,r0,r12
-	stxvw4x v0,r12,r5
-	stxvw4x v0,r12,r6
-	stxvw4x v0,r12,r8
-	stxvw4x v0,r0,r11
-	stxvw4x v0,r11,r5
-	stxvw4x v0,r11,r6
-	stxvw4x v0,r11,r8
-	stxvw4x v0,r0,r7
-	stxvw4x v0,r7,r5
-	stxvw4x v0,r7,r6
-	stxvw4x v0,r7,r8
+	li	r6, 0
+	li	r7, 4
+	mtctr	r7
+	mr	r8, r9
+	.align 	4
+L(zerohash):
+	std	r6, 0(r8)
+	std	r6, 8(r8)
+	std	r6, 16(r8)
+	std	r6, 24(r8)
+	std	r6, 32(r8)
+	std	r6, 40(r8)
+	std	r6, 48(r8)
+	std	r6, 56(r8)
+	addi	r8, r8, 64
+	bdnz	L(zerohash)
 
 	/* Initialize the table as:
 	   for (i=0; accept[i]; i++
 	     table[accept[i]]] = 1  */
-	.p2align 4,,15
+	li      r0,1
+	.align 4
 L(init_table):
 	stbx	r0,r9,r10
 	lbzu	r10,1(r4)
@@ -93,7 +80,7 @@ L(finish_table):
 	       if (table[input[i++]] == 1)
 	         return (s[i -1] ? s + i - 1: NULL);
 	     }  */
-	.p2align 4
+	.align 4
 L(unroll):
 	lbz	r0,1(r3)
 	lbzx	r8,r9,r0
@@ -121,7 +108,7 @@ L(mainloop):
 L(end):
 	blr
 
-	.p2align 4
+	.align 4
 L(checkend):
 	cmpdi	cr1,r12,0
 	mr	r3,r7
@@ -131,14 +118,14 @@ L(nullfound):
 	li 3,0
 	blr
 
-	.p2align 4
+	.align 4
 L(checkend2):
 	cmpdi	cr7,r0,0
 	mr	r3,r11
 	beq	cr7,L(nullfound)
 	blr
 
-	.p2align 4
+	.align 4
 L(checkend3):
 	cmpdi	cr6,r10,0
 	mr	r3,r5

http://sourceware.org/git/gitweb.cgi?p=glibc.git;a=commitdiff;h=bb2542e0ae6f82197e804e7e9b78fed461553fc0

commit bb2542e0ae6f82197e804e7e9b78fed461553fc0
Author: Adhemerval Zanella <azanella@linux.vnet.ibm.com>
Date:   Wed Nov 19 15:24:55 2014 -0500

    powerpc: Add powerpc64 strcspn optimization
    
    This patch makes the POWER7 optimized strcspn generic by using
    default doubleword stores to zero the hash, instead of VSX
    instructions.  Performance on POWER7/POWER8 does not change.

diff --git a/ChangeLog b/ChangeLog
index d069e41..5679760 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,4 +1,13 @@
 2014-12-02  Adhemerval Zanella  <azanella@linux.vnet.ibm.com>
+	
+	* sysdeps/powerpc/powerpc64/multiarch/Makefile [sysdep_routines]:
+	Remove strcspn objects.
+	* sysdeps/powerpc/powerpc64/multiarch/ifunc-impl-list.c
+	(__libc_ifunc_impl_list): Remove strcspn implementation.
+	* sysdeps/powerpc/powerpc64/multiarch/strcspn-ppc64.c: Remove file.
+	* sysdeps/powerpc/powerpc64/multiarch/strcspn.c: Remove file.
+	* sysdeps/powerpc/powerpc64/power7/strcspn.S: Remove file.
+	* sysdeps/powerpc/powerpc64/strcspn.S: New file.
 
 	* sysdeps/powerpc/powerpc64/multiarch/Makefile [sysdep_routines]:
 	Remove strspn objetcs.
diff --git a/sysdeps/powerpc/powerpc64/multiarch/Makefile b/sysdeps/powerpc/powerpc64/multiarch/Makefile
index d6de5a5..05dab25 100644
--- a/sysdeps/powerpc/powerpc64/multiarch/Makefile
+++ b/sysdeps/powerpc/powerpc64/multiarch/Makefile
@@ -15,7 +15,6 @@ sysdep_routines += memcpy-power7 memcpy-a2 memcpy-power6 memcpy-cell \
 		   wordcopy-power7 wordcopy-power6 wordcopy-ppc64 \
 		   strcpy-power7 strcpy-ppc64 stpcpy-power7 stpcpy-ppc64 \
 		   strrchr-power7 strrchr-ppc64 strncat-power7 strncat-ppc64 \
-		   strcspn-power7 strcspn-ppc64 \
 		   strpbrk-power7 strpbrk-ppc64 strncpy-power7 strncpy-ppc64 \
 		   stpncpy-power7 stpncpy-ppc64 strcmp-power7 strcmp-ppc64 \
 		   strcat-power7 strcat-ppc64 memmove-power7 memmove-ppc64 \
diff --git a/sysdeps/powerpc/powerpc64/multiarch/ifunc-impl-list.c b/sysdeps/powerpc/powerpc64/multiarch/ifunc-impl-list.c
index 4a9e523..1a2e38d 100644
--- a/sysdeps/powerpc/powerpc64/multiarch/ifunc-impl-list.c
+++ b/sysdeps/powerpc/powerpc64/multiarch/ifunc-impl-list.c
@@ -272,14 +272,6 @@ __libc_ifunc_impl_list (const char *name, struct libc_ifunc_impl *array,
 	      IFUNC_IMPL_ADD (array, i, strncat, 1,
 			      __strncat_ppc))
 
-  /* Support sysdeps/powerpc/powerpc64/multiarch/strcspn.c.  */
-  IFUNC_IMPL (i, name, strcspn,
-	      IFUNC_IMPL_ADD (array, i, strcspn,
-			      hwcap & PPC_FEATURE_HAS_VSX,
-			      __strcspn_power7)
-	      IFUNC_IMPL_ADD (array, i, strcspn, 1,
-			     __strcspn_ppc))
-
   /* Support sysdeps/powerpc/powerpc64/multiarch/strpbrk.c.  */
   IFUNC_IMPL (i, name, strpbrk,
 	      IFUNC_IMPL_ADD (array, i, strpbrk,
diff --git a/sysdeps/powerpc/powerpc64/multiarch/strcspn-power7.S b/sysdeps/powerpc/powerpc64/multiarch/strcspn-power7.S
deleted file mode 100644
index 02ffcc8..0000000
--- a/sysdeps/powerpc/powerpc64/multiarch/strcspn-power7.S
+++ /dev/null
@@ -1,40 +0,0 @@
-/* Optimized strcspn implementation for POWER7.
-   Copyright (C) 2014 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>
-
-#undef EALIGN
-#define EALIGN(name, alignt, words)				\
-  .section ".text";						\
-  ENTRY_2(__strcspn_power7)					\
-  .align ALIGNARG(alignt);					\
-  EALIGN_W_##words;						\
-  BODY_LABEL(__strcspn_power7):					\
-  cfi_startproc;						\
-  LOCALENTRY(__strcspn_power7)
-
-#undef END
-#define END(name)						\
-  cfi_endproc;							\
-  TRACEBACK(__strcspn_power7)					\
-  END_2(__strcspn_power7)
-
-#undef libc_hidden_builtin_def
-#define libc_hidden_builtin_def(name)
-
-#include <sysdeps/powerpc/powerpc64/power7/strcspn.S>
diff --git a/sysdeps/powerpc/powerpc64/multiarch/strcspn-ppc64.c b/sysdeps/powerpc/powerpc64/multiarch/strcspn-ppc64.c
deleted file mode 100644
index 5f8b610..0000000
--- a/sysdeps/powerpc/powerpc64/multiarch/strcspn-ppc64.c
+++ /dev/null
@@ -1,30 +0,0 @@
-/* Copyright (C) 2014 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 <string.h>
-
-#define STRCSPN __strcspn_ppc
-#ifdef SHARED
-
-# undef libc_hidden_builtin_def
-# define libc_hidden_builtin_def(name) \
-  __hidden_ver1 (__strcspn_ppc, __GI_strcspn, __strcspn_ppc);
-#endif
-
-extern __typeof (strcspn) __strcspn_ppc attribute_hidden;
-
-#include <string/strcspn.c>
diff --git a/sysdeps/powerpc/powerpc64/multiarch/strcspn.c b/sysdeps/powerpc/powerpc64/multiarch/strcspn.c
deleted file mode 100644
index 156fa6a..0000000
--- a/sysdeps/powerpc/powerpc64/multiarch/strcspn.c
+++ /dev/null
@@ -1,31 +0,0 @@
-/* Multiple versions of strcspn. PowerPC64 version.
-   Copyright (C) 2014 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/>.  */
-
-#if IS_IN (libc)
-# include <string.h>
-# include <shlib-compat.h>
-# include "init-arch.h"
-
-extern __typeof (strcspn) __strcspn_ppc attribute_hidden;
-extern __typeof (strcspn) __strcspn_power7 attribute_hidden;
-
-libc_ifunc (strcspn,
-	    (hwcap & PPC_FEATURE_HAS_VSX)
-	    ? __strcspn_power7
-	    : __strcspn_ppc);
-#endif
diff --git a/sysdeps/powerpc/powerpc64/power7/strcspn.S b/sysdeps/powerpc/powerpc64/strcspn.S
similarity index 80%
rename from sysdeps/powerpc/powerpc64/power7/strcspn.S
rename to sysdeps/powerpc/powerpc64/strcspn.S
index 3f6aa0a..1121930 100644
--- a/sysdeps/powerpc/powerpc64/power7/strcspn.S
+++ b/sysdeps/powerpc/powerpc64/strcspn.S
@@ -20,54 +20,42 @@
 
 /* size_t [r3] strcspn (const char [r4] *s, const char [r5] *reject)  */
 
-	.machine power7
 EALIGN (strcspn, 4, 0)
 	CALL_MCOUNT 3
 
 	/* The idea to speed up the algorithm is to create a lookup table
 	   for fast check if input character should be considered.  For ASCII
 	   or ISO-8859-X character sets it has 256 positions.  */
-	lbz	r10,0(r4)
-
-	/* First the table should be cleared and to avoid unaligned accesses
-	   when using the VSX stores the table address is aligned to 16
-	   bytes.  */
-	xxlxor	v0,v0,v0
 
 	/* PPC64 ELF ABI stack is aligned to 16 bytes.  */
 	addi 	r9,r1,-256
+	/* Clear the table with 0 values  */
+	li	r6, 0
+	li	r8, 4
+	mtctr	r8
+	mr	r10, r9
+	.align 	4
+L(zerohash):
+	std	r6, 0(r10)
+	std	r6, 8(r10)
+	std	r6, 16(r10)
+	std	r6, 24(r10)
+	std	r6, 32(r10)
+	std	r6, 40(r10)
+	std	r6, 48(r10)
+	std	r6, 56(r10)
+	addi	r10, r10, 64
+	bdnz	L(zerohash)
 
-	li	r8,48
-	li	r5,16
-	li	r6,32
+	lbz	r10,0(r4)
 	cmpdi	cr7,r10,0	/* reject[0] == '\0' ?  */
-	addi	r12,r9,64
-	/* Clear the table with 0 values  */
-	stxvw4x	v0,r0,r9
-	addi	r11,r9,128
-	addi	r7,r9,192
-	stxvw4x v0,r9,r5
-	stxvw4x v0,r9,r6
-	stxvw4x v0,r9,r8
-	stxvw4x v0,r0,r12
-	stxvw4x v0,r12,r5
-	stxvw4x v0,r12,r6
-	stxvw4x v0,r12,r8
-	stxvw4x v0,r0,r11
-	stxvw4x v0,r11,r5
-	stxvw4x v0,r11,r6
-	stxvw4x v0,r11,r8
-	stxvw4x v0,r0,r7
-	stxvw4x v0,r7,r5
-	stxvw4x v0,r7,r6
-	stxvw4x v0,r7,r8
 	li	r8,1
 	beq     cr7,L(finish_table)  /* If reject[0] == '\0' skip  */
 
 	/* Initialize the table as:
 	   for (i=0; reject[i]; i++
 	     table[reject[i]]] = 1  */
-	.p2align 4,,15
+	.align	4
 L(init_table):
 	stbx	r8,r9,r10
 	lbzu	r10,1(r4)
@@ -93,7 +81,7 @@ L(finish_table):
 	       if (table[input[i++]] == 1)
 	         return i - 1;
 	     }  */
-	.p2align 4,,15
+	.align 4
 L(unroll):
 	lbz	r8,1(r3)
 	addi	r10,r10,4
@@ -121,17 +109,17 @@ L(mainloop):
 	mr	r3,r10
 	blr
 
-	.p2align 4,,15
+	.align 4
 L(end):
 	mr	r3,r6
 	blr
 
-	.p2align 4,,15
+	.align 4
 L(end2):
 	mr	r3,r4
 	blr
 
-	.p2align 4,,15
+	.align 4
 L(end3):
 	mr	r3,r5
 	blr

http://sourceware.org/git/gitweb.cgi?p=glibc.git;a=commitdiff;h=2e8a2de2dafa3238b5b58eecb407af6825a780cd

commit 2e8a2de2dafa3238b5b58eecb407af6825a780cd
Author: Adhemerval Zanella <azanella@linux.vnet.ibm.com>
Date:   Wed Nov 19 14:24:18 2014 -0500

    powerpc: Add powerpc64 strspn optimization
    
    This patch makes the POWER7 optimized strspn generic by using
    default doubleword stores to zero the hash, instead of VSX
    instructions. Performance on POWER7/POWER8 machines does not changed.

diff --git a/ChangeLog b/ChangeLog
index 7d58833..d069e41 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,14 @@
+2014-12-02  Adhemerval Zanella  <azanella@linux.vnet.ibm.com>
+
+	* sysdeps/powerpc/powerpc64/multiarch/Makefile [sysdep_routines]:
+	Remove strspn objetcs.
+	* sysdeps/powerpc/powerpc64/multiarch/ifunc-impl-list.c
+	(__libc_ifunc_impl_list): Remove strspn implementation.
+	* sysdeps/powerpc/powerpc64/multiarch/strspn-power7.S: Remove file.
+	* sysdeps/powerpc/powerpc64/multiarch/strspn-ppc64.c: Likewise.
+	* sysdeps/powerpc/powerpc64/power7/strspn.S: Remove file.
+	* sysdeps/powerpc/powerpc64/strspn.S: New file.
+
 2014-12-01  James Lemke  <jwlemke@codesourcery.com>
 
 	[BZ #17581]
diff --git a/sysdeps/powerpc/powerpc64/multiarch/Makefile b/sysdeps/powerpc/powerpc64/multiarch/Makefile
index abc9d2e..d6de5a5 100644
--- a/sysdeps/powerpc/powerpc64/multiarch/Makefile
+++ b/sysdeps/powerpc/powerpc64/multiarch/Makefile
@@ -15,7 +15,7 @@ sysdep_routines += memcpy-power7 memcpy-a2 memcpy-power6 memcpy-cell \
 		   wordcopy-power7 wordcopy-power6 wordcopy-ppc64 \
 		   strcpy-power7 strcpy-ppc64 stpcpy-power7 stpcpy-ppc64 \
 		   strrchr-power7 strrchr-ppc64 strncat-power7 strncat-ppc64 \
-		   strspn-power7 strspn-ppc64 strcspn-power7 strcspn-ppc64 \
+		   strcspn-power7 strcspn-ppc64 \
 		   strpbrk-power7 strpbrk-ppc64 strncpy-power7 strncpy-ppc64 \
 		   stpncpy-power7 stpncpy-ppc64 strcmp-power7 strcmp-ppc64 \
 		   strcat-power7 strcat-ppc64 memmove-power7 memmove-ppc64 \
diff --git a/sysdeps/powerpc/powerpc64/multiarch/ifunc-impl-list.c b/sysdeps/powerpc/powerpc64/multiarch/ifunc-impl-list.c
index 06d5be9..4a9e523 100644
--- a/sysdeps/powerpc/powerpc64/multiarch/ifunc-impl-list.c
+++ b/sysdeps/powerpc/powerpc64/multiarch/ifunc-impl-list.c
@@ -272,14 +272,6 @@ __libc_ifunc_impl_list (const char *name, struct libc_ifunc_impl *array,
 	      IFUNC_IMPL_ADD (array, i, strncat, 1,
 			      __strncat_ppc))
 
-  /* Support sysdeps/powerpc/powerpc64/multiarch/strspn.c.  */
-  IFUNC_IMPL (i, name, strspn,
-	      IFUNC_IMPL_ADD (array, i, strspn,
-			      hwcap & PPC_FEATURE_HAS_VSX,
-			      __strspn_power7)
-	      IFUNC_IMPL_ADD (array, i, strspn, 1,
-			      __strspn_ppc))
-
   /* Support sysdeps/powerpc/powerpc64/multiarch/strcspn.c.  */
   IFUNC_IMPL (i, name, strcspn,
 	      IFUNC_IMPL_ADD (array, i, strcspn,
diff --git a/sysdeps/powerpc/powerpc64/multiarch/strspn-power7.S b/sysdeps/powerpc/powerpc64/multiarch/strspn-power7.S
deleted file mode 100644
index 889dfee..0000000
--- a/sysdeps/powerpc/powerpc64/multiarch/strspn-power7.S
+++ /dev/null
@@ -1,40 +0,0 @@
-/* Optimized strspn implementation for POWER7.
-   Copyright (C) 2014 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>
-
-#undef EALIGN
-#define EALIGN(name, alignt, words)				\
-  .section ".text";						\
-  ENTRY_2(__strspn_power7)					\
-  .align ALIGNARG(alignt);					\
-  EALIGN_W_##words;						\
-  BODY_LABEL(__strspn_power7):					\
-  cfi_startproc;						\
-  LOCALENTRY(__strspn_power7)
-
-#undef END
-#define END(name)						\
-  cfi_endproc;							\
-  TRACEBACK(__strspn_power7)					\
-  END_2(__strspn_power7)
-
-#undef libc_hidden_builtin_def
-#define libc_hidden_builtin_def(name)
-
-#include <sysdeps/powerpc/powerpc64/power7/strspn.S>
diff --git a/sysdeps/powerpc/powerpc64/multiarch/strspn-ppc64.c b/sysdeps/powerpc/powerpc64/multiarch/strspn-ppc64.c
deleted file mode 100644
index b35af3e..0000000
--- a/sysdeps/powerpc/powerpc64/multiarch/strspn-ppc64.c
+++ /dev/null
@@ -1,33 +0,0 @@
-/* Copyright (C) 2014 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 <string.h>
-
-#define STRSPN __strspn_ppc
-#undef weak_alias
-#define weak_alias(name, aliasname) \
-  extern __typeof (__strspn_ppc) aliasname \
-    __attribute__ ((weak, alias ("__strspn_ppc")));
-#if IS_IN (libc) && defined(SHARED)
-# undef libc_hidden_builtin_def
-# define libc_hidden_builtin_def(name) \
-  __hidden_ver1(__strspn_ppc, __GI_strspn, __strspn_ppc);
-#endif
-
-extern __typeof (strspn) __strspn_ppc attribute_hidden;
-
-#include <string/strspn.c>
diff --git a/sysdeps/powerpc/powerpc64/multiarch/strspn.c b/sysdeps/powerpc/powerpc64/multiarch/strspn.c
deleted file mode 100644
index dd9ec18..0000000
--- a/sysdeps/powerpc/powerpc64/multiarch/strspn.c
+++ /dev/null
@@ -1,31 +0,0 @@
-/* Multiple versions of strspn. PowerPC64 version.
-   Copyright (C) 2014 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/>.  */
-
-#if IS_IN (libc)
-# include <string.h>
-# include <shlib-compat.h>
-# include "init-arch.h"
-
-extern __typeof (strspn) __strspn_ppc attribute_hidden;
-extern __typeof (strspn) __strspn_power7 attribute_hidden;
-
-libc_ifunc (strspn,
-            (hwcap & PPC_FEATURE_HAS_VSX)
-            ? __strspn_power7
-            : __strspn_ppc);
-#endif
diff --git a/sysdeps/powerpc/powerpc64/power7/strspn.S b/sysdeps/powerpc/powerpc64/strspn.S
similarity index 75%
rename from sysdeps/powerpc/powerpc64/power7/strspn.S
rename to sysdeps/powerpc/powerpc64/strspn.S
index d587a67..daf5d5d 100644
--- a/sysdeps/powerpc/powerpc64/power7/strspn.S
+++ b/sysdeps/powerpc/powerpc64/strspn.S
@@ -1,4 +1,4 @@
-/* Optimized strspn implementation for PowerPC64/POWER7.
+/* Optimized strspn implementation for PowerPC64.
 
    Copyright (C) 2014 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
@@ -25,8 +25,6 @@
    > hashing of needle.
    > hashing avoids scanning of duplicate entries in needle
      across the string.
-   > initializing the hash table with Vector instructions
-     by quadword access.
    > unrolling when scanning for character in string
      across hash table.  */
 
@@ -46,55 +44,36 @@
 
 #include <sysdep.h>
 
-#undef strspn
-
-	.machine  power7
 EALIGN(strspn, 4, 0)
-	CALL_MCOUNT 2
-
-	lbz r10, 0(r4)		/* load r10 with needle (r4)  */
-	addi r9, r1, -256	/* r9 is a hash of 256 bytes  */
-
-	li r5, 16		/* set r5 = 16 as offset  */
-	li r6, 32		/* set r6 = 32 as offset  */
-	li r8, 48		/* set r8 = 48 as offset  */
-
-/*Iniatliaze hash table with Zeroes in double indexed quadword accesses  */
-	xxlxor v0, v0, v0	/* prepare for initializing hash  */
-
-	stxvd2x v0, r0, r9	/* initialize 1st quadword  */
-	stxvd2x v0, r9, r5
-	stxvd2x v0, r9, r6
-	stxvd2x v0, r9, r8	/* initialize 4th quadword  */
-
-	addi r11, r9, 64	/* r11 is index to hash  */
-
-	stxvd2x v0, r0, r11	/* initialize 5th quadword  */
-	stxvd2x v0, r11, r5
-	stxvd2x v0, r11, r6
-	stxvd2x v0, r11, r8	/* initialize 8th quadword  */
-
-	addi r11, r9, 128	/* r11 is index to hash  */
-
-	stxvd2x v0, r0, r11	/* initialize 9th quadword  */
-	stxvd2x v0, r11, r5
-	stxvd2x v0, r11, r6
-	stxvd2x v0, r11, r8	/* initialize 12th quadword  */
-
-	addi r11, r9, 192	/* r11 is index to hash  */
-
-	stxvd2x v0, r0, r11	/* initialize 13th quadword  */
-	stxvd2x v0, r11, r5
-	stxvd2x v0, r11, r6
-	stxvd2x v0, r11, r8	/* initialize 16th quadword  */
-
+	CALL_MCOUNT 3
+
+	/* PPC64 ELF ABI stack is aligned to 16 bytes.  */
+	addi 	r9,r1,-256
+	/* Clear the table with 0 values  */
+	li	r6, 0
+	li	r8, 4
+	mtctr	r8
+	mr	r10, r9
+	.align 	4
+L(zerohash):
+	std	r6, 0(r10)
+	std	r6, 8(r10)
+	std	r6, 16(r10)
+	std	r6, 24(r10)
+	std	r6, 32(r10)
+	std	r6, 40(r10)
+	std	r6, 48(r10)
+	std	r6, 56(r10)
+	addi	r10, r10, 64
+	bdnz	L(zerohash)
+
+	lbz	r10,0(r4)
 	li r8, 1		/* r8=1, marker into hash if found in
 				   needle  */
-
 	cmpdi cr7, r10, 0	/* accept needle is NULL  */
 	beq cr7, L(skipHashing)	/* if needle is NULL, skip hashing  */
 
-	.p2align 4		/* align section to 16 byte boundary  */
+	.align 4		/* align section to 16 byte boundary  */
 L(hashing):
 	stbx r8, r9, r10	/* update hash with marker for the pivot of
 				   the needle  */
@@ -106,7 +85,7 @@ L(skipHashing):
 	li r10, 0		/* load counter = 0  */
 	b L(beginScan)
 
-	.p2align 4		/* align section to 16 byte boundary  */
+	.align 4		/* align section to 16 byte boundary  */
 L(scanUnroll):
 	lbzx r8, r9, r8		/* load r8 with hash value at index  */
 	cmpwi cr7, r8, 0	/* if we hit marker in hash, we have found

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

Summary of changes:
 ChangeLog                                          |   29 ++++
 sysdeps/powerpc/powerpc64/multiarch/Makefile       |    3 +-
 .../powerpc/powerpc64/multiarch/ifunc-impl-list.c  |   24 ---
 .../powerpc/powerpc64/multiarch/strcspn-power7.S   |   40 -----
 .../powerpc/powerpc64/multiarch/strcspn-ppc64.c    |   30 ----
 sysdeps/powerpc/powerpc64/multiarch/strcspn.c      |   31 ----
 .../powerpc/powerpc64/multiarch/strpbrk-power7.S   |   40 -----
 .../powerpc/powerpc64/multiarch/strpbrk-ppc64.c    |   30 ----
 sysdeps/powerpc/powerpc64/multiarch/strpbrk.c      |   31 ----
 .../powerpc/powerpc64/multiarch/strspn-power7.S    |   40 -----
 sysdeps/powerpc/powerpc64/multiarch/strspn-ppc64.c |   33 ----
 sysdeps/powerpc/powerpc64/multiarch/strspn.c       |   31 ----
 sysdeps/powerpc/powerpc64/power7/strcspn.S         |  139 ----------------
 sysdeps/powerpc/powerpc64/power7/strpbrk.S         |  148 ------------------
 sysdeps/powerpc/powerpc64/power7/strspn.S          |  165 --------------------
 sysdeps/powerpc/powerpc64/strcspn.S                |  127 +++++++++++++++
 sysdeps/powerpc/powerpc64/strpbrk.S                |  135 ++++++++++++++++
 sysdeps/powerpc/powerpc64/strspn.S                 |  144 +++++++++++++++++
 18 files changed, 436 insertions(+), 784 deletions(-)
 delete mode 100644 sysdeps/powerpc/powerpc64/multiarch/strcspn-power7.S
 delete mode 100644 sysdeps/powerpc/powerpc64/multiarch/strcspn-ppc64.c
 delete mode 100644 sysdeps/powerpc/powerpc64/multiarch/strcspn.c
 delete mode 100644 sysdeps/powerpc/powerpc64/multiarch/strpbrk-power7.S
 delete mode 100644 sysdeps/powerpc/powerpc64/multiarch/strpbrk-ppc64.c
 delete mode 100644 sysdeps/powerpc/powerpc64/multiarch/strpbrk.c
 delete mode 100644 sysdeps/powerpc/powerpc64/multiarch/strspn-power7.S
 delete mode 100644 sysdeps/powerpc/powerpc64/multiarch/strspn-ppc64.c
 delete mode 100644 sysdeps/powerpc/powerpc64/multiarch/strspn.c
 delete mode 100644 sysdeps/powerpc/powerpc64/power7/strcspn.S
 delete mode 100644 sysdeps/powerpc/powerpc64/power7/strpbrk.S
 delete mode 100644 sysdeps/powerpc/powerpc64/power7/strspn.S
 create mode 100644 sysdeps/powerpc/powerpc64/strcspn.S
 create mode 100644 sysdeps/powerpc/powerpc64/strpbrk.S
 create mode 100644 sysdeps/powerpc/powerpc64/strspn.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]