]> git.ipfire.org Git - thirdparty/vectorscan.git/commitdiff
SuperVector shuffle implementation and test function optimized
authorApostolos Tapsas <apostolos@vm01.debian11>
Fri, 22 Oct 2021 11:55:39 +0000 (11:55 +0000)
committerApostolos Tapsas <apostolos@vm01.debian11>
Fri, 22 Oct 2021 11:55:39 +0000 (11:55 +0000)
src/nfa/limex_shuffle.h
src/util/arch/ppc64el/simd_utils.h
src/util/supervector/arch/ppc64el/impl.cpp
unit/internal/simd_utils.cpp
unit/internal/supervector.cpp

index 413eece7f36cf0e93462b874427603428d3a8a91..a1728e6a8ef93b96873f349608187e4f5b3c9b94 100644 (file)
 static really_inline
 u32 packedExtract128(m128 s, const m128 permute, const m128 compare) {
     m128 shuffled = pshufb_m128(s, permute);
-    //int8x16_t res = (int8x16_t) pshufb_m128(s, permute);
-    //printf("shufled:");
-    //for(int i=15; i>=0; i--) {printf("%02x ", res[i]);}
-    //printf("\n");
+    print_m128_16x8("shufled", shuffled);
     m128 compared = and128(shuffled, compare);
     u16 rv = ~movemask128(eq128(compared, shuffled));
     return (u32)rv;
index d962163e46177b194ddcf4cb1c282d5fdfc7d323..9e8c59bf6ce1c8704aec0688de55fcb6c6c32f2c 100644 (file)
@@ -463,14 +463,6 @@ char testbit128(m128 val, unsigned int n) {
 static really_inline
 m128 pshufb_m128(m128 a, m128 b) {
     return (m128) vec_perm((uint8x16_t)a, (uint8x16_t)a, (uint8x16_t)b);
-    //return (m128) vec_perm((int8x16_t)vec_splat_s8(0), (int8x16_t)a, (uint8x16_t)b);;
-    //uint8x16_t btransparent = vec_and((uint8x16_t)b, (uint8x16_t)vec_splats(0x8f));
-    //return (m128) vec_perm(a, a, btransparent);
-    //return (m128) vec_perm((int8x16_t)vec_splat_s8(0), (int8x16_t)b, (uint8x16_t)a);
-    
-    //return (m128) vec_perm((int8x16_t)a, (int8x16_t)b, (uint8x16_t)vec_splat_s8(0));
-    //return (m128) vec_perm((int8x16_t)b, (int8x16_t)a, (uint8x16_t)vec_splat_s8(0));
-
 }
 
 static really_inline
index 93cc4d632db79f266f030a806f80fd966372fc46..dc318c826dcd1d215fa121d02881e6de5b74b9ba 100644 (file)
@@ -603,7 +603,7 @@ template<>
 template<>
 really_inline SuperVector<16> SuperVector<16>::pshufb<false>(SuperVector<16> b)
 {
-    return (m128) vec_permxor((int8x16_t)vec_splat_s8(0), (int8x16_t)u.v128[0], (int8x16_t) b.u.v128[0]);
+    return (m128) vec_perm((uint8x16_t)u.v128[0], (uint8x16_t)u.v128[0], (uint8x16_t)b.u.v128[0]);
 }
 
 template<>
index 26743abe98957ed9fc4ccefe487f36a2f45b31f7..2085c9df3bf0d4e3e05acca67bc234a5afda1817 100644 (file)
@@ -849,15 +849,15 @@ TEST(SimdUtilsTest, pshufb_m128) {
     }
     u8 vec2[16];
     for (int i=0; i<16; i++) {
-        vec2[i]=i;
-    }
+        vec2[i]=i + (rand() % 16 + 0);
+    } 
     m128 v1 = loadu128(vec);
     m128 v2 = loadu128(vec2);
     m128 vres = pshufb_m128(v1, v2);
     u8 res[16];
     store128(res, vres);
     for (int i=0; i<16; i++) {
-        ASSERT_EQ(vec[vec2[i]], res[i]);
+        ASSERT_EQ(vec[vec2[i] % 16 ], res[i]);
     }
 }
 
index 342f8fd4e79bb27c306ebce042868135c318c3d9..4be93aa8ce3a51b09bd9a498357a75e2d2961edf 100644 (file)
@@ -280,13 +280,13 @@ TEST(SuperVectorUtilsTest,pshufb128c) {
     }
     u8 vec2[16];
     for (int i=0; i<16; i++) {
-        vec2[i]=i;
+        vec2[i]=i + (rand() % 15 + 0);
     }
     auto SP1 = SuperVector<16>::loadu(vec);
     auto SP2 = SuperVector<16>::loadu(vec2);
     auto SResult = SP1.template pshufb<true>(SP2);
     for (int i=0; i<16; i++) {
-        ASSERT_EQ(vec[vec2[i]],SResult.u.u8[i]);
+        ASSERT_EQ(vec[vec2[i] % 16 ],SResult.u.u8[i]);
     }
 }