author | pcpa <paulo.cesar.pereira.de.andrade@gmail.com> | 2014年12月25日 23:06:24 -0200 |
---|---|---|
committer | pcpa <paulo.cesar.pereira.de.andrade@gmail.com> | 2014年12月25日 23:06:24 -0200 |
commit | 88aa2fcad24b3abdc5d192bd83e5a2a441295655 (patch) | |
tree | 64e8bda2b24f0c94e1696d4f914f83408c6fb446 /lib/jit_arm-cpu.c | |
parent | fdf41c1fa42329275406e7a160ef09e2627f0283 (diff) | |
download | lightning-88aa2fcad24b3abdc5d192bd83e5a2a441295655.tar.gz |
-rw-r--r-- | lib/jit_arm-cpu.c | 37 |
diff --git a/lib/jit_arm-cpu.c b/lib/jit_arm-cpu.c index aabccef..6f4ae6f 100644 --- a/lib/jit_arm-cpu.c +++ b/lib/jit_arm-cpu.c @@ -1089,9 +1089,12 @@ static void _stxr_i(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t); # define stxi_i(r0,r1,i0) _stxi_i(_jit,r0,r1,i0) static void _stxi_i(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t); # if __BYTE_ORDER == __LITTLE_ENDIAN -# define htonr(r0,r1) _htonr(_jit,r0,r1) -static void _htonr(jit_state_t*,jit_int32_t,jit_int32_t); +# define htonr_us(r0,r1) _htonr_us(_jit,r0,r1) +static void _htonr_us(jit_state_t*,jit_int32_t,jit_int32_t); +# define htonr_ui(r0,r1) _htonr_ui(_jit,r0,r1) +static void _htonr_ui(jit_state_t*,jit_int32_t,jit_int32_t); # else +# define htonr_us(r0,r1) extr_us(r0,r1) # define htonr(r0,r1) movr(r0,r1) # endif # define extr_c(r0,r1) _extr_c(_jit,r0,r1) @@ -3556,9 +3559,37 @@ _stxi_i(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) } # if __BYTE_ORDER == __LITTLE_ENDIAN +static void +_htonr_us(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1) +{ + jit_int32_t t0; + if (jit_thumb_p()) { + if ((r0|r1) < 8) + T1_REV(r0, r1); + else + T2_REV(r0, r1); + rshi_u(r0, r0, 16); + } + else { + if (jit_armv6_p()) { + REV(r0, r1); + rshi_u(r0, r0, 16); + } + else { + t0 = jit_get_reg(jit_class_gpr); + rshi(rn(t0), r1, 8); + andi(r0, r1, 0xff); + andi(rn(t0), rn(t0), 0xff); + lshi(r0, r0, 8); + orr(r0, r0, rn(t0)); + jit_unget_reg(t0); + } + } +} + /* inline glibc htonl (without register clobber) */ static void -_htonr(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1) +_htonr_ui(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1) { jit_int32_t reg; if (jit_thumb_p()) { |