From 2fafe11d7c0b8b1d4323a54d38815644d1128e8b Mon Sep 17 00:00:00 2001 From: Marshall Lochbaum Date: Tue, 25 Apr 2023 17:28:31 -0400 Subject: [PATCH] Fix fill_bittab tail masking for t=0 and simplify --- src/singeli/src/search.singeli | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/src/singeli/src/search.singeli b/src/singeli/src/search.singeli index 235e11d3..01adfe32 100644 --- a/src/singeli/src/search.singeli +++ b/src/singeli/src/search.singeli @@ -122,19 +122,18 @@ fn fill_bittab(x0:*void, n:u64, tab:*void, u:u8, t:i8) : u8 = { def {bitsel, reload_tab} = bittab_selector{readbytes{*VI~~tab}} xv:= *VI~~x0 while (i < n) { - ii:= i+32 - m:= bitsel{load{xv, i/32}} - if (ii > n) { ii=n; m|=(~u32~~0)<<(n%32) } - m^= u32~~cast_i{i32, t} + m:= u32~~cast_i{i32, t} ^ bitsel{load{xv, i/32}} + i0:= i + i+= 32 + if (i > n) m&= (~u32~~0)>>((-n)%32) if (m != 0) { # Need to add entries do { - settab{load{x, i+emit{u64, 'CTZ', m}}} + settab{load{x, i0 + cast_i{u64,ctz{m}}}} m&= m-1 # Clear last bit } while (m != 0) if (u == 0) return{u} # Table is all one value reload_tab{} } - i = ii } u }