diff options
| author | Mike Pall <mike> | 2010-09-01 00:25:35 +0200 |
|---|---|---|
| committer | Mike Pall <mike> | 2010-09-01 00:25:35 +0200 |
| commit | d67eb4de49759c7c92a56b8d2c1b9858ecbd3bf8 (patch) | |
| tree | 84c2402a414d005e05afc66b7ba61ad4c39efc86 /src | |
| parent | d71bd78b8fd1a5aa89802581672329190dcf1a5d (diff) | |
| download | luajit-d67eb4de49759c7c92a56b8d2c1b9858ecbd3bf8.tar.gz luajit-d67eb4de49759c7c92a56b8d2c1b9858ecbd3bf8.tar.bz2 luajit-d67eb4de49759c7c92a56b8d2c1b9858ecbd3bf8.zip | |
PPC: Handle stack growth on return to C.
Diffstat (limited to 'src')
| -rw-r--r-- | src/buildvm_ppc.dasc | 15 |
1 files changed, 14 insertions, 1 deletions
diff --git a/src/buildvm_ppc.dasc b/src/buildvm_ppc.dasc index 7e8178cd..d016ec47 100644 --- a/src/buildvm_ppc.dasc +++ b/src/buildvm_ppc.dasc | |||
| @@ -329,7 +329,20 @@ static void build_subroutines(BuildCtx *ctx) | |||
| 329 | | b <3 | 329 | | b <3 |
| 330 | | | 330 | | |
| 331 | |8: // Corner case: need to grow stack for filling up results. | 331 | |8: // Corner case: need to grow stack for filling up results. |
| 332 | | NYI | 332 | | // This can happen if: |
| 333 | | // - A C function grows the stack (a lot). | ||
| 334 | | // - The GC shrinks the stack in between. | ||
| 335 | | // - A return back from a lua_call() with (high) nresults adjustment. | ||
| 336 | | stw BASE, L->top // Save current top held in BASE (yes). | ||
| 337 | | mr SAVE0, RD | ||
| 338 | | mr CARG2, TMP2 | ||
| 339 | | mr CARG1, L | ||
| 340 | | bl extern lj_state_growstack // (lua_State *L, int n) | ||
| 341 | | lwz TMP2, SAVE_NRES | ||
| 342 | | mr RD, SAVE0 | ||
| 343 | | slwi TMP2, TMP2, 3 | ||
| 344 | | lwz BASE, L->top // Need the (realloced) L->top in BASE. | ||
| 345 | | b <2 | ||
| 333 | | | 346 | | |
| 334 | |->vm_unwind_c: // Unwind C stack, return from vm_pcall. | 347 | |->vm_unwind_c: // Unwind C stack, return from vm_pcall. |
| 335 | | NYI | 348 | | NYI |
