summaryrefslogtreecommitdiff
path: root/libguile/jit.c
diff options
context:
space:
mode:
authorAndy Wingo <wingo@pobox.com>2019-12-07 22:54:32 +0100
committerAndy Wingo <wingo@pobox.com>2019-12-09 22:03:34 +0100
commit4a6a7e15d619c5cc2d0990ffd1da0f737586fa73 (patch)
tree8a92c43dbd03cf4414479f586a64f00e4ededdd9 /libguile/jit.c
parent70ad8a2e728417cf524eede9dafa0c979cafda55 (diff)
downloadguile-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.c14
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);