*fix palignr implementation for VSX Release mode

*add unit test for palignr
*enable unit test building for Release mode
This commit is contained in:
Apostolos Tapsas 2021-11-24 15:03:49 +00:00
parent bfc8da1102
commit 35e5369c70
3 changed files with 43 additions and 7 deletions

View File

@ -381,6 +381,7 @@ m128 palignr_imm(m128 r, m128 l, int offset) {
static really_really_inline static really_really_inline
m128 palignr(m128 r, m128 l, int offset) { m128 palignr(m128 r, m128 l, int offset) {
#if defined(HS_OPTIMIZE) #if defined(HS_OPTIMIZE)
// need a faster way to do this.
return palignr_imm(r, l, offset); return palignr_imm(r, l, offset);
#else #else
return palignr_imm(r, l, offset); return palignr_imm(r, l, offset);

View File

@ -63,7 +63,7 @@ target_link_libraries(unit-hyperscan hs expressionutil)
endif() endif()
if (NOT (RELEASE_BUILD OR FAT_RUNTIME)) if (NOT FAT_RUNTIME )
set(unit_internal_SOURCES set(unit_internal_SOURCES
${gtest_SOURCES} ${gtest_SOURCES}
internal/bitfield.cpp internal/bitfield.cpp
@ -72,8 +72,8 @@ set(unit_internal_SOURCES
internal/compare.cpp internal/compare.cpp
internal/database.cpp internal/database.cpp
internal/depth.cpp internal/depth.cpp
internal/fdr.cpp #internal/fdr.cpp
internal/fdr_flood.cpp #internal/fdr_flood.cpp
internal/fdr_loadval.cpp internal/fdr_loadval.cpp
internal/flat_set.cpp internal/flat_set.cpp
internal/flat_map.cpp internal/flat_map.cpp
@ -81,7 +81,7 @@ set(unit_internal_SOURCES
internal/graph_undirected.cpp internal/graph_undirected.cpp
internal/insertion_ordered.cpp internal/insertion_ordered.cpp
internal/lbr.cpp internal/lbr.cpp
internal/limex_nfa.cpp #internal/limex_nfa.cpp
internal/multi_bit.cpp internal/multi_bit.cpp
internal/multi_bit_compress.cpp internal/multi_bit_compress.cpp
internal/nfagraph_common.h internal/nfagraph_common.h
@ -124,10 +124,19 @@ set(unit_internal_SOURCES
) )
endif(BUILD_AVX2) 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}) add_executable(unit-internal ${unit_internal_SOURCES})
set_target_properties(unit-internal PROPERTIES COMPILE_FLAGS "${HS_CXX_FLAGS}") set_target_properties(unit-internal PROPERTIES COMPILE_FLAGS "${HS_CXX_FLAGS}")
target_link_libraries(unit-internal hs corpusomatic) target_link_libraries(unit-internal hs corpusomatic)
endif(NOT (RELEASE_BUILD OR FAT_RUNTIME)) endif(NOT FAT_RUNTIME)
if (BUILD_CHIMERA) if (BUILD_CHIMERA)
# enable Chimera unit tests # enable Chimera unit tests
@ -178,9 +187,10 @@ else()
else () else ()
add_custom_target( add_custom_target(
unit unit
COMMAND bin/unit-internal
COMMAND bin/unit-hyperscan COMMAND bin/unit-hyperscan
WORKING_DIRECTORY ${CMAKE_BINARY_DIR} WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
DEPENDS unit-hyperscan DEPENDS unit-internal unit-hyperscan
) )
endif() endif()
endif() endif()

View File

@ -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 } // namespace