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 57fd2513..e1a496a7 100644
--- a/src/lj_asm_ppc.h
+++ b/src/lj_asm_ppc.h
@@ -381,6 +381,7 @@ static void asm_retf(ASMState *as, IRIns *ir)
381 int32_t delta = 1+bc_a(*((const BCIns *)pc - 1)); 381 int32_t delta = 1+bc_a(*((const BCIns *)pc - 1));
382 as->topslot -= (BCReg)delta; 382 as->topslot -= (BCReg)delta;
383 if ((int32_t)as->topslot < 0) as->topslot = 0; 383 if ((int32_t)as->topslot < 0) as->topslot = 0;
384 irt_setmark(IR(REF_BASE)->t); /* Children must not coalesce with BASE reg. */
384 emit_setgl(as, base, jit_base); 385 emit_setgl(as, base, jit_base);
385 emit_addptr(as, base, -8*delta); 386 emit_addptr(as, base, -8*delta);
386 asm_guardcc(as, CC_NE); 387 asm_guardcc(as, CC_NE);
@@ -1901,7 +1902,7 @@ static void asm_head_root_base(ASMState *as)
1901 Reg r = ir->r; 1902 Reg r = ir->r;
1902 if (ra_hasreg(r)) { 1903 if (ra_hasreg(r)) {
1903 ra_free(as, r); 1904 ra_free(as, r);
1904 if (rset_test(as->modset, r)) 1905 if (rset_test(as->modset, r) || irt_ismarked(ir->t))
1905 ir->r = RID_INIT; /* No inheritance for modified BASE register. */ 1906 ir->r = RID_INIT; /* No inheritance for modified BASE register. */
1906 if (r != RID_BASE) 1907 if (r != RID_BASE)
1907 emit_mr(as, r, RID_BASE); 1908 emit_mr(as, r, RID_BASE);
@@ -1915,7 +1916,7 @@ static RegSet asm_head_side_base(ASMState *as, IRIns *irp, RegSet allow)
1915 Reg r = ir->r; 1916 Reg r = ir->r;
1916 if (ra_hasreg(r)) { 1917 if (ra_hasreg(r)) {
1917 ra_free(as, r); 1918 ra_free(as, r);
1918 if (rset_test(as->modset, r)) 1919 if (rset_test(as->modset, r) || irt_ismarked(ir->t))
1919 ir->r = RID_INIT; /* No inheritance for modified BASE register. */ 1920 ir->r = RID_INIT; /* No inheritance for modified BASE register. */
1920 if (irp->r == r) { 1921 if (irp->r == r) {
1921 rset_clear(allow, r); /* Mark same BASE register as coalesced. */ 1922 rset_clear(allow, r); /* Mark same BASE register as coalesced. */