summaryrefslogtreecommitdiff
path: root/libguile/vm-engine.c
diff options
context:
space:
mode:
authorAndy Wingo <wingo@pobox.com>2018-04-29 10:41:24 +0200
committerAndy Wingo <wingo@pobox.com>2018-04-29 10:41:24 +0200
commit89fda6da60b54ed606c67a7e4cc07c8f01a67b6b (patch)
tree09985001b8f14028f63108a15f10a7d996f04914 /libguile/vm-engine.c
parent2eb9c755d1db5d5baedd6594d6385a9b98ad8fcf (diff)
downloadguile-89fda6da60b54ed606c67a7e4cc07c8f01a67b6b.tar.gz
push and pop dynamic state via intrinsics
* libguile/intrinsics.c (push_dynamic_state, pop_dynamic_state): New intrinsics. (scm_bootstrap_intrinsics): Add new intrinsics. * libguile/intrinsics.h: Declare new intrinsics. * libguile/vm-engine.c (call-thread-scm): New intrinsic caller. (push-dynamic-state, pop-dynamic-state): Disable. * module/language/cps/reify-primitives.scm (compute-known-primitives): Add new intrinsics. * module/system/vm/assembler.scm (push-dynamic-state) (pop-dynamic-state): Emit as intrinsics.
Diffstat (limited to 'libguile/vm-engine.c')
-rw-r--r--libguile/vm-engine.c29
1 files changed, 17 insertions, 12 deletions
diff --git a/libguile/vm-engine.c b/libguile/vm-engine.c
index 67fd767f3..17eca96b6 100644
--- a/libguile/vm-engine.c
+++ b/libguile/vm-engine.c
@@ -2271,7 +2271,21 @@ VM_NAME (scm_i_thread *thread, struct scm_vm *vp,
NEXT (2);
}
- VM_DEFINE_OP (90, unused_90, NULL, NOP)
+ VM_DEFINE_OP (90, call_thread_scm, "call-thread-scm", OP2 (X8_S24, C32))
+ {
+ scm_t_uint32 a;
+ scm_t_thread_scm_intrinsic intrinsic;
+
+ UNPACK_24 (op, a);
+ intrinsic = intrinsics[ip[1]];
+
+ SYNC_IP ();
+ intrinsic (thread, SP_REF (a));
+ CACHE_SP ();
+
+ NEXT (2);
+ }
+
VM_DEFINE_OP (91, unused_91, NULL, NOP)
VM_DEFINE_OP (92, unused_92, NULL, NOP)
VM_DEFINE_OP (93, unused_93, NULL, NOP)
@@ -2808,12 +2822,7 @@ VM_NAME (scm_i_thread *thread, struct scm_vm *vp,
NEXT (0);
}
- /* push-dynamic-state state:24
- *
- * Save the current fluid bindings on the dynamic stack, and use STATE
- * instead.
- */
- VM_DEFINE_OP (185, push_dynamic_state, "push-dynamic-state", OP1 (X8_S24))
+ VM_DEFINE_OP (185, unused_185, NULL, NOP)
{
scm_t_uint32 state;
@@ -2825,11 +2834,7 @@ VM_NAME (scm_i_thread *thread, struct scm_vm *vp,
NEXT (1);
}
- /* pop-dynamic-state _:24
- *
- * Restore the saved fluid bindings from the dynamic stack.
- */
- VM_DEFINE_OP (186, pop_dynamic_state, "pop-dynamic-state", OP1 (X32))
+ VM_DEFINE_OP (186, unused_186, NULL, NOP)
{
SYNC_IP ();
scm_dynstack_unwind_dynamic_state (&thread->dynstack,