powerpc: Rearrange little endian specific files
authorRajalakshmi Srinivasaraghavan <raji@linux.vnet.ibm.com>
Thu, 16 Aug 2018 06:42:02 +0000 (12:12 +0530)
committerRajalakshmi Srinivasaraghavan <raji@linux.vnet.ibm.com>
Thu, 16 Aug 2018 06:42:02 +0000 (12:12 +0530)
This patch moves little endian specific POWER9 optimization files to
sysdeps/powerpc/powerpc64/le and creates POWER9 ifunc functions
only for little endian.

ChangeLog
sysdeps/powerpc/powerpc64/le/power9/strcmp.S [moved from sysdeps/powerpc/powerpc64/power9/strcmp.S with 93% similarity]
sysdeps/powerpc/powerpc64/le/power9/strncmp.S [moved from sysdeps/powerpc/powerpc64/power9/strncmp.S with 95% similarity]
sysdeps/powerpc/powerpc64/multiarch/Makefile
sysdeps/powerpc/powerpc64/multiarch/ifunc-impl-list.c
sysdeps/powerpc/powerpc64/multiarch/strcmp-power9.S
sysdeps/powerpc/powerpc64/multiarch/strcmp.c
sysdeps/powerpc/powerpc64/multiarch/strncmp-power9.S
sysdeps/powerpc/powerpc64/multiarch/strncmp.c

index 3815943..dedffaa 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,25 @@
+2018-08-16  Rajalakshmi Srinivasaraghavan  <raji@linux.vnet.ibm.com>
+
+       * sysdeps/powerpc/powerpc64/multiarch/Makefile
+       (sysdep_routines): Build strcmp-power9 and strncmp-power9
+       only for little endian.
+       * sysdeps/powerpc/powerpc64/multiarch/ifunc-impl-list.c
+       (strncmp): Move __strncmp_power9 inside ifdef __LITTLE_ENDIAN__.
+       (STRCMP): Move __strcmp_power9 inside ifdef __LITTLE_ENDIAN__.
+       * sysdeps/powerpc/powerpc64/multiarch/strcmp-power9.S:
+       Add check for little endian.
+       * sysdeps/powerpc/powerpc64/multiarch/strcmp.c
+       (__strcmp_power9): Add check for little endian.
+       * sysdeps/powerpc/powerpc64/multiarch/strncmp-power9.S:
+       Add check for little endian.
+       * sysdeps/powerpc/powerpc64/multiarch/strncmp.c
+       (__strncmp_power9): Add check for little endian.
+       * sysdeps/powerpc/powerpc64/power9/strcmp.S: Removed ifdef
+       __LITTLE_ENDIAN__ and moved to sysdeps/powerpc/powerpc64/le/power9.
+       * sysdeps/powerpc/powerpc64/power9/strncmp.S: Likewise.
+       * sysdeps/powerpc/powerpc64/le/power9/strcmp.S: New file.
+       * sysdeps/powerpc/powerpc64/le/power9/strncmp.S: Likewise.
+
 2018-08-15  Siddhesh Poyarekar  <siddhesh@sourceware.org>
 
        * sysdeps/aarch64/strlen.S (__strlen): Rename to STRLEN.
similarity index 93%
rename from sysdeps/powerpc/powerpc64/power9/strcmp.S
rename to sysdeps/powerpc/powerpc64/le/power9/strcmp.S
index 98243a9..bf057f5 100644 (file)
@@ -15,7 +15,6 @@
    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/>.  */
-#ifdef __LITTLE_ENDIAN__
 #include <sysdep.h>
 
 #ifndef STRCMP
    as in POWER8 patch and uses vectorised loops after that.  */
 
 /* TODO: Change this to actual instructions when minimum binutils is upgraded
-   to 2.27. Macros are defined below for these newer instructions in order
+   to 2.27.  Macros are defined below for these newer instructions in order
    to maintain compatibility.  */
-# define VCTZLSBB(r,v) .long (0x10010602 | ((r)<<(32-11)) | ((v)<<(32-21)))
+#define VCTZLSBB(r,v) .long (0x10010602 | ((r)<<(32-11)) | ((v)<<(32-21)))
 
-# define VEXTUBRX(t,a,b) .long (0x1000070d \
+#define VEXTUBRX(t,a,b) .long (0x1000070d \
                                | ((t)<<(32-11))  \
                                | ((a)<<(32-16))  \
                                | ((b)<<(32-21)) )
 
-# define VCMPNEZB(t,a,b) .long (0x10000507 \
+#define VCMPNEZB(t,a,b) .long (0x10000507 \
                                | ((t)<<(32-11))  \
                                | ((a)<<(32-16))  \
                                | ((b)<<(32-21)) )
@@ -48,7 +47,7 @@
    reg1: Vector to hold next 16 bytes.
    reg2: Address to read from.
    reg3: Permute control vector.  */
