hppa: Add optimized bswapr_us and bswapr_ul - 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
diff options
context:
space:
mode:
authorpcpa <paulo.cesar.pereira.de.andrade@gmail.com>2023年02月17日 14:42:38 -0300
committerpcpa <paulo.cesar.pereira.de.andrade@gmail.com>2023年02月17日 14:42:38 -0300
commit1c7ae4a9648f74f653869cec73545c75ab4bd47d (patch)
tree9243a11201753a1f1ea587ce34a8ecf78ae64796 /lib
parent2bcbc50e1cb795b9379a69e84374bf705ab12ef5 (diff)
downloadlightning-1c7ae4a9648f74f653869cec73545c75ab4bd47d.tar.gz
hppa: Add optimized bswapr_us and bswapr_ul
Also regenerate jit_hppa-sz.c.
Diffstat (limited to 'lib')
-rw-r--r--lib/jit_hppa-cpu.c 42
-rw-r--r--lib/jit_hppa-sz.c 8
2 files changed, 46 insertions, 4 deletions
diff --git a/lib/jit_hppa-cpu.c b/lib/jit_hppa-cpu.c
index 11e49ef..3449ea4 100644
--- a/lib/jit_hppa-cpu.c
+++ b/lib/jit_hppa-cpu.c
@@ -648,6 +648,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 bswapr_us(r0, r1) _bswapr_us(_jit, r0, r1)
+static void _bswapr_us(jit_state_t*,jit_int32_t,jit_int32_t);
+# define bswapr_ui(r0, r1) _bswapr_ui(_jit, r0, r1)
+static void _bswapr_ui(jit_state_t*,jit_int32_t,jit_int32_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)
@@ -663,8 +667,6 @@ static void _casx(jit_state_t *_jit,jit_int32_t,jit_int32_t,
#define extr_uc(r0,r1) EXTRWR_U(r1,31,8,r0)
#define extr_s(r0,r1) EXTRWR(r1,31,16,r0)
#define extr_us(r0,r1) EXTRWR_U(r1,31,16,r0)
-#define bswapr_us(r0,r1) generic_bswapr_us(_jit,r0,r1)
-#define bswapr_ui(r0,r1) generic_bswapr_ui(_jit,r0,r1)
#define addr(r0,r1,r2) ADD(r1,r2,r0)
#define addi(r0,r1,i0) _addi(_jit,r0,r1,i0)
static void _addi(jit_state_t*,jit_int32_t,jit_int32_t,jit_word_t);
@@ -1639,6 +1641,42 @@ _movi_p(jit_state_t *_jit, jit_int32_t r0, jit_word_t i0)
}
static void
+_bswapr_us(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1)
+{
+ jit_int32_t reg;
+ if (r0 == r1) {
+ reg = jit_get_reg(jit_class_gpr);
+ movr(rn(reg), r1);
+ EXTRWR_U(rn(reg), 23, 8, r0);
+ DEPWR(rn(reg), 23, 8, r0);
+ jit_unget_reg(reg);
+ }
+ else {
+ EXTRWR_U(r1, 23, 8, r0);
+ DEPWR(r1, 23, 8, r0);
+ }
+}
+
+static void
+_bswapr_ui(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1)
+{
+ jit_int32_t reg;
+ if (r0 == r1) {
+ reg = jit_get_reg(jit_class_gpr);
+ movr(rn(reg), r1);
+ SHRPWI(rn(reg), rn(reg), 16, r0);
+ DEPWR(r0, 15, 8, r0);
+ SHRPWI(rn(reg), r0, 8, r0);
+ jit_unget_reg(reg);
+ }
+ else {
+ SHRPWI(r1, r1, 16, r0);
+ DEPWR(r0, 15, 8, r0);
+ SHRPWI(r1, r0, 8, r0);
+ }
+}
+
+static void
_movnr(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2)
{
jit_word_t w;
diff --git a/lib/jit_hppa-sz.c b/lib/jit_hppa-sz.c
index 4257b6d..e41f89c 100644
--- a/lib/jit_hppa-sz.c
+++ b/lib/jit_hppa-sz.c
@@ -121,8 +121,8 @@
4, /* extr_us */
0, /* extr_i */
0, /* extr_ui */
- 28, /* bswapr_us */
- 68, /* bswapr_ui */
+ 12, /* bswapr_us */
+ 16, /* bswapr_ui */
0, /* bswapr_ul */
4, /* htonr_us */
4, /* htonr_ui */
@@ -446,4 +446,8 @@
0, /* movi_d_ww */
0, /* movr_d_w */
0, /* movi_d_w */
+ 160, /* clo */
+ 140, /* clz */
+ 164, /* cto */
+ 144, /* ctz */
#endif /* __WORDSIZE */
generated by cgit v1.2.3 (git 2.39.1) at 2025年09月14日 08:03:57 +0000

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