Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

New release 5.4.6 #86

Merged
merged 101 commits into from
Jan 21, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
101 commits
Select commit Hold shift + click to select a range
1f55d41
add initial ppc64el support
markos Jan 25, 2021
f1d781f
test commit from VM and CMakelists add power support
Apostolos00tapsas Sep 23, 2021
079f351
ppc64el arcitecture added in CMakelists file
Apostolos00tapsas Sep 23, 2021
0078c28
implementations for powerpc64el architecture
Sep 24, 2021
90d3db1
update powerpc simd util file functions
Sep 27, 2021
2231f7c
compile fixes for vsc port
Apostolos00tapsas Oct 6, 2021
7888dd4
WIP: Power VSX support almost completed
Oct 14, 2021
4d2acd5
Supervector vsh* added
Oct 14, 2021
d0a4125
blockSigleMask implementations for ARCH_PPC64 added
Oct 14, 2021
ba4472a
trufle and shufle implementations for ARCH_PPC64EL
Oct 14, 2021
b1f53f8
match file for ARCH_PPC64EL added
Oct 14, 2021
e084c2d
SuperVector vsh* implementations
Oct 15, 2021
558313a
SuperVector operators fixes and simd_utils low/high64 functions imple…
Oct 18, 2021
2b1db73
WIP: simd & bitutils files finctions fixes
Oct 21, 2021
7184ce9
expand128 implementation was changed to be like arm's
Oct 22, 2021
5abda15
expand128 bugs fixed
Oct 22, 2021
b53b0a0
test for movemask and shuffle cases added
Oct 22, 2021
24f149f
print functions keyword renamed
Oct 22, 2021
5730172
print functions missing keywords replaced
Oct 22, 2021
d43d673
SuperVector shuffle implementation and test function optimized
Oct 22, 2021
1eb3b19
Shuffle simd and SuperVector implementetions as well as their test re…
Oct 24, 2021
bf54aae
Special case for Shuffle test added as well as comments for respectiv…
Oct 26, 2021
3f17750
nits
Oct 26, 2021
8be8ed3
added refactored vermicelli_simd.cpp implementation
markos Oct 27, 2021
70ddb11
add to CMake
markos Oct 27, 2021
6e5a835
move casemask helper functions to separate header
markos Oct 27, 2021
7041457
nits
markos Oct 27, 2021
8ae6e61
renamed matcher functions, added new ones for Vermicelli
markos Oct 27, 2021
dd45bf0
add new include file
markos Oct 27, 2021
d9d39d4
prints commants and formating fixes
Nov 1, 2021
f4a490a
remove unneeded header
markos Nov 1, 2021
44dc75a
complete refactoring and unification of Vermicelli functions
markos Nov 1, 2021
7b65b29
add arm vector types in union, avoid -flax-conversions, fix castings
markos Oct 19, 2021
9abfdca
add Vermicelli/RVermicelli to microbenchmark utility
markos Nov 1, 2021
2fa947a
added refactored vermicelli_simd.cpp implementation
markos Oct 27, 2021
4a569af
add to CMake
markos Oct 27, 2021
713aaef
move casemask helper functions to separate header
markos Oct 27, 2021
16e5e2a
nits
markos Oct 27, 2021
5eabced
renamed matcher functions, added new ones for Vermicelli
markos Oct 27, 2021
bc1a112
add new include file
markos Oct 27, 2021
d47641c
remove unneeded header
markos Nov 1, 2021
f6fd845
complete refactoring and unification of Vermicelli functions
markos Nov 1, 2021
d55c74b
fix arm matchers
markos Nov 1, 2021
59505f9
remove vermicelli_sse.h
markos Nov 1, 2021
16f3cca
add vermicelli.hpp to includes
markos Nov 1, 2021
869d2bd
refactor vermicelliDoubleMaskedExec()
markos Nov 2, 2021
210295a
remove vermicelli.h and replace it with vermicelli.hpp
markos Nov 2, 2021
24fa540
add len parameter and mask, fixes corner cases on AVX512
markos Nov 5, 2021
ba90cde
SuperVector constructors as well as andnot implementation fixed
Nov 5, 2021
82bea29
simd_utils functions fixed
Nov 8, 2021
dcf6b59
split vermicelli block implementations per arch
markos Nov 8, 2021
41b98d7
add len parameter to arm matchers as well
markos Nov 8, 2021
942deb7
test for load m128 from u64a function added
Nov 10, 2021
4114b8a
SuperVector opandnot test enriched
Nov 10, 2021
7e7c50b
Merge pull request #78 from VectorCamp/feature/refactor-vermicelli
markos Nov 12, 2021
e09d867
resolving conficts after merging
Nov 13, 2021
54158a1
vermicelli and match implementations for ppc64el added
Nov 13, 2021
0287724
WIP:tracking last bugs in failing tests for release build
Nov 16, 2021
e13bfec
found and solved very hard to track bug of intrinsic function palignr…
Nov 24, 2021
bfc8da1
Removed accidentaly included header file
Nov 24, 2021
35e5369
*fix palignr implementation for VSX Release mode
Nov 24, 2021
725a8d8
Removed duplicates
Nov 24, 2021
cd95b1a
use __builtin_constant_p() instead for arm as well
markos Nov 25, 2021
00384c9
nit
markos Nov 25, 2021
7ceca78
fix unit-internal release builds using __builtin_constant_p() as well
markos Nov 25, 2021
8dec4e8
Merge pull request #79 from Apostolos00tapsas/feature/complete-power9…
markos Nov 25, 2021
81fba99
fix SVE2 build after the changes
markos Nov 25, 2021
6f20276
Merge pull request #80 from VectorCamp/bugfix/fix-SVE2-build
markos Nov 25, 2021
404a0ab
fix miscompilation with clang
markos Dec 1, 2021
7d600c4
bump base requirements to SSE4.2
markos Dec 1, 2021
0221dc1
fix misompilations with clang++, as it is more strict
markos Dec 1, 2021
1f4143d
rework CMakeLists.txt to ensure it works with clang
markos Dec 1, 2021
5d23e6d
set -msse4.2 only on Intel
markos Dec 1, 2021
4aa3227
use same definition of the union for all types
markos Dec 2, 2021
5aae719
fix build with clang, in particular VSX uses long long instead of int…
markos Dec 2, 2021
451d539
Power does not use -march
markos Dec 2, 2021
6b36402
don't fail if mtune does not return a valid configuration
markos Dec 2, 2021
7cad514
clang is more strict
markos Dec 2, 2021
07ce6d8
fix build failures with clang on x86, make sure compilation works on …
markos Dec 3, 2021
290eabb
fix compilation with clang and some incomplete/wrong implementations …
markos Dec 6, 2021
d3f0d8d
update Jenkinsfile for all configurations
markos Dec 6, 2021
deeb113
lower gcc minver to 9 to enable building on Ubuntu 20 LTS
markos Dec 6, 2021
fec557c
fix wrong castings for NEON
markos Dec 6, 2021
fd2eabd
fix clang-release-arm compilation
markos Dec 7, 2021
4589f17
minor fixes
markos Dec 7, 2021
1718e33
Merge pull request #81 from VectorCamp/feature/add-clang-support
markos Dec 7, 2021
467db4a
Minor changes to enable compilation on Mac M1
markos Dec 11, 2021
90018f9
Merge pull request #82 from VectorCamp/feature/add-macos-support
markos Dec 11, 2021
8c71238
Initial attempt at debian packaging, modified hyperscan packaging
markos Dec 22, 2021
a315fae
fix DEB_CMAKE_FLAGS depending on DEB_HOST_ARCH
markos Dec 22, 2021
4fdfb8c
enable FAT_RUNTIME
markos Jan 18, 2022
f304c3e
defer setting arch/tune flags for FAT_RUNTIME
markos Jan 18, 2022
1155a92
add our copyrights, minor fixes
markos Jan 19, 2022
4c32b36
remove preinst script, not needed as we bumped our deps
markos Jan 19, 2022
312ae89
add sse4.2-support package to enforce such dependency
markos Jan 19, 2022
f5960c8
add ITP bug report
markos Jan 20, 2022
2eaf6e5
fix description, remove sse4.2-support from b-depends
markos Jan 20, 2022
0949576
change source format to native, as we include debian folder
markos Jan 20, 2022
6cd6957
Merge pull request #85 from VectorCamp/feature/add-debian-package
markos Jan 21, 2022
666e1c4
keep debian folder in a separate branch
markos Jan 21, 2022
f9b6526
Merge pull request #87 from VectorCamp/feature/move-debian-package-to…
markos Jan 21, 2022
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
333 changes: 200 additions & 133 deletions CMakeLists.txt

