aboutsummaryrefslogtreecommitdiff
path: root/src/lj_asm_x86.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/lj_asm_x86.h')
-rw-r--r--src/lj_asm_x86.h5
1 files changed, 3 insertions, 2 deletions
diff --git a/src/lj_asm_x86.h b/src/lj_asm_x86.h
index 98a08d97..fda911e5 100644
--- a/src/lj_asm_x86.h
+++ b/src/lj_asm_x86.h
@@ -647,6 +647,7 @@ static void asm_retf(ASMState *as, IRIns *ir)
647 int32_t delta = 1+bc_a(*((const BCIns *)pc - 1)); 647 int32_t delta = 1+bc_a(*((const BCIns *)pc - 1));
648 as->topslot -= (BCReg)delta; 648 as->topslot -= (BCReg)delta;
649 if ((int32_t)as->topslot < 0) as->topslot = 0; 649 if ((int32_t)as->topslot < 0) as->topslot = 0;
650 irt_setmark(IR(REF_BASE)->t); /* Children must not coalesce with BASE reg. */
650 emit_setgl(as, base, jit_base); 651 emit_setgl(as, base, jit_base);
651 emit_addptr(as, base, -8*delta); 652 emit_addptr(as, base, -8*delta);
652 asm_guardcc(as, CC_NE); 653 asm_guardcc(as, CC_NE);
@@ -2481,7 +2482,7 @@ static void asm_head_root_base(ASMState *as)
2481 Reg r = ir->r; 2482 Reg r = ir->r;
2482 if (ra_hasreg(r)) { 2483 if (ra_hasreg(r)) {
2483 ra_free(as, r); 2484 ra_free(as, r);
2484 if (rset_test(as->modset, r)) 2485 if (rset_test(as->modset, r) || irt_ismarked(ir->t))
2485 ir->r = RID_INIT; /* No inheritance for modified BASE register. */ 2486 ir->r = RID_INIT; /* No inheritance for modified BASE register. */
2486 if (r != RID_BASE) 2487 if (r != RID_BASE)
2487 emit_rr(as, XO_MOV, r, RID_BASE); 2488 emit_rr(as, XO_MOV, r, RID_BASE);
@@ -2495,7 +2496,7 @@ static RegSet asm_head_side_base(ASMState *as, IRIns *irp, RegSet allow)
2495 Reg r = ir->r; 2496 Reg r = ir->r;
2496 if (ra_hasreg(r)) { 2497 if (ra_hasreg(r)) {
2497 ra_free(as, r); 2498 ra_free(as, r);
2498 if (rset_test(as->modset, r)) 2499 if (rset_test(as->modset, r) || irt_ismarked(ir->t))
2499 ir->r = RID_INIT; /* No inheritance for modified BASE register. */ 2500 ir->r = RID_INIT; /* No inheritance for modified BASE register. */
2500 if (irp->r == r) { 2501 if (irp->r == r) {
2501 rset_clear(allow, r); /* Mark same BASE register as coalesced. */ 2502 rset_clear(allow, r); /* Mark same BASE register as coalesced. */