remove (load|store)_low
This commit is contained in:
parent
61565bfa17
commit
cd373e2ae6
@ -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'
|
||||
|
||||
@ -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}
|
||||
|
||||
@ -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 = {
|
||||
|
||||
@ -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}
|
||||
}
|
||||
|
||||
@ -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}}
|
||||
|
||||
Loading…
Reference in New Issue
Block a user