mirror of
https://git.savannah.gnu.org/git/guile.git
synced 2025-06-14 15:40:19 +02:00
Add unpack-values-object intrinsic
* libguile/intrinsics.h (SCM_FOR_ALL_VM_INTRINSICS): Add unpack-values-object. * libguile/vm-engine.c (subr-call): If the object is a values object, call out to unpack-values-object. This is to avoid reifying allocate-frame code in each jitted subr. * libguile/vm.c (unpack_values_object, scm_bootstrap_vm): Define new intrinsic.
This commit is contained in:
parent
c3ff72cb81
commit
ef4c1a5f55
3 changed files with 15 additions and 6 deletions
|
@ -595,14 +595,10 @@ VM_NAME (scm_thread *thread)
|
|||
SYNC_IP ();
|
||||
ret = scm_apply_subr (sp, idx, FRAME_LOCALS_COUNT ());
|
||||
|
||||
CACHE_SP ();
|
||||
|
||||
if (SCM_UNLIKELY (scm_is_values (ret)))
|
||||
{
|
||||
size_t n, nvals = scm_i_nvalues (ret);
|
||||
ALLOC_FRAME (nvals);
|
||||
for (n = 0; n < nvals; n++)
|
||||
FP_SET (n, scm_i_value_ref (ret, n));
|
||||
CALL_INTRINSIC (unpack_values_object, (thread, ret));
|
||||
CACHE_SP ();
|
||||
NEXT (1);
|
||||
}
|
||||
else
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue