40 uint8_t mpm_bitarray[
ctx->mpm_bitarray_size];
41 memset(mpm_bitarray, 0,
ctx->mpm_bitarray_size);
43 const uint8_t* restrict xlate =
ctx->translate_table;
46 int c = xlate[buf[0]];
48 if (buflen >= (4 +
EXTRA) && ((uintptr_t)buf & 0x3) == 0) {
53 while ((i +
EXTRA) < (buflen & ~0x3)) {
55 index =
SINDEX(index, state);
56 state =
SLOAD(state_table + index + c);
57 c = xlate[
BYTE1(data)];
59 matches = CheckMatch(
ctx, pmq, buf, buflen, state, i, matches, mpm_bitarray);
62 index =
SINDEX(index, state);
63 state =
SLOAD(state_table + index + c);
64 c = xlate[
BYTE2(data)];
66 matches = CheckMatch(
ctx, pmq, buf, buflen, state, i, matches, mpm_bitarray);
69 index =
SINDEX(index, state);
70 state =
SLOAD(state_table + index + c);
71 c = xlate[
BYTE3(data)];
73 matches = CheckMatch(
ctx, pmq, buf, buflen, state, i, matches, mpm_bitarray);
77 index =
SINDEX(index, state);
78 state =
SLOAD(state_table + index + c);
79 c = xlate[
BYTE0(data)];
81 matches = CheckMatch(
ctx, pmq, buf, buflen, state, i, matches, mpm_bitarray);
87 for (; i < buflen; i++) {
89 index =
SINDEX(index, state);
90 state =
SLOAD(state_table + index + c);
94 matches = CheckMatch(
ctx, pmq, buf, buflen, state, i, matches, mpm_bitarray);