Singeli-generated table for bits.singeli

This commit is contained in:
dzaima 2022-12-17 17:51:56 +02:00
parent 2c73199ed4
commit 40f36fa366
2 changed files with 4 additions and 11 deletions

View File

@ -24,7 +24,6 @@ bitsel_i{VL,T}(r:*void, bits:*u64, e0:u64, e1:u64, len:u64) : void = {
bitsel{VL, T, *T~~r, bits, trunc{T,e0}, trunc{T,e1}, len}
}
'avx2_bitsel_8' =bitsel_i{256, u8}
'avx2_bitsel_16'=bitsel_i{256, u16}
'avx2_bitsel_32'=bitsel_i{256, u32}
'avx2_bitsel_64'=bitsel_i{256, u64}
def table{w} = each{{T} => bitsel_i{w, T}, tup{u8, u16, u32, u64}}
def tup_bitsel = table{256}; v_bitsel:*type{tupsel{0,tup_bitsel}} = tup_bitsel; 'avx2_bitsel'=v_bitsel

View File

@ -6,13 +6,7 @@
#pragma GCC diagnostic ignored "-Wunused-variable"
#include "../singeli/gen/bits.c"
#pragma GCC diagnostic pop
typedef void (*BitselFn)(void*, u64*, u64, u64, u64);
static BitselFn bitselFns[] = {
[0]=avx2_bitsel_8,
[1]=avx2_bitsel_16,
[2]=avx2_bitsel_32,
[3]=avx2_bitsel_64,
};
#define bitselFns avx2_bitsel
#endif
NOINLINE Arr* allZeroes(usz ia) { u64* rp; Arr* r = m_bitarrp(&rp, ia); for (usz i = 0; i < BIT_N(ia); i++) rp[i] = 0; return r; }