remove (load|store)_low

This commit is contained in:
dzaima 2025-02-03 03:51:08 +02:00
parent 61565bfa17
commit cd373e2ae6
5 changed files with 13 additions and 17 deletions

View File

@ -175,8 +175,8 @@ def {
all_bit,any_bit,blend_bit,
all_hom,any_hom,blend_hom,hom_to_int,store_masked_hom,store_blended_hom,
all_top,any_top,blend_top,top_to_int,store_masked_top,store_blended_top,
load_expand_bits,load_low,make,mask_to_hom,mulw_split,mulh,narrow,narrow_trunc,narrow_pair,
pair,pdep,pext,rbit,sel,shuf_ind,store_low,reverse_units,
load_expand_bits,make,mask_to_hom,mulw_split,mulh,narrow,narrow_trunc,narrow_pair,
pair,pdep,pext,rbit,sel,shuf_ind,reverse_units,
unord,unzip,vfold,vec_select,vec_shuffle,widen,widen_upper,multishift,
}
@ -198,16 +198,12 @@ def hom_to_int{...vs if length{vs}>1} = {
}
def hom_to_int{x if ktup{x}} = hom_to_int{...x}
def load{V=[k]E, ptr:*E } = load{*V~~ptr, 0}
def load{V=[k]E, ptr:*E, k} = load{*V~~ptr, 0}
def store{ptr:*E, val:V=[k]E } = store{*V~~ptr, 0, val}
def store{ptr:*E, val:V=[k]E, k} = store{*V~~ptr, 0, val}
def load{V=[k]E, ptr:*E, k} = load{V, ptr}
def store{ptr:*E, val:V=[k]E, k} = store{ptr, val}
def load{V=[k]E, ptr:*E} = load{*V~~ptr}
def store{ptr:*E, val:V=[k]E} = store{*V~~ptr, 0, val}
def load_low{ptr:*V=[k]E, w} = load{V, *E~~ptr, w/width{E}}
def store_low{ptr:*E, w, val:V=[k]E} = store{ptr, val, w/width{E}}
if_inline (hasarch{'X86_64'}) {
include 'arch/iintrinsic/basic'

View File

@ -50,14 +50,14 @@ def store_narrow{ptr:*E0, i, x:[k]E1, M} = {
xu:= narrow{E0, x}
if (M{0}) store_blended_hom{*TF~~rpos, M{TF, 'to homogeneous bits'}, undef_promote{TF, xu}}
else store_low{rpos, k*width{E0}, xu}
else store{rpos, xu, k}
}
# (sign/zero)-extend the i-th batch of k elements at ptr to [k]E1
def load_widen{ptr:*E0, i, [k]E1} = {
def rpos = ptr + i*k
def TF = re_el{E0, [k]E1}
widen{[k]E1, load_low{*TF~~rpos, k*width{E0}}}
widen{[k]E1, load{TF, rpos, k}}
}
def load_widen {ptr:*E, {...ns}, T } = each{load_widen {ptr, ., T }, ns}

View File

@ -111,7 +111,7 @@ fn clmul_scan_ne_any{if hasarch{'PCLMUL'}}(x:*void, r:*void, init:u64, words:u64
rv = zip{...(@collect (j to 2) xor64{xv, j, c}), 0}
}
if ((words & 1) == 1) {
store_low{*u64~~(rv+e), 64, clmul{load_low{xv+e, 64}, m, 0} ^ c}
store{*u64~~(rv+e), clmul{load{V, *u64~~(xv+e), 1}, m, 0} ^ c, 1}
}
}
fn scan_neq{if hasarch{'PCLMUL'}}(init:u64, x:*u64, r:*u64, nw:u64) : void = {

View File

@ -168,7 +168,7 @@ export{'INDS_BUF_MAX_COPY', ux~~inds_buf_max}
if (max >= (inds_buf_max>>sh)) return{0}
@for_backwards (i to inds_buf_max/(width{WV}/8)) {
def s = load_low{*arch_minv{V}~~(*u8~~src + i*bulk), width{V}}
def s = load{arch_minv{V}, *u8~~src + i*bulk, bulk}
def v = raw_widen_inds{bulk, sh, s}
store{*WV~~dst, i, v}
}

View File

@ -38,17 +38,17 @@ def transpose_square{VT, l, x if avx2} = unpack_to{1, l/2, x}
def load2{a:*T, b:*T} = match (width{T}) {
{64} => {
def v = each{{p}=>load_low{*[2]u64~~p, 64}, tup{a,b}}
def v = each{{p}=>load{[2]u64, *u64~~p, 1}, tup{a,b}}
n_d{T}~~zip{...v, 0}
}
{128} => pair{load{a}, load{b}}
}
def store2{a:*T, b:*T, v:T2 if 2*width{T} == width{T2}} = match (width{T}) {
{ 64} => each{{p, v} => store_low{*u64~~p, 64, [2]u64~~v}, tup{a,b}, tup{v, shuf{u64, v, 1,0}}}
{ 64} => each{{p, v} => store{*u64~~p, [2]u64~~v, 1}, tup{a,b}, tup{v, shuf{u64, v, 1,0}}}
{128} => each{{p, i} => store{p, 0, T~~half{v,i}}, tup{a,b}, iota{2}}
}
def store1of2{a:*T, v:T2 if 2*width{T} == width{T2}} = match (width{T}) {
{ 64} => store_low{*u64~~a, 64, [2]u64~~v}
{ 64} => store{*u64~~a, [2]u64~~v, 1}
{128} => store{a, 0, T~~half{v,0}}
}
def load_k {VT, src, l, w} = each{{i} =>load {*VT~~(src+i*w), 0 }, iota{l}}