about summary refs log tree commit diff
path: root/sysdeps/powerpc
diff options
context:
space:
mode:
authorNoah Goldstein <goldstein.w.n@gmail.com>2021-10-21 15:54:57 -0500
committerNoah Goldstein <goldstein.w.n@gmail.com>2021-10-26 16:51:29 -0500
commit44829b3ddb64e99e37343a0f25b2c082387d31a5 (patch)
treeba9565215210f530296dd4456816fc69f593e542 /sysdeps/powerpc
parent8438135d3481853e300e1043cfee3946dadb28b3 (diff)
downloadglibc-44829b3ddb64e99e37343a0f25b2c082387d31a5.tar.gz
glibc-44829b3ddb64e99e37343a0f25b2c082387d31a5.tar.xz
glibc-44829b3ddb64e99e37343a0f25b2c082387d31a5.zip
String: Add support for __memcmpeq() ABI on all targets
No bug.

This commit adds support for __memcmpeq() as a new ABI for all
targets. In this commit __memcmpeq() is implemented only as an alias
to the corresponding targets memcmp() implementation. __memcmpeq() is
added as a new symbol starting with GLIBC_2.35 and defined in string.h
with comments explaining its behavior. Basic tests that it is callable
and works where added in string/tester.c

As discussed in the proposal "Add new ABI '__memcmpeq()' to libc"
__memcmpeq() is essentially a reserved namespace for bcmp(). The means
is shares the same specifications as memcmp() except the return value
for non-equal byte sequences is any non-zero value. This is less
strict than memcmp()'s return value specification and can be better
optimized when a boolean return is all that is needed.

__memcmpeq() is meant to only be called by compilers if they can prove
that the return value of a memcmp() call is only used for its boolean
value.

All tests in string/tester.c passed. As well build succeeds on
x86_64-linux-gnu target.
Diffstat (limited to 'sysdeps/powerpc')
-rw-r--r--sysdeps/powerpc/powerpc32/405/memcmp.S1
-rw-r--r--sysdeps/powerpc/powerpc32/power4/memcmp.S1
-rw-r--r--sysdeps/powerpc/powerpc32/power4/multiarch/memcmp-power7.S3
-rw-r--r--sysdeps/powerpc/powerpc32/power4/multiarch/memcmp-ppc32.S4
-rw-r--r--sysdeps/powerpc/powerpc32/power7/memcmp.S1
-rw-r--r--sysdeps/powerpc/powerpc64/le/power10/memcmp.S1
-rw-r--r--sysdeps/powerpc/powerpc64/multiarch/memcmp-power10.S2
-rw-r--r--sysdeps/powerpc/powerpc64/multiarch/memcmp-power4.S2
-rw-r--r--sysdeps/powerpc/powerpc64/multiarch/memcmp-power7.S2
-rw-r--r--sysdeps/powerpc/powerpc64/multiarch/memcmp-power8.S2
-rw-r--r--sysdeps/powerpc/powerpc64/multiarch/memcmp-ppc64.c4
-rw-r--r--sysdeps/powerpc/powerpc64/power4/memcmp.S1
-rw-r--r--sysdeps/powerpc/powerpc64/power7/memcmp.S1
-rw-r--r--sysdeps/powerpc/powerpc64/power8/memcmp.S1
14 files changed, 26 insertions, 0 deletions
diff --git a/sysdeps/powerpc/powerpc32/405/memcmp.S b/sysdeps/powerpc/powerpc32/405/memcmp.S
index 6a6a54d90f..c2836040a7 100644
--- a/sysdeps/powerpc/powerpc32/405/memcmp.S
+++ b/sysdeps/powerpc/powerpc32/405/memcmp.S
@@ -126,3 +126,4 @@ L(st2):
 END (memcmp)
 libc_hidden_builtin_def (memcmp)
 weak_alias (memcmp,bcmp)
+strong_alias (memcmp, __memcmpeq)
diff --git a/sysdeps/powerpc/powerpc32/power4/memcmp.S b/sysdeps/powerpc/powerpc32/power4/memcmp.S
index 814d2f211d..f58e34aba5 100644
--- a/sysdeps/powerpc/powerpc32/power4/memcmp.S
+++ b/sysdeps/powerpc/powerpc32/power4/memcmp.S
@@ -1373,3 +1373,4 @@ END (memcmp)
 
 libc_hidden_builtin_def (memcmp)
 weak_alias (memcmp, bcmp)
