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)) { \
|
if ((we==el_i32|we==el_f64)&(xe==el_i32|xe==el_f64)) { \
|
||||||
bool wei = we==el_i32; bool xei = xe==el_i32; \
|
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) { 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) { PF(w) PF(x) Rf64(x) DOF(EXPR,w,wp[i],xp[i]) decG(w);decG(x);return r; } \
|
||||||
rcf64:; Rf64(x) \
|
rcf64:; Rf64(x) \
|
||||||
if (wei) { PI32(w) \
|
if (wei) { PI32(w) \
|
||||||
if (xei) { PI32(x) DOF(EXPR,w,wp[i],xp[i]) } \
|
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])));
|
for (usz i = 1; i < ia; i++) HARR_ADD(rHc, i, f(fo, inc(xp[i])));
|
||||||
return any_squeeze(HARR_FCD(rHc, x));
|
return any_squeeze(HARR_FCD(rHc, x));
|
||||||
}
|
}
|
||||||
} else
|
} else goto m_fallback;
|
||||||
rH = m_harr0c(x);
|
} else goto m_fallback;
|
||||||
} else
|
m_fallback:
|
||||||
rH = m_harr0c(x);
|
rH = m_harr0c(x);
|
||||||
fallback:
|
fallback:
|
||||||
rH.a[i++] = cr;
|
rH.a[i++] = cr;
|
||||||
for (; i < ia; i++) rH.a[i] = f(fo, Get(x,i));
|
for (; i < ia; i++) rH.a[i] = f(fo, Get(x,i));
|
||||||
decG(x);
|
decG(x);
|
||||||
return any_squeeze(rH.b);
|
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
|
#if CATCH_ERRORS
|
||||||
static inline B arith_recd(BBB2B f, B w, B x) {
|
NOINLINE 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));
|
|
||||||
}
|
|
||||||
#else
|
#else
|
||||||
static inline B arith_recd(BBB2B f, B w, B x) {
|
static inline B arith_recd(BBB2B f, B w, B x) { return eachd_fn(bi_N, w, x, f); }
|
||||||
return eachd_fn(bi_N, w, x, f);
|
|
||||||
}
|
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user