]> git.ipfire.org Git - thirdparty/vectorscan.git/commitdiff
[NEON] optimize mask1bit128, get rid of simd_onebit_masks
authorKonstantinos Margaritis <konstantinos@vectorcamp.gr>
Wed, 7 Sep 2022 10:20:01 +0000 (10:20 +0000)
committerKonstantinos Margaritis <konstantinos@vectorcamp.gr>
Wed, 7 Sep 2022 10:20:01 +0000 (10:20 +0000)
src/util/arch/arm/simd_utils.h

index 6447996cd025efe1b38438024b9ad0821c787b24..45bcd23c68b29d71ac013027c63e4d53e51fd089 100644 (file)
@@ -577,9 +577,9 @@ m128 variable_byte_shift_m128(m128 in, s32 amount) {
 static really_inline
 m128 mask1bit128(unsigned int n) {
     assert(n < sizeof(m128) * 8);
-    u32 mask_idx = ((n % 8) * 64) + 95;
-    mask_idx -= n / 8;
-    return loadu128(&simd_onebit_masks[mask_idx]);
+    static m128 onebit = { 1, 0 };
+    m128 mask = lshiftbyte_m128( onebit, n / 8 );
+    return lshift64_m128( mask, n % 8 );
 }
 
 // switches on bit N in the given vector.