diff options
author | Mike Pall <mike> | 2010-09-09 01:06:55 +0200 |
---|---|---|
committer | Mike Pall <mike> | 2010-09-09 01:06:55 +0200 |
commit | ec8f2918ba594fdf6f13f9f01bf1721b8c3658a8 (patch) | |
tree | e2090bc5d65017fe5236ea571e04cade71b72137 /src | |
parent | b2aa08c75c82e19e9522ba21438f8ed7632f524d (diff) | |
download | luajit-ec8f2918ba594fdf6f13f9f01bf1721b8c3658a8.tar.gz luajit-ec8f2918ba594fdf6f13f9f01bf1721b8c3658a8.tar.bz2 luajit-ec8f2918ba594fdf6f13f9f01bf1721b8c3658a8.zip |
PPC: Add closure-related instructions.
Diffstat (limited to 'src')
-rw-r--r-- | src/buildvm_ppc.dasc | 30 |
1 files changed, 28 insertions, 2 deletions
diff --git a/src/buildvm_ppc.dasc b/src/buildvm_ppc.dasc index 9c5bc437..d0c66c1f 100644 --- a/src/buildvm_ppc.dasc +++ b/src/buildvm_ppc.dasc | |||
@@ -1389,12 +1389,38 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop) | |||
1389 | case BC_USETP: | 1389 | case BC_USETP: |
1390 | | NYI | 1390 | | NYI |
1391 | break; | 1391 | break; |
1392 | |||
1392 | case BC_UCLO: | 1393 | case BC_UCLO: |
1393 | | NYI | 1394 | | // RA = level*8, RD = target |
1395 | | lwz TMP1, L->openupval | ||
1396 | | branch_RD // Do this first since RD is not saved. | ||
1397 | | stw BASE, L->base | ||
1398 | | cmplwi TMP1, 0 | ||
1399 | | mr CARG1, L | ||
1400 | | beq >1 | ||
1401 | | add CARG2, BASE, RA | ||
1402 | | bl extern lj_func_closeuv // (lua_State *L, TValue *level) | ||
1403 | | lwz BASE, L->base | ||
1404 | |1: | ||
1405 | | ins_next | ||
1394 | break; | 1406 | break; |
1395 | 1407 | ||
1396 | case BC_FNEW: | 1408 | case BC_FNEW: |
1397 | | NYI | 1409 | | // RA = dst*8, RD = proto_const*8 (~) (holding function prototype) |
1410 | | srwi TMP1, RD, 1 | ||
1411 | | stw BASE, L->base | ||
1412 | | subfic TMP1, TMP1, -4 | ||
1413 | | stw PC, SAVE_PC | ||
1414 | | lwzx CARG2, KBASE, TMP1 // KBASE-4-tab_const*4 | ||
1415 | | mr CARG1, L | ||
1416 | | lwz CARG3, FRAME_FUNC(BASE) | ||
1417 | | // (lua_State *L, GCproto *pt, GCfuncL *parent) | ||
1418 | | bl extern lj_func_newL_gc | ||
1419 | | // Returns GCfuncL *. | ||
1420 | | lwz BASE, L->base | ||
1421 | | evmergelo LFUNC:CRET1, TISFUNC, LFUNC:CRET1 | ||
1422 | | evstddx LFUNC:CRET1, BASE, RA | ||
1423 | | ins_next | ||
1398 | break; | 1424 | break; |
1399 | 1425 | ||
1400 | /* -- Table ops --------------------------------------------------------- */ | 1426 | /* -- Table ops --------------------------------------------------------- */ |