Move base{} utility to base.singeli

This commit is contained in:
Marshall Lochbaum 2022-11-28 12:14:30 -05:00
parent 43fba7cd78
commit b651ca73d3
3 changed files with 4 additions and 3 deletions

View File

@ -16,6 +16,9 @@ def lb{n==1} = 0
def tail{n,x} = x & ((1<<n) - 1) # get the n least significant bits
def bit {k,x} = x & (1<<k) # get the k-th bit
# Convert tuple to number in little-endian base b
def base{b,l} = { if (0==tuplen{l}) 0; else tupsel{0,l}+b*base{b,slice{l,1}} }
def rare{x:u1} = emit{u1, '__builtin_expect', x, 0}
def assert{x & x==0} = assert{'failed assertion'}
def assert{x & x==1} = 1

View File

@ -39,8 +39,7 @@ def get_rep_iter{V, wv==2}{x, gen} = {
}
def get_rep_iter{V==[4]u64, wv} = {
def step = 4
def base4{l} = { if (0==tuplen{l}) 0; else tupsel{0,l}+4*base4{slice{l,1}} }
def sh = each{base4, get_shufs{step, wv, wv}}
def sh = each{bind{base,4}, get_shufs{step, wv, wv}}
{x, gen} => each{{s}=>gen{shuf{V, x, s}}, sh}
}
def read_shuf_vecs{l, elbytes:u64, shp:*[32]i8} = {

View File

@ -7,7 +7,6 @@ include './mask'
def sel8{v, t} = sel{[16]u8, v, make{[32]i8, t}}
def sel8{v, t & istup{t} & tuplen{t}==16} = sel8{v, merge{t,t}}
def base{b,l} = { if (0==tuplen{l}) 0; else tupsel{0,l}+b*base{b,slice{l,1}} }
def shuf{T, v, n & istup{n}} = shuf{T, v, base{4,n}}
# Fill last 4 bytes with last element, in each lane