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:
parent
fdf41c1fa4
commit
88aa2fcad2
38 changed files with 630 additions and 112 deletions
22
ChangeLog
22
ChangeLog
|
@ -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>
|
2014-12-24 Paulo Andrade <pcpa@gnu.org>
|
||||||
|
|
||||||
* include/lightning/jit_private.h, include/lightning/jit_x86.h,
|
* include/lightning/jit_private.h, include/lightning/jit_x86.h,
|
||||||
|
|
|
@ -57,6 +57,7 @@ EXTRA_DIST = \
|
||||||
ldstxr-c.tst ldstxr-c.ok \
|
ldstxr-c.tst ldstxr-c.ok \
|
||||||
ldstxi-c.tst ldstxi-c.ok \
|
ldstxi-c.tst ldstxi-c.ok \
|
||||||
cvt.tst cvt.ok \
|
cvt.tst cvt.ok \
|
||||||
|
hton.tst hton.ok \
|
||||||
branch.tst branch.ok \
|
branch.tst branch.ok \
|
||||||
alu.inc \
|
alu.inc \
|
||||||
alu_add.tst alu_add.ok \
|
alu_add.tst alu_add.ok \
|
||||||
|
@ -104,7 +105,7 @@ base_TESTS = \
|
||||||
ldstr ldsti \
|
ldstr ldsti \
|
||||||
ldstxr ldstxi \
|
ldstxr ldstxi \
|
||||||
ldstr-c ldstxr-c ldstxi-c \
|
ldstr-c ldstxr-c ldstxi-c \
|
||||||
cvt branch \
|
cvt hton branch \
|
||||||
alu_add alux_add \
|
alu_add alux_add \
|
||||||
alu_sub alux_sub alu_rsb \
|
alu_sub alux_sub alu_rsb \
|
||||||
alu_mul alu_div alu_rem \
|
alu_mul alu_div alu_rem \
|
||||||
|
@ -177,7 +178,7 @@ arm_TESTS = \
|
||||||
ldstr.arm ldsti.arm \
|
ldstr.arm ldsti.arm \
|
||||||
ldstxr.arm ldstxi.arm \
|
ldstxr.arm ldstxi.arm \
|
||||||
ldstr-c.arm ldstxr-c.arm ldstxi-c.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_add.arm alux_add.arm \
|
||||||
alu_sub.arm alux_sub.arm alu_rsb.arm \
|
alu_sub.arm alux_sub.arm alu_rsb.arm \
|
||||||
alu_mul.arm alu_div.arm alu_rem.arm \
|
alu_mul.arm alu_div.arm alu_rem.arm \
|
||||||
|
@ -201,7 +202,7 @@ swf_TESTS = \
|
||||||
ldstr.swf ldsti.swf \
|
ldstr.swf ldsti.swf \
|
||||||
ldstxr.swf ldstxi.swf \
|
ldstxr.swf ldstxi.swf \
|
||||||
ldstr-c.swf ldstxr-c.swf ldstxi-c.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_add.swf alux_add.swf \
|
||||||
alu_sub.swf alux_sub.swf alu_rsb.swf \
|
alu_sub.swf alux_sub.swf alu_rsb.swf \
|
||||||
alu_mul.swf alu_div.swf alu_rem.swf \
|
alu_mul.swf alu_div.swf alu_rem.swf \
|
||||||
|
@ -223,7 +224,7 @@ arm_swf_TESTS = \
|
||||||
ldstr.arm.swf ldsti.arm.swf \
|
ldstr.arm.swf ldsti.arm.swf \
|
||||||
ldstxr.arm.swf ldstxi.arm.swf \
|
ldstxr.arm.swf ldstxi.arm.swf \
|
||||||
ldstr-c.arm.swf ldstxr-c.arm.swf ldstxi-c.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_add.arm.swf alux_add.arm.swf \
|
||||||
alu_sub.arm.swf alux_sub.arm.swf alu_rsb.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 \
|
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 \
|
ldstr.arm4.swf ldsti.arm4.swf \
|
||||||
ldstxr.arm4.swf ldstxi.arm4.swf \
|
ldstxr.arm4.swf ldstxi.arm4.swf \
|
||||||
ldstr-c.arm4.swf ldstxr-c.arm4.swf ldstxi-c.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_add.arm4.swf alux_add.arm4.swf \
|
||||||
alu_sub.arm4.swf alux_sub.arm4.swf alu_rsb.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 \
|
alu_mul.arm4.swf alu_div.arm4.swf alu_rem.arm4.swf \
|
||||||
|
|
1
check/hton.ok
Normal file
1
check/hton.ok
Normal file
|
@ -0,0 +1 @@
|
||||||
|
ok
|
169
check/hton.tst
Normal file
169
check/hton.tst
Normal 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
|
|
@ -319,6 +319,11 @@ static void extr_s(void); static void extr_us(void);
|
||||||
#if __WORDSIZE == 64
|
#if __WORDSIZE == 64
|
||||||
static void extr_i(void); static void extr_ui(void);
|
static void extr_i(void); static void extr_ui(void);
|
||||||
#endif
|
#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 htonr(void); static void ntohr(void);
|
||||||
static void ldr_c(void); static void ldi_c(void);
|
static void ldr_c(void); static void ldi_c(void);
|
||||||
static void ldr_uc(void); static void ldi_uc(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),
|
entry(extr_s), entry(extr_us),
|
||||||
#if __WORDSIZE == 64
|
#if __WORDSIZE == 64
|
||||||
entry(extr_i), entry(extr_ui),
|
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
|
#endif
|
||||||
entry(htonr), entry(ntohr),
|
entry(htonr), entry(ntohr),
|
||||||
entry(ldr_c), entry(ldi_c),
|
entry(ldr_c), entry(ldi_c),
|
||||||
|
@ -1437,6 +1447,11 @@ entry_ir_ir(extr_s) entry_ir_ir(extr_us)
|
||||||
#if __WORDSIZE == 64
|
#if __WORDSIZE == 64
|
||||||
entry_ir_ir(extr_i) entry_ir_ir(extr_ui)
|
entry_ir_ir(extr_i) entry_ir_ir(extr_ui)
|
||||||
#endif
|
#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(htonr) entry_ir_ir(ntohr)
|
||||||
entry_ir_ir(ldr_c) entry_ir_pm(ldi_c)
|
entry_ir_ir(ldr_c) entry_ir_pm(ldi_c)
|
||||||
entry_ir_ir(ldr_uc) entry_ir_pm(ldi_uc)
|
entry_ir_ir(ldr_uc) entry_ir_pm(ldi_uc)
|
||||||
|
|
|
@ -327,9 +327,22 @@ typedef enum {
|
||||||
# define jit_extr_ui(u,v) jit_new_node_ww(jit_code_extr_ui,u,v)
|
# define jit_extr_ui(u,v) jit_new_node_ww(jit_code_extr_ui,u,v)
|
||||||
#endif
|
#endif
|
||||||
jit_code_extr_i, jit_code_extr_ui,
|
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)
|
#define jit_htonr_us(u,v) jit_new_node_ww(jit_code_htonr_us,u,v)
|
||||||
jit_code_htonr,
|
#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_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)
|
#define jit_ldi_c(u,v) jit_new_node_wp(jit_code_ldi_c,u,v)
|
||||||
|
|
|
@ -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)
|
# 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);
|
static void _stxi_l(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t);
|
||||||
# if __BYTE_ORDER == __LITTLE_ENDIAN
|
# 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
|
# 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
|
# endif
|
||||||
# define extr_c(r0,r1) SXTB(r0,r1)
|
# define extr_c(r0,r1) SXTB(r0,r1)
|
||||||
# define extr_uc(r0,r1) UXTB(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
|
static void
|
||||||
_ldi_c(jit_state_t *_jit, jit_int32_t r0, jit_word_t i0)
|
_ldi_c(jit_state_t *_jit, jit_int32_t r0, jit_word_t i0)
|
||||||
{
|
{
|
||||||
|
|
|
@ -84,7 +84,9 @@
|
||||||
4, /* extr_us */
|
4, /* extr_us */
|
||||||
4, /* extr_i */
|
4, /* extr_i */
|
||||||
4, /* extr_ui */
|
4, /* extr_ui */
|
||||||
4, /* htonr */
|
8, /* htonr_us */
|
||||||
|
8, /* htonr_ui */
|
||||||
|
4, /* htonr_ul */
|
||||||
4, /* ldr_c */
|
4, /* ldr_c */
|
||||||
12, /* ldi_c */
|
12, /* ldi_c */
|
||||||
4, /* ldr_uc */
|
4, /* ldr_uc */
|
||||||
|
|
|
@ -825,7 +825,9 @@ _emit_code(jit_state_t *_jit)
|
||||||
case_wrr(stx, _i);
|
case_wrr(stx, _i);
|
||||||
case_rrr(stx, _l);
|
case_rrr(stx, _l);
|
||||||
case_wrr(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, _c);
|
||||||
case_rr(ext, _uc);
|
case_rr(ext, _uc);
|
||||||
case_rr(ext, _s);
|
case_rr(ext, _s);
|
||||||
|
|
|
@ -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)
|
# define extr_ui(r0,r1) _extr_ui(_jit,r0,r1)
|
||||||
static void _extr_ui(jit_state_t*,jit_int32_t,jit_int32_t);
|
static void _extr_ui(jit_state_t*,jit_int32_t,jit_int32_t);
|
||||||
# if __BYTE_ORDER == __LITTLE_ENDIAN
|
# if __BYTE_ORDER == __LITTLE_ENDIAN
|
||||||
# define htonr(r0,r1) _htonr(_jit,r0,r1)
|
# define htonr_us(r0,r1) _htonr_us(_jit,r0,r1)
|
||||||
static void _htonr(jit_state_t*,jit_int32_t,jit_int32_t);
|
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
|
# 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
|
# endif
|
||||||
# define jmpr(r0) JMP(_R31_REGNO,r0,0)
|
# define jmpr(r0) JMP(_R31_REGNO,r0,0)
|
||||||
# define jmpi(i0) _jmpi(_jit,i0)
|
# 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
|
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 t0;
|
||||||
jit_int32_t t1;
|
jit_int32_t t1;
|
||||||
|
|
|
@ -84,7 +84,9 @@
|
||||||
8, /* extr_us */
|
8, /* extr_us */
|
||||||
8, /* extr_i */
|
8, /* extr_i */
|
||||||
8, /* extr_ui */
|
8, /* extr_ui */
|
||||||
36, /* htonr */
|
16, /* htonr_us */
|
||||||
|
36, /* htonr_ui */
|
||||||
|
36, /* htonr_ul */
|
||||||
12, /* ldr_c */
|
12, /* ldr_c */
|
||||||
40, /* ldi_c */
|
40, /* ldi_c */
|
||||||
4, /* ldr_uc */
|
4, /* ldr_uc */
|
||||||
|
|
|
@ -850,7 +850,9 @@ _emit_code(jit_state_t *_jit)
|
||||||
case_wrr(stx, _i);
|
case_wrr(stx, _i);
|
||||||
case_rrr(stx, _l);
|
case_rrr(stx, _l);
|
||||||
case_wrr(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, _c);
|
||||||
case_rr(ext, _uc);
|
case_rr(ext, _uc);
|
||||||
case_rr(ext, _s);
|
case_rr(ext, _s);
|
||||||
|
|
|
@ -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)
|
# 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);
|
static void _stxi_i(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t);
|
||||||
# if __BYTE_ORDER == __LITTLE_ENDIAN
|
# if __BYTE_ORDER == __LITTLE_ENDIAN
|
||||||
# define htonr(r0,r1) _htonr(_jit,r0,r1)
|
# define htonr_us(r0,r1) _htonr_us(_jit,r0,r1)
|
||||||
static void _htonr(jit_state_t*,jit_int32_t,jit_int32_t);
|
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
|
# else
|
||||||
|
# define htonr_us(r0,r1) extr_us(r0,r1)
|
||||||
# define htonr(r0,r1) movr(r0,r1)
|
# define htonr(r0,r1) movr(r0,r1)
|
||||||
# endif
|
# endif
|
||||||
# define extr_c(r0,r1) _extr_c(_jit,r0,r1)
|
# 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
|
# 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) */
|
/* inline glibc htonl (without register clobber) */
|
||||||
static void
|
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;
|
jit_int32_t reg;
|
||||||
if (jit_thumb_p()) {
|
if (jit_thumb_p()) {
|
||||||
|
|
|
@ -85,7 +85,9 @@
|
||||||
4, /* extr_us */
|
4, /* extr_us */
|
||||||
0, /* extr_i */
|
0, /* extr_i */
|
||||||
0, /* extr_ui */
|
0, /* extr_ui */
|
||||||
4, /* htonr */
|
8, /* htonr_us */
|
||||||
|
4, /* htonr_ui */
|
||||||
|
0, /* htonr_ul */
|
||||||
4, /* ldr_c */
|
4, /* ldr_c */
|
||||||
12, /* ldi_c */
|
12, /* ldi_c */
|
||||||
4, /* ldr_uc */
|
4, /* ldr_uc */
|
||||||
|
@ -441,7 +443,9 @@
|
||||||
4, /* extr_us */
|
4, /* extr_us */
|
||||||
0, /* extr_i */
|
0, /* extr_i */
|
||||||
0, /* extr_ui */
|
0, /* extr_ui */
|
||||||
4, /* htonr */
|
20, /* htonr_us */
|
||||||
|
16, /* htonr_ui */
|
||||||
|
0, /* htonr_ul */
|
||||||
4, /* ldr_c */
|
4, /* ldr_c */
|
||||||
12, /* ldi_c */
|
12, /* ldi_c */
|
||||||
4, /* ldr_uc */
|
4, /* ldr_uc */
|
||||||
|
|
|
@ -1141,7 +1141,8 @@ _emit_code(jit_state_t *_jit)
|
||||||
case_wrr(stx, _s);
|
case_wrr(stx, _s);
|
||||||
case_rrr(stx, _i);
|
case_rrr(stx, _i);
|
||||||
case_wrr(stx, _i);
|
case_wrr(stx, _i);
|
||||||
case_rr(hton,);
|
case_rr(hton, _us);
|
||||||
|
case_rr(hton, _ui);
|
||||||
case_rr(ext, _c);
|
case_rr(ext, _c);
|
||||||
case_rr(ext, _uc);
|
case_rr(ext, _uc);
|
||||||
case_rr(ext, _s);
|
case_rr(ext, _s);
|
||||||
|
|
|
@ -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_s(r0,r1) EXTRWR(r1,31,16,r0)
|
||||||
#define extr_us(r0,r1) EXTRWR_U(r1,31,16,r0)
|
#define extr_us(r0,r1) EXTRWR_U(r1,31,16,r0)
|
||||||
#if __BYTE_ORDER == __BIG_ENDIAN
|
#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
|
#else
|
||||||
# error need htonr implementation
|
# error need htonr implementation
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -84,7 +84,9 @@
|
||||||
4, /* extr_us */
|
4, /* extr_us */
|
||||||
0, /* extr_i */
|
0, /* extr_i */
|
||||||
0, /* extr_ui */
|
0, /* extr_ui */
|
||||||
4, /* htonr */
|
4, /* htonr_us */
|
||||||
|
4, /* htonr_ui */
|
||||||
|
0, /* htonr_l */
|
||||||
8, /* ldr_c */
|
8, /* ldr_c */
|
||||||
12, /* ldi_c */
|
12, /* ldi_c */
|
||||||
4, /* ldr_uc */
|
4, /* ldr_uc */
|
||||||
|
|
|
@ -804,7 +804,8 @@ _emit_code(jit_state_t *_jit)
|
||||||
case_rr(ext, _uc);
|
case_rr(ext, _uc);
|
||||||
case_rr(ext, _s);
|
case_rr(ext, _s);
|
||||||
case_rr(ext, _us);
|
case_rr(ext, _us);
|
||||||
case_rr(hton,);
|
case_rr(hton, _us);
|
||||||
|
case_rr(hton, _ui);
|
||||||
case_rrr(lt,);
|
case_rrr(lt,);
|
||||||
case_rrw(lt,);
|
case_rrw(lt,);
|
||||||
case_rrr(lt, _u);
|
case_rrr(lt, _u);
|
||||||
|
|
|
@ -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)
|
#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);
|
static jit_word_t _movi_p(jit_state_t*,jit_int32_t,jit_word_t);
|
||||||
#if __BYTE_ORDER == __LITTLE_ENDIAN
|
#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
|
#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
|
#endif
|
||||||
#define extr_c(r0,r1) SXT1(r0,r1)
|
#define extr_c(r0,r1) SXT1(r0,r1)
|
||||||
#define extr_uc(r0,r1) ZXT1(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
|
static void
|
||||||
_lshi(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0)
|
_lshi(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0)
|
||||||
{
|
{
|
||||||
|
|
|
@ -84,7 +84,9 @@
|
||||||
16, /* extr_us */
|
16, /* extr_us */
|
||||||
16, /* extr_i */
|
16, /* extr_i */
|
||||||
16, /* extr_ui */
|
16, /* extr_ui */
|
||||||
0, /* htonr */
|
16, /* htonr_us */
|
||||||
|
16, /* htonr_ui */
|
||||||
|
16, /* htonr_ul */
|
||||||
16, /* ldr_c */
|
16, /* ldr_c */
|
||||||
32, /* ldi_c */
|
32, /* ldi_c */
|
||||||
0, /* ldr_uc */
|
0, /* ldr_uc */
|
||||||
|
|
|
@ -945,7 +945,9 @@ _emit_code(jit_state_t *_jit)
|
||||||
else
|
else
|
||||||
movi(rn(node->u.w), node->v.w);
|
movi(rn(node->u.w), node->v.w);
|
||||||
break;
|
break;
|
||||||
case_rr(hton,);
|
case_rr(hton, _us);
|
||||||
|
case_rr(hton, _ui);
|
||||||
|
case_rr(hton, _ul);
|
||||||
case_rr(ext, _c);
|
case_rr(ext, _c);
|
||||||
case_rr(ext, _uc);
|
case_rr(ext, _uc);
|
||||||
case_rr(ext, _s);
|
case_rr(ext, _s);
|
||||||
|
|
|
@ -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);
|
static void _stxi_l(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t);
|
||||||
# endif
|
# endif
|
||||||
# if __BYTE_ORDER == __LITTLE_ENDIAN
|
# if __BYTE_ORDER == __LITTLE_ENDIAN
|
||||||
# define htonr(r0,r1) _htonr(_jit,r0,r1)
|
# define htonr_us(r0,r1) _htonr_us(_jit,r0,r1)
|
||||||
static void _htonr(jit_state_t*,jit_int32_t,jit_int32_t);
|
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
|
# 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
|
# endif
|
||||||
# define extr_c(r0,r1) _extr_c(_jit,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);
|
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);
|
static void _extr_s(jit_state_t*,jit_int32_t,jit_int32_t);
|
||||||
# define extr_us(r0,r1) ANDI(r0,r1,0xffff)
|
# define extr_us(r0,r1) ANDI(r0,r1,0xffff)
|
||||||
# if __WORDSIZE == 64
|
# if __WORDSIZE == 64
|
||||||
# define extr_i(r0,r1) SLL(r0,r1,0)
|
# define extr_i(r0,r1) SLL(r0,r1,0)
|
||||||
# define extr_ui(r0,r1) _extr_ui(_jit,r0,r1)
|
# define extr_ui(r0,r1) _extr_ui(_jit,r0,r1)
|
||||||
static void _extr_ui(jit_state_t*,jit_int32_t,jit_int32_t);
|
static void _extr_ui(jit_state_t*,jit_int32_t,jit_int32_t);
|
||||||
# endif
|
# endif
|
||||||
# define ltr(r0,r1,r2) SLT(r0,r1,r2)
|
# 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
|
#endif
|
||||||
|
|
||||||
# if __BYTE_ORDER == __LITTLE_ENDIAN
|
# 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
|
static void
|
||||||
_htonr(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1)
|
_htonr(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1)
|
||||||
{
|
{
|
||||||
jit_int32_t rg0;
|
jit_int32_t reg;
|
||||||
jit_int32_t rg1;
|
reg = jit_get_reg(jit_class_gpr);
|
||||||
if (jit_mips2_p()) {
|
rshi_u(rn(reg), r1, 32);
|
||||||
WSBH(r0, r1);
|
htonr_ui(r0, r1);
|
||||||
ROTR(r0, r0, 16);
|
htonr_ui(rn(reg), rn(reg));
|
||||||
}
|
lshi(r0, r0, 32);
|
||||||
else {
|
orr(r0, r0, rn(reg));
|
||||||
/* FIXME rewrite in a more sane way, but unlikely to be used
|
jit_unget_reg(reg);
|
||||||
* 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);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
# endif
|
# endif
|
||||||
|
|
||||||
|
|
|
@ -85,7 +85,9 @@
|
||||||
4, /* extr_us */
|
4, /* extr_us */
|
||||||
0, /* extr_i */
|
0, /* extr_i */
|
||||||
0, /* extr_ui */
|
0, /* extr_ui */
|
||||||
4, /* htonr */
|
4, /* htonr_us */
|
||||||
|
4, /* htonr_ui */
|
||||||
|
0, /* htonr_ul */
|
||||||
4, /* ldr_c */
|
4, /* ldr_c */
|
||||||
12, /* ldi_c */
|
12, /* ldi_c */
|
||||||
4, /* ldr_uc */
|
4, /* ldr_uc */
|
||||||
|
@ -441,7 +443,9 @@
|
||||||
4, /* extr_us */
|
4, /* extr_us */
|
||||||
0, /* extr_i */
|
0, /* extr_i */
|
||||||
0, /* extr_ui */
|
0, /* extr_ui */
|
||||||
56, /* htonr */
|
20, /* htonr_us */
|
||||||
|
52, /* htonr_ui */
|
||||||
|
0, /* htonr_ul */
|
||||||
4, /* ldr_c */
|
4, /* ldr_c */
|
||||||
12, /* ldi_c */
|
12, /* ldi_c */
|
||||||
4, /* ldr_uc */
|
4, /* ldr_uc */
|
||||||
|
@ -796,7 +800,9 @@
|
||||||
4, /* extr_us */
|
4, /* extr_us */
|
||||||
4, /* extr_i */
|
4, /* extr_i */
|
||||||
8, /* extr_ui */
|
8, /* extr_ui */
|
||||||
4, /* htonr */
|
4, /* htonr_us */
|
||||||
|
4, /* htonr_ui */
|
||||||
|
4, /* htonr_ul */
|
||||||
4, /* ldr_c */
|
4, /* ldr_c */
|
||||||
12, /* ldi_c */
|
12, /* ldi_c */
|
||||||
4, /* ldr_uc */
|
4, /* ldr_uc */
|
||||||
|
|
|
@ -1094,7 +1094,11 @@ _emit_code(jit_state_t *_jit)
|
||||||
case_rrr(stx, _l);
|
case_rrr(stx, _l);
|
||||||
case_wrr(stx, _l);
|
case_wrr(stx, _l);
|
||||||
#endif
|
#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, _c);
|
||||||
case_rr(ext, _uc);
|
case_rr(ext, _uc);
|
||||||
case_rr(ext, _s);
|
case_rr(ext, _s);
|
||||||
|
|
|
@ -62,7 +62,8 @@ static char *code_name[] = {
|
||||||
"extr_c", "extr_uc",
|
"extr_c", "extr_uc",
|
||||||
"extr_s", "extr_us",
|
"extr_s", "extr_us",
|
||||||
"extr_i", "extr_ui",
|
"extr_i", "extr_ui",
|
||||||
"htonr",
|
"htonr_us",
|
||||||
|
"htonr_ui", "htonr_ul",
|
||||||
"ldr_c", "ldi_c",
|
"ldr_c", "ldi_c",
|
||||||
"ldr_uc", "ldi_uc",
|
"ldr_uc", "ldi_uc",
|
||||||
"ldr_s", "ldi_s",
|
"ldr_s", "ldi_s",
|
||||||
|
|
|
@ -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)
|
# define extr_ui(r0,r1) CLRLDI(r0,r1,32)
|
||||||
# endif
|
# endif
|
||||||
# if __BYTE_ORDER == __BIG_ENDIAN
|
# 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
|
# else
|
||||||
# define htonr(r0,r1) _htonr(_jit,r0,r1)
|
# define htonr_us(r0,r1) _htonr_us(_jit,r0,r1)
|
||||||
static void _htonr(jit_state_t*,jit_int32_t,jit_int32_t);
|
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
|
# endif
|
||||||
# define addr(r0,r1,r2) ADD(r0,r1,r2)
|
# define addr(r0,r1,r2) ADD(r0,r1,r2)
|
||||||
# define addi(r0,r1,i0) _addi(_jit,r0,r1,i0)
|
# 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
|
# if __BYTE_ORDER == __LITTLE_ENDIAN
|
||||||
static void
|
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;
|
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);
|
reg = jit_get_reg(jit_class_gpr);
|
||||||
ROTLWI(rn(reg), r1, 8);
|
ROTLWI(rn(reg), r1, 8);
|
||||||
RLWIMI(rn(reg), r1, 24, 0, 7);
|
RLWIMI(rn(reg), r1, 24, 0, 7);
|
||||||
RLWIMI(rn(reg), r1, 24, 16, 23);
|
RLWIMI(rn(reg), r1, 24, 16, 23);
|
||||||
# if __WORDSIZE == 32
|
|
||||||
CLRLDI(r0, rn(reg), 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);
|
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
|
# endif
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
|
|
@ -85,7 +85,9 @@
|
||||||
4, /* extr_us */
|
4, /* extr_us */
|
||||||
0, /* extr_i */
|
0, /* extr_i */
|
||||||
0, /* extr_ui */
|
0, /* extr_ui */
|
||||||
4, /* htonr */
|
4, /* htonr_us */
|
||||||
|
4, /* htonr_ui */
|
||||||
|
0, /* htonr_ul */
|
||||||
8, /* ldr_c */
|
8, /* ldr_c */
|
||||||
12, /* ldi_c */
|
12, /* ldi_c */
|
||||||
4, /* ldr_uc */
|
4, /* ldr_uc */
|
||||||
|
@ -441,7 +443,9 @@
|
||||||
4, /* extr_us */
|
4, /* extr_us */
|
||||||
0, /* extr_i */
|
0, /* extr_i */
|
||||||
0, /* extr_ui */
|
0, /* extr_ui */
|
||||||
4, /* htonr */
|
4, /* htonr_us */
|
||||||
|
4, /* htonr_ui */
|
||||||
|
0, /* htonr_ul */
|
||||||
8, /* ldr_c */
|
8, /* ldr_c */
|
||||||
12, /* ldi_c */
|
12, /* ldi_c */
|
||||||
4, /* ldr_uc */
|
4, /* ldr_uc */
|
||||||
|
@ -797,7 +801,15 @@
|
||||||
4, /* extr_us */
|
4, /* extr_us */
|
||||||
4, /* extr_i */
|
4, /* extr_i */
|
||||||
4, /* extr_ui */
|
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 */
|
8, /* ldr_c */
|
||||||
28, /* ldi_c */
|
28, /* ldi_c */
|
||||||
4, /* ldr_uc */
|
4, /* ldr_uc */
|
||||||
|
|
|
@ -949,7 +949,11 @@ _emit_code(jit_state_t *_jit)
|
||||||
case_rr(ext, _i);
|
case_rr(ext, _i);
|
||||||
case_rr(ext, _ui);
|
case_rr(ext, _ui);
|
||||||
# endif
|
# 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(neg,);
|
||||||
case_rr(com,);
|
case_rr(com,);
|
||||||
case_rr(mov,);
|
case_rr(mov,);
|
||||||
|
|
|
@ -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);
|
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)
|
# 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);
|
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_c(r0,r1) LGBR(r0,r1)
|
||||||
# define extr_uc(r0,r1) LLGCR(r0,r1)
|
# define extr_uc(r0,r1) LLGCR(r0,r1)
|
||||||
# define extr_s(r0,r1) LGHR(r0,r1)
|
# define extr_s(r0,r1) LGHR(r0,r1)
|
||||||
|
|
|
@ -84,7 +84,9 @@
|
||||||
4, /* extr_us */
|
4, /* extr_us */
|
||||||
4, /* extr_i */
|
4, /* extr_i */
|
||||||
4, /* extr_ui */
|
4, /* extr_ui */
|
||||||
4, /* htonr */
|
4, /* htonr_us */
|
||||||
|
4, /* htonr_ui */
|
||||||
|
4, /* htonr_ul */
|
||||||
6, /* ldr_c */
|
6, /* ldr_c */
|
||||||
18, /* ldi_c */
|
18, /* ldi_c */
|
||||||
6, /* ldr_uc */
|
6, /* ldr_uc */
|
||||||
|
|
|
@ -808,7 +808,9 @@ _emit_code(jit_state_t *_jit)
|
||||||
case_wrr(stx, _i);
|
case_wrr(stx, _i);
|
||||||
case_rrr(stx, _l);
|
case_rrr(stx, _l);
|
||||||
case_wrr(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, _c);
|
||||||
case_rr(ext, _uc);
|
case_rr(ext, _uc);
|
||||||
case_rr(ext, _s);
|
case_rr(ext, _s);
|
||||||
|
|
|
@ -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 rshi(r0, r1, i0) SRAI(r1, i0, r0)
|
||||||
# define rshr_u(r0, r1, r2) SRL(r1, r2, r0)
|
# define rshr_u(r0, r1, r2) SRL(r1, r2, r0)
|
||||||
# define rshi_u(r0, r1, i0) SRLI(r1, i0, 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)
|
# define extr_c(r0,r1) _extr_c(_jit,r0,r1)
|
||||||
static void _extr_c(jit_state_t*,jit_int32_t,jit_int32_t);
|
static void _extr_c(jit_state_t*,jit_int32_t,jit_int32_t);
|
||||||
# define extr_uc(r0,r1) andi(r0, r1, 0xff)
|
# define extr_uc(r0,r1) andi(r0, r1, 0xff)
|
||||||
|
|
|
@ -84,7 +84,9 @@
|
||||||
8, /* extr_us */
|
8, /* extr_us */
|
||||||
0, /* extr_i */
|
0, /* extr_i */
|
||||||
0, /* extr_ui */
|
0, /* extr_ui */
|
||||||
4, /* htonr */
|
4, /* htonr_us */
|
||||||
|
4, /* htonr_ui */
|
||||||
|
0, /* htonr_ul */
|
||||||
4, /* ldr_c */
|
4, /* ldr_c */
|
||||||
12, /* ldi_c */
|
12, /* ldi_c */
|
||||||
4, /* ldr_uc */
|
4, /* ldr_uc */
|
||||||
|
|
|
@ -830,7 +830,8 @@ _emit_code(jit_state_t *_jit)
|
||||||
case_wrr(stx, _s);
|
case_wrr(stx, _s);
|
||||||
case_rrr(stx, _i);
|
case_rrr(stx, _i);
|
||||||
case_wrr(stx, _i);
|
case_wrr(stx, _i);
|
||||||
case_rr(hton,);
|
case_rr(hton, _us);
|
||||||
|
case_rr(hton, _ui);
|
||||||
case_rr(ext, _c);
|
case_rr(ext, _c);
|
||||||
case_rr(ext, _uc);
|
case_rr(ext, _uc);
|
||||||
case_rr(ext, _s);
|
case_rr(ext, _s);
|
||||||
|
|
|
@ -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)
|
# define movir_u(r0, r1) _movir_u(_jit, r0, r1)
|
||||||
static void _movir_u(jit_state_t*,jit_int32_t,jit_int32_t);
|
static void _movir_u(jit_state_t*,jit_int32_t,jit_int32_t);
|
||||||
# endif
|
# endif
|
||||||
#define htonr(r0, r1) _htonr(_jit, r0, r1)
|
# define htonr_us(r0, r1) _htonr_us(_jit, r0, r1)
|
||||||
static void _htonr(jit_state_t*,jit_int32_t,jit_int32_t);
|
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)
|
# define extr_c(r0, r1) _extr_c(_jit, r0, r1)
|
||||||
static void _extr_c(jit_state_t*,jit_int32_t,jit_int32_t);
|
static void _extr_c(jit_state_t*,jit_int32_t,jit_int32_t);
|
||||||
# define extr_uc(r0, r1) _extr_uc(_jit, r0, r1)
|
# 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);
|
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)
|
# 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);
|
static void _ldxi_us(jit_state_t*, jit_int32_t, jit_int32_t, jit_word_t);
|
||||||
|
|
||||||
# if __X32 || !__X64_32
|
# if __X32 || !__X64_32
|
||||||
# define ldxr_i(r0, r1, r2) _ldxr_i(_jit, r0, r1, r2)
|
# 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);
|
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
|
#endif
|
||||||
|
|
||||||
static void
|
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);
|
movr(r0, r1);
|
||||||
rex(0, WIDE, _NOREG, _NOREG, r0);
|
rex(0, 0, _NOREG, _NOREG, r0);
|
||||||
ic(0x0f);
|
ic(0x0f);
|
||||||
ic(0xc8 | r7(r0));
|
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
|
static void
|
||||||
_extr_c(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1)
|
_extr_c(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1)
|
||||||
{
|
{
|
||||||
|
|
|
@ -84,7 +84,9 @@
|
||||||
3, /* extr_us */
|
3, /* extr_us */
|
||||||
0, /* extr_i */
|
0, /* extr_i */
|
||||||
0, /* extr_ui */
|
0, /* extr_ui */
|
||||||
4, /* htonr */
|
4, /* htonr_us */
|
||||||
|
4, /* htonr_ui */
|
||||||
|
0, /* htonr_ul */
|
||||||
3, /* ldr_c */
|
3, /* ldr_c */
|
||||||
7, /* ldi_c */
|
7, /* ldi_c */
|
||||||
3, /* ldr_uc */
|
3, /* ldr_uc */
|
||||||
|
@ -439,7 +441,9 @@
|
||||||
4, /* extr_us */
|
4, /* extr_us */
|
||||||
3, /* extr_i */
|
3, /* extr_i */
|
||||||
3, /* extr_ui */
|
3, /* extr_ui */
|
||||||
6, /* htonr */
|
9, /* htonr_us */
|
||||||
|
6, /* htonr_ui */
|
||||||
|
6, /* htonr_ul */
|
||||||
4, /* ldr_c */
|
4, /* ldr_c */
|
||||||
15, /* ldi_c */
|
15, /* ldi_c */
|
||||||
4, /* ldr_uc */
|
4, /* ldr_uc */
|
||||||
|
@ -793,7 +797,9 @@
|
||||||
4, /* extr_us */
|
4, /* extr_us */
|
||||||
0, /* extr_i */
|
0, /* extr_i */
|
||||||
0, /* extr_ui */
|
0, /* extr_ui */
|
||||||
6, /* htonr */
|
9, /* htonr_us */
|
||||||
|
6, /* htonr_ui */
|
||||||
|
0, /* htonr_ul */
|
||||||
5, /* ldr_c */
|
5, /* ldr_c */
|
||||||
9, /* ldi_c */
|
9, /* ldi_c */
|
||||||
5, /* ldr_uc */
|
5, /* ldr_uc */
|
||||||
|
@ -1146,7 +1152,9 @@
|
||||||
4, /* extr_us */
|
4, /* extr_us */
|
||||||
3, /* extr_i */
|
3, /* extr_i */
|
||||||
3, /* extr_ui */
|
3, /* extr_ui */
|
||||||
6, /* htonr */
|
9, /* htonr_us */
|
||||||
|
6, /* htonr_ui */
|
||||||
|
6, /* htonr_ul */
|
||||||
5, /* ldr_c */
|
5, /* ldr_c */
|
||||||
9, /* ldi_c */
|
9, /* ldi_c */
|
||||||
5, /* ldr_uc */
|
5, /* ldr_uc */
|
||||||
|
|
|
@ -1376,7 +1376,11 @@ _emit_code(jit_state_t *_jit)
|
||||||
else
|
else
|
||||||
movi(rn(node->u.w), node->v.w);
|
movi(rn(node->u.w), node->v.w);
|
||||||
break;
|
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, _c);
|
||||||
case_rr(ext, _uc);
|
case_rr(ext, _uc);
|
||||||
case_rr(ext, _s);
|
case_rr(ext, _s);
|
||||||
|
|
|
@ -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_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_f_i: case jit_code_truncr_f_l:
|
||||||
case jit_code_truncr_d_i: case jit_code_truncr_d_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_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_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:
|
case jit_code_absr_f: case jit_code_sqrtr_f: case jit_code_movr_f:
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue