build select.singeli everywhere
This commit is contained in:
parent
f1f4f1734e
commit
0d5e77766a
@ -704,7 +704,7 @@ cachedBin‿linkerCache ← {
|
|||||||
"xag"‿"src/builtins/slash.c"‿"slash", "xag"‿"src/builtins/slash.c"‿"replicate",
|
"xag"‿"src/builtins/slash.c"‿"slash", "xag"‿"src/builtins/slash.c"‿"replicate",
|
||||||
"xag"‿"src/builtins/sort.c"‿"bins", "xa."‿"src/builtins/slash.c"‿"count"
|
"xag"‿"src/builtins/sort.c"‿"bins", "xa."‿"src/builtins/slash.c"‿"count"
|
||||||
|
|
||||||
"x.."‿"src/builtins/select.c"‿"select"
|
"xag"‿"src/builtins/select.c"‿"select"
|
||||||
⟩
|
⟩
|
||||||
objs ← ⟨⟩
|
objs ← ⟨⟩
|
||||||
|
|
||||||
|
|||||||
@ -1,29 +1,33 @@
|
|||||||
if_inline (hasarch{'AVX2'}) {
|
|
||||||
|
|
||||||
include './base'
|
include './base'
|
||||||
include './cbqnDefs'
|
include './cbqnDefs'
|
||||||
include './mask'
|
include './mask'
|
||||||
include './bitops'
|
include './bitops'
|
||||||
include 'util/tup'
|
include 'util/tup'
|
||||||
|
|
||||||
# def:T - masked original content
|
def {wrapChk, gather}
|
||||||
# b:B - pointer to data to index; if width{B}<elwidth{T}, padding bytes are garbage read after wanted position
|
if_inline (hasarch{'AVX2'}) {
|
||||||
# idx - actual (unscaled) index list
|
# def:T - masked original content
|
||||||
def gather{d:T, b:B, idx:([8]i32), M if w256{T,32}} = {
|
# b:B - pointer to data to index; if width{B}<elwidth{T}, padding bytes are garbage read after wanted position
|
||||||
|
# idx - actual (unscaled) index list
|
||||||
|
def gather{d:T, b:B, idx:([8]i32), M if w256{T,32}} = {
|
||||||
if (M{0}) T ~~ emit{[8]i32, '_mm256_mask_i32gather_epi32', d, *void~~b, idx, M{T,'to sign bits'}, elwidth{B}/8}
|
if (M{0}) T ~~ emit{[8]i32, '_mm256_mask_i32gather_epi32', d, *void~~b, idx, M{T,'to sign bits'}, elwidth{B}/8}
|
||||||
else T ~~ emit{[8]i32, '_mm256_i32gather_epi32', *void~~b, idx, elwidth{B}/8}
|
else T ~~ emit{[8]i32, '_mm256_i32gather_epi32', *void~~b, idx, elwidth{B}/8}
|
||||||
}
|
}
|
||||||
def gather{d:T, b:B, idx:([4]i32), M if w256{T,64}} = {
|
def gather{d:T, b:B, idx:([4]i32), M if w256{T,64}} = {
|
||||||
if (M{0}) T ~~ emit{[4]i64, '_mm256_mask_i32gather_epi64', d, *void~~b, idx, M{T,'to sign bits'}, elwidth{B}/8}
|
if (M{0}) T ~~ emit{[4]i64, '_mm256_mask_i32gather_epi64', d, *void~~b, idx, M{T,'to sign bits'}, elwidth{B}/8}
|
||||||
else T ~~ emit{[4]i64, '_mm256_i32gather_epi64', *void~~b, idx, elwidth{B}/8}
|
else T ~~ emit{[4]i64, '_mm256_i32gather_epi64', *void~~b, idx, elwidth{B}/8}
|
||||||
}
|
}
|
||||||
|
|
||||||
def wrapChk{cw0, VI,xlf, M} = {
|
def wrapChk{cw0, VI,xlf, M} = {
|
||||||
cw:= cw0 + (xlf & VI~~(cw0<VI**0))
|
cw:= cw0 + (xlf & VI~~(cw0<VI**0))
|
||||||
if (homAny{M{ty_u{cw} >= ty_u{xlf}}}) return{0}
|
if (homAny{M{ty_u{cw} >= ty_u{xlf}}}) return{0}
|
||||||
cw
|
cw
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
if_inline (hasarch{'AVX2'}) {
|
||||||
|
|
||||||
def storeExp{dst, ind, val, M, ext, rd, wl} = {
|
def storeExp{dst, ind, val, M, ext, rd, wl} = {
|
||||||
def s{M} = storeBatch{dst, ind, val, M}
|
def s{M} = storeBatch{dst, ind, val, M}
|
||||||
if (ext==1 or not M{0}) s{M}
|
if (ext==1 or not M{0}) s{M}
|
||||||
@ -135,8 +139,10 @@ exportT{'avx2_select_tab', join{table{select_fn,
|
|||||||
tup{i8, i16, i32}, # indices
|
tup{i8, i16, i32}, # indices
|
||||||
tup{u8, u16, u32, u64}}}} # values
|
tup{u8, u16, u32, u64}}}} # values
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
fn avx2_select_bool128(w0:*void, x0:*void, r0:*void, wl:u64, xl:u64) : u1 = {
|
if_inline(hasarch{'AVX2'}) {
|
||||||
|
fn avx2_select_bool128(w0:*void, x0:*void, r0:*void, wl:u64, xl:u64) : u1 = {
|
||||||
def TI = i8
|
def TI = i8
|
||||||
def VI = [32]TI
|
def VI = [32]TI
|
||||||
w:= *VI ~~ w0
|
w:= *VI ~~ w0
|
||||||
@ -161,7 +167,6 @@ fn avx2_select_bool128(w0:*void, x0:*void, r0:*void, wl:u64, xl:u64) : u1 = {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
1
|
1
|
||||||
}
|
}
|
||||||
export{'avx2_select_bool128', avx2_select_bool128}
|
export{'avx2_select_bool128', avx2_select_bool128}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user