String: Add support for __memcmpeq() ABI on all targets
authorNoah Goldstein <goldstein.w.n@gmail.com>
Thu, 21 Oct 2021 20:54:57 +0000 (15:54 -0500)
committerNoah Goldstein <goldstein.w.n@gmail.com>
Tue, 26 Oct 2021 21:51:29 +0000 (16:51 -0500)
commit44829b3ddb64e99e37343a0f25b2c082387d31a5
treeba9565215210f530296dd4456816fc69f593e542
parent8438135d3481853e300e1043cfee3946dadb28b3
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.
64 files changed:
string/Versions
string/memcmp.c
string/string.h
string/tester.c
sysdeps/aarch64/memcmp.S
sysdeps/csky/abiv2/memcmp.S
sysdeps/i386/i686/memcmp.S
sysdeps/i386/i686/multiarch/memcmp-ia32.S
sysdeps/i386/i686/multiarch/memcmp.c
sysdeps/i386/memcmp.S
sysdeps/ia64/memcmp.S
sysdeps/mach/hurd/i386/libc.abilist
sysdeps/powerpc/powerpc32/405/memcmp.S
sysdeps/powerpc/powerpc32/power4/memcmp.S
sysdeps/powerpc/powerpc32/power4/multiarch/memcmp-power7.S
sysdeps/powerpc/powerpc32/power4/multiarch/memcmp-ppc32.S
sysdeps/powerpc/powerpc32/power7/memcmp.S
sysdeps/powerpc/powerpc64/le/power10/memcmp.S
sysdeps/powerpc/powerpc64/multiarch/memcmp-power10.S
sysdeps/powerpc/powerpc64/multiarch/memcmp-power4.S
sysdeps/powerpc/powerpc64/multiarch/memcmp-power7.S
sysdeps/powerpc/powerpc64/multiarch/memcmp-power8.S
sysdeps/powerpc/powerpc64/multiarch/memcmp-ppc64.c
sysdeps/powerpc/powerpc64/power4/memcmp.S
sysdeps/powerpc/powerpc64/power7/memcmp.S
sysdeps/powerpc/powerpc64/power8/memcmp.S
sysdeps/s390/memcmp-z900.S
sysdeps/s390/memcmp.c
sysdeps/sparc/sparc64/memcmp.S
sysdeps/unix/sysv/linux/aarch64/libc.abilist
sysdeps/unix/sysv/linux/alpha/libc.abilist
sysdeps/unix/sysv/linux/arc/libc.abilist
sysdeps/unix/sysv/linux/arm/be/libc.abilist
sysdeps/unix/sysv/linux/arm/le/libc.abilist
sysdeps/unix/sysv/linux/csky/libc.abilist
sysdeps/unix/sysv/linux/hppa/libc.abilist
sysdeps/unix/sysv/linux/i386/libc.abilist
sysdeps/unix/sysv/linux/ia64/libc.abilist
sysdeps/unix/sysv/linux/m68k/coldfire/libc.abilist
sysdeps/unix/sysv/linux/m68k/m680x0/libc.abilist
sysdeps/unix/sysv/linux/microblaze/be/libc.abilist
sysdeps/unix/sysv/linux/microblaze/le/libc.abilist
sysdeps/unix/sysv/linux/mips/mips32/fpu/libc.abilist
sysdeps/unix/sysv/linux/mips/mips32/nofpu/libc.abilist
sysdeps/unix/sysv/linux/mips/mips64/n32/libc.abilist
sysdeps/unix/sysv/linux/mips/mips64/n64/libc.abilist
sysdeps/unix/sysv/linux/nios2/libc.abilist
sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libc.abilist
sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libc.abilist
sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libc.abilist
sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libc.abilist
sysdeps/unix/sysv/linux/riscv/rv32/libc.abilist
sysdeps/unix/sysv/linux/riscv/rv64/libc.abilist
sysdeps/unix/sysv/linux/s390/s390-32/libc.abilist
sysdeps/unix/sysv/linux/s390/s390-64/libc.abilist
sysdeps/unix/sysv/linux/sh/be/libc.abilist
sysdeps/unix/sysv/linux/sh/le/libc.abilist
sysdeps/unix/sysv/linux/sparc/sparc32/libc.abilist
sysdeps/unix/sysv/linux/sparc/sparc64/libc.abilist
sysdeps/unix/sysv/linux/x86_64/64/libc.abilist
sysdeps/unix/sysv/linux/x86_64/x32/libc.abilist
sysdeps/x86_64/memcmp.S
sysdeps/x86_64/multiarch/memcmp-sse2.S
sysdeps/x86_64/multiarch/memcmp.c