diff options
Diffstat (limited to 'src/buildvm_x86.dasc')
-rw-r--r-- | src/buildvm_x86.dasc | 14 |
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 | |//----------------------------------------------------------------------- |