aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMike Pall <mike>2010-09-23 02:35:51 +0200
committerMike Pall <mike>2010-09-23 02:35:51 +0200
commit6aedfa79196027b25d39986ea5f5e182e5f63497 (patch)
tree0e7ac9340b616fb0a443007a3d6ee807067180dd /src
parent5beedd6ef817d704df5ff5c491f94b0cdf558c43 (diff)
downloadluajit-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.dasc42
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