+strong_alias (memcmp, __memcmpeq)
diff --git a/sysdeps/powerpc/powerpc32/power4/multiarch/memcmp-power7.S b/sysdeps/powerpc/powerpc32/power4/multiarch/memcmp-power7.S
index 8a929b2b44..b17d0e43b7 100644
--- a/sysdeps/powerpc/powerpc32/power4/multiarch/memcmp-power7.S
+++ b/sysdeps/powerpc/powerpc32/power4/multiarch/memcmp-power7.S
@@ -38,4 +38,7 @@
 #undef weak_alias
 #define weak_alias(a, b)
 
+#undef strong_alias
+#define strong_alias(a, b)
+
 #include <sysdeps/powerpc/powerpc32/power7/memcmp.S>
diff --git a/sysdeps/powerpc/powerpc32/power4/multiarch/memcmp-ppc32.S b/sysdeps/powerpc/powerpc32/power4/multiarch/memcmp-ppc32.S
index 317523b743..893b6cac9c 100644
--- a/sysdeps/powerpc/powerpc32/power4/multiarch/memcmp-ppc32.S
+++ b/sysdeps/powerpc/powerpc32/power4/multiarch/memcmp-ppc32.S
@@ -40,6 +40,10 @@
 # undef weak_alias
 # define weak_alias(a, b)					\
   .weak b ; b = __memcmp_ppc
+
+# undef strong_alias
+# define strong_alias(a, b)					\
+  .globl b ; b = __memcmp_ppc
 #endif
 
 #include <sysdeps/powerpc/powerpc32/power4/memcmp.S>
diff --git a/sysdeps/powerpc/powerpc32/power7/memcmp.S b/sysdeps/powerpc/powerpc32/power7/memcmp.S
index 8a19953e2d..f8deb4e32c 100644
--- a/sysdeps/powerpc/powerpc32/power7/memcmp.S
+++ b/sysdeps/powerpc/powerpc32/power7/memcmp.S
@@ -1373,3 +1373,4 @@ END (memcmp)
 
 libc_hidden_builtin_def (memcmp)
 weak_alias (memcmp, bcmp)
+strong_alias (memcmp, __memcmpeq)
diff --git a/sysdeps/powerpc/powerpc64/le/power10/memcmp.S b/sysdeps/powerpc/powerpc64/le/power10/memcmp.S
index 52f244e7e7..f81c73a29c 100644
--- a/sysdeps/powerpc/powerpc64/le/power10/memcmp.S
+++ b/sysdeps/powerpc/powerpc64/le/power10/memcmp.S
@@ -177,3 +177,4 @@ L(tail8):
 END (MEMCMP)
 libc_hidden_builtin_def (memcmp)
 weak_alias (memcmp, bcmp)
+strong_alias (memcmp, __memcmpeq)
diff --git a/sysdeps/powerpc/powerpc64/multiarch/memcmp-power10.S b/sysdeps/powerpc/powerpc64/multiarch/memcmp-power10.S
index 73a0debd4a..22399f143d 100644
--- a/sysdeps/powerpc/powerpc64/multiarch/memcmp-power10.S
+++ b/sysdeps/powerpc/powerpc64/multiarch/memcmp-power10.S
@@ -22,5 +22,7 @@
 #define libc_hidden_builtin_def(name)
 #undef weak_alias
 #define weak_alias(name,alias)
+#undef strong_alias
+#define strong_alias(name,alias)
 
 #include <sysdeps/powerpc/powerpc64/le/power10/memcmp.S>
diff --git a/sysdeps/powerpc/powerpc64/multiarch/memcmp-power4.S b/sysdeps/powerpc/powerpc64/multiarch/memcmp-power4.S
index d2b6c2f934..fe68912a3b 100644
--- a/sysdeps/powerpc/powerpc64/multiarch/memcmp-power4.S
+++ b/sysdeps/powerpc/powerpc64/multiarch/memcmp-power4.S
@@ -22,5 +22,7 @@
 #define libc_hidden_builtin_def(name)
 #undef weak_alias
 #define weak_alias(name,alias)
+#undef strong_alias
+#define strong_alias(name,alias)
 
 #include <sysdeps/powerpc/powerpc64/power4/memcmp.S>
