diff options
author | Mike Pall <mike> | 2010-10-01 23:43:39 +0200 |
---|---|---|
committer | Mike Pall <mike> | 2010-10-01 23:43:39 +0200 |
commit | 61d498be87c548142473e471abc6943bcf38d03e (patch) | |
tree | bc29026998d266eae2ccf916b411de99c5c60d5d /src | |
parent | dcf006bfa2c5e65f5c1dd57166f3b27f1e8ec34f (diff) | |
download | luajit-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.dasc | 41 |
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 |