PPC: Add dispatch targets for instruction and return hooks.

This commit is contained in:
Mike Pall 2010-09-23 02:38:39 +02:00
parent 6aedfa7919
commit 493d0aa259

View File

@ -1128,13 +1128,53 @@ static void build_subroutines(BuildCtx *ctx)
#endif #endif
| |
|->vm_rethook: // Dispatch target for return hooks. |->vm_rethook: // Dispatch target for return hooks.
| NYI | lbz TMP3, DISPATCH_GL(hookmask)(DISPATCH)
| andi. TMP0, TMP3, HOOK_ACTIVE // Hook already active?
| beq >1
|5: // Re-dispatch to static ins.
| addi TMP1, TMP1, GG_DISP2STATIC // Assumes decode_OP4 TMP1, INS.
| lwzx TMP0, DISPATCH, TMP1
| mtctr TMP0
| bctr
| |
|->vm_inshook: // Dispatch target for instr/line hooks. |->vm_inshook: // Dispatch target for instr/line hooks.
| NYI | lbz TMP3, DISPATCH_GL(hookmask)(DISPATCH)
| lwz TMP2, DISPATCH_GL(hookcount)(DISPATCH)
| andi. TMP0, TMP3, HOOK_ACTIVE // Hook already active?
| rlwinm TMP0, TMP3, 31-LUA_HOOKLINE, 31, 0
| bne <5
|
| cmpwi cr1, TMP0, 0
| addic. TMP2, TMP2, -1
| beq cr1, <5
| stw TMP2, DISPATCH_GL(hookcount)(DISPATCH)
| beq >1
| bge cr1, <5
|1:
| mr CARG1, L
| stw MULTRES, SAVE_MULTRES
| mr CARG2, PC
| stw BASE, L->base
| // 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:
| lwz BASE, L->base
|4: // Re-dispatch to static ins.
| lwz INS, -4(PC)
| decode_OP4 TMP1, INS
| decode_RB8 RB, INS
| addi TMP1, TMP1, GG_DISP2STATIC
| decode_RD8 RD, INS
| lwzx TMP0, DISPATCH, TMP1
| decode_RA8 RA, INS
| decode_RC8 RC, INS
| mtctr TMP0
| bctr
| |
|->cont_hook: // Continue from hook yield. |->cont_hook: // Continue from hook yield.
| NYI | addi PC, PC, 4
| lwz MULTRES, -20(RB) // 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