diff options
author | Mike Pall <mike> | 2014-02-20 15:09:02 +0100 |
---|---|---|
committer | Mike Pall <mike> | 2014-02-20 15:09:02 +0100 |
commit | 2863b1095699404693a50082dd8d19b6c4cad99f (patch) | |
tree | 4c4626f4b8a342773fdd961f46eb39dc43616e5e /src/lj_asm_mips.h | |
parent | 46ce03464b67935fb84ace1d0710a7f3cc62e132 (diff) | |
parent | 998651fcdafc8b6f3d922e1e60864fec83409118 (diff) | |
download | luajit-2863b1095699404693a50082dd8d19b6c4cad99f.tar.gz luajit-2863b1095699404693a50082dd8d19b6c4cad99f.tar.bz2 luajit-2863b1095699404693a50082dd8d19b6c4cad99f.zip |
Merge branch 'master' into v2.1
Diffstat (limited to 'src/lj_asm_mips.h')
-rw-r--r-- | src/lj_asm_mips.h | 5 |
1 files changed, 3 insertions, 2 deletions
diff --git a/src/lj_asm_mips.h b/src/lj_asm_mips.h index b45776d4..bc521596 100644 --- a/src/lj_asm_mips.h +++ b/src/lj_asm_mips.h | |||
@@ -375,6 +375,7 @@ static void asm_retf(ASMState *as, IRIns *ir) | |||
375 | int32_t delta = 1+bc_a(*((const BCIns *)pc - 1)); | 375 | int32_t delta = 1+bc_a(*((const BCIns *)pc - 1)); |
376 | as->topslot -= (BCReg)delta; | 376 | as->topslot -= (BCReg)delta; |
377 | if ((int32_t)as->topslot < 0) as->topslot = 0; | 377 | if ((int32_t)as->topslot < 0) as->topslot = 0; |
378 | irt_setmark(IR(REF_BASE)->t); /* Children must not coalesce with BASE reg. */ | ||
378 | emit_setgl(as, base, jit_base); | 379 | emit_setgl(as, base, jit_base); |
379 | emit_addptr(as, base, -8*delta); | 380 | emit_addptr(as, base, -8*delta); |
380 | asm_guard(as, MIPSI_BNE, RID_TMP, | 381 | asm_guard(as, MIPSI_BNE, RID_TMP, |
@@ -1697,7 +1698,7 @@ static void asm_head_root_base(ASMState *as) | |||
1697 | if (as->loopinv) as->mctop--; | 1698 | if (as->loopinv) as->mctop--; |
1698 | if (ra_hasreg(r)) { | 1699 | if (ra_hasreg(r)) { |
1699 | ra_free(as, r); | 1700 | ra_free(as, r); |
1700 | if (rset_test(as->modset, r)) | 1701 | if (rset_test(as->modset, r) || irt_ismarked(ir->t)) |
1701 | ir->r = RID_INIT; /* No inheritance for modified BASE register. */ | 1702 | ir->r = RID_INIT; /* No inheritance for modified BASE register. */ |
1702 | if (r != RID_BASE) | 1703 | if (r != RID_BASE) |
1703 | emit_move(as, r, RID_BASE); | 1704 | emit_move(as, r, RID_BASE); |
@@ -1712,7 +1713,7 @@ static RegSet asm_head_side_base(ASMState *as, IRIns *irp, RegSet allow) | |||
1712 | if (as->loopinv) as->mctop--; | 1713 | if (as->loopinv) as->mctop--; |
1713 | if (ra_hasreg(r)) { | 1714 | if (ra_hasreg(r)) { |
1714 | ra_free(as, r); | 1715 | ra_free(as, r); |
1715 | if (rset_test(as->modset, r)) | 1716 | if (rset_test(as->modset, r) || irt_ismarked(ir->t)) |
1716 | ir->r = RID_INIT; /* No inheritance for modified BASE register. */ | 1717 | ir->r = RID_INIT; /* No inheritance for modified BASE register. */ |
1717 | if (irp->r == r) { | 1718 | if (irp->r == r) { |
1718 | rset_clear(allow, r); /* Mark same BASE register as coalesced. */ | 1719 | rset_clear(allow, r); /* Mark same BASE register as coalesced. */ |