Add fallbacks and reorder movnr and movzr - 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_alpha-cpu.c
diff options
context:
space:
mode:
authorpcpa <paulo.cesar.pereira.de.andrade@gmail.com>2022年05月13日 01:03:57 -0300
committerpcpa <paulo.cesar.pereira.de.andrade@gmail.com>2022年05月13日 01:03:57 -0300
commitd7a0a14f0dec8c2b483cef7a8a239c16042e73ae (patch)
tree509fb84b19a9d4a656ed1281f5c618a0f685434d /lib/jit_alpha-cpu.c
parent82fa69dc1d227e04c1241c2b4990e92b892a5613 (diff)
downloadlightning-d7a0a14f0dec8c2b483cef7a8a239c16042e73ae.tar.gz
Add fallbacks and reorder movnr and movzr
* include/lightning.h.in: Reorder jit_mov{n,z}r in instruction list. * lib/jit_alpha.c, lib/jit_alpha-cpu.c, lib/jit_hppa.c, lib/jit_hppa-cpu.c, lib/jit_ia64.c, lib/jit_ia64-cpu.c, lib/jit_riscv.c, lib/jit_riscv-cpu.c, lib/jit_s390.c, lib/jit_s390-cpu.c, lib/jit_sparc.c, lib/jit_sparc-cpu.c: Implement fallback jit_mov{n,z}r. These are a somewhat cheap implementation, but should be reviewed for the arches that already have a proper conditional move. * lib/jit_arm-sz.c, lib/jit_mips-sz.c: Add missing maximum size estimative and reorder. * lib/jit_aarch64-sz.c, lib/jit_x86-sz.c, lib/jit_ppc-sz.c: Reorder entry to match definition order. * lib/jit_aarch64-sz.c, lib/jit_alpha-sz.c, lib/jit_hppa-sz.c, lib/jit_ia64-sz.c, lib/jit_riscv-sz.c, lib/jit_s390-sz.c, lib/jit_sparc-sz.c: Add heuristic value, basically the sum of the cost of a movr + beqr. * lib/jit_names.c: Add entries for debug output of mov{n,z}r. * lib/lightning.c: Use proper bitmask in jit_classify.
Diffstat (limited to 'lib/jit_alpha-cpu.c')
-rw-r--r--lib/jit_alpha-cpu.c 22
1 files changed, 22 insertions, 0 deletions
diff --git a/lib/jit_alpha-cpu.c b/lib/jit_alpha-cpu.c
index 8bfef9c..d8ca34a 100644
--- a/lib/jit_alpha-cpu.c
+++ b/lib/jit_alpha-cpu.c
@@ -311,6 +311,10 @@ static void _movr(jit_state_t*,jit_int32_t,jit_int32_t);
static void _movi(jit_state_t*,jit_int32_t,jit_word_t);
# define movi_p(r0,i0) _movi_p(_jit,r0,i0)
static jit_word_t _movi_p(jit_state_t*,jit_int32_t,jit_word_t);
+# define movnr(r0,r1,r2) _movnr(_jit,r0,r1,r2)
+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 negr(r0,r1) NEGQ(r1,r0)
# define comr(r0,r1) NOT(r1,r0)
# define addr(r0,r1,r2) ADDQ(r1,r2,r0)
@@ -812,6 +816,24 @@ _movi_p(jit_state_t *_jit, jit_int32_t r0, jit_word_t i0)
}
static void
+_movnr(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2)
+{
+ jit_word_t w;
+ w = beqi(_jit->pc.w, r2, 0);
+ MOV(r1, r0);
+ patch_at(w, _jit->pc.w);
+}
+
+static void
+_movzr(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2)
+{
+ jit_word_t w;
+ w = bnei(_jit->pc.w, r2, 0);
+ MOV(r1, r0);
+ patch_at(w, _jit->pc.w);
+}
+
+static void
_addi(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0)
{
jit_int32_t reg;
generated by cgit v1.2.3 (git 2.39.1) at 2025年09月21日 13:02:14 +0000

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