mirror of
https://git.savannah.gnu.org/git/guile.git
synced 2025-04-30 03:40:34 +02:00
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.
This commit is contained in:
parent
6027027724
commit
939b1ae23f
5 changed files with 24 additions and 12 deletions
|
@ -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);
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue