mirror of
https://sourceware.org/git/glibc.git
synced 2025-08-07 06:43:00 +03:00
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.
This commit is contained in:
@@ -1449,6 +1449,19 @@ test_bcmp (void)
|
||||
check(bcmp("abc", "def", 0) == 0, 8); /* Zero count. */
|
||||
}
|
||||
|
||||
static void
|
||||
test_memcmpeq (void)
|
||||
{
|
||||
it = "__memcmpeq";
|
||||
check (__memcmpeq ("a", "a", 1) == 0, 1); /* Identity. */
|
||||
check (__memcmpeq ("abc", "abc", 3) == 0, 2); /* Multicharacter. */
|
||||
check (__memcmpeq ("abcd", "abce", 4) != 0, 3); /* Honestly unequal. */
|
||||
check (__memcmpeq ("abce", "abcd", 4) != 0, 4);
|
||||
check (__memcmpeq ("alph", "beta", 4) != 0, 5);
|
||||
check (__memcmpeq ("abce", "abcd", 3) == 0, 6); /* Count limited. */
|
||||
check (__memcmpeq ("abc", "def", 0) == 0, 8); /* Zero count. */
|
||||
}
|
||||
|
||||
static void
|
||||
test_strerror (void)
|
||||
{
|
||||
@@ -1611,6 +1624,9 @@ main (void)
|
||||
/* bcmp - somewhat like memcmp. */
|
||||
test_bcmp ();
|
||||
|
||||
/* __memcmpeq - somewhat like memcmp. */
|
||||
test_memcmpeq ();
|
||||
|
||||
/* strndup. */
|
||||
test_strndup ();
|
||||
|
||||
|
Reference in New Issue
Block a user