}
}
+template <>
+really_really_inline
+const u8 *firstMatch<32>(const u8 *buf, typename SuperVector<32>::movemask_type z) {
+ DEBUG_PRINTF("z 0x%08x\n", z);
+ if (unlikely(z != 0xffffffff)) {
+ u32 pos = ctz32(~z);
+ assert(pos < 32);
+ DEBUG_PRINTF("match @ pos %u\n", pos);
+ return buf + pos;
+ } else {
+ return NULL; // no match
+ }
+}
template <>
really_really_inline
const u8 *firstMatch<64>(const u8 *buf, typename SuperVector<64>::movemask_type z) {
}
}
+template<>
+really_really_inline
+const u8 *lastMatch<32>(const u8 *buf, typename SuperVector<32>::movemask_type z) {
+ if (unlikely(z != 0xffffffff)) {
+ u32 pos = clz32(~z);
+ DEBUG_PRINTF("buf=%p, pos=%u\n", buf, pos);
+ assert(pos < 32);
+ return buf + (31 - pos);
+ } else {
+ return NULL; // no match
+ }
+}
+
template <>
really_really_inline
const u8 *lastMatch<64>(const u8 *buf, typename SuperVector<64>::movemask_type z) {