move arith_recd to a noinline function
This commit is contained in:
parent
f758a3f1f6
commit
dad47cf391
@ -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]) } \
|
||||
|
||||
@ -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
|
||||
@ -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
|
||||
|
||||
Loading…
Reference in New Issue
Block a user