From 939b1ae23f680365fb6fd0a78653a281aaed95b6 Mon Sep 17 00:00:00 2001 From: Andy Wingo Date: Sat, 11 Aug 2018 14:22:32 +0200 Subject: 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. --- libguile/vm-engine.c | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) (limited to 'libguile/vm-engine.c') 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); } -- cgit v1.2.3