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 | |
| parent | a47136031e0717d61813024194840d9d351fe193 (diff) | |
| download | luajit-408cd055a4547b22bfa0a10947d75fbeb284a360.tar.gz luajit-408cd055a4547b22bfa0a10947d75fbeb284a360.tar.bz2 luajit-408cd055a4547b22bfa0a10947d75fbeb284a360.zip | |
PPC: Add basic infrastructure for fast functions.
| -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 |