-# define GET16BYTES(reg1, reg2, reg3) \
+#define GET16BYTES(reg1, reg2, reg3) \
        lvx     reg1, 0, reg2; \
        vperm   v8, v2, reg1, reg3; \
        vcmpequb.       v8, v0, v8; \
@@ -263,6 +262,3 @@ L(pagecross_nullfound):
        b       L(pagecross_retdiff)
 END (STRCMP)
 libc_hidden_builtin_def (strcmp)
-#else
-#include <sysdeps/powerpc/powerpc64/power8/strcmp.S>
-#endif
similarity index 95%
rename from sysdeps/powerpc/powerpc64/power9/strncmp.S
rename to sysdeps/powerpc/powerpc64/le/power9/strncmp.S
index 40be98f..93a7934 100644 (file)
@@ -15,7 +15,6 @@
    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/>.  */
-#ifdef __LITTLE_ENDIAN__
 #include <sysdep.h>
 
 /* Implements the function
 #endif
 
 /* TODO: Change this to actual instructions when minimum binutils is upgraded
-   to 2.27. Macros are defined below for these newer instructions in order
+   to 2.27.  Macros are defined below for these newer instructions in order
    to maintain compatibility.  */
-# define VCTZLSBB(r,v) .long (0x10010602 | ((r)<<(32-11)) | ((v)<<(32-21)))
+#define VCTZLSBB(r,v) .long (0x10010602 | ((r)<<(32-11)) | ((v)<<(32-21)))
 
-# define VEXTUBRX(t,a,b) .long (0x1000070d \
+#define VEXTUBRX(t,a,b) .long (0x1000070d \
                                | ((t)<<(32-11))  \
                                | ((a)<<(32-16))  \
                                | ((b)<<(32-21)) )
 
-# define VCMPNEZB(t,a,b) .long (0x10000507 \
+#define VCMPNEZB(t,a,b) .long (0x10000507 \
                                | ((t)<<(32-11))  \
                                | ((a)<<(32-16))  \
                                | ((b)<<(32-21)) )
@@ -49,7 +48,7 @@
    reg1: Vector to hold next 16 bytes.
    reg2: Address to read from.
    reg3: Permute control vector.  */
-# define GET16BYTES(reg1, reg2, reg3) \
+#define GET16BYTES(reg1, reg2, reg3) \
        lvx     reg1, 0, reg2; \
        vperm   v8, v2, reg1, reg3; \
        vcmpequb.       v8, v0, v8; \
@@ -374,6 +373,3 @@ L(byte_ne_3):
        b       L(byte_ne_1)
 END(STRNCMP)
 libc_hidden_builtin_def(strncmp)
-#else
-#include <sysdeps/powerpc/powerpc64/power8/strncmp.S>
-#endif
index 4df6b45..963ea84 100644 (file)
@@ -12,7 +12,7 @@ sysdep_routines += memcpy-power8-cached memcpy-power7 memcpy-a2 memcpy-power6 \
                   strnlen-power8 strnlen-power7 strnlen-ppc64 \
                   strcasecmp-power7 strcasecmp_l-power7 \
                   strncase-power7 strncase_l-power7 \
-                  strncmp-power9 strncmp-power8 strncmp-power7 \
+                  strncmp-power8 strncmp-power7 \
                   strncmp-power4 strncmp-ppc64 \
                   strchr-power8 strchr-power7 strchr-ppc64 \
                   strchrnul-power8 strchrnul-power7 strchrnul-ppc64 \
@@ -22,7 +22,7 @@ sysdep_routines += memcpy-power8-cached memcpy-power7 memcpy-a2 memcpy-power6 \
                   strncat-power8 strncat-power7 strncat-ppc64 \
                   strncpy-power7 strncpy-ppc64 \
                   stpncpy-power8 stpncpy-power7 stpncpy-ppc64 \
-                  strcmp-power9 strcmp-power8 strcmp-power7 strcmp-ppc64 \
+                  strcmp-power8 strcmp-power7 strcmp-ppc64 \
                   strcat-power8 strcat-power7 strcat-ppc64 \
                   memmove-power7 memmove-ppc64 wordcopy-ppc64 bcopy-ppc64 \
                   strncpy-power8 strstr-power7 strstr-ppc64 \
@@ -31,6 +31,9 @@ sysdep_routines += memcpy-power8-cached memcpy-power7 memcpy-a2 memcpy-power6 \
                   strcasecmp-ppc64 strcasecmp-power8 strncase-ppc64 \
                   strncase-power8
 
+ifneq (,$(filter %le,$(config-machine)))
+sysdep_routines += strcmp-power9 strncmp-power9
+endif
 CFLAGS-strncase-power7.c += -mcpu=power7 -funroll-loops
 CFLAGS-strncase_l-power7.c += -mcpu=power7 -funroll-loops
 endif
