-rw-r--r-- | lib/jit_aarch64-cpu.c | 1 | ||||
-rw-r--r-- | lib/jit_aarch64-fpu.c | 319 | ||||
-rw-r--r-- | lib/jit_aarch64-sz.c | 186 |
diff --git a/lib/jit_aarch64-cpu.c b/lib/jit_aarch64-cpu.c index 267c34e..6a5805f 100644 --- a/lib/jit_aarch64-cpu.c +++ b/lib/jit_aarch64-cpu.c @@ -211,6 +211,7 @@ typedef union { # undef ui } instr_t; # define s9_p(d) ((d) >= -256 && (d) <= 255) +# define u12_p(d) ((d) >= 0 && (d) <= 4095) # define s26_p(d) ((d) >= -33554432 && (d) <= 33554431) # define ii(i) *_jit->pc.ui++ = i # define ldr(r0,r1) ldr_l(r0,r1) diff --git a/lib/jit_aarch64-fpu.c b/lib/jit_aarch64-fpu.c index 93481de..9e8c9ca 100644 --- a/lib/jit_aarch64-fpu.c +++ b/lib/jit_aarch64-fpu.c @@ -41,6 +41,61 @@ # define A64_FDIV 0x1e201800 # define A64_FADD 0x1e202800 # define A64_FSUB 0x1e203800 +# define A64_FLDSTR 0x3c206800 +# define A64_FLDSTU 0x3d000000 +# define A64_FLDST 0x3c000000 +# define A64_FLDST_A 0x3c000400 +# define A64_FLDST_B 0x3c000c00 +# define FLDRB(Rt,Rn,Rm) vldstr(0,A64_FLDSTR,1,Rm,Rn,Rt) +# define FLDRH(Rt,Rn,Rm) vldstr(1,A64_FLDSTR,1,Rm,Rn,Rt) +# define FLDRS(Rt,Rn,Rm) vldstr(2,A64_FLDSTR,1,Rm,Rn,Rt) +# define FLDRD(Rt,Rn,Rm) vldstr(3,A64_FLDSTR,1,Rm,Rn,Rt) +# define FLDRQ(Rt,Rn,Rm) vldstr(0,A64_FLDSTR,3,Rm,Rn,Rt) +# define FSTRB(Rt,Rn,Rm) vldstr(0,A64_FLDSTR,0,Rm,Rn,Rt) +# define FSTRH(Rt,Rn,Rm) vldstr(1,A64_FLDSTR,0,Rm,Rn,Rt) +# define FSTRS(Rt,Rn,Rm) vldstr(2,A64_FLDSTR,0,Rm,Rn,Rt) +# define FSTRD(Rt,Rn,Rm) vldstr(3,A64_FLDSTR,0,Rm,Rn,Rt) +# define FSTRQ(Rt,Rn,Rm) vldstr(0,A64_FLDSTR,2,Rm,Rn,Rt) +# define FLDRBI(Rt,Rn,Imm9) vldst(0,A64_FLDST,1,Imm9,Rn,Rt) +# define FLDRHI(Rt,Rn,Imm9) vldst(1,A64_FLDST,1,Imm9,Rn,Rt) +# define FLDRSI(Rt,Rn,Imm9) vldst(2,A64_FLDST,1,Imm9,Rn,Rt) +# define FLDRDI(Rt,Rn,Imm9) vldst(3,A64_FLDST,1,Imm9,Rn,Rt) +# define FLDRQI(Rt,Rn,Imm9) vldst(0,A64_FLDST,3,Imm9,Rn,Rt) +# define FLDRB_B(Rt,Rn,Imm9) vldst(0,A64_FLDST_B,1,Imm9,Rn,Rt) +# define FLDRH_B(Rt,Rn,Imm9) vldst(1,A64_FLDST_B,1,Imm9,Rn,Rt) +# define FLDRS_B(Rt,Rn,Imm9) vldst(2,A64_FLDST_B,1,Imm9,Rn,Rt) +# define FLDRD_B(Rt,Rn,Imm9) vldst(3,A64_FLDST_B,1,Imm9,Rn,Rt) +# define FLDRQ_B(Rt,Rn,Imm9) vldst(0,A64_FLDST_B,3,Imm9,Rn,Rt) +# define FLDRB_A(Rt,Rn,Imm9) vldst(0,A64_FLDST_A,1,Imm9,Rn,Rt) +# define FLDRH_A(Rt,Rn,Imm9) vldst(1,A64_FLDST_A,1,Imm9,Rn,Rt) +# define FLDRS_A(Rt,Rn,Imm9) vldst(2,A64_FLDST_A,1,Imm9,Rn,Rt) +# define FLDRD_A(Rt,Rn,Imm9) vldst(3,A64_FLDST_A,1,Imm9,Rn,Rt) +# define FLDRQ_A(Rt,Rn,Imm9) vldst(0,A64_FLDST_A,3,Imm9,Rn,Rt) +# define FSTRBI(Rt,Rn,Imm9) vldst(0,A64_FLDST,0,Imm9,Rn,Rt) +# define FSTRHI(Rt,Rn,Imm9) vldst(1,A64_FLDST,0,Imm9,Rn,Rt) +# define FSTRSI(Rt,Rn,Imm9) vldst(2,A64_FLDST,0,Imm9,Rn,Rt) +# define FSTRDI(Rt,Rn,Imm9) vldst(3,A64_FLDST,0,Imm9,Rn,Rt) +# define FSTRQI(Rt,Rn,Imm9) vldst(0,A64_FLDST,2,Imm9,Rn,Rt) +# define FSTRB_B(Rt,Rn,Imm9) vldst(0,A64_FLDST_B,0,Imm9,Rn,Rt) +# define FSTRH_B(Rt,Rn,Imm9) vldst(1,A64_FLDST_B,0,Imm9,Rn,Rt) +# define FSTRS_B(Rt,Rn,Imm9) vldst(2,A64_FLDST_B,0,Imm9,Rn,Rt) +# define FSTRD_B(Rt,Rn,Imm9) vldst(3,A64_FLDST_B,0,Imm9,Rn,Rt) +# define FSTRQ_B(Rt,Rn,Imm9) vldst(0,A64_FLDST_B,2,Imm9,Rn,Rt) +# define FSTRB_A(Rt,Rn,Imm9) vldst(0,A64_FLDST_A,0,Imm9,Rn,Rt) +# define FSTRH_A(Rt,Rn,Imm9) vldst(1,A64_FLDST_A,0,Imm9,Rn,Rt) +# define FSTRS_A(Rt,Rn,Imm9) vldst(2,A64_FLDST_A,0,Imm9,Rn,Rt) +# define FSTRD_A(Rt,Rn,Imm9) vldst(3,A64_FLDST_A,0,Imm9,Rn,Rt) +# define FSTRQ_A(Rt,Rn,Imm9) vldst(0,A64_FLDST_A,2,Imm9,Rn,Rt) +# define FLDRBU(Rt,Rn,Imm12) vldstu(0,A64_FLDSTU,1,Imm12,Rn,Rt) +# define FLDRHU(Rt,Rn,Imm12) vldstu(1,A64_FLDSTU,1,Imm12,Rn,Rt) +# define FLDRSU(Rt,Rn,Imm12) vldstu(2,A64_FLDSTU,1,Imm12,Rn,Rt) +# define FLDRDU(Rt,Rn,Imm12) vldstu(3,A64_FLDSTU,1,Imm12,Rn,Rt) +# define FLDRQU(Rt,Rn,Imm12) vldstu(0,A64_FLDSTU,3,Imm12,Rn,Rt) +# define FSTRBU(Rt,Rn,Imm12) vldstu(0,A64_FLDSTU,0,Imm12,Rn,Rt) +# define FSTRHU(Rt,Rn,Imm12) vldstu(1,A64_FLDSTU,0,Imm12,Rn,Rt) +# define FSTRSU(Rt,Rn,Imm12) vldstu(2,A64_FLDSTU,0,Imm12,Rn,Rt) +# define FSTRDU(Rt,Rn,Imm12) vldstu(3,A64_FLDSTU,0,Imm12,Rn,Rt) +# define FSTRQU(Rt,Rn,Imm12) vldstu(0,A64_FLDSTU,2,Imm12,Rn,Rt) # define CNT(Rd,Rn) vqo_vv(0,A64_CNT,Rn,Rd) # define ADDV(Rd,Rn) vqo_vv(0,A64_ADDV,Rn,Rd) # define FCMPES(Rn,Rm) os_vv(A64_FCMPE,0,Rn,Rm) @@ -101,6 +156,15 @@ static void _os_vv(jit_state_t*,jit_int32_t, # define vqo_vv(Q,Op,Rn,Rd) _vqo_vv(_jit,Q,Op,Rn,Rd) static void _vqo_vv(jit_state_t*,jit_int32_t, jit_int32_t,jit_int32_t,jit_int32_t); +# define vldstr(size,Op,opc,Rm,Rn,Rt) _vldstr(_jit,size,Op,opc,Rm,Rn,Rt) +static void _vldstr(jit_state_t*,jit_int32_t,jit_int32_t, + jit_int32_t,jit_int32_t,jit_int32_t,jit_int32_t); +# define vldst(size,Op,opc,Imm9,Rn,Rt) _vldst(_jit,size,Op,opc,Imm9,Rn,Rt) +static void _vldst(jit_state_t*,jit_int32_t,jit_int32_t, + jit_int32_t,jit_int32_t,jit_int32_t,jit_int32_t); +# define vldstu(size,Op,opc,Imm12,Rn,Rt) _vldstu(_jit,size,Op,opc,Imm12,Rn,Rt) +static void _vldstu(jit_state_t*,jit_int32_t,jit_int32_t, + jit_int32_t,jit_int32_t,jit_int32_t,jit_int32_t); # define popcntr(r0,r1) _popcntr(_jit,r0,r1); static void _popcntr(jit_state_t*,jit_int32_t,jit_int32_t); # define truncr_f_i(r0,r1) _truncr_f_i(_jit,r0,r1) @@ -474,6 +538,69 @@ _vqo_vv(jit_state_t *_jit, jit_int32_t Q, ii(i.w); } +static void +_vldstr(jit_state_t *_jit, jit_int32_t ldst_size, + jit_int32_t Op, jit_int32_t opc, jit_int32_t Rm, + jit_int32_t Rn, jit_int32_t Rt) +{ + instr_t i; + assert(!(Rm & ~0x1f)); + assert(!(Rn & ~0x1f)); + assert(!(Rt & ~0x1f)); + assert(!(opc & ~0x3)); + assert(!(ldst_size & ~0x3)); + assert(!(Op & ~0x3f20fc00)); + i.w = Op; + i.ldst_size.b = ldst_size; + i.opc.b = opc; + i.Rm.b = Rm; + i.Rn.b = Rn; + i.Rt.b = Rt; + ii(i.w); +} + +static void +_vldst(jit_state_t *_jit, jit_int32_t ldst_size, + jit_int32_t Op, jit_int32_t opc, jit_int32_t Imm9, + jit_int32_t Rn, jit_int32_t Rt) +{ + instr_t i; + assert(!(Rn & ~0x1f)); + assert(!(Rt & ~0x1f)); + assert(!(opc & ~0x3)); + assert(s9_p(Imm9)); + assert(!(ldst_size & ~0x3)); + assert(!(Op & ~0x3f200c00)); + i.w = Op; + i.ldst_size.b = ldst_size; + i.opc.b = opc; + i.imm9.b = Imm9; + i.Rn.b = Rn; + i.Rt.b = Rt; + ii(i.w); +} + +static void +_vldstu(jit_state_t *_jit, jit_int32_t ldst_size, + jit_int32_t Op, jit_int32_t opc, jit_int32_t Imm12, + jit_int32_t Rn, jit_int32_t Rt) +{ + instr_t i; + assert(!(Rn & ~0x1f)); + assert(!(Rt & ~0x1f)); + assert(!(opc & ~0x3)); + assert(u12_p(Imm12)); + assert(!(ldst_size & ~0x3)); + assert(!(Op & ~0x3f000000)); + i.w = Op; + i.ldst_size.b = ldst_size; + i.opc.b = opc; + i.imm12.b = Imm12; + i.Rn.b = Rn; + i.Rt.b = Rt; + ii(i.w); +} + #define fopi(name) \ static void \ _##name##i_f(jit_state_t *_jit, \ @@ -556,11 +683,15 @@ fopi(div) static void _ldr_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1) { +#if 1 + FLDRSU(r0, r1, 0); +#else jit_int32_t reg; reg = jit_get_reg(jit_class_gpr); ldr_i(rn(reg), r1); FMOVSW(r0, rn(reg)); jit_unget_reg(reg); +#endif } static void @@ -568,59 +699,107 @@ _ldi_f(jit_state_t *_jit, jit_int32_t r0, jit_word_t i0) { jit_int32_t reg; reg = jit_get_reg(jit_class_gpr); +#if 1 + movi(rn(reg), i0); + ldr_f(r0, rn(reg)); +#else ldi_i(rn(reg), i0); FMOVSW(r0, rn(reg)); +#endif jit_unget_reg(reg); } static void _ldxr_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) { +#if 1 + FLDRS(r0, r1, r2); +#else jit_int32_t reg; reg = jit_get_reg(jit_class_gpr); ldxr_i(rn(reg), r1, r2); FMOVSW(r0, rn(reg)); jit_unget_reg(reg); +#endif } static void _ldxi_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) { jit_int32_t reg; +#if 1 + if (s9_p(i0)) + FLDRSI(r0, r1, i0); + else if (u12_p(i0)) + FLDRSU(r0, r1, i0); + else { + reg = jit_get_reg(jit_class_gpr); + movi(rn(reg), i0); + ldxr_f(r0, r1, rn(reg)); + jit_unget_reg(reg); + } +#else reg = jit_get_reg(jit_class_gpr); ldxi_i(rn(reg), r1, i0); FMOVSW(r0, rn(reg)); jit_unget_reg(reg); +#endif } static void _ldxbi_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) { jit_int32_t reg; +#if 1 + if (s9_p(i0)) + FLDRS_B(r0, r1, i0); + else { + reg = jit_get_reg(jit_class_gpr); + movi(rn(reg), i0); + ldxbr_f(r0, r1, rn(reg)); + jit_unget_reg(reg); + } +#else reg = jit_get_reg(jit_class_gpr); ldxbi_i(rn(reg), r1, i0); FMOVSW(r0, rn(reg)); jit_unget_reg(reg); +#endif } static void _ldxai_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) { jit_int32_t reg; +#if 1 + if (s9_p(i0)) + FLDRS_A(r0, r1, i0); + else { + reg = jit_get_reg(jit_class_gpr); + movi(rn(reg), i0); + ldxar_f(r0, r1, rn(reg)); + jit_unget_reg(reg); + } +#else reg = jit_get_reg(jit_class_gpr); ldxai_i(rn(reg), r1, i0); FMOVSW(r0, rn(reg)); jit_unget_reg(reg); +#endif } static void _str_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1) { +#if 1 + FSTRSU(r1, r0, 0); +#else jit_int32_t reg; reg = jit_get_reg(jit_class_gpr); FMOVWS(rn(reg), r1); str_i(r0, rn(reg)); jit_unget_reg(reg); +#endif } static void @@ -628,49 +807,93 @@ _sti_f(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0) { jit_int32_t reg; reg = jit_get_reg(jit_class_gpr); +#if 1 + movi(rn(reg), i0); + str_f(rn(reg), r0); +#else FMOVWS(rn(reg), r0); sti_i(i0, rn(reg)); +#endif jit_unget_reg(reg); } static void _stxr_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) { +#if 1 + FSTRS(r2, r1, r0); +#else jit_int32_t reg; reg = jit_get_reg(jit_class_gpr); FMOVWS(rn(reg), r2); stxr_i(r0, r1, rn(reg)); jit_unget_reg(reg); +#endif } static void _stxi_f(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) { jit_int32_t reg; +#if 1 + if (s9_p(i0)) + FSTRSI(r1, r0, i0); + else if (u12_p(i0)) + FSTRSU(r1, r0, i0); + else { + reg = jit_get_reg(jit_class_gpr); + movi(rn(reg), i0); + stxr_f(rn(reg), r0, r1); + jit_unget_reg(reg); + } +#else reg = jit_get_reg(jit_class_gpr); FMOVWS(rn(reg), r1); stxi_i(i0, r0, rn(reg)); jit_unget_reg(reg); +#endif } static void _stxbi_f(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) { jit_int32_t reg; +#if 1 + if (s9_p(i0)) + FSTRS_B(r1, r0, i0); + else { + reg = jit_get_reg(jit_class_gpr); + movi(rn(reg), i0); + stxbr_f(rn(reg), r0, r1); + jit_unget_reg(reg); + } +#else reg = jit_get_reg(jit_class_gpr); FMOVWS(rn(reg), r1); stxbi_i(i0, r0, rn(reg)); jit_unget_reg(reg); +#endif } static void _stxai_f(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) { jit_int32_t reg; +#if 1 + if (s9_p(i0)) + FSTRS_A(r1, r0, i0); + else { + reg = jit_get_reg(jit_class_gpr); + movi(rn(reg), i0); + stxar_f(rn(reg), r0, r1); + jit_unget_reg(reg); + } +#else reg = jit_get_reg(jit_class_gpr); FMOVWS(rn(reg), r1); stxai_i(i0, r0, rn(reg)); jit_unget_reg(reg); +#endif } static void @@ -823,11 +1046,15 @@ dopi(div) static void _ldr_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1) { +#if 1 + FLDRDU(r0, r1, 0); +#else jit_int32_t reg; reg = jit_get_reg(jit_class_gpr); ldr_l(rn(reg), r1); FMOVDX(r0, rn(reg)); jit_unget_reg(reg); +#endif } static void @@ -835,59 +1062,107 @@ _ldi_d(jit_state_t *_jit, jit_int32_t r0, jit_word_t i0) { jit_int32_t reg; reg = jit_get_reg(jit_class_gpr); +#if 1 + movi(rn(reg), i0); + ldr_d(r0, rn(reg)); +#else ldi_l(rn(reg), i0); FMOVDX(r0, rn(reg)); +#endif jit_unget_reg(reg); } static void _ldxr_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) { +#if 1 + FLDRD(r0, r1, r2); +#else jit_int32_t reg; reg = jit_get_reg(jit_class_gpr); ldxr_l(rn(reg), r1, r2); FMOVDX(r0, rn(reg)); jit_unget_reg(reg); +#endif } static void _ldxi_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) { jit_int32_t reg; +#if 1 + if (s9_p(i0)) + FLDRDI(r0, r1, i0); + else if (u12_p(i0)) + FLDRDU(r0, r1, i0); + else { + reg = jit_get_reg(jit_class_gpr); + movi(rn(reg), i0); + ldxr_d(r0, r1, rn(reg)); + jit_unget_reg(reg); + } +#else reg = jit_get_reg(jit_class_gpr); ldxi_l(rn(reg), r1, i0); FMOVDX(r0, rn(reg)); jit_unget_reg(reg); +#endif } static void _ldxbi_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) { jit_int32_t reg; +#if 1 + if (s9_p(i0)) + FLDRD_B(r0, r1, i0); + else { + reg = jit_get_reg(jit_class_gpr); + movi(rn(reg), i0); + ldxbr_d(r0, r1, rn(reg)); + jit_unget_reg(reg); + } +#else reg = jit_get_reg(jit_class_gpr); ldxbi_l(rn(reg), r1, i0); FMOVDX(r0, rn(reg)); jit_unget_reg(reg); +#endif } static void _ldxai_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) { jit_int32_t reg; +#if 1 + if (s9_p(i0)) + FLDRD_A(r0, r1, i0); + else { + reg = jit_get_reg(jit_class_gpr); + movi(rn(reg), i0); + ldxar_d(r0, r1, rn(reg)); + jit_unget_reg(reg); + } +#else reg = jit_get_reg(jit_class_gpr); ldxai_l(rn(reg), r1, i0); FMOVDX(r0, rn(reg)); jit_unget_reg(reg); +#endif } static void _str_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1) { +#if 1 + FSTRDU(r1, r0, 0); +#else jit_int32_t reg; reg = jit_get_reg(jit_class_gpr); FMOVXD(rn(reg), r1); str_l(r0, rn(reg)); jit_unget_reg(reg); +#endif } static void @@ -895,49 +1170,93 @@ _sti_d(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0) { jit_int32_t reg; reg = jit_get_reg(jit_class_gpr); +#if 1 + movi(rn(reg), i0); + str_d(rn(reg), r0); +#else FMOVXD(rn(reg), r0); sti_l(i0, rn(reg)); +#endif jit_unget_reg(reg); } static void _stxr_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) { +#if 1 + FSTRD(r2, r1, r0); +#else jit_int32_t reg; reg = jit_get_reg(jit_class_gpr); FMOVXD(rn(reg), r2); stxr_l(r0, r1, rn(reg)); jit_unget_reg(reg); +#endif } static void _stxi_d(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) { jit_int32_t reg; +#if 1 + if (s9_p(i0)) + FSTRDI(r1, r0, i0); + else if (u12_p(i0)) + FSTRDU(r1, r0, i0); + else { + reg = jit_get_reg(jit_class_gpr); + movi(rn(reg), i0); + stxr_d(rn(reg), r0, r1); + jit_unget_reg(reg); + } +#else reg = jit_get_reg(jit_class_gpr); FMOVXD(rn(reg), r1); stxi_l(i0, r0, rn(reg)); jit_unget_reg(reg); +#endif } static void _stxbi_d(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) { jit_int32_t reg; +#if 1 + if (s9_p(i0)) + FSTRD_B(r1, r0, i0); + else { + reg = jit_get_reg(jit_class_gpr); + movi(rn(reg), i0); + stxbr_d(rn(reg), r0, r1); + jit_unget_reg(reg); + } +#else reg = jit_get_reg(jit_class_gpr); FMOVXD(rn(reg), r1); stxbi_l(i0, r0, rn(reg)); jit_unget_reg(reg); +#endif } static void _stxai_d(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) { jit_int32_t reg; +#if 1 + if (s9_p(i0)) + FSTRD_A(r1, r0, i0); + else { + reg = jit_get_reg(jit_class_gpr); + movi(rn(reg), i0); + stxar_d(rn(reg), r0, r1); + jit_unget_reg(reg); + } +#else reg = jit_get_reg(jit_class_gpr); FMOVXD(rn(reg), r1); stxai_l(i0, r0, rn(reg)); jit_unget_reg(reg); +#endif } static void diff --git a/lib/jit_aarch64-sz.c b/lib/jit_aarch64-sz.c index b71eb85..9047702 100644 --- a/lib/jit_aarch64-sz.c +++ b/lib/jit_aarch64-sz.c @@ -1,7 +1,7 @@ #if __WORDSIZE == 64 # if PACKED_STACK -#define JIT_INSTR_MAX 96 +#define JIT_INSTR_MAX 64 0, /* data */ 0, /* live */ 4, /* align */ @@ -11,7 +11,7 @@ 0, /* #name */ 0, /* #note */ 0, /* label */ - 96, /* prolog */ + 64, /* prolog */ 0, /* ellipsis */ 0, /* va_push */ 0, /* allocai */ @@ -43,7 +43,7 @@ 0, /* putargi_l */ 4, /* va_start */ 8, /* va_arg */ - 12, /* va_arg_d */ + 8, /* va_arg_d */ 0, /* va_end */ 4, /* addr */ 20, /* addi */ @@ -117,7 +117,7 @@ 8, /* movnr */ 8, /* movzr */ 28, /* casr */ - 36, /* casi */ + 40, /* casi */ 4, /* extr_c */ 4, /* exti_c */ 4, /* extr_uc */ @@ -156,8 +156,8 @@ 16, /* ldi_ui */ 4, /* ldr_l */ 16, /* ldi_l */ - 8, /* ldxr_c */ - 20, /* ldxi_c */ + 4, /* ldxr_c */ + 16, /* ldxi_c */ 4, /* ldxr_uc */ 20, /* ldxi_uc */ 4, /* ldxr_s */ @@ -269,7 +269,7 @@ 0, /* retval_i */ 0, /* retval_ui */ 0, /* retval_l */ - 96, /* epilog */ + 64, /* epilog */ 0, /* arg_f */ 0, /* getarg_f */ 0, /* putargr_f */ @@ -323,14 +323,14 @@ 4, /* extr_d_f */ 4, /* movr_f */ 8, /* movi_f */ - 8, /* ldr_f */ - 20, /* ldi_f */ - 8, /* ldxr_f */ - 24, /* ldxi_f */ - 8, /* str_f */ - 20, /* sti_f */ - 8, /* stxr_f */ - 24, /* stxi_f */ + 4, /* ldr_f */ + 16, /* ldi_f */ + 4, /* ldxr_f */ + 16, /* ldxi_f */ + 4, /* str_f */ + 16, /* sti_f */ + 4, /* stxr_f */ + 16, /* stxi_f */ 8, /* bltr_f */ 16, /* blti_f */ 8, /* bler_f */ @@ -416,21 +416,21 @@ 4, /* extr_d */ 4, /* extr_f_d */ 4, /* movr_d */ - 12, /* movi_d */ - 8, /* ldr_d */ - 20, /* ldi_d */ - 8, /* ldxr_d */ - 24, /* ldxi_d */ - 8, /* str_d */ - 20, /* sti_d */ - 8, /* stxr_d */ - 24, /* stxi_d */ + 16, /* movi_d */ + 4, /* ldr_d */ + 16, /* ldi_d */ + 4, /* ldxr_d */ + 16, /* ldxi_d */ + 4, /* str_d */ + 16, /* sti_d */ + 4, /* stxr_d */ + 16, /* stxi_d */ 8, /* bltr_d */ 16, /* blti_d */ 8, /* bler_d */ 16, /* blei_d */ 8, /* beqr_d */ - 20, /* beqi_d */ + 24, /* beqi_d */ 8, /* bger_d */ 16, /* bgei_d */ 8, /* bgtr_d */ @@ -496,9 +496,9 @@ 8, /* qlshi */ 52, /* qlshr_u */ 8, /* qlshi_u */ - 52, /* qrshr */ + 44, /* qrshr */ 8, /* qrshi */ - 52, /* qrshr_u */ + 48, /* qrshr_u */ 8, /* qrshi_u */ 24, /* unldr */ 44, /* unldi */ @@ -506,10 +506,10 @@ 44, /* unldi_u */ 20, /* unstr */ 56, /* unsti */ - 8, /* unldr_x */ - 20, /* unldi_x */ - 8, /* unstr_x */ - 20, /* unsti_x */ + 4, /* unldr_x */ + 16, /* unldi_x */ + 4, /* unstr_x */ + 16, /* unsti_x */ 4, /* fmar_f */ 0, /* fmai_f */ 4, /* fmsr_f */ @@ -558,14 +558,14 @@ 4, /* ldxbi_l */ 8, /* ldxar_l */ 4, /* ldxai_l */ - 12, /* ldxbr_f */ - 8, /* ldxbi_f */ - 12, /* ldxar_f */ - 8, /* ldxai_f */ - 12, /* ldxbr_d */ - 8, /* ldxbi_d */ - 12, /* ldxar_d */ - 8, /* ldxai_d */ + 8, /* ldxbr_f */ + 4, /* ldxbi_f */ + 8, /* ldxar_f */ + 4, /* ldxai_f */ + 8, /* ldxbr_d */ + 4, /* ldxbi_d */ + 8, /* ldxar_d */ + 4, /* ldxai_d */ 8, /* stxbr_c */ 4, /* stxbi_c */ 8, /* stxar_c */ @@ -582,17 +582,17 @@ 4, /* stxbi_l */ 8, /* stxar_l */ 4, /* stxai_l */ - 12, /* stxbr_f */ - 8, /* stxbi_f */ - 12, /* stxar_f */ - 8, /* stxai_f */ - 12, /* stxbr_d */ - 8, /* stxbi_d */ - 12, /* stxar_d */ - 8, /* stxai_d */ + 8, /* stxbr_f */ + 4, /* stxbi_f */ + 8, /* stxar_f */ + 4, /* stxai_f */ + 8, /* stxbr_d */ + 4, /* stxbi_d */ + 8, /* stxar_d */ + 4, /* stxai_d */ # else /* PACKED_STACK */ -#define JIT_INSTR_MAX 120 +#define JIT_INSTR_MAX 84 0, /* data */ 0, /* live */ 12, /* align */ @@ -602,7 +602,7 @@ 0, /* #name */ 0, /* #note */ 0, /* label */ - 120, /* prolog */ + 84, /* prolog */ 0, /* ellipsis */ 0, /* va_push */ 0, /* allocai */ @@ -634,7 +634,7 @@ 0, /* putargi_l */ 44, /* va_start */ 48, /* va_arg */ - 56, /* va_arg_d */ + 48, /* va_arg_d */ 0, /* va_end */ 4, /* addr */ 20, /* addi */ @@ -747,8 +747,8 @@ 16, /* ldi_ui */ 4, /* ldr_l */ 16, /* ldi_l */ - 8, /* ldxr_c */ - 20, /* ldxi_c */ + 4, /* ldxr_c */ + 16, /* ldxi_c */ 4, /* ldxr_uc */ 20, /* ldxi_uc */ 4, /* ldxr_s */ @@ -860,7 +860,7 @@ 0, /* retval_i */ 0, /* retval_ui */ 0, /* retval_l */ - 96, /* epilog */ + 64, /* epilog */ 0, /* arg_f */ 0, /* getarg_f */ 0, /* putargr_f */ @@ -914,14 +914,14 @@ 4, /* extr_d_f */ 4, /* movr_f */ 8, /* movi_f */ - 8, /* ldr_f */ - 20, /* ldi_f */ - 8, /* ldxr_f */ - 24, /* ldxi_f */ - 8, /* str_f */ - 20, /* sti_f */ - 8, /* stxr_f */ - 24, /* stxi_f */ + 4, /* ldr_f */ + 16, /* ldi_f */ + 4, /* ldxr_f */ + 16, /* ldxi_f */ + 4, /* str_f */ + 16, /* sti_f */ + 4, /* stxr_f */ + 16, /* stxi_f */ 8, /* bltr_f */ 16, /* blti_f */ 8, /* bler_f */ @@ -1007,21 +1007,21 @@ 4, /* extr_d */ 4, /* extr_f_d */ 4, /* movr_d */ - 12, /* movi_d */ - 8, /* ldr_d */ - 20, /* ldi_d */ - 8, /* ldxr_d */ - 24, /* ldxi_d */ - 8, /* str_d */ - 20, /* sti_d */ - 8, /* stxr_d */ - 24, /* stxi_d */ + 16, /* movi_d */ + 4, /* ldr_d */ + 16, /* ldi_d */ + 4, /* ldxr_d */ + 16, /* ldxi_d */ + 4, /* str_d */ + 16, /* sti_d */ + 4, /* stxr_d */ + 16, /* stxi_d */ 8, /* bltr_d */ 16, /* blti_d */ 8, /* bler_d */ 16, /* blei_d */ 8, /* beqr_d */ - 20, /* beqi_d */ + 24, /* beqi_d */ 8, /* bger_d */ 16, /* bgei_d */ 8, /* bgtr_d */ @@ -1087,9 +1087,9 @@ 8, /* qlshi */ 52, /* qlshr_u */ 8, /* qlshi_u */ - 52, /* qrshr */ + 44, /* qrshr */ 8, /* qrshi */ - 52, /* qrshr_u */ + 48, /* qrshr_u */ 8, /* qrshi_u */ 24, /* unldr */ 44, /* unldi */ @@ -1097,10 +1097,10 @@ 44, /* unldi_u */ 20, /* unstr */ 56, /* unsti */ - 8, /* unldr_x */ - 20, /* unldi_x */ - 8, /* unstr_x */ - 20, /* unsti_x */ + 4, /* unldr_x */ + 16, /* unldi_x */ + 4, /* unstr_x */ + 16, /* unsti_x */ 4, /* fmar_f */ 0, /* fmai_f */ 4, /* fmsr_f */ @@ -1149,14 +1149,14 @@ 4, /* ldxbi_l */ 8, /* ldxar_l */ 4, /* ldxai_l */ - 12, /* ldxbr_f */ - 8, /* ldxbi_f */ - 12, /* ldxar_f */ - 8, /* ldxai_f */ - 12, /* ldxbr_d */ - 8, /* ldxbi_d */ - 12, /* ldxar_d */ - 8, /* ldxai_d */ + 8, /* ldxbr_f */ + 4, /* ldxbi_f */ + 8, /* ldxar_f */ + 4, /* ldxai_f */ + 8, /* ldxbr_d */ + 4, /* ldxbi_d */ + 8, /* ldxar_d */ + 4, /* ldxai_d */ 8, /* stxbr_c */ 4, /* stxbi_c */ 8, /* stxar_c */ @@ -1173,13 +1173,13 @@ 4, /* stxbi_l */ 8, /* stxar_l */ 4, /* stxai_l */ - 12, /* stxbr_f */ - 8, /* stxbi_f */ - 12, /* stxar_f */ - 8, /* stxai_f */ - 12, /* stxbr_d */ - 8, /* stxbi_d */ - 12, /* stxar_d */ - 8, /* stxai_d */ + 8, /* stxbr_f */ + 4, /* stxbi_f */ + 8, /* stxar_f */ + 4, /* stxai_f */ + 8, /* stxbr_d */ + 4, /* stxbi_d */ + 8, /* stxar_d */ + 4, /* stxai_d */ # endif #endif /* __WORDSIZE */ |