]> git.ipfire.org Git - thirdparty/vectorscan.git/commitdiff
*fix palignr implementation for VSX Release mode
authorApostolos Tapsas <apostolos.tapsas@vectorcamp.gr>
Wed, 24 Nov 2021 15:03:49 +0000 (15:03 +0000)
committerApostolos Tapsas <apostolos.tapsas@vectorcamp.gr>
Wed, 24 Nov 2021 15:03:49 +0000 (15:03 +0000)
*add unit test for palignr
*enable unit test building for Release mode

src/util/arch/ppc64el/simd_utils.h
unit/CMakeLists.txt
unit/internal/simd_utils.cpp

index a932682b2e17a8b4361973304faf0f735f3d3fa6..137fc94fd6606739a401c5757238edbb946ec5a0 100644 (file)
@@ -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);
index 859f7ac05fe688af9f9b379b341c2301b51d0c2a..932cd65ea7efe203965074a1c4510255d9bbeb35 100644 (file)
@@ -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()
index b1b9bfb12703abab8824ac65b077eae926b091be..928abbfbd8595eb78200bd5045dc08672e590051 100644 (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