index 38a21e4..1d374f2 100644 (file)
@@ -112,8 +112,10 @@ __libc_ifunc_impl_list (const char *name, struct libc_ifunc_impl *array,
 
   /* Support sysdeps/powerpc/powerpc64/multiarch/strncmp.c.  */
   IFUNC_IMPL (i, name, strncmp,
+#ifdef __LITTLE_ENDIAN__
              IFUNC_IMPL_ADD (array, i, strncmp, hwcap2 & PPC_FEATURE2_ARCH_3_00,
                              __strncmp_power9)
+#endif
              IFUNC_IMPL_ADD (array, i, strncmp, hwcap2 & PPC_FEATURE2_ARCH_2_07,
                              __strncmp_power8)
              IFUNC_IMPL_ADD (array, i, strncmp, hwcap & PPC_FEATURE_HAS_VSX,
@@ -337,9 +339,11 @@ __libc_ifunc_impl_list (const char *name, struct libc_ifunc_impl *array,
 
   /* Support sysdeps/powerpc/powerpc64/multiarch/strcmp.c.  */
   IFUNC_IMPL (i, name, strcmp,
+#ifdef __LITTLE_ENDIAN__
              IFUNC_IMPL_ADD (array, i, strcmp,
                              hwcap2 & PPC_FEATURE2_ARCH_3_00,
                              __strcmp_power9)
+#endif
              IFUNC_IMPL_ADD (array, i, strcmp,
                              hwcap2 & PPC_FEATURE2_ARCH_2_07,
                              __strcmp_power8)
index 8b569d3..545e6ce 100644 (file)
    License along with the GNU C Library; if not, see
    <http://www.gnu.org/licenses/>.  */
 
-#if IS_IN (libc)
+#if defined __LITTLE_ENDIAN__ && IS_IN (libc)
 #define STRCMP __strcmp_power9
 
 #undef libc_hidden_builtin_def
 #define libc_hidden_builtin_def(name)
 
-#include <sysdeps/powerpc/powerpc64/power9/strcmp.S>
+#include <sysdeps/powerpc/powerpc64/le/power9/strcmp.S>
 #endif
index b669053..2422c8d 100644 (file)
 extern __typeof (strcmp) __strcmp_ppc attribute_hidden;
 extern __typeof (strcmp) __strcmp_power7 attribute_hidden;
 extern __typeof (strcmp) __strcmp_power8 attribute_hidden;
+# ifdef __LITTLE_ENDIAN__
 extern __typeof (strcmp) __strcmp_power9 attribute_hidden;
+# endif
 
 # undef strcmp
 
 libc_ifunc_redirected (__redirect_strcmp, strcmp,
+# ifdef __LITTLE_ENDIAN__
                        (hwcap2 & PPC_FEATURE2_ARCH_3_00)
                        ? __strcmp_power9 :
+# endif
                       (hwcap2 & PPC_FEATURE2_ARCH_2_07)
                       ? __strcmp_power8
                       : (hwcap & PPC_FEATURE_HAS_VSX)
index 3356f72..c6f0128 100644 (file)
    License along with the GNU C Library; if not, see
    <http://www.gnu.org/licenses/>.  */
 
-#if IS_IN (libc)
+#if defined __LITTLE_ENDIAN__ && IS_IN (libc)
 #define STRNCMP __strncmp_power9
 
 #undef libc_hidden_builtin_def
 #define libc_hidden_builtin_def(name)
 
-#include <sysdeps/powerpc/powerpc64/power9/strncmp.S>
+#include <sysdeps/powerpc/powerpc64/le/power9/strncmp.S>
 #endif
index c4a40d1..9c887ee 100644 (file)
@@ -29,14 +29,18 @@ extern __typeof (strncmp) __strncmp_ppc attribute_hidden;
 extern __typeof (strncmp) __strncmp_power4 attribute_hidden;
 extern __typeof (strncmp) __strncmp_power7 attribute_hidden;
 extern __typeof (strncmp) __strncmp_power8 attribute_hidden;
+# ifdef __LITTLE_ENDIAN__
 extern __typeof (strncmp) __strncmp_power9 attribute_hidden;
+# endif
 # undef strncmp
 
 /* Avoid DWARF definition DIE on ifunc symbol so that GDB can handle
    ifunc symbol properly.  */
 libc_ifunc_redirected (__redirect_strncmp, strncmp,
+# ifdef __LITTLE_ENDIAN_
                        (hwcap2 & PPC_FEATURE2_ARCH_3_00)
                        ? __strncmp_power9 :
+# endif
                       (hwcap2 & PPC_FEATURE2_ARCH_2_07)
                       ? __strncmp_power8
                       : (hwcap & PPC_FEATURE_HAS_VSX)