]> git.ipfire.org Git - thirdparty/glibc.git/commitdiff
powerpc64: Stop assuming new processors have VSX tuliom/microwatt
authorTulio Magno Quites Machado Filho <tuliom@linux.ibm.com>
Fri, 2 Oct 2020 13:18:48 +0000 (10:18 -0300)
committerTulio Magno Quites Machado Filho <tuliom@linux.ibm.com>
Wed, 17 Feb 2021 16:38:29 +0000 (13:38 -0300)
VSX has been available on IBM POWER since POWER7.  All IBM processors
compliant with POWER ISAs 2.07, 3.0 and 3.1 also support VSX.
This patch aims to remove a barrier for new processors as they start to
support Linux on powerpc64 while not having support for all the altivec
and vsx instructions.

23 files changed:
sysdeps/powerpc/powerpc64/multiarch/bzero.c
sysdeps/powerpc/powerpc64/multiarch/ifunc-impl-list.c
sysdeps/powerpc/powerpc64/multiarch/memchr.c
sysdeps/powerpc/powerpc64/multiarch/memcmp.c
sysdeps/powerpc/powerpc64/multiarch/memcpy.c
sysdeps/powerpc/powerpc64/multiarch/memrchr.c
sysdeps/powerpc/powerpc64/multiarch/memset.c
sysdeps/powerpc/powerpc64/multiarch/rawmemchr.c
sysdeps/powerpc/powerpc64/multiarch/stpcpy.c
sysdeps/powerpc/powerpc64/multiarch/strcasecmp.c
sysdeps/powerpc/powerpc64/multiarch/strcasestr.c
sysdeps/powerpc/powerpc64/multiarch/strcat.c
sysdeps/powerpc/powerpc64/multiarch/strchr.c
sysdeps/powerpc/powerpc64/multiarch/strcmp.c
sysdeps/powerpc/powerpc64/multiarch/strcpy.c
sysdeps/powerpc/powerpc64/multiarch/strcspn.c
sysdeps/powerpc/powerpc64/multiarch/strlen.c
sysdeps/powerpc/powerpc64/multiarch/strncase.c
sysdeps/powerpc/powerpc64/multiarch/strncat.c
sysdeps/powerpc/powerpc64/multiarch/strncmp.c
sysdeps/powerpc/powerpc64/multiarch/strnlen.c
sysdeps/powerpc/powerpc64/multiarch/strrchr.c
sysdeps/powerpc/powerpc64/multiarch/strspn.c

