mirror of
https://git.savannah.gnu.org/git/guile.git
synced 2025-05-02 13:00:26 +02:00
Optimizations to subr-call
* libguile/jit.c (compile_subr_call): Optimizations.
This commit is contained in:
parent
01a79bed89
commit
fd1deab3c3
1 changed files with 3 additions and 5 deletions
|
@ -1082,18 +1082,15 @@ compile_subr_call (scm_jit_state *j, uint32_t idx)
|
||||||
|
|
||||||
subr = scm_subr_function_by_index (idx);
|
subr = scm_subr_function_by_index (idx);
|
||||||
emit_store_current_ip (j, t);
|
emit_store_current_ip (j, t);
|
||||||
emit_load_fp (j, fp);
|
|
||||||
jit_prepare ();
|
jit_prepare ();
|
||||||
for (i = 0; i < j->frame_size; i++)
|
for (i = 2; i <= j->frame_size; i++)
|
||||||
{
|
{
|
||||||
emit_fp_ref_scm (j, t, fp, i);
|
emit_sp_ref_scm (j, t, j->frame_size - i);
|
||||||
jit_pushargr (t);
|
jit_pushargr (t);
|
||||||
}
|
}
|
||||||
jit_finishi (subr);
|
jit_finishi (subr);
|
||||||
jit_retval (ret);
|
jit_retval (ret);
|
||||||
|
|
||||||
emit_load_fp (j, fp);
|
|
||||||
|
|
||||||
immediate = emit_branch_if_immediate (j, ret);
|
immediate = emit_branch_if_immediate (j, ret);
|
||||||
not_values = emit_branch_if_heap_object_not_tc7 (j, ret, t, scm_tc7_values);
|
not_values = emit_branch_if_heap_object_not_tc7 (j, ret, t, scm_tc7_values);
|
||||||
emit_call_r_r (j, scm_vm_intrinsics.unpack_values_object, THREAD, ret);
|
emit_call_r_r (j, scm_vm_intrinsics.unpack_values_object, THREAD, ret);
|
||||||
|
@ -1102,6 +1099,7 @@ compile_subr_call (scm_jit_state *j, uint32_t idx)
|
||||||
|
|
||||||
jit_patch (immediate);
|
jit_patch (immediate);
|
||||||
jit_patch (not_values);
|
jit_patch (not_values);
|
||||||
|
emit_load_fp (j, fp);
|
||||||
emit_subtract_stack_slots (j, SP, fp, 1);
|
emit_subtract_stack_slots (j, SP, fp, 1);
|
||||||
emit_store_sp (j);
|
emit_store_sp (j);
|
||||||
jit_str (SP, ret);
|
jit_str (SP, ret);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue