Implement new popcntr instruction. - 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_arm-cpu.c
diff options
context:
space:
mode:
authorpcpa <paulo.cesar.pereira.de.andrade@gmail.com>2023年03月02日 13:54:23 -0300
committerpcpa <paulo.cesar.pereira.de.andrade@gmail.com>2023年03月02日 13:54:23 -0300
commit6486a7c04c11902d10f7d610de6f9163891d8c5f (patch)
tree6de011bebb0889873c49f013a687de8c681d60da /lib/jit_arm-cpu.c
parent148cc67f862c5a2b46071021a250457972f9b67b (diff)
downloadlightning-6486a7c04c11902d10f7d610de6f9163891d8c5f.tar.gz
Implement new popcntr instruction.
* check/popcnt.tst, check/popcnt.ok: New test files for the new popcntr instruction. * check/Makefile.am, check/lightning.c, include/lightning.h.in, lib/jit_names.c: lib/lightning.c, doc/body.texi: Update for popcntr. * lib/jit_aarch64-fpu.c, lib/jit_aarch64.c: Implement optimized popcntr using the fpu. * lib/jit_alpha-cpu.c, lib/jit_alpha.c: Implement optimized popcntr using the ctpop instruction. * lib/jit_arm-vfp.c, lib/jit_arm-cpu.c, lib/jit_arm.c: Implement untested optimized popcntr using vfp >= 4, otherwise use a software fallback. * lib/jit_ia64-cpu.c, lib/jit_jia64.c: Implement optimized popcntr using the popcnt instruction. * lib/jit_ppc-cpu.c, lib/jit_ppc.c: Implement optimized popcntr using the popcntb, plus mullr and rshi_u instruction. * lib/jit_x86-cpu.c, lib/jit_x86.c: Implement optimized popcntr instruction using the popcnt instruction if available, otherwise use an optimized fallback. * lib/jit_fallback.c: Implement simple fallback popcnt. * lib/jit_hppa.c, lib/jit_loongarch.c, lib/jit_mips.c, lib/jit_riscv.c, lib/jit_s390.c, lib/jit_sparc.c: Use fallback popcnt.
Diffstat (limited to 'lib/jit_arm-cpu.c')
-rw-r--r--lib/jit_arm-cpu.c 12
1 files changed, 12 insertions, 0 deletions
diff --git a/lib/jit_arm-cpu.c b/lib/jit_arm-cpu.c
index 78c5814..6d4aa93 100644
--- a/lib/jit_arm-cpu.c
+++ b/lib/jit_arm-cpu.c
@@ -916,6 +916,8 @@ static void _ctor(jit_state_t*, jit_int32_t, jit_int32_t);
static void _ctzr(jit_state_t*, jit_int32_t, jit_int32_t);
# define rbitr(r0, r1) _rbitr(_jit, r0, r1)
static void _rbitr(jit_state_t*, jit_int32_t, jit_int32_t);
+# define popcntr(r0, r1) _popcntr(_jit, r0, r1)
+static void _popcntr(jit_state_t*, jit_int32_t, jit_int32_t);
# 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)
@@ -1829,6 +1831,16 @@ _rbitr(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1)
}
static void
+_popcntr(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1)
+{
+ /* FIXME Untested. Apdated from aarch64 pattern. */
+ if (jit_cpu.vfp >= 4)
+ vfp_popcntr(r0, r1);
+ else
+ fallback_popcnt(r0, r1);
+}
+
+static void
_addr(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2)
{
if (jit_thumb_p()) {
generated by cgit v1.2.3 (git 2.39.1) at 2025年09月13日 23:05:37 +0000

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