author | pcpa <paulo.cesar.pereira.de.andrade@gmail.com> | 2023年02月17日 14:42:38 -0300 |
---|---|---|
committer | pcpa <paulo.cesar.pereira.de.andrade@gmail.com> | 2023年02月17日 14:42:38 -0300 |
commit | 1c7ae4a9648f74f653869cec73545c75ab4bd47d (patch) | |
tree | 9243a11201753a1f1ea587ce34a8ecf78ae64796 /lib | |
parent | 2bcbc50e1cb795b9379a69e84374bf705ab12ef5 (diff) | |
download | lightning-1c7ae4a9648f74f653869cec73545c75ab4bd47d.tar.gz |
-rw-r--r-- | lib/jit_hppa-cpu.c | 42 | ||||
-rw-r--r-- | lib/jit_hppa-sz.c | 8 |
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 */ |