mirror of
https://github.com/LuaJIT/LuaJIT.git
synced 2025-02-07 23:24:09 +00:00
ARM: Fix base register coalescing.
This commit is contained in:
parent
099635c86c
commit
52ca2cc8ba
@ -644,6 +644,7 @@ static void ra_destreg(ASMState *as, IRIns *ir, Reg r)
|
|||||||
{
|
{
|
||||||
Reg dest = ra_dest(as, ir, RID2RSET(r));
|
Reg dest = ra_dest(as, ir, RID2RSET(r));
|
||||||
if (dest != r) {
|
if (dest != r) {
|
||||||
|
lua_assert(rset_test(as->freeset, r));
|
||||||
ra_modified(as, r);
|
ra_modified(as, r);
|
||||||
emit_movrr(as, ir, dest, r);
|
emit_movrr(as, ir, dest, r);
|
||||||
}
|
}
|
||||||
|
@ -2102,9 +2102,12 @@ static RegSet asm_head_side_base(ASMState *as, IRIns *irp, RegSet allow)
|
|||||||
if (ra_hasspill(irp->s)) {
|
if (ra_hasspill(irp->s)) {
|
||||||
rset_clear(allow, ra_dest(as, ir, allow));
|
rset_clear(allow, ra_dest(as, ir, allow));
|
||||||
} else {
|
} else {
|
||||||
lua_assert(ra_hasreg(irp->r));
|
Reg r = irp->r;
|
||||||
rset_clear(allow, irp->r);
|
lua_assert(ra_hasreg(r));
|
||||||
ra_destreg(as, ir, irp->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;
|
return allow;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user