checkmclim(as);
}
#endif
- work = (drop & ~as->freeset) & RSET_GPR;
+ work = (drop & ~as->freeset);
while (work) {
Reg r = rset_pickbot(work);
ra_restore(as, regcost_ref(as->cost[r]));
{
Reg dest = ra_dest(as, ir, RID2RSET(r));
if (dest != r) {
- ra_scratch(as, RID2RSET(r));
+ ra_modified(as, r);
emit_movrr(as, ir, dest, r);
}
}
}
/* Restore/remat invariants whose registers are modified inside the loop. */
+#if !LJ_SOFTFP
+ work = as->modset & ~(as->freeset | as->phiset) & RSET_FPR;
+ while (work) {
+ Reg r = rset_pickbot(work);
+ ra_restore(as, regcost_ref(as->cost[r]));
+ rset_clear(work, r);
+ checkmclim(as);
+ }
+#endif
work = as->modset & ~(as->freeset | as->phiset);
while (work) {
Reg r = rset_pickbot(work);