1
Fork 0
mirror of https://git.savannah.gnu.org/git/guile.git synced 2025-06-21 03:00:19 +02:00

Implement new, typed, jit_htonr* interfaces

* include/lightning.h: Split jit_htonr in the new 3 interfaces
	jit_htonr_us, jit_htonr_ui and jit_htonr_ul, the later only
	available on 64 bit. The plain/untyped jit_htonr macro call
	maps to the wordsize one.
	* lib/jit_aarch64-cpu.c,  lib/jit_aarch64-sz.c, lib/jit_aarch64.c,
	lib/jit_alpha-cpu.c, lib/jit_alpha-sz.c, lib/jit_alpha.c,
	lib/jit_arm-cpu.c, lib/jit_arm-sz.c, lib/jit_arm.c,
	lib/jit_hppa-cpu.c, lib/jit_hppa-sz.c, lib/jit_hppa.c,
	lib/jit_ia64-cpu.c, lib/jit_ia64-sz.c, lib/jit_ia64.c,
	lib/jit_mips-cpu.c, lib/jit_mips-sz.c, lib/jit_mips.c,
	lib/jit_ppc-cpu.c, lib/jit_ppc-sz.c, lib/jit_ppc.c,
	lib/jit_s390x-cpu.c, lib/jit_s390x-sz.c, lib/jit_s390x.c,
	lib/jit_sparc-cpu.c, lib/jit_sparc-sz.c, lib/jit_sparc.c,
	lib/jit_x86-cpu.c, lib/jit_x86-sz.c, lib/jit_x86.c:
	Update backends for the new jit_htonr*.
	* check/lightning.c, lib/jit_names.c, lib/lightning.c:
	Update for the new jit_htonr* interfaces.
	* check/Makefile.am: Update for new test cases.
	* check/hton.ok, check/hton.tst: New test cases.
This commit is contained in:
pcpa 2014-12-25 23:06:24 -02:00
parent fdf41c1fa4
commit 88aa2fcad2
38 changed files with 630 additions and 112 deletions

View file

@ -1,3 +1,25 @@
2014-12-25 Paulo Andrade <pcpa@gnu.org>
* include/lightning.h: Split jit_htonr in the new 3 interfaces
jit_htonr_us, jit_htonr_ui and jit_htonr_ul, the later only
available on 64 bit. The plain/untyped jit_htonr macro call
maps to the wordsize one.
* lib/jit_aarch64-cpu.c, lib/jit_aarch64-sz.c, lib/jit_aarch64.c,
lib/jit_alpha-cpu.c, lib/jit_alpha-sz.c, lib/jit_alpha.c,
lib/jit_arm-cpu.c, lib/jit_arm-sz.c, lib/jit_arm.c,
lib/jit_hppa-cpu.c, lib/jit_hppa-sz.c, lib/jit_hppa.c,
lib/jit_ia64-cpu.c, lib/jit_ia64-sz.c, lib/jit_ia64.c,
lib/jit_mips-cpu.c, lib/jit_mips-sz.c, lib/jit_mips.c,
lib/jit_ppc-cpu.c, lib/jit_ppc-sz.c, lib/jit_ppc.c,
lib/jit_s390x-cpu.c, lib/jit_s390x-sz.c, lib/jit_s390x.c,
lib/jit_sparc-cpu.c, lib/jit_sparc-sz.c, lib/jit_sparc.c,
lib/jit_x86-cpu.c, lib/jit_x86-sz.c, lib/jit_x86.c:
Update backends for the new jit_htonr*.
* check/lightning.c, lib/jit_names.c, lib/lightning.c:
Update for the new jit_htonr* interfaces.
* check/Makefile.am: Update for new test cases.
* check/hton.ok, check/hton.tst: New test cases.
2014-12-24 Paulo Andrade <pcpa@gnu.org>
* include/lightning/jit_private.h, include/lightning/jit_x86.h,

View file

@ -57,6 +57,7 @@ EXTRA_DIST = \
ldstxr-c.tst ldstxr-c.ok \
ldstxi-c.tst ldstxi-c.ok \
cvt.tst cvt.ok \
hton.tst hton.ok \
branch.tst branch.ok \
alu.inc \
alu_add.tst alu_add.ok \
@ -104,7 +105,7 @@ base_TESTS = \
ldstr ldsti \
ldstxr ldstxi \
ldstr-c ldstxr-c ldstxi-c \
cvt branch \
cvt hton branch \
alu_add alux_add \
alu_sub alux_sub alu_rsb \
alu_mul alu_div alu_rem \
@ -177,7 +178,7 @@ arm_TESTS = \
ldstr.arm ldsti.arm \
ldstxr.arm ldstxi.arm \
ldstr-c.arm ldstxr-c.arm ldstxi-c.arm \
cvt.arm branch.arm \
cvt.arm hton.arm branch.arm \
alu_add.arm alux_add.arm \
alu_sub.arm alux_sub.arm alu_rsb.arm \
alu_mul.arm alu_div.arm alu_rem.arm \
@ -201,7 +202,7 @@ swf_TESTS = \
ldstr.swf ldsti.swf \
ldstxr.swf ldstxi.swf \
ldstr-c.swf ldstxr-c.swf ldstxi-c.swf \
cvt.swf branch.swf \
cvt.swf hton.swf branch.swf \
alu_add.swf alux_add.swf \
alu_sub.swf alux_sub.swf alu_rsb.swf \
alu_mul.swf alu_div.swf alu_rem.swf \
@ -223,7 +224,7 @@ arm_swf_TESTS = \
ldstr.arm.swf ldsti.arm.swf \
ldstxr.arm.swf ldstxi.arm.swf \
ldstr-c.arm.swf ldstxr-c.arm.swf ldstxi-c.arm.swf \
cvt.arm.swf branch.arm.swf \
cvt.arm.swf hton.arm.swf branch.arm.swf \
alu_add.arm.swf alux_add.arm.swf \
alu_sub.arm.swf alux_sub.arm.swf alu_rsb.arm.swf \
alu_mul.arm.swf alu_div.arm.swf alu_rem.arm.swf \
@ -246,7 +247,7 @@ arm4_swf_TESTS = \
ldstr.arm4.swf ldsti.arm4.swf \
ldstxr.arm4.swf ldstxi.arm4.swf \
ldstr-c.arm4.swf ldstxr-c.arm4.swf ldstxi-c.arm4.swf \
cvt.arm4.swf branch.arm4.swf \
cvt.arm4.swf hton.arm4.swf branch.arm4.swf \
alu_add.arm4.swf alux_add.arm4.swf \
alu_sub.arm4.swf alux_sub.arm4.swf alu_rsb.arm4.swf \
alu_mul.arm4.swf alu_div.arm4.swf alu_rem.arm4.swf \

