diff options
-rw-r--r-- | src/buildvm_ppc.dasc | 33 |
1 files changed, 31 insertions, 2 deletions
diff --git a/src/buildvm_ppc.dasc b/src/buildvm_ppc.dasc index d69d77ab..ec156e86 100644 --- a/src/buildvm_ppc.dasc +++ b/src/buildvm_ppc.dasc | |||
@@ -913,10 +913,39 @@ static void build_subroutines(BuildCtx *ctx) | |||
913 | |//-- Base library: checks ----------------------------------------------- | 913 | |//-- Base library: checks ----------------------------------------------- |
914 | | | 914 | | |
915 | |.ffunc assert | 915 | |.ffunc assert |
916 | | NYI | 916 | | cmplwi NARGS8:RC, 8 |
917 | | evldd TMP0, 0(BASE) | ||
918 | | blt ->fff_fallback | ||
919 | | evaddw TMP1, TISNIL, TISNIL // Synthesize LJ_TFALSE. | ||
920 | | la RA, -8(BASE) | ||
921 | | evcmpltu cr1, TMP0, TMP1 | ||
922 | | lwz PC, FRAME_PC(BASE) | ||
923 | | bge cr1, ->fff_fallback | ||
924 | | evstdd TMP0, 0(RA) | ||
925 | | addi RD, NARGS8:RC, 8 // Compute (nresults+1)*8. | ||
926 | | beq ->fff_res // Done if exactly 1 argument. | ||
927 | | li TMP1, 8 | ||
928 | | subi RC, RC, 8 | ||
929 | |1: | ||
930 | | cmplw TMP1, RC | ||
931 | | evlddx TMP0, BASE, TMP1 | ||
932 | | evstddx TMP0, RA, TMP1 | ||
933 | | addi TMP1, TMP1, 8 | ||
934 | | bne <1 | ||
935 | | b ->fff_res | ||
917 | | | 936 | | |
918 | |.ffunc type | 937 | |.ffunc type |
919 | | NYI | 938 | | cmplwi NARGS8:RC, 8 |
939 | | lwz CARG1, 0(BASE) | ||
940 | | blt ->fff_fallback | ||
941 | | li TMP2, ~LJ_TNUMX | ||
942 | | cmplw CARG1, TISNUM | ||
943 | | not TMP1, CARG1 | ||
944 | | isellt TMP1, TMP2, TMP1 | ||
945 | | slwi TMP1, TMP1, 3 | ||
946 | | la TMP2, CFUNC:RB->upvalue | ||
947 | | evlddx STR:CRET1, TMP2, TMP1 | ||
948 | | b ->fff_restv | ||
920 | | | 949 | | |
921 | |//-- Base library: getters and setters --------------------------------- | 950 | |//-- Base library: getters and setters --------------------------------- |
922 | | | 951 | | |