From cd373e2ae681a2055526d01b7787077145bdeac4 Mon Sep 17 00:00:00 2001 From: dzaima Date: Mon, 3 Feb 2025 03:51:08 +0200 Subject: [PATCH] remove (load|store)_low --- src/singeli/src/base.singeli | 16 ++++++---------- src/singeli/src/mask.singeli | 4 ++-- src/singeli/src/scan.singeli | 2 +- src/singeli/src/select.singeli | 2 +- src/singeli/src/transpose.singeli | 6 +++--- 5 files changed, 13 insertions(+), 17 deletions(-) diff --git a/src/singeli/src/base.singeli b/src/singeli/src/base.singeli index da828c85..24d23b4b 100644 --- a/src/singeli/src/base.singeli +++ b/src/singeli/src/base.singeli @@ -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' diff --git a/src/singeli/src/mask.singeli b/src/singeli/src/mask.singeli index 35b7a219..c6f2a5f9 100644 --- a/src/singeli/src/mask.singeli +++ b/src/singeli/src/mask.singeli @@ -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} diff --git a/src/singeli/src/scan.singeli b/src/singeli/src/scan.singeli index 69d72f30..e3e970e2 100644 --- a/src/singeli/src/scan.singeli +++ b/src/singeli/src/scan.singeli @@ -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 = { diff --git a/src/singeli/src/select.singeli b/src/singeli/src/select.singeli index 89a4cb98..967cf22d 100644 --- a/src/singeli/src/select.singeli +++ b/src/singeli/src/select.singeli @@ -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} } diff --git a/src/singeli/src/transpose.singeli b/src/singeli/src/transpose.singeli index b646a5e1..bc7da6b4 100644 --- a/src/singeli/src/transpose.singeli +++ b/src/singeli/src/transpose.singeli @@ -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}}