author | pcpa <paulo.cesar.pereira.de.andrade@gmail.com> | 2023年02月28日 17:47:20 -0300 |
---|---|---|
committer | pcpa <paulo.cesar.pereira.de.andrade@gmail.com> | 2023年02月28日 17:47:20 -0300 |
commit | b71ab4f1b8fe533d943de7ea5ce4aa724cf10e7b (patch) | |
tree | cb9909113687e780528d8dc7036e66850fe65dd8 /lib | |
parent | 9ddb79b50e5cd401ee35c994a47986148e5dfb15 (diff) | |
download | lightning-b71ab4f1b8fe533d943de7ea5ce4aa724cf10e7b.tar.gz |
-rw-r--r-- | lib/jit_aarch64-cpu.c | 1 | ||||
-rw-r--r-- | lib/jit_aarch64.c | 1 | ||||
-rw-r--r-- | lib/jit_alpha.c | 4 | ||||
-rw-r--r-- | lib/jit_arm-cpu.c | 15 | ||||
-rw-r--r-- | lib/jit_fallback.c | 2 | ||||
-rw-r--r-- | lib/jit_hppa.c | 2 | ||||
-rw-r--r-- | lib/jit_ia64.c | 2 | ||||
-rw-r--r-- | lib/jit_loongarch-cpu.c | 1 | ||||
-rw-r--r-- | lib/jit_mips-cpu.c | 18 | ||||
-rw-r--r-- | lib/jit_mips.c | 1 | ||||
-rw-r--r-- | lib/jit_names.c | 1 | ||||
-rw-r--r-- | lib/jit_ppc.c | 2 | ||||
-rw-r--r-- | lib/jit_riscv.c | 2 | ||||
-rw-r--r-- | lib/jit_s390.c | 2 | ||||
-rw-r--r-- | lib/jit_sparc.c | 2 | ||||
-rw-r--r-- | lib/jit_x86.c | 4 | ||||
-rw-r--r-- | lib/lightning.c | 2 |
diff --git a/lib/jit_aarch64-cpu.c b/lib/jit_aarch64-cpu.c index d5e64ad..99d8756 100644 --- a/lib/jit_aarch64-cpu.c +++ b/lib/jit_aarch64-cpu.c @@ -598,6 +598,7 @@ static void _clzr(jit_state_t*, jit_int32_t, jit_int32_t); static void _ctor(jit_state_t*, jit_int32_t, jit_int32_t); # define ctzr(r0, r1) _ctzr(_jit, r0, r1) static void _ctzr(jit_state_t*, jit_int32_t, jit_int32_t); +# define rbitr(r0, r1) RBIT(r0, r1) # define andr(r0,r1,r2) AND(r0,r1,r2) # define andi(r0,r1,i0) _andi(_jit,r0,r1,i0) static void _andi(jit_state_t*,jit_int32_t,jit_int32_t,jit_word_t); diff --git a/lib/jit_aarch64.c b/lib/jit_aarch64.c index 243e677..8106a31 100644 --- a/lib/jit_aarch64.c +++ b/lib/jit_aarch64.c @@ -1448,6 +1448,7 @@ _emit_code(jit_state_t *_jit) case_rr(clz,); case_rr(cto,); case_rr(ctz,); + case_rr(rbit,); case_rrr(and,); case_rrw(and,); case_rrr(or,); diff --git a/lib/jit_alpha.c b/lib/jit_alpha.c index 25566f4..ef41c37 100644 --- a/lib/jit_alpha.c +++ b/lib/jit_alpha.c @@ -64,6 +64,7 @@ static void _patch(jit_state_t*,jit_word_t,jit_node_t*); #define PROTO 1 # include "jit_alpha-cpu.c" # include "jit_alpha-fpu.c" +# include "jit_fallback.c" #undef PROTO /* @@ -1134,6 +1135,8 @@ _emit_code(jit_state_t *_jit) case_rr(clz,); case_rr(cto,); case_rr(ctz,); +#define rbitr(r0, r1) fallback_rbit(r0, r1) + case_rr(rbit,); case_rrr(lt,); case_rrw(lt,); case_rrr(lt, _u); @@ -1555,6 +1558,7 @@ _emit_code(jit_state_t *_jit) #define CODE 1 # include "jit_alpha-cpu.c" # include "jit_alpha-fpu.c" +# include "jit_fallback.c" #undef CODE void diff --git a/lib/jit_arm-cpu.c b/lib/jit_arm-cpu.c index a0852a2..78c5814 100644 --- a/lib/jit_arm-cpu.c +++ b/lib/jit_arm-cpu.c @@ -914,6 +914,8 @@ static void _clzr(jit_state_t*, jit_int32_t, jit_int32_t); static void _ctor(jit_state_t*, jit_int32_t, jit_int32_t); # define ctzr(r0, r1) _ctzr(_jit, r0, r1) 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 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) @@ -1814,6 +1816,19 @@ _ctzr(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1) } static void +_rbitr(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1) +{ + if (jit_armv7_p()) { /* armv6t2 actually */ + if (jit_thumb_p()) + T2_RBIT(r0, r1); + else + RBIT(r0, r1); + } + else + fallback_bitswap(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()) { diff --git a/lib/jit_fallback.c b/lib/jit_fallback.c index 21e2f42..935f3e4 100644 --- a/lib/jit_fallback.c +++ b/lib/jit_fallback.c @@ -672,7 +672,7 @@ while ((s >>= 1) > 0) comr(v, rn(mask)); /* v = ~mask */ andr(rn(t1), v, rn(t1)); /* t1 = t1 & v */ orr(v, rn(t0), rn(t1)); /* v = t0 | t1 */ - jmpi(loop, 0); + jmpi(loop); flush(); patch_at(done, _jit->pc.w); jit_unget_reg(t1); diff --git a/lib/jit_hppa.c b/lib/jit_hppa.c index d3c5ef7..d683dc1 100644 --- a/lib/jit_hppa.c +++ b/lib/jit_hppa.c @@ -1072,10 +1072,12 @@ _emit_code(jit_state_t *_jit) #define clzr(r0, r1) fallback_clz(r0, r1) #define ctor(r0, r1) fallback_cto(r0, r1) #define ctzr(r0, r1) fallback_ctz(r0, r1) +#define rbitr(r0, r1) fallback_bitswap(r0, r1) case_rr(clo,); case_rr(clz,); case_rr(cto,); case_rr(ctz,); + case_rr(rbit,); case_rr(ext, _c); case_rr(ext, _uc); case_rr(ext, _s); diff --git a/lib/jit_ia64.c b/lib/jit_ia64.c index 2968278..c45f784 100644 --- a/lib/jit_ia64.c +++ b/lib/jit_ia64.c @@ -1197,6 +1197,8 @@ _emit_code(jit_state_t *_jit) case_rr(clz,); case_rr(cto,); case_rr(ctz,); +#define rbitr(r0, r1) fallback_bitswap(r0, r1) + case_rr(rbit,); case jit_code_casr: casr(rn(node->u.w), rn(node->v.w), rn(node->w.q.l), rn(node->w.q.h)); diff --git a/lib/jit_loongarch-cpu.c b/lib/jit_loongarch-cpu.c index ab05852..2de50c4 100644 --- a/lib/jit_loongarch-cpu.c +++ b/lib/jit_loongarch-cpu.c @@ -338,6 +338,7 @@ static void _oj26(jit_state_t*, jit_int32_t,jit_int32_t); # define clzr(r0, r1) CLZ_D(r0, r1) # define ctor(r0, r1) CTO_D(r0, r1) # define ctzr(r0, r1) CTZ_D(r0, r1) +# define rbitr(r0, r1) BITREV_D(r0, r1) static void _nop(jit_state_t*,jit_int32_t); # define movr(r0, r1) _movr(_jit, r0, r1) static void _movr(jit_state_t*, jit_int32_t, jit_int32_t); diff --git a/lib/jit_mips-cpu.c b/lib/jit_mips-cpu.c index 5d4137c..19d34a2 100644 --- a/lib/jit_mips-cpu.c +++ b/lib/jit_mips-cpu.c @@ -501,6 +501,8 @@ static void _clzr(jit_state_t*, jit_int32_t, jit_int32_t); static void _ctor(jit_state_t*, jit_int32_t, jit_int32_t); # define ctzr(r0, r1) _ctzr(_jit, r0, r1) 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); # if __WORDSIZE == 32 # define addr(rd,rs,rt) ADDU(rd,rs,rt) # define addiu(r0,r1,i0) ADDIU(r0,r1,i0) @@ -1710,6 +1712,22 @@ _ctzr(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1) } static void +_rbitr(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1) +{ + if (jit_mips6_p()) { +#if __WORDSIZE == 32 + BITSWAP(r0, r1); + bswapr_ui(r0, r0); +#else + DBITSWAP(r0, r1); + bswapr_ul(r0, r0); +#endif + } + else + fallback_bitswap(r0, r1); +} + +static void _addi(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) { jit_int32_t reg; diff --git a/lib/jit_mips.c b/lib/jit_mips.c index b3a8078..07d4867 100644 --- a/lib/jit_mips.c +++ b/lib/jit_mips.c @@ -1676,6 +1676,7 @@ _emit_code(jit_state_t *_jit) case_rr(clz,); case_rr(cto,); case_rr(ctz,); + case_rr(rbit,); case_rrr(lt,); case_rrw(lt,); case_rrr(lt, _u); diff --git a/lib/jit_names.c b/lib/jit_names.c index e5985a3..29f5906 100644 --- a/lib/jit_names.c +++ b/lib/jit_names.c @@ -255,4 +255,5 @@ static char *code_name[] = { "movr_d_w", "movi_d_w", "clo", "clz", "cto", "ctz", + "rbit", }; diff --git a/lib/jit_ppc.c b/lib/jit_ppc.c index 0ad4ae8..2410deb 100644 --- a/lib/jit_ppc.c +++ b/lib/jit_ppc.c @@ -1379,6 +1379,8 @@ _emit_code(jit_state_t *_jit) case_rr(clz,); case_rr(cto,); case_rr(ctz,); +#define rbitr(r0, r1) fallback_bitswap(r0, r1) + case_rr(rbit,); case jit_code_casr: casr(rn(node->u.w), rn(node->v.w), rn(node->w.q.l), rn(node->w.q.h)); diff --git a/lib/jit_riscv.c b/lib/jit_riscv.c index 63a5cd9..8afe32e 100644 --- a/lib/jit_riscv.c +++ b/lib/jit_riscv.c @@ -1168,10 +1168,12 @@ _emit_code(jit_state_t *_jit) #define clzr(r0, r1) fallback_clz(r0, r1) #define ctor(r0, r1) fallback_cto(r0, r1) #define ctzr(r0, r1) fallback_ctz(r0, r1) +#define rbitr(r0, r1) fallback_bitswap(r0, r1) case_rr(clo,); case_rr(clz,); case_rr(cto,); case_rr(ctz,); + case_rr(rbit,); case_rrr(and,); case_rrw(and,); case_rrr(or,); diff --git a/lib/jit_s390.c b/lib/jit_s390.c index 25c6421..24869a7 100644 --- a/lib/jit_s390.c +++ b/lib/jit_s390.c @@ -1137,6 +1137,8 @@ _emit_code(jit_state_t *_jit) case_rr(clz,); case_rr(cto,); case_rr(ctz,); +#define rbitr(r0, r1) fallback_bitswap(r0, r1) + case_rr(rbit,); case_rrr(and,); case_rrw(and,); case_rrr(or,); diff --git a/lib/jit_sparc.c b/lib/jit_sparc.c index 9e837d8..34cfd68 100644 --- a/lib/jit_sparc.c +++ b/lib/jit_sparc.c @@ -1561,6 +1561,8 @@ _emit_code(jit_state_t *_jit) case_rr(clz,); case_rr(cto,); case_rr(ctz,); +#define rbitr(r0, r1) fallback_bitswap(r0, r1) + case_rr(rbit,); case_brr(blt,); case_brw(blt,); case_brr(blt, _u); diff --git a/lib/jit_x86.c b/lib/jit_x86.c index b409457..10a6ec9 100644 --- a/lib/jit_x86.c +++ b/lib/jit_x86.c @@ -140,6 +140,7 @@ static void _x87_from_sse_d(jit_state_t*,jit_int32_t,jit_int32_t); # include "jit_x86-cpu.c" # include "jit_x86-sse.c" # include "jit_x86-x87.c" +# include "jit_fallback.c" #undef PROTO /* @@ -1809,6 +1810,8 @@ _emit_code(jit_state_t *_jit) case_rr(clz,); case_rr(cto,); case_rr(ctz,); +#define rbitr(r0, r1) fallback_bitswap(r0, r1) + case_rr(rbit,); case_rrr(lt,); case_rrw(lt,); case_rrr(lt, _u); @@ -2426,6 +2429,7 @@ _emit_code(jit_state_t *_jit) # include "jit_x86-cpu.c" # include "jit_x86-sse.c" # include "jit_x86-x87.c" +# include "jit_fallback.c" #undef CODE void diff --git a/lib/lightning.c b/lib/lightning.c index b0b0ef7..1376773 100644 --- a/lib/lightning.c +++ b/lib/lightning.c @@ -1469,7 +1469,7 @@ _jit_classify(jit_state_t *_jit, jit_code_t code) case jit_code_extr_f: case jit_code_extr_d_f: case jit_code_ldr_f: case jit_code_negr_d: case jit_code_absr_d: case jit_code_sqrtr_d: case jit_code_movr_d: case jit_code_extr_d: case jit_code_extr_f_d: - case jit_code_ldr_d: + case jit_code_ldr_d: case jit_code_rbitr: case jit_code_clor: case jit_code_clzr: case jit_code_ctor: case jit_code_ctzr: case jit_code_movr_w_f: case jit_code_movr_f_w: |