Use COPY_TO and EQFN in the typed array code path

This commit is contained in:
Andrea Piseri 2024-05-18 23:56:13 +02:00
parent 06808414da
commit 93188a9f90

View File

@ -499,7 +499,7 @@ B select_replace(u32 chr, B w, B x, B rep, usz wia, usz xl, usz xcsz) { // rep
} }
} }
#define IMPL(T) do { \ #define IMPL(T) do { \
T* rp = (void*)((TyArr*)ra)->a; \ T* rp = (void*)((TyArr*)ra)->a; \
T* np = tyany_ptr(rep); \ T* np = tyany_ptr(rep); \
if (xcsz==1) { \ if (xcsz==1) { \
@ -511,14 +511,12 @@ B select_replace(u32 chr, B w, B x, B rep, usz wia, usz xl, usz xcsz) { // rep
DONE_CW; \ DONE_CW; \
} \ } \
} else { \ } else { \
EqFnObj eq = EQFN_GET(re,re); \
for (usz i = 0; i < wia; i++) { \ for (usz i = 0; i < wia; i++) { \
READ_W(cw, i); \ READ_W(cw, i); \
for (usz j = 0; j < xcsz; j++) { \ EQ(!EQFN_CALL(eq,rp+cw*xcsz,np+i*xcsz,xcsz)); \
T cn = np[i * xcsz + j]; \ COPY_TO(rp,re,cw*xcsz,rep,i*xcsz,xcsz); \
EQ(cn != rp[cw * xcsz + j]); \ DONE_CW; \
rp[cw * xcsz + j] = cn; \
} \
DONE_CW; \
} \ } \
} \ } \
goto dec_ret_ra; \ goto dec_ret_ra; \