From b71ab4f1b8fe533d943de7ea5ce4aa724cf10e7b Mon Sep 17 00:00:00 2001 From: pcpa Date: 2023年2月28日 17:47:20 -0300 Subject: Add new Lightning rbitr instruction. This instruction reverses the bits of a word. A possible extension could be a instruction that reverses the bits in every byte, and/or if there is valid high usage, have typed versions, like bswapr_T. This instruction is made available as it is used internally in some backends to implement count trailing ones or zeros. --- lib/jit_arm-cpu.c | 15 +++++++++++++++ 1 file changed, 15 insertions(+) (limited to 'lib/jit_arm-cpu.c') 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) @@ -1813,6 +1815,19 @@ _ctzr(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1) fallback_ctz(r0, 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) { -- cgit v1.2.3

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