more explicit loadu/storeu

This commit is contained in:
dzaima 2023-08-20 00:18:09 +03:00
parent 1bb686a9ff
commit 34d4fd6433
3 changed files with 7 additions and 2 deletions

View File

@ -29,9 +29,12 @@ def load{p:P & isptr{P}} = load{p, 0}
# def store{p:P, v & isptr{P}} = store{p, 0, v}
def loadu{p:T & isunsigned{eltype{T}}} = emit{eltype{T}, merge{'loadu_u',fmtnat{elwidth{T}}}, p}
def storeu{p:T, v:eltype{T} & isunsigned{eltype{T}}} = emit{void, merge{'storeu_u',fmtnat{elwidth{T}}}, p, v}
def loadu{p:T & issigned{eltype{T}}} = loadu {*ty_u{eltype{T}} ~~ p}
def storeu{p:T, v:eltype{T} & issigned{eltype{T}}} = storeu{*ty_u{eltype{T}} ~~ p, ty_u{v}}
def loadu{p:T & elwidth{T}==8} = load{p}
def storeu{p:T, v:eltype{T} & elwidth{T}==8} = store{p, v}
def reinterpret{T, x:X & T==X} = x
def exportN{f, ...ns} = each{export{.,f}, ns}
def exportT{name, fs} = { v:*type{tupsel{0,fs}} = fs; export{name, v} }

View File

@ -295,7 +295,9 @@ def bin_search_vec{T, up, w:*T, wn, x:*T, xn, rp, maxwn & hasarch{'AVX2'}} = {
rn := if (T==i8) r
else if (T==i16) half{narrow{u8, r}, 0}
else extract{re_el{i64, narrow{u8, r}}, 0}
store{*type{rn}~~(*i8~~rp+j), 0, rn}
rnp := *type{rn}~~(*i8~~rp+j)
if (isvec{type{rn}}) store{rnp, 0, rn}
else storeu{rnp, rn}
}
}
}

View File

@ -184,7 +184,7 @@ fn slash{c==1, T & T<=i16 & shufb128{}}(wp:*u64, x:arg{c,T}, r:*T, l:u64, sum:u6
s := V~~make{[2]u64, ind,0}
if (T==i16) { s+=s; s = V~~mzipLo{s, s+V**1} }
res := sel{V, load{*V~~(x+8*i)}, s}
if (T==i8) store{*u64~~r, 0, extract{[2]u64~~res, 0}}
if (T==i8) storeu{*u64~~r, extract{[2]u64~~res, 0}}
else store{*V~~r, 0, res}
r+= pc
}