From 1dc8f8517c4f89f7e0a330fe7f5b945f2a8e2523 Mon Sep 17 00:00:00 2001 From: Andy Wingo Date: Sat, 13 Sep 2008 14:40:27 +0200 Subject: [PATCH] inline FREE_FRAME in halt * libguile/vm-i-system.c (halt): Inline FREE_FRAME, specialized for the halt case. --- libguile/vm-i-system.c | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/libguile/vm-i-system.c b/libguile/vm-i-system.c index aff8331e9..259e93861 100644 --- a/libguile/vm-i-system.c +++ b/libguile/vm-i-system.c @@ -58,9 +58,20 @@ VM_DEFINE_INSTRUCTION (halt, "halt", 0, 0, 0) vp->time += scm_c_get_internal_run_time () - start_time; HALT_HOOK (); POP (ret); - FREE_FRAME (); + { +#ifdef THE_GOVERNMENT_IS_AFTER_ME + if (sp != stack_base) + abort (); + if (stack_base != SCM_FRAME_UPPER_ADDRESS (fp) - 1) + abort (); +#endif + + /* Restore registers */ + sp = SCM_FRAME_LOWER_ADDRESS (fp) - 1; + ip = NULL; + fp = SCM_FRAME_DYNAMIC_LINK (fp); + } SYNC_ALL (); - vp->ip = NULL; scm_dynwind_end (); return ret; }