diff options
author | Mike Pall <mike> | 2010-09-17 15:54:50 +0200 |
---|---|---|
committer | Mike Pall <mike> | 2010-09-17 15:54:50 +0200 |
commit | 66f0c437801ae0560b576c888df7c1e2f31c955e (patch) | |
tree | fec37cb1d6a3dbed864fb1d17e29f458de857d7d /src | |
parent | 4f1d43d03e26f835464b20ba28314e8e89044702 (diff) | |
download | luajit-66f0c437801ae0560b576c888df7c1e2f31c955e.tar.gz luajit-66f0c437801ae0560b576c888df7c1e2f31c955e.tar.bz2 luajit-66f0c437801ae0560b576c888df7c1e2f31c955e.zip |
PPC: Add BC_CAT and lj_cont_cat.
Diffstat (limited to 'src')
-rw-r--r-- | src/buildvm_ppc.dasc | 34 |
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 ------------------------------------------------------ */ |