mirror of
https://github.com/LuaJIT/LuaJIT.git
synced 2025-02-08 07:34:07 +00:00
ARM: Add dispatch targets for hooks.
This commit is contained in:
parent
46d97d28f0
commit
7aa7069271
@ -1569,13 +1569,48 @@ static void build_subroutines(BuildCtx *ctx)
|
|||||||
#endif
|
#endif
|
||||||
|
|
|
|
||||||
|->vm_rethook: // Dispatch target for return hooks.
|
|->vm_rethook: // Dispatch target for return hooks.
|
||||||
| NYI
|
| ldrb CARG1, [DISPATCH, #DISPATCH_GL(hookmask)]
|
||||||
|
| tst CARG1, #HOOK_ACTIVE // Hook already active?
|
||||||
|
| beq >1
|
||||||
|
|5: // Re-dispatch to static ins.
|
||||||
|
| decode_OP OP, INS
|
||||||
|
| add OP, DISPATCH, OP, lsl #2
|
||||||
|
| ldr pc, [OP, #GG_DISP2STATIC]
|
||||||
|
|
|
|
||||||
|->vm_inshook: // Dispatch target for instr/line hooks.
|
|->vm_inshook: // Dispatch target for instr/line hooks.
|
||||||
| NYI
|
| ldrb CARG1, [DISPATCH, #DISPATCH_GL(hookmask)]
|
||||||
|
| ldr CARG2, [DISPATCH, #DISPATCH_GL(hookcount)]
|
||||||
|
| tst CARG1, #HOOK_ACTIVE // Hook already active?
|
||||||
|
| bne <5
|
||||||
|
| tst CARG1, #LUA_MASKLINE|LUA_MASKCOUNT
|
||||||
|
| beq <5
|
||||||
|
| subs CARG2, CARG2, #1
|
||||||
|
| str CARG2, [DISPATCH, #DISPATCH_GL(hookcount)]
|
||||||
|
| beq >1
|
||||||
|
| tst CARG1, #LUA_MASKLINE
|
||||||
|
| beq <5
|
||||||
|
|1:
|
||||||
|
| mov CARG1, L
|
||||||
|
| str BASE, L->base
|
||||||
|
| mov CARG2, PC
|
||||||
|
| // SAVE_PC must hold the _previous_ PC. The callee updates it with PC.
|
||||||
|
| bl extern lj_dispatch_ins // (lua_State *L, const BCIns *pc)
|
||||||
|
|3:
|
||||||
|
| ldr BASE, L->base
|
||||||
|
|4: // Re-dispatch to static ins.
|
||||||
|
| ldrb OP, [PC, #-4]
|
||||||
|
| ldr INS, [PC, #-4]
|
||||||
|
| add OP, DISPATCH, OP, lsl #2
|
||||||
|
| ldr OP, [OP, #GG_DISP2STATIC]
|
||||||
|
| decode_RA8 RA, INS
|
||||||
|
| decode_RD RC, INS
|
||||||
|
| bx OP
|
||||||
|
|
|
|
||||||
|->cont_hook: // Continue from hook yield.
|
|->cont_hook: // Continue from hook yield.
|
||||||
| NYI
|
| ldr CARG1, [CARG4, #-24]
|
||||||
|
| add PC, PC, #4
|
||||||
|
| str CARG1, SAVE_MULTRES // Restore MULTRES for *M ins.
|
||||||
|
| b <4
|
||||||
|
|
|
|
||||||
|->vm_hotloop: // Hot loop counter underflow.
|
|->vm_hotloop: // Hot loop counter underflow.
|
||||||
#if LJ_HASJIT
|
#if LJ_HASJIT
|
||||||
@ -1583,10 +1618,32 @@ static void build_subroutines(BuildCtx *ctx)
|
|||||||
#endif
|
#endif
|
||||||
|
|
|
|
||||||
|->vm_callhook: // Dispatch target for call hooks.
|
|->vm_callhook: // Dispatch target for call hooks.
|
||||||
| NYI
|
| mov CARG2, PC
|
||||||
|
#if LJ_HASJIT
|
||||||
|
| b >1
|
||||||
|
#endif
|
||||||
|
|
|
|
||||||
|->vm_hotcall: // Hot call counter underflow.
|
|->vm_hotcall: // Hot call counter underflow.
|
||||||
| NYI
|
#if LJ_HASJIT
|
||||||
|
| orr CARG2, PC, #1
|
||||||
|
|1:
|
||||||
|
#endif
|
||||||
|
| add CARG4, BASE, RC
|
||||||
|
| str PC, SAVE_PC
|
||||||
|
| mov CARG1, L
|
||||||
|
| str BASE, L->base
|
||||||
|
| sub RA, RA, BASE
|
||||||
|
| str CARG4, L->top
|
||||||
|
| bl extern lj_dispatch_call // (lua_State *L, const BCIns *pc)
|
||||||
|
| // Returns ASMFunction.
|
||||||
|
| ldr BASE, L->base
|
||||||
|
| ldr CARG4, L->top
|
||||||
|
| mov CARG2, #0
|
||||||
|
| add RA, BASE, RA
|
||||||
|
| sub NARGS8:RC, CARG4, BASE
|
||||||
|
| str CARG2, SAVE_PC // Invalidate for subsequent line hook.
|
||||||
|
| ldr LFUNC:CARG3, [BASE, FRAME_FUNC]
|
||||||
|
| bx CRET1
|
||||||
|
|
|
|
||||||
|//-----------------------------------------------------------------------
|
|//-----------------------------------------------------------------------
|
||||||
|//-- Trace exit handler -------------------------------------------------
|
|//-- Trace exit handler -------------------------------------------------
|
||||||
|
Loading…
Reference in New Issue
Block a user