summaryrefslogtreecommitdiff
path: root/libguile/vm-engine.c
diff options
context:
space:
mode:
Diffstat (limited to 'libguile/vm-engine.c')
-rw-r--r--libguile/vm-engine.c21
1 files changed, 14 insertions, 7 deletions
diff --git a/libguile/vm-engine.c b/libguile/vm-engine.c
index c8db813a6..58ff53cda 100644
--- a/libguile/vm-engine.c
+++ b/libguile/vm-engine.c
@@ -565,18 +565,25 @@ VM_NAME (scm_thread *thread)
{
union scm_vm_stack_element *old_fp;
size_t frame_size = 3;
+ uint8_t *mcode;
RETURN_HOOK ();
old_fp = VP->fp;
- ip = SCM_FRAME_VIRTUAL_RETURN_ADDRESS (VP->fp);
- VP->fp = SCM_FRAME_DYNAMIC_LINK (VP->fp);
-
- /* Clear stack frame. */
- while (frame_size--)
- old_fp[frame_size].as_scm = SCM_BOOL_F;
+ VP->fp = SCM_FRAME_DYNAMIC_LINK (old_fp);
- NEXT (0);
+ mcode = SCM_FRAME_MACHINE_RETURN_ADDRESS (old_fp);
+ if (mcode)
+ {
+ scm_jit_enter_mcode (thread, mcode);
+ CACHE_REGISTER ();
+ NEXT (0);
+ }
+ else
+ {
+ ip = SCM_FRAME_VIRTUAL_RETURN_ADDRESS (old_fp);
+ NEXT (0);
+ }
}