16-bit & 64-bit ⊔ cases
This commit is contained in:
parent
5d687b1ac3
commit
88f4fdaa7e
@ -977,21 +977,23 @@ B group_c2(B t, B w, B x) {
|
|||||||
Arr* rf = m_fillarrp(0); fillarr_setFill(rf, m_f64(0)); arr_shVec(rf);
|
Arr* rf = m_fillarrp(0); fillarr_setFill(rf, m_f64(0)); arr_shVec(rf);
|
||||||
fillarr_setFill(r, taga(rf));
|
fillarr_setFill(r, taga(rf));
|
||||||
u8 xe = TI(x,elType);
|
u8 xe = TI(x,elType);
|
||||||
if (xe==el_i8 || xe==el_c8) {
|
switch (xe) { default: UD;
|
||||||
for (usz i = 0; i < ria; i++) m_tyarrv(rp+i, 1, len[i], el2t(xe));
|
case el_i8: case el_c8:
|
||||||
u8* xp = tyany_ptr(x);
|
case el_i16: case el_c16:
|
||||||
for (usz i = 0; i < xia; i++) {
|
case el_i32: case el_c32: case el_f64: {
|
||||||
i32 n = wp[i];
|
u8 width = elWidth(xe);
|
||||||
if (n>=0) ((u8*)tyarr_ptr(rp[n]))[pos[n]++] = xp[i];
|
for (usz i = 0; i < ria; i++) m_tyarrv(rp+i, width, len[i], el2t(xe));
|
||||||
|
void* xp = tyany_ptr(x);
|
||||||
|
|
||||||
|
switch(width) { default: UD;
|
||||||
|
case 1: for (usz i = 0; i < xia; i++) { i32 n = wp[i]; if (n>=0) ((u8* )tyarr_ptr(rp[n]))[pos[n]++] = ((u8* )xp)[i]; } break;
|
||||||
|
case 2: for (usz i = 0; i < xia; i++) { i32 n = wp[i]; if (n>=0) ((u16*)tyarr_ptr(rp[n]))[pos[n]++] = ((u16*)xp)[i]; } break;
|
||||||
|
case 4: for (usz i = 0; i < xia; i++) { i32 n = wp[i]; if (n>=0) ((u32*)tyarr_ptr(rp[n]))[pos[n]++] = ((u32*)xp)[i]; } break;
|
||||||
|
case 8: for (usz i = 0; i < xia; i++) { i32 n = wp[i]; if (n>=0) ((f64*)tyarr_ptr(rp[n]))[pos[n]++] = ((f64*)xp)[i]; } break;
|
||||||
}
|
}
|
||||||
} else if (xe==el_i32 || xe==el_c32) {
|
break;
|
||||||
for (usz i = 0; i < ria; i++) m_tyarrv(rp+i, 4, len[i], el2t(xe));
|
|
||||||
u32* xp = tyany_ptr(x);
|
|
||||||
for (usz i = 0; i < xia; i++) {
|
|
||||||
i32 n = wp[i];
|
|
||||||
if (n>=0) ((u32*)tyarr_ptr(rp[n]))[pos[n]++] = xp[i];
|
|
||||||
}
|
}
|
||||||
} else {
|
case el_bit: case el_B: {
|
||||||
for (usz i = 0; i < ria; i++) {
|
for (usz i = 0; i < ria; i++) {
|
||||||
Arr* c = m_fillarrp(len[i]);
|
Arr* c = m_fillarrp(len[i]);
|
||||||
fillarr_setFill(c, inc(xf));
|
fillarr_setFill(c, inc(xf));
|
||||||
@ -1005,6 +1007,8 @@ B group_c2(B t, B w, B x) {
|
|||||||
if (n>=0) fillarr_ptr(a(rp[n]))[pos[n]++] = Get(x, i);
|
if (n>=0) fillarr_ptr(a(rp[n]))[pos[n]++] = Get(x, i);
|
||||||
}
|
}
|
||||||
for (usz i = 0; i < ria; i++) { a(rp[i])->ia = len[i]; arr_shVec(a(rp[i])); }
|
for (usz i = 0; i < ria; i++) { a(rp[i])->ia = len[i]; arr_shVec(a(rp[i])); }
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
fillarr_setFill(rf, xf);
|
fillarr_setFill(rf, xf);
|
||||||
decG(w); decG(x); TFREE(lenO); TFREE(pos);
|
decG(w); decG(x); TFREE(lenO); TFREE(pos);
|
||||||
|
|||||||
@ -36,3 +36,5 @@ static void* m_tyarrcO(B* rp, usz w, B x, u8 type, usz over) M_TYARR(+over, a
|
|||||||
|
|
||||||
extern u8 elType2type[];
|
extern u8 elType2type[];
|
||||||
#define el2t(X) elType2type[X] // TODO maybe reorganize array types such that this can just be addition?
|
#define el2t(X) elType2type[X] // TODO maybe reorganize array types such that this can just be addition?
|
||||||
|
extern u8 elTypeWidth[];
|
||||||
|
#define elWidth(X) elTypeWidth[X]
|
||||||
@ -2,11 +2,16 @@
|
|||||||
#include "../utils/mut.h"
|
#include "../utils/mut.h"
|
||||||
|
|
||||||
u8 elType2type[] = {
|
u8 elType2type[] = {
|
||||||
[el_bit] = t_bitarr,
|
|
||||||
[el_i8 ] = t_i8arr, [el_c8 ] = t_c8arr,
|
[el_i8 ] = t_i8arr, [el_c8 ] = t_c8arr,
|
||||||
[el_i16] = t_i16arr,[el_c16] = t_c16arr,
|
[el_i16] = t_i16arr,[el_c16] = t_c16arr,
|
||||||
[el_i32] = t_i32arr,[el_c32] = t_c32arr,
|
[el_i32] = t_i32arr,[el_c32] = t_c32arr,
|
||||||
[el_f64] = t_f64arr
|
[el_bit] = t_bitarr,[el_f64] = t_f64arr
|
||||||
|
};
|
||||||
|
u8 elTypeWidth[] = {
|
||||||
|
[el_i8 ] = 1, [el_c8 ] = 1,
|
||||||
|
[el_i16] = 2, [el_c16] = 2,
|
||||||
|
[el_i32] = 4, [el_c32] = 4,
|
||||||
|
[el_bit] = 0, [el_f64] = 8
|
||||||
};
|
};
|
||||||
|
|
||||||
B m_i8(i8 x) { return m_i32(x); } B m_i16(i16 x) { return m_i32(x); }
|
B m_i8(i8 x) { return m_i32(x); } B m_i16(i16 x) { return m_i32(x); }
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user