From e0621f99f8ca9f5eb4bc600e1483932bf71042ab Mon Sep 17 00:00:00 2001 From: Marshall Lochbaum Date: Wed, 5 Jul 2023 09:57:30 -0400 Subject: [PATCH] Unroll vector binary searches for different search depths --- src/singeli/src/bins.singeli | 22 ++++++++++++---------- 1 file changed, 12 insertions(+), 10 deletions(-) diff --git a/src/singeli/src/bins.singeli b/src/singeli/src/bins.singeli index 1f2ad32d..44da08a2 100644 --- a/src/singeli/src/bins.singeli +++ b/src/singeli/src/bins.singeli @@ -26,7 +26,7 @@ def for_vec_overlap{vl}{vars,begin==0,n,iter} = { setlabel{end} } -def ceil_log2{n:u64} = 64 - clz{n+1} +def ceil_log2{n:u64} = 64 - clz{n-1} # Shift as u16, since x86 is missing 8-bit shifts def shr16{v, n} = type{v}~~(([width{type{v}}/16]u16~~v) >> n) @@ -44,22 +44,24 @@ def bin_search_vec{up, w:*i8, wn, x:*i8, n, res:*i8} = { {i} => sel{H, v, i} } if (hasarch{'AVX2'} and wn < 16) { - log := ceil_log2{wn-1} + log := ceil_log2{wn+1} l := 1<