aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/lj_asm.c1
-rw-r--r--src/lj_asm_arm.h9
2 files changed, 7 insertions, 3 deletions
diff --git a/src/lj_asm.c b/src/lj_asm.c
index 426730be..8deddd65 100644
--- a/src/lj_asm.c
+++ b/src/lj_asm.c
@@ -644,6 +644,7 @@ static void ra_destreg(ASMState *as, IRIns *ir, Reg r)
644{ 644{
645 Reg dest = ra_dest(as, ir, RID2RSET(r)); 645 Reg dest = ra_dest(as, ir, RID2RSET(r));
646 if (dest != r) { 646 if (dest != r) {
647 lua_assert(rset_test(as->freeset, r));
647 ra_modified(as, r); 648 ra_modified(as, r);
648 emit_movrr(as, ir, dest, r); 649 emit_movrr(as, ir, dest, r);
649 } 650 }
diff --git a/src/lj_asm_arm.h b/src/lj_asm_arm.h
index e865850d..f307d6b8 100644
--- a/src/lj_asm_arm.h
+++ b/src/lj_asm_arm.h
@@ -2102,9 +2102,12 @@ static RegSet asm_head_side_base(ASMState *as, IRIns *irp, RegSet allow)
2102 if (ra_hasspill(irp->s)) { 2102 if (ra_hasspill(irp->s)) {
2103 rset_clear(allow, ra_dest(as, ir, allow)); 2103 rset_clear(allow, ra_dest(as, ir, allow));
2104 } else { 2104 } else {
2105 lua_assert(ra_hasreg(irp->r)); 2105 Reg r = irp->r;
2106 rset_clear(allow, irp->r); 2106 lua_assert(ra_hasreg(r));
2107 ra_destreg(as, ir, irp->r); 2107 rset_clear(allow, r);
2108 if (r != ir->r && !rset_test(as->freeset, r))
2109 ra_restore(as, regcost_ref(as->cost[r]));
2110 ra_destreg(as, ir, r);
2108 } 2111 }
2109 return allow; 2112 return allow;
2110} 2113}