diff --git a/sysdeps/powerpc/powerpc64/multiarch/memcmp-power7.S b/sysdeps/powerpc/powerpc64/multiarch/memcmp-power7.S
index 8671e930f0..5739471a7d 100644
--- a/sysdeps/powerpc/powerpc64/multiarch/memcmp-power7.S
+++ b/sysdeps/powerpc/powerpc64/multiarch/memcmp-power7.S
@@ -22,5 +22,7 @@
 #define libc_hidden_builtin_def(name)
 #undef weak_alias
 #define weak_alias(name,alias)
+#undef strong_alias
+#define strong_alias(name,alias)
 
 #include <sysdeps/powerpc/powerpc64/power7/memcmp.S>
diff --git a/sysdeps/powerpc/powerpc64/multiarch/memcmp-power8.S b/sysdeps/powerpc/powerpc64/multiarch/memcmp-power8.S
index eb2273d468..e6a93e88c6 100644
--- a/sysdeps/powerpc/powerpc64/multiarch/memcmp-power8.S
+++ b/sysdeps/powerpc/powerpc64/multiarch/memcmp-power8.S
@@ -22,5 +22,7 @@
 #define libc_hidden_builtin_def(name)
 #undef weak_alias
 #define weak_alias(name,alias)
+#undef strong_alias
+#define strong_alias(name,alias)
 
 #include <sysdeps/powerpc/powerpc64/power8/memcmp.S>
diff --git a/sysdeps/powerpc/powerpc64/multiarch/memcmp-ppc64.c b/sysdeps/powerpc/powerpc64/multiarch/memcmp-ppc64.c
index 1f9f219971..2bc5fa50d7 100644
--- a/sysdeps/powerpc/powerpc64/multiarch/memcmp-ppc64.c
+++ b/sysdeps/powerpc/powerpc64/multiarch/memcmp-ppc64.c
@@ -22,6 +22,10 @@
 #define weak_alias(name, aliasname) \
   extern __typeof (__memcmp_ppc) aliasname \
     __attribute__ ((weak, alias ("__memcmp_ppc")));
+#undef strong_alias
+#define strong_alias(name, aliasname) \
+  extern __typeof (__memcmp_ppc) aliasname \
+    __attribute__ ((alias ("__memcmp_ppc")));
 #if IS_IN (libc) && defined(SHARED)
 # undef libc_hidden_builtin_def
 # define libc_hidden_builtin_def(name) \
diff --git a/sysdeps/powerpc/powerpc64/power4/memcmp.S b/sysdeps/powerpc/powerpc64/power4/memcmp.S
index dc1be3a0d8..cc82be115f 100644
--- a/sysdeps/powerpc/powerpc64/power4/memcmp.S
+++ b/sysdeps/powerpc/powerpc64/power4/memcmp.S
@@ -1374,3 +1374,4 @@ L(duzeroLength):
 END (MEMCMP)
 libc_hidden_builtin_def (memcmp)
 weak_alias (memcmp, bcmp)
+strong_alias (memcmp, __memcmpeq)
diff --git a/sysdeps/powerpc/powerpc64/power7/memcmp.S b/sysdeps/powerpc/powerpc64/power7/memcmp.S
index bc034a55bc..3044f7ede9 100644
--- a/sysdeps/powerpc/powerpc64/power7/memcmp.S
+++ b/sysdeps/powerpc/powerpc64/power7/memcmp.S
@@ -1059,3 +1059,4 @@ L(duzeroLength):
 END (MEMCMP)
 libc_hidden_builtin_def (memcmp)
 weak_alias (memcmp, bcmp)
+strong_alias (memcmp, __memcmpeq)
diff --git a/sysdeps/powerpc/powerpc64/power8/memcmp.S b/sysdeps/powerpc/powerpc64/power8/memcmp.S
index b676b09a9b..0c6a154502 100644
--- a/sysdeps/powerpc/powerpc64/power8/memcmp.S
+++ b/sysdeps/powerpc/powerpc64/power8/memcmp.S
@@ -1442,3 +1442,4 @@ L(duzeroLength):
 END (MEMCMP)
 libc_hidden_builtin_def (memcmp)
 weak_alias (memcmp, bcmp)
+strong_alias (memcmp, __memcmpeq)