unroll bitsel
This commit is contained in:
parent
0ae0be135c
commit
c811e54666
@ -5,13 +5,15 @@ include './bitops'
|
|||||||
include './mask'
|
include './mask'
|
||||||
include './bitalign'
|
include './bitalign'
|
||||||
|
|
||||||
|
def mask_unr{bulk} = __max{2, 8/bulk}
|
||||||
|
|
||||||
def bitsel{VL, T, r, bits, e0, e1, len} = {
|
def bitsel{VL, T, r, bits, e0, e1, len} = {
|
||||||
def bulk = VL/width{T}
|
def bulk = VL/width{T}
|
||||||
def VT = [bulk]T
|
def VT = [bulk]T
|
||||||
|
|
||||||
e0v:= VT**e0
|
e0v:= VT**e0
|
||||||
e1v:= VT**e1
|
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 = {
|
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 bulk = arch_defvw / width{E}
|
||||||
def VT = [bulk]E
|
def VT = [bulk]E
|
||||||
def one = VT**cast_i{E, one0}
|
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