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 0fcd8485..7ce2e5d2 100644 --- a/src/lj_asm.c +++ b/src/lj_asm.c | |||
@@ -1889,6 +1889,7 @@ static void asm_head_side(ASMState *as) | |||
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 | RegSet pallow = RSET_GPR; /* Registers needed by the parent stack check. */ |
1892 | Reg pbase; | ||
1892 | IRIns *irp = &as->parent->ir[REF_BASE]; /* Parent base. */ | 1893 | IRIns *irp = &as->parent->ir[REF_BASE]; /* Parent base. */ |
1893 | int32_t spadj, spdelta; | 1894 | int32_t spadj, spdelta; |
1894 | int pass2 = 0; | 1895 | int pass2 = 0; |
@@ -1899,7 +1900,11 @@ static void asm_head_side(ASMState *as) | |||
1899 | /* Force snap #0 alloc to prevent register overwrite in stack check. */ | 1900 | /* Force snap #0 alloc to prevent register overwrite in stack check. */ |
1900 | asm_snap_alloc(as, 0); | 1901 | asm_snap_alloc(as, 0); |
1901 | } | 1902 | } |
1902 | allow = asm_head_side_base(as, irp, allow); | 1903 | pbase = asm_head_side_base(as, irp); |
1904 | if (pbase != RID_NONE) { | ||
1905 | rset_clear(allow, pbase); | ||
1906 | rset_clear(pallow, pbase); | ||
1907 | } | ||
1903 | 1908 | ||
1904 | /* Scan all parent SLOADs and collect register dependencies. */ | 1909 | /* Scan all parent SLOADs and collect register dependencies. */ |
1905 | for (i = as->stopins; i > REF_BASE; i--) { | 1910 | for (i = as->stopins; i > REF_BASE; i--) { |