aboutsummaryrefslogtreecommitdiff
path: root/sysdeps/powerpc/powerpc32/power4
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/powerpc32/power4
parent8438135d3481853e300e1043cfee3946dadb28b3 (diff)
downloadglibc-44829b3ddb64e99e37343a0f25b2c082387d31a5.zip
glibc-44829b3ddb64e99e37343a0f25b2c082387d31a5.tar.gz
glibc-44829b3ddb64e99e37343a0f25b2c082387d31a5.tar.bz2
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/powerpc32/power4')
-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
3 files changed, 8 insertions, 0 deletions
diff --git a/sysdeps/powerpc/powerpc32/power4/memcmp.S b/sysdeps/powerpc/powerpc32/power4/memcmp.S
index 814d2f2..f58e34a 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 8a929b2..b17d0e4 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 317523b..893b6ca 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>