aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMike Pall <mike>2010-09-30 02:58:29 +0200
committerMike Pall <mike>2010-09-30 02:58:29 +0200
commitc0a8f5fb32825dc2ac4d19dd6c66108c55e3c8ae (patch)
tree0dfe26ab473f522bb6fc74a3dafd55adb6b996da /src
parent4afff973a414a0d596d9a65c1c207e705dc5176e (diff)
downloadluajit-c0a8f5fb32825dc2ac4d19dd6c66108c55e3c8ae.tar.gz
luajit-c0a8f5fb32825dc2ac4d19dd6c66108c55e3c8ae.tar.bz2
luajit-c0a8f5fb32825dc2ac4d19dd6c66108c55e3c8ae.zip
PPC: Add dispatch to fast function fallback handlers.
Diffstat (limited to 'src')
-rw-r--r--src/buildvm_ppc.dasc45
1 files changed, 44 insertions, 1 deletions
diff --git a/src/buildvm_ppc.dasc b/src/buildvm_ppc.dasc
index 5c418797..6ab8f7f7 100644
--- a/src/buildvm_ppc.dasc
+++ b/src/buildvm_ppc.dasc
@@ -1169,7 +1169,50 @@ static void build_subroutines(BuildCtx *ctx)
1169 |//----------------------------------------------------------------------- 1169 |//-----------------------------------------------------------------------
1170 | 1170 |
1171 |->fff_fallback: // Call fast function fallback handler. 1171 |->fff_fallback: // Call fast function fallback handler.
1172 | NYI 1172 | // BASE = new base, RB = CFUNC, RC = nargs*8
1173 | lwz TMP3, CFUNC:RB->f
1174 | add TMP1, BASE, NARGS8:RC
1175 | lwz PC, FRAME_PC(BASE) // Fallback may overwrite PC.
1176 | addi TMP0, TMP1, 8*LUA_MINSTACK-8
1177 | lwz TMP2, L->maxstack
1178 | stw PC, SAVE_PC // Redundant (but a defined value).
1179 | cmplw TMP0, TMP2
1180 | stw BASE, L->base
1181 | stw TMP1, L->top
1182 | mr CARG1, L
1183 | bgt >5 // Need to grow stack.
1184 | mtctr TMP3
1185 | bctrl // (lua_State *L)
1186 | // Either throws an error, or recovers and returns -1, 0 or nresults+1.
1187 | lwz BASE, L->base
1188 | cmpwi CRET1, 0
1189 | slwi RD, CRET1, 3
1190 | la RA, -8(BASE)
1191 | bgt ->fff_res // Returned nresults+1?
1192 |1: // Returned 0: retry fast path.
1193 | lwz TMP0, L->top
1194 | lwz LFUNC:RB, FRAME_FUNC(BASE)
1195 | sub NARGS8:RC, TMP0, BASE
1196 | bne >2 // Returned -1?
1197 | ins_callt // Returned 0: retry fast path.
1198 |
1199 |2: // Reconstruct previous base for vmeta_call during tailcall.
1200 | andi. TMP0, PC, FRAME_TYPE
1201 | rlwinm TMP1, PC, 0, 0, 28
1202 | bne >3
1203 | lwz INS, -4(PC)
1204 | decode_RA8 TMP1, INS
1205 |3:
1206 | sub TMP2, BASE, TMP1
1207 | b ->vm_call_dispatch // Resolve again for tailcall.
1208 |
1209 |5: // Grow stack for fallback handler.
1210 | mr CARG1, L
1211 | li CARG2, LUA_MINSTACK
1212 | bl extern lj_state_growstack // (lua_State *L, int n)
1213 | lwz BASE, L->base
1214 | cmpw TMP0, TMP0 // Set 4*cr0+eq.
1215 | b <1
1173 | 1216 |
1174 |->fff_gcstep: // Call GC step function. 1217 |->fff_gcstep: // Call GC step function.
1175 | NYI 1218 | NYI