Large diffs are not rendered by default.

606 changes: 587 additions & 19 deletions Jenkinsfile

Large diffs are not rendered by default.

28 changes: 28 additions & 0 deletions benchmarks/benchmarks.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -191,6 +191,34 @@ int main(){
);
}

for (size_t i = 0; i < std::size(sizes); i++) {
MicroBenchmark bench("Vermicelli", sizes[i]);
run_benchmarks(sizes[i], MAX_LOOPS / sizes[i], matches[m], false, bench,
[&](MicroBenchmark &b) {
b.chars.set('a');
ue2::truffleBuildMasks(b.chars, (u8 *)&b.lo, (u8 *)&b.hi);
memset(b.buf.data(), 'b', b.size);
},
[&](MicroBenchmark &b) {
return vermicelliExec('a', 'b', b.buf.data(), b.buf.data() + b.size);
}
);
}

for (size_t i = 0; i < std::size(sizes); i++) {
MicroBenchmark bench("Reverse Vermicelli", sizes[i]);
run_benchmarks(sizes[i], MAX_LOOPS / sizes[i], matches[m], true, bench,
[&](MicroBenchmark &b) {
b.chars.set('a');
ue2::truffleBuildMasks(b.chars, (u8 *)&b.lo, (u8 *)&b.hi);
memset(b.buf.data(), 'b', b.size);
},
[&](MicroBenchmark &b) {
return rvermicelliExec('a', 'b', b.buf.data(), b.buf.data() + b.size);
}
);
}

