don't need copying from bitarr to character arr
This commit is contained in:
parent
c5a3c57f50
commit
3b1b171828
@ -269,24 +269,24 @@ DEF_G(void, copy, B, (void* a, usz ms, B x, usz xs, usz l), ms, x, x
|
|||||||
static copy_fn tcopy_c16Fns[] = {[t_c8arr]=avx2_copy_c8_c16,[t_c8slice]=avx2_copy_c8_c16, [t_c16arr]=avx2_copy_c16_c16,[t_c16slice]=avx2_copy_c16_c16};
|
static copy_fn tcopy_c16Fns[] = {[t_c8arr]=avx2_copy_c8_c16,[t_c8slice]=avx2_copy_c8_c16, [t_c16arr]=avx2_copy_c16_c16,[t_c16slice]=avx2_copy_c16_c16};
|
||||||
static copy_fn tcopy_c32Fns[] = {[t_c8arr]=avx2_copy_c8_c32,[t_c8slice]=avx2_copy_c8_c32, [t_c16arr]=avx2_copy_c16_c32,[t_c16slice]=avx2_copy_c16_c32, [t_c32arr]=avx2_copy_c32_c32,[t_c32slice]=avx2_copy_c32_c32};
|
static copy_fn tcopy_c32Fns[] = {[t_c8arr]=avx2_copy_c8_c32,[t_c8slice]=avx2_copy_c8_c32, [t_c16arr]=avx2_copy_c16_c32,[t_c16slice]=avx2_copy_c16_c32, [t_c32arr]=avx2_copy_c32_c32,[t_c32slice]=avx2_copy_c32_c32};
|
||||||
|
|
||||||
#define TCOPY_FN(T, N) static void m_copyG_##N(void* a, usz ms, B x, usz xs, usz l) { \
|
#define TCOPY_FN(T, N, NUM) static void m_copyG_##N(void* a, usz ms, B x, usz xs, usz l) { \
|
||||||
if (l==0) return; \
|
if (l==0) return; \
|
||||||
void* xp = tyany_ptr(x); \
|
void* xp = tyany_ptr(x); \
|
||||||
T* rp = ms + (T*)a; \
|
T* rp = ms + (T*)a; \
|
||||||
u8 xt = TY(x); \
|
u8 xt = TY(x); \
|
||||||
if (xt==t_bitarr) { \
|
if (NUM && xt==t_bitarr) { \
|
||||||
for (usz i = 0; i < l; i++) rp[i] = bitp_get((u64*)xp, xs+i); \
|
for (usz i = 0; i < l; i++) rp[i] = bitp_get((u64*)xp, xs+i); \
|
||||||
} else { \
|
} else { \
|
||||||
tcopy_##N##Fns[xt]((xs << arrTypeWidthLog(xt)) + (u8*)xp, rp, l, a(x)); \
|
tcopy_##N##Fns[xt]((xs << arrTypeWidthLog(xt)) + (u8*)xp, rp, l, a(x)); \
|
||||||
} \
|
} \
|
||||||
}
|
}
|
||||||
TCOPY_FN(i8,i8)
|
TCOPY_FN(i8,i8, 1)
|
||||||
TCOPY_FN(i16,i16)
|
TCOPY_FN(i16,i16, 1)
|
||||||
TCOPY_FN(i32,i32)
|
TCOPY_FN(i32,i32, 1)
|
||||||
TCOPY_FN(u8,c8)
|
TCOPY_FN(u8,c8, 0)
|
||||||
TCOPY_FN(u16,c16)
|
TCOPY_FN(u16,c16, 0)
|
||||||
TCOPY_FN(u32,c32)
|
TCOPY_FN(u32,c32, 0)
|
||||||
TCOPY_FN(f64,f64)
|
TCOPY_FN(f64,f64, 1)
|
||||||
static void m_copyG_bit(void* a, usz ms, B x, usz xs, usz l) {
|
static void m_copyG_bit(void* a, usz ms, B x, usz xs, usz l) {
|
||||||
bit_cpy((u64*)a, ms, bitarr_ptr(x), xs, l);
|
bit_cpy((u64*)a, ms, bitarr_ptr(x), xs, l);
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user