fix f64 scans on SSE2

This commit is contained in:
dzaima 2023-12-15 19:18:23 +02:00
parent c785b3a7b8
commit 840c40748f

View File

@ -22,7 +22,8 @@ def spread{a:VT, ...up} = {
def toLast{n:VT, up & hasarch{'X86_64'} & w128{VT}} = {
def l{v, w} = l{zip{up,v}, 2*w}
def l{v, w & hasarch{'SSSE3'}} = sel8{v, up*(16-w/8)+iota{16}%(w/8)}
def l{v, w & w>=32} = shuf{[4]i32, v, 4**(up*3)}
def l{v, w==32} = shuf{[4]i32, v, 4**(up*3)}
def l{v, w==64} = shuf{[4]i32, v, (2*up) + tup{0,1,0,1}}
l{n, elwidth{VT}}
}
def toLast{n:VT, up & hasarch{'AVX2'} & w256{VT}} = {
@ -59,8 +60,8 @@ def make_scan_idem{T, op, up} = {
prefix_byshift{op, shb}
}
def make_scan_idem{T==f64, op, up} = {
def sc{a} = op{a, zip{up,a}}
def sc{a & hasarch{'AVX2'}} = {
def sc{a:T & vcount{T}==2} = op{a, zip{~up,a}}
def sc{a:T & hasarch{'AVX2'} & w256{T}} = {
def sh{s, a} = op{a, shuf{[4]u64, a, rev{up,s}}}
sh{tup{0,1,1,1},sh{tup{0,0,2,2},a}}
}