mirror of
https://sourceware.org/git/glibc.git
synced 2025-07-30 22:43:12 +03:00
x86-64: memcmp-avx2-movbe.S needs saturating subtraction [BZ #21662]
This code: L(between_2_3): /* Load as big endian with overlapping loads and bswap to avoid branches. */ movzwl -2(%rdi, %rdx), %eax movzwl -2(%rsi, %rdx), %ecx shll $16, %eax shll $16, %ecx movzwl (%rdi), %edi movzwl (%rsi), %esi orl %edi, %eax orl %esi, %ecx bswap %eax bswap %ecx subl %ecx, %eax ret needs a saturating subtract because the full register is used. With this commit, only the lower 24 bits of the register are used, so a regular subtraction suffices. The test case change adds coverage for these kinds of bugs.
This commit is contained in:
@ -441,11 +441,12 @@ check1 (void)
|
||||
|
||||
n = 116;
|
||||
for (size_t i = 0; i < n; i++)
|
||||
{
|
||||
exp_result = SIMPLE_MEMCMP (s1 + i, s2 + i, n - i);
|
||||
FOR_EACH_IMPL (impl, 0)
|
||||
check_result (impl, s1 + i, s2 + i, n - i, exp_result);
|
||||
}
|
||||
for (size_t len = 0; len <= n - i; ++len)
|
||||
{
|
||||
exp_result = SIMPLE_MEMCMP (s1 + i, s2 + i, len);
|
||||
FOR_EACH_IMPL (impl, 0)
|
||||
check_result (impl, s1 + i, s2 + i, len, exp_result);
|
||||
}
|
||||
}
|
||||
|
||||
/* This test checks that memcmp doesn't overrun buffers. */
|
||||
|
Reference in New Issue
Block a user