This is the mail archive of the
libc-alpha@sourceware.org
mailing list for the glibc project.
Re: [PATCH] x86-64: Add memcmp/wmemcmp optimized with AVX2
On 06/01/2017 11:17 PM, H.J. Lu wrote:
> On Thu, Jun 1, 2017 at 2:00 PM, Florian Weimer <fweimer@redhat.com> wrote:
>> On 06/01/2017 10:57 PM, H.J. Lu wrote:
>>> I don't think it works with memcmp since return value depends on
>>> the first bytes which differs. Say
>>>
>>> ABCDE turns into EDCBDCBA
>>>
>>> If all bytes differs, we should only compare A, not EDCBDCBA.
>>
>> That's what the bswapq is for, it reverses the order of bytes.
>>
>
> bswapq doesn't help since cmpq compares 8 bytes but only
> the last byte matters. Comparing the highest byte give you the
> wrong result, like
>
> 0x36775382d1367753
> 0x7b8d14025b7b8d14
I don't understand. On big-endian, to compare two 8-byte arrays as if
by memcmp, you can certainly do a uint64_t load, compute the difference
as a 65-bit value, and return the integer sign of that.
The code I posted does that (modulo bugs, but you can get a working
patch from the old message I referenced). bswapq is needed to get an
equivalent to that big-endian load.
Thanks,
Florian