From f635e3e5bbaa76fecc84ed5bb1d4855220b4a08a Mon Sep 17 00:00:00 2001
From: Mike Pall <mike>
Date: Thu, 23 Sep 2010 02:42:29 +0200
Subject: PPC: Add dispatch target for call hook.

---
 src/buildvm_ppc.dasc | 24 ++++++++++++++++++++++--
 1 file changed, 22 insertions(+), 2 deletions(-)

(limited to 'src')

diff --git a/src/buildvm_ppc.dasc b/src/buildvm_ppc.dasc
index a27591e5..e0eaa95b 100644
--- a/src/buildvm_ppc.dasc
+++ b/src/buildvm_ppc.dasc
@@ -1182,12 +1182,32 @@ static void build_subroutines(BuildCtx *ctx)
 #endif
   |
   |->vm_callhook:			// Dispatch target for call hooks.
-  |  NYI
+  |  mr CARG2, PC
+#if LJ_HASJIT
+  |  b >1
+#endif
   |
   |->vm_hotcall:			// Hot call counter underflow.
 #if LJ_HASJIT
-  |  NYI
+  |  ori CARG2, PC, 1
+  |1:
 #endif
+  |  add TMP0, BASE, RC
+  |   stw PC, SAVE_PC
+  |  mr CARG1, L
+  |   stw BASE, L->base
+  |  sub RA, RA, BASE
+  |   stw TMP0, L->top
+  |  bl extern lj_dispatch_call		// (lua_State *L, const BCIns *pc)
+  |  // Returns ASMFunction.
+  |  lwz BASE, L->base
+  |   lwz TMP0, L->top
+  |   stw ZERO, SAVE_PC			// Invalidate for subsequent line hook.
+  |  sub NARGS8:RC, TMP0, BASE
+  |  add RA, BASE, RA
+  |  lwz LFUNC:RB, FRAME_FUNC(BASE)
+  |  mtctr CRET1
+  |  bctr
   |
   |//-----------------------------------------------------------------------
   |//-- Trace exit handler -------------------------------------------------
-- 
cgit v1.2.3-55-g6feb