PPC: Add pcall() and xpcall() fast functions.

This commit is contained in:
Mike Pall 2010-10-01 23:47:29 +02:00
parent 05099f0764
commit e396bef7d8

View File

@ -1032,11 +1032,31 @@ static void build_subroutines(BuildCtx *ctx)
|
|//-- Base library: catch errors ----------------------------------------
|
|.ffunc_1 pcall
| NYI
|.ffunc pcall
| cmplwi NARGS8:RC, 8
| lbz TMP3, DISPATCH_GL(hookmask)(DISPATCH)
| blt ->fff_fallback
| mr TMP2, BASE
| la BASE, 8(BASE)
| // Remember active hook before pcall.
| rlwinm TMP3, TMP3, 32-HOOK_ACTIVE_SHIFT, 31, 31
| subi NARGS8:RC, NARGS8:RC, 8
| addi PC, TMP3, 8+FRAME_PCALL
| b ->vm_call_dispatch
|
|.ffunc_2 xpcall
| NYI
| lbz TMP3, DISPATCH_GL(hookmask)(DISPATCH)
| mr TMP2, BASE
| checkfunc CARG2 // Traceback must be a function.
| checkfail ->fff_fallback
| la BASE, 16(BASE)
| // Remember active hook before pcall.
| rlwinm TMP3, TMP3, 32-HOOK_ACTIVE_SHIFT, 31, 31
| evstdd CARG2, 0(TMP2) // Swap function and traceback.
| subi NARGS8:RC, NARGS8:RC, 16
| evstdd CARG1, 8(TMP2)
| addi PC, TMP3, 16+FRAME_PCALL
| b ->vm_call_dispatch
|
|//-- Coroutine library --------------------------------------------------
|