[PATCH 10/17] string: Improve generic memchr
Adhemerval Zanella Netto
adhemerval.zanella@linaro.org
Mon Sep 19 19:17:00 GMT 2022
On 03/09/22 00:47, Noah Goldstein wrote:
>>
>> - longword_ptr = (const longword *) char_ptr;
>> + /* Compute the address of the word containing the last byte. */
>> + const op_t *lword = word_containing (lbyte);
>>
>> - /* All these elucidatory comments refer to 4-byte longwords,
>> - but the theory applies equally well to any size longwords. */
>> + /* Read the first word, but munge it so that bytes before the array
>> + will not match goal. */
>> + const op_t * word_ptr = word_containing (s);
>> + op_t word = (*word_ptr | before_mask) ^ (repeated_c & before_mask);
>
> Why do you xor with repeated_c & before_mask here?
>
> Doesn't the has_eq(word, repeated_c) do that?
For the case of c_in being 0xff, since for this case or with before_mask
will make has_eq to return early. The test-memchr does not trigger it,
but test-memccpy does fail without the XOR.
More information about the Libc-alpha
mailing list