This is the mail archive of the
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 <firstname.lastname@example.org> 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
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.