diff options
author | Mike Pall <mike> | 2010-09-23 02:35:51 +0200 |
---|---|---|
committer | Mike Pall <mike> | 2010-09-23 02:35:51 +0200 |
commit | 6aedfa79196027b25d39986ea5f5e182e5f63497 (patch) | |
tree | 0e7ac9340b616fb0a443007a3d6ee807067180dd /src | |
parent | 5beedd6ef817d704df5ff5c491f94b0cdf558c43 (diff) | |
download | luajit-6aedfa79196027b25d39986ea5f5e182e5f63497.tar.gz luajit-6aedfa79196027b25d39986ea5f5e182e5f63497.tar.bz2 luajit-6aedfa79196027b25d39986ea5f5e182e5f63497.zip |
PPC: Add lj_vm_resume().
Diffstat (limited to 'src')
-rw-r--r-- | src/buildvm_ppc.dasc | 42 |
1 files changed, 40 insertions, 2 deletions
diff --git a/src/buildvm_ppc.dasc b/src/buildvm_ppc.dasc index a8ac8095..6f352bd3 100644 --- a/src/buildvm_ppc.dasc +++ b/src/buildvm_ppc.dasc | |||
@@ -446,7 +446,46 @@ static void build_subroutines(BuildCtx *ctx) | |||
446 | |//----------------------------------------------------------------------- | 446 | |//----------------------------------------------------------------------- |
447 | | | 447 | | |
448 | |->vm_resume: // Setup C frame and resume thread. | 448 | |->vm_resume: // Setup C frame and resume thread. |
449 | | NYI | 449 | | // (lua_State *L, TValue *base, int nres1 = 0, ptrdiff_t ef = 0) |
450 | | saveregs | ||
451 | | mr L, CARG1 | ||
452 | | lwz DISPATCH, L->glref // Setup pointer to dispatch table. | ||
453 | | mr BASE, CARG2 | ||
454 | | lbz TMP1, L->status | ||
455 | | stw L, SAVE_L | ||
456 | | li PC, FRAME_CP | ||
457 | | addi TMP0, sp, CFRAME_RESUME | ||
458 | | addi DISPATCH, DISPATCH, GG_G2DISP | ||
459 | | stw CARG3, SAVE_NRES | ||
460 | | cmplwi TMP1, 0 | ||
461 | | stw CARG3, SAVE_ERRF | ||
462 | | stw TMP0, L->cframe | ||
463 | | stw CARG3, SAVE_CFRAME | ||
464 | | stw CARG1, SAVE_PC // Any value outside of bytecode is ok. | ||
465 | | beq >3 | ||
466 | | | ||
467 | | // Resume after yield (like a return). | ||
468 | | mr RA, BASE | ||
469 | | lwz BASE, L->base | ||
470 | | evsplati TISNUM, LJ_TISNUM+1 // Setup type comparison constants. | ||
471 | | lwz TMP1, L->top | ||
472 | | evsplati TISFUNC, LJ_TFUNC | ||
473 | | lus TOBIT, 0x4338 | ||
474 | | evsplati TISTAB, LJ_TTAB | ||
475 | | lwz PC, FRAME_PC(BASE) | ||
476 | | li TMP2, 0 | ||
477 | | evsplati TISSTR, LJ_TSTR | ||
478 | | sub RD, TMP1, BASE | ||
479 | | evmergelo TOBIT, TOBIT, TMP2 | ||
480 | | stb TMP3, L->status | ||
481 | | andi. TMP0, PC, FRAME_TYPE | ||
482 | | li_vmstate INTERP | ||
483 | | addi RD, RD, 8 | ||
484 | | evsplati TISNIL, LJ_TNIL | ||
485 | | mr MULTRES, RD | ||
486 | | st_vmstate | ||
487 | | beq ->BC_RET_Z | ||
488 | | b ->vm_return | ||
450 | | | 489 | | |
451 | |->vm_pcall: // Setup protected C frame and enter VM. | 490 | |->vm_pcall: // Setup protected C frame and enter VM. |
452 | | // (lua_State *L, TValue *base, int nres1, ptrdiff_t ef) | 491 | | // (lua_State *L, TValue *base, int nres1, ptrdiff_t ef) |
@@ -491,7 +530,6 @@ static void build_subroutines(BuildCtx *ctx) | |||
491 | | | 530 | | |
492 | |->vm_call_dispatch: | 531 | |->vm_call_dispatch: |
493 | | // TMP2 = old base, BASE = new base, RC = nargs*8, PC = caller PC | 532 | | // TMP2 = old base, BASE = new base, RC = nargs*8, PC = caller PC |
494 | | // NYI: reschedule. | ||
495 | | li TMP0, -8 | 533 | | li TMP0, -8 |
496 | | evlddx LFUNC:RB, BASE, TMP0 | 534 | | evlddx LFUNC:RB, BASE, TMP0 |
497 | | checkfunc LFUNC:RB | 535 | | checkfunc LFUNC:RB |