Implement a simple compare and swap atomic operation. - lightning.git - Portable just-in-time compiler library

index : lightning.git
Portable just-in-time compiler library
summary refs log tree commit diff
path: root/lib/jit_s390-cpu.c
diff options
context:
space:
mode:
authorpcpa <paulo.cesar.pereira.de.andrade@gmail.com>2022年09月08日 16:48:43 -0300
committerpcpa <paulo.cesar.pereira.de.andrade@gmail.com>2022年09月08日 16:48:43 -0300
commitd5a7c8e4ad719e84dbb4904c532f906a1ef5a77b (patch)
tree58f01a849950cef4f32cbfbf4fd036d17ece66d7 /lib/jit_s390-cpu.c
parente7a4ea8828be7c71140b5a0ca4f891d0053c64a5 (diff)
downloadlightning-d5a7c8e4ad719e84dbb4904c532f906a1ef5a77b.tar.gz
Implement a simple compare and swap atomic operation.
* lib/jit_fallback.c: Implement fallback compare and swap with pthreads. * check/Makefile.am: Update for new cas{r,i} simple test. * check/catomic.c, check/catomic.ok: New test case for simple compare and swap atomic operation. * check/lightning.c: Add entries to be able to use the new compare and swap atomic operation. Still missing a general test, only the basic C version. * include/lightning.h.in: Include pthread.h, even if not needing a fallback compare and swap. * include/lightning/jit_private.h: Add support for a register pair in second argument. Required by the new casr and casi operations. * lib/jit_aarch64-cpu.c, lib/jit_aarch64-sz.c, lib/jit_aarch64.c, lib/jit_ppc-cpu.c, lib/jit_ppc-sz.c, lib/jit_ppc.c, lib/jit_x86-cpu.c, lib/jit_x86-sz.c, lib/jit_x86.c: Implement inline code for compare and swap. * lib/jit_arm-cpu.c, lib/jit_arm-sz.c, lib/jit_arm.c: Implement inline code for compare and swap if cpu is armv7, otherwise, use a fallback with pthreads. * lib/jit_alpha-cpu.c, lib/jit_alpha-sz.c, lib/jit_alpha.c, lib/jit_hppa-cpu.c, lib/jit_hppa-sz.c, lib/jit_hppa.c, lib/jit_ia64-cpu.c, lib/jit_ia64-sz.c, lib/jit_ia64.c, lib/jit_mips-cpu.c, lib/jit_mips-sz.c, lib/jit_mips.c, lib/jit_riscv-cpu.c, lib/jit_riscv-sz.c, lib/jit_riscv.c, lib/jit_s390-cpu.c, lib/jit_s390-sz.c, lib/jit_s390.c, lib/jit_sparc-cpu.c, lib/jit_sparc-sz.c, lib/jit_sparc.c: Implement fallback compare and swap with pthreads. At least some of these should be updated for inline code generation. * lib/jit_names.c, lib/jit_print.c: lib/lightning.c: Update for the new compare and swap operation. * doc/body.texi: Add simple documentation of the compare and swap new operation.
Diffstat (limited to 'lib/jit_s390-cpu.c')
-rw-r--r--lib/jit_s390-cpu.c 12
1 files changed, 12 insertions, 0 deletions
diff --git a/lib/jit_s390-cpu.c b/lib/jit_s390-cpu.c
index 619ab15..2c10787 100644
--- a/lib/jit_s390-cpu.c
+++ b/lib/jit_s390-cpu.c
@@ -973,6 +973,11 @@ static jit_word_t _movi_p(jit_state_t*,jit_int32_t,jit_word_t);
static void _movnr(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t);
# define movzr(r0,r1,r2) _movzr(_jit,r0,r1,r2)
static void _movzr(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t);
+# define casx(r0, r1, r2, r3, i0) _casx(_jit, r0, r1, r2, r3, i0)
+static void _casx(jit_state_t *_jit,jit_int32_t,jit_int32_t,
+ jit_int32_t,jit_int32_t,jit_word_t);
+#define casr(r0, r1, r2, r3) casx(r0, r1, r2, r3, 0)
+#define casi(r0, i0, r1, r2) casx(r0, _NOREG, r1, r2, i0)
# define addr(r0,r1,r2) _addr(_jit,r0,r1,r2)
static void _addr(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t);
# define addi(r0,r1,i0) _addi(_jit,r0,r1,i0)
@@ -2469,6 +2474,13 @@ _movzr(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2)
}
static void
+_casx(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1,
+ jit_int32_t r2, jit_int32_t r3, jit_word_t i0)
+{
+ fallback_casx(r0, r1, r2, r3, i0);
+}
+
+static void
_addr(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2)
{
if (r0 == r2)
generated by cgit v1.2.3 (git 2.39.1) at 2025年09月15日 19:51:54 +0000

AltStyle によって変換されたページ (->オリジナル) /