diff options
author | Noah Goldstein <goldstein.w.n@gmail.com> | 2021-10-21 15:54:57 -0500 |
---|---|---|
committer | Noah Goldstein <goldstein.w.n@gmail.com> | 2021-10-26 16:51:29 -0500 |
commit | 44829b3ddb64e99e37343a0f25b2c082387d31a5 (patch) | |
tree | ba9565215210f530296dd4456816fc69f593e542 /sysdeps/powerpc | |
parent | 8438135d3481853e300e1043cfee3946dadb28b3 (diff) | |
download | glibc-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')
-rw-r--r-- | sysdeps/powerpc/powerpc32/405/memcmp.S | 1 | ||||
-rw-r--r-- | sysdeps/powerpc/powerpc32/power4/memcmp.S | 1 | ||||
-rw-r--r-- | sysdeps/powerpc/powerpc32/power4/multiarch/memcmp-power7.S | 3 | ||||
-rw-r--r-- | sysdeps/powerpc/powerpc32/power4/multiarch/memcmp-ppc32.S | 4 | ||||
-rw-r--r-- | sysdeps/powerpc/powerpc32/power7/memcmp.S | 1 | ||||
-rw-r--r-- | sysdeps/powerpc/powerpc64/le/power10/memcmp.S | 1 | ||||
-rw-r--r-- | sysdeps/powerpc/powerpc64/multiarch/memcmp-power10.S | 2 | ||||
-rw-r--r-- | sysdeps/powerpc/powerpc64/multiarch/memcmp-power4.S | 2 | ||||
-rw-r--r-- | sysdeps/powerpc/powerpc64/multiarch/memcmp-power7.S | 2 | ||||
-rw-r--r-- | sysdeps/powerpc/powerpc64/multiarch/memcmp-power8.S | 2 | ||||
-rw-r--r-- | sysdeps/powerpc/powerpc64/multiarch/memcmp-ppc64.c | 4 | ||||
-rw-r--r-- | sysdeps/powerpc/powerpc64/power4/memcmp.S | 1 | ||||
-rw-r--r-- | sysdeps/powerpc/powerpc64/power7/memcmp.S | 1 | ||||
-rw-r--r-- | sysdeps/powerpc/powerpc64/power8/memcmp.S | 1 |
14 files changed, 26 insertions, 0 deletions
diff --git a/sysdeps/powerpc/powerpc32/405/memcmp.S b/sysdeps/powerpc/powerpc32/405/memcmp.S index 6a6a54d..c283604 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 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> diff --git a/sysdeps/powerpc/powerpc32/power7/memcmp.S b/sysdeps/powerpc/powerpc32/power7/memcmp.S index 8a19953..f8deb4e 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 52f244e..f81c73a 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 73a0deb..22399f1 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 d2b6c2f..fe68912 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 8671e93..5739471 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 eb2273d..e6a93e8 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 1f9f219..2bc5fa5 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 dc1be3a..cc82be1 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 bc034a5..3044f7e 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 b676b09..0c6a154 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) |