1
check/hton.ok Normal file
View file

@ -0,0 +1 @@
ok

169
check/hton.tst Normal file
View file

@ -0,0 +1,169 @@
.data 16
ok:
.c "ok\n"
#define us12_i 0x1234
#define us7f_i 0x7ff7
#define us80_i 0x8008
#define usff_i 0xffff
#define ui12_i 0x01234567
#define ui7f_i 0x7f7ff7f7
#define ui80_i 0x80800808
#define uiff_i 0xffffffff
#define ul12_i 0x0123456789abcdef
#define ul7f_i 0x7f7f7f7ff7f7f7f7
#define ul80_i 0x8080808008080808
#define ulff_i 0xffffffffffffffff
#if __WORDSIZE == 32
# define xus12_i 0xffff1234
# define xus7f_i 0x10107ff7
# define xus80_i 0x81188008
# define xusff_i 0xeaaeffff
#else
# define xus12_i 0xffffffffffff1234
# define xus7f_i 0x1010100101017ff7
# define xus80_i 0x8181811818818008
# define xusff_i 0xeaeaeaaeaeaeffff
# define xui12_i 0xffffffff01234567
# define xui7f_i 0x101001017f7ff7f7
# define xui80_i 0x8181181880800808
# define xuiff_i 0xeaeaaeaeffffffff
#endif
#if __BYTE_ORDER == __LITTLE_ENDIAN
# define us12_o 0x3412
# define us7f_o 0xf77f
# define us80_o 0x0880
# define usff_o 0xffff
# define ui12_o 0x67452301
# define ui7f_o 0xf7f77f7f
# define ui80_o 0x08088080
# define uiff_o 0xffffffff
# define ul12_o 0xefcdab8967452301
# define ul7f_o 0xf7f7f7f77f7f7f7f
# define ul80_o 0x0808080880808080
# define ulff_o 0xffffffffffffffff
#else
# define us12_o us12_i
# define us7f_o us7f_i
# define us80_o us80_i
# define usff_o usff_i
# define ui12_o ui12_i
# define ui7f_o ui7f_i
# define ui80_o ui80_i
# define uiff_o uiff_i
# define ul12_o ul12_i
# define ul7f_o ul7f_i
# define ul80_o ul80_i
# define ulff_o ulff_i
#endif
#define HTON4(I, O, T, R0, R1) \
movi %R0 I \
htonr_##T %R1 %R0 \
beqi T##R0##R1##I %R1 O \
calli @abort \
T##R0##R1##I:
#define HTON3(T, R0, R1) \
HTON4(T##12_i, T##12_o, T, R0, R1) \
HTON4(x##T##12_i, T##12_o, T, R0, R1) \
HTON4(T##7f_i, T##7f_o, T, R0, R1) \
HTON4(x##T##7f_i, T##7f_o, T, R0, R1) \
HTON4(T##80_i, T##80_o, T, R0, R1) \
HTON4(x##T##80_i, T##80_o, T, R0, R1) \
HTON4(T##ff_i, T##ff_o, T, R0, R1) \
HTON4(x##T##ff_i, T##ff_o, T, R0, R1)
#define HTON3x(T, R0, R1) \
HTON4(T##12_i, T##12_o, T, R0, R1) \
HTON4(T##7f_i, T##7f_o, T, R0, R1) \
HTON4(T##80_i, T##80_o, T, R0, R1) \
HTON4(T##ff_i, T##ff_o, T, R0, R1)
#define HTON2(T, V0, V1, V2, R0, R1, R2) \
HTON3(T, V0, V0) \
HTON3(T, V0, V1) \
HTON3(T, V0, V2) \
HTON3(T, V0, R0) \
HTON3(T, V0, R1) \
HTON3(T, V0, R2) \
#define HTON2x(T, V0, V1, V2, R0, R1, R2) \
HTON3x(T, V0, V0) \
HTON3x(T, V0, V1) \
HTON3x(T, V0, V2) \
HTON3x(T, V0, R0) \
HTON3x(T, V0, R1) \
HTON3x(T, V0, R2) \
#define HTON1(T, V0, V1, V2, R0, R1, R2) \
HTON2(T, V0, V1, V2, R0, R1, R2) \
HTON2(T, V1, V2, R0, R1, R2, V0) \
HTON2(T, V2, R0, R1, R2, V0, V1) \
HTON2(T, R0, R1, R2, V0, V1, V2) \
HTON2(T, R1, R2, V0, V1, V2, R0) \
HTON2(T, R2, V0, V1, V2, R0, R1)
#define HTON1x(T, V0, V1, V2, R0, R1, R2) \
HTON2x(T, V0, V1, V2, R0, R1, R2) \
HTON2x(T, V1, V2, R0, R1, R2, V0) \
HTON2x(T, V2, R0, R1, R2, V0, V1) \
HTON2x(T, R0, R1, R2, V0, V1, V2) \
HTON2x(T, R1, R2, V0, V1, V2, R0) \
HTON2x(T, R2, V0, V1, V2, R0, R1)
#if __WORDSIZE == 32
# define HTON(V0, V1, V2, R0, R1, R2) \
HTON1(us, V0, V1, V2, R0, R1, R2) \
HTON1x(ui, V0, V1, V2, R0, R1, R2)
#else
# define HTON(V0, V1, V2, R0, R1, R2) \
HTON1(us, V0, V1, V2, R0, R1, R2) \
HTON1(ui, V0, V1, V2, R0, R1, R2) \
HTON1x(ul, V0, V1, V2, R0, R1, R2)
#endif
.code
prolog
/* simple sequence for easier disassembly reading and encoding check */
movi %r0 us12_i
htonr_us %r1 %r0
beqi us %r1 us12_o
calli @abort
us:
movi %r0 xus12_i
htonr_us %r1 %r0
beqi xus %r1 us12_o
calli @abort
xus:
movi %r0 ui12_i
htonr_ui %r1 %r0
beqi ui %r1 ui12_o
calli @abort
ui:
#if __WORDSIZE == 64
movi %r0 xui12_i
htonr_ui %r1 %r0
beqi xui %r1 ui12_o
calli @abort
xui:
movi %r0 ul12_i
htonr_ul %r1 %r0
beqi ul %r1 ul12_o
calli @abort
ul:
#endif
HTON(v0, v1, v2, r0, r1, r2)
// just to know did not abort
prepare
pushargi ok
ellipsis
finishi @printf
ret
epilog

View file

@ -319,6 +319,11 @@ static void extr_s(void); static void extr_us(void);
#if __WORDSIZE == 64
static void extr_i(void); static void extr_ui(void);
#endif
static void htonr_us(void); static void ntohr_us(void);
static void htonr_ui(void); static void ntohr_ui(void);
#if __WORDSIZE == 64
static void htonr_ul(void); static void ntohr_ul(void);
#endif
static void htonr(void); static void ntohr(void);
static void ldr_c(void); static void ldi_c(void);
static void ldr_uc(void); static void ldi_uc(void);
@ -621,6 +626,11 @@ static instr_t instr_vector[] = {
entry(extr_s), entry(extr_us),
#if __WORDSIZE == 64
entry(extr_i), entry(extr_ui),
#endif
entry(htonr_us), entry(ntohr_us),
entry(htonr_ui), entry(ntohr_ui),
#if __WORDSIZE == 64
entry(htonr_ul), entry(ntohr_ul),
#endif
entry(htonr), entry(ntohr),
entry(ldr_c), entry(ldi_c),
@ -1437,6 +1447,11 @@ entry_ir_ir(extr_s) entry_ir_ir(extr_us)
#if __WORDSIZE == 64
entry_ir_ir(extr_i) entry_ir_ir(extr_ui)
#endif
entry_ir_ir(htonr_us) entry_ir_ir(ntohr_us)
entry_ir_ir(htonr_ui) entry_ir_ir(ntohr_ui)
#if __WORDSIZE == 64
entry_ir_ir(htonr_ul) entry_ir_ir(ntohr_ul)
#endif
entry_ir_ir(htonr) entry_ir_ir(ntohr)
entry_ir_ir(ldr_c) entry_ir_pm(ldi_c)
entry_ir_ir(ldr_uc) entry_ir_pm(ldi_uc)

View file

@ -327,9 +327,22 @@ typedef enum {
# define jit_extr_ui(u,v) jit_new_node_ww(jit_code_extr_ui,u,v)
#endif
jit_code_extr_i, jit_code_extr_ui,
#define jit_htonr(u,v) jit_new_node_ww(jit_code_htonr,u,v)
#define jit_ntohr(u,v) jit_new_node_ww(jit_code_htonr,u,v)
jit_code_htonr,
#define jit_htonr_us(u,v) jit_new_node_ww(jit_code_htonr_us,u,v)
#define jit_ntohr_us(u,v) jit_new_node_ww(jit_code_htonr_us,u,v)
jit_code_htonr_us,
#define jit_htonr_ui(u,v) jit_new_node_ww(jit_code_htonr_ui,u,v)
#define jit_ntohr_ui(u,v) jit_new_node_ww(jit_code_htonr_ui,u,v)
#if __WORDSIZE == 32
# define jit_htonr(u,v) jit_new_node_ww(jit_code_htonr_ui,u,v)
# define jit_ntohr(u,v) jit_new_node_ww(jit_code_htonr_ui,u,v)
#else
#define jit_htonr_ul(u,v) jit_new_node_ww(jit_code_htonr_ul,u,v)
#define jit_ntohr_ul(u,v) jit_new_node_ww(jit_code_htonr_ul,u,v)
# define jit_htonr(u,v) jit_new_node_ww(jit_code_htonr_ul,u,v)
# define jit_ntohr(u,v) jit_new_node_ww(jit_code_htonr_ul,u,v)
#endif
jit_code_htonr_ui, jit_code_htonr_ul,
#define jit_ldr_c(u,v) jit_new_node_ww(jit_code_ldr_c,u,v)
#define jit_ldi_c(u,v) jit_new_node_wp(jit_code_ldi_c,u,v)

View file

@ -656,9 +656,15 @@ static void _stxi_i(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t);
# define stxi_l(i0,r0,r1) _stxi_l(_jit,i0,r0,r1)
static void _stxi_l(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t);
# if __BYTE_ORDER == __LITTLE_ENDIAN
# define htonr(r0,r1) REV(r0,r1)
# 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);
# define htonr_ul(r0,r1) REV(r0,r1)
# else
# define htonr(r0,r1) movr(r0,r1)
# define htonr_us(r0,r1) extr_us(r0,r1)
# define htonr_ui(r0,r1) extr_ui(r0,r1)
# define htonr_ul(r0,r1) movr(r0,r1)
# endif
# define extr_c(r0,r1) SXTB(r0,r1)
# define extr_uc(r0,r1) UXTB(r0,r1)
@ -1429,6 +1435,22 @@ _xori(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0)
}
}
#if __BYTE_ORDER == __LITTLE_ENDIAN
static void
_htonr_us(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1)
{
htonr_ul(r0, r1);
rshi_u(r0, r0, 48);
}
static void
_htonr_ui(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1)
{
htonr_ul(r0, r1);
rshi_u(r0, r0, 32);
}
#endif
static void
_ldi_c(jit_state_t *_jit, jit_int32_t r0, jit_word_t i0)
{

View file

@ -84,7 +84,9 @@
4, /* extr_us */
4, /* extr_i */
4, /* extr_ui */
4, /* htonr */
8, /* htonr_us */
8, /* htonr_ui */
4, /* htonr_ul */
4, /* ldr_c */
12, /* ldi_c */
4, /* ldr_uc */

View file

@ -825,7 +825,9 @@ _emit_code(jit_state_t *_jit)
case_wrr(stx, _i);
case_rrr(stx, _l);
case_wrr(stx, _l);
case_rr(hton,);
case_rr(hton, _us);
case_rr(hton, _ui);
case_rr(hton, _ul);
case_rr(ext, _c);
case_rr(ext, _uc);
case_rr(ext, _s);

View file

@ -622,10 +622,16 @@ static void _extr_i(jit_state_t*,jit_int32_t,jit_int32_t);
# define extr_ui(r0,r1) _extr_ui(_jit,r0,r1)
static void _extr_ui(jit_state_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);
# define htonr_ul(r0,r1) _htonr_ul(_jit,r0,r1)
static void _htonr_ul(jit_state_t*,jit_int32_t,jit_int32_t);
# else
# define htonr(r0,r1) movr(r0,r1)
# define htonr_us(r0,r1) extr_us(r0,r1)
# define htonr_ui(r0,r1) extr_ui(r0,r1)
# define htonr_ul(r0,r1) movr(r0,r1)
# endif
# define jmpr(r0) JMP(_R31_REGNO,r0,0)
# define jmpi(i0) _jmpi(_jit,i0)
@ -2442,7 +2448,45 @@ _extr_ui(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1)
}
static void
_htonr(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1)
_htonr_us(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1)
{
jit_int32_t t0;
t0 = jit_get_reg(jit_class_gpr);
EXTBLi(r1, 0, rn(t0));
EXTBLi(r1, 1, r0);
SLLi(rn(t0), 8, rn(t0));
OR(r0, rn(t0), r0);
jit_unget_reg(t0);
}
static void
_htonr_ui(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1)
{
jit_int32_t t0;
jit_int32_t t1;
jit_int32_t t2;
jit_int32_t t3;
t0 = jit_get_reg(jit_class_gpr);
t1 = jit_get_reg(jit_class_gpr);
t2 = jit_get_reg(jit_class_gpr);
t3 = jit_get_reg(jit_class_gpr);
EXTBLi(r1, 3, rn(t0));
INSBLi(r1, 3, rn(t1));
SLLi(r1, 8, rn(t2));
ZAPNOTi(rn(t2), 4, rn(t2));
SRLi(r1, 8, rn(t3));
OR(rn(t0), rn(t1), r0);
OR(rn(t2), r0, r0);
ZAPNOTi(rn(t3), 2, rn(t3));
OR(rn(t3), r0, r0);
jit_unget_reg(t3);
jit_unget_reg(t2);
jit_unget_reg(t1);
jit_unget_reg(t0);
}
static void
_htonr_ul(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1)
{
jit_int32_t t0;
jit_int32_t t1;

View file

@ -84,7 +84,9 @@
8, /* extr_us */
8, /* extr_i */
8, /* extr_ui */
36, /* htonr */
16, /* htonr_us */
36, /* htonr_ui */
36, /* htonr_ul */
12, /* ldr_c */
40, /* ldi_c */
4, /* ldr_uc */

View file

@ -850,7 +850,9 @@ _emit_code(jit_state_t *_jit)
case_wrr(stx, _i);
case_rrr(stx, _l);
case_wrr(stx, _l);
case_rr(hton,);
case_rr(hton, _us);
case_rr(hton, _ui);
case_rr(hton, _ul);
case_rr(ext, _c);
case_rr(ext, _uc);
case_rr(ext, _s);

View file

@ -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()) {

View file

@ -85,7 +85,9 @@
4, /* extr_us */
0, /* extr_i */
0, /* extr_ui */
4, /* htonr */
8, /* htonr_us */
4, /* htonr_ui */
0, /* htonr_ul */
4, /* ldr_c */
12, /* ldi_c */
4, /* ldr_uc */
@ -441,7 +443,9 @@
4, /* extr_us */
0, /* extr_i */
0, /* extr_ui */
4, /* htonr */
20, /* htonr_us */
16, /* htonr_ui */
0, /* htonr_ul */
4, /* ldr_c */
12, /* ldi_c */
4, /* ldr_uc */

View file

@ -1141,7 +1141,8 @@ _emit_code(jit_state_t *_jit)
case_wrr(stx, _s);
case_rrr(stx, _i);
case_wrr(stx, _i);
case_rr(hton,);
case_rr(hton, _us);
case_rr(hton, _ui);
case_rr(ext, _c);
case_rr(ext, _uc);
case_rr(ext, _s);

View file

@ -655,7 +655,8 @@ static jit_word_t _movi_p(jit_state_t*,jit_int32_t,jit_word_t);
#define extr_s(r0,r1) EXTRWR(r1,31,16,r0)
#define extr_us(r0,r1) EXTRWR_U(r1,31,16,r0)
#if __BYTE_ORDER == __BIG_ENDIAN
# define htonr(r0,r1) movr(r0,r1)
# define htonr_us(r0,r1) extr_us(r0,r1)
# define htonr_ui(r0,r1) movr(r0,r1)
#else
# error need htonr implementation
#endif

View file

@ -84,7 +84,9 @@
4, /* extr_us */
0, /* extr_i */
0, /* extr_ui */
4, /* htonr */
4, /* htonr_us */
4, /* htonr_ui */
0, /* htonr_l */
8, /* ldr_c */
12, /* ldi_c */
4, /* ldr_uc */

View file

@ -804,7 +804,8 @@ _emit_code(jit_state_t *_jit)
case_rr(ext, _uc);
case_rr(ext, _s);
case_rr(ext, _us);
case_rr(hton,);
case_rr(hton, _us);
case_rr(hton, _ui);
case_rrr(lt,);
case_rrw(lt,);
case_rrr(lt, _u);

View file

@ -1308,9 +1308,15 @@ 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);
#if __BYTE_ORDER == __LITTLE_ENDIAN
# define htonr(r0,r1) MUX1(r0,r1,MUX_REV)
# 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);
# define htonr_ul(r0,r1) MUX1(r0,r1,MUX_REV)
#else
# define htonr(r0,r1) movr(r0,r1)
# define htonr_us(r0,r1) extr_us(r0,r1)
# define htonr_ui(r0,r1) extr_ui(r0,r1)
# define htonr_ul(r0,r1) movr(r0,r1)
#endif
#define extr_c(r0,r1) SXT1(r0,r1)
#define extr_uc(r0,r1) ZXT1(r0,r1)
@ -3939,6 +3945,48 @@ _xori(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0)
}
}
#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;
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);
}
static void
_htonr_ui(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1)
{
jit_int32_t t0;
jit_int32_t t1;
jit_int32_t t2;
t0 = jit_get_reg(jit_class_gpr);
t1 = jit_get_reg(jit_class_gpr);
t2 = jit_get_reg(jit_class_gpr);
rshi(rn(t0), r1, 24);
rshi(rn(t1), r1, 16);
rshi(rn(t2), r1, 8);
andi(rn(t0), rn(t0), 0xff);
andi(rn(t1), rn(t1), 0xff);
andi(rn(t2), rn(t2), 0xff);
andi(r0, r1, 0xff);
lshi(r0, r0, 24);
lshi(rn(t1), rn(t1), 8);
orr(r0, r0, rn(t0));
lshi(rn(t2), rn(t2), 16);
orr(r0, r0, rn(t1));
orr(r0, r0, rn(t2));
jit_unget_reg(t2);
jit_unget_reg(t1);
jit_unget_reg(t0);
}
#endif
static void
_lshi(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0)
{

View file

@ -84,7 +84,9 @@
16, /* extr_us */
16, /* extr_i */
16, /* extr_ui */
0, /* htonr */
16, /* htonr_us */
16, /* htonr_ui */
16, /* htonr_ul */
16, /* ldr_c */
32, /* ldi_c */
0, /* ldr_uc */

View file

@ -945,7 +945,9 @@ _emit_code(jit_state_t *_jit)
else
movi(rn(node->u.w), node->v.w);
break;
case_rr(hton,);
case_rr(hton, _us);
case_rr(hton, _ui);
case_rr(hton, _ul);
case_rr(ext, _c);
case_rr(ext, _uc);
case_rr(ext, _s);

View file

@ -579,10 +579,22 @@ static void _stxr_l(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t);
static void _stxi_l(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t);
# endif
# 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);
# if __WORDSIZE == 64
# define htonr_ul(r0,r1) _htonr_ul(_jit,r0,r1)
static void _htonr_ul(jit_state_t*,jit_int32_t,jit_int32_t);
# endif
# else
# define htonr(r0,r1) movr(r0,r1)
# define htonr_us(r0,r1) extr_us(r0,r1)
# if __WORDSIZE == 32
# define htonr_ui(r0,r1) movr(r0,r1)
# else
# define htonr_ui(r0,r1) extr_ui(r0,r1)
# define htonr_ul(r0,r1) movr(r0,r1)
# endif
# endif
# define extr_c(r0,r1) _extr_c(_jit,r0,r1)
static void _extr_c(jit_state_t*,jit_int32_t,jit_int32_t);
@ -591,8 +603,8 @@ static void _extr_c(jit_state_t*,jit_int32_t,jit_int32_t);
static void _extr_s(jit_state_t*,jit_int32_t,jit_int32_t);
# define extr_us(r0,r1) ANDI(r0,r1,0xffff)
# if __WORDSIZE == 64
# define extr_i(r0,r1) SLL(r0,r1,0)
# define extr_ui(r0,r1) _extr_ui(_jit,r0,r1)
# define extr_i(r0,r1) SLL(r0,r1,0)
# define extr_ui(r0,r1) _extr_ui(_jit,r0,r1)
static void _extr_ui(jit_state_t*,jit_int32_t,jit_int32_t);
# endif
# define ltr(r0,r1,r2) SLT(r0,r1,r2)
@ -1657,40 +1669,57 @@ _stxi_l(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1)
#endif
# 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;
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);
}
static void
_htonr_ui(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1)
{
jit_int32_t t0;
jit_int32_t t1;
jit_int32_t t2;
t0 = jit_get_reg(jit_class_gpr);
t1 = jit_get_reg(jit_class_gpr);
t2 = jit_get_reg(jit_class_gpr);
rshi(rn(t0), r1, 24);
rshi(rn(t1), r1, 16);
rshi(rn(t2), r1, 8);
andi(rn(t0), rn(t0), 0xff);
andi(rn(t1), rn(t1), 0xff);
andi(rn(t2), rn(t2), 0xff);
andi(r0, r1, 0xff);
lshi(r0, r0, 24);
lshi(rn(t1), rn(t1), 8);
orr(r0, r0, rn(t0));
lshi(rn(t2), rn(t2), 16);
orr(r0, r0, rn(t1));
orr(r0, r0, rn(t2));
jit_unget_reg(t2);
jit_unget_reg(t1);
jit_unget_reg(t0);
}
static void
_htonr(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1)
{
jit_int32_t rg0;
jit_int32_t rg1;
if (jit_mips2_p()) {
WSBH(r0, r1);
ROTR(r0, r0, 16);
}
else {
/* FIXME rewrite in a more sane way, but unlikely to be used
* in near time... */
# if __WORDSIZE == 64
# error htonr only implemented for 64 bit
# endif
rg0 = jit_get_reg(jit_class_gpr);
rg1 = jit_get_reg(jit_class_gpr);
LUI(rn(rg0), 0xff00);
ORI(rn(rg0), rn(rg0), 0xff00);
AND(rn(rg1), r1, rn(rg0));
SRL(rn(rg0), rn(rg0), 8);
AND(rn(rg0), r1, rn(rg0));
SRL(rn(rg1), rn(rg1), 8);
SLL(rn(rg0), rn(rg0), 8);
OR(r0, rn(rg0), rn(rg1));
ANDI(rn(rg1), r0, 0xffff);
LUI(rn(rg0), 0xffff);
AND(rn(rg0), r0, rn(rg0));
SLL(rn(rg1), rn(rg1), 16);
SRL(rn(rg0), rn(rg0), 16);
OR(r0, rn(rg0), rn(rg1));
jit_unget_reg(rg0);
jit_unget_reg(rg1);
}
jit_int32_t reg;
reg = jit_get_reg(jit_class_gpr);
rshi_u(rn(reg), r1, 32);
htonr_ui(r0, r1);
htonr_ui(rn(reg), rn(reg));
lshi(r0, r0, 32);
orr(r0, r0, rn(reg));
jit_unget_reg(reg);
}
# endif

View file

@ -85,7 +85,9 @@
4, /* extr_us */
0, /* extr_i */
0, /* extr_ui */
4, /* htonr */
4, /* htonr_us */
4, /* htonr_ui */
0, /* htonr_ul */
4, /* ldr_c */
12, /* ldi_c */
4, /* ldr_uc */
@ -441,7 +443,9 @@
4, /* extr_us */
0, /* extr_i */
0, /* extr_ui */
56, /* htonr */
20, /* htonr_us */
52, /* htonr_ui */
0, /* htonr_ul */
4, /* ldr_c */
12, /* ldi_c */
4, /* ldr_uc */
@ -796,7 +800,9 @@
4, /* extr_us */
4, /* extr_i */
8, /* extr_ui */
4, /* htonr */
4, /* htonr_us */
4, /* htonr_ui */
4, /* htonr_ul */
4, /* ldr_c */
12, /* ldi_c */
4, /* ldr_uc */

View file

@ -1094,7 +1094,11 @@ _emit_code(jit_state_t *_jit)
case_rrr(stx, _l);
case_wrr(stx, _l);
#endif
case_rr(hton,);
case_rr(hton, _us);
case_rr(hton, _ui);
#if __WORDSIZE == 64
case_rr(hton, _ul);
#endif
case_rr(ext, _c);
case_rr(ext, _uc);
case_rr(ext, _s);

View file

@ -62,7 +62,8 @@ static char *code_name[] = {
"extr_c", "extr_uc",
"extr_s", "extr_us",
"extr_i", "extr_ui",
"htonr",
"htonr_us",
"htonr_ui", "htonr_ul",
"ldr_c", "ldi_c",
"ldr_uc", "ldi_uc",
"ldr_s", "ldi_s",

View file

@ -471,10 +471,22 @@ static jit_word_t _movi_p(jit_state_t*,jit_int32_t,jit_word_t);
# define extr_ui(r0,r1) CLRLDI(r0,r1,32)
# endif
# if __BYTE_ORDER == __BIG_ENDIAN
# define htonr(r0,r1) movr(r0,r1)
# define htonr_us(r0,r1) extr_us(r0,r1)
# if __WORDSIZE == 32
# define htonr_ui(r0,r1) movr(r0,r1)
# else
# define htonr_ui(r0,r1) extr_ui(r0,r1)
# define htonr_ul(r0,r1) movr(r0,r1)
# endif
# else
# 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);
# if __WORDSIZE == 64
# define htonr_ul(r0,r1) _htonr_ul(_jit,r0,r1)
static void _htonr_ul(jit_state_t*,jit_int32_t,jit_int32_t);
# endif
# endif
# define addr(r0,r1,r2) ADD(r0,r1,r2)
# define addi(r0,r1,i0) _addi(_jit,r0,r1,i0)
@ -1048,31 +1060,44 @@ _movi_p(jit_state_t *_jit, jit_int32_t r0, jit_word_t i0)
# if __BYTE_ORDER == __LITTLE_ENDIAN
static void
_htonr(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1)
_htonr_us(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1)
{
jit_int32_t t0;
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);
}
static void
_htonr_ui(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1)
{
jit_int32_t reg;
# if __WORDSIZE == 64
jit_int32_t top;
top = jit_get_reg(jit_class_gpr);
rshi_u(rn(top), r1, 32);
# endif
reg = jit_get_reg(jit_class_gpr);
ROTLWI(rn(reg), r1, 8);
RLWIMI(rn(reg), r1, 24, 0, 7);
RLWIMI(rn(reg), r1, 24, 16, 23);
# if __WORDSIZE == 32
CLRLDI(r0, rn(reg), 32);
# else
lshi(r0, rn(reg), 32);
ROTLWI(rn(reg), rn(top), 8);
RLWIMI(rn(reg), rn(top), 24, 0, 7);
RLWIMI(rn(reg), rn(top), 24, 16, 23);
orr(r0, r0, rn(reg));
movr(r0, rn(top));
jit_unget_reg(top);
# endif
jit_unget_reg(reg);
}
# if __WORDSIZE == 64
static void
_htonr_ul(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1)
{
jit_int32_t reg;
reg = jit_get_reg(jit_class_gpr);
rshi_u(rn(reg), r1, 32);
htonr_ui(r0, r1);
htonr_ui(rn(reg), rn(reg));
lshi(r0, r0, 32);
orr(r0, r0, rn(reg));
jit_unget_reg(reg);
}
# endif
# endif
static void

View file

@ -85,7 +85,9 @@
4, /* extr_us */
0, /* extr_i */
0, /* extr_ui */
4, /* htonr */
4, /* htonr_us */
4, /* htonr_ui */
0, /* htonr_ul */
8, /* ldr_c */
12, /* ldi_c */
4, /* ldr_uc */
@ -441,7 +443,9 @@
4, /* extr_us */
0, /* extr_i */
0, /* extr_ui */
4, /* htonr */
4, /* htonr_us */
4, /* htonr_ui */
0, /* htonr_ul */
8, /* ldr_c */
12, /* ldi_c */
4, /* ldr_uc */
@ -797,7 +801,15 @@
4, /* extr_us */
4, /* extr_i */
4, /* extr_ui */
4, /* htonr */
# if __BYTE_ORDER == __BIG_ENDIAN
4, /* htonr_us */
4, /* htonr_ui */
4, /* htonr_ul */
#else
20, /* htonr_us */
16, /* htonr_ui */
44, /* htonr_ul */
#endif
8, /* ldr_c */
28, /* ldi_c */
4, /* ldr_uc */

View file

@ -949,7 +949,11 @@ _emit_code(jit_state_t *_jit)
case_rr(ext, _i);
case_rr(ext, _ui);
# endif
case_rr(hton,);
case_rr(hton, _us);
case_rr(hton, _ui);
# if __WORDSIZE == 64
case_rr(hton, _ul);
# endif
case_rr(neg,);
case_rr(com,);
case_rr(mov,);

View file

@ -1004,7 +1004,9 @@ static void _ori(jit_state_t*,jit_int32_t,jit_int32_t,jit_word_t);
static void _xorr(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t);
# define xori(r0,r1,i0) _xori(_jit,r0,r1,i0)
static void _xori(jit_state_t*,jit_int32_t,jit_int32_t,jit_word_t);
# define htonr(r0,r1) movr(r0,r1)
# define htonr_us(r0,r1) extr_us(r0,r1)
# define htonr_ui(r0,r1) extr_ui(r0,r1)
# define htonr_ul(r0,r1) movr(r0,r1)
# define extr_c(r0,r1) LGBR(r0,r1)
# define extr_uc(r0,r1) LLGCR(r0,r1)
# define extr_s(r0,r1) LGHR(r0,r1)

View file

@ -84,7 +84,9 @@
4, /* extr_us */
4, /* extr_i */
4, /* extr_ui */
4, /* htonr */
4, /* htonr_us */
4, /* htonr_ui */
4, /* htonr_ul */
6, /* ldr_c */
18, /* ldi_c */
6, /* ldr_uc */

View file

@ -808,7 +808,9 @@ _emit_code(jit_state_t *_jit)
case_wrr(stx, _i);
case_rrr(stx, _l);
case_wrr(stx, _l);
case_rr(hton,);
case_rr(hton, _us);
case_rr(hton, _ui);
case_rr(hton, _ul);
case_rr(ext, _c);
case_rr(ext, _uc);
case_rr(ext, _s);

View file

@ -508,7 +508,8 @@ static void _xori(jit_state_t*, jit_int32_t, jit_int32_t, jit_word_t);
# define rshi(r0, r1, i0) SRAI(r1, i0, r0)
# define rshr_u(r0, r1, r2) SRL(r1, r2, r0)
# define rshi_u(r0, r1, i0) SRLI(r1, i0, r0)
# define htonr(r0,r1) movr(r0,r1)
# define htonr_us(r0,r1) extr_us(r0,r1)
# define htonr_ui(r0,r1) movr(r0,r1)
# define extr_c(r0,r1) _extr_c(_jit,r0,r1)
static void _extr_c(jit_state_t*,jit_int32_t,jit_int32_t);
# define extr_uc(r0,r1) andi(r0, r1, 0xff)

View file

@ -84,7 +84,9 @@
8, /* extr_us */
0, /* extr_i */
0, /* extr_ui */
4, /* htonr */
4, /* htonr_us */
4, /* htonr_ui */
0, /* htonr_ul */
4, /* ldr_c */
12, /* ldi_c */
4, /* ldr_uc */

View file

@ -830,7 +830,8 @@ _emit_code(jit_state_t *_jit)
case_wrr(stx, _s);
case_rrr(stx, _i);
case_wrr(stx, _i);
case_rr(hton,);
case_rr(hton, _us);
case_rr(hton, _ui);
case_rr(ext, _c);
case_rr(ext, _uc);
case_rr(ext, _s);

View file

@ -371,8 +371,14 @@ static void _movir(jit_state_t*,jit_int32_t,jit_int32_t);
# define movir_u(r0, r1) _movir_u(_jit, r0, r1)
static void _movir_u(jit_state_t*,jit_int32_t,jit_int32_t);
# endif
#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);
# if __X64 && !__X64_32
#define htonr_ul(r0, r1) _htonr_ul(_jit, r0, r1)
static void _htonr_ul(jit_state_t*,jit_int32_t,jit_int32_t);
#endif
# define extr_c(r0, r1) _extr_c(_jit, r0, r1)
static void _extr_c(jit_state_t*,jit_int32_t,jit_int32_t);
# define extr_uc(r0, r1) _extr_uc(_jit, r0, r1)
@ -438,7 +444,6 @@ static void _ldxi_s(jit_state_t*, jit_int32_t, jit_int32_t, jit_word_t);
static void _ldxr_us(jit_state_t*, jit_int32_t, jit_int32_t, jit_int32_t);
# define ldxi_us(r0, r1, i0) _ldxi_us(_jit, r0, r1, i0)
static void _ldxi_us(jit_state_t*, jit_int32_t, jit_int32_t, jit_word_t);
# if __X32 || !__X64_32
# define ldxr_i(r0, r1, r2) _ldxr_i(_jit, r0, r1, r2)
static void _ldxr_i(jit_state_t*, jit_int32_t, jit_int32_t, jit_int32_t);
@ -2203,14 +2208,36 @@ _movir_u(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1)
#endif
static void
_htonr(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1)
_htonr_us(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1)
{
extr_us(r0, r1);
ic(0x66);
rex(0, 0, _NOREG, _NOREG, r0);
ic(0xc1);
mrm(0x03, X86_ROR, r7(r0));
ic(8);
}
static void
_htonr_ui(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1)
{
movr(r0, r1);
rex(0, WIDE, _NOREG, _NOREG, r0);
rex(0, 0, _NOREG, _NOREG, r0);
ic(0x0f);
ic(0xc8 | r7(r0));
}
#if __X64 && !__X64_32
static void
_htonr_ul(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1)
{
movr(r0, r1);
rex(0, 1, _NOREG, _NOREG, r0);
ic(0x0f);
ic(0xc8 | r7(r0));
}
#endif
static void
_extr_c(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1)
{

View file

@ -84,7 +84,9 @@
3, /* extr_us */
0, /* extr_i */
0, /* extr_ui */
4, /* htonr */
4, /* htonr_us */
4, /* htonr_ui */
0, /* htonr_ul */
3, /* ldr_c */
7, /* ldi_c */
3, /* ldr_uc */
@ -439,7 +441,9 @@
4, /* extr_us */
3, /* extr_i */
3, /* extr_ui */
6, /* htonr */
9, /* htonr_us */
6, /* htonr_ui */
6, /* htonr_ul */
4, /* ldr_c */
15, /* ldi_c */
4, /* ldr_uc */
@ -793,7 +797,9 @@
4, /* extr_us */
0, /* extr_i */
0, /* extr_ui */
6, /* htonr */
9, /* htonr_us */
6, /* htonr_ui */
0, /* htonr_ul */
5, /* ldr_c */
9, /* ldi_c */
5, /* ldr_uc */
@ -1146,7 +1152,9 @@
4, /* extr_us */
3, /* extr_i */
3, /* extr_ui */
6, /* htonr */
9, /* htonr_us */
6, /* htonr_ui */
6, /* htonr_ul */
5, /* ldr_c */
9, /* ldi_c */
5, /* ldr_uc */

View file

@ -1376,7 +1376,11 @@ _emit_code(jit_state_t *_jit)
else
movi(rn(node->u.w), node->v.w);
break;
case_rr(hton,);
case_rr(hton, _us);
case_rr(hton, _ui);
#if __X64 && !__X64_32
case_rr(hton, _ul);
#endif
case_rr(ext, _c);
case_rr(ext, _uc);
case_rr(ext, _s);

View file

@ -1237,7 +1237,8 @@ _jit_classify(jit_state_t *_jit, jit_code_t code)
case jit_code_extr_us: case jit_code_extr_i: case jit_code_extr_ui:
case jit_code_truncr_f_i: case jit_code_truncr_f_l:
case jit_code_truncr_d_i: case jit_code_truncr_d_l:
case jit_code_htonr: case jit_code_ldr_c: case jit_code_ldr_uc:
case jit_code_htonr_us: case jit_code_htonr_ui: case jit_code_htonr_ul:
case jit_code_ldr_c: case jit_code_ldr_uc:
case jit_code_ldr_s: case jit_code_ldr_us: case jit_code_ldr_i:
case jit_code_ldr_ui: case jit_code_ldr_l: case jit_code_negr_f:
case jit_code_absr_f: case jit_code_sqrtr_f: case jit_code_movr_f: