diff options
author | Andy Wingo <wingo@pobox.com> | 2019-05-27 18:40:41 +0200 |
---|---|---|
committer | Andy Wingo <wingo@pobox.com> | 2019-05-27 18:40:41 +0200 |
commit | d0a95bfbe8a4871840d40b89f49a97a38891918d (patch) | |
tree | 5b76a03325f051327a1d35ed3df8248cd843fddf /libguile/jit.c | |
parent | 49fa49c42d7d970334d856a154cddb908dfc8073 (diff) | |
download | guile-d0a95bfbe8a4871840d40b89f49a97a38891918d.tar.gz |
Revert "Fix atomics usage in handle-interrupts JIT."
This reverts commit e8d34258beab2799951e16d21d547299d4659364.
Diffstat (limited to 'libguile/jit.c')
-rw-r--r-- | libguile/jit.c | 12 |
1 files changed, 10 insertions, 2 deletions
diff --git a/libguile/jit.c b/libguile/jit.c index 6cea8bbc5..20116c16a 100644 --- a/libguile/jit.c +++ b/libguile/jit.c @@ -3010,8 +3010,16 @@ compile_handle_interrupts (scm_jit_state *j) void *again = jit_address (j->jit); - jit_addi (j->jit, T0, THREAD, thread_offset_pending_asyncs); - jit_ldr_atomic (j->jit, T0, T0); +#if defined(__i386__) || defined(__x86_64__) + /* Disassembly of atomic_ref_scm is just a mov. */ + jit_ldxi (j->jit, T0, THREAD, thread_offset_pending_asyncs); +#else + emit_call_1 (j, scm_vm_intrinsics.atomic_ref_scm, + jit_operand_addi (thread_operand (), + thread_offset_pending_asyncs)); + emit_retval (j, T0); + restore_reloadable_register_state (j, saved_state); +#endif jit_reloc_t none_pending = jit_beqi (j->jit, T0, SCM_UNPACK (SCM_EOL)); jit_ldxi_i (j->jit, T0, THREAD, thread_offset_block_asyncs); jit_reloc_t blocked = jit_bnei (j->jit, T0, 0); |