aboutsummaryrefslogtreecommitdiff
path: root/src/lj_asm_ppc.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/lj_asm_ppc.h')
-rw-r--r--src/lj_asm_ppc.h5
1 files changed, 3 insertions, 2 deletions
diff --git a/src/lj_asm_ppc.h b/src/lj_asm_ppc.h
index ce5cab10..676bfcbf 100644
--- a/src/lj_asm_ppc.h
+++ b/src/lj_asm_ppc.h
@@ -362,6 +362,7 @@ static void asm_retf(ASMState *as, IRIns *ir)
362 int32_t delta = 1+bc_a(*((const BCIns *)pc - 1)); 362 int32_t delta = 1+bc_a(*((const BCIns *)pc - 1));
363 as->topslot -= (BCReg)delta; 363 as->topslot -= (BCReg)delta;
364 if ((int32_t)as->topslot < 0) as->topslot = 0; 364 if ((int32_t)as->topslot < 0) as->topslot = 0;
365 irt_setmark(IR(REF_BASE)->t); /* Children must not coalesce with BASE reg. */
365 emit_setgl(as, base, jit_base); 366 emit_setgl(as, base, jit_base);
366 emit_addptr(as, base, -8*delta); 367 emit_addptr(as, base, -8*delta);
367 asm_guardcc(as, CC_NE); 368 asm_guardcc(as, CC_NE);
@@ -1868,7 +1869,7 @@ static void asm_head_root_base(ASMState *as)
1868 Reg r = ir->r; 1869 Reg r = ir->r;
1869 if (ra_hasreg(r)) { 1870 if (ra_hasreg(r)) {
1870 ra_free(as, r); 1871 ra_free(as, r);
1871 if (rset_test(as->modset, r)) 1872 if (rset_test(as->modset, r) || irt_ismarked(ir->t))
1872 ir->r = RID_INIT; /* No inheritance for modified BASE register. */ 1873 ir->r = RID_INIT; /* No inheritance for modified BASE register. */
1873 if (r != RID_BASE) 1874 if (r != RID_BASE)
1874 emit_mr(as, r, RID_BASE); 1875 emit_mr(as, r, RID_BASE);
@@ -1882,7 +1883,7 @@ static RegSet asm_head_side_base(ASMState *as, IRIns *irp, RegSet allow)
1882 Reg r = ir->r; 1883 Reg r = ir->r;
1883 if (ra_hasreg(r)) { 1884 if (ra_hasreg(r)) {
1884 ra_free(as, r); 1885 ra_free(as, r);
1885 if (rset_test(as->modset, r)) 1886 if (rset_test(as->modset, r) || irt_ismarked(ir->t))
1886 ir->r = RID_INIT; /* No inheritance for modified BASE register. */ 1887 ir->r = RID_INIT; /* No inheritance for modified BASE register. */
1887 if (irp->r == r) { 1888 if (irp->r == r) {
1888 rset_clear(allow, r); /* Mark same BASE register as coalesced. */ 1889 rset_clear(allow, r); /* Mark same BASE register as coalesced. */