diff options
| -rw-r--r-- | src/buildvm_ppc.dasc | 42 |
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 | | |
