From: Konstantinos Margaritis Date: Mon, 12 Jul 2021 18:09:10 +0000 (+0300) Subject: add AVX2 specializations X-Git-Tag: v5.4.3+vectorscan~85 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=b42b1877128c0ffd041e7b5538be91373342d3b6;p=thirdparty%2Fvectorscan.git add AVX2 specializations --- diff --git a/src/util/match.hpp b/src/util/match.hpp index 74da50d8..ba72e2e9 100644 --- a/src/util/match.hpp +++ b/src/util/match.hpp @@ -56,6 +56,19 @@ const u8 *firstMatch<16>(const u8 *buf, typename SuperVector<16>::movemask_type } } +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) { @@ -86,6 +99,19 @@ const u8 *lastMatch<16>(const u8 *buf, typename SuperVector<16>::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) {