aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMike Pall <mike>2010-10-01 23:43:39 +0200
committerMike Pall <mike>2010-10-01 23:43:39 +0200
commit61d498be87c548142473e471abc6943bcf38d03e (patch)
treebc29026998d266eae2ccf916b411de99c5c60d5d /src
parentdcf006bfa2c5e65f5c1dd57166f3b27f1e8ec34f (diff)
downloadluajit-61d498be87c548142473e471abc6943bcf38d03e.tar.gz
luajit-61d498be87c548142473e471abc6943bcf38d03e.tar.bz2
luajit-61d498be87c548142473e471abc6943bcf38d03e.zip
PPC: Add next() and pairs() fast functions.
Diffstat (limited to 'src')
-rw-r--r--src/buildvm_ppc.dasc41
1 files changed, 35 insertions, 6 deletions
diff --git a/src/buildvm_ppc.dasc b/src/buildvm_ppc.dasc
index a588b9be..4195ce12 100644
--- a/src/buildvm_ppc.dasc
+++ b/src/buildvm_ppc.dasc
@@ -939,14 +939,43 @@ static void build_subroutines(BuildCtx *ctx)
939 | 939 |
940 |//-- Base library: iterators ------------------------------------------- 940 |//-- Base library: iterators -------------------------------------------
941 | 941 |
942 |.ffunc_1 next 942 |.ffunc next
943 | NYI 943 | cmplwi NARGS8:RC, 8
944 | 944 | evldd CARG2, 0(BASE)
945 |->fff_res2: 945 | blt ->fff_fallback
946 | NYI 946 | evstddx TISNIL, BASE, NARGS8:RC // Set missing 2nd arg to nil.
947 | checktab TAB:CARG2
948 | lwz PC, FRAME_PC(BASE)
949 | checkfail ->fff_fallback
950 | stw BASE, L->base // Add frame since C call can throw.
951 | mr CARG1, L
952 | stw BASE, L->top // Dummy frame length is ok.
953 | la CARG3, 8(BASE)
954 | stw PC, SAVE_PC
955 | bl extern lj_tab_next // (lua_State *L, GCtab *t, TValue *key)
956 | // Returns 0 at end of traversal.
957 | cmplwi CRET1, 0
958 | evmr CRET1, TISNIL
959 | beq ->fff_restv // End of traversal: return nil.
960 | evldd TMP0, 8(BASE) // Copy key and value to results.
961 | la RA, -8(BASE)
962 | evldd TMP1, 16(BASE)
963 | evstdd TMP0, 0(RA)
964 | li RD, (2+1)*8
965 | evstdd TMP1, 8(RA)
966 | b ->fff_res
947 | 967 |
948 |.ffunc_1 pairs 968 |.ffunc_1 pairs
949 | NYI 969 | checktab TAB:CARG1
970 | lwz PC, FRAME_PC(BASE)
971 | checkfail ->fff_fallback
972 | evldd CFUNC:TMP0, CFUNC:RB->upvalue[0]
973 | la RA, -8(BASE)
974 | evstdd TAB:CARG1, 0(BASE)
975 | evstdd TISNIL, 8(BASE)
976 | li RD, (3+1)*8
977 | evstdd CFUNC:TMP0, 0(RA)
978 | b ->fff_res
950 | 979 |
951 |.ffunc_1 ipairs_aux 980 |.ffunc_1 ipairs_aux
952 | NYI 981 | NYI