ARM: Fix base register coalescing.

This commit is contained in:
Mike Pall 2012-08-25 18:38:30 +02:00
parent 099635c86c
commit 52ca2cc8ba
2 changed files with 7 additions and 3 deletions

View File

@ -644,6 +644,7 @@ static void ra_destreg(ASMState *as, IRIns *ir, Reg r)
{
Reg dest = ra_dest(as, ir, RID2RSET(r));
if (dest != r) {
lua_assert(rset_test(as->freeset, r));
ra_modified(as, r);
emit_movrr(as, ir, dest, r);
}

View File

@ -2102,9 +2102,12 @@ static RegSet asm_head_side_base(ASMState *as, IRIns *irp, RegSet allow)
if (ra_hasspill(irp->s)) {
rset_clear(allow, ra_dest(as, ir, allow));
} else {
lua_assert(ra_hasreg(irp->r));
rset_clear(allow, irp->r);
ra_destreg(as, ir, irp->r);
Reg r = irp->r;
lua_assert(ra_hasreg(r));
rset_clear(allow, r);
if (r != ir->r && !rset_test(as->freeset, r))
ra_restore(as, regcost_ref(as->cost[r]));
ra_destreg(as, ir, r);
}
return allow;
}