Move base{} utility to base.singeli
This commit is contained in:
parent
43fba7cd78
commit
b651ca73d3
@ -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
|
||||
|
||||
@ -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} = {
|
||||
|
||||
@ -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
|
||||
|
||||
Loading…
Reference in New Issue
Block a user