aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMike Pall <mike>2010-09-11 01:46:11 +0200
committerMike Pall <mike>2010-09-11 01:46:11 +0200
commite15e4c4d95944da45092b4499b5f0e4d63f6bd01 (patch)
treeadfeb776eb1e01ef319692ea55b25ad7b3786a22 /src
parentdaafc0b2a272c2d807959d46b529daaa78cfbb77 (diff)
downloadluajit-e15e4c4d95944da45092b4499b5f0e4d63f6bd01.tar.gz
luajit-e15e4c4d95944da45092b4499b5f0e4d63f6bd01.tar.bz2
luajit-e15e4c4d95944da45092b4499b5f0e4d63f6bd01.zip
PPC: Add metamethod handlers for call instructions.
Diffstat (limited to 'src')
-rw-r--r--src/buildvm_ppc.dasc28
1 files changed, 23 insertions, 5 deletions
diff --git a/src/buildvm_ppc.dasc b/src/buildvm_ppc.dasc
index 66ae819c..6a13cace 100644
--- a/src/buildvm_ppc.dasc
+++ b/src/buildvm_ppc.dasc
@@ -573,14 +573,32 @@ static void build_subroutines(BuildCtx *ctx)
573 | 573 |
574 |//-- Call metamethod ---------------------------------------------------- 574 |//-- Call metamethod ----------------------------------------------------
575 | 575 |
576 |->vmeta_call_ra:
577 | NYI
578 |
579 |->vmeta_call: // Resolve and call __call metamethod. 576 |->vmeta_call: // Resolve and call __call metamethod.
580 | NYI 577 | // TMP2 = old base, BASE = new base, RC = nargs*8
578 | mr CARG1, L
579 | stw TMP2, L->base // This is the callers base!
580 | subi CARG2, BASE, 8
581 | stw PC, SAVE_PC
582 | add CARG3, BASE, RC
583 | mr SAVE0, NARGS8:RC
584 | bl extern lj_meta_call // (lua_State *L, TValue *func, TValue *top)
585 | lwz LFUNC:RB, FRAME_FUNC(BASE) // Guaranteed to be a function here.
586 | addi NARGS8:RC, SAVE0, 8 // Got one more argument now.
587 | ins_call
581 | 588 |
582 |->vmeta_callt: // Resolve __call for BC_CALLT. 589 |->vmeta_callt: // Resolve __call for BC_CALLT.
583 | NYI 590 | // BASE = old base, RA = new base, RC = nargs*8
591 | mr CARG1, L
592 | stw BASE, L->base
593 | subi CARG2, RA, 8
594 | stw PC, SAVE_PC
595 | add CARG3, RA, RC
596 | mr SAVE0, NARGS8:RC
597 | bl extern lj_meta_call // (lua_State *L, TValue *func, TValue *top)
598 | lwz TMP1, FRAME_PC(BASE)
599 | addi NARGS8:RC, SAVE0, 8 // Got one more argument now.
600 | lwz LFUNC:RB, FRAME_FUNC(BASE) // Guaranteed to be a function here.
601 | b ->BC_CALLT_Z
584 | 602 |
585 |//-- Argument coercion for 'for' statement ------------------------------ 603 |//-- Argument coercion for 'for' statement ------------------------------
586 | 604 |