summaryrefslogtreecommitdiff
path: root/libguile/jit.c
diff options
context:
space:
mode:
authorAndy Wingo <wingo@pobox.com>2019-05-27 18:40:41 +0200
committerAndy Wingo <wingo@pobox.com>2019-05-27 18:40:41 +0200
commitd0a95bfbe8a4871840d40b89f49a97a38891918d (patch)
tree5b76a03325f051327a1d35ed3df8248cd843fddf /libguile/jit.c
parent49fa49c42d7d970334d856a154cddb908dfc8073 (diff)
downloadguile-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.c12
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);