]> git.ipfire.org Git - thirdparty/glibc.git/commitdiff
powerpc64: Restrict memset implementation that require fixed cache line size
authorTulio Magno Quites Machado Filho <tuliom@linux.ibm.com>
Fri, 2 Oct 2020 00:08:33 +0000 (21:08 -0300)
committerTulio Magno Quites Machado Filho <tuliom@linux.ibm.com>
Wed, 17 Feb 2021 16:38:29 +0000 (13:38 -0300)
sysdeps/powerpc/powerpc64/multiarch/bzero.c
sysdeps/powerpc/powerpc64/multiarch/memset.c

index c3f819ff48d6d51fe9e9ee3cec4121c50d2bf9eb..305b01537f152b24f8dd3848a60eb52e7044e02f 100644 (file)
@@ -29,15 +29,18 @@ extern __typeof (bzero) __bzero_power7 attribute_hidden;
 extern __typeof (bzero) __bzero_power8 attribute_hidden;
 
 libc_ifunc (__bzero,
-            (hwcap2 & PPC_FEATURE2_ARCH_2_07)
-            ? __bzero_power8 :
-             (hwcap & PPC_FEATURE_HAS_VSX)
-             ? __bzero_power7 :
-               (hwcap & PPC_FEATURE_ARCH_2_05)
-               ? __bzero_power6 :
-                 (hwcap & PPC_FEATURE_POWER4)
-                 ? __bzero_power4
-            : __bzero_ppc);
+           (hwcap2 & PPC_FEATURE2_ARCH_2_07
+            && __GLRO(dl_cache_line_size) == 0x80)
+           ? __bzero_power8 :
+           (hwcap & PPC_FEATURE_HAS_VSX
+            && __GLRO(dl_cache_line_size) == 0x80)
+           ? __bzero_power7 :
+           (hwcap & PPC_FEATURE_ARCH_2_05
+            && __GLRO(dl_cache_line_size) == 0x80)
+           ? __bzero_power6 :
+           (hwcap & PPC_FEATURE_POWER4 && __GLRO(dl_cache_line_size) == 0x80)
+           ? __bzero_power4
+           : __bzero_ppc);
 
 weak_alias (__bzero, bzero)
 #endif
index d483f66f2744971c0446fa1bb1c8d8e66fc656cc..dbc737b5d57b759cf1c7728d04b92f1efd7eb262 100644 (file)
@@ -37,15 +37,19 @@ extern __typeof (__redirect_memset) __memset_power8 attribute_hidden;
 /* Avoid DWARF definition DIE on ifunc symbol so that GDB can handle
    ifunc symbol properly.  */
 libc_ifunc (__libc_memset,
-            (hwcap2 & PPC_FEATURE2_ARCH_2_07)
-            ? __memset_power8 :
-             (hwcap & PPC_FEATURE_HAS_VSX)
-             ? __memset_power7 :
-               (hwcap & PPC_FEATURE_ARCH_2_05)
-               ? __memset_power6 :
-                 (hwcap & PPC_FEATURE_POWER4)
-                 ? __memset_power4
-            : __memset_ppc);
+           (hwcap2 & PPC_FEATURE2_ARCH_2_07
+            && __GLRO(dl_cache_line_size) == 0x80)
+           ? __memset_power8 :
+           (hwcap & PPC_FEATURE_HAS_VSX
+            && __GLRO(dl_cache_line_size) == 0x80)
+           ? __memset_power7 :
+           (hwcap & PPC_FEATURE_ARCH_2_05
+            && __GLRO(dl_cache_line_size) == 0x80)
+           ? __memset_power6 :
+           (hwcap & PPC_FEATURE_POWER4
+            && __GLRO(dl_cache_line_size) == 0x80)
+           ? __memset_power4
+           : __memset_ppc);
 
 #undef memset
 strong_alias (__libc_memset, memset);