From 9c7c6aabc526b37bee400cb80971b2d7054bc4ff Mon Sep 17 00:00:00 2001 From: Marshall Lochbaum Date: Tue, 25 Apr 2023 21:45:27 -0400 Subject: [PATCH] AVX2 Mark Firsts implementation --- src/builtins/selfsearch.c | 14 +++++++++- src/singeli/src/search.singeli | 48 ++++++++++++++++++++++++++++++++++ 2 files changed, 61 insertions(+), 1 deletion(-) diff --git a/src/builtins/selfsearch.c b/src/builtins/selfsearch.c index 45bac03a..25887f7d 100644 --- a/src/builtins/selfsearch.c +++ b/src/builtins/selfsearch.c @@ -213,6 +213,8 @@ static NOINLINE void memset64(u64* p, u64 v, usz l) { for (usz i=0; i n) m&= (~u32~~0)>>((-n)%32) + if (m == 0) { # No new values + store{r, iw, m} + } else { # Add values to the table and filter m + rv:= m + do { + new:= settab{load{x, i0 + cast_i{u64,ctz{m}}}} + m1:= m-1; m&= m1 # Clear last bit + rv&= m1 | u32~~cast_i{i32,new} # Clear if not new + } while (m != 0) + store{r, iw, rv} + if (u == 0) { # All bytes seen + @for (r over _ from iw+1 to cdiv{n,32}) r = 0 + return{} + } + reload_tab{} + } + } +} + +export{'avx2_mark_firsts_u8', avx2_mark_firsts_u8} export{'avx2_member_u8', avx2_member_u8} } # hasarch{'AVX2'}