aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/buildvm_ppc.dasc42
1 files changed, 36 insertions, 6 deletions
diff --git a/src/buildvm_ppc.dasc b/src/buildvm_ppc.dasc
index 6a13cace..51b592f1 100644
--- a/src/buildvm_ppc.dasc
+++ b/src/buildvm_ppc.dasc
@@ -554,22 +554,52 @@ static void build_subroutines(BuildCtx *ctx)
554 |//-- Arithmetic metamethods --------------------------------------------- 554 |//-- Arithmetic metamethods ---------------------------------------------
555 | 555 |
556 |->vmeta_arith_vn: 556 |->vmeta_arith_vn:
557 | NYI 557 | add CARG3, BASE, RB
558 | add CARG4, KBASE, RC
559 | b >1
558 | 560 |
559 |->vmeta_arith_nv: 561 |->vmeta_arith_nv:
560 | NYI 562 | add CARG3, KBASE, RC
563 | add CARG4, BASE, RB
564 | b >1
561 | 565 |
562 |->vmeta_unm: 566 |->vmeta_unm:
563 | NYI 567 | add CARG3, BASE, RD
568 | mr CARG4, CARG3
569 | b >1
564 | 570 |
565 |->vmeta_arith_vv: 571 |->vmeta_arith_vv:
566 | NYI 572 | add CARG3, BASE, RB
573 | add CARG4, BASE, RC
574 |1:
575 | add CARG2, BASE, RA
576 | stw BASE, L->base
577 | mr CARG1, L
578 | stw PC, SAVE_PC
579 | decode_OP1 CARG5, INS // Caveat: CARG5 overlaps INS.
580 | bl extern lj_meta_arith // (lua_State *L, TValue *ra,*rb,*rc, BCReg op)
581 | // Returns NULL (finished) or TValue * (metamethod).
582 | cmplwi CRET1, 0
583 | beq ->cont_nop
567 | 584 |
585 | // Call metamethod for binary op.
568 |->vmeta_binop: 586 |->vmeta_binop:
569 | NYI 587 | // BASE = old base, CRET1 = new base, stack = cont/func/o1/o2
588 | sub TMP1, CRET1, BASE
589 | stw PC, -16(CRET1) // [cont|PC]
590 | addi PC, TMP1, FRAME_CONT
591 | mr BASE, CRET1
592 | li NARGS8:RC, 16 // 2 args for func(o1, o2).
593 | b ->vm_call_dispatch
570 | 594 |
571 |->vmeta_len: 595 |->vmeta_len:
572 | NYI 596 | add CARG2, BASE, RD
597 | stw BASE, L->base
598 | mr CARG1, L
599 | stw PC, SAVE_PC
600 | bl extern lj_meta_len // (lua_State *L, TValue *o)
601 | // Returns TValue * (metamethod base).
602 | b ->vmeta_binop // Binop call for compatibility.
573 | 603 |
574 |//-- Call metamethod ---------------------------------------------------- 604 |//-- Call metamethod ----------------------------------------------------
575 | 605 |