index 305b01537f152b24f8dd3848a60eb52e7044e02f..b5f66531de734708b20497f95d39ec25f75df8ef 100644 (file)
@@ -30,6 +30,7 @@ extern __typeof (bzero) __bzero_power8 attribute_hidden;
 
 libc_ifunc (__bzero,
            (hwcap2 & PPC_FEATURE2_ARCH_2_07
+            && hwcap & PPC_FEATURE_HAS_VSX
             && __GLRO(dl_cache_line_size) == 0x80)
            ? __bzero_power8 :
            (hwcap & PPC_FEATURE_HAS_VSX
index 72f7f83e7e6dbafd21b07eb4319bbdfe1b42377c..3b4d6a00f2f127bd66c7bff181e218713291e1a3 100644 (file)
@@ -51,7 +51,9 @@ __libc_ifunc_impl_list (const char *name, struct libc_ifunc_impl *array,
 #ifdef SHARED
   /* Support sysdeps/powerpc/powerpc64/multiarch/memcpy.c.  */
   IFUNC_IMPL (i, name, memcpy,
-             IFUNC_IMPL_ADD (array, i, memcpy, hwcap2 & PPC_FEATURE2_ARCH_2_07,
+             IFUNC_IMPL_ADD (array, i, memcpy,
+                             hwcap2 & PPC_FEATURE2_ARCH_2_07
+                             && hwcap & PPC_FEATURE_HAS_VSX,
                              __memcpy_power8_cached)
              IFUNC_IMPL_ADD (array, i, memcpy, hwcap & PPC_FEATURE_HAS_VSX,
                              __memcpy_power7)
@@ -73,7 +75,9 @@ __libc_ifunc_impl_list (const char *name, struct libc_ifunc_impl *array,
 
   /* Support sysdeps/powerpc/powerpc64/multiarch/memset.c.  */
   IFUNC_IMPL (i, name, memset,
-             IFUNC_IMPL_ADD (array, i, memset, hwcap2 & PPC_FEATURE2_ARCH_2_07,
+             IFUNC_IMPL_ADD (array, i, memset,
+                             hwcap2 & PPC_FEATURE2_ARCH_2_07
+                             && hwcap & PPC_FEATURE_HAS_VSX,
                              __memset_power8)
              IFUNC_IMPL_ADD (array, i, memset, hwcap & PPC_FEATURE_HAS_VSX,
                              __memset_power7)
@@ -86,10 +90,14 @@ __libc_ifunc_impl_list (const char *name, struct libc_ifunc_impl *array,
   /* Support sysdeps/powerpc/powerpc64/multiarch/strcpy.c.  */
   IFUNC_IMPL (i, name, strcpy,
 #ifdef __LITTLE_ENDIAN__
-             IFUNC_IMPL_ADD (array, i, strcpy, hwcap2 & PPC_FEATURE2_ARCH_3_00,
+             IFUNC_IMPL_ADD (array, i, strcpy,
+                             hwcap2 & PPC_FEATURE2_ARCH_3_00
+                             && hwcap & PPC_FEATURE_HAS_VSX,
                              __strcpy_power9)
 #endif
-             IFUNC_IMPL_ADD (array, i, strcpy, hwcap2 & PPC_FEATURE2_ARCH_2_07,
+             IFUNC_IMPL_ADD (array, i, strcpy,
+                             hwcap2 & PPC_FEATURE2_ARCH_2_07
+                             && hwcap & PPC_FEATURE_HAS_VSX,
                              __strcpy_power8)
              IFUNC_IMPL_ADD (array, i, strcpy, hwcap & PPC_FEATURE_HAS_VSX,
                              __strcpy_power7)
@@ -99,10 +107,14 @@ __libc_ifunc_impl_list (const char *name, struct libc_ifunc_impl *array,
   /* Support sysdeps/powerpc/powerpc64/multiarch/stpcpy.c.  */
   IFUNC_IMPL (i, name, stpcpy,
 #ifdef __LITTLE_ENDIAN__
-             IFUNC_IMPL_ADD (array, i, stpcpy, hwcap2 & PPC_FEATURE2_ARCH_3_00,
+             IFUNC_IMPL_ADD (array, i, stpcpy,
+                             hwcap2 & PPC_FEATURE2_ARCH_3_00
+                             && hwcap & PPC_FEATURE_HAS_VSX,
                              __stpcpy_power9)
 #endif
-             IFUNC_IMPL_ADD (array, i, stpcpy, hwcap2 & PPC_FEATURE2_ARCH_2_07,
+             IFUNC_IMPL_ADD (array, i, stpcpy,
+                             hwcap2 & PPC_FEATURE2_ARCH_2_07
+                             && hwcap & PPC_FEATURE_HAS_VSX,
                              __stpcpy_power8)
              IFUNC_IMPL_ADD (array, i, stpcpy, hwcap & PPC_FEATURE_HAS_VSX,
                              __stpcpy_power7)
@@ -112,10 +124,14 @@ __libc_ifunc_impl_list (const char *name, struct libc_ifunc_impl *array,
   /* Support sysdeps/powerpc/powerpc64/multiarch/strlen.c.  */
   IFUNC_IMPL (i, name, strlen,
 #ifdef __LITTLE_ENDIAN__
-             IFUNC_IMPL_ADD (array, i, strlen, hwcap2 & PPC_FEATURE2_ARCH_3_00,
+             IFUNC_IMPL_ADD (array, i, strlen,
+                             hwcap2 & PPC_FEATURE2_ARCH_3_00
+                             && hwcap & PPC_FEATURE_HAS_VSX,
                              __strlen_power9)
 #endif
-             IFUNC_IMPL_ADD (array, i, strlen, hwcap2 & PPC_FEATURE2_ARCH_2_07,
+             IFUNC_IMPL_ADD (array, i, strlen,
+                             hwcap2 & PPC_FEATURE2_ARCH_2_07
+                             && hwcap & PPC_FEATURE_HAS_VSX,
                              __strlen_power8)
              IFUNC_IMPL_ADD (array, i, strlen, hwcap & PPC_FEATURE_HAS_VSX,
                              __strlen_power7)
@@ -125,10 +141,14 @@ __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,
+             IFUNC_IMPL_ADD (array, i, strncmp,
+                             hwcap2 & PPC_FEATURE2_ARCH_3_00
+                             && hwcap & PPC_FEATURE_HAS_VSX,
                              __strncmp_power9)
 #endif
-             IFUNC_IMPL_ADD (array, i, strncmp, hwcap2 & PPC_FEATURE2_ARCH_2_07,
+             IFUNC_IMPL_ADD (array, i, strncmp,
+                             hwcap2 & PPC_FEATURE2_ARCH_2_07
+                             && hwcap & PPC_FEATURE_HAS_VSX,
                              __strncmp_power8)
              IFUNC_IMPL_ADD (array, i, strncmp, hwcap & PPC_FEATURE_HAS_VSX,
                              __strncmp_power7)
@@ -140,7 +160,8 @@ __libc_ifunc_impl_list (const char *name, struct libc_ifunc_impl *array,
   /* Support sysdeps/powerpc/powerpc64/multiarch/strchr.c.  */
   IFUNC_IMPL (i, name, strchr,
              IFUNC_IMPL_ADD (array, i, strchr,
-                             hwcap2 & PPC_FEATURE2_ARCH_2_07,
+                             hwcap2 & PPC_FEATURE2_ARCH_2_07
+                             && hwcap & PPC_FEATURE_HAS_VSX,
                              __strchr_power8)
              IFUNC_IMPL_ADD (array, i, strchr,
                              hwcap & PPC_FEATURE_HAS_VSX,
@@ -151,7 +172,8 @@ __libc_ifunc_impl_list (const char *name, struct libc_ifunc_impl *array,
   /* Support sysdeps/powerpc/powerpc64/multiarch/strchrnul.c.  */
   IFUNC_IMPL (i, name, strchrnul,
              IFUNC_IMPL_ADD (array, i, strchrnul,
-                             hwcap2 & PPC_FEATURE2_ARCH_2_07,
+                             hwcap2 & PPC_FEATURE2_ARCH_2_07
+                             && hwcap & PPC_FEATURE_HAS_VSX,
                              __strchrnul_power8)
              IFUNC_IMPL_ADD (array, i, strchrnul,
                              hwcap & PPC_FEATURE_HAS_VSX,
@@ -162,7 +184,9 @@ __libc_ifunc_impl_list (const char *name, struct libc_ifunc_impl *array,
 
   /* Support sysdeps/powerpc/powerpc64/multiarch/memcmp.c.  */
   IFUNC_IMPL (i, name, memcmp,
-             IFUNC_IMPL_ADD (array, i, memcmp, hwcap2 & PPC_FEATURE2_ARCH_2_07,
+             IFUNC_IMPL_ADD (array, i, memcmp,
+                             hwcap2 & PPC_FEATURE2_ARCH_2_07
+                             && hwcap & PPC_FEATURE_HAS_VSX,
                              __memcmp_power8)
              IFUNC_IMPL_ADD (array, i, memcmp, hwcap & PPC_FEATURE_HAS_VSX,
                              __memcmp_power7)
@@ -172,7 +196,9 @@ __libc_ifunc_impl_list (const char *name, struct libc_ifunc_impl *array,
 
   /* Support sysdeps/powerpc/powerpc64/multiarch/bzero.c.  */
   IFUNC_IMPL (i, name, bzero,
-             IFUNC_IMPL_ADD (array, i, bzero, hwcap2 & PPC_FEATURE2_ARCH_2_07,
+             IFUNC_IMPL_ADD (array, i, bzero,
+                             hwcap2 & PPC_FEATURE2_ARCH_2_07
+                             && hwcap & PPC_FEATURE_HAS_VSX,
                              __bzero_power8)
              IFUNC_IMPL_ADD (array, i, bzero, hwcap & PPC_FEATURE_HAS_VSX,
                              __bzero_power7)
@@ -199,7 +225,8 @@ __libc_ifunc_impl_list (const char *name, struct libc_ifunc_impl *array,
   /* Support sysdeps/powerpc/powerpc64/multiarch/memchr.c.  */
   IFUNC_IMPL (i, name, memchr,
              IFUNC_IMPL_ADD (array, i, memchr,
-                             hwcap2 & PPC_FEATURE2_ARCH_2_07,
+                             hwcap2 & PPC_FEATURE2_ARCH_2_07
+                             && hwcap & PPC_FEATURE_HAS_VSX,
                              __memchr_power8)
              IFUNC_IMPL_ADD (array, i, memchr,
                              hwcap & PPC_FEATURE_HAS_VSX,
@@ -210,7 +237,8 @@ __libc_ifunc_impl_list (const char *name, struct libc_ifunc_impl *array,
   /* Support sysdeps/powerpc/powerpc64/multiarch/memrchr.c.  */
   IFUNC_IMPL (i, name, memrchr,
              IFUNC_IMPL_ADD (array, i, memrchr,
-                             hwcap2 & PPC_FEATURE2_ARCH_2_07,
+                             hwcap2 & PPC_FEATURE2_ARCH_2_07
+                             && hwcap & PPC_FEATURE_HAS_VSX,
                              __memrchr_power8)
              IFUNC_IMPL_ADD (array, i, memrchr,
                              hwcap & PPC_FEATURE_HAS_VSX,
@@ -222,7 +250,8 @@ __libc_ifunc_impl_list (const char *name, struct libc_ifunc_impl *array,
   IFUNC_IMPL (i, name, rawmemchr,
 #ifdef __LITTLE_ENDIAN__
              IFUNC_IMPL_ADD (array, i, rawmemchr,
-                             hwcap2 & PPC_FEATURE2_ARCH_3_00,
+                             hwcap2 & PPC_FEATURE2_ARCH_3_00
+                             && hwcap & PPC_FEATURE_HAS_VSX,
                              __rawmemchr_power9)
 #endif
              IFUNC_IMPL_ADD (array, i, rawmemchr,
@@ -234,7 +263,8 @@ __libc_ifunc_impl_list (const char *name, struct libc_ifunc_impl *array,
   /* Support sysdeps/powerpc/powerpc64/multiarch/strnlen.c.  */
   IFUNC_IMPL (i, name, strnlen,
              IFUNC_IMPL_ADD (array, i, strnlen,
-                             hwcap2 & PPC_FEATURE2_ARCH_2_07,
+                             hwcap2 & PPC_FEATURE2_ARCH_2_07
+                             && hwcap & PPC_FEATURE_HAS_VSX,
                              __strnlen_power8)
              IFUNC_IMPL_ADD (array, i, strnlen, hwcap & PPC_FEATURE_HAS_VSX,
                              __strnlen_power7)
@@ -244,7 +274,8 @@ __libc_ifunc_impl_list (const char *name, struct libc_ifunc_impl *array,
   /* Support sysdeps/powerpc/powerpc64/multiarch/strcasecmp.c.  */
   IFUNC_IMPL (i, name, strcasecmp,
              IFUNC_IMPL_ADD (array, i, strcasecmp,
-                             hwcap2 & PPC_FEATURE2_ARCH_2_07,
+                             hwcap2 & PPC_FEATURE2_ARCH_2_07
+                             && hwcap & PPC_FEATURE_HAS_VSX,
                              __strcasecmp_power8)
              IFUNC_IMPL_ADD (array, i, strcasecmp,
                              hwcap & PPC_FEATURE_HAS_VSX,
@@ -262,7 +293,8 @@ __libc_ifunc_impl_list (const char *name, struct libc_ifunc_impl *array,
   /* Support sysdeps/powerpc/powerpc64/multiarch/strncase.c.  */
   IFUNC_IMPL (i, name, strncasecmp,
              IFUNC_IMPL_ADD (array, i, strncasecmp,
-                             hwcap2 & PPC_FEATURE2_ARCH_2_07,
+                             hwcap2 & PPC_FEATURE2_ARCH_2_07
+                             && hwcap & PPC_FEATURE_HAS_VSX,
                              __strncasecmp_power8)
              IFUNC_IMPL_ADD (array, i, strncasecmp,
                              hwcap & PPC_FEATURE_HAS_VSX,
@@ -280,7 +312,8 @@ __libc_ifunc_impl_list (const char *name, struct libc_ifunc_impl *array,
   /* Support sysdeps/powerpc/powerpc64/multiarch/strrchr.c.  */
   IFUNC_IMPL (i, name, strrchr,
              IFUNC_IMPL_ADD (array, i, strrchr,
-                             hwcap2 & PPC_FEATURE2_ARCH_2_07,
+                             hwcap2 & PPC_FEATURE2_ARCH_2_07
+                             && hwcap & PPC_FEATURE_HAS_VSX,
                              __strrchr_power8)
              IFUNC_IMPL_ADD (array, i, strrchr,
                              hwcap & PPC_FEATURE_HAS_VSX,
@@ -291,7 +324,8 @@ __libc_ifunc_impl_list (const char *name, struct libc_ifunc_impl *array,
   /* Support sysdeps/powerpc/powerpc64/multiarch/strncat.c.  */
   IFUNC_IMPL (i, name, strncat,
              IFUNC_IMPL_ADD (array, i, strncat,
-                             hwcap2 & PPC_FEATURE2_ARCH_2_07,
+                             hwcap2 & PPC_FEATURE2_ARCH_2_07
+                             && hwcap & PPC_FEATURE_HAS_VSX,
                              __strncat_power8)
              IFUNC_IMPL_ADD (array, i, strncat,
                              hwcap & PPC_FEATURE_HAS_VSX,
@@ -308,7 +342,8 @@ __libc_ifunc_impl_list (const char *name, struct libc_ifunc_impl *array,
                              __strncpy_power9)
 #endif
              IFUNC_IMPL_ADD (array, i, strncpy,
-                             hwcap2 & PPC_FEATURE2_ARCH_2_07,
+                             hwcap2 & PPC_FEATURE2_ARCH_2_07
+                             && hwcap & PPC_FEATURE_HAS_VSX,
                              __strncpy_power8)
              IFUNC_IMPL_ADD (array, i, strncpy,
                              hwcap & PPC_FEATURE_HAS_VSX,
@@ -325,7 +360,8 @@ __libc_ifunc_impl_list (const char *name, struct libc_ifunc_impl *array,
                              __stpncpy_power9)
 #endif
              IFUNC_IMPL_ADD (array, i, stpncpy,
-                             hwcap2 & PPC_FEATURE2_ARCH_2_07,
+                             hwcap2 & PPC_FEATURE2_ARCH_2_07
+                             && hwcap & PPC_FEATURE_HAS_VSX,
                              __stpncpy_power8)
              IFUNC_IMPL_ADD (array, i, stpncpy,
                              hwcap & PPC_FEATURE_HAS_VSX,
@@ -337,11 +373,13 @@ __libc_ifunc_impl_list (const char *name, struct libc_ifunc_impl *array,
   IFUNC_IMPL (i, name, strcmp,
 #ifdef __LITTLE_ENDIAN__
              IFUNC_IMPL_ADD (array, i, strcmp,
-                             hwcap2 & PPC_FEATURE2_ARCH_3_00,
+                             hwcap2 & PPC_FEATURE2_ARCH_3_00
+                             && hwcap & PPC_FEATURE_HAS_VSX,
                              __strcmp_power9)
 #endif
              IFUNC_IMPL_ADD (array, i, strcmp,
-                             hwcap2 & PPC_FEATURE2_ARCH_2_07,
+                             hwcap2 & PPC_FEATURE2_ARCH_2_07
+                             && hwcap & PPC_FEATURE_HAS_VSX,
                              __strcmp_power8)
              IFUNC_IMPL_ADD (array, i, strcmp,
                              hwcap & PPC_FEATURE_HAS_VSX,
@@ -352,7 +390,8 @@ __libc_ifunc_impl_list (const char *name, struct libc_ifunc_impl *array,
   /* Support sysdeps/powerpc/powerpc64/multiarch/strcat.c.  */
   IFUNC_IMPL (i, name, strcat,
              IFUNC_IMPL_ADD (array, i, strcat,
-                             hwcap2 & PPC_FEATURE2_ARCH_2_07,
+                             hwcap2 & PPC_FEATURE2_ARCH_2_07
+                             && hwcap & PPC_FEATURE_HAS_VSX,
                              __strcat_power8)
              IFUNC_IMPL_ADD (array, i, strcat,
                              hwcap & PPC_FEATURE_HAS_VSX,
@@ -363,7 +402,8 @@ __libc_ifunc_impl_list (const char *name, struct libc_ifunc_impl *array,
   /* Support sysdeps/powerpc/powerpc64/multiarch/strspn.c.  */
   IFUNC_IMPL (i, name, strspn,
              IFUNC_IMPL_ADD (array, i, strspn,
-                             hwcap2 & PPC_FEATURE2_ARCH_2_07,
+                            hwcap2 & PPC_FEATURE2_ARCH_2_07
+                            && hwcap & PPC_FEATURE_HAS_VSX,
                              __strspn_power8)
              IFUNC_IMPL_ADD (array, i, strspn, 1,
                              __strspn_ppc))
@@ -371,7 +411,8 @@ __libc_ifunc_impl_list (const char *name, struct libc_ifunc_impl *array,
   /* Support sysdeps/powerpc/powerpc64/multiarch/strcspn.c.  */
   IFUNC_IMPL (i, name, strcspn,
              IFUNC_IMPL_ADD (array, i, strcspn,
-                             hwcap2 & PPC_FEATURE2_ARCH_2_07,
+                            hwcap2 & PPC_FEATURE2_ARCH_2_07
+                            && hwcap & PPC_FEATURE_HAS_VSX,
                              __strcspn_power8)
              IFUNC_IMPL_ADD (array, i, strcspn, 1,
                              __strcspn_ppc))
@@ -388,7 +429,8 @@ __libc_ifunc_impl_list (const char *name, struct libc_ifunc_impl *array,
   /* Support sysdeps/powerpc/powerpc64/multiarch/strcasestr.c.  */
   IFUNC_IMPL (i, name, strcasestr,
              IFUNC_IMPL_ADD (array, i, strcasestr,
-                             hwcap2 & PPC_FEATURE2_ARCH_2_07,
+                             hwcap2 & PPC_FEATURE2_ARCH_2_07
+                             && hwcap & PPC_FEATURE_HAS_VSX,
                              __strcasestr_power8)
              IFUNC_IMPL_ADD (array, i, strcasestr, 1,
                              __strcasestr_ppc))
index 0c718d4f1522f6a2a257c82eaa8a0ad3c39be1bf..44f88febd4624f662b3f53aaf41869ecb784996e 100644 (file)
@@ -28,7 +28,7 @@ extern __typeof (__memchr) __memchr_power8 attribute_hidden;
 /* Avoid DWARF definition DIE on ifunc symbol so that GDB can handle
    ifunc symbol properly.  */
 libc_ifunc (__memchr,
-           (hwcap2 & PPC_FEATURE2_ARCH_2_07)
+           (hwcap2 & PPC_FEATURE2_ARCH_2_07 && hwcap & PPC_FEATURE_HAS_VSX)
            ? __memchr_power8 :
            (hwcap & PPC_FEATURE_HAS_VSX)
             ? __memchr_power7
index 6fd53267b6aabef3ee857a14442ee4a5393925b8..a4080f66a6e3433c159d2829f2a1e7c0a2d11389 100644 (file)
@@ -32,7 +32,8 @@ extern __typeof (memcmp) __memcmp_power8 attribute_hidden;
 /* Avoid DWARF definition DIE on ifunc symbol so that GDB can handle
    ifunc symbol properly.  */
 libc_ifunc_redirected (__redirect_memcmp, memcmp,
-                      (hwcap2 & PPC_FEATURE2_ARCH_2_07)
+                      (hwcap2 & PPC_FEATURE2_ARCH_2_07
+                       && hwcap & PPC_FEATURE_HAS_VSX)
                       ? __memcmp_power8 :
                       (hwcap & PPC_FEATURE_HAS_VSX)
                       ? __memcmp_power7
index 573319293265ee1352cf053119ea41215b469c32..a67be8c00ac64aa4da0bc184fd6bdd22a63220f4 100644 (file)
@@ -38,7 +38,8 @@ extern __typeof (__redirect_memcpy) __memcpy_power7 attribute_hidden;
 extern __typeof (__redirect_memcpy) __memcpy_power8_cached attribute_hidden;
 
 libc_ifunc (__libc_memcpy,
-           ((hwcap2 & PPC_FEATURE2_ARCH_2_07) && use_cached_memopt)
+           ((hwcap2 & PPC_FEATURE2_ARCH_2_07 && hwcap & PPC_FEATURE_HAS_VSX)
+            && use_cached_memopt)
            ? __memcpy_power8_cached :
              (hwcap & PPC_FEATURE_HAS_VSX)
              ? __memcpy_power7 :
index e06d6468b8bd3a0c215d0805e62266a9e4d60a5d..d10b712e0d3112fb19dc0f75d7aec004616e5029 100644 (file)
@@ -28,7 +28,7 @@ extern __typeof (__memrchr) __memrchr_power8 attribute_hidden;
 /* Avoid DWARF definition DIE on ifunc symbol so that GDB can handle
    ifunc symbol properly.  */
 libc_ifunc (__memrchr,
-           (hwcap2 & PPC_FEATURE2_ARCH_2_07)
+           (hwcap2 & PPC_FEATURE2_ARCH_2_07 && hwcap & PPC_FEATURE_HAS_VSX)
            ? __memrchr_power8 :
              (hwcap & PPC_FEATURE_HAS_VSX)
              ? __memrchr_power7
index dbc737b5d57b759cf1c7728d04b92f1efd7eb262..f99ae07189d80e01564345b4cd8da26941eb6e14 100644 (file)
@@ -38,6 +38,7 @@ extern __typeof (__redirect_memset) __memset_power8 attribute_hidden;
    ifunc symbol properly.  */
 libc_ifunc (__libc_memset,
            (hwcap2 & PPC_FEATURE2_ARCH_2_07
+            && hwcap & PPC_FEATURE_HAS_VSX
             && __GLRO(dl_cache_line_size) == 0x80)
            ? __memset_power8 :
            (hwcap & PPC_FEATURE_HAS_VSX
index d906a4ea50a3b38d3906a5f3b9275ddf12b6ada2..5cdfe02896f025ec669e028a64df48957f9c81b3 100644 (file)
@@ -34,7 +34,8 @@ extern __typeof (__rawmemchr) __rawmemchr_power9 attribute_hidden;
    ifunc symbol properly.  */
 libc_ifunc_redirected (__redirect___rawmemchr, __rawmemchr,
 # ifdef __LITTLE_ENDIAN__
-                      (hwcap2 & PPC_FEATURE2_ARCH_3_00)
+                      (hwcap2 & PPC_FEATURE2_ARCH_3_00
+                       && hwcap & PPC_FEATURE_HAS_VSX)
                       ? __rawmemchr_power9 :
 # endif
                         (hwcap & PPC_FEATURE_HAS_VSX)
index d4eb4285fc3f61a6af9492b276bd7d9fd4c57baf..8a5a46961d5786ab40d9eb255fe96a2d4ef583c4 100644 (file)
@@ -32,10 +32,12 @@ extern __typeof (__stpcpy) __stpcpy_power9 attribute_hidden;
 
 libc_ifunc_hidden (__stpcpy, __stpcpy,
 # ifdef __LITTLE_ENDIAN__
-                  (hwcap2 & PPC_FEATURE2_ARCH_3_00)
+                  (hwcap2 & PPC_FEATURE2_ARCH_3_00
+                   && hwcap & PPC_FEATURE_HAS_VSX)
                   ? __stpcpy_power9 :
 # endif
-                    (hwcap2 & PPC_FEATURE2_ARCH_2_07)
+                    (hwcap2 & PPC_FEATURE2_ARCH_2_07
+                     && hwcap & PPC_FEATURE_HAS_VSX)
                     ? __stpcpy_power8
                     : (hwcap & PPC_FEATURE_HAS_VSX)
                       ? __stpcpy_power7
index dcd7774403775378db5d519995389555b1f3b721..b4fc924ca93e7664ee2faebb149b95b3df41c7bb 100644 (file)
@@ -27,7 +27,7 @@ extern __typeof (__strcasecmp) __strcasecmp_power7 attribute_hidden;
 extern __typeof (__strcasecmp) __strcasecmp_power8 attribute_hidden;
 
 libc_ifunc (__libc_strcasecmp,
-            (hwcap2 & PPC_FEATURE2_ARCH_2_07)
+            (hwcap2 & PPC_FEATURE2_ARCH_2_07 && hwcap & PPC_FEATURE_HAS_VSX)
              ? __strcasecmp_power8:
             (hwcap & PPC_FEATURE_HAS_VSX)
              ? __strcasecmp_power7
index 7e4bd3b5ac9835d2a5b258e089e3601c0969a0f2..502200b116f9317011831eee2b9b47a2d15a4e14 100644 (file)
@@ -27,7 +27,7 @@ extern __typeof (__strcasestr) __strcasestr_power8 attribute_hidden;
 /* Avoid DWARF definition DIE on ifunc symbol so that GDB can handle
    ifunc symbol properly.  */
 libc_ifunc (__strcasestr,
-               (hwcap2 & PPC_FEATURE2_ARCH_2_07)
+               (hwcap2 & PPC_FEATURE2_ARCH_2_07 && hwcap & PPC_FEATURE_HAS_VSX)
                ? __strcasestr_power8
                : __strcasestr_ppc);
 
index 6d342324c4de4db7d7fd325388aedc981ad8372d..f45f58618dc0112fc8647a90376dab4bdf86cabe 100644 (file)
@@ -28,7 +28,8 @@ extern __typeof (strcat) __strcat_power8 attribute_hidden;
 # undef strcat
 
 libc_ifunc_redirected (__redirect_strcat, strcat,
-                      (hwcap2 & PPC_FEATURE2_ARCH_2_07)
+                      (hwcap2 & PPC_FEATURE2_ARCH_2_07
+                       && hwcap & PPC_FEATURE_HAS_VSX)
                       ? __strcat_power8
                       : (hwcap & PPC_FEATURE_HAS_VSX)
                         ? __strcat_power7
index ea9ac1134f4ee8bc9e4ca72d07c811be0344f00f..04e92716e4f40a379c4e8c81f863770a3c2ab621 100644 (file)
@@ -33,7 +33,8 @@ extern __typeof (strchr) __strchr_power8 attribute_hidden;
 /* Avoid DWARF definition DIE on ifunc symbol so that GDB can handle
    ifunc symbol properly.  */
 libc_ifunc_redirected (__redirect_strchr, strchr,
-                      (hwcap2 & PPC_FEATURE2_ARCH_2_07)
+                      (hwcap2 & PPC_FEATURE2_ARCH_2_07
+                       && hwcap & PPC_FEATURE_HAS_VSX)
                       ? __strchr_power8 :
                       (hwcap & PPC_FEATURE_HAS_VSX)
                       ? __strchr_power7
index 72f9a639bfbf4da3bd9ad0b6e5860b9fb2ef1faf..dfb6a8836b63b42bebed6957bd0e04893bb0983a 100644 (file)
@@ -35,10 +35,12 @@ extern __typeof (strcmp) __strcmp_power9 attribute_hidden;
 
 libc_ifunc_redirected (__redirect_strcmp, strcmp,
 # ifdef __LITTLE_ENDIAN__
-                       (hwcap2 & PPC_FEATURE2_ARCH_3_00)
-                       ? __strcmp_power9 :
+                      (hwcap2 & PPC_FEATURE2_ARCH_3_00
+                       && hwcap & PPC_FEATURE_HAS_VSX)
+                      ? __strcmp_power9 :
 # endif
-                      (hwcap2 & PPC_FEATURE2_ARCH_2_07)
+                      (hwcap2 & PPC_FEATURE2_ARCH_2_07
+                       && hwcap & PPC_FEATURE_HAS_VSX)
                       ? __strcmp_power8
                       : (hwcap & PPC_FEATURE_HAS_VSX)
                         ? __strcmp_power7
index b733fa5a239c054f05a8fee42808364e5b8192d3..fbb4c113beb7ddb3e61353870e72ce9fe79b34dc 100644 (file)
@@ -32,7 +32,8 @@ extern __typeof (strcpy) __strcpy_power9 attribute_hidden;
 
 libc_ifunc_redirected (__redirect_strcpy, strcpy,
 # ifdef __LITTLE_ENDIAN__
-                       (hwcap2 & PPC_FEATURE2_ARCH_3_00)
+                       (hwcap2 & PPC_FEATURE2_ARCH_3_00
+                        && hwcap & PPC_FEATURE_HAS_VSX)
                        ? __strcpy_power9 :
 # endif
                       (hwcap2 & PPC_FEATURE2_ARCH_2_07)
index 683aa104d7099ec23fa3210958d12869b82b7ea6..316f8ae38e0dad28e8c0a799fd6e1f17458614ec 100644 (file)
@@ -27,7 +27,7 @@ extern __typeof (strcspn) __strcspn_ppc attribute_hidden;
 extern __typeof (strcspn) __strcspn_power8 attribute_hidden;
 
 libc_ifunc (__libc_strcspn,
-           (hwcap2 & PPC_FEATURE2_ARCH_2_07)
+           (hwcap2 & PPC_FEATURE2_ARCH_2_07 && hwcap & PPC_FEATURE_HAS_VSX)
            ? __strcspn_power8
            : __strcspn_ppc);
 
index c3bbc78df8d05ba100454e109bf6f345e60af2c8..5c05bc7237a80deaa902161d18208b2d54856b39 100644 (file)
@@ -34,10 +34,10 @@ extern __typeof (__redirect_strlen) __strlen_power9 attribute_hidden;
 
 libc_ifunc (__libc_strlen,
 # ifdef __LITTLE_ENDIAN__
-         (hwcap2 & PPC_FEATURE2_ARCH_3_00)
+         (hwcap2 & PPC_FEATURE2_ARCH_3_00 && hwcap & PPC_FEATURE_HAS_VSX)
          ? __strlen_power9 :
 # endif
-           (hwcap2 & PPC_FEATURE2_ARCH_2_07)
+           (hwcap2 & PPC_FEATURE2_ARCH_2_07 && hwcap & PPC_FEATURE_HAS_VSX)
            ? __strlen_power8 :
              (hwcap & PPC_FEATURE_HAS_VSX)
              ? __strlen_power7
index 2013a5d75a544df0a459f69505ae82b941450581..030b2124390ac9cba7ae716cc44d930a922713bc 100644 (file)
@@ -27,7 +27,7 @@ extern __typeof (__strncasecmp) __strncasecmp_power7 attribute_hidden;
 extern __typeof (__strncasecmp) __strncasecmp_power8 attribute_hidden;
 
 libc_ifunc (__libc_strncasecmp,
-            (hwcap2 & PPC_FEATURE2_ARCH_2_07)
+            (hwcap2 & PPC_FEATURE2_ARCH_2_07 && hwcap & PPC_FEATURE_HAS_VSX)
              ? __strncasecmp_power8:
             (hwcap & PPC_FEATURE_HAS_VSX)
              ? __strncasecmp_power7
index 0036fca91a1b5c529cb726fb11c1cb7c051fbb71..27a1fa035af64077d32f2f22ed0301f364cdd17b 100644 (file)
@@ -26,7 +26,7 @@ extern __typeof (strncat) __strncat_power7 attribute_hidden;
 extern __typeof (strncat) __strncat_power8 attribute_hidden;
 
 libc_ifunc (strncat,
-           (hwcap2 & PPC_FEATURE2_ARCH_2_07)
+           (hwcap2 & PPC_FEATURE2_ARCH_2_07 && hwcap & PPC_FEATURE_HAS_VSX)
            ? __strncat_power8
            : (hwcap & PPC_FEATURE_HAS_VSX)
             ? __strncat_power7
index eef524ddfbd0bb612f12004b67ff6d3d190202ea..64531a9fab16732602f85f8bb060b16f84608909 100644 (file)
@@ -38,10 +38,12 @@ extern __typeof (strncmp) __strncmp_power9 attribute_hidden;
    ifunc symbol properly.  */
 libc_ifunc_redirected (__redirect_strncmp, strncmp,
 # ifdef __LITTLE_ENDIAN__
-                       (hwcap2 & PPC_FEATURE2_ARCH_3_00)
+                       (hwcap2 & PPC_FEATURE2_ARCH_3_00
+                        && hwcap & PPC_FEATURE_HAS_VSX)
                        ? __strncmp_power9 :
 # endif
-                      (hwcap2 & PPC_FEATURE2_ARCH_2_07)
+                      (hwcap2 & PPC_FEATURE2_ARCH_2_07
+                       && hwcap & PPC_FEATURE_HAS_VSX)
                       ? __strncmp_power8
                       : (hwcap & PPC_FEATURE_HAS_VSX)
                         ? __strncmp_power7
index 264b7a752d32b571a17d4ee855ec48df9a91fc0c..0536bbe50f564582f840fed66cb68bc264c50795 100644 (file)
@@ -29,7 +29,8 @@ extern __typeof (__strnlen) __strnlen_power8 attribute_hidden;
 # undef strnlen
 # undef __strnlen
 libc_ifunc_redirected (__redirect___strnlen, __strnlen,
-                      (hwcap2 & PPC_FEATURE2_ARCH_2_07)
+                      (hwcap2 & PPC_FEATURE2_ARCH_2_07
+                       && hwcap & PPC_FEATURE_HAS_VSX)
                       ? __strnlen_power8 :
                         (hwcap & PPC_FEATURE_HAS_VSX)
                         ? __strnlen_power7
index bb06b93d19a1c17ec1d672ba240ac5b3259578b8..9c433a73102ab6a4d4c4871ecd91222ac2ff6416 100644 (file)
@@ -31,7 +31,8 @@ extern __typeof (strrchr) __strrchr_power8 attribute_hidden;
 /* Avoid DWARF definition DIE on ifunc symbol so that GDB can handle
    ifunc symbol properly.  */
 libc_ifunc_redirected (__redirect_strrchr, strrchr,
-                      (hwcap2 & PPC_FEATURE2_ARCH_2_07)
+                      (hwcap2 & PPC_FEATURE2_ARCH_2_07
+                       && hwcap & PPC_FEATURE_HAS_VSX)
                       ? __strrchr_power8 :
                       (hwcap & PPC_FEATURE_HAS_VSX)
                       ? __strrchr_power7
index 70167a176bc2f330ff4e63632b4135f7428d4287..dd140ad83b4569befc28c5b78942a870bf0394be 100644 (file)
@@ -27,7 +27,7 @@ extern __typeof (strspn) __strspn_ppc attribute_hidden;
 extern __typeof (strspn) __strspn_power8 attribute_hidden;
 
 libc_ifunc (__libc_strspn,
-           (hwcap2 & PPC_FEATURE2_ARCH_2_07)
+           (hwcap2 & PPC_FEATURE2_ARCH_2_07 && hwcap & PPC_FEATURE_HAS_VSX)
            ? __strspn_power8
            : __strspn_ppc);