diff --git a/src/singeli/src/avx512.singeli b/src/singeli/src/avx512.singeli index b23e4f4e..ca3f3138 100644 --- a/src/singeli/src/avx512.singeli +++ b/src/singeli/src/avx512.singeli @@ -27,6 +27,8 @@ def hom_to_int{x:V=[_]_ if w512i{V}} = top_to_int{x} def mask_to_hom{V=[l]_, x:[l](u1)} = emit{V, intrin_i{V,'movm'}, x} +def lowelt_mask{[k](u1), n if any_int{n}} = int_to_mask{[k]u1, bzhi{hom_ones{u64}, n}} + def sel{(ty_u{V}), x:V=[_]E, i:I==(ty_u{V}) if (if (width{E}>8) has512e{V} else has512{V, 'VBMI'})} = emit{V, intrin_i{V, 'permutexvar'}, i, x} def multishift{a:[k](u64), i:V=[(k*8)](u8) if has512{V, 'VBMI'}} = emit{V, intrin_i{V, 'multishift_epi64'}, i, a} diff --git a/src/singeli/src/base.singeli b/src/singeli/src/base.singeli index a2cffea4..eda1dd26 100644 --- a/src/singeli/src/base.singeli +++ b/src/singeli/src/base.singeli @@ -177,7 +177,7 @@ def { all_top,any_top,blend_top,top_to_int,store_masked_top,store_blended_top, load_expand_bits,make,mask_to_hom,mulw_split,mulh,narrow,narrow_trunc,narrow_pair, pair,pdep,pext,bzhi,rbit,reverse_units,broadcast_sel,absdiff_sum,mul_sum,mul_sum_sat, - unord,unzip,vfold,vec_select,vec_shuffle,widen,widen_upper,multishift, + unord,unzip,vfold,vec_select,vec_shuffle,widen,widen_upper,multishift,lowelt_mask, addp,addpw,addpwa, }