summaryrefslogtreecommitdiff
path: root/src/buildvm_x86.dasc
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--src/buildvm_x86.dasc14
1 files changed, 11 insertions, 3 deletions
diff --git a/src/buildvm_x86.dasc b/src/buildvm_x86.dasc
index 5ec87aa8..0d97d01c 100644
--- a/src/buildvm_x86.dasc
+++ b/src/buildvm_x86.dasc
@@ -2591,11 +2591,14 @@ static void build_subroutines(BuildCtx *ctx, int cmov, int sse)
2591 | lea FCARG2, [esp+16] 2591 | lea FCARG2, [esp+16]
2592 | lea FCARG1, [DISPATCH+GG_DISP2J] 2592 | lea FCARG1, [DISPATCH+GG_DISP2J]
2593 | call extern lj_trace_exit@8 // (jit_State *J, ExitState *ex) 2593 | call extern lj_trace_exit@8 // (jit_State *J, ExitState *ex)
2594 | // Interpreter C frame returned in eax. 2594 | // Error code returned in eax (RD).
2595 | mov esp, eax // Reposition stack to C frame. 2595 | mov RAa, L:RB->cframe
2596 | and RAa, CFRAME_RAWMASK
2597 | mov esp, RAa // Reposition stack to C frame.
2598 | mov SAVE_L, L:RB // Needed for on-trace resume/yield.
2599 | test RD, RD; jnz >1 // Check for error from exit.
2596 | mov BASE, L:RB->base 2600 | mov BASE, L:RB->base
2597 | mov PC, SAVE_PC 2601 | mov PC, SAVE_PC
2598 | mov SAVE_L, L:RB // Needed for on-trace resume/yield.
2599 |.endif 2602 |.endif
2600#endif 2603#endif
2601 |->vm_exit_interp: 2604 |->vm_exit_interp:
@@ -2606,6 +2609,11 @@ static void build_subroutines(BuildCtx *ctx, int cmov, int sse)
2606 | mov dword [DISPATCH+DISPATCH_GL(jit_L)], 0 2609 | mov dword [DISPATCH+DISPATCH_GL(jit_L)], 0
2607 | set_vmstate INTERP 2610 | set_vmstate INTERP
2608 | ins_next 2611 | ins_next
2612 |
2613 |1: // Rethrow error from the right C frame.
2614 | mov FCARG1, L:RB
2615 | mov FCARG2, RD
2616 | call extern lj_err_throw@8 // (lua_State *L, int errcode)
2609#endif 2617#endif
2610 | 2618 |
2611 |//----------------------------------------------------------------------- 2619 |//-----------------------------------------------------------------------