[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