use COPY_TO to copy in bqn_readObjArr if possible

This commit is contained in:
dzaima 2023-04-06 13:37:00 +03:00
parent 0aca470931
commit 71f9278a95

View File

@ -83,12 +83,16 @@ EXPORT void bqn_readC16Arr(BQNV a, u16* buf) { B c = toC16Any(incG(getB(a))); m
EXPORT void bqn_readC32Arr(BQNV a, u32* buf) { B c = toC32Any(incG(getB(a))); memcpy(buf, c32any_ptr(c), IA(c) * 4); dec(c); } EXPORT void bqn_readC32Arr(BQNV a, u32* buf) { B c = toC32Any(incG(getB(a))); memcpy(buf, c32any_ptr(c), IA(c) * 4); dec(c); }
EXPORT void bqn_readObjArr(BQNV a, BQNV* buf) { B b = getB(a); EXPORT void bqn_readObjArr(BQNV a, BQNV* buf) { B b = getB(a);
usz ia = IA(b); usz ia = IA(b);
B* p = arr_bptr(b); if (DIRECT_BQNV && sizeof(BQNV)==sizeof(B)) {
if (p!=NULL) { COPY_TO(buf, el_B, 0, b, 0, ia);
for (usz i = 0; i < ia; i++) buf[i] = makeX(inc(p[i]));
} else { } else {
SGet(b) B* p = arr_bptr(b);
for (usz i = 0; i < ia; i++) buf[i] = makeX(Get(b, i)); if (p!=NULL) {
for (usz i = 0; i < ia; i++) buf[i] = makeX(inc(p[i]));
} else {
SGet(b)
for (usz i = 0; i < ia; i++) buf[i] = makeX(Get(b, i));
}
} }
} }
@ -724,8 +728,8 @@ B libffiFn_c2(B t, B w, B x) {
u32 flags = (u64)bf->w_c1; u32 flags = (u64)bf->w_c1;
Arr* wa; AS2B wf; Arr* wa ONLY_GCC(=0); AS2B wf ONLY_GCC(=0);
Arr* xa; AS2B xf; Arr* xa ONLY_GCC(=0); AS2B xf ONLY_GCC(=0);
if (flags&1) { wa=a(w); wf=TIv(wa,getU); } if (flags&1) { wa=a(w); wf=TIv(wa,getU); }
if (flags&2) { xa=a(x); xf=TIv(xa,getU); } if (flags&2) { xa=a(x); xf=TIv(xa,getU); }
i32 idxs[2] = {0,0}; i32 idxs[2] = {0,0};