From 724f685a57a6c372fa0df56f7e44d8edf12a33fa Mon Sep 17 00:00:00 2001 From: Marshall Lochbaum Date: Thu, 6 Jul 2023 11:21:45 -0400 Subject: [PATCH] Cleanup --- src/singeli/src/bins.singeli | 45 +++++++++++++++++++----------------- 1 file changed, 24 insertions(+), 21 deletions(-) diff --git a/src/singeli/src/bins.singeli b/src/singeli/src/bins.singeli index 0d5bf26a..60545c48 100644 --- a/src/singeli/src/bins.singeli +++ b/src/singeli/src/bins.singeli @@ -14,6 +14,7 @@ def for_backwards{vars,begin,end,iter} = { iter{i, vars} } } +def for_dir{up} = if (up) for else for_backwards def for_vec_overlap{vl}{vars,begin==0,n,iter} = { assert{n >= vl} def end = makelabel{} @@ -31,6 +32,20 @@ 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) +def getsel{...x} = assert{'shuffling not supported', show{...x}} +if (hasarch{'AVX2'}) { + def getsel{h:H & lvec{H, 16, 8}} = { + v := pair{h,h} + {i} => sel{H, v, i} + } + def getsel{v:V & lvec{V, 32, 8}} = { + def H = v_half{V} + vtop := V**(vcount{V}/2) + hs := each{bind{shuf, [4]u64, v}, tup{4b3232, 4b1010}} + {i} => homBlend{...each{{h}=>sel{H,h,i}, hs}, V~~i sel{H, v, i} - } if (hasarch{'AVX2'} and wn < 8) { log := ceil_log2{wn+1} l := 1< homBlend{...each{{h}=>sel{H,h,i}, hs}, V~~i 16) ind = homBlend{sel{H,ui1,i0}, ind, i0 16) ind = homBlend{sel{H,ui1,i0}, ind, i0=32) { bin_search_vec{up, *T~~w, wn, *T~~x, xn, *i8~~rp} } else if (T==i8 and xn>=64 and (xn>=1024 or (xn-32) >= cast_i{u64,1}<<(ceil_log2{wn}/2+1))) { - def T = i8; def I = u64 + def I = u64 t0:*I = copy{256,0} t:*I = t0 + 128 write_indices{I,T}(t, *T~~w, wn) - def for_dir = if (up) for else for_backwards - s:I=0; @for_dir (t0 over 256) { if (t0 > s) s = t0; t0 = s } + s:I=0; @for_dir{up} (t0 over 256) { if (t0 > s) s = t0; t0 = s } load{lookup_i8_arr,rty}(t0, *T~~x, rp, xn) } else { bin_search_branchless{up, *T~~w, wn, *T~~x, xn, rp, rty}