* [PATCH 1/3] powerpc64: Replace some PPC_FEATURE_HAS_VSX with PPC_FEATURE_ARCH_2_06 @ 2021-07-27 5:47 Anton Blanchard 2021-07-27 5:47 ` [PATCH 2/3] powerpc64: Check cacheline size before using optimised memset routines Anton Blanchard ` (2 more replies) 0 siblings, 3 replies; 7+ messages in thread From: Anton Blanchard @ 2021-07-27 5:47 UTC (permalink / raw) To: tuliom, adhemerval.zanella; +Cc: libc-alpha We use PPC_FEATURE_HAS_VSX to select a number of POWER7 optimised functions. These functions don't use any VSX instructions, so PPC_FEATURE_ARCH_2_06 seems like a better fit. --- .../powerpc64/multiarch/ifunc-impl-list.c | 38 +++++++++---------- sysdeps/powerpc/powerpc64/multiarch/memchr.c | 2 +- sysdeps/powerpc/powerpc64/multiarch/memcmp.c | 2 +- sysdeps/powerpc/powerpc64/multiarch/memrchr.c | 2 +- sysdeps/powerpc/powerpc64/multiarch/memset.c | 2 +- .../powerpc/powerpc64/multiarch/rawmemchr.c | 2 +- sysdeps/powerpc/powerpc64/multiarch/stpncpy.c | 2 +- .../powerpc/powerpc64/multiarch/strcasecmp.c | 2 +- .../powerpc64/multiarch/strcasecmp_l.c | 2 +- sysdeps/powerpc/powerpc64/multiarch/strchr.c | 2 +- .../powerpc/powerpc64/multiarch/strchrnul.c | 2 +- sysdeps/powerpc/powerpc64/multiarch/strcmp.c | 2 +- sysdeps/powerpc/powerpc64/multiarch/strlen.c | 2 +- .../powerpc/powerpc64/multiarch/strncase.c | 2 +- .../powerpc/powerpc64/multiarch/strncase_l.c | 2 +- sysdeps/powerpc/powerpc64/multiarch/strncmp.c | 2 +- sysdeps/powerpc/powerpc64/multiarch/strncpy.c | 2 +- sysdeps/powerpc/powerpc64/multiarch/strnlen.c | 2 +- sysdeps/powerpc/powerpc64/multiarch/strrchr.c | 2 +- sysdeps/powerpc/powerpc64/multiarch/strstr.c | 2 +- 20 files changed, 38 insertions(+), 38 deletions(-) diff --git a/sysdeps/powerpc/powerpc64/multiarch/ifunc-impl-list.c b/sysdeps/powerpc/powerpc64/multiarch/ifunc-impl-list.c index 0acdf22ba3..32564c8f1f 100644 --- a/sysdeps/powerpc/powerpc64/multiarch/ifunc-impl-list.c +++ b/sysdeps/powerpc/powerpc64/multiarch/ifunc-impl-list.c @@ -95,7 +95,7 @@ __libc_ifunc_impl_list (const char *name, struct libc_ifunc_impl *array, #endif IFUNC_IMPL_ADD (array, i, memset, hwcap2 & PPC_FEATURE2_ARCH_2_07, __memset_power8) - IFUNC_IMPL_ADD (array, i, memset, hwcap & PPC_FEATURE_HAS_VSX, + IFUNC_IMPL_ADD (array, i, memset, hwcap & PPC_FEATURE_ARCH_2_06, __memset_power7) IFUNC_IMPL_ADD (array, i, memset, hwcap & PPC_FEATURE_ARCH_2_05, __memset_power6) @@ -139,7 +139,7 @@ __libc_ifunc_impl_list (const char *name, struct libc_ifunc_impl *array, #endif IFUNC_IMPL_ADD (array, i, strlen, hwcap2 & PPC_FEATURE2_ARCH_2_07, __strlen_power8) - IFUNC_IMPL_ADD (array, i, strlen, hwcap & PPC_FEATURE_HAS_VSX, + IFUNC_IMPL_ADD (array, i, strlen, hwcap & PPC_FEATURE_ARCH_2_06, __strlen_power7) IFUNC_IMPL_ADD (array, i, strlen, 1, __strlen_ppc)) @@ -152,7 +152,7 @@ __libc_ifunc_impl_list (const char *name, struct libc_ifunc_impl *array, #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, + IFUNC_IMPL_ADD (array, i, strncmp, hwcap & PPC_FEATURE_ARCH_2_06, __strncmp_power7) IFUNC_IMPL_ADD (array, i, strncmp, hwcap & PPC_FEATURE_POWER4, __strncmp_power4) @@ -165,7 +165,7 @@ __libc_ifunc_impl_list (const char *name, struct libc_ifunc_impl *array, hwcap2 & PPC_FEATURE2_ARCH_2_07, __strchr_power8) IFUNC_IMPL_ADD (array, i, strchr, - hwcap & PPC_FEATURE_HAS_VSX, + hwcap & PPC_FEATURE_ARCH_2_06, __strchr_power7) IFUNC_IMPL_ADD (array, i, strchr, 1, __strchr_ppc)) @@ -176,7 +176,7 @@ __libc_ifunc_impl_list (const char *name, struct libc_ifunc_impl *array, hwcap2 & PPC_FEATURE2_ARCH_2_07, __strchrnul_power8) IFUNC_IMPL_ADD (array, i, strchrnul, - hwcap & PPC_FEATURE_HAS_VSX, + hwcap & PPC_FEATURE_ARCH_2_06, __strchrnul_power7) IFUNC_IMPL_ADD (array, i, strchrnul, 1, __strchrnul_ppc)) @@ -192,7 +192,7 @@ __libc_ifunc_impl_list (const char *name, struct libc_ifunc_impl *array, #endif IFUNC_IMPL_ADD (array, i, memcmp, hwcap2 & PPC_FEATURE2_ARCH_2_07, __memcmp_power8) - IFUNC_IMPL_ADD (array, i, memcmp, hwcap & PPC_FEATURE_HAS_VSX, + IFUNC_IMPL_ADD (array, i, memcmp, hwcap & PPC_FEATURE_ARCH_2_06, __memcmp_power7) IFUNC_IMPL_ADD (array, i, memcmp, hwcap & PPC_FEATURE_POWER4, __memcmp_power4) @@ -244,7 +244,7 @@ __libc_ifunc_impl_list (const char *name, struct libc_ifunc_impl *array, hwcap2 & PPC_FEATURE2_ARCH_2_07, __memchr_power8) IFUNC_IMPL_ADD (array, i, memchr, - hwcap & PPC_FEATURE_HAS_VSX, + hwcap & PPC_FEATURE_ARCH_2_06, __memchr_power7) IFUNC_IMPL_ADD (array, i, memchr, 1, __memchr_ppc)) @@ -255,7 +255,7 @@ __libc_ifunc_impl_list (const char *name, struct libc_ifunc_impl *array, hwcap2 & PPC_FEATURE2_ARCH_2_07, __memrchr_power8) IFUNC_IMPL_ADD (array, i, memrchr, - hwcap & PPC_FEATURE_HAS_VSX, + hwcap & PPC_FEATURE_ARCH_2_06, __memrchr_power7) IFUNC_IMPL_ADD (array, i, memrchr, 1, __memrchr_ppc)) @@ -272,7 +272,7 @@ __libc_ifunc_impl_list (const char *name, struct libc_ifunc_impl *array, __rawmemchr_power9) #endif IFUNC_IMPL_ADD (array, i, rawmemchr, - hwcap & PPC_FEATURE_HAS_VSX, + hwcap & PPC_FEATURE_ARCH_2_06, __rawmemchr_power7) IFUNC_IMPL_ADD (array, i, rawmemchr, 1, __rawmemchr_ppc)) @@ -282,7 +282,7 @@ __libc_ifunc_impl_list (const char *name, struct libc_ifunc_impl *array, IFUNC_IMPL_ADD (array, i, strnlen, hwcap2 & PPC_FEATURE2_ARCH_2_07, __strnlen_power8) - IFUNC_IMPL_ADD (array, i, strnlen, hwcap & PPC_FEATURE_HAS_VSX, + IFUNC_IMPL_ADD (array, i, strnlen, hwcap & PPC_FEATURE_ARCH_2_06, __strnlen_power7) IFUNC_IMPL_ADD (array, i, strnlen, 1, __strnlen_ppc)) @@ -293,14 +293,14 @@ __libc_ifunc_impl_list (const char *name, struct libc_ifunc_impl *array, hwcap2 & PPC_FEATURE2_ARCH_2_07, __strcasecmp_power8) IFUNC_IMPL_ADD (array, i, strcasecmp, - hwcap & PPC_FEATURE_HAS_VSX, + hwcap & PPC_FEATURE_ARCH_2_06, __strcasecmp_power7) IFUNC_IMPL_ADD (array, i, strcasecmp, 1, __strcasecmp_ppc)) /* Support sysdeps/powerpc/powerpc64/multiarch/strcasecmp_l.c. */ IFUNC_IMPL (i, name, strcasecmp_l, IFUNC_IMPL_ADD (array, i, strcasecmp_l, - hwcap & PPC_FEATURE_HAS_VSX, + hwcap & PPC_FEATURE_ARCH_2_06, __strcasecmp_l_power7) IFUNC_IMPL_ADD (array, i, strcasecmp_l, 1, __strcasecmp_l_ppc)) @@ -311,14 +311,14 @@ __libc_ifunc_impl_list (const char *name, struct libc_ifunc_impl *array, hwcap2 & PPC_FEATURE2_ARCH_2_07, __strncasecmp_power8) IFUNC_IMPL_ADD (array, i, strncasecmp, - hwcap & PPC_FEATURE_HAS_VSX, + hwcap & PPC_FEATURE_ARCH_2_06, __strncasecmp_power7) IFUNC_IMPL_ADD (array, i, strncasecmp, 1, __strncasecmp_ppc)) /* Support sysdeps/powerpc/powerpc64/multiarch/strncase_l.c. */ IFUNC_IMPL (i, name, strncasecmp_l, IFUNC_IMPL_ADD (array, i, strncasecmp_l, - hwcap & PPC_FEATURE_HAS_VSX, + hwcap & PPC_FEATURE_ARCH_2_06, __strncasecmp_l_power7) IFUNC_IMPL_ADD (array, i, strncasecmp_l, 1, __strncasecmp_l_ppc)) @@ -329,7 +329,7 @@ __libc_ifunc_impl_list (const char *name, struct libc_ifunc_impl *array, hwcap2 & PPC_FEATURE2_ARCH_2_07, __strrchr_power8) IFUNC_IMPL_ADD (array, i, strrchr, - hwcap & PPC_FEATURE_HAS_VSX, + hwcap & PPC_FEATURE_ARCH_2_06, __strrchr_power7) IFUNC_IMPL_ADD (array, i, strrchr, 1, __strrchr_ppc)) @@ -357,7 +357,7 @@ __libc_ifunc_impl_list (const char *name, struct libc_ifunc_impl *array, hwcap2 & PPC_FEATURE2_ARCH_2_07, __strncpy_power8) IFUNC_IMPL_ADD (array, i, strncpy, - hwcap & PPC_FEATURE_HAS_VSX, + hwcap & PPC_FEATURE_ARCH_2_06, __strncpy_power7) IFUNC_IMPL_ADD (array, i, strncpy, 1, __strncpy_ppc)) @@ -374,7 +374,7 @@ __libc_ifunc_impl_list (const char *name, struct libc_ifunc_impl *array, hwcap2 & PPC_FEATURE2_ARCH_2_07, __stpncpy_power8) IFUNC_IMPL_ADD (array, i, stpncpy, - hwcap & PPC_FEATURE_HAS_VSX, + hwcap & PPC_FEATURE_ARCH_2_06, __stpncpy_power7) IFUNC_IMPL_ADD (array, i, stpncpy, 1, __stpncpy_ppc)) @@ -390,7 +390,7 @@ __libc_ifunc_impl_list (const char *name, struct libc_ifunc_impl *array, hwcap2 & PPC_FEATURE2_ARCH_2_07, __strcmp_power8) IFUNC_IMPL_ADD (array, i, strcmp, - hwcap & PPC_FEATURE_HAS_VSX, + hwcap & PPC_FEATURE_ARCH_2_06, __strcmp_power7) IFUNC_IMPL_ADD (array, i, strcmp, 1, __strcmp_ppc)) @@ -425,7 +425,7 @@ __libc_ifunc_impl_list (const char *name, struct libc_ifunc_impl *array, /* Support sysdeps/powerpc/powerpc64/multiarch/strstr.c. */ IFUNC_IMPL (i, name, strstr, IFUNC_IMPL_ADD (array, i, strstr, - hwcap & PPC_FEATURE_HAS_VSX, + hwcap & PPC_FEATURE_ARCH_2_06, __strstr_power7) IFUNC_IMPL_ADD (array, i, strstr, 1, __strstr_ppc)) diff --git a/sysdeps/powerpc/powerpc64/multiarch/memchr.c b/sysdeps/powerpc/powerpc64/multiarch/memchr.c index 0c718d4f15..c24186689e 100644 --- a/sysdeps/powerpc/powerpc64/multiarch/memchr.c +++ b/sysdeps/powerpc/powerpc64/multiarch/memchr.c @@ -30,7 +30,7 @@ extern __typeof (__memchr) __memchr_power8 attribute_hidden; libc_ifunc (__memchr, (hwcap2 & PPC_FEATURE2_ARCH_2_07) ? __memchr_power8 : - (hwcap & PPC_FEATURE_HAS_VSX) + (hwcap & PPC_FEATURE_ARCH_2_06) ? __memchr_power7 : __memchr_ppc); diff --git a/sysdeps/powerpc/powerpc64/multiarch/memcmp.c b/sysdeps/powerpc/powerpc64/multiarch/memcmp.c index 4fd089aba7..99559bce26 100644 --- a/sysdeps/powerpc/powerpc64/multiarch/memcmp.c +++ b/sysdeps/powerpc/powerpc64/multiarch/memcmp.c @@ -40,7 +40,7 @@ libc_ifunc_redirected (__redirect_memcmp, memcmp, #endif (hwcap2 & PPC_FEATURE2_ARCH_2_07) ? __memcmp_power8 : - (hwcap & PPC_FEATURE_HAS_VSX) + (hwcap & PPC_FEATURE_ARCH_2_06) ? __memcmp_power7 : (hwcap & PPC_FEATURE_POWER4) ? __memcmp_power4 diff --git a/sysdeps/powerpc/powerpc64/multiarch/memrchr.c b/sysdeps/powerpc/powerpc64/multiarch/memrchr.c index e06d6468b8..16bb6f0042 100644 --- a/sysdeps/powerpc/powerpc64/multiarch/memrchr.c +++ b/sysdeps/powerpc/powerpc64/multiarch/memrchr.c @@ -30,7 +30,7 @@ extern __typeof (__memrchr) __memrchr_power8 attribute_hidden; libc_ifunc (__memrchr, (hwcap2 & PPC_FEATURE2_ARCH_2_07) ? __memrchr_power8 : - (hwcap & PPC_FEATURE_HAS_VSX) + (hwcap & PPC_FEATURE_ARCH_2_06) ? __memrchr_power7 : __memrchr_ppc); diff --git a/sysdeps/powerpc/powerpc64/multiarch/memset.c b/sysdeps/powerpc/powerpc64/multiarch/memset.c index 5994bf02e6..c1aa143f60 100644 --- a/sysdeps/powerpc/powerpc64/multiarch/memset.c +++ b/sysdeps/powerpc/powerpc64/multiarch/memset.c @@ -48,7 +48,7 @@ libc_ifunc (__libc_memset, # endif (hwcap2 & PPC_FEATURE2_ARCH_2_07) ? __memset_power8 : - (hwcap & PPC_FEATURE_HAS_VSX) + (hwcap & PPC_FEATURE_ARCH_2_06) ? __memset_power7 : (hwcap & PPC_FEATURE_ARCH_2_05) ? __memset_power6 : diff --git a/sysdeps/powerpc/powerpc64/multiarch/rawmemchr.c b/sysdeps/powerpc/powerpc64/multiarch/rawmemchr.c index c0ffea2b93..b5d2d3a635 100644 --- a/sysdeps/powerpc/powerpc64/multiarch/rawmemchr.c +++ b/sysdeps/powerpc/powerpc64/multiarch/rawmemchr.c @@ -41,7 +41,7 @@ libc_ifunc_redirected (__redirect___rawmemchr, __rawmemchr, (hwcap2 & PPC_FEATURE2_ARCH_3_00) ? __rawmemchr_power9 : # endif - (hwcap & PPC_FEATURE_HAS_VSX) + (hwcap & PPC_FEATURE_ARCH_2_06) ? __rawmemchr_power7 : __rawmemchr_ppc); diff --git a/sysdeps/powerpc/powerpc64/multiarch/stpncpy.c b/sysdeps/powerpc/powerpc64/multiarch/stpncpy.c index bebd377fd9..e7035761a7 100644 --- a/sysdeps/powerpc/powerpc64/multiarch/stpncpy.c +++ b/sysdeps/powerpc/powerpc64/multiarch/stpncpy.c @@ -40,7 +40,7 @@ libc_ifunc_redirected (__redirect___stpncpy, __stpncpy, # endif (hwcap2 & PPC_FEATURE2_ARCH_2_07) ? __stpncpy_power8 - : (hwcap & PPC_FEATURE_HAS_VSX) + : (hwcap & PPC_FEATURE_ARCH_2_06) ? __stpncpy_power7 : __stpncpy_ppc); weak_alias (__stpncpy, stpncpy) diff --git a/sysdeps/powerpc/powerpc64/multiarch/strcasecmp.c b/sysdeps/powerpc/powerpc64/multiarch/strcasecmp.c index dcd7774403..55ca6c85c4 100644 --- a/sysdeps/powerpc/powerpc64/multiarch/strcasecmp.c +++ b/sysdeps/powerpc/powerpc64/multiarch/strcasecmp.c @@ -29,7 +29,7 @@ extern __typeof (__strcasecmp) __strcasecmp_power8 attribute_hidden; libc_ifunc (__libc_strcasecmp, (hwcap2 & PPC_FEATURE2_ARCH_2_07) ? __strcasecmp_power8: - (hwcap & PPC_FEATURE_HAS_VSX) + (hwcap & PPC_FEATURE_ARCH_2_06) ? __strcasecmp_power7 : __strcasecmp_ppc); diff --git a/sysdeps/powerpc/powerpc64/multiarch/strcasecmp_l.c b/sysdeps/powerpc/powerpc64/multiarch/strcasecmp_l.c index 96a70b8b11..1afee5d7fd 100644 --- a/sysdeps/powerpc/powerpc64/multiarch/strcasecmp_l.c +++ b/sysdeps/powerpc/powerpc64/multiarch/strcasecmp_l.c @@ -32,7 +32,7 @@ extern __typeof (__strcasecmp_l) __strcasecmp_l_power7 attribute_hidden; extern __typeof (__strcasecmp_l) __libc_strcasecmp_l; libc_ifunc (__libc_strcasecmp_l, - (hwcap & PPC_FEATURE_HAS_VSX) + (hwcap & PPC_FEATURE_ARCH_2_06) ? __strcasecmp_l_power7 : __strcasecmp_l_ppc); diff --git a/sysdeps/powerpc/powerpc64/multiarch/strchr.c b/sysdeps/powerpc/powerpc64/multiarch/strchr.c index ea9ac1134f..27c794c6b7 100644 --- a/sysdeps/powerpc/powerpc64/multiarch/strchr.c +++ b/sysdeps/powerpc/powerpc64/multiarch/strchr.c @@ -35,7 +35,7 @@ extern __typeof (strchr) __strchr_power8 attribute_hidden; libc_ifunc_redirected (__redirect_strchr, strchr, (hwcap2 & PPC_FEATURE2_ARCH_2_07) ? __strchr_power8 : - (hwcap & PPC_FEATURE_HAS_VSX) + (hwcap & PPC_FEATURE_ARCH_2_06) ? __strchr_power7 : __strchr_ppc); weak_alias (strchr, index) diff --git a/sysdeps/powerpc/powerpc64/multiarch/strchrnul.c b/sysdeps/powerpc/powerpc64/multiarch/strchrnul.c index 4688e7c3f0..4a07b4a242 100644 --- a/sysdeps/powerpc/powerpc64/multiarch/strchrnul.c +++ b/sysdeps/powerpc/powerpc64/multiarch/strchrnul.c @@ -30,7 +30,7 @@ extern __typeof (__strchrnul) __strchrnul_power8 attribute_hidden; libc_ifunc (__strchrnul, (hwcap2 & PPC_FEATURE2_ARCH_2_07) ? __strchrnul_power8 : - (hwcap & PPC_FEATURE_HAS_VSX) + (hwcap & PPC_FEATURE_ARCH_2_06) ? __strchrnul_power7 : __strchrnul_ppc); diff --git a/sysdeps/powerpc/powerpc64/multiarch/strcmp.c b/sysdeps/powerpc/powerpc64/multiarch/strcmp.c index 72f9a639bf..4b0b25fff6 100644 --- a/sysdeps/powerpc/powerpc64/multiarch/strcmp.c +++ b/sysdeps/powerpc/powerpc64/multiarch/strcmp.c @@ -40,7 +40,7 @@ libc_ifunc_redirected (__redirect_strcmp, strcmp, # endif (hwcap2 & PPC_FEATURE2_ARCH_2_07) ? __strcmp_power8 - : (hwcap & PPC_FEATURE_HAS_VSX) + : (hwcap & PPC_FEATURE_ARCH_2_06) ? __strcmp_power7 : __strcmp_ppc); #endif diff --git a/sysdeps/powerpc/powerpc64/multiarch/strlen.c b/sysdeps/powerpc/powerpc64/multiarch/strlen.c index 109c8a90bd..0cd1c6faff 100644 --- a/sysdeps/powerpc/powerpc64/multiarch/strlen.c +++ b/sysdeps/powerpc/powerpc64/multiarch/strlen.c @@ -42,7 +42,7 @@ libc_ifunc (__libc_strlen, # endif (hwcap2 & PPC_FEATURE2_ARCH_2_07) ? __strlen_power8 : - (hwcap & PPC_FEATURE_HAS_VSX) + (hwcap & PPC_FEATURE_ARCH_2_06) ? __strlen_power7 : __strlen_ppc); diff --git a/sysdeps/powerpc/powerpc64/multiarch/strncase.c b/sysdeps/powerpc/powerpc64/multiarch/strncase.c index 2013a5d75a..644046bd74 100644 --- a/sysdeps/powerpc/powerpc64/multiarch/strncase.c +++ b/sysdeps/powerpc/powerpc64/multiarch/strncase.c @@ -29,7 +29,7 @@ extern __typeof (__strncasecmp) __strncasecmp_power8 attribute_hidden; libc_ifunc (__libc_strncasecmp, (hwcap2 & PPC_FEATURE2_ARCH_2_07) ? __strncasecmp_power8: - (hwcap & PPC_FEATURE_HAS_VSX) + (hwcap & PPC_FEATURE_ARCH_2_06) ? __strncasecmp_power7 : __strncasecmp_ppc); diff --git a/sysdeps/powerpc/powerpc64/multiarch/strncase_l.c b/sysdeps/powerpc/powerpc64/multiarch/strncase_l.c index cad6da302d..d2d761af72 100644 --- a/sysdeps/powerpc/powerpc64/multiarch/strncase_l.c +++ b/sysdeps/powerpc/powerpc64/multiarch/strncase_l.c @@ -34,7 +34,7 @@ extern __typeof (__strncasecmp_l) __strncasecmp_l_power7 attribute_hidden; ifunc symbol properly. */ extern __typeof (__strncasecmp_l) __libc_strncasecmp_l; libc_ifunc (__libc_strncasecmp_l, - (hwcap & PPC_FEATURE_HAS_VSX) + (hwcap & PPC_FEATURE_ARCH_2_06) ? __strncasecmp_l_power7 : __strncasecmp_l_ppc); diff --git a/sysdeps/powerpc/powerpc64/multiarch/strncmp.c b/sysdeps/powerpc/powerpc64/multiarch/strncmp.c index eef524ddfb..1f689e5c05 100644 --- a/sysdeps/powerpc/powerpc64/multiarch/strncmp.c +++ b/sysdeps/powerpc/powerpc64/multiarch/strncmp.c @@ -43,7 +43,7 @@ libc_ifunc_redirected (__redirect_strncmp, strncmp, # endif (hwcap2 & PPC_FEATURE2_ARCH_2_07) ? __strncmp_power8 - : (hwcap & PPC_FEATURE_HAS_VSX) + : (hwcap & PPC_FEATURE_ARCH_2_06) ? __strncmp_power7 : (hwcap & PPC_FEATURE_POWER4) ? __strncmp_power4 diff --git a/sysdeps/powerpc/powerpc64/multiarch/strncpy.c b/sysdeps/powerpc/powerpc64/multiarch/strncpy.c index 7da9def358..d4d3463bd1 100644 --- a/sysdeps/powerpc/powerpc64/multiarch/strncpy.c +++ b/sysdeps/powerpc/powerpc64/multiarch/strncpy.c @@ -43,7 +43,7 @@ libc_ifunc_redirected (__redirect_strncpy, strncpy, # endif (hwcap2 & PPC_FEATURE2_ARCH_2_07) ? __strncpy_power8 - : (hwcap & PPC_FEATURE_HAS_VSX) + : (hwcap & PPC_FEATURE_ARCH_2_06) ? __strncpy_power7 : __strncpy_ppc); diff --git a/sysdeps/powerpc/powerpc64/multiarch/strnlen.c b/sysdeps/powerpc/powerpc64/multiarch/strnlen.c index 264b7a752d..baf375a75a 100644 --- a/sysdeps/powerpc/powerpc64/multiarch/strnlen.c +++ b/sysdeps/powerpc/powerpc64/multiarch/strnlen.c @@ -31,7 +31,7 @@ extern __typeof (__strnlen) __strnlen_power8 attribute_hidden; libc_ifunc_redirected (__redirect___strnlen, __strnlen, (hwcap2 & PPC_FEATURE2_ARCH_2_07) ? __strnlen_power8 : - (hwcap & PPC_FEATURE_HAS_VSX) + (hwcap & PPC_FEATURE_ARCH_2_06) ? __strnlen_power7 : __strnlen_ppc); weak_alias (__strnlen, strnlen) diff --git a/sysdeps/powerpc/powerpc64/multiarch/strrchr.c b/sysdeps/powerpc/powerpc64/multiarch/strrchr.c index bb06b93d19..1c9eea1817 100644 --- a/sysdeps/powerpc/powerpc64/multiarch/strrchr.c +++ b/sysdeps/powerpc/powerpc64/multiarch/strrchr.c @@ -33,7 +33,7 @@ extern __typeof (strrchr) __strrchr_power8 attribute_hidden; libc_ifunc_redirected (__redirect_strrchr, strrchr, (hwcap2 & PPC_FEATURE2_ARCH_2_07) ? __strrchr_power8 : - (hwcap & PPC_FEATURE_HAS_VSX) + (hwcap & PPC_FEATURE_ARCH_2_06) ? __strrchr_power7 : __strrchr_ppc); weak_alias (strrchr, rindex) diff --git a/sysdeps/powerpc/powerpc64/multiarch/strstr.c b/sysdeps/powerpc/powerpc64/multiarch/strstr.c index bb0588844e..6582798dda 100644 --- a/sysdeps/powerpc/powerpc64/multiarch/strstr.c +++ b/sysdeps/powerpc/powerpc64/multiarch/strstr.c @@ -30,7 +30,7 @@ extern __typeof (strstr) __strstr_power7 attribute_hidden; /* Avoid DWARF definition DIE on ifunc symbol so that GDB can handle ifunc symbol properly. */ libc_ifunc_redirected (__redirect_strstr, strstr, - (hwcap & PPC_FEATURE_HAS_VSX) + (hwcap & PPC_FEATURE_ARCH_2_06) ? __strstr_power7 : __strstr_ppc); #endif -- 2.31.1 ^ permalink raw reply [flat|nested] 7+ messages in thread
* [PATCH 2/3] powerpc64: Check cacheline size before using optimised memset routines 2021-07-27 5:47 [PATCH 1/3] powerpc64: Replace some PPC_FEATURE_HAS_VSX with PPC_FEATURE_ARCH_2_06 Anton Blanchard @ 2021-07-27 5:47 ` Anton Blanchard 2021-08-06 19:50 ` Tulio Magno Quites Machado Filho 2021-07-27 5:47 ` [PATCH 3/3] powerpc64: Add checks for Altivec and VSX in ifunc selection Anton Blanchard 2021-08-06 19:48 ` [PATCH 1/3] powerpc64: Replace some PPC_FEATURE_HAS_VSX with PPC_FEATURE_ARCH_2_06 Tulio Magno Quites Machado Filho 2 siblings, 1 reply; 7+ messages in thread From: Anton Blanchard @ 2021-07-27 5:47 UTC (permalink / raw) To: tuliom, adhemerval.zanella; +Cc: libc-alpha A number of optimised memset routines assume the cacheline size is 128B, so we better check before using them. --- .../powerpc64/multiarch/ifunc-impl-list.c | 18 +++++++++++++----- sysdeps/powerpc/powerpc64/multiarch/memset.c | 15 ++++++++++----- 2 files changed, 23 insertions(+), 10 deletions(-) diff --git a/sysdeps/powerpc/powerpc64/multiarch/ifunc-impl-list.c b/sysdeps/powerpc/powerpc64/multiarch/ifunc-impl-list.c index 32564c8f1f..a3fdcd43bd 100644 --- a/sysdeps/powerpc/powerpc64/multiarch/ifunc-impl-list.c +++ b/sysdeps/powerpc/powerpc64/multiarch/ifunc-impl-list.c @@ -35,6 +35,9 @@ __libc_ifunc_impl_list (const char *name, struct libc_ifunc_impl *array, unsigned long int hwcap = GLRO(dl_hwcap); unsigned long int hwcap2 = GLRO(dl_hwcap2); +#ifdef SHARED + int cacheline_size = GLRO(dl_cache_line_size); +#endif /* hwcap contains only the latest supported ISA, the code checks which is and fills the previous supported ones. */ @@ -90,16 +93,21 @@ __libc_ifunc_impl_list (const char *name, struct libc_ifunc_impl *array, IFUNC_IMPL_ADD (array, i, memset, hwcap2 & PPC_FEATURE2_ARCH_3_1 && hwcap2 & PPC_FEATURE2_HAS_ISEL - && hwcap & PPC_FEATURE_HAS_VSX, + && hwcap & PPC_FEATURE_HAS_VSX + && cacheline_size == 128, __memset_power10) #endif - IFUNC_IMPL_ADD (array, i, memset, hwcap2 & PPC_FEATURE2_ARCH_2_07, + IFUNC_IMPL_ADD (array, i, memset, hwcap2 & PPC_FEATURE2_ARCH_2_07 + && cacheline_size == 128, __memset_power8) - IFUNC_IMPL_ADD (array, i, memset, hwcap & PPC_FEATURE_ARCH_2_06, + IFUNC_IMPL_ADD (array, i, memset, hwcap & PPC_FEATURE_ARCH_2_06 + && cacheline_size == 128, __memset_power7) - IFUNC_IMPL_ADD (array, i, memset, hwcap & PPC_FEATURE_ARCH_2_05, + IFUNC_IMPL_ADD (array, i, memset, hwcap & PPC_FEATURE_ARCH_2_05 + && cacheline_size == 128, __memset_power6) - IFUNC_IMPL_ADD (array, i, memset, hwcap & PPC_FEATURE_POWER4, + IFUNC_IMPL_ADD (array, i, memset, hwcap & PPC_FEATURE_POWER4 + && cacheline_size == 128, __memset_power4) IFUNC_IMPL_ADD (array, i, memset, 1, __memset_ppc)) diff --git a/sysdeps/powerpc/powerpc64/multiarch/memset.c b/sysdeps/powerpc/powerpc64/multiarch/memset.c index c1aa143f60..056e911699 100644 --- a/sysdeps/powerpc/powerpc64/multiarch/memset.c +++ b/sysdeps/powerpc/powerpc64/multiarch/memset.c @@ -43,16 +43,21 @@ libc_ifunc (__libc_memset, # ifdef __LITTLE_ENDIAN__ (hwcap2 & PPC_FEATURE2_ARCH_3_1 && hwcap2 & PPC_FEATURE2_HAS_ISEL - && hwcap & PPC_FEATURE_HAS_VSX) + && hwcap & PPC_FEATURE_HAS_VSX + && GLRO(dl_cache_line_size) == 128) ? __memset_power10 : # endif - (hwcap2 & PPC_FEATURE2_ARCH_2_07) + (hwcap2 & PPC_FEATURE2_ARCH_2_07 + && GLRO(dl_cache_line_size) == 128) ? __memset_power8 : - (hwcap & PPC_FEATURE_ARCH_2_06) + (hwcap & PPC_FEATURE_ARCH_2_06 + && GLRO(dl_cache_line_size) == 128) ? __memset_power7 : - (hwcap & PPC_FEATURE_ARCH_2_05) + (hwcap & PPC_FEATURE_ARCH_2_05 + && GLRO(dl_cache_line_size) == 128) ? __memset_power6 : - (hwcap & PPC_FEATURE_POWER4) + (hwcap & PPC_FEATURE_POWER4 + && GLRO(dl_cache_line_size) == 128) ? __memset_power4 : __memset_ppc); -- 2.31.1 ^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH 2/3] powerpc64: Check cacheline size before using optimised memset routines 2021-07-27 5:47 ` [PATCH 2/3] powerpc64: Check cacheline size before using optimised memset routines Anton Blanchard @ 2021-08-06 19:50 ` Tulio Magno Quites Machado Filho 0 siblings, 0 replies; 7+ messages in thread From: Tulio Magno Quites Machado Filho @ 2021-08-06 19:50 UTC (permalink / raw) To: Anton Blanchard; +Cc: libc-alpha, adhemerval.zanella Anton Blanchard via Libc-alpha <libc-alpha@sourceware.org> writes: > A number of optimised memset routines assume the cacheline size is 128B, > so we better check before using them. LGTM. The patch is still missing the changes for bzero(), but I understand this is already an improvement over what we had. I plan to modify bzero later. Pushed as f2a15dd668913c5a1388ba7e1131b25162b2ea75. Thanks! -- Tulio Magno ^ permalink raw reply [flat|nested] 7+ messages in thread
* [PATCH 3/3] powerpc64: Add checks for Altivec and VSX in ifunc selection 2021-07-27 5:47 [PATCH 1/3] powerpc64: Replace some PPC_FEATURE_HAS_VSX with PPC_FEATURE_ARCH_2_06 Anton Blanchard 2021-07-27 5:47 ` [PATCH 2/3] powerpc64: Check cacheline size before using optimised memset routines Anton Blanchard @ 2021-07-27 5:47 ` Anton Blanchard 2021-08-06 19:50 ` Tulio Magno Quites Machado Filho 2021-08-06 19:48 ` [PATCH 1/3] powerpc64: Replace some PPC_FEATURE_HAS_VSX with PPC_FEATURE_ARCH_2_06 Tulio Magno Quites Machado Filho 2 siblings, 1 reply; 7+ messages in thread From: Anton Blanchard @ 2021-07-27 5:47 UTC (permalink / raw) To: tuliom, adhemerval.zanella; +Cc: libc-alpha We'd like to support processors without Altivec or VSX, so check the relevant hwcap bits before selecting them. --- sysdeps/powerpc/powerpc64/multiarch/bzero.c | 6 +- .../powerpc64/multiarch/ifunc-impl-list.c | 103 ++++++++++++------ sysdeps/powerpc/powerpc64/multiarch/memchr.c | 3 +- sysdeps/powerpc/powerpc64/multiarch/memcmp.c | 3 +- sysdeps/powerpc/powerpc64/multiarch/memcpy.c | 7 +- sysdeps/powerpc/powerpc64/multiarch/memmove.c | 3 +- sysdeps/powerpc/powerpc64/multiarch/mempcpy.c | 3 +- sysdeps/powerpc/powerpc64/multiarch/memrchr.c | 3 +- sysdeps/powerpc/powerpc64/multiarch/memset.c | 1 + .../powerpc/powerpc64/multiarch/rawmemchr.c | 3 +- sysdeps/powerpc/powerpc64/multiarch/stpcpy.c | 9 +- .../powerpc/powerpc64/multiarch/strcasecmp.c | 3 +- .../powerpc/powerpc64/multiarch/strcasestr.c | 3 +- sysdeps/powerpc/powerpc64/multiarch/strcat.c | 6 +- sysdeps/powerpc/powerpc64/multiarch/strchr.c | 3 +- .../powerpc/powerpc64/multiarch/strchrnul.c | 3 +- sysdeps/powerpc/powerpc64/multiarch/strcmp.c | 3 +- sysdeps/powerpc/powerpc64/multiarch/strcpy.c | 9 +- sysdeps/powerpc/powerpc64/multiarch/strcspn.c | 3 +- sysdeps/powerpc/powerpc64/multiarch/strlen.c | 9 +- .../powerpc/powerpc64/multiarch/strncase.c | 3 +- sysdeps/powerpc/powerpc64/multiarch/strncat.c | 6 +- sysdeps/powerpc/powerpc64/multiarch/strncmp.c | 3 +- sysdeps/powerpc/powerpc64/multiarch/strnlen.c | 3 +- sysdeps/powerpc/powerpc64/multiarch/strrchr.c | 3 +- sysdeps/powerpc/powerpc64/multiarch/strspn.c | 3 +- 26 files changed, 139 insertions(+), 68 deletions(-) diff --git a/sysdeps/powerpc/powerpc64/multiarch/bzero.c b/sysdeps/powerpc/powerpc64/multiarch/bzero.c index 660d7dc686..6275305b46 100644 --- a/sysdeps/powerpc/powerpc64/multiarch/bzero.c +++ b/sysdeps/powerpc/powerpc64/multiarch/bzero.c @@ -38,11 +38,13 @@ libc_ifunc (__bzero, && hwcap & PPC_FEATURE_HAS_VSX) ? __bzero_power10 : # endif - (hwcap2 & PPC_FEATURE2_ARCH_2_07) + (hwcap2 & PPC_FEATURE2_ARCH_2_07 + && hwcap & PPC_FEATURE_HAS_ALTIVEC) ? __bzero_power8 : (hwcap & PPC_FEATURE_HAS_VSX) ? __bzero_power7 : - (hwcap & PPC_FEATURE_ARCH_2_05) + (hwcap & PPC_FEATURE_ARCH_2_05 + && hwcap & PPC_FEATURE_HAS_ALTIVEC) ? __bzero_power6 : (hwcap & PPC_FEATURE_POWER4) ? __bzero_power4 diff --git a/sysdeps/powerpc/powerpc64/multiarch/ifunc-impl-list.c b/sysdeps/powerpc/powerpc64/multiarch/ifunc-impl-list.c index a3fdcd43bd..c3e25c5981 100644 --- a/sysdeps/powerpc/powerpc64/multiarch/ifunc-impl-list.c +++ b/sysdeps/powerpc/powerpc64/multiarch/ifunc-impl-list.c @@ -60,9 +60,11 @@ __libc_ifunc_impl_list (const char *name, struct libc_ifunc_impl *array, && hwcap & PPC_FEATURE_HAS_VSX, __memcpy_power10) #endif - 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_ALTIVEC, __memcpy_power8_cached) - IFUNC_IMPL_ADD (array, i, memcpy, hwcap & PPC_FEATURE_HAS_VSX, + IFUNC_IMPL_ADD (array, i, memcpy, hwcap & PPC_FEATURE_ARCH_2_06 + && hwcap & PPC_FEATURE_HAS_ALTIVEC, __memcpy_power7) IFUNC_IMPL_ADD (array, i, memcpy, hwcap & PPC_FEATURE_ARCH_2_06, __memcpy_a2) @@ -83,7 +85,8 @@ __libc_ifunc_impl_list (const char *name, struct libc_ifunc_impl *array, && hwcap & PPC_FEATURE_HAS_VSX, __memmove_power10) #endif - IFUNC_IMPL_ADD (array, i, memmove, hwcap & PPC_FEATURE_HAS_VSX, + IFUNC_IMPL_ADD (array, i, memmove, hwcap & PPC_FEATURE_ARCH_2_06 + && hwcap & PPC_FEATURE_HAS_ALTIVEC, __memmove_power7) IFUNC_IMPL_ADD (array, i, memmove, 1, __memmove_ppc)) @@ -98,6 +101,7 @@ __libc_ifunc_impl_list (const char *name, struct libc_ifunc_impl *array, __memset_power10) #endif IFUNC_IMPL_ADD (array, i, memset, hwcap2 & PPC_FEATURE2_ARCH_2_07 + && hwcap & PPC_FEATURE_HAS_ALTIVEC && cacheline_size == 128, __memset_power8) IFUNC_IMPL_ADD (array, i, memset, hwcap & PPC_FEATURE_ARCH_2_06 @@ -114,12 +118,15 @@ __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_ALTIVEC, __strcpy_power8) - IFUNC_IMPL_ADD (array, i, strcpy, hwcap & PPC_FEATURE_HAS_VSX, + IFUNC_IMPL_ADD (array, i, strcpy, hwcap & PPC_FEATURE_ARCH_2_06 + && hwcap & PPC_FEATURE_HAS_VSX, __strcpy_power7) IFUNC_IMPL_ADD (array, i, strcpy, 1, __strcpy_ppc)) @@ -127,12 +134,15 @@ __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_ALTIVEC, __stpcpy_power8) - IFUNC_IMPL_ADD (array, i, stpcpy, hwcap & PPC_FEATURE_HAS_VSX, + IFUNC_IMPL_ADD (array, i, stpcpy, hwcap & PPC_FEATURE_ARCH_2_06 + && hwcap & PPC_FEATURE_HAS_VSX, __stpcpy_power7) IFUNC_IMPL_ADD (array, i, stpcpy, 1, __stpcpy_ppc)) @@ -140,12 +150,15 @@ __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_1, + IFUNC_IMPL_ADD (array, i, strlen, hwcap2 & PPC_FEATURE2_ARCH_3_1 + && hwcap & PPC_FEATURE_HAS_VSX, __strlen_power10) - 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_ALTIVEC, __strlen_power8) IFUNC_IMPL_ADD (array, i, strlen, hwcap & PPC_FEATURE_ARCH_2_06, __strlen_power7) @@ -155,7 +168,8 @@ __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_ALTIVEC, __strncmp_power9) #endif IFUNC_IMPL_ADD (array, i, strncmp, hwcap2 & PPC_FEATURE2_ARCH_2_07, @@ -170,7 +184,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_ALTIVEC, __strchr_power8) IFUNC_IMPL_ADD (array, i, strchr, hwcap & PPC_FEATURE_ARCH_2_06, @@ -181,7 +196,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_ALTIVEC, __strchrnul_power8) IFUNC_IMPL_ADD (array, i, strchrnul, hwcap & PPC_FEATURE_ARCH_2_06, @@ -198,7 +214,8 @@ __libc_ifunc_impl_list (const char *name, struct libc_ifunc_impl *array, && hwcap & PPC_FEATURE_HAS_VSX, __memcmp_power10) #endif - 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_ALTIVEC, __memcmp_power8) IFUNC_IMPL_ADD (array, i, memcmp, hwcap & PPC_FEATURE_ARCH_2_06, __memcmp_power7) @@ -215,11 +232,13 @@ __libc_ifunc_impl_list (const char *name, struct libc_ifunc_impl *array, && hwcap & PPC_FEATURE_HAS_VSX, __bzero_power10) #endif - 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_ALTIVEC, __bzero_power8) IFUNC_IMPL_ADD (array, i, bzero, hwcap & PPC_FEATURE_HAS_VSX, __bzero_power7) - IFUNC_IMPL_ADD (array, i, bzero, hwcap & PPC_FEATURE_ARCH_2_05, + IFUNC_IMPL_ADD (array, i, bzero, hwcap & PPC_FEATURE_ARCH_2_05 + && hwcap & PPC_FEATURE_HAS_ALTIVEC, __bzero_power6) IFUNC_IMPL_ADD (array, i, bzero, hwcap & PPC_FEATURE_POWER4, __bzero_power4) @@ -241,7 +260,8 @@ __libc_ifunc_impl_list (const char *name, struct libc_ifunc_impl *array, /* Support sysdeps/powerpc/powerpc64/multiarch/mempcpy.c. */ IFUNC_IMPL (i, name, mempcpy, IFUNC_IMPL_ADD (array, i, mempcpy, - hwcap & PPC_FEATURE_HAS_VSX, + hwcap & PPC_FEATURE_ARCH_2_06 + && hwcap & PPC_FEATURE_HAS_ALTIVEC, __mempcpy_power7) IFUNC_IMPL_ADD (array, i, mempcpy, 1, __mempcpy_ppc)) @@ -249,7 +269,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_ALTIVEC, __memchr_power8) IFUNC_IMPL_ADD (array, i, memchr, hwcap & PPC_FEATURE_ARCH_2_06, @@ -260,7 +281,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_ALTIVEC, __memrchr_power8) IFUNC_IMPL_ADD (array, i, memrchr, hwcap & PPC_FEATURE_ARCH_2_06, @@ -276,7 +298,8 @@ __libc_ifunc_impl_list (const char *name, struct libc_ifunc_impl *array, && (hwcap & PPC_FEATURE_HAS_VSX), __rawmemchr_power10) 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, @@ -288,7 +311,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_ALTIVEC, __strnlen_power8) IFUNC_IMPL_ADD (array, i, strnlen, hwcap & PPC_FEATURE_ARCH_2_06, __strnlen_power7) @@ -298,7 +322,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_ALTIVEC, __strcasecmp_power8) IFUNC_IMPL_ADD (array, i, strcasecmp, hwcap & PPC_FEATURE_ARCH_2_06, @@ -316,7 +341,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_ALTIVEC, __strncasecmp_power8) IFUNC_IMPL_ADD (array, i, strncasecmp, hwcap & PPC_FEATURE_ARCH_2_06, @@ -334,7 +360,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_ALTIVEC, __strrchr_power8) IFUNC_IMPL_ADD (array, i, strrchr, hwcap & PPC_FEATURE_ARCH_2_06, @@ -345,10 +372,12 @@ __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, + hwcap & PPC_FEATURE_ARCH_2_06 + && hwcap & PPC_FEATURE_HAS_VSX, __strncat_power7) IFUNC_IMPL_ADD (array, i, strncat, 1, __strncat_ppc)) @@ -391,7 +420,8 @@ __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_ALTIVEC, __strcmp_power9) #endif IFUNC_IMPL_ADD (array, i, strcmp, @@ -406,10 +436,12 @@ __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, + hwcap & PPC_FEATURE_ARCH_2_06 + && hwcap & PPC_FEATURE_HAS_VSX, __strcat_power7) IFUNC_IMPL_ADD (array, i, strcat, 1, __strcat_ppc)) @@ -417,7 +449,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)) @@ -425,7 +458,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)) @@ -442,7 +476,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_ALTIVEC, __strcasestr_power8) IFUNC_IMPL_ADD (array, i, strcasestr, 1, __strcasestr_ppc)) diff --git a/sysdeps/powerpc/powerpc64/multiarch/memchr.c b/sysdeps/powerpc/powerpc64/multiarch/memchr.c index c24186689e..f40013e061 100644 --- a/sysdeps/powerpc/powerpc64/multiarch/memchr.c +++ b/sysdeps/powerpc/powerpc64/multiarch/memchr.c @@ -28,7 +28,8 @@ 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_ALTIVEC) ? __memchr_power8 : (hwcap & PPC_FEATURE_ARCH_2_06) ? __memchr_power7 diff --git a/sysdeps/powerpc/powerpc64/multiarch/memcmp.c b/sysdeps/powerpc/powerpc64/multiarch/memcmp.c index 99559bce26..89b56c103b 100644 --- a/sysdeps/powerpc/powerpc64/multiarch/memcmp.c +++ b/sysdeps/powerpc/powerpc64/multiarch/memcmp.c @@ -38,7 +38,8 @@ libc_ifunc_redirected (__redirect_memcmp, memcmp, && hwcap & PPC_FEATURE_HAS_VSX) ? __memcmp_power10 : #endif - (hwcap2 & PPC_FEATURE2_ARCH_2_07) + (hwcap2 & PPC_FEATURE2_ARCH_2_07 + && hwcap & PPC_FEATURE_HAS_ALTIVEC) ? __memcmp_power8 : (hwcap & PPC_FEATURE_ARCH_2_06) ? __memcmp_power7 diff --git a/sysdeps/powerpc/powerpc64/multiarch/memcpy.c b/sysdeps/powerpc/powerpc64/multiarch/memcpy.c index 53ab32ef26..684ee064f2 100644 --- a/sysdeps/powerpc/powerpc64/multiarch/memcpy.c +++ b/sysdeps/powerpc/powerpc64/multiarch/memcpy.c @@ -45,9 +45,12 @@ libc_ifunc (__libc_memcpy, (hwcap2 & PPC_FEATURE2_ARCH_3_1 && hwcap & PPC_FEATURE_HAS_VSX) ? __memcpy_power10 : # endif - ((hwcap2 & PPC_FEATURE2_ARCH_2_07) && use_cached_memopt) + (hwcap2 & PPC_FEATURE2_ARCH_2_07 + && hwcap & PPC_FEATURE_HAS_ALTIVEC + && use_cached_memopt) ? __memcpy_power8_cached : - (hwcap & PPC_FEATURE_HAS_VSX) + (hwcap & PPC_FEATURE_ARCH_2_06 + && hwcap & PPC_FEATURE_HAS_ALTIVEC) ? __memcpy_power7 : (hwcap & PPC_FEATURE_ARCH_2_06) ? __memcpy_a2 : diff --git a/sysdeps/powerpc/powerpc64/multiarch/memmove.c b/sysdeps/powerpc/powerpc64/multiarch/memmove.c index 637b2cbf7f..50253b4554 100644 --- a/sysdeps/powerpc/powerpc64/multiarch/memmove.c +++ b/sysdeps/powerpc/powerpc64/multiarch/memmove.c @@ -41,7 +41,8 @@ libc_ifunc (__libc_memmove, && hwcap & PPC_FEATURE_HAS_VSX) ? __memmove_power10 : #endif - (hwcap & PPC_FEATURE_HAS_VSX) + (hwcap & PPC_FEATURE_ARCH_2_06 + && hwcap & PPC_FEATURE_HAS_ALTIVEC) ? __memmove_power7 : __memmove_ppc); diff --git a/sysdeps/powerpc/powerpc64/multiarch/mempcpy.c b/sysdeps/powerpc/powerpc64/multiarch/mempcpy.c index b37e0f35b5..563095a5ec 100644 --- a/sysdeps/powerpc/powerpc64/multiarch/mempcpy.c +++ b/sysdeps/powerpc/powerpc64/multiarch/mempcpy.c @@ -33,7 +33,8 @@ extern __typeof (__mempcpy) __mempcpy_power7 attribute_hidden; /* Avoid DWARF definition DIE on ifunc symbol so that GDB can handle ifunc symbol properly. */ libc_ifunc_redirected (__redirect___mempcpy, __mempcpy, - (hwcap & PPC_FEATURE_HAS_VSX) + (hwcap & PPC_FEATURE_ARCH_2_06 + && hwcap & PPC_FEATURE_HAS_ALTIVEC) ? __mempcpy_power7 : __mempcpy_ppc); diff --git a/sysdeps/powerpc/powerpc64/multiarch/memrchr.c b/sysdeps/powerpc/powerpc64/multiarch/memrchr.c index 16bb6f0042..a8b985b06a 100644 --- a/sysdeps/powerpc/powerpc64/multiarch/memrchr.c +++ b/sysdeps/powerpc/powerpc64/multiarch/memrchr.c @@ -28,7 +28,8 @@ 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_ALTIVEC) ? __memrchr_power8 : (hwcap & PPC_FEATURE_ARCH_2_06) ? __memrchr_power7 diff --git a/sysdeps/powerpc/powerpc64/multiarch/memset.c b/sysdeps/powerpc/powerpc64/multiarch/memset.c index 056e911699..a2bc223bcc 100644 --- a/sysdeps/powerpc/powerpc64/multiarch/memset.c +++ b/sysdeps/powerpc/powerpc64/multiarch/memset.c @@ -48,6 +48,7 @@ libc_ifunc (__libc_memset, ? __memset_power10 : # endif (hwcap2 & PPC_FEATURE2_ARCH_2_07 + && hwcap & PPC_FEATURE_HAS_ALTIVEC && GLRO(dl_cache_line_size) == 128) ? __memset_power8 : (hwcap & PPC_FEATURE_ARCH_2_06 diff --git a/sysdeps/powerpc/powerpc64/multiarch/rawmemchr.c b/sysdeps/powerpc/powerpc64/multiarch/rawmemchr.c index b5d2d3a635..43eb459e02 100644 --- a/sysdeps/powerpc/powerpc64/multiarch/rawmemchr.c +++ b/sysdeps/powerpc/powerpc64/multiarch/rawmemchr.c @@ -38,7 +38,8 @@ libc_ifunc_redirected (__redirect___rawmemchr, __rawmemchr, (hwcap2 & PPC_FEATURE2_ARCH_3_1) && (hwcap & PPC_FEATURE_HAS_VSX) ? __rawmemchr_power10 : - (hwcap2 & PPC_FEATURE2_ARCH_3_00) + (hwcap2 & PPC_FEATURE2_ARCH_3_00 + && hwcap & PPC_FEATURE_HAS_VSX) ? __rawmemchr_power9 : # endif (hwcap & PPC_FEATURE_ARCH_2_06) diff --git a/sysdeps/powerpc/powerpc64/multiarch/stpcpy.c b/sysdeps/powerpc/powerpc64/multiarch/stpcpy.c index d4eb4285fc..5be413405e 100644 --- a/sysdeps/powerpc/powerpc64/multiarch/stpcpy.c +++ b/sysdeps/powerpc/powerpc64/multiarch/stpcpy.c @@ -32,12 +32,15 @@ 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_ALTIVEC) ? __stpcpy_power8 - : (hwcap & PPC_FEATURE_HAS_VSX) + : (hwcap & PPC_FEATURE_ARCH_2_06 + && hwcap & PPC_FEATURE_HAS_VSX) ? __stpcpy_power7 : __stpcpy_ppc); diff --git a/sysdeps/powerpc/powerpc64/multiarch/strcasecmp.c b/sysdeps/powerpc/powerpc64/multiarch/strcasecmp.c index 55ca6c85c4..21ce2d279b 100644 --- a/sysdeps/powerpc/powerpc64/multiarch/strcasecmp.c +++ b/sysdeps/powerpc/powerpc64/multiarch/strcasecmp.c @@ -27,7 +27,8 @@ 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_ALTIVEC) ? __strcasecmp_power8: (hwcap & PPC_FEATURE_ARCH_2_06) ? __strcasecmp_power7 diff --git a/sysdeps/powerpc/powerpc64/multiarch/strcasestr.c b/sysdeps/powerpc/powerpc64/multiarch/strcasestr.c index 7e4bd3b5ac..5bb3016022 100644 --- a/sysdeps/powerpc/powerpc64/multiarch/strcasestr.c +++ b/sysdeps/powerpc/powerpc64/multiarch/strcasestr.c @@ -27,7 +27,8 @@ 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_ALTIVEC) ? __strcasestr_power8 : __strcasestr_ppc); diff --git a/sysdeps/powerpc/powerpc64/multiarch/strcat.c b/sysdeps/powerpc/powerpc64/multiarch/strcat.c index 6d342324c4..d8d9870824 100644 --- a/sysdeps/powerpc/powerpc64/multiarch/strcat.c +++ b/sysdeps/powerpc/powerpc64/multiarch/strcat.c @@ -28,9 +28,11 @@ 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) + : (hwcap & PPC_FEATURE_ARCH_2_06 + && hwcap & PPC_FEATURE_HAS_VSX) ? __strcat_power7 : __strcat_ppc); #endif diff --git a/sysdeps/powerpc/powerpc64/multiarch/strchr.c b/sysdeps/powerpc/powerpc64/multiarch/strchr.c index 27c794c6b7..62b202baf9 100644 --- a/sysdeps/powerpc/powerpc64/multiarch/strchr.c +++ b/sysdeps/powerpc/powerpc64/multiarch/strchr.c @@ -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_ALTIVEC) ? __strchr_power8 : (hwcap & PPC_FEATURE_ARCH_2_06) ? __strchr_power7 diff --git a/sysdeps/powerpc/powerpc64/multiarch/strchrnul.c b/sysdeps/powerpc/powerpc64/multiarch/strchrnul.c index 4a07b4a242..40e529b9d9 100644 --- a/sysdeps/powerpc/powerpc64/multiarch/strchrnul.c +++ b/sysdeps/powerpc/powerpc64/multiarch/strchrnul.c @@ -28,7 +28,8 @@ extern __typeof (__strchrnul) __strchrnul_power8 attribute_hidden; /* Avoid DWARF definition DIE on ifunc symbol so that GDB can handle ifunc symbol properly. */ libc_ifunc (__strchrnul, - (hwcap2 & PPC_FEATURE2_ARCH_2_07) + (hwcap2 & PPC_FEATURE2_ARCH_2_07 + && hwcap & PPC_FEATURE_HAS_ALTIVEC) ? __strchrnul_power8 : (hwcap & PPC_FEATURE_ARCH_2_06) ? __strchrnul_power7 diff --git a/sysdeps/powerpc/powerpc64/multiarch/strcmp.c b/sysdeps/powerpc/powerpc64/multiarch/strcmp.c index 4b0b25fff6..8132682a99 100644 --- a/sysdeps/powerpc/powerpc64/multiarch/strcmp.c +++ b/sysdeps/powerpc/powerpc64/multiarch/strcmp.c @@ -35,7 +35,8 @@ extern __typeof (strcmp) __strcmp_power9 attribute_hidden; libc_ifunc_redirected (__redirect_strcmp, strcmp, # ifdef __LITTLE_ENDIAN__ - (hwcap2 & PPC_FEATURE2_ARCH_3_00) + (hwcap2 & PPC_FEATURE2_ARCH_3_00 + && hwcap & PPC_FEATURE_HAS_ALTIVEC) ? __strcmp_power9 : # endif (hwcap2 & PPC_FEATURE2_ARCH_2_07) diff --git a/sysdeps/powerpc/powerpc64/multiarch/strcpy.c b/sysdeps/powerpc/powerpc64/multiarch/strcpy.c index b733fa5a23..5af1d45cc1 100644 --- a/sysdeps/powerpc/powerpc64/multiarch/strcpy.c +++ b/sysdeps/powerpc/powerpc64/multiarch/strcpy.c @@ -32,12 +32,15 @@ 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) + (hwcap2 & PPC_FEATURE2_ARCH_2_07 + && hwcap & PPC_FEATURE_HAS_ALTIVEC) ? __strcpy_power8 - : (hwcap & PPC_FEATURE_HAS_VSX) + : (hwcap & PPC_FEATURE_ARCH_2_06 + && hwcap & PPC_FEATURE_HAS_VSX) ? __strcpy_power7 : __strcpy_ppc); #endif diff --git a/sysdeps/powerpc/powerpc64/multiarch/strcspn.c b/sysdeps/powerpc/powerpc64/multiarch/strcspn.c index 683aa104d7..8ba01c13b1 100644 --- a/sysdeps/powerpc/powerpc64/multiarch/strcspn.c +++ b/sysdeps/powerpc/powerpc64/multiarch/strcspn.c @@ -27,7 +27,8 @@ 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); diff --git a/sysdeps/powerpc/powerpc64/multiarch/strlen.c b/sysdeps/powerpc/powerpc64/multiarch/strlen.c index 0cd1c6faff..f1e28414e0 100644 --- a/sysdeps/powerpc/powerpc64/multiarch/strlen.c +++ b/sysdeps/powerpc/powerpc64/multiarch/strlen.c @@ -35,12 +35,15 @@ extern __typeof (__redirect_strlen) __strlen_power10 attribute_hidden; libc_ifunc (__libc_strlen, # ifdef __LITTLE_ENDIAN__ - (hwcap2 & PPC_FEATURE2_ARCH_3_1) + (hwcap2 & PPC_FEATURE2_ARCH_3_1 + && hwcap & PPC_FEATURE_HAS_VSX) ? __strlen_power10 : - (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_ALTIVEC) ? __strlen_power8 : (hwcap & PPC_FEATURE_ARCH_2_06) ? __strlen_power7 diff --git a/sysdeps/powerpc/powerpc64/multiarch/strncase.c b/sysdeps/powerpc/powerpc64/multiarch/strncase.c index 644046bd74..2802cf2c3f 100644 --- a/sysdeps/powerpc/powerpc64/multiarch/strncase.c +++ b/sysdeps/powerpc/powerpc64/multiarch/strncase.c @@ -27,7 +27,8 @@ 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_ALTIVEC) ? __strncasecmp_power8: (hwcap & PPC_FEATURE_ARCH_2_06) ? __strncasecmp_power7 diff --git a/sysdeps/powerpc/powerpc64/multiarch/strncat.c b/sysdeps/powerpc/powerpc64/multiarch/strncat.c index 0036fca91a..9ea294a72d 100644 --- a/sysdeps/powerpc/powerpc64/multiarch/strncat.c +++ b/sysdeps/powerpc/powerpc64/multiarch/strncat.c @@ -26,9 +26,11 @@ 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) + : (hwcap & PPC_FEATURE_ARCH_2_06 + && hwcap & PPC_FEATURE_HAS_VSX) ? __strncat_power7 : __strncat_ppc); #endif diff --git a/sysdeps/powerpc/powerpc64/multiarch/strncmp.c b/sysdeps/powerpc/powerpc64/multiarch/strncmp.c index 1f689e5c05..2d21122854 100644 --- a/sysdeps/powerpc/powerpc64/multiarch/strncmp.c +++ b/sysdeps/powerpc/powerpc64/multiarch/strncmp.c @@ -38,7 +38,8 @@ 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_ALTIVEC) ? __strncmp_power9 : # endif (hwcap2 & PPC_FEATURE2_ARCH_2_07) diff --git a/sysdeps/powerpc/powerpc64/multiarch/strnlen.c b/sysdeps/powerpc/powerpc64/multiarch/strnlen.c index baf375a75a..e68e9d9f88 100644 --- a/sysdeps/powerpc/powerpc64/multiarch/strnlen.c +++ b/sysdeps/powerpc/powerpc64/multiarch/strnlen.c @@ -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_ALTIVEC) ? __strnlen_power8 : (hwcap & PPC_FEATURE_ARCH_2_06) ? __strnlen_power7 diff --git a/sysdeps/powerpc/powerpc64/multiarch/strrchr.c b/sysdeps/powerpc/powerpc64/multiarch/strrchr.c index 1c9eea1817..7f0cf2a1b7 100644 --- a/sysdeps/powerpc/powerpc64/multiarch/strrchr.c +++ b/sysdeps/powerpc/powerpc64/multiarch/strrchr.c @@ -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_ALTIVEC) ? __strrchr_power8 : (hwcap & PPC_FEATURE_ARCH_2_06) ? __strrchr_power7 diff --git a/sysdeps/powerpc/powerpc64/multiarch/strspn.c b/sysdeps/powerpc/powerpc64/multiarch/strspn.c index 70167a176b..7613ab3d55 100644 --- a/sysdeps/powerpc/powerpc64/multiarch/strspn.c +++ b/sysdeps/powerpc/powerpc64/multiarch/strspn.c @@ -27,7 +27,8 @@ 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); -- 2.31.1 ^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH 3/3] powerpc64: Add checks for Altivec and VSX in ifunc selection 2021-07-27 5:47 ` [PATCH 3/3] powerpc64: Add checks for Altivec and VSX in ifunc selection Anton Blanchard @ 2021-08-06 19:50 ` Tulio Magno Quites Machado Filho 0 siblings, 0 replies; 7+ messages in thread From: Tulio Magno Quites Machado Filho @ 2021-08-06 19:50 UTC (permalink / raw) To: Anton Blanchard; +Cc: libc-alpha, adhemerval.zanella Anton Blanchard via Libc-alpha <libc-alpha@sourceware.org> writes: > diff --git a/sysdeps/powerpc/powerpc64/multiarch/bzero.c b/sysdeps/powerpc/powerpc64/multiarch/bzero.c > index 660d7dc686..6275305b46 100644 > --- a/sysdeps/powerpc/powerpc64/multiarch/bzero.c > +++ b/sysdeps/powerpc/powerpc64/multiarch/bzero.c > @@ -38,11 +38,13 @@ libc_ifunc (__bzero, > && hwcap & PPC_FEATURE_HAS_VSX) > ? __bzero_power10 : > # endif > - (hwcap2 & PPC_FEATURE2_ARCH_2_07) > + (hwcap2 & PPC_FEATURE2_ARCH_2_07 The old code had wrong indentation. Fixed. LGTM. Pushed as 60b4dd25790342b40e8942e3a4115f511a6b6911. Thanks! -- Tulio Magno ^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH 1/3] powerpc64: Replace some PPC_FEATURE_HAS_VSX with PPC_FEATURE_ARCH_2_06 2021-07-27 5:47 [PATCH 1/3] powerpc64: Replace some PPC_FEATURE_HAS_VSX with PPC_FEATURE_ARCH_2_06 Anton Blanchard 2021-07-27 5:47 ` [PATCH 2/3] powerpc64: Check cacheline size before using optimised memset routines Anton Blanchard 2021-07-27 5:47 ` [PATCH 3/3] powerpc64: Add checks for Altivec and VSX in ifunc selection Anton Blanchard @ 2021-08-06 19:48 ` Tulio Magno Quites Machado Filho 2 siblings, 0 replies; 7+ messages in thread From: Tulio Magno Quites Machado Filho @ 2021-08-06 19:48 UTC (permalink / raw) To: Anton Blanchard; +Cc: libc-alpha, adhemerval.zanella Anton Blanchard via Libc-alpha <libc-alpha@sourceware.org> writes: > We use PPC_FEATURE_HAS_VSX to select a number of POWER7 optimised > functions. These functions don't use any VSX instructions, so > PPC_FEATURE_ARCH_2_06 seems like a better fit. LGTM. Pushed as e4ca6de1bc5e4ba3f94cf0c501a293c5bc827b10. Thanks! -- Tulio Magno ^ permalink raw reply [flat|nested] 7+ messages in thread
* [PATCH 1/3] powerpc64: Replace some PPC_FEATURE_HAS_VSX with PPC_FEATURE_ARCH_2_06 @ 2021-07-06 10:51 Anton Blanchard 2021-07-06 10:51 ` [PATCH 3/3] powerpc64: Add checks for Altivec and VSX in ifunc selection Anton Blanchard 0 siblings, 1 reply; 7+ messages in thread From: Anton Blanchard @ 2021-07-06 10:51 UTC (permalink / raw) To: tuliom; +Cc: libc-alpha We use PPC_FEATURE_HAS_VSX to select a number of POWER7 optimised functions. These functions don't use any VSX instructions, so PPC_FEATURE_ARCH_2_06 seems like a better fit. --- sysdeps/powerpc/powerpc64/multiarch/memchr.c | 2 +- sysdeps/powerpc/powerpc64/multiarch/memcmp.c | 2 +- sysdeps/powerpc/powerpc64/multiarch/memrchr.c | 2 +- sysdeps/powerpc/powerpc64/multiarch/memset.c | 2 +- sysdeps/powerpc/powerpc64/multiarch/rawmemchr.c | 2 +- sysdeps/powerpc/powerpc64/multiarch/stpncpy.c | 2 +- sysdeps/powerpc/powerpc64/multiarch/strcasecmp.c | 2 +- sysdeps/powerpc/powerpc64/multiarch/strcasecmp_l.c | 2 +- sysdeps/powerpc/powerpc64/multiarch/strchr.c | 2 +- sysdeps/powerpc/powerpc64/multiarch/strchrnul.c | 2 +- sysdeps/powerpc/powerpc64/multiarch/strcmp.c | 2 +- sysdeps/powerpc/powerpc64/multiarch/strlen.c | 2 +- sysdeps/powerpc/powerpc64/multiarch/strncase.c | 2 +- sysdeps/powerpc/powerpc64/multiarch/strncase_l.c | 2 +- sysdeps/powerpc/powerpc64/multiarch/strncmp.c | 2 +- sysdeps/powerpc/powerpc64/multiarch/strncpy.c | 2 +- sysdeps/powerpc/powerpc64/multiarch/strnlen.c | 2 +- sysdeps/powerpc/powerpc64/multiarch/strrchr.c | 2 +- sysdeps/powerpc/powerpc64/multiarch/strstr.c | 2 +- 19 files changed, 19 insertions(+), 19 deletions(-) diff --git a/sysdeps/powerpc/powerpc64/multiarch/memchr.c b/sysdeps/powerpc/powerpc64/multiarch/memchr.c index 0c718d4f15..c24186689e 100644 --- a/sysdeps/powerpc/powerpc64/multiarch/memchr.c +++ b/sysdeps/powerpc/powerpc64/multiarch/memchr.c @@ -30,7 +30,7 @@ extern __typeof (__memchr) __memchr_power8 attribute_hidden; libc_ifunc (__memchr, (hwcap2 & PPC_FEATURE2_ARCH_2_07) ? __memchr_power8 : - (hwcap & PPC_FEATURE_HAS_VSX) + (hwcap & PPC_FEATURE_ARCH_2_06) ? __memchr_power7 : __memchr_ppc); diff --git a/sysdeps/powerpc/powerpc64/multiarch/memcmp.c b/sysdeps/powerpc/powerpc64/multiarch/memcmp.c index 4fd089aba7..99559bce26 100644 --- a/sysdeps/powerpc/powerpc64/multiarch/memcmp.c +++ b/sysdeps/powerpc/powerpc64/multiarch/memcmp.c @@ -40,7 +40,7 @@ libc_ifunc_redirected (__redirect_memcmp, memcmp, #endif (hwcap2 & PPC_FEATURE2_ARCH_2_07) ? __memcmp_power8 : - (hwcap & PPC_FEATURE_HAS_VSX) + (hwcap & PPC_FEATURE_ARCH_2_06) ? __memcmp_power7 : (hwcap & PPC_FEATURE_POWER4) ? __memcmp_power4 diff --git a/sysdeps/powerpc/powerpc64/multiarch/memrchr.c b/sysdeps/powerpc/powerpc64/multiarch/memrchr.c index e06d6468b8..16bb6f0042 100644 --- a/sysdeps/powerpc/powerpc64/multiarch/memrchr.c +++ b/sysdeps/powerpc/powerpc64/multiarch/memrchr.c @@ -30,7 +30,7 @@ extern __typeof (__memrchr) __memrchr_power8 attribute_hidden; libc_ifunc (__memrchr, (hwcap2 & PPC_FEATURE2_ARCH_2_07) ? __memrchr_power8 : - (hwcap & PPC_FEATURE_HAS_VSX) + (hwcap & PPC_FEATURE_ARCH_2_06) ? __memrchr_power7 : __memrchr_ppc); diff --git a/sysdeps/powerpc/powerpc64/multiarch/memset.c b/sysdeps/powerpc/powerpc64/multiarch/memset.c index 5994bf02e6..c1aa143f60 100644 --- a/sysdeps/powerpc/powerpc64/multiarch/memset.c +++ b/sysdeps/powerpc/powerpc64/multiarch/memset.c @@ -48,7 +48,7 @@ libc_ifunc (__libc_memset, # endif (hwcap2 & PPC_FEATURE2_ARCH_2_07) ? __memset_power8 : - (hwcap & PPC_FEATURE_HAS_VSX) + (hwcap & PPC_FEATURE_ARCH_2_06) ? __memset_power7 : (hwcap & PPC_FEATURE_ARCH_2_05) ? __memset_power6 : diff --git a/sysdeps/powerpc/powerpc64/multiarch/rawmemchr.c b/sysdeps/powerpc/powerpc64/multiarch/rawmemchr.c index c0ffea2b93..b5d2d3a635 100644 --- a/sysdeps/powerpc/powerpc64/multiarch/rawmemchr.c +++ b/sysdeps/powerpc/powerpc64/multiarch/rawmemchr.c @@ -41,7 +41,7 @@ libc_ifunc_redirected (__redirect___rawmemchr, __rawmemchr, (hwcap2 & PPC_FEATURE2_ARCH_3_00) ? __rawmemchr_power9 : # endif - (hwcap & PPC_FEATURE_HAS_VSX) + (hwcap & PPC_FEATURE_ARCH_2_06) ? __rawmemchr_power7 : __rawmemchr_ppc); diff --git a/sysdeps/powerpc/powerpc64/multiarch/stpncpy.c b/sysdeps/powerpc/powerpc64/multiarch/stpncpy.c index bebd377fd9..e7035761a7 100644 --- a/sysdeps/powerpc/powerpc64/multiarch/stpncpy.c +++ b/sysdeps/powerpc/powerpc64/multiarch/stpncpy.c @@ -40,7 +40,7 @@ libc_ifunc_redirected (__redirect___stpncpy, __stpncpy, # endif (hwcap2 & PPC_FEATURE2_ARCH_2_07) ? __stpncpy_power8 - : (hwcap & PPC_FEATURE_HAS_VSX) + : (hwcap & PPC_FEATURE_ARCH_2_06) ? __stpncpy_power7 : __stpncpy_ppc); weak_alias (__stpncpy, stpncpy) diff --git a/sysdeps/powerpc/powerpc64/multiarch/strcasecmp.c b/sysdeps/powerpc/powerpc64/multiarch/strcasecmp.c index dcd7774403..55ca6c85c4 100644 --- a/sysdeps/powerpc/powerpc64/multiarch/strcasecmp.c +++ b/sysdeps/powerpc/powerpc64/multiarch/strcasecmp.c @@ -29,7 +29,7 @@ extern __typeof (__strcasecmp) __strcasecmp_power8 attribute_hidden; libc_ifunc (__libc_strcasecmp, (hwcap2 & PPC_FEATURE2_ARCH_2_07) ? __strcasecmp_power8: - (hwcap & PPC_FEATURE_HAS_VSX) + (hwcap & PPC_FEATURE_ARCH_2_06) ? __strcasecmp_power7 : __strcasecmp_ppc); diff --git a/sysdeps/powerpc/powerpc64/multiarch/strcasecmp_l.c b/sysdeps/powerpc/powerpc64/multiarch/strcasecmp_l.c index 96a70b8b11..1afee5d7fd 100644 --- a/sysdeps/powerpc/powerpc64/multiarch/strcasecmp_l.c +++ b/sysdeps/powerpc/powerpc64/multiarch/strcasecmp_l.c @@ -32,7 +32,7 @@ extern __typeof (__strcasecmp_l) __strcasecmp_l_power7 attribute_hidden; extern __typeof (__strcasecmp_l) __libc_strcasecmp_l; libc_ifunc (__libc_strcasecmp_l, - (hwcap & PPC_FEATURE_HAS_VSX) + (hwcap & PPC_FEATURE_ARCH_2_06) ? __strcasecmp_l_power7 : __strcasecmp_l_ppc); diff --git a/sysdeps/powerpc/powerpc64/multiarch/strchr.c b/sysdeps/powerpc/powerpc64/multiarch/strchr.c index ea9ac1134f..27c794c6b7 100644 --- a/sysdeps/powerpc/powerpc64/multiarch/strchr.c +++ b/sysdeps/powerpc/powerpc64/multiarch/strchr.c @@ -35,7 +35,7 @@ extern __typeof (strchr) __strchr_power8 attribute_hidden; libc_ifunc_redirected (__redirect_strchr, strchr, (hwcap2 & PPC_FEATURE2_ARCH_2_07) ? __strchr_power8 : - (hwcap & PPC_FEATURE_HAS_VSX) + (hwcap & PPC_FEATURE_ARCH_2_06) ? __strchr_power7 : __strchr_ppc); weak_alias (strchr, index) diff --git a/sysdeps/powerpc/powerpc64/multiarch/strchrnul.c b/sysdeps/powerpc/powerpc64/multiarch/strchrnul.c index 4688e7c3f0..4a07b4a242 100644 --- a/sysdeps/powerpc/powerpc64/multiarch/strchrnul.c +++ b/sysdeps/powerpc/powerpc64/multiarch/strchrnul.c @@ -30,7 +30,7 @@ extern __typeof (__strchrnul) __strchrnul_power8 attribute_hidden; libc_ifunc (__strchrnul, (hwcap2 & PPC_FEATURE2_ARCH_2_07) ? __strchrnul_power8 : - (hwcap & PPC_FEATURE_HAS_VSX) + (hwcap & PPC_FEATURE_ARCH_2_06) ? __strchrnul_power7 : __strchrnul_ppc); diff --git a/sysdeps/powerpc/powerpc64/multiarch/strcmp.c b/sysdeps/powerpc/powerpc64/multiarch/strcmp.c index 72f9a639bf..4b0b25fff6 100644 --- a/sysdeps/powerpc/powerpc64/multiarch/strcmp.c +++ b/sysdeps/powerpc/powerpc64/multiarch/strcmp.c @@ -40,7 +40,7 @@ libc_ifunc_redirected (__redirect_strcmp, strcmp, # endif (hwcap2 & PPC_FEATURE2_ARCH_2_07) ? __strcmp_power8 - : (hwcap & PPC_FEATURE_HAS_VSX) + : (hwcap & PPC_FEATURE_ARCH_2_06) ? __strcmp_power7 : __strcmp_ppc); #endif diff --git a/sysdeps/powerpc/powerpc64/multiarch/strlen.c b/sysdeps/powerpc/powerpc64/multiarch/strlen.c index 109c8a90bd..0cd1c6faff 100644 --- a/sysdeps/powerpc/powerpc64/multiarch/strlen.c +++ b/sysdeps/powerpc/powerpc64/multiarch/strlen.c @@ -42,7 +42,7 @@ libc_ifunc (__libc_strlen, # endif (hwcap2 & PPC_FEATURE2_ARCH_2_07) ? __strlen_power8 : - (hwcap & PPC_FEATURE_HAS_VSX) + (hwcap & PPC_FEATURE_ARCH_2_06) ? __strlen_power7 : __strlen_ppc); diff --git a/sysdeps/powerpc/powerpc64/multiarch/strncase.c b/sysdeps/powerpc/powerpc64/multiarch/strncase.c index 2013a5d75a..644046bd74 100644 --- a/sysdeps/powerpc/powerpc64/multiarch/strncase.c +++ b/sysdeps/powerpc/powerpc64/multiarch/strncase.c @@ -29,7 +29,7 @@ extern __typeof (__strncasecmp) __strncasecmp_power8 attribute_hidden; libc_ifunc (__libc_strncasecmp, (hwcap2 & PPC_FEATURE2_ARCH_2_07) ? __strncasecmp_power8: - (hwcap & PPC_FEATURE_HAS_VSX) + (hwcap & PPC_FEATURE_ARCH_2_06) ? __strncasecmp_power7 : __strncasecmp_ppc); diff --git a/sysdeps/powerpc/powerpc64/multiarch/strncase_l.c b/sysdeps/powerpc/powerpc64/multiarch/strncase_l.c index cad6da302d..d2d761af72 100644 --- a/sysdeps/powerpc/powerpc64/multiarch/strncase_l.c +++ b/sysdeps/powerpc/powerpc64/multiarch/strncase_l.c @@ -34,7 +34,7 @@ extern __typeof (__strncasecmp_l) __strncasecmp_l_power7 attribute_hidden; ifunc symbol properly. */ extern __typeof (__strncasecmp_l) __libc_strncasecmp_l; libc_ifunc (__libc_strncasecmp_l, - (hwcap & PPC_FEATURE_HAS_VSX) + (hwcap & PPC_FEATURE_ARCH_2_06) ? __strncasecmp_l_power7 : __strncasecmp_l_ppc); diff --git a/sysdeps/powerpc/powerpc64/multiarch/strncmp.c b/sysdeps/powerpc/powerpc64/multiarch/strncmp.c index eef524ddfb..1f689e5c05 100644 --- a/sysdeps/powerpc/powerpc64/multiarch/strncmp.c +++ b/sysdeps/powerpc/powerpc64/multiarch/strncmp.c @@ -43,7 +43,7 @@ libc_ifunc_redirected (__redirect_strncmp, strncmp, # endif (hwcap2 & PPC_FEATURE2_ARCH_2_07) ? __strncmp_power8 - : (hwcap & PPC_FEATURE_HAS_VSX) + : (hwcap & PPC_FEATURE_ARCH_2_06) ? __strncmp_power7 : (hwcap & PPC_FEATURE_POWER4) ? __strncmp_power4 diff --git a/sysdeps/powerpc/powerpc64/multiarch/strncpy.c b/sysdeps/powerpc/powerpc64/multiarch/strncpy.c index 7da9def358..d4d3463bd1 100644 --- a/sysdeps/powerpc/powerpc64/multiarch/strncpy.c +++ b/sysdeps/powerpc/powerpc64/multiarch/strncpy.c @@ -43,7 +43,7 @@ libc_ifunc_redirected (__redirect_strncpy, strncpy, # endif (hwcap2 & PPC_FEATURE2_ARCH_2_07) ? __strncpy_power8 - : (hwcap & PPC_FEATURE_HAS_VSX) + : (hwcap & PPC_FEATURE_ARCH_2_06) ? __strncpy_power7 : __strncpy_ppc); diff --git a/sysdeps/powerpc/powerpc64/multiarch/strnlen.c b/sysdeps/powerpc/powerpc64/multiarch/strnlen.c index 264b7a752d..baf375a75a 100644 --- a/sysdeps/powerpc/powerpc64/multiarch/strnlen.c +++ b/sysdeps/powerpc/powerpc64/multiarch/strnlen.c @@ -31,7 +31,7 @@ extern __typeof (__strnlen) __strnlen_power8 attribute_hidden; libc_ifunc_redirected (__redirect___strnlen, __strnlen, (hwcap2 & PPC_FEATURE2_ARCH_2_07) ? __strnlen_power8 : - (hwcap & PPC_FEATURE_HAS_VSX) + (hwcap & PPC_FEATURE_ARCH_2_06) ? __strnlen_power7 : __strnlen_ppc); weak_alias (__strnlen, strnlen) diff --git a/sysdeps/powerpc/powerpc64/multiarch/strrchr.c b/sysdeps/powerpc/powerpc64/multiarch/strrchr.c index bb06b93d19..1c9eea1817 100644 --- a/sysdeps/powerpc/powerpc64/multiarch/strrchr.c +++ b/sysdeps/powerpc/powerpc64/multiarch/strrchr.c @@ -33,7 +33,7 @@ extern __typeof (strrchr) __strrchr_power8 attribute_hidden; libc_ifunc_redirected (__redirect_strrchr, strrchr, (hwcap2 & PPC_FEATURE2_ARCH_2_07) ? __strrchr_power8 : - (hwcap & PPC_FEATURE_HAS_VSX) + (hwcap & PPC_FEATURE_ARCH_2_06) ? __strrchr_power7 : __strrchr_ppc); weak_alias (strrchr, rindex) diff --git a/sysdeps/powerpc/powerpc64/multiarch/strstr.c b/sysdeps/powerpc/powerpc64/multiarch/strstr.c index bb0588844e..6582798dda 100644 --- a/sysdeps/powerpc/powerpc64/multiarch/strstr.c +++ b/sysdeps/powerpc/powerpc64/multiarch/strstr.c @@ -30,7 +30,7 @@ extern __typeof (strstr) __strstr_power7 attribute_hidden; /* Avoid DWARF definition DIE on ifunc symbol so that GDB can handle ifunc symbol properly. */ libc_ifunc_redirected (__redirect_strstr, strstr, - (hwcap & PPC_FEATURE_HAS_VSX) + (hwcap & PPC_FEATURE_ARCH_2_06) ? __strstr_power7 : __strstr_ppc); #endif -- 2.31.1 ^ permalink raw reply [flat|nested] 7+ messages in thread
* [PATCH 3/3] powerpc64: Add checks for Altivec and VSX in ifunc selection 2021-07-06 10:51 Anton Blanchard @ 2021-07-06 10:51 ` Anton Blanchard 0 siblings, 0 replies; 7+ messages in thread From: Anton Blanchard @ 2021-07-06 10:51 UTC (permalink / raw) To: tuliom; +Cc: libc-alpha We'd like to support processors without Altivec or VSX, so check the relevant hwcap bits before selecting them. --- sysdeps/powerpc/powerpc64/multiarch/bzero.c | 6 ++++-- sysdeps/powerpc/powerpc64/multiarch/memchr.c | 3 ++- sysdeps/powerpc/powerpc64/multiarch/memcmp.c | 3 ++- sysdeps/powerpc/powerpc64/multiarch/memcpy.c | 7 +++++-- sysdeps/powerpc/powerpc64/multiarch/memmove.c | 3 ++- sysdeps/powerpc/powerpc64/multiarch/mempcpy.c | 3 ++- sysdeps/powerpc/powerpc64/multiarch/memrchr.c | 3 ++- sysdeps/powerpc/powerpc64/multiarch/memset.c | 1 + sysdeps/powerpc/powerpc64/multiarch/rawmemchr.c | 3 ++- sysdeps/powerpc/powerpc64/multiarch/stpcpy.c | 9 ++++++--- sysdeps/powerpc/powerpc64/multiarch/strcasecmp.c | 3 ++- sysdeps/powerpc/powerpc64/multiarch/strcasestr.c | 3 ++- sysdeps/powerpc/powerpc64/multiarch/strcat.c | 6 ++++-- sysdeps/powerpc/powerpc64/multiarch/strchr.c | 3 ++- sysdeps/powerpc/powerpc64/multiarch/strchrnul.c | 3 ++- sysdeps/powerpc/powerpc64/multiarch/strcmp.c | 3 ++- sysdeps/powerpc/powerpc64/multiarch/strcpy.c | 9 ++++++--- sysdeps/powerpc/powerpc64/multiarch/strcspn.c | 3 ++- sysdeps/powerpc/powerpc64/multiarch/strlen.c | 9 ++++++--- sysdeps/powerpc/powerpc64/multiarch/strncase.c | 3 ++- sysdeps/powerpc/powerpc64/multiarch/strncat.c | 6 ++++-- sysdeps/powerpc/powerpc64/multiarch/strncmp.c | 3 ++- sysdeps/powerpc/powerpc64/multiarch/strnlen.c | 3 ++- sysdeps/powerpc/powerpc64/multiarch/strrchr.c | 3 ++- sysdeps/powerpc/powerpc64/multiarch/strspn.c | 3 ++- 25 files changed, 70 insertions(+), 34 deletions(-) diff --git a/sysdeps/powerpc/powerpc64/multiarch/bzero.c b/sysdeps/powerpc/powerpc64/multiarch/bzero.c index 660d7dc686..6275305b46 100644 --- a/sysdeps/powerpc/powerpc64/multiarch/bzero.c +++ b/sysdeps/powerpc/powerpc64/multiarch/bzero.c @@ -38,11 +38,13 @@ libc_ifunc (__bzero, && hwcap & PPC_FEATURE_HAS_VSX) ? __bzero_power10 : # endif - (hwcap2 & PPC_FEATURE2_ARCH_2_07) + (hwcap2 & PPC_FEATURE2_ARCH_2_07 + && hwcap & PPC_FEATURE_HAS_ALTIVEC) ? __bzero_power8 : (hwcap & PPC_FEATURE_HAS_VSX) ? __bzero_power7 : - (hwcap & PPC_FEATURE_ARCH_2_05) + (hwcap & PPC_FEATURE_ARCH_2_05 + && hwcap & PPC_FEATURE_HAS_ALTIVEC) ? __bzero_power6 : (hwcap & PPC_FEATURE_POWER4) ? __bzero_power4 diff --git a/sysdeps/powerpc/powerpc64/multiarch/memchr.c b/sysdeps/powerpc/powerpc64/multiarch/memchr.c index c24186689e..f40013e061 100644 --- a/sysdeps/powerpc/powerpc64/multiarch/memchr.c +++ b/sysdeps/powerpc/powerpc64/multiarch/memchr.c @@ -28,7 +28,8 @@ 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_ALTIVEC) ? __memchr_power8 : (hwcap & PPC_FEATURE_ARCH_2_06) ? __memchr_power7 diff --git a/sysdeps/powerpc/powerpc64/multiarch/memcmp.c b/sysdeps/powerpc/powerpc64/multiarch/memcmp.c index 99559bce26..89b56c103b 100644 --- a/sysdeps/powerpc/powerpc64/multiarch/memcmp.c +++ b/sysdeps/powerpc/powerpc64/multiarch/memcmp.c @@ -38,7 +38,8 @@ libc_ifunc_redirected (__redirect_memcmp, memcmp, && hwcap & PPC_FEATURE_HAS_VSX) ? __memcmp_power10 : #endif - (hwcap2 & PPC_FEATURE2_ARCH_2_07) + (hwcap2 & PPC_FEATURE2_ARCH_2_07 + && hwcap & PPC_FEATURE_HAS_ALTIVEC) ? __memcmp_power8 : (hwcap & PPC_FEATURE_ARCH_2_06) ? __memcmp_power7 diff --git a/sysdeps/powerpc/powerpc64/multiarch/memcpy.c b/sysdeps/powerpc/powerpc64/multiarch/memcpy.c index 53ab32ef26..684ee064f2 100644 --- a/sysdeps/powerpc/powerpc64/multiarch/memcpy.c +++ b/sysdeps/powerpc/powerpc64/multiarch/memcpy.c @@ -45,9 +45,12 @@ libc_ifunc (__libc_memcpy, (hwcap2 & PPC_FEATURE2_ARCH_3_1 && hwcap & PPC_FEATURE_HAS_VSX) ? __memcpy_power10 : # endif - ((hwcap2 & PPC_FEATURE2_ARCH_2_07) && use_cached_memopt) + (hwcap2 & PPC_FEATURE2_ARCH_2_07 + && hwcap & PPC_FEATURE_HAS_ALTIVEC + && use_cached_memopt) ? __memcpy_power8_cached : - (hwcap & PPC_FEATURE_HAS_VSX) + (hwcap & PPC_FEATURE_ARCH_2_06 + && hwcap & PPC_FEATURE_HAS_ALTIVEC) ? __memcpy_power7 : (hwcap & PPC_FEATURE_ARCH_2_06) ? __memcpy_a2 : diff --git a/sysdeps/powerpc/powerpc64/multiarch/memmove.c b/sysdeps/powerpc/powerpc64/multiarch/memmove.c index 637b2cbf7f..50253b4554 100644 --- a/sysdeps/powerpc/powerpc64/multiarch/memmove.c +++ b/sysdeps/powerpc/powerpc64/multiarch/memmove.c @@ -41,7 +41,8 @@ libc_ifunc (__libc_memmove, && hwcap & PPC_FEATURE_HAS_VSX) ? __memmove_power10 : #endif - (hwcap & PPC_FEATURE_HAS_VSX) + (hwcap & PPC_FEATURE_ARCH_2_06 + && hwcap & PPC_FEATURE_HAS_ALTIVEC) ? __memmove_power7 : __memmove_ppc); diff --git a/sysdeps/powerpc/powerpc64/multiarch/mempcpy.c b/sysdeps/powerpc/powerpc64/multiarch/mempcpy.c index b37e0f35b5..563095a5ec 100644 --- a/sysdeps/powerpc/powerpc64/multiarch/mempcpy.c +++ b/sysdeps/powerpc/powerpc64/multiarch/mempcpy.c @@ -33,7 +33,8 @@ extern __typeof (__mempcpy) __mempcpy_power7 attribute_hidden; /* Avoid DWARF definition DIE on ifunc symbol so that GDB can handle ifunc symbol properly. */ libc_ifunc_redirected (__redirect___mempcpy, __mempcpy, - (hwcap & PPC_FEATURE_HAS_VSX) + (hwcap & PPC_FEATURE_ARCH_2_06 + && hwcap & PPC_FEATURE_HAS_ALTIVEC) ? __mempcpy_power7 : __mempcpy_ppc); diff --git a/sysdeps/powerpc/powerpc64/multiarch/memrchr.c b/sysdeps/powerpc/powerpc64/multiarch/memrchr.c index 16bb6f0042..a8b985b06a 100644 --- a/sysdeps/powerpc/powerpc64/multiarch/memrchr.c +++ b/sysdeps/powerpc/powerpc64/multiarch/memrchr.c @@ -28,7 +28,8 @@ 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_ALTIVEC) ? __memrchr_power8 : (hwcap & PPC_FEATURE_ARCH_2_06) ? __memrchr_power7 diff --git a/sysdeps/powerpc/powerpc64/multiarch/memset.c b/sysdeps/powerpc/powerpc64/multiarch/memset.c index 056e911699..a2bc223bcc 100644 --- a/sysdeps/powerpc/powerpc64/multiarch/memset.c +++ b/sysdeps/powerpc/powerpc64/multiarch/memset.c @@ -48,6 +48,7 @@ libc_ifunc (__libc_memset, ? __memset_power10 : # endif (hwcap2 & PPC_FEATURE2_ARCH_2_07 + && hwcap & PPC_FEATURE_HAS_ALTIVEC && GLRO(dl_cache_line_size) == 128) ? __memset_power8 : (hwcap & PPC_FEATURE_ARCH_2_06 diff --git a/sysdeps/powerpc/powerpc64/multiarch/rawmemchr.c b/sysdeps/powerpc/powerpc64/multiarch/rawmemchr.c index b5d2d3a635..43eb459e02 100644 --- a/sysdeps/powerpc/powerpc64/multiarch/rawmemchr.c +++ b/sysdeps/powerpc/powerpc64/multiarch/rawmemchr.c @@ -38,7 +38,8 @@ libc_ifunc_redirected (__redirect___rawmemchr, __rawmemchr, (hwcap2 & PPC_FEATURE2_ARCH_3_1) && (hwcap & PPC_FEATURE_HAS_VSX) ? __rawmemchr_power10 : - (hwcap2 & PPC_FEATURE2_ARCH_3_00) + (hwcap2 & PPC_FEATURE2_ARCH_3_00 + && hwcap & PPC_FEATURE_HAS_VSX) ? __rawmemchr_power9 : # endif (hwcap & PPC_FEATURE_ARCH_2_06) diff --git a/sysdeps/powerpc/powerpc64/multiarch/stpcpy.c b/sysdeps/powerpc/powerpc64/multiarch/stpcpy.c index d4eb4285fc..5be413405e 100644 --- a/sysdeps/powerpc/powerpc64/multiarch/stpcpy.c +++ b/sysdeps/powerpc/powerpc64/multiarch/stpcpy.c @@ -32,12 +32,15 @@ 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_ALTIVEC) ? __stpcpy_power8 - : (hwcap & PPC_FEATURE_HAS_VSX) + : (hwcap & PPC_FEATURE_ARCH_2_06 + && hwcap & PPC_FEATURE_HAS_VSX) ? __stpcpy_power7 : __stpcpy_ppc); diff --git a/sysdeps/powerpc/powerpc64/multiarch/strcasecmp.c b/sysdeps/powerpc/powerpc64/multiarch/strcasecmp.c index 55ca6c85c4..21ce2d279b 100644 --- a/sysdeps/powerpc/powerpc64/multiarch/strcasecmp.c +++ b/sysdeps/powerpc/powerpc64/multiarch/strcasecmp.c @@ -27,7 +27,8 @@ 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_ALTIVEC) ? __strcasecmp_power8: (hwcap & PPC_FEATURE_ARCH_2_06) ? __strcasecmp_power7 diff --git a/sysdeps/powerpc/powerpc64/multiarch/strcasestr.c b/sysdeps/powerpc/powerpc64/multiarch/strcasestr.c index 7e4bd3b5ac..5bb3016022 100644 --- a/sysdeps/powerpc/powerpc64/multiarch/strcasestr.c +++ b/sysdeps/powerpc/powerpc64/multiarch/strcasestr.c @@ -27,7 +27,8 @@ 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_ALTIVEC) ? __strcasestr_power8 : __strcasestr_ppc); diff --git a/sysdeps/powerpc/powerpc64/multiarch/strcat.c b/sysdeps/powerpc/powerpc64/multiarch/strcat.c index 6d342324c4..d8d9870824 100644 --- a/sysdeps/powerpc/powerpc64/multiarch/strcat.c +++ b/sysdeps/powerpc/powerpc64/multiarch/strcat.c @@ -28,9 +28,11 @@ 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) + : (hwcap & PPC_FEATURE_ARCH_2_06 + && hwcap & PPC_FEATURE_HAS_VSX) ? __strcat_power7 : __strcat_ppc); #endif diff --git a/sysdeps/powerpc/powerpc64/multiarch/strchr.c b/sysdeps/powerpc/powerpc64/multiarch/strchr.c index 27c794c6b7..62b202baf9 100644 --- a/sysdeps/powerpc/powerpc64/multiarch/strchr.c +++ b/sysdeps/powerpc/powerpc64/multiarch/strchr.c @@ -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_ALTIVEC) ? __strchr_power8 : (hwcap & PPC_FEATURE_ARCH_2_06) ? __strchr_power7 diff --git a/sysdeps/powerpc/powerpc64/multiarch/strchrnul.c b/sysdeps/powerpc/powerpc64/multiarch/strchrnul.c index 4a07b4a242..40e529b9d9 100644 --- a/sysdeps/powerpc/powerpc64/multiarch/strchrnul.c +++ b/sysdeps/powerpc/powerpc64/multiarch/strchrnul.c @@ -28,7 +28,8 @@ extern __typeof (__strchrnul) __strchrnul_power8 attribute_hidden; /* Avoid DWARF definition DIE on ifunc symbol so that GDB can handle ifunc symbol properly. */ libc_ifunc (__strchrnul, - (hwcap2 & PPC_FEATURE2_ARCH_2_07) + (hwcap2 & PPC_FEATURE2_ARCH_2_07 + && hwcap & PPC_FEATURE_HAS_ALTIVEC) ? __strchrnul_power8 : (hwcap & PPC_FEATURE_ARCH_2_06) ? __strchrnul_power7 diff --git a/sysdeps/powerpc/powerpc64/multiarch/strcmp.c b/sysdeps/powerpc/powerpc64/multiarch/strcmp.c index 4b0b25fff6..8132682a99 100644 --- a/sysdeps/powerpc/powerpc64/multiarch/strcmp.c +++ b/sysdeps/powerpc/powerpc64/multiarch/strcmp.c @@ -35,7 +35,8 @@ extern __typeof (strcmp) __strcmp_power9 attribute_hidden; libc_ifunc_redirected (__redirect_strcmp, strcmp, # ifdef __LITTLE_ENDIAN__ - (hwcap2 & PPC_FEATURE2_ARCH_3_00) + (hwcap2 & PPC_FEATURE2_ARCH_3_00 + && hwcap & PPC_FEATURE_HAS_ALTIVEC) ? __strcmp_power9 : # endif (hwcap2 & PPC_FEATURE2_ARCH_2_07) diff --git a/sysdeps/powerpc/powerpc64/multiarch/strcpy.c b/sysdeps/powerpc/powerpc64/multiarch/strcpy.c index b733fa5a23..5af1d45cc1 100644 --- a/sysdeps/powerpc/powerpc64/multiarch/strcpy.c +++ b/sysdeps/powerpc/powerpc64/multiarch/strcpy.c @@ -32,12 +32,15 @@ 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) + (hwcap2 & PPC_FEATURE2_ARCH_2_07 + && hwcap & PPC_FEATURE_HAS_ALTIVEC) ? __strcpy_power8 - : (hwcap & PPC_FEATURE_HAS_VSX) + : (hwcap & PPC_FEATURE_ARCH_2_06 + && hwcap & PPC_FEATURE_HAS_VSX) ? __strcpy_power7 : __strcpy_ppc); #endif diff --git a/sysdeps/powerpc/powerpc64/multiarch/strcspn.c b/sysdeps/powerpc/powerpc64/multiarch/strcspn.c index 683aa104d7..8ba01c13b1 100644 --- a/sysdeps/powerpc/powerpc64/multiarch/strcspn.c +++ b/sysdeps/powerpc/powerpc64/multiarch/strcspn.c @@ -27,7 +27,8 @@ 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); diff --git a/sysdeps/powerpc/powerpc64/multiarch/strlen.c b/sysdeps/powerpc/powerpc64/multiarch/strlen.c index 0cd1c6faff..f1e28414e0 100644 --- a/sysdeps/powerpc/powerpc64/multiarch/strlen.c +++ b/sysdeps/powerpc/powerpc64/multiarch/strlen.c @@ -35,12 +35,15 @@ extern __typeof (__redirect_strlen) __strlen_power10 attribute_hidden; libc_ifunc (__libc_strlen, # ifdef __LITTLE_ENDIAN__ - (hwcap2 & PPC_FEATURE2_ARCH_3_1) + (hwcap2 & PPC_FEATURE2_ARCH_3_1 + && hwcap & PPC_FEATURE_HAS_VSX) ? __strlen_power10 : - (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_ALTIVEC) ? __strlen_power8 : (hwcap & PPC_FEATURE_ARCH_2_06) ? __strlen_power7 diff --git a/sysdeps/powerpc/powerpc64/multiarch/strncase.c b/sysdeps/powerpc/powerpc64/multiarch/strncase.c index 644046bd74..2802cf2c3f 100644 --- a/sysdeps/powerpc/powerpc64/multiarch/strncase.c +++ b/sysdeps/powerpc/powerpc64/multiarch/strncase.c @@ -27,7 +27,8 @@ 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_ALTIVEC) ? __strncasecmp_power8: (hwcap & PPC_FEATURE_ARCH_2_06) ? __strncasecmp_power7 diff --git a/sysdeps/powerpc/powerpc64/multiarch/strncat.c b/sysdeps/powerpc/powerpc64/multiarch/strncat.c index 0036fca91a..9ea294a72d 100644 --- a/sysdeps/powerpc/powerpc64/multiarch/strncat.c +++ b/sysdeps/powerpc/powerpc64/multiarch/strncat.c @@ -26,9 +26,11 @@ 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) + : (hwcap & PPC_FEATURE_ARCH_2_06 + && hwcap & PPC_FEATURE_HAS_VSX) ? __strncat_power7 : __strncat_ppc); #endif diff --git a/sysdeps/powerpc/powerpc64/multiarch/strncmp.c b/sysdeps/powerpc/powerpc64/multiarch/strncmp.c index 1f689e5c05..2d21122854 100644 --- a/sysdeps/powerpc/powerpc64/multiarch/strncmp.c +++ b/sysdeps/powerpc/powerpc64/multiarch/strncmp.c @@ -38,7 +38,8 @@ 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_ALTIVEC) ? __strncmp_power9 : # endif (hwcap2 & PPC_FEATURE2_ARCH_2_07) diff --git a/sysdeps/powerpc/powerpc64/multiarch/strnlen.c b/sysdeps/powerpc/powerpc64/multiarch/strnlen.c index baf375a75a..e68e9d9f88 100644 --- a/sysdeps/powerpc/powerpc64/multiarch/strnlen.c +++ b/sysdeps/powerpc/powerpc64/multiarch/strnlen.c @@ -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_ALTIVEC) ? __strnlen_power8 : (hwcap & PPC_FEATURE_ARCH_2_06) ? __strnlen_power7 diff --git a/sysdeps/powerpc/powerpc64/multiarch/strrchr.c b/sysdeps/powerpc/powerpc64/multiarch/strrchr.c index 1c9eea1817..7f0cf2a1b7 100644 --- a/sysdeps/powerpc/powerpc64/multiarch/strrchr.c +++ b/sysdeps/powerpc/powerpc64/multiarch/strrchr.c @@ -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_ALTIVEC) ? __strrchr_power8 : (hwcap & PPC_FEATURE_ARCH_2_06) ? __strrchr_power7 diff --git a/sysdeps/powerpc/powerpc64/multiarch/strspn.c b/sysdeps/powerpc/powerpc64/multiarch/strspn.c index 70167a176b..7613ab3d55 100644 --- a/sysdeps/powerpc/powerpc64/multiarch/strspn.c +++ b/sysdeps/powerpc/powerpc64/multiarch/strspn.c @@ -27,7 +27,8 @@ 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); -- 2.31.1 ^ permalink raw reply [flat|nested] 7+ messages in thread
end of thread, other threads:[~2021-08-06 19:50 UTC | newest] Thread overview: 7+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2021-07-27 5:47 [PATCH 1/3] powerpc64: Replace some PPC_FEATURE_HAS_VSX with PPC_FEATURE_ARCH_2_06 Anton Blanchard 2021-07-27 5:47 ` [PATCH 2/3] powerpc64: Check cacheline size before using optimised memset routines Anton Blanchard 2021-08-06 19:50 ` Tulio Magno Quites Machado Filho 2021-07-27 5:47 ` [PATCH 3/3] powerpc64: Add checks for Altivec and VSX in ifunc selection Anton Blanchard 2021-08-06 19:50 ` Tulio Magno Quites Machado Filho 2021-08-06 19:48 ` [PATCH 1/3] powerpc64: Replace some PPC_FEATURE_HAS_VSX with PPC_FEATURE_ARCH_2_06 Tulio Magno Quites Machado Filho -- strict thread matches above, loose matches on Subject: below -- 2021-07-06 10:51 Anton Blanchard 2021-07-06 10:51 ` [PATCH 3/3] powerpc64: Add checks for Altivec and VSX in ifunc selection Anton Blanchard
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).