diff options
Diffstat (limited to 'src/lj_asm.c')
-rw-r--r-- | src/lj_asm.c | 7 |
1 files changed, 6 insertions, 1 deletions
diff --git a/src/lj_asm.c b/src/lj_asm.c index cfdfa99f..1708c360 100644 --- a/src/lj_asm.c +++ b/src/lj_asm.c | |||
@@ -1366,6 +1366,7 @@ static void asm_head_side(ASMState *as) | |||
1366 | RegSet allow = RSET_ALL; /* Inverse of all coalesced registers. */ | 1366 | RegSet allow = RSET_ALL; /* Inverse of all coalesced registers. */ |
1367 | RegSet live = RSET_EMPTY; /* Live parent registers. */ | 1367 | RegSet live = RSET_EMPTY; /* Live parent registers. */ |
1368 | RegSet pallow = RSET_GPR; /* Registers needed by the parent stack check. */ | 1368 | RegSet pallow = RSET_GPR; /* Registers needed by the parent stack check. */ |
1369 | Reg pbase; | ||
1369 | IRIns *irp = &as->parent->ir[REF_BASE]; /* Parent base. */ | 1370 | IRIns *irp = &as->parent->ir[REF_BASE]; /* Parent base. */ |
1370 | int32_t spadj, spdelta; | 1371 | int32_t spadj, spdelta; |
1371 | int pass2 = 0; | 1372 | int pass2 = 0; |
@@ -1377,7 +1378,11 @@ static void asm_head_side(ASMState *as) | |||
1377 | as->snapno = 0; | 1378 | as->snapno = 0; |
1378 | asm_snap_alloc(as); | 1379 | asm_snap_alloc(as); |
1379 | } | 1380 | } |
1380 | allow = asm_head_side_base(as, irp, allow); | 1381 | pbase = asm_head_side_base(as, irp); |
1382 | if (pbase != RID_NONE) { | ||
1383 | rset_clear(allow, pbase); | ||
1384 | rset_clear(pallow, pbase); | ||
1385 | } | ||
1381 | 1386 | ||
1382 | /* Scan all parent SLOADs and collect register dependencies. */ | 1387 | /* Scan all parent SLOADs and collect register dependencies. */ |
1383 | for (i = as->stopins; i > REF_BASE; i--) { | 1388 | for (i = as->stopins; i > REF_BASE; i--) { |