aboutsummaryrefslogtreecommitdiff
path: root/src/lj_asm.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/lj_asm.c')
-rw-r--r--src/lj_asm.c4
1 files changed, 3 insertions, 1 deletions
diff --git a/src/lj_asm.c b/src/lj_asm.c
index 6f5e0c45..0fcd8485 100644
--- a/src/lj_asm.c
+++ b/src/lj_asm.c
@@ -1888,6 +1888,7 @@ static void asm_head_side(ASMState *as)
1888 IRRef1 sloadins[RID_MAX]; 1888 IRRef1 sloadins[RID_MAX];
1889 RegSet allow = RSET_ALL; /* Inverse of all coalesced registers. */ 1889 RegSet allow = RSET_ALL; /* Inverse of all coalesced registers. */
1890 RegSet live = RSET_EMPTY; /* Live parent registers. */ 1890 RegSet live = RSET_EMPTY; /* Live parent registers. */
1891 RegSet pallow = RSET_GPR; /* Registers needed by the parent stack check. */
1891 IRIns *irp = &as->parent->ir[REF_BASE]; /* Parent base. */ 1892 IRIns *irp = &as->parent->ir[REF_BASE]; /* Parent base. */
1892 int32_t spadj, spdelta; 1893 int32_t spadj, spdelta;
1893 int pass2 = 0; 1894 int pass2 = 0;
@@ -1928,6 +1929,7 @@ static void asm_head_side(ASMState *as)
1928 sloadins[rs] = (IRRef1)i; 1929 sloadins[rs] = (IRRef1)i;
1929 rset_set(live, rs); /* Block live parent register. */ 1930 rset_set(live, rs); /* Block live parent register. */
1930 } 1931 }
1932 if (!ra_hasspill(regsp_spill(rs))) rset_clear(pallow, regsp_reg(rs));
1931 } 1933 }
1932 1934
1933 /* Calculate stack frame adjustment. */ 1935 /* Calculate stack frame adjustment. */
@@ -2044,7 +2046,7 @@ static void asm_head_side(ASMState *as)
2044 ExitNo exitno = as->J->exitno; 2046 ExitNo exitno = as->J->exitno;
2045#endif 2047#endif
2046 as->T->topslot = (uint8_t)as->topslot; /* Remember for child traces. */ 2048 as->T->topslot = (uint8_t)as->topslot; /* Remember for child traces. */
2047 asm_stack_check(as, as->topslot, irp, allow & RSET_GPR, exitno); 2049 asm_stack_check(as, as->topslot, irp, pallow, exitno);
2048 } 2050 }
2049} 2051}
2050 2052