summaryrefslogtreecommitdiff
path: root/libguile/vm-engine.c
diff options
context:
space:
mode:
authorAndy Wingo <wingo@pobox.com>2018-08-11 14:22:32 +0200
committerAndy Wingo <wingo@pobox.com>2018-08-11 14:25:07 +0200
commit939b1ae23f680365fb6fd0a78653a281aaed95b6 (patch)
tree969e96ccfb96c4399978ee9af86e9783674fe7b0 /libguile/vm-engine.c
parent602702772412ffcf2476afa0a41b4e290fb67f59 (diff)
downloadguile-939b1ae23f680365fb6fd0a78653a281aaed95b6.tar.gz
Rework foreign-call trampoline
* libguile/foreign.c (scm_i_foreign_call): Rename back from foreign_call. Need a new trampoline that's easier to call from JIT, until we actually rewrite the FFI in terms of the JIT. (scm_register_foreign): Remove foreign_call intrinsic init. * libguile/intrinsics.h (SCM_FOR_ALL_VM_INTRINSICS): Foreign-call intrinsic sets return directly on stack. * libguile/vm-engine.c (foreign-call): Adapt to new intrinsic behavior. * libguile/vm.c (foreign_call, scm_bootstrap_vm): Add new intrinsic wrapper.
Diffstat (limited to 'libguile/vm-engine.c')
-rw-r--r--libguile/vm-engine.c8
1 files changed, 2 insertions, 6 deletions
diff --git a/libguile/vm-engine.c b/libguile/vm-engine.c
index 094895642..26ba16816 100644
--- a/libguile/vm-engine.c
+++ b/libguile/vm-engine.c
@@ -620,7 +620,7 @@ VM_NAME (scm_thread *thread)
VM_DEFINE_OP (11, foreign_call, "foreign-call", OP1 (X8_C12_C12))
{
uint16_t cif_idx, ptr_idx;
- SCM closure, cif, pointer, ret, err;
+ SCM closure, cif, pointer;
UNPACK_12_12 (op, cif_idx, ptr_idx);
@@ -629,13 +629,9 @@ VM_NAME (scm_thread *thread)
pointer = SCM_PROGRAM_FREE_VARIABLE_REF (closure, ptr_idx);
SYNC_IP ();
- ret = CALL_INTRINSIC (foreign_call, (cif, pointer, &err, sp));
+ CALL_INTRINSIC (foreign_call, (thread, cif, pointer));
CACHE_SP ();
- ALLOC_FRAME (2);
- SP_SET (1, ret);
- SP_SET (0, err);
-
NEXT (1);
}