Merge branch 'master' into v2.1
This commit is contained in:
@@ -2528,6 +2528,9 @@ static void asm_stack_restore(ASMState *as, SnapShot *snap)
|
||||
|
||||
/* -- GC handling --------------------------------------------------------- */
|
||||
|
||||
/* Marker to prevent patching the GC check exit. */
|
||||
#define MIPS_NOPATCH_GC_CHECK MIPSI_OR
|
||||
|
||||
/* Check GC threshold and do one or more GC steps. */
|
||||
static void asm_gc_check(ASMState *as)
|
||||
{
|
||||
@@ -2543,6 +2546,7 @@ static void asm_gc_check(ASMState *as)
|
||||
args[0] = ASMREF_TMP1; /* global_State *g */
|
||||
args[1] = ASMREF_TMP2; /* MSize steps */
|
||||
asm_gencall(as, ci, args);
|
||||
l_end[-3] = MIPS_NOPATCH_GC_CHECK; /* Replace the nop after the call. */
|
||||
emit_tsi(as, MIPSI_AADDIU, ra_releasetmp(as, ASMREF_TMP1), RID_JGL, -32768);
|
||||
tmp = ra_releasetmp(as, ASMREF_TMP2);
|
||||
emit_loadi(as, tmp, as->gcsteps);
|
||||
@@ -2694,7 +2698,7 @@ void lj_asm_patchexit(jit_State *J, GCtrace *T, ExitNo exitno, MCode *target)
|
||||
#else
|
||||
(p[-1] & 0xff600000u) == MIPSI_BC1EQZ
|
||||
#endif
|
||||
)) {
|
||||
) && p[-2] != MIPS_NOPATCH_GC_CHECK) {
|
||||
ptrdiff_t delta = target - p;
|
||||
if (((delta + 0x8000) >> 16) == 0) { /* Patch in-range branch. */
|
||||
patchbranch:
|
||||
|
||||
Reference in New Issue
Block a user