for (size_t i = 0; i < std::size(sizes); i++) {
//we imitate the noodle unit tests
std::string str;
Expand Down
1 change: 1 addition & 0 deletions benchmarks/benchmarks.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@
#include "nfa/shufticompile.h"
#include "nfa/truffle.h"
#include "nfa/trufflecompile.h"
#include "nfa/vermicelli.hpp"
#include "hwlm/noodle_build.h"
#include "hwlm/noodle_engine.h"
#include "hwlm/noodle_internal.h"
Expand Down
36 changes: 28 additions & 8 deletions cmake/arch.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,9 @@ elseif (HAVE_C_INTRIN_H)
elseif (HAVE_C_ARM_NEON_H)
set (INTRIN_INC_H "arm_neon.h")
set (FAT_RUNTIME OFF)
elseif (HAVE_C_PPC64EL_ALTIVEC_H)
set (INTRIN_INC_H "altivec.h")
set (FAT_RUNTIME OFF)
else()
message (FATAL_ERROR "No intrinsics header found")
endif ()
Expand Down Expand Up @@ -85,7 +88,7 @@ if (FAT_RUNTIME)
set (CMAKE_REQUIRED_FLAGS "${CMAKE_C_FLAGS} ${EXTRA_C_FLAGS} ${SKYLAKE_FLAG}")
endif (BUILD_AVX512VBMI)
elseif (BUILD_AVX2)
set (CMAKE_REQUIRED_FLAGS "${CMAKE_C_FLAGS} ${EXTRA_C_FLAGS} -march=core-avx2 -mavx")
set (CMAKE_REQUIRED_FLAGS "${CMAKE_C_FLAGS} ${EXTRA_C_FLAGS} -march=core-avx2 -mavx2")
elseif ()
set (CMAKE_REQUIRED_FLAGS "${CMAKE_C_FLAGS} ${EXTRA_C_FLAGS} -march=core-i7 -mssse3")
endif ()
Expand All @@ -95,12 +98,12 @@ else (NOT FAT_RUNTIME)
endif ()

if (ARCH_IA32 OR ARCH_X86_64)
# ensure we have the minimum of SSSE3 - call a SSSE3 intrinsic
# ensure we have the minimum of SSE4.2 - call a SSE4.2 intrinsic
CHECK_C_SOURCE_COMPILES("#include <${INTRIN_INC_H}>
int main() {
__m128i a = _mm_set1_epi8(1);
(void)_mm_shuffle_epi8(a, a);
}" HAVE_SSSE3)
}" HAVE_SSE42)

# now look for AVX2
CHECK_C_SOURCE_COMPILES("#include <${INTRIN_INC_H}>
Expand Down Expand Up @@ -136,13 +139,26 @@ int main(){
(void)_mm512_permutexvar_epi8(idx, a);
}" HAVE_AVX512VBMI)

elseif (!ARCH_ARM32 AND !ARCH_AARCH64)

elseif (ARCH_ARM32 OR ARCH_AARCH64)
CHECK_C_SOURCE_COMPILES("#include <${INTRIN_INC_H}>
int main() {
int32x4_t a = vdupq_n_s32(1);
(void)a;
}" HAVE_NEON)
elseif (ARCH_PPC64EL)
CHECK_C_SOURCE_COMPILES("#include <${INTRIN_INC_H}>
int main() {
vector int a = vec_splat_s32(1);
(void)a;
}" HAVE_VSX)
else ()
message (FATAL_ERROR "Unsupported architecture")
endif ()

if (FAT_RUNTIME)
if ((ARCH_IA32 OR ARCH_X86_64) AND NOT HAVE_SSSE3)
message(FATAL_ERROR "SSSE3 support required to build fat runtime")
if ((ARCH_IA32 OR ARCH_X86_64) AND NOT HAVE_SSE42)
message(FATAL_ERROR "SSE4.2 support required to build fat runtime")
endif ()
if ((ARCH_IA32 OR ARCH_X86_64) AND BUILD_AVX2 AND NOT HAVE_AVX2)
message(FATAL_ERROR "AVX2 support required to build fat runtime")
Expand All @@ -163,12 +179,16 @@ else (NOT FAT_RUNTIME)
if ((ARCH_IA32 OR ARCH_X86_64) AND NOT HAVE_AVX512VBMI)
message(STATUS "Building without AVX512VBMI support")
endif ()
if ((ARCH_IA32 OR ARCH_X86_64) AND NOT HAVE_SSSE3)
message(FATAL_ERROR "A minimum of SSSE3 compiler support is required")
if ((ARCH_IA32 OR ARCH_X86_64) AND NOT HAVE_SSE42)
message(FATAL_ERROR "A minimum of SSE4.2 compiler support is required")
endif ()
if ((ARCH_ARM32 OR ARCH_AARCH64) AND NOT HAVE_NEON)
message(FATAL_ERROR "NEON support required for ARM support")
endif ()
if (ARCH_PPPC64EL AND NOT HAVE_VSX)
message(FATAL_ERROR "VSX support required for Power support")
endif ()

endif ()

unset (PREV_FLAGS)
Expand Down
6 changes: 6 additions & 0 deletions cmake/config.h.in
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,9 @@
/* "Define if building for AARCH64" */
#cmakedefine ARCH_AARCH64

/* "Define if building for PPC64EL" */
#cmakedefine ARCH_PPC64EL

/* "Define if cross compiling for AARCH64" */
#cmakedefine CROSS_COMPILE_AARCH64

Expand Down Expand Up @@ -75,6 +78,9 @@
/* C compiler has arm_sve.h */
#cmakedefine HAVE_C_ARM_SVE_H

/* C compiler has arm_neon.h */
#cmakedefine HAVE_C_PPC64EL_ALTIVEC_H

/* Define to 1 if you have the declaration of `pthread_setaffinity_np', and to
0 if you don't. */
#cmakedefine HAVE_DECL_PTHREAD_SETAFFINITY_NP
Expand Down
13 changes: 8 additions & 5 deletions cmake/platform.cmake
Original file line number Diff line number Diff line change
@@ -1,3 +1,8 @@
# determine compiler
if (CMAKE_CXX_COMPILER_ID MATCHES "Clang")
set(CMAKE_COMPILER_IS_CLANG TRUE)
endif()

# determine the target arch

if (CROSS_COMPILE_AARCH64)
Expand All @@ -7,15 +12,13 @@ if (CROSS_COMPILE_AARCH64)
else()
# really only interested in the preprocessor here
CHECK_C_SOURCE_COMPILES("#if !(defined(__x86_64__) || defined(_M_X64))\n#error not 64bit\n#endif\nint main(void) { return 0; }" ARCH_X86_64)

CHECK_C_SOURCE_COMPILES("#if !(defined(__i386__) || defined(_M_IX86))\n#error not 32bit\n#endif\nint main(void) { return 0; }" ARCH_IA32)

CHECK_C_SOURCE_COMPILES("#if !defined(__ARM_ARCH_ISA_A64)\n#error not 64bit\n#endif\nint main(void) { return 0; }" ARCH_AARCH64)
CHECK_C_SOURCE_COMPILES("#if !defined(__ARM_ARCH_ISA_ARM)\n#error not 32bit\n#endif\nint main(void) { return 0; }" ARCH_ARM32)

if (ARCH_X86_64 OR ARCH_AARCH64)
CHECK_C_SOURCE_COMPILES("#if !defined(__PPC64__) && !(defined(__LITTLE_ENDIAN__) && defined(__VSX__))\n#error not ppc64el\n#endif\nint main(void) { return 0; }" ARCH_PPC64EL)
if (ARCH_X86_64 OR ARCH_AARCH64 OR ARCH_PPC64EL)
set(ARCH_64_BIT TRUE)
else()
set(ARCH_32_BIT TRUE)
endif()
endif()
endif()
7 changes: 6 additions & 1 deletion examples/patbench.cc
Original file line number Diff line number Diff line change
Expand Up @@ -112,6 +112,7 @@
*
*/

#include <random>
#include <algorithm>
#include <cstring>
#include <chrono>
Expand Down Expand Up @@ -151,6 +152,8 @@ using std::set;
using std::min;
using std::max;
using std::copy;
using std::random_device;
using std::mt19937;

enum Criterion {
CRITERION_THROUGHPUT,
Expand Down Expand Up @@ -731,7 +734,9 @@ int main(int argc, char **argv) {
count++;
cout << "." << std::flush;
vector<unsigned> sv(s.begin(), s.end());
random_shuffle(sv.begin(), sv.end());
random_device rng;
mt19937 urng(rng());
shuffle(sv.begin(), sv.end(), urng);
unsigned groups = factor_max + 1;
for (unsigned current_group = 0; current_group < groups;
current_group++) {
Expand Down
8 changes: 4 additions & 4 deletions src/fdr/teddy.c
Original file line number Diff line number Diff line change
Expand Up @@ -893,10 +893,10 @@ do { \
#define CONFIRM_TEDDY(var, bucket, offset, reason, conf_fn) \
do { \
if (unlikely(diff128(var, ones128()))) { \
u64a __attribute__((aligned(16))) vector[2]; \
store128(vector, var); \
u64a lo = vector[0]; \
u64a hi = vector[1]; \
u64a __attribute__((aligned(16))) vec[2]; \
store128(vec, var); \
u64a lo = vec[0]; \
u64a hi = vec[1]; \
CONF_CHUNK_64(lo, bucket, offset, reason, conf_fn); \
CONF_CHUNK_64(hi, bucket, offset + 8, reason, conf_fn); \
} \
Expand Down
2 changes: 2 additions & 0 deletions src/hs_valid_platform.c
Original file line number Diff line number Diff line change
Expand Up @@ -44,5 +44,7 @@ hs_error_t HS_CDECL hs_valid_platform(void) {
}
#elif defined(ARCH_ARM32) || defined(ARCH_AARCH64)
return HS_SUCCESS;
#elif defined(ARCH_PPC64EL)
return HS_SUCCESS;
#endif
}
2 changes: 1 addition & 1 deletion src/hwlm/hwlm.c
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@
#include "nfa/accel.h"
#include "nfa/shufti.h"
#include "nfa/truffle.h"
#include "nfa/vermicelli.h"
#include "nfa/vermicelli.hpp"
#include <string.h>

#define MIN_ACCEL_LEN_BLOCK 16
Expand Down
21 changes: 1 addition & 20 deletions src/hwlm/noodle_engine_simd.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -30,26 +30,7 @@
/* SIMD engine agnostic noodle scan parts */

#include "util/supervector/supervector.hpp"

static u8 CASEMASK[] = { 0xff, 0xdf };

static really_inline
u8 caseClear8(u8 x, bool noCase)
{
return static_cast<u8>(x & CASEMASK[(u8)noCase]);
}

template<uint16_t S>
static really_inline SuperVector<S> getMask(u8 c, bool noCase) {
u8 k = caseClear8(c, noCase);
return SuperVector<S>(k);
}

template<uint16_t S>
static really_inline SuperVector<S> getCaseMask(void) {
return SuperVector<S>(CASEMASK[1]);
}

#include "util/supervector/casemask.hpp"

static really_really_inline
hwlm_error_t single_zscan(const struct noodTable *n,const u8 *d, const u8 *buf,
Expand Down
8 changes: 4 additions & 4 deletions src/hwlm/noodle_engine_sve.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -170,7 +170,7 @@ hwlm_error_t scanDoubleOnce(const struct noodTable *n, const u8 *buf,
svbool_t pg = svwhilelt_b8_s64(0, e - d);
svbool_t pg_rot = svwhilelt_b8_s64(0, e - d + 1);
svbool_t matched, matched_rot;
svbool_t any = doubleMatched(chars, d, pg, pg_rot, &matched, &matched_rot);
svbool_t any = doubleMatched(svreinterpret_u16(chars), d, pg, pg_rot, &matched, &matched_rot);
return doubleCheckMatched(n, buf, len, cbi, d, matched, matched_rot, any);
}

Expand All @@ -187,7 +187,7 @@ hwlm_error_t scanDoubleLoop(const struct noodTable *n, const u8 *buf,
for (size_t i = 0; i < loops; i++, d += svcntb()) {
DEBUG_PRINTF("d %p \n", d);
svbool_t matched, matched_rot;
svbool_t any = doubleMatched(chars, d, svptrue_b8(), svptrue_b8(),
svbool_t any = doubleMatched(svreinterpret_u16(chars), d, svptrue_b8(), svptrue_b8(),
&matched, &matched_rot);
hwlm_error_t rv = doubleCheckMatched(n, buf, len, cbi, d,
matched, matched_rot, any);
Expand Down Expand Up @@ -220,7 +220,7 @@ hwlm_error_t scanDouble(const struct noodTable *n, const u8 *buf, size_t len,
}
++d;

svuint16_t chars = getCharMaskDouble(n->key0, n->key1, noCase);
svuint8_t chars = svreinterpret_u8(getCharMaskDouble(n->key0, n->key1, noCase));

if (scan_len <= svcntb()) {
return scanDoubleOnce(n, buf, len, cbi, chars, d, e);
Expand All @@ -234,4 +234,4 @@ hwlm_error_t scanDouble(const struct noodTable *n, const u8 *buf, size_t len,
RETURN_IF_TERMINATED(rv);
}
return scanDoubleLoop(n, buf, len, cbi, chars, d1, e);
}
}
2 changes: 1 addition & 1 deletion src/nfa/accel.c
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@
#include "accel.h"
#include "shufti.h"
#include "truffle.h"
#include "vermicelli.h"
#include "vermicelli.hpp"
#include "ue2common.h"

const u8 *run_accel(const union AccelAux *accel, const u8 *c, const u8 *c_end) {
Expand Down
4 changes: 1 addition & 3 deletions src/nfa/arm/shufti.hpp
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
/*
* Copyright (c) 2015-2017, Intel Corporation
* Copyright (c) 2020-2021, VectorCamp PC
* Copyright (c) 2021, Arm Limited
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
Expand Down Expand Up @@ -30,7 +29,6 @@

/** \file
* \brief Shufti: character class acceleration.
*
*/

template <uint16_t S>
Expand Down Expand Up @@ -73,4 +71,4 @@ SuperVector<S> blockDoubleMask(SuperVector<S> mask1_lo, SuperVector<S> mask1_hi,
t.print8("t");

return !t.eq(SuperVector<S>::Ones());
}
}
Loading