ARM: Fix excess stack growth in interpreter.

This commit is contained in:
Mike Pall 2014-12-27 05:59:16 +01:00
parent 1b774d9da3
commit 54826563b2

View File

@ -335,7 +335,7 @@ static void build_subroutines(BuildCtx *ctx)
| // - The GC shrinks the stack in between. | // - The GC shrinks the stack in between.
| // - A return back from a lua_call() with (high) nresults adjustment. | // - A return back from a lua_call() with (high) nresults adjustment.
| str BASE, L->top // Save current top held in BASE (yes). | str BASE, L->top // Save current top held in BASE (yes).
| mov CARG2, KBASE | lsr CARG2, KBASE, #3
| mov CARG1, L | mov CARG1, L
| bl extern lj_state_growstack // (lua_State *L, int n) | bl extern lj_state_growstack // (lua_State *L, int n)
| ldr BASE, L->top // Need the (realloced) L->top in BASE. | ldr BASE, L->top // Need the (realloced) L->top in BASE.
@ -389,7 +389,7 @@ static void build_subroutines(BuildCtx *ctx)
| str BASE, L->base | str BASE, L->base
| add PC, PC, #4 // Must point after first instruction. | add PC, PC, #4 // Must point after first instruction.
| str RC, L->top | str RC, L->top
| lsr CARG3, RA, #3 | lsr CARG2, RA, #3
|2: |2:
| // L->base = new base, L->top = top | // L->base = new base, L->top = top
| str PC, SAVE_PC | str PC, SAVE_PC