diff options
author | Andy Wingo <wingo@pobox.com> | 2019-12-07 22:54:32 +0100 |
---|---|---|
committer | Andy Wingo <wingo@pobox.com> | 2019-12-09 22:03:34 +0100 |
commit | 4a6a7e15d619c5cc2d0990ffd1da0f737586fa73 (patch) | |
tree | 8a92c43dbd03cf4414479f586a64f00e4ededdd9 /libguile/jit.c | |
parent | 70ad8a2e728417cf524eede9dafa0c979cafda55 (diff) | |
download | guile-4a6a7e15d619c5cc2d0990ffd1da0f737586fa73.tar.gz |
Remove vm->sp_min_since_gc
* libguile/jit.c (emit_alloc_frame_for_sp):
* libguile/vm-engine.c (ALLOC_FRAME, RESET_FRAME):
* libguile/vm.c (vm_increase_sp, scm_i_vm_prepare_stack):
(return_unused_stack_to_os, vm_expand_stack, alloc_frame):
(scm_call_with_stack_overflow_handler):
* libguile/vm.h (struct scm_vm): Remove sp_min_since_gc handling. It
was a very minor optimization when it was centralized in vm.c, but now
with JIT it's causing too much duplicate code generation.
Diffstat (limited to 'libguile/jit.c')
-rw-r--r-- | libguile/jit.c | 14 |
1 files changed, 4 insertions, 10 deletions
diff --git a/libguile/jit.c b/libguile/jit.c index 50654c676..68fc5167f 100644 --- a/libguile/jit.c +++ b/libguile/jit.c @@ -221,7 +221,6 @@ DEFINE_THREAD_OFFSET (block_asyncs); DEFINE_THREAD_VP_OFFSET (fp); DEFINE_THREAD_VP_OFFSET (sp); DEFINE_THREAD_VP_OFFSET (ip); -DEFINE_THREAD_VP_OFFSET (sp_min_since_gc); DEFINE_THREAD_VP_OFFSET (stack_limit); /* The current scm_thread*. Preserved across callouts. */ @@ -705,15 +704,13 @@ emit_call_3 (scm_jit_state *j, void *f, jit_operand_t a, jit_operand_t b, static void emit_alloc_frame_for_sp (scm_jit_state *j, jit_gpr_t t) { - jit_reloc_t k, fast, watermark; + jit_reloc_t k, fast; uint32_t saved_state = save_reloadable_register_state (j); ASSERT_HAS_REGISTER_STATE (SP_IN_REGISTER); - emit_ldxi (j, t, THREAD, thread_offset_sp_min_since_gc); - fast = jit_bger (j->jit, SP, t); emit_ldxi (j, t, THREAD, thread_offset_stack_limit); - watermark = jit_bger (j->jit, SP, t); + fast = jit_bger (j->jit, SP, t); /* Slow case: call out to expand stack. */ emit_store_current_ip (j, t); @@ -722,13 +719,10 @@ emit_alloc_frame_for_sp (scm_jit_state *j, jit_gpr_t t) restore_reloadable_register_state (j, saved_state); k = jit_jmp (j->jit); - /* Past sp_min_since_gc, but within stack_limit: update watermark and - fall through. */ - jit_patch_here (j->jit, watermark); - jit_stxi (j->jit, thread_offset_sp_min_since_gc, THREAD, SP); - jit_patch_here (j->jit, fast); /* Fast case: Just update sp. */ + jit_patch_here (j->jit, fast); emit_store_sp (j); + jit_patch_here (j->jit, k); clear_register_state (j, SP_CACHE_GPR | SP_CACHE_FPR); |