diff --git a/src/singeli/src/bits.singeli b/src/singeli/src/bits.singeli index f65b295f..754492f3 100644 --- a/src/singeli/src/bits.singeli +++ b/src/singeli/src/bits.singeli @@ -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}} } }