15 #include <linux/types.h>
16 #include <linux/string.h>
17 #include <linux/module.h>
24 const char *last_byte_ptr;
29 if (__builtin_expect(n == 0, 0)) {
39 goal = 0x0101010101010101ULL * (
uint8_t) c;
44 before_mask =
MASK(s_int);
45 v = (*p | before_mask) ^ (goal & before_mask);
48 last_byte_ptr = (
const char *)s + n - 1;
53 while ((bits = __insn_v1cmpeq(v, goal)) == 0) {
54 if (__builtin_expect(p == last_word_ptr, 0)) {
66 ret = ((
char *)p) + (
CFZ(bits) >> 3);
67 return (ret <= last_byte_ptr) ? ret :
NULL;