aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMike Pall <mike>2011-04-08 02:44:56 +0200
committerMike Pall <mike>2011-04-08 02:44:56 +0200
commit0046f955eb42125e5c1ddd485d1ee86f1e6a2208 (patch)
tree31763b518fefdaf3788a61cd7b25fa35af9fd270 /src
parent3f8fed53587e406415945389243dd18284a20939 (diff)
downloadluajit-0046f955eb42125e5c1ddd485d1ee86f1e6a2208.tar.gz
luajit-0046f955eb42125e5c1ddd485d1ee86f1e6a2208.tar.bz2
luajit-0046f955eb42125e5c1ddd485d1ee86f1e6a2208.zip
ARM: Handle stack growth during function calls.
Diffstat (limited to 'src')
-rw-r--r--src/buildvm_arm.dasc23
1 files changed, 21 insertions, 2 deletions
diff --git a/src/buildvm_arm.dasc b/src/buildvm_arm.dasc
index e6c66de3..81b03fea 100644
--- a/src/buildvm_arm.dasc
+++ b/src/buildvm_arm.dasc
@@ -338,10 +338,29 @@ static void build_subroutines(BuildCtx *ctx)
338 |//----------------------------------------------------------------------- 338 |//-----------------------------------------------------------------------
339 | 339 |
340 |->vm_growstack_c: // Grow stack for C function. 340 |->vm_growstack_c: // Grow stack for C function.
341 | NYI 341 | // CARG1 = L
342 | mov CARG2, #LUA_MINSTACK
343 | b >2
342 | 344 |
343 |->vm_growstack_l: // Grow stack for Lua function. 345 |->vm_growstack_l: // Grow stack for Lua function.
344 | NYI 346 | // BASE = new base, RA = BASE+framesize*8, RC = nargs*8, PC = first PC
347 | add RC, BASE, RC
348 | sub RA, RA, BASE
349 | mov CARG1, L
350 | str BASE, L->base
351 | add PC, PC, #4 // Must point after first instruction.
352 | str RC, L->top
353 | lsr CARG3, RA, #3
354 |2:
355 | // L->base = new base, L->top = top
356 | str PC, SAVE_PC
357 | bl extern lj_state_growstack // (lua_State *L, int n)
358 | ldr BASE, L->base
359 | ldr RC, L->top
360 | ldr LFUNC:CARG3, [BASE, FRAME_FUNC]
361 | sub NARGS8:RC, RC, BASE
362 | // BASE = new base, RB = LFUNC/CFUNC, RC = nargs*8, FRAME_PC(BASE) = PC
363 | ins_callt // Just retry the call.
345 | 364 |
346 |//----------------------------------------------------------------------- 365 |//-----------------------------------------------------------------------
347 |//-- Entry points into the assembler VM --------------------------------- 366 |//-- Entry points into the assembler VM ---------------------------------