aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/buildvm_ppc.dasc34
1 files changed, 31 insertions, 3 deletions
diff --git a/src/buildvm_ppc.dasc b/src/buildvm_ppc.dasc
index 652b38a3..381161a9 100644
--- a/src/buildvm_ppc.dasc
+++ b/src/buildvm_ppc.dasc
@@ -523,8 +523,20 @@ static void build_subroutines(BuildCtx *ctx)
523 | // BASE = base, RA = resultptr, RB = meta base 523 | // BASE = base, RA = resultptr, RB = meta base
524 | bctr // Jump to continuation. 524 | bctr // Jump to continuation.
525 | 525 |
526 |->cont_cat: 526 |->cont_cat: // RA = resultptr, RB = meta base
527 | NYI 527 | lwz INS, -4(PC)
528 | subi CARG2, RB, 16
529 | decode_RB8 SAVE0, INS
530 | evldd TMP0, 0(RA)
531 | add TMP1, BASE, SAVE0
532 | stw BASE, L->base
533 | cmplw TMP1, CARG2
534 | sub CARG3, CARG2, TMP1
535 | decode_RA8 RA, INS
536 | evstdd TMP0, 0(CARG2)
537 | bne ->BC_CAT_Z
538 | evstddx TMP0, BASE, RA
539 | b ->cont_nop
528 | 540 |
529 |//-- Table indexing metamethods ----------------------------------------- 541 |//-- Table indexing metamethods -----------------------------------------
530 | 542 |
@@ -1509,7 +1521,23 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop)
1509 break; 1521 break;
1510 1522
1511 case BC_CAT: 1523 case BC_CAT:
1512 | NYI 1524 | // RA = dst*8, RB = src_start*8, RC = src_end*8
1525 | sub CARG3, RC, RB
1526 | stw BASE, L->base
1527 | add CARG2, BASE, RC
1528 | mr SAVE0, RB
1529 |->BC_CAT_Z:
1530 | stw PC, SAVE_PC
1531 | mr CARG1, L
1532 | srwi CARG3, CARG3, 3
1533 | bl extern lj_meta_cat // (lua_State *L, TValue *top, int left)
1534 | // Returns NULL (finished) or TValue * (metamethod).
1535 | cmplwi CRET1, 0
1536 | lwz BASE, L->base
1537 | bne ->vmeta_binop
1538 | evlddx TMP0, BASE, SAVE0 // Copy result from RB to RA.
1539 | evstddx TMP0, BASE, RA
1540 | ins_next
1513 break; 1541 break;
1514 1542
1515 /* -- Constant ops ------------------------------------------------------ */ 1543 /* -- Constant ops ------------------------------------------------------ */