diff --git a/src/singeli/src/scan.singeli b/src/singeli/src/scan.singeli index 2e525c3c..3ad1ffcc 100644 --- a/src/singeli/src/scan.singeli +++ b/src/singeli/src/scan.singeli @@ -464,23 +464,19 @@ fn scan_rows_neq(x:*u64, r:*u64, nl:usz, l:usz) : void = { } vec_prefix_byshift{^, <<} } + def apply_carry{s, c, f} = s ^ (f & c) assert{l > 0} nw := cdiv{nl, 64} if (l < 64) { + def apply_mask{s, m} = { + b:= s<<1 & m # last bit of previous row + s ^ (b< { @@ -504,7 +500,6 @@ fn scan_rows_neq(x:*u64, r:*u64, nl:usz, l:usz) : void = { bl{k, c} } def fix_carry{t:V} = t & V**1 - def apply_carry{r, a, ml} = r ^ (a & ml) avx2_loop_with_loose_mask{x, r, nw, l, 0, scan_words, propagate, fix_carry, apply_carry} } else { i :usz = 0 # row bit index @@ -526,19 +521,18 @@ fn scan_rows_neq(x:*u64, r:*u64, nl:usz, l:usz) : void = { fn scan_rows_left(x:*u64, r:*u64, nl:usz, l:usz) : void = { assert{l > 0} nw := cdiv{nl, 64} + def apply_carry{s, c, f} = s | (f & c) if (l < 64) { + def apply_mask{x, m} = { b:= x & m; b< { f:= (m-1)&~m # bits before first full row - b:= x & m - (c & f) | (b<>63 | (m == V**0)} } - def apply_carry{r, a, ml} = r | (a & ml) avx2_loop_with_loose_mask{x, r, nw, l, 0, scan_words, apply_carry} } else { i :usz = 0 # row bit index