mirror of
https://git.savannah.gnu.org/git/guile.git
synced 2025-04-30 11:50:28 +02:00
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.
This commit is contained in:
parent
bf31fe4cf6
commit
0ccd2d0d9e
4 changed files with 26 additions and 73 deletions
|
@ -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) \
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -110,23 +110,23 @@
|
|||
#endif
|
||||
|
||||
#if VM_USE_HOOKS
|
||||
#define RUN_HOOK(h) \
|
||||
#define RUN_HOOK(H, h) \
|
||||
do { \
|
||||
if (SCM_UNLIKELY (VP->trace_level)) \
|
||||
if (SCM_UNLIKELY (VP->hooks_enabled[SCM_VM_##H##_HOOK])) \
|
||||
{ \
|
||||
SYNC_IP (); \
|
||||
CALL_INTRINSIC (invoke_##h##_hook, (thread)); \
|
||||
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)
|
||||
|
||||
|
||||
|
||||
|
|
|
@ -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,27 +255,20 @@ 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)
|
||||
|
||||
|
||||
/*
|
||||
* VM Error Handling
|
||||
|
@ -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");
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue