aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMike Pall <mike>2010-09-30 02:54:33 +0200
committerMike Pall <mike>2010-09-30 02:54:33 +0200
commit408cd055a4547b22bfa0a10947d75fbeb284a360 (patch)
treef186a68cfbd0959af250f4e9f7025f6a5b35cd99 /src
parenta47136031e0717d61813024194840d9d351fe193 (diff)
downloadluajit-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.dasc45
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