aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMike Pall <mike>2010-09-03 21:02:55 +0200
committerMike Pall <mike>2010-09-03 21:02:55 +0200
commit684acbe93052c527f18c24ce9d17a017287d4cfa (patch)
tree809f5e9665e9d0735695ff597bc6144837e919f2 /src
parentb4c8b05ad58364291ff6c210dd4e85bb1b5eb973 (diff)
downloadluajit-684acbe93052c527f18c24ce9d17a017287d4cfa.tar.gz
luajit-684acbe93052c527f18c24ce9d17a017287d4cfa.tar.bz2
luajit-684acbe93052c527f18c24ce9d17a017287d4cfa.zip
PPC: Add call and iterator call instructions.
Diffstat (limited to 'src')
-rw-r--r--src/buildvm_ppc.dasc31
1 files changed, 28 insertions, 3 deletions
diff --git a/src/buildvm_ppc.dasc b/src/buildvm_ppc.dasc
index 647fe387..3947cc30 100644
--- a/src/buildvm_ppc.dasc
+++ b/src/buildvm_ppc.dasc
@@ -1520,10 +1520,21 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop)
1520 /* -- Calls and vararg handling ----------------------------------------- */ 1520 /* -- Calls and vararg handling ----------------------------------------- */
1521 1521
1522 case BC_CALLM: 1522 case BC_CALLM:
1523 | NYI 1523 | // RA = base*8, (RB = (nresults+1)*8,) RC = extra_nargs*8
1524 | lwz TMP0, SAVE_MULTRES
1525 | add NARGS8:RC, NARGS8:RC, TMP0
1526 | // Fall through. Assumes BC_CALL follows.
1524 break; 1527 break;
1525 case BC_CALL: 1528 case BC_CALL:
1526 | NYI 1529 | // RA = base*8, (RB = (nresults+1)*8,) RC = (nargs+1)*8
1530 | evlddx LFUNC:RB, BASE, RA
1531 | mr TMP2, BASE
1532 | add BASE, BASE, RA
1533 | subi NARGS8:RC, NARGS8:RC, 8
1534 | checkfunc LFUNC:RB
1535 | addi BASE, BASE, 8
1536 | checkfail ->vmeta_call
1537 | ins_call
1527 break; 1538 break;
1528 1539
1529 case BC_CALLMT: 1540 case BC_CALLMT:
@@ -1534,7 +1545,21 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop)
1534 break; 1545 break;
1535 1546
1536 case BC_ITERC: 1547 case BC_ITERC:
1537 | NYI 1548 | // RA = base*8, (RB = (nresults+1)*8,) RC = (nargs+1)*8 ((2+1)*8)
1549 | subi RA, RA, 24 // evldd doesn't support neg. offsets.
1550 | mr TMP2, BASE
1551 | evlddx LFUNC:RB, BASE, RA
1552 | add BASE, BASE, RA
1553 | evldd TMP0, 8(BASE)
1554 | evldd TMP1, 16(BASE)
1555 | evstdd LFUNC:RB, 24(BASE) // Copy callable.
1556 | checkfunc LFUNC:RB
1557 | evstdd TMP0, 32(BASE) // Copy state.
1558 | li NARGS8:RC, 16 // Iterators get 2 arguments.
1559 | evstdd TMP1, 40(BASE) // Copy control var.
1560 | addi BASE, BASE, 32
1561 | checkfail ->vmeta_call
1562 | ins_call
1538 break; 1563 break;
1539 1564
1540 case BC_VARG: 1565 case BC_VARG: