move arith_recd to a noinline function

This commit is contained in:
dzaima 2022-09-01 18:51:02 +03:00
parent f758a3f1f6
commit dad47cf391
3 changed files with 22 additions and 20 deletions

View File

@ -178,8 +178,8 @@ static f64 pfmod(f64 a, f64 b) {
} \
if ((we==el_i32|we==el_f64)&(xe==el_i32|xe==el_f64)) { \
bool wei = we==el_i32; bool xei = xe==el_i32; \
if (wei&xei) { PI32(w)PI32(x)DOI32(EXPR,w,wp[i],xp[i],rcf64) } \
if (!wei&!xei) {PF(w)PF(x) { } Rf64(x) DOF(EXPR,w,wp[i],xp[i]) decG(w);decG(x);return r; } \
if (wei&xei) { PI32(w) PI32(x) DOI32(EXPR,w,wp[i],xp[i],rcf64) } \
if (!wei&!xei) { PF(w) PF(x) Rf64(x) DOF(EXPR,w,wp[i],xp[i]) decG(w);decG(x);return r; } \
rcf64:; Rf64(x) \
if (wei) { PI32(w) \
if (xei) { PI32(x) DOF(EXPR,w,wp[i],xp[i]) } \

View File

@ -122,13 +122,27 @@ B eachm_fn(B fo, B x, BB2B f) { // TODO definitely rewrite this. Probably still
for (usz i = 1; i < ia; i++) HARR_ADD(rHc, i, f(fo, inc(xp[i])));
return any_squeeze(HARR_FCD(rHc, x));
}
} else
rH = m_harr0c(x);
} else
} else goto m_fallback;
} else goto m_fallback;
m_fallback:
rH = m_harr0c(x);
fallback:
rH.a[i++] = cr;
for (; i < ia; i++) rH.a[i] = f(fo, Get(x,i));
decG(x);
return any_squeeze(rH.b);
}
}
#if CATCH_ERRORS
B arith_recd(BBB2B f, B w, B x) {
B fx = getFillQ(x);
if (noFill(fx)) return eachd_fn(bi_N, w, x, f);
B fw = getFillQ(w);
B r = eachd_fn(bi_N, w, x, f);
if (noFill(fw)) { dec(fx); return r; }
if (CATCH) { freeThrown(); return r; }
B fr = f(bi_N, fw, fx);
popCatch();
return withFill(r, asFill(fr));
}
#endif

View File

@ -22,19 +22,7 @@ static B eachd(B f, B w, B x) { // complete w F¨ x without fills; consumes w,x
#if CATCH_ERRORS
static inline B arith_recd(BBB2B f, B w, B x) {
B fx = getFillQ(x);
if (noFill(fx)) return eachd_fn(bi_N, w, x, f);
B fw = getFillQ(w);
B r = eachd_fn(bi_N, w, x, f);
if (noFill(fw)) { dec(fx); return r; }
if (CATCH) { freeThrown(); return r; }
B fr = f(bi_N, fw, fx);
popCatch();
return withFill(r, asFill(fr));
}
NOINLINE B arith_recd(BBB2B f, B w, B x);
#else
static inline B arith_recd(BBB2B f, B w, B x) {
return eachd_fn(bi_N, w, x, f);
}
static inline B arith_recd(BBB2B f, B w, B x) { return eachd_fn(bi_N, w, x, f); }
#endif