unroll bitsel
This commit is contained in:
parent
0ae0be135c
commit
c811e54666
@ -5,13 +5,15 @@ include './bitops'
|
||||
include './mask'
|
||||
include './bitalign'
|
||||
|
||||
def mask_unr{bulk} = __max{2, 8/bulk}
|
||||
|
||||
def bitsel{VL, T, r, bits, e0, e1, len} = {
|
||||
def bulk = VL/width{T}
|
||||
def VT = [bulk]T
|
||||
|
||||
e0v:= VT**e0
|
||||
e1v:= VT**e1
|
||||
@for_masked{bulk}(r in tup{'g',r}, b in tup{'b',VT,bits} over i to len) r{blend_hom{e0v, e1v, b}}
|
||||
@for_mu{bulk,mask_unr{bulk}}(r in tup{'g',r}, b in tup{'b',VT,bits} over i to len) r{eachx{blend_hom, e0v, e1v, b}}
|
||||
}
|
||||
|
||||
fn bitsel_i{VL,T}(r:*void, bits:*u64, e0:u64, e1:u64, len:u64) : void = {
|
||||
@ -31,7 +33,7 @@ fn blend_arr_scalar{E}(rp:*void, zero:*void, one0:u64, mask:*void, len:u64) : vo
|
||||
def bulk = arch_defvw / width{E}
|
||||
def VT = [bulk]E
|
||||
def one = VT**cast_i{E, one0}
|
||||
@for_masked{bulk}(r in tup{VT,*E~~rp}, zero in tup{VT,*E~~zero}, mask in tup{'b',VT,mask} over i to len) r = blend_hom{zero, one, mask}
|
||||
@for_mu{bulk,mask_unr{bulk}}(r in tup{'g',*E~~rp}, zero in tup{VT,*E~~zero}, mask in tup{'b',VT,mask} over i to len) r{eachx{blend_hom, zero, one, mask}}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Loading…
Reference in New Issue
Block a user