From 35e5369c708f429d1ab3492dba4ddd71b263fcdf Mon Sep 17 00:00:00 2001 From: Apostolos Tapsas Date: Wed, 24 Nov 2021 15:03:49 +0000 Subject: [PATCH] *fix palignr implementation for VSX Release mode *add unit test for palignr *enable unit test building for Release mode --- src/util/arch/ppc64el/simd_utils.h | 1 + unit/CMakeLists.txt | 24 +++++++++++++++++------- unit/internal/simd_utils.cpp | 25 +++++++++++++++++++++++++ 3 files changed, 43 insertions(+), 7 deletions(-) diff --git a/src/util/arch/ppc64el/simd_utils.h b/src/util/arch/ppc64el/simd_utils.h index a932682b..137fc94f 100644 --- a/src/util/arch/ppc64el/simd_utils.h +++ b/src/util/arch/ppc64el/simd_utils.h @@ -381,6 +381,7 @@ m128 palignr_imm(m128 r, m128 l, int offset) { static really_really_inline m128 palignr(m128 r, m128 l, int offset) { #if defined(HS_OPTIMIZE) + // need a faster way to do this. return palignr_imm(r, l, offset); #else return palignr_imm(r, l, offset); diff --git a/unit/CMakeLists.txt b/unit/CMakeLists.txt index 859f7ac0..932cd65e 100644 --- a/unit/CMakeLists.txt +++ b/unit/CMakeLists.txt @@ -63,7 +63,7 @@ target_link_libraries(unit-hyperscan hs expressionutil) endif() -if (NOT (RELEASE_BUILD OR FAT_RUNTIME)) +if (NOT FAT_RUNTIME ) set(unit_internal_SOURCES ${gtest_SOURCES} internal/bitfield.cpp @@ -72,8 +72,8 @@ set(unit_internal_SOURCES internal/compare.cpp internal/database.cpp internal/depth.cpp - internal/fdr.cpp - internal/fdr_flood.cpp + #internal/fdr.cpp + #internal/fdr_flood.cpp internal/fdr_loadval.cpp internal/flat_set.cpp internal/flat_map.cpp @@ -81,7 +81,7 @@ set(unit_internal_SOURCES internal/graph_undirected.cpp internal/insertion_ordered.cpp internal/lbr.cpp - internal/limex_nfa.cpp + #internal/limex_nfa.cpp internal/multi_bit.cpp internal/multi_bit_compress.cpp internal/nfagraph_common.h @@ -121,13 +121,22 @@ if (BUILD_AVX2) set(unit_internal_SOURCES ${unit_internal_SOURCES} internal/masked_move.cpp - ) + ) endif(BUILD_AVX2) +if (NOT RELEASE_BUILD) +set(unit_internal_SOURCES + ${unit_internal_SOURCES} + internal/fdr.cpp + internal/fdr_flood.cpp + internal/limex_nfa.cpp + ) +endif(NOT RELEASE_BUILD) + add_executable(unit-internal ${unit_internal_SOURCES}) set_target_properties(unit-internal PROPERTIES COMPILE_FLAGS "${HS_CXX_FLAGS}") target_link_libraries(unit-internal hs corpusomatic) -endif(NOT (RELEASE_BUILD OR FAT_RUNTIME)) +endif(NOT FAT_RUNTIME) if (BUILD_CHIMERA) # enable Chimera unit tests @@ -178,9 +187,10 @@ else() else () add_custom_target( unit + COMMAND bin/unit-internal COMMAND bin/unit-hyperscan WORKING_DIRECTORY ${CMAKE_BINARY_DIR} - DEPENDS unit-hyperscan + DEPENDS unit-internal unit-hyperscan ) endif() endif() diff --git a/unit/internal/simd_utils.cpp b/unit/internal/simd_utils.cpp index b1b9bfb1..928abbfb 100644 --- a/unit/internal/simd_utils.cpp +++ b/unit/internal/simd_utils.cpp @@ -917,4 +917,29 @@ TEST(SimdUtilsTest, pshufb_m128) { } +/*Define ALIGNR128 macro*/ +#define TEST_ALIGNR128(v1, v2, buf, l) { \ + m128 v_aligned =palignr(v2,v1, l); \ + storeu128(res, v_aligned); \ + for (size_t i=0; i<16; i++) { \ + ASSERT_EQ(res[i], vec[i + l]); \ + } \ + } + +TEST(SimdUtilsTest, Alignr128){ + u8 vec[32]; + u8 res[16]; + for (int i=0; i<32; i++) { + vec[i]=i; + } + m128 v1 = loadu128(vec); + m128 v2 = loadu128(vec+16); + for (int j = 0; j<16; j++){ + TEST_ALIGNR128(v1, v2, vec, j); + } +} + + + + } // namespace