aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMike Pall <mike>2010-08-31 23:52:45 +0200
committerMike Pall <mike>2010-08-31 23:52:45 +0200
commitfc1866fb6ff84327cea91977f83f2a038d2999ca (patch)
treed7561346d9556ed2fcac450fb96d5c9e16aaf02c /src
parent233dc7607831b51237f05bfc5ff6261beb5cf9e2 (diff)
downloadluajit-fc1866fb6ff84327cea91977f83f2a038d2999ca.tar.gz
luajit-fc1866fb6ff84327cea91977f83f2a038d2999ca.tar.bz2
luajit-fc1866fb6ff84327cea91977f83f2a038d2999ca.zip
PPC: Handle stack growth during function calls.
Diffstat (limited to 'src')
-rw-r--r--src/buildvm_ppc.dasc21
1 files changed, 19 insertions, 2 deletions
diff --git a/src/buildvm_ppc.dasc b/src/buildvm_ppc.dasc
index 764cd391..5d3fc198 100644
--- a/src/buildvm_ppc.dasc
+++ b/src/buildvm_ppc.dasc
@@ -346,10 +346,27 @@ static void build_subroutines(BuildCtx *ctx)
346 |//----------------------------------------------------------------------- 346 |//-----------------------------------------------------------------------
347 | 347 |
348 |->vm_growstack_c: // Grow stack for C function. 348 |->vm_growstack_c: // Grow stack for C function.
349 | NYI 349 | li CARG2, LUA_MINSTACK
350 | b >2
350 | 351 |
351 |->vm_growstack_l: // Grow stack for Lua function. 352 |->vm_growstack_l: // Grow stack for Lua function.
352 | NYI 353 | // BASE = new base, RA = BASE+framesize*8, RC = nargs*8, PC = first PC
354 | add RC, BASE, RC
355 | sub RA, RA, BASE
356 | stw BASE, L->base
357 | addi PC, PC, 4 // Must point after first instruction.
358 | stw RC, L->top
359 | srwi CARG2, RA, 3
360 |2:
361 | // L->base = new base, L->top = top
362 | mr CARG1, L
363 | bl extern lj_state_growstack // (lua_State *L, int n)
364 | lwz BASE, L->base
365 | lwz RC, L->top
366 | lwz LFUNC:RB, FRAME_FUNC(BASE)
367 | sub RC, RC, BASE
368 | // BASE = new base, RB = LFUNC/CFUNC, RC = nargs*8, FRAME_PC(BASE) = PC
369 | ins_callt // Just retry the call.
353 | 370 |
354 |//----------------------------------------------------------------------- 371 |//-----------------------------------------------------------------------
355 |//-- Entry points into the assembler VM --------------------------------- 372 |//-- Entry points into the assembler VM ---------------------------------