diff options
author | Mike Pall <mike> | 2010-09-30 02:54:33 +0200 |
---|---|---|
committer | Mike Pall <mike> | 2010-09-30 02:54:33 +0200 |
commit | 408cd055a4547b22bfa0a10947d75fbeb284a360 (patch) | |
tree | f186a68cfbd0959af250f4e9f7025f6a5b35cd99 /src | |
parent | a47136031e0717d61813024194840d9d351fe193 (diff) | |
download | luajit-408cd055a4547b22bfa0a10947d75fbeb284a360.tar.gz luajit-408cd055a4547b22bfa0a10947d75fbeb284a360.tar.bz2 luajit-408cd055a4547b22bfa0a10947d75fbeb284a360.zip |
PPC: Add basic infrastructure for fast functions.
Diffstat (limited to 'src')
-rw-r--r-- | src/buildvm_ppc.dasc | 45 |
1 files changed, 39 insertions, 6 deletions
diff --git a/src/buildvm_ppc.dasc b/src/buildvm_ppc.dasc index c6bf24b7..67c4f75c 100644 --- a/src/buildvm_ppc.dasc +++ b/src/buildvm_ppc.dasc | |||
@@ -878,22 +878,30 @@ static void build_subroutines(BuildCtx *ctx) | |||
878 | | | 878 | | |
879 | |.macro .ffunc_1, name | 879 | |.macro .ffunc_1, name |
880 | |->ff_ .. name: | 880 | |->ff_ .. name: |
881 | | NYI | 881 | | cmplwi NARGS8:RC, 8 |
882 | | evldd CARG1, 0(BASE) | ||
883 | | blt ->fff_fallback | ||
882 | |.endmacro | 884 | |.endmacro |
883 | | | 885 | | |
884 | |.macro .ffunc_2, name | 886 | |.macro .ffunc_2, name |
885 | |->ff_ .. name: | 887 | |->ff_ .. name: |
886 | | NYI | 888 | | cmplwi NARGS8:RC, 16 |
889 | | evldd CARG1, 0(BASE) | ||
890 | | evldd CARG2, 8(BASE) | ||
891 | | blt ->fff_fallback | ||
887 | |.endmacro | 892 | |.endmacro |
888 | | | 893 | | |
889 | |.macro .ffunc_n, name | 894 | |.macro .ffunc_n, name |
890 | | .ffunc_1 name | 895 | | .ffunc_1 name |
891 | | NYI | 896 | | checknum CARG1 |
897 | | checkfail ->fff_fallback | ||
892 | |.endmacro | 898 | |.endmacro |
893 | | | 899 | | |
894 | |.macro .ffunc_nn, name | 900 | |.macro .ffunc_nn, name |
895 | | .ffunc_2 name | 901 | | .ffunc_2 name |
896 | | NYI | 902 | | evmergehi TMP0, CARG1, CARG2 |
903 | | checknum TMP0 | ||
904 | | checkanyfail ->fff_fallback | ||
897 | |.endmacro | 905 | |.endmacro |
898 | | | 906 | | |
899 | |.macro ffgccheck | 907 | |.macro ffgccheck |
@@ -978,10 +986,35 @@ static void build_subroutines(BuildCtx *ctx) | |||
978 | | NYI | 986 | | NYI |
979 | | // Fallthrough. | 987 | | // Fallthrough. |
980 | | | 988 | | |
989 | |->fff_restv: | ||
990 | | // CRET1 = TValue result. | ||
991 | | lwz PC, FRAME_PC(BASE) | ||
992 | | la RA, -8(BASE) | ||
993 | | evstdd CRET1, 0(RA) | ||
981 | |->fff_res1: | 994 | |->fff_res1: |
982 | | NYI | 995 | | // RA = results, PC = return. |
996 | | li RD, (1+1)*8 | ||
983 | |->fff_res: | 997 | |->fff_res: |
984 | | NYI | 998 | | // RA = results, RD = (nresults+1)*8, PC = return. |
999 | | andi. TMP0, PC, FRAME_TYPE | ||
1000 | | mr MULTRES, RD | ||
1001 | | bne ->vm_return | ||
1002 | | lwz INS, -4(PC) | ||
1003 | | decode_RB8 RB, INS | ||
1004 | |5: | ||
1005 | | cmplw RB, RD // More results expected? | ||
1006 | | decode_RA8 TMP0, INS | ||
1007 | | bgt >6 | ||
1008 | | ins_next1 | ||
1009 | | // Adjust BASE. KBASE is assumed to be set for the calling frame. | ||
1010 | | sub BASE, RA, TMP0 | ||
1011 | | ins_next2 | ||
1012 | | | ||
1013 | |6: // Fill up results with nil. | ||
1014 | | subi TMP1, RD, 8 | ||
1015 | | addi RD, RD, 8 | ||
1016 | | evstddx TISNIL, RA, TMP1 | ||
1017 | | b <5 | ||
985 | | | 1018 | | |
986 | |.macro math_extern, func | 1019 | |.macro math_extern, func |
987 | | .ffunc math_ .. func | 1020 | | .ffunc math_ .. func |