guile-commits
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Guile-commits] 02/03: Remove hook intrinsics: hooks are just for the VM


From: Andy Wingo
Subject: [Guile-commits] 02/03: Remove hook intrinsics: hooks are just for the VM
Date: Fri, 14 Sep 2018 04:14:28 -0400 (EDT)

wingo pushed a commit to branch lightning
in repository guile.

commit 0ccd2d0d9ed6b4e233b0cad99d66d57e99ea99c6
Author: Andy Wingo <address@hidden>
Date:   Fri Sep 14 09:28:36 2018 +0200

    Remove hook intrinsics: hooks are just for the VM
    
    * libguile/intrinsics.h (SCM_FOR_ALL_VM_INTRINSICS): Remove VM hook
      intrinsics, now that we're going to rely on the interpreter for
      stepping and breakpoints.
    * libguile/jit.c (struct scm_jit_state): Remove "hooks_enabled" member,
      now that we won't JIT.  Remove all code related to calling hooks.
    * libguile/vm-engine.c (RUN_HOOK): Call hooks directly instead of
      through intrinsics.  Use precise per-hook enable flags.
    * libguile/vm.c (DEFINE_INVOKE_HOOK): New helper.  Use to define the
      hook invokers.
---
 libguile/intrinsics.h |  4 ----
 libguile/jit.c        | 27 ---------------------------
 libguile/vm-engine.c  | 26 +++++++++++++-------------
 libguile/vm.c         | 42 +++++++++++++-----------------------------
 4 files changed, 26 insertions(+), 73 deletions(-)

diff --git a/libguile/intrinsics.h b/libguile/intrinsics.h
index 30e85c5..397dffe 100644
--- a/libguile/intrinsics.h
+++ b/libguile/intrinsics.h
@@ -160,10 +160,6 @@ typedef uint32_t* scm_t_vcode_intrinsic;
   M(scm_from_thread, current_module, "current-module", CURRENT_MODULE) \
   M(thread_u8_scm_sp_vra_mra, push_prompt, "push-prompt", PUSH_PROMPT)     \
   M(thread_scm, unpack_values_object, "unpack-values-object", 
UNPACK_VALUES_OBJECT) \
-  M(thread, invoke_apply_hook, "invoke-apply-hook", INVOKE_APPLY_HOOK) \
-  M(thread, invoke_return_hook, "invoke-return-hook", INVOKE_RETURN_HOOK) \
-  M(thread, invoke_next_hook, "invoke-next-hook", INVOKE_NEXT_HOOK) \
-  M(thread, invoke_abort_hook, "invoke-abort-hook", INVOKE_ABORT_HOOK) \
   M(scm_from_ptr, atomic_ref_scm, "atomic-ref-scm", ATOMIC_REF_SCM) \
   M(ptr_scm, atomic_set_scm, "atomic-set-scm", ATOMIC_SET_SCM) \
   M(scm_from_ptr_scm, atomic_swap_scm, "atomic-swap-scm", ATOMIC_SWAP_SCM) \
diff --git a/libguile/jit.c b/libguile/jit.c
index ca466bb..59c0187 100644
--- a/libguile/jit.c
+++ b/libguile/jit.c
@@ -171,7 +171,6 @@ struct scm_jit_state {
   uint8_t *op_attrs;
   jit_node_t **labels;
   int32_t frame_size;
-  uint8_t hooks_enabled;
   uint32_t register_state;
   jit_gpr_t sp_cache_gpr;
   jit_fpr_t sp_cache_fpr;
@@ -226,7 +225,6 @@ DEFINE_THREAD_VP_OFFSET (sp);
 DEFINE_THREAD_VP_OFFSET (ip);
 DEFINE_THREAD_VP_OFFSET (sp_min_since_gc);
 DEFINE_THREAD_VP_OFFSET (stack_limit);
-DEFINE_THREAD_VP_OFFSET (trace_level);
 
 /* The current scm_thread*.  Preserved across callouts.  */
 static const jit_gpr_t THREAD = JIT_V0;
@@ -1138,20 +1136,6 @@ emit_mov (scm_jit_state *j, uint32_t dst, uint32_t src, 
jit_gpr_t t)
     clear_register_state (j, SP_CACHE_FPR);
 }
 
-static void
-emit_run_hook (scm_jit_state *j, jit_gpr_t t, scm_t_thread_intrinsic f)
-{
-  jit_node_t *k;
-  uint32_t saved_state = save_reloadable_register_state (j);
-  jit_ldxi_i (T0, THREAD, thread_offset_trace_level);
-  record_gpr_clobber (j, T0);
-  k = jit_beqi (T0, 0);
-  emit_store_current_ip (j, T0);
-  emit_call_r (j, f, THREAD);
-  restore_reloadable_register_state (j, saved_state);
-  jit_patch (k);
-}
-
 static jit_node_t*
 emit_branch_if_frame_locals_count_less_than (scm_jit_state *j, jit_gpr_t t,
                                              uint32_t nlocals)
@@ -1480,8 +1464,6 @@ compile_tail_call_label (scm_jit_state *j, const uint32_t 
*vcode)
 static void
 compile_instrument_entry (scm_jit_state *j, void *data)
 {
-  if (j->hooks_enabled)
-    emit_run_hook (j, T0, scm_vm_intrinsics.invoke_apply_hook);
 }
 
 static void
@@ -1572,8 +1554,6 @@ compile_return_values (scm_jit_state *j)
 {
   jit_gpr_t old_fp = T0, ra = T1;
   jit_node_t *interp;
-  if (j->hooks_enabled)
-    emit_run_hook (j, T0, scm_vm_intrinsics.invoke_return_hook);
 
   emit_pop_fp (j, old_fp);
 
@@ -1710,9 +1690,6 @@ compile_abort (scm_jit_state *j)
   emit_call_r_r (j, scm_vm_intrinsics.abort_to_prompt, THREAD, T0);
   jit_retval (T1_PRESERVED);
   
-  if (j->hooks_enabled)
-    emit_run_hook (j, T0, scm_vm_intrinsics.invoke_abort_hook);
-
   interp = jit_beqi (T1_PRESERVED, 0);
   emit_reload_sp (j);
   emit_reload_fp (j);
@@ -3040,9 +3017,6 @@ compile_return_from_interrupt (scm_jit_state *j)
   jit_gpr_t old_fp = T0, ra = T1;
   jit_node_t *interp;
 
-  if (j->hooks_enabled)
-    emit_run_hook (j, T0, scm_vm_intrinsics.invoke_return_hook);
-
   emit_pop_fp (j, old_fp);
 
   emit_load_mra (j, ra, old_fp);
@@ -4712,7 +4686,6 @@ compute_mcode (scm_thread *thread, uint32_t *entry_ip,
   ASSERT (j->labels);
 
   j->frame_size = -1;
-  j->hooks_enabled = 0; /* ? */
 
   INFO ("vcode: start=%p,+%zu entry=+%zu\n", j->start, j->end - j->start,
         j->entry - j->start);
diff --git a/libguile/vm-engine.c b/libguile/vm-engine.c
index 2d9be38..7ce306c 100644
--- a/libguile/vm-engine.c
+++ b/libguile/vm-engine.c
@@ -110,23 +110,23 @@
 #endif
 
 #if VM_USE_HOOKS
-#define RUN_HOOK(h)                                     \
-  do {                                                  \
-    if (SCM_UNLIKELY (VP->trace_level))                 \
-      {                                                 \
-        SYNC_IP ();                                     \
-        CALL_INTRINSIC (invoke_##h##_hook, (thread));   \
-        CACHE_SP ();                                    \
-      }                                                 \
+#define RUN_HOOK(H, h)                                       \
+  do {                                                       \
+    if (SCM_UNLIKELY (VP->hooks_enabled[SCM_VM_##H##_HOOK])) \
+      {                                                      \
+        SYNC_IP ();                                          \
+        invoke_##h##_hook (thread);                          \
+        CACHE_SP ();                                         \
+      }                                                      \
   } while (0)
 #else
-#define RUN_HOOK(h)
+#define RUN_HOOK(H, h)
 #endif
 
-#define APPLY_HOOK()                  RUN_HOOK (apply)
-#define RETURN_HOOK()                 RUN_HOOK (return)
-#define NEXT_HOOK()                   RUN_HOOK (next)
-#define ABORT_HOOK()                  RUN_HOOK (abort)
+#define APPLY_HOOK()                  RUN_HOOK (APPLY, apply)
+#define RETURN_HOOK()                 RUN_HOOK (RETURN, return)
+#define NEXT_HOOK()                   RUN_HOOK (NEXT, next)
+#define ABORT_HOOK()                  RUN_HOOK (ABORT, abort)
 
 
 
diff --git a/libguile/vm.c b/libguile/vm.c
index c59c91b..a7355e4 100644
--- a/libguile/vm.c
+++ b/libguile/vm.c
@@ -198,11 +198,6 @@ scm_i_capture_current_stack (void)
                         0);
 }
 
-static void invoke_apply_hook (scm_thread *thread);
-static void invoke_return_hook (scm_thread *thread);
-static void invoke_next_hook (scm_thread *thread);
-static void invoke_abort_hook (scm_thread *thread);
-
 /* Return the first integer greater than or equal to LEN such that
    LEN % ALIGN == 0.  Return LEN if ALIGN is zero.  */
 #define ROUND_UP(len, align)                                   \
@@ -260,26 +255,19 @@ invoke_hook (scm_thread *thread, int hook_num)
   vp->trace_level = saved_trace_level;
 }
 
-static void
-invoke_apply_hook (scm_thread *thread)
-{
-  return invoke_hook (thread, SCM_VM_APPLY_HOOK);
-}
-static void
-invoke_return_hook (scm_thread *thread)
-{
-  return invoke_hook (thread, SCM_VM_RETURN_HOOK);
-}
-static void
-invoke_next_hook (scm_thread *thread)
-{
-  return invoke_hook (thread, SCM_VM_NEXT_HOOK);
-}
-static void
-invoke_abort_hook (scm_thread *thread)
-{
-  return invoke_hook (thread, SCM_VM_ABORT_HOOK);
-}
+#define DEFINE_INVOKE_HOOK(H, h) \
+  static void                                             \
+  invoke_##h##_hook (scm_thread *thread) SCM_NOINLINE;    \
+  static void                                             \
+  invoke_##h##_hook (scm_thread *thread)                  \
+  {                                                       \
+    return invoke_hook (thread, SCM_VM_##H##_HOOK);       \
+  }
+
+DEFINE_INVOKE_HOOK(APPLY, apply)
+DEFINE_INVOKE_HOOK(RETURN, return)
+DEFINE_INVOKE_HOOK(NEXT, next)
+DEFINE_INVOKE_HOOK(ABORT, abort)
 
 
 /*
@@ -1820,10 +1808,6 @@ scm_bootstrap_vm (void)
   scm_vm_intrinsics.abort_to_prompt = abort_to_prompt;
   scm_vm_intrinsics.get_callee_vcode = get_callee_vcode;
   scm_vm_intrinsics.unpack_values_object = unpack_values_object;
-  scm_vm_intrinsics.invoke_apply_hook = invoke_apply_hook;
-  scm_vm_intrinsics.invoke_return_hook = invoke_return_hook;
-  scm_vm_intrinsics.invoke_next_hook = invoke_next_hook;
-  scm_vm_intrinsics.invoke_abort_hook = invoke_abort_hook;
   scm_vm_intrinsics.foreign_call = foreign_call;
 
   sym_keyword_argument_error = scm_from_latin1_symbol 
("keyword-argument-error");



reply via email to

[Prev in Thread] Current Thread [Next in Thread]