mirror of
https://git.savannah.gnu.org/git/guile.git
synced 2025-06-03 18:50:19 +02:00
Add consistency check on temporaries during a jump
* lib/jit_aarch64-cpu.c, lib/jit_aarch64-fpu.c, lib/jit_arm-cpu.c, lib/jit_arm-vfp.c, lib/jit_hppa-cpu.c, lib/jit_hppa-fpu.c, lib/jit_ia64-cpu.c, lib/jit_ia64-fpu.c, lib/jit_mips-cpu.c, lib/jit_mips-fpu.c, lib/jit_ppc-cpu.c, lib/jit_ppc-fpu.c, lib/jit_s390x-cpu.c, lib/jit_s390x-fpu.c, lib/jit_s390x.c, lib/jit_sparc-cpu.c, lib/jit_x86-cpu.c, lib/jit_x86-sse.c, lib/jit_x86-x87.c: Review generation of all branch instructions and always adds the jit_class_nospill bitfield for temporary registers that cannot be spilled because the reload would be after a conditional jump; the patch only adds an extra assertion. These conditions do not happen on documented lightning usage, but can happen if one uses the not exported jit_get_reg and jit_unget_reg calls and cause enough register starvation.
This commit is contained in:
parent
93e3ff38e1
commit
b58960638d
20 changed files with 221 additions and 192 deletions
20
ChangeLog
20
ChangeLog
|
@ -1,3 +1,23 @@
|
|||
2014-08-16 Paulo Andrade <pcpa@gnu.org>
|
||||
|
||||
* lib/jit_aarch64-cpu.c, lib/jit_aarch64-fpu.c,
|
||||
lib/jit_arm-cpu.c, lib/jit_arm-vfp.c,
|
||||
lib/jit_hppa-cpu.c, lib/jit_hppa-fpu.c,
|
||||
lib/jit_ia64-cpu.c, lib/jit_ia64-fpu.c,
|
||||
lib/jit_mips-cpu.c, lib/jit_mips-fpu.c,
|
||||
lib/jit_ppc-cpu.c, lib/jit_ppc-fpu.c,
|
||||
lib/jit_s390x-cpu.c, lib/jit_s390x-fpu.c,
|
||||
lib/jit_s390x.c, lib/jit_sparc-cpu.c,
|
||||
lib/jit_x86-cpu.c, lib/jit_x86-sse.c,
|
||||
lib/jit_x86-x87.c: Review generation of all branch
|
||||
instructions and always adds the jit_class_nospill
|
||||
bitfield for temporary registers that cannot be spilled
|
||||
because the reload would be after a conditional jump; the
|
||||
patch only adds an extra assertion. These conditions do
|
||||
not happen on documented lightning usage, but can happen
|
||||
if one uses the not exported jit_get_reg and jit_unget_reg
|
||||
calls and cause enough register starvation.
|
||||
|
||||
2014-08-16 Paulo Andrade <pcpa@gnu.org>
|
||||
|
||||
* lib/jit_alpha.c: Correct wrong bitmask of most argument
|
||||
|
|
|
@ -2087,7 +2087,7 @@ _jmpi(jit_state_t *_jit, jit_word_t i0)
|
|||
if (w >= -33554432 && w <= 33554431)
|
||||
B(w);
|
||||
else {
|
||||
reg = jit_get_reg(jit_class_gpr);
|
||||
reg = jit_get_reg(jit_class_gpr|jit_class_nospill);
|
||||
movi(rn(reg), i0);
|
||||
jmpr(rn(reg));
|
||||
jit_unget_reg(reg);
|
||||
|
@ -2099,7 +2099,7 @@ _jmpi_p(jit_state_t *_jit, jit_word_t i0)
|
|||
{
|
||||
jit_word_t w;
|
||||
jit_int32_t reg;
|
||||
reg = jit_get_reg(jit_class_gpr);
|
||||
reg = jit_get_reg(jit_class_gpr|jit_class_nospill);
|
||||
w = movi_p(rn(reg), i0);
|
||||
jmpr(rn(reg));
|
||||
jit_unget_reg(reg);
|
||||
|
|
|
@ -383,7 +383,8 @@ _b##name##i_f(jit_state_t *_jit, \
|
|||
jit_word_t i0, jit_int32_t r0, jit_float32_t i1) \
|
||||
{ \
|
||||
jit_word_t word; \
|
||||
jit_int32_t reg = jit_get_reg(jit_class_fpr); \
|
||||
jit_int32_t reg = jit_get_reg(jit_class_fpr| \
|
||||
jit_class_nospill); \
|
||||
movi_f(rn(reg), i1); \
|
||||
word = b##name##r_f(i0, r0, rn(reg)); \
|
||||
jit_unget_reg(reg); \
|
||||
|
@ -395,7 +396,8 @@ _b##name##i_d(jit_state_t *_jit, \
|
|||
jit_word_t i0, jit_int32_t r0, jit_float64_t i1) \
|
||||
{ \
|
||||
jit_word_t word; \
|
||||
jit_int32_t reg = jit_get_reg(jit_class_fpr); \
|
||||
jit_int32_t reg = jit_get_reg(jit_class_fpr| \
|
||||
jit_class_nospill); \
|
||||
movi_d(rn(reg), i1); \
|
||||
word = b##name##r_d(i0, r0, rn(reg)); \
|
||||
jit_unget_reg(reg); \
|
||||
|
@ -591,7 +593,7 @@ _fbcci(jit_state_t *_jit, jit_int32_t cc,
|
|||
{
|
||||
jit_word_t w;
|
||||
jit_int32_t reg;
|
||||
reg = jit_get_reg(jit_class_fpr);
|
||||
reg = jit_get_reg(jit_class_fpr|jit_class_nospill);
|
||||
movi_f(rn(reg), i1);
|
||||
w = fbccr(cc, i0, r0, rn(reg));
|
||||
jit_unget_reg(reg);
|
||||
|
@ -806,7 +808,7 @@ _dbcci(jit_state_t *_jit, jit_int32_t cc,
|
|||
{
|
||||
jit_word_t w;
|
||||
jit_int32_t reg;
|
||||
reg = jit_get_reg(jit_class_fpr);
|
||||
reg = jit_get_reg(jit_class_fpr|jit_class_nospill);
|
||||
movi_d(rn(reg), i1);
|
||||
w = dbccr(cc, i0, r0, rn(reg));
|
||||
jit_unget_reg(reg);
|
||||
|
|
|
@ -2582,7 +2582,7 @@ _jmpi_p(jit_state_t *_jit, jit_word_t i0)
|
|||
#if 0
|
||||
jit_word_t w;
|
||||
jit_int32_t reg;
|
||||
reg = jit_get_reg(jit_class_gpr);
|
||||
reg = jit_get_reg(jit_class_gpr|jit_class_nospill);
|
||||
w = movi_p(rn(reg), i0);
|
||||
jmpr(rn(reg));
|
||||
jit_unget_reg(reg);
|
||||
|
|
|
@ -1431,7 +1431,8 @@ _vfp_b##name##i_f(jit_state_t *_jit, \
|
|||
jit_int32_t r0, jit_int32_t r1, jit_float32_t i0) \
|
||||
{ \
|
||||
jit_word_t word; \
|
||||
jit_int32_t reg = jit_get_reg(jit_class_fpr); \
|
||||
jit_int32_t reg = jit_get_reg(jit_class_fpr| \
|
||||
jit_class_nospill); \
|
||||
vfp_movi_f(rn(reg), i0); \
|
||||
word = vfp_b##name##r_f(r0, r1, rn(reg)); \
|
||||
jit_unget_reg(reg); \
|
||||
|
@ -1443,7 +1444,8 @@ _vfp_b##name##i_d(jit_state_t *_jit, \
|
|||
jit_int32_t r0, jit_int32_t r1, jit_float64_t i0) \
|
||||
{ \
|
||||
jit_word_t word; \
|
||||
jit_int32_t reg = jit_get_reg(jit_class_fpr); \
|
||||
jit_int32_t reg = jit_get_reg(jit_class_fpr| \
|
||||
jit_class_nospill); \
|
||||
vfp_movi_d(rn(reg), i0); \
|
||||
word = vfp_b##name##r_d(r0, r1, rn(reg)); \
|
||||
jit_unget_reg(reg); \
|
||||
|
|
|
@ -2294,7 +2294,7 @@ _bcmpi(jit_state_t *_jit, jit_word_t c, jit_word_t ci,
|
|||
CMPIB_N_(ci, i1, r0, ((i0 - w) >> 2) - 2);
|
||||
}
|
||||
else {
|
||||
reg = jit_get_reg(jit_class_gpr);
|
||||
reg = jit_get_reg(jit_class_gpr|jit_class_nospill);
|
||||
movi(rn(reg), i1);
|
||||
w = _jit->pc.w;
|
||||
CMPB_N_(c, r0, rn(reg), ((i0 - w) >> 2) - 2);
|
||||
|
@ -2310,7 +2310,7 @@ _bmxr(jit_state_t *_jit, jit_bool_t c,
|
|||
{
|
||||
jit_word_t w;
|
||||
jit_int32_t reg;
|
||||
reg = jit_get_reg(jit_class_gpr);
|
||||
reg = jit_get_reg(jit_class_gpr|jit_class_nospill);
|
||||
andr(rn(reg), r0, r1);
|
||||
w = c ? bnei(i0, rn(reg), 0) : beqi(i0, rn(reg), 0);
|
||||
jit_unget_reg(reg);
|
||||
|
@ -2323,7 +2323,7 @@ _bmxi(jit_state_t *_jit, jit_bool_t c,
|
|||
{
|
||||
jit_word_t w;
|
||||
jit_int32_t reg;
|
||||
reg = jit_get_reg(jit_class_gpr);
|
||||
reg = jit_get_reg(jit_class_gpr|jit_class_nospill);
|
||||
movi(rn(reg), i1);
|
||||
andr(rn(reg), r0, rn(reg));
|
||||
w = c ? bnei(i0, rn(reg), 0) : beqi(i0, rn(reg), 0);
|
||||
|
@ -2352,7 +2352,7 @@ _boaddi(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_word_t i1)
|
|||
NOP();
|
||||
}
|
||||
else {
|
||||
reg = jit_get_reg(jit_class_gpr);
|
||||
reg = jit_get_reg(jit_class_gpr|jit_class_nospill);
|
||||
movi(rn(reg), i1);
|
||||
w = boaddr(i0, r0, rn(reg));
|
||||
jit_unget_reg(reg);
|
||||
|
@ -2381,7 +2381,7 @@ _boaddi_u(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_word_t i1)
|
|||
NOP();
|
||||
}
|
||||
else {
|
||||
reg = jit_get_reg(jit_class_gpr);
|
||||
reg = jit_get_reg(jit_class_gpr|jit_class_nospill);
|
||||
movi(rn(reg), i1);
|
||||
w = boaddr_u(i0, r0, rn(reg));
|
||||
jit_unget_reg(reg);
|
||||
|
@ -2410,7 +2410,7 @@ _bxaddi(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_word_t i1)
|
|||
NOP();
|
||||
}
|
||||
else {
|
||||
reg = jit_get_reg(jit_class_gpr);
|
||||
reg = jit_get_reg(jit_class_gpr|jit_class_nospill);
|
||||
movi(rn(reg), i1);
|
||||
w = bxaddr(i0, r0, rn(reg));
|
||||
jit_unget_reg(reg);
|
||||
|
@ -2439,7 +2439,7 @@ _bxaddi_u(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_word_t i1)
|
|||
NOP();
|
||||
}
|
||||
else {
|
||||
reg = jit_get_reg(jit_class_gpr);
|
||||
reg = jit_get_reg(jit_class_gpr|jit_class_nospill);
|
||||
movi(rn(reg), i1);
|
||||
w = bxaddr_u(i0, r0, rn(reg));
|
||||
jit_unget_reg(reg);
|
||||
|
|
|
@ -965,7 +965,7 @@ _bcmpi_f(jit_state_t *_jit, jit_word_t c,
|
|||
{
|
||||
jit_word_t w;
|
||||
jit_int32_t reg;
|
||||
reg = jit_get_reg(jit_class_fpr);
|
||||
reg = jit_get_reg(jit_class_fpr|jit_class_nospill);
|
||||
movi_f(rn(reg), i1);
|
||||
FCMP_S_(r0, rn(reg), c);
|
||||
FTEST();
|
||||
|
@ -995,7 +995,7 @@ _bcmpi_d(jit_state_t *_jit, jit_word_t c,
|
|||
{
|
||||
jit_word_t w;
|
||||
jit_int32_t reg;
|
||||
reg = jit_get_reg(jit_class_fpr);
|
||||
reg = jit_get_reg(jit_class_fpr|jit_class_nospill);
|
||||
movi_d(rn(reg), i1);
|
||||
FCMP_D_(r0, rn(reg), c);
|
||||
FTEST();
|
||||
|
|
|
@ -4638,7 +4638,7 @@ _blei(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_word_t i1)
|
|||
{
|
||||
jit_word_t w;
|
||||
jit_int32_t reg;
|
||||
reg = jit_get_reg(jit_class_gpr);
|
||||
reg = jit_get_reg(jit_class_gpr|jit_class_nospill);
|
||||
movi(rn(reg), i1);
|
||||
w = bler(i0, r0, rn(reg));
|
||||
jit_unget_reg(reg);
|
||||
|
@ -4661,7 +4661,7 @@ _blei_u(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_word_t i1)
|
|||
{
|
||||
jit_word_t w;
|
||||
jit_int32_t reg;
|
||||
reg = jit_get_reg(jit_class_gpr);
|
||||
reg = jit_get_reg(jit_class_gpr|jit_class_nospill);
|
||||
movi(rn(reg), i1);
|
||||
w = bler_u(i0, r0, rn(reg));
|
||||
jit_unget_reg(reg);
|
||||
|
@ -4774,7 +4774,7 @@ _bgti(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_word_t i1)
|
|||
{
|
||||
jit_word_t w;
|
||||
jit_int32_t reg;
|
||||
reg = jit_get_reg(jit_class_gpr);
|
||||
reg = jit_get_reg(jit_class_gpr|jit_class_nospill);
|
||||
movi(rn(reg), i1);
|
||||
w = bgtr(i0, r0, rn(reg));
|
||||
jit_unget_reg(reg);
|
||||
|
@ -4797,7 +4797,7 @@ _bgti_u(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_word_t i1)
|
|||
{
|
||||
jit_word_t w;
|
||||
jit_int32_t reg;
|
||||
reg = jit_get_reg(jit_class_gpr);
|
||||
reg = jit_get_reg(jit_class_gpr|jit_class_nospill);
|
||||
movi(rn(reg), i1);
|
||||
w = bgtr_u(i0, r0, rn(reg));
|
||||
jit_unget_reg(reg);
|
||||
|
@ -4905,9 +4905,9 @@ _baddr(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1,
|
|||
jit_int32_t t1;
|
||||
jit_int32_t t2;
|
||||
/* t1 = r0 + r1; overflow = r1 < 0 ? r0 < t1 : t1 < r0 */
|
||||
t0 = jit_get_reg(jit_class_gpr);
|
||||
t1 = jit_get_reg(jit_class_gpr);
|
||||
t2 = jit_get_reg(jit_class_gpr);
|
||||
t0 = jit_get_reg(jit_class_gpr|jit_class_nospill);
|
||||
t1 = jit_get_reg(jit_class_gpr|jit_class_nospill);
|
||||
t2 = jit_get_reg(jit_class_gpr|jit_class_nospill);
|
||||
lti(rn(t0), r1, 0); /* t0 = r1 < 0 */
|
||||
addr(rn(t1), r0, r1); /* t1 = r0 + r1 */
|
||||
ltr(rn(t2), rn(t1), r0); /* t2 = t1 < r0 */
|
||||
|
@ -4931,7 +4931,7 @@ _baddi(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_word_t i1,
|
|||
{
|
||||
jit_word_t w;
|
||||
jit_int32_t reg;
|
||||
reg = jit_get_reg(jit_class_gpr);
|
||||
reg = jit_get_reg(jit_class_gpr|jit_class_nospill);
|
||||
movi(rn(reg), i1);
|
||||
w = baddr(i0, r0, rn(reg), carry);
|
||||
jit_unget_reg(reg);
|
||||
|
@ -4945,8 +4945,8 @@ _baddr_u(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1,
|
|||
jit_word_t w;
|
||||
jit_int32_t t0;
|
||||
jit_int32_t t1;
|
||||
t0 = jit_get_reg(jit_class_gpr);
|
||||
t1 = jit_get_reg(jit_class_gpr);
|
||||
t0 = jit_get_reg(jit_class_gpr|jit_class_nospill);
|
||||
t1 = jit_get_reg(jit_class_gpr|jit_class_nospill);
|
||||
addr(rn(t0), r0, r1);
|
||||
ltr_u(rn(t1), rn(t0), r0);
|
||||
CMPI_EQ(PR_6, PR_7, 0, rn(t1));
|
||||
|
@ -4965,7 +4965,7 @@ _baddi_u(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_word_t i1,
|
|||
{
|
||||
jit_word_t w;
|
||||
jit_int32_t reg;
|
||||
reg = jit_get_reg(jit_class_gpr);
|
||||
reg = jit_get_reg(jit_class_gpr|jit_class_nospill);
|
||||
movi(rn(reg), i1);
|
||||
w = baddr_u(i0, r0, rn(reg), carry);
|
||||
jit_unget_reg(reg);
|
||||
|
@ -4981,9 +4981,9 @@ _bsubr(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1,
|
|||
jit_int32_t t1;
|
||||
jit_int32_t t2;
|
||||
/* t1 = r0 - r1; overflow = 0 < r1 ? r0 < t1 : t1 < r0 */
|
||||
t0 = jit_get_reg(jit_class_gpr);
|
||||
t1 = jit_get_reg(jit_class_gpr);
|
||||
t2 = jit_get_reg(jit_class_gpr);
|
||||
t0 = jit_get_reg(jit_class_gpr|jit_class_nospill);
|
||||
t1 = jit_get_reg(jit_class_gpr|jit_class_nospill);
|
||||
t2 = jit_get_reg(jit_class_gpr|jit_class_nospill);
|
||||
gti(rn(t0), r1, 0); /* t0 = r1 > 0 */
|
||||
subr(rn(t1), r0, r1); /* t1 = r0 - r1 */
|
||||
ltr(rn(t2), rn(t1), r0); /* t2 = t1 < r0 */
|
||||
|
@ -5007,7 +5007,7 @@ _bsubi(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_word_t i1,
|
|||
{
|
||||
jit_word_t w;
|
||||
jit_int32_t reg;
|
||||
reg = jit_get_reg(jit_class_gpr);
|
||||
reg = jit_get_reg(jit_class_gpr|jit_class_nospill);
|
||||
movi(rn(reg), i1);
|
||||
w = bsubr(i0, r0, rn(reg), carry);
|
||||
jit_unget_reg(reg);
|
||||
|
@ -5021,8 +5021,8 @@ _bsubr_u(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1,
|
|||
jit_word_t w;
|
||||
jit_int32_t t0;
|
||||
jit_int32_t t1;
|
||||
t0 = jit_get_reg(jit_class_gpr);
|
||||
t1 = jit_get_reg(jit_class_gpr);
|
||||
t0 = jit_get_reg(jit_class_gpr|jit_class_nospill);
|
||||
t1 = jit_get_reg(jit_class_gpr|jit_class_nospill);
|
||||
subr(rn(t0), r0, r1);
|
||||
ltr_u(rn(t1), r0, rn(t0));
|
||||
CMPI_EQ(PR_6, PR_7, 0, rn(t1));
|
||||
|
@ -5041,7 +5041,7 @@ _bsubi_u(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_word_t i1,
|
|||
{
|
||||
jit_word_t w;
|
||||
jit_int32_t reg;
|
||||
reg = jit_get_reg(jit_class_gpr);
|
||||
reg = jit_get_reg(jit_class_gpr|jit_class_nospill);
|
||||
movi(rn(reg), i1);
|
||||
w = bsubr_u(i0, r0, rn(reg), carry);
|
||||
jit_unget_reg(reg);
|
||||
|
|
|
@ -1095,7 +1095,8 @@ _b##name##i_##type(jit_state_t *_jit, \
|
|||
jit_float##size##_t *i1) \
|
||||
{ \
|
||||
jit_word_t word; \
|
||||
jit_int32_t reg = jit_get_reg(jit_class_fpr); \
|
||||
jit_int32_t reg = jit_get_reg(jit_class_fpr| \
|
||||
jit_class_nospill); \
|
||||
movi_##type(rn(reg), i1); \
|
||||
word = b##name##r_##type(i0, r0, rn(reg)); \
|
||||
jit_unget_reg(reg); \
|
||||
|
|
|
@ -1918,7 +1918,7 @@ _bltr_u(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1)
|
|||
jit_word_t w;
|
||||
jit_int32_t reg;
|
||||
|
||||
reg = jit_get_reg(jit_class_gpr);
|
||||
reg = jit_get_reg(jit_class_gpr|jit_class_nospill);
|
||||
SLTU(rn(reg), r0, r1);
|
||||
w = _jit->pc.w;
|
||||
BNE(rn(reg), _ZERO_REGNO, ((i0 - w) >> 2) - 1);
|
||||
|
@ -1937,7 +1937,7 @@ _blti(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_word_t i1)
|
|||
jit_bool_t zero_p;
|
||||
|
||||
if (!(zero_p = i1 == 0))
|
||||
reg = jit_get_reg(jit_class_gpr);
|
||||
reg = jit_get_reg(jit_class_gpr|jit_class_nospill);
|
||||
if (can_sign_extend_short_p(i1)) {
|
||||
if (!zero_p)
|
||||
SLTI(rn(reg), r0, i1);
|
||||
|
@ -1965,7 +1965,7 @@ _blti_u(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_word_t i1)
|
|||
jit_word_t w;
|
||||
jit_int32_t reg;
|
||||
|
||||
reg = jit_get_reg(jit_class_gpr);
|
||||
reg = jit_get_reg(jit_class_gpr|jit_class_nospill);
|
||||
if (can_sign_extend_short_p(i1)) {
|
||||
SLTIU(rn(reg), r0, i1);
|
||||
w = _jit->pc.w;
|
||||
|
@ -1987,7 +1987,7 @@ _bler(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1)
|
|||
jit_word_t w;
|
||||
jit_int32_t reg;
|
||||
|
||||
reg = jit_get_reg(jit_class_gpr);
|
||||
reg = jit_get_reg(jit_class_gpr|jit_class_nospill);
|
||||
SLT(rn(reg), r1, r0);
|
||||
w = _jit->pc.w;
|
||||
BEQ(rn(reg), _ZERO_REGNO, ((i0 - w) >> 2) - 1);
|
||||
|
@ -2003,7 +2003,7 @@ _bler_u(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1)
|
|||
jit_word_t w;
|
||||
jit_int32_t reg;
|
||||
|
||||
reg = jit_get_reg(jit_class_gpr);
|
||||
reg = jit_get_reg(jit_class_gpr|jit_class_nospill);
|
||||
SLTU(rn(reg), r1, r0);
|
||||
w = _jit->pc.w;
|
||||
BEQ(rn(reg), _ZERO_REGNO, ((i0 - w) >> 2) - 1);
|
||||
|
@ -2025,7 +2025,7 @@ _blei(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_word_t i1)
|
|||
NOP(1);
|
||||
}
|
||||
else {
|
||||
reg = jit_get_reg(jit_class_gpr);
|
||||
reg = jit_get_reg(jit_class_gpr|jit_class_nospill);
|
||||
movi(rn(reg), i1);
|
||||
w = bler(i0, r0, rn(reg));
|
||||
jit_unget_reg(reg);
|
||||
|
@ -2046,7 +2046,7 @@ _blei_u(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_word_t i1)
|
|||
NOP(1);
|
||||
}
|
||||
else {
|
||||
reg = jit_get_reg(jit_class_gpr);
|
||||
reg = jit_get_reg(jit_class_gpr|jit_class_nospill);
|
||||
movi(rn(reg), i1);
|
||||
w = bler_u(i0, r0, rn(reg));
|
||||
jit_unget_reg(reg);
|
||||
|
@ -2079,7 +2079,7 @@ _beqi(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_word_t i1)
|
|||
NOP(1);
|
||||
}
|
||||
else {
|
||||
reg = jit_get_reg(jit_class_gpr);
|
||||
reg = jit_get_reg(jit_class_gpr|jit_class_nospill);
|
||||
movi(rn(reg), i1);
|
||||
w = beqr(i0, r0, rn(reg));
|
||||
jit_unget_reg(reg);
|
||||
|
@ -2094,7 +2094,7 @@ _bger(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1)
|
|||
jit_word_t w;
|
||||
jit_int32_t reg;
|
||||
|
||||
reg = jit_get_reg(jit_class_gpr);
|
||||
reg = jit_get_reg(jit_class_gpr|jit_class_nospill);
|
||||
SLT(rn(reg), r0, r1);
|
||||
w = _jit->pc.w;
|
||||
BEQ(rn(reg), _ZERO_REGNO, ((i0 - w) >> 2) - 1);
|
||||
|
@ -2110,7 +2110,7 @@ _bger_u(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1)
|
|||
jit_word_t w;
|
||||
jit_int32_t reg;
|
||||
|
||||
reg = jit_get_reg(jit_class_gpr);
|
||||
reg = jit_get_reg(jit_class_gpr|jit_class_nospill);
|
||||
SLTU(rn(reg), r0, r1);
|
||||
w = _jit->pc.w;
|
||||
BEQ(rn(reg), _ZERO_REGNO, ((i0 - w) >> 2) - 1);
|
||||
|
@ -2129,7 +2129,7 @@ _bgei(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_word_t i1)
|
|||
jit_bool_t zero_p;
|
||||
|
||||
if (!(zero_p = i1 == 0))
|
||||
reg = jit_get_reg(jit_class_gpr);
|
||||
reg = jit_get_reg(jit_class_gpr|jit_class_nospill);
|
||||
if (can_sign_extend_short_p(i1)) {
|
||||
if (!zero_p)
|
||||
SLTI(rn(reg), r0, i1);
|
||||
|
@ -2157,7 +2157,7 @@ _bgei_u(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_word_t i1)
|
|||
jit_word_t w;
|
||||
jit_int32_t reg;
|
||||
|
||||
reg = jit_get_reg(jit_class_gpr);
|
||||
reg = jit_get_reg(jit_class_gpr|jit_class_nospill);
|
||||
if (can_sign_extend_short_p(i1)) {
|
||||
SLTIU(rn(reg), r0, i1);
|
||||
w = _jit->pc.w;
|
||||
|
@ -2179,7 +2179,7 @@ _bgtr(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1)
|
|||
jit_word_t w;
|
||||
jit_int32_t reg;
|
||||
|
||||
reg = jit_get_reg(jit_class_gpr);
|
||||
reg = jit_get_reg(jit_class_gpr|jit_class_nospill);
|
||||
SLT(rn(reg), r1, r0);
|
||||
w = _jit->pc.w;
|
||||
BNE(rn(reg), _ZERO_REGNO, ((i0 - w) >> 2) - 1);
|
||||
|
@ -2195,7 +2195,7 @@ _bgtr_u(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1)
|
|||
jit_word_t w;
|
||||
jit_int32_t reg;
|
||||
|
||||
reg = jit_get_reg(jit_class_gpr);
|
||||
reg = jit_get_reg(jit_class_gpr|jit_class_nospill);
|
||||
SLTU(rn(reg), r1, r0);
|
||||
w = _jit->pc.w;
|
||||
BNE(rn(reg), _ZERO_REGNO, ((i0 - w) >> 2) - 1);
|
||||
|
@ -2217,7 +2217,7 @@ _bgti(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_word_t i1)
|
|||
NOP(1);
|
||||
}
|
||||
else {
|
||||
reg = jit_get_reg(jit_class_gpr);
|
||||
reg = jit_get_reg(jit_class_gpr|jit_class_nospill);
|
||||
movi(rn(reg), i1);
|
||||
w = bgtr(i0, r0, rn(reg));
|
||||
jit_unget_reg(reg);
|
||||
|
@ -2238,7 +2238,7 @@ _bgti_u(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_word_t i1)
|
|||
NOP(1);
|
||||
}
|
||||
else {
|
||||
reg = jit_get_reg(jit_class_gpr);
|
||||
reg = jit_get_reg(jit_class_gpr|jit_class_nospill);
|
||||
movi(rn(reg), i1);
|
||||
w = bgtr_u(i0, r0, rn(reg));
|
||||
jit_unget_reg(reg);
|
||||
|
@ -2271,7 +2271,7 @@ _bnei(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_word_t i1)
|
|||
NOP(1);
|
||||
}
|
||||
else {
|
||||
reg = jit_get_reg(jit_class_gpr);
|
||||
reg = jit_get_reg(jit_class_gpr|jit_class_nospill);
|
||||
movi(rn(reg), i1);
|
||||
w = bner(i0, r0, rn(reg));
|
||||
jit_unget_reg(reg);
|
||||
|
@ -2317,9 +2317,9 @@ _boaddr(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1)
|
|||
jit_int32_t t2;
|
||||
|
||||
/* t1 = r0 + r1; overflow = r1 < 0 ? r0 < t1 : t1 < r0 */
|
||||
t0 = jit_get_reg(jit_class_gpr);
|
||||
t1 = jit_get_reg(jit_class_gpr);
|
||||
t2 = jit_get_reg(jit_class_gpr);
|
||||
t0 = jit_get_reg(jit_class_gpr|jit_class_nospill);
|
||||
t1 = jit_get_reg(jit_class_gpr|jit_class_nospill);
|
||||
t2 = jit_get_reg(jit_class_gpr|jit_class_nospill);
|
||||
SLT(rn(t0), r1, _ZERO_REGNO); /* t0 = r1 < 0 */
|
||||
addr(rn(t1), r0, r1); /* t1 = r0 + r1 */
|
||||
SLT(rn(t2), rn(t1), r0); /* t2 = t1 < r0 */
|
||||
|
@ -2345,9 +2345,9 @@ _boaddi(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_word_t i1)
|
|||
jit_int32_t t2;
|
||||
|
||||
if (can_sign_extend_short_p(i1)) {
|
||||
t0 = jit_get_reg(jit_class_gpr);
|
||||
t1 = jit_get_reg(jit_class_gpr);
|
||||
t2 = jit_get_reg(jit_class_gpr);
|
||||
t0 = jit_get_reg(jit_class_gpr|jit_class_nospill);
|
||||
t1 = jit_get_reg(jit_class_gpr|jit_class_nospill);
|
||||
t2 = jit_get_reg(jit_class_gpr|jit_class_nospill);
|
||||
SLTI(rn(t0), _ZERO_REGNO, i1);
|
||||
addiu(rn(t1), r0, i1);
|
||||
SLT(rn(t2), r0, rn(t1));
|
||||
|
@ -2377,8 +2377,8 @@ _boaddr_u(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1)
|
|||
jit_int32_t t0;
|
||||
jit_int32_t t1;
|
||||
|
||||
t0 = jit_get_reg(jit_class_gpr);
|
||||
t1 = jit_get_reg(jit_class_gpr);
|
||||
t0 = jit_get_reg(jit_class_gpr|jit_class_nospill);
|
||||
t1 = jit_get_reg(jit_class_gpr|jit_class_nospill);
|
||||
addr(rn(t0), r0, r1);
|
||||
SLTU(rn(t1), rn(t0), r0);
|
||||
w = _jit->pc.w;
|
||||
|
@ -2398,8 +2398,8 @@ _boaddi_u(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_word_t i1)
|
|||
jit_int32_t t1;
|
||||
|
||||
if (can_sign_extend_short_p(i0)) {
|
||||
t0 = jit_get_reg(jit_class_gpr);
|
||||
t1 = jit_get_reg(jit_class_gpr);
|
||||
t0 = jit_get_reg(jit_class_gpr|jit_class_nospill);
|
||||
t1 = jit_get_reg(jit_class_gpr|jit_class_nospill);
|
||||
addiu(rn(t0), r0, i1);
|
||||
SLTU(rn(t1), rn(t0), r0);
|
||||
w = _jit->pc.w;
|
||||
|
@ -2410,7 +2410,7 @@ _boaddi_u(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_word_t i1)
|
|||
jit_unget_reg(t0);
|
||||
}
|
||||
else {
|
||||
t0 = jit_get_reg(jit_class_gpr);
|
||||
t0 = jit_get_reg(jit_class_gpr|jit_class_nospill);
|
||||
movi(rn(t0), i1);
|
||||
w = boaddr_u(i0, r0, rn(t0));
|
||||
jit_unget_reg(t0);
|
||||
|
@ -2427,9 +2427,9 @@ _bxaddr(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1)
|
|||
jit_int32_t t2;
|
||||
|
||||
/* t1 = r0 + r1; overflow = r1 < 0 ? r0 < t1 : t1 < r0 */
|
||||
t0 = jit_get_reg(jit_class_gpr);
|
||||
t1 = jit_get_reg(jit_class_gpr);
|
||||
t2 = jit_get_reg(jit_class_gpr);
|
||||
t0 = jit_get_reg(jit_class_gpr|jit_class_nospill);
|
||||
t1 = jit_get_reg(jit_class_gpr|jit_class_nospill);
|
||||
t2 = jit_get_reg(jit_class_gpr|jit_class_nospill);
|
||||
SLT(rn(t0), r1, _ZERO_REGNO); /* t0 = r1 < 0 */
|
||||
addr(rn(t1), r0, r1); /* t1 = r0 + r1 */
|
||||
SLT(rn(t2), rn(t1), r0); /* t2 = t1 < r0 */
|
||||
|
@ -2455,9 +2455,9 @@ _bxaddi(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_word_t i1)
|
|||
jit_int32_t t2;
|
||||
|
||||
if (can_sign_extend_short_p(i1)) {
|
||||
t0 = jit_get_reg(jit_class_gpr);
|
||||
t1 = jit_get_reg(jit_class_gpr);
|
||||
t2 = jit_get_reg(jit_class_gpr);
|
||||
t0 = jit_get_reg(jit_class_gpr|jit_class_nospill);
|
||||
t1 = jit_get_reg(jit_class_gpr|jit_class_nospill);
|
||||
t2 = jit_get_reg(jit_class_gpr|jit_class_nospill);
|
||||
SLTI(rn(t0), _ZERO_REGNO, i1);
|
||||
addiu(rn(t1), r0, i1);
|
||||
SLT(rn(t2), r0, rn(t1));
|
||||
|
@ -2472,7 +2472,7 @@ _bxaddi(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_word_t i1)
|
|||
jit_unget_reg(t0);
|
||||
}
|
||||
else {
|
||||
t0 = jit_get_reg(jit_class_gpr);
|
||||
t0 = jit_get_reg(jit_class_gpr|jit_class_nospill);
|
||||
movi(rn(t0), i1);
|
||||
w = bxaddr(i0, r0, rn(t0));
|
||||
jit_unget_reg(t0);
|
||||
|
@ -2487,8 +2487,8 @@ _bxaddr_u(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1)
|
|||
jit_int32_t t0;
|
||||
jit_int32_t t1;
|
||||
|
||||
t0 = jit_get_reg(jit_class_gpr);
|
||||
t1 = jit_get_reg(jit_class_gpr);
|
||||
t0 = jit_get_reg(jit_class_gpr|jit_class_nospill);
|
||||
t1 = jit_get_reg(jit_class_gpr|jit_class_nospill);
|
||||
addr(rn(t0), r0, r1);
|
||||
SLTU(rn(t1), rn(t0), r0);
|
||||
w = _jit->pc.w;
|
||||
|
@ -2508,8 +2508,8 @@ _bxaddi_u(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_word_t i1)
|
|||
jit_int32_t t1;
|
||||
|
||||
if (can_sign_extend_short_p(i0)) {
|
||||
t0 = jit_get_reg(jit_class_gpr);
|
||||
t1 = jit_get_reg(jit_class_gpr);
|
||||
t0 = jit_get_reg(jit_class_gpr|jit_class_nospill);
|
||||
t1 = jit_get_reg(jit_class_gpr|jit_class_nospill);
|
||||
addiu(rn(t0), r0, i1);
|
||||
SLTU(rn(t1), rn(t0), r0);
|
||||
w = _jit->pc.w;
|
||||
|
@ -2520,7 +2520,7 @@ _bxaddi_u(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_word_t i1)
|
|||
jit_unget_reg(t0);
|
||||
}
|
||||
else {
|
||||
t0 = jit_get_reg(jit_class_gpr);
|
||||
t0 = jit_get_reg(jit_class_gpr|jit_class_nospill);
|
||||
movi(rn(t0), i1);
|
||||
w = bxaddr_u(i0, r0, rn(t0));
|
||||
jit_unget_reg(t0);
|
||||
|
@ -2537,9 +2537,9 @@ _bosubr(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1)
|
|||
jit_int32_t t2;
|
||||
|
||||
/* t1 = r0 - r1; overflow = 0 < r1 ? r0 < t1 : t1 < r0 */
|
||||
t0 = jit_get_reg(jit_class_gpr);
|
||||
t1 = jit_get_reg(jit_class_gpr);
|
||||
t2 = jit_get_reg(jit_class_gpr);
|
||||
t0 = jit_get_reg(jit_class_gpr|jit_class_nospill);
|
||||
t1 = jit_get_reg(jit_class_gpr|jit_class_nospill);
|
||||
t2 = jit_get_reg(jit_class_gpr|jit_class_nospill);
|
||||
SLT(rn(t0), _ZERO_REGNO, r1); /* t0 = 0 < r1 */
|
||||
subr(rn(t1), r0, r1); /* t1 = r0 - r1 */
|
||||
SLT(rn(t2), rn(t1), r0); /* t2 = t1 < r0 */
|
||||
|
@ -2565,9 +2565,9 @@ _bosubi(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_word_t i1)
|
|||
jit_int32_t t2;
|
||||
|
||||
if (can_sign_extend_short_p(i1) && (i1 & 0xffff) != 0x8000) {
|
||||
t0 = jit_get_reg(jit_class_gpr);
|
||||
t1 = jit_get_reg(jit_class_gpr);
|
||||
t2 = jit_get_reg(jit_class_gpr);
|
||||
t0 = jit_get_reg(jit_class_gpr|jit_class_nospill);
|
||||
t1 = jit_get_reg(jit_class_gpr|jit_class_nospill);
|
||||
t2 = jit_get_reg(jit_class_gpr|jit_class_nospill);
|
||||
SLTI(rn(t0), _ZERO_REGNO, i1);
|
||||
addiu(rn(t1), r0, -i1);
|
||||
SLT(rn(t2), rn(t1), r0);
|
||||
|
@ -2582,7 +2582,7 @@ _bosubi(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_word_t i1)
|
|||
jit_unget_reg(t0);
|
||||
}
|
||||
else {
|
||||
t0 = jit_get_reg(jit_class_gpr);
|
||||
t0 = jit_get_reg(jit_class_gpr|jit_class_nospill);
|
||||
movi(rn(t0), i1);
|
||||
w = bosubr(i0, r0, rn(t0));
|
||||
jit_unget_reg(t0);
|
||||
|
@ -2597,8 +2597,8 @@ _bosubr_u(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1)
|
|||
jit_int32_t t0;
|
||||
jit_int32_t t1;
|
||||
|
||||
t0 = jit_get_reg(jit_class_gpr);
|
||||
t1 = jit_get_reg(jit_class_gpr);
|
||||
t0 = jit_get_reg(jit_class_gpr|jit_class_nospill);
|
||||
t1 = jit_get_reg(jit_class_gpr|jit_class_nospill);
|
||||
subr(rn(t0), r0, r1);
|
||||
SLTU(rn(t1), r0, rn(t0));
|
||||
w = _jit->pc.w;
|
||||
|
@ -2618,8 +2618,8 @@ _bosubi_u(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_word_t i1)
|
|||
jit_int32_t t1;
|
||||
|
||||
if (can_sign_extend_short_p(i0) && (i0 & 0xffff) != 0x8000) {
|
||||
t0 = jit_get_reg(jit_class_gpr);
|
||||
t1 = jit_get_reg(jit_class_gpr);
|
||||
t0 = jit_get_reg(jit_class_gpr|jit_class_nospill);
|
||||
t1 = jit_get_reg(jit_class_gpr|jit_class_nospill);
|
||||
addiu(rn(t0), r0, -i1);
|
||||
SLTU(rn(t1), r0, rn(t0));
|
||||
w = _jit->pc.w;
|
||||
|
@ -2630,7 +2630,7 @@ _bosubi_u(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_word_t i1)
|
|||
jit_unget_reg(t0);
|
||||
}
|
||||
else {
|
||||
t0 = jit_get_reg(jit_class_gpr);
|
||||
t0 = jit_get_reg(jit_class_gpr|jit_class_nospill);
|
||||
movi(rn(t0), i1);
|
||||
w = bosubr_u(i0, r0, rn(t0));
|
||||
jit_unget_reg(t0);
|
||||
|
@ -2647,9 +2647,9 @@ _bxsubr(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1)
|
|||
jit_int32_t t2;
|
||||
|
||||
/* t1 = r0 - r1; overflow = 0 < r1 ? r0 < t1 : t1 < r0 */
|
||||
t0 = jit_get_reg(jit_class_gpr);
|
||||
t1 = jit_get_reg(jit_class_gpr);
|
||||
t2 = jit_get_reg(jit_class_gpr);
|
||||
t0 = jit_get_reg(jit_class_gpr|jit_class_nospill);
|
||||
t1 = jit_get_reg(jit_class_gpr|jit_class_nospill);
|
||||
t2 = jit_get_reg(jit_class_gpr|jit_class_nospill);
|
||||
SLT(rn(t0), _ZERO_REGNO, r1); /* t0 = 0 < r1 */
|
||||
subr(rn(t1), r0, r1); /* t1 = r0 - r1 */
|
||||
SLT(rn(t2), rn(t1), r0); /* t2 = t1 < r0 */
|
||||
|
@ -2675,9 +2675,9 @@ _bxsubi(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_word_t i1)
|
|||
jit_int32_t t2;
|
||||
|
||||
if (can_sign_extend_short_p(i1) && (i1 & 0xffff) != 0x8000) {
|
||||
t0 = jit_get_reg(jit_class_gpr);
|
||||
t1 = jit_get_reg(jit_class_gpr);
|
||||
t2 = jit_get_reg(jit_class_gpr);
|
||||
t0 = jit_get_reg(jit_class_gpr|jit_class_nospill);
|
||||
t1 = jit_get_reg(jit_class_gpr|jit_class_nospill);
|
||||
t2 = jit_get_reg(jit_class_gpr|jit_class_nospill);
|
||||
SLTI(rn(t0), _ZERO_REGNO, i1);
|
||||
addiu(rn(t1), r0, -i1);
|
||||
SLT(rn(t2), rn(t1), r0);
|
||||
|
@ -2692,7 +2692,7 @@ _bxsubi(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_word_t i1)
|
|||
jit_unget_reg(t0);
|
||||
}
|
||||
else {
|
||||
t0 = jit_get_reg(jit_class_gpr);
|
||||
t0 = jit_get_reg(jit_class_gpr|jit_class_nospill);
|
||||
movi(rn(t0), i1);
|
||||
w = bxsubr(i0, r0, rn(t0));
|
||||
jit_unget_reg(t0);
|
||||
|
@ -2707,8 +2707,8 @@ _bxsubr_u(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1)
|
|||
jit_int32_t t0;
|
||||
jit_int32_t t1;
|
||||
|
||||
t0 = jit_get_reg(jit_class_gpr);
|
||||
t1 = jit_get_reg(jit_class_gpr);
|
||||
t0 = jit_get_reg(jit_class_gpr|jit_class_nospill);
|
||||
t1 = jit_get_reg(jit_class_gpr|jit_class_nospill);
|
||||
subr(rn(t0), r0, r1);
|
||||
SLTU(rn(t1), r0, rn(t0));
|
||||
w = _jit->pc.w;
|
||||
|
@ -2728,8 +2728,8 @@ _bxsubi_u(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_word_t i1)
|
|||
jit_int32_t t1;
|
||||
|
||||
if (can_sign_extend_short_p(i0) && (i0 & 0xffff) != 0x8000) {
|
||||
t0 = jit_get_reg(jit_class_gpr);
|
||||
t1 = jit_get_reg(jit_class_gpr);
|
||||
t0 = jit_get_reg(jit_class_gpr|jit_class_nospill);
|
||||
t1 = jit_get_reg(jit_class_gpr|jit_class_nospill);
|
||||
addiu(rn(t0), r0, -i1);
|
||||
SLTU(rn(t1), r0, rn(t0));
|
||||
w = _jit->pc.w;
|
||||
|
@ -2740,7 +2740,7 @@ _bxsubi_u(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_word_t i1)
|
|||
jit_unget_reg(t0);
|
||||
}
|
||||
else {
|
||||
t0 = jit_get_reg(jit_class_gpr);
|
||||
t0 = jit_get_reg(jit_class_gpr|jit_class_nospill);
|
||||
movi(rn(t0), i1);
|
||||
w = bxsubr_u(i0, r0, rn(t0));
|
||||
jit_unget_reg(t0);
|
||||
|
@ -2753,7 +2753,7 @@ _bmsr(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1)
|
|||
{
|
||||
jit_word_t w;
|
||||
jit_int32_t t0;
|
||||
t0 = jit_get_reg(jit_class_gpr);
|
||||
t0 = jit_get_reg(jit_class_gpr|jit_class_nospill);
|
||||
AND(rn(t0), r0, r1);
|
||||
w = _jit->pc.w;
|
||||
BNE(_ZERO_REGNO, rn(t0), ((i0 - w) >> 2) - 1);
|
||||
|
@ -2767,7 +2767,7 @@ _bmsi(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_word_t i1)
|
|||
{
|
||||
jit_word_t w;
|
||||
jit_int32_t t0;
|
||||
t0 = jit_get_reg(jit_class_gpr);
|
||||
t0 = jit_get_reg(jit_class_gpr|jit_class_nospill);
|
||||
if (can_zero_extend_short_p(i1)) {
|
||||
ANDI(rn(t0), r0, i1);
|
||||
w = _jit->pc.w;
|
||||
|
@ -2787,7 +2787,7 @@ _bmcr(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1)
|
|||
{
|
||||
jit_word_t w;
|
||||
jit_int32_t t0;
|
||||
t0 = jit_get_reg(jit_class_gpr);
|
||||
t0 = jit_get_reg(jit_class_gpr|jit_class_nospill);
|
||||
AND(rn(t0), r0, r1);
|
||||
w = _jit->pc.w;
|
||||
BEQ(_ZERO_REGNO, rn(t0), ((i0 - w) >> 2) - 1);
|
||||
|
@ -2801,7 +2801,7 @@ _bmci(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_word_t i1)
|
|||
{
|
||||
jit_word_t w;
|
||||
jit_int32_t t0;
|
||||
t0 = jit_get_reg(jit_class_gpr);
|
||||
t0 = jit_get_reg(jit_class_gpr|jit_class_nospill);
|
||||
if (can_zero_extend_short_p(i1)) {
|
||||
ANDI(rn(t0), r0, i1);
|
||||
w = _jit->pc.w;
|
||||
|
|
|
@ -571,7 +571,8 @@ _b##name##i_##type(jit_state_t *_jit, \
|
|||
jit_float##size##_t *i1) \
|
||||
{ \
|
||||
jit_word_t word; \
|
||||
jit_int32_t reg = jit_get_reg(jit_class_fpr); \
|
||||
jit_int32_t reg = jit_get_reg(jit_class_fpr| \
|
||||
jit_class_nospill); \
|
||||
movi_##type(rn(reg), i1); \
|
||||
word = b##name##r_##type(i0, r0, rn(reg)); \
|
||||
jit_unget_reg(reg); \
|
||||
|
|
|
@ -1931,7 +1931,7 @@ _bmsr(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1)
|
|||
{
|
||||
jit_word_t w;
|
||||
jit_int32_t reg;
|
||||
reg = jit_get_reg(jit_class_gpr);
|
||||
reg = jit_get_reg(jit_class_gpr|jit_class_nospill);
|
||||
andr(rn(reg), r0, r1);
|
||||
w = bnei(i0, rn(reg), 0);
|
||||
jit_unget_reg(reg);
|
||||
|
@ -1943,7 +1943,7 @@ _bmsi(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_word_t i1)
|
|||
{
|
||||
jit_word_t w;
|
||||
jit_int32_t reg;
|
||||
reg = jit_get_reg(jit_class_gpr);
|
||||
reg = jit_get_reg(jit_class_gpr|jit_class_nospill);
|
||||
andi(rn(reg), r0, i1);
|
||||
w = bnei(i0, rn(reg), 0);
|
||||
jit_unget_reg(reg);
|
||||
|
@ -1955,7 +1955,7 @@ _bmcr(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1)
|
|||
{
|
||||
jit_word_t w;
|
||||
jit_int32_t reg;
|
||||
reg = jit_get_reg(jit_class_gpr);
|
||||
reg = jit_get_reg(jit_class_gpr|jit_class_nospill);
|
||||
andr(rn(reg), r0, r1);
|
||||
w = beqi(i0, rn(reg), 0);
|
||||
jit_unget_reg(reg);
|
||||
|
@ -1967,7 +1967,7 @@ _bmci(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_word_t i1)
|
|||
{
|
||||
jit_word_t w;
|
||||
jit_int32_t reg;
|
||||
reg = jit_get_reg(jit_class_gpr);
|
||||
reg = jit_get_reg(jit_class_gpr|jit_class_nospill);
|
||||
andi(rn(reg), r0, i1);
|
||||
w = beqi(i0, rn(reg), 0);
|
||||
jit_unget_reg(reg);
|
||||
|
@ -1991,7 +1991,7 @@ _boaddi(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_word_t i1)
|
|||
{
|
||||
jit_word_t w;
|
||||
jit_int32_t reg;
|
||||
reg = jit_get_reg(jit_class_gpr);
|
||||
reg = jit_get_reg(jit_class_gpr|jit_class_nospill);
|
||||
movi(rn(reg), i1);
|
||||
w = boaddr(i0, r0, rn(reg));
|
||||
jit_unget_reg(reg);
|
||||
|
@ -2015,7 +2015,7 @@ _bxaddi(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_word_t i1)
|
|||
{
|
||||
jit_word_t w;
|
||||
jit_int32_t reg;
|
||||
reg = jit_get_reg(jit_class_gpr);
|
||||
reg = jit_get_reg(jit_class_gpr|jit_class_nospill);
|
||||
movi(rn(reg), i1);
|
||||
w = bxaddr(i0, r0, rn(reg));
|
||||
jit_unget_reg(reg);
|
||||
|
@ -2039,7 +2039,7 @@ _bosubi(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_word_t i1)
|
|||
{
|
||||
jit_word_t w;
|
||||
jit_int32_t reg;
|
||||
reg = jit_get_reg(jit_class_gpr);
|
||||
reg = jit_get_reg(jit_class_gpr|jit_class_nospill);
|
||||
movi(rn(reg), i1);
|
||||
w = bosubr(i0, r0, rn(reg));
|
||||
jit_unget_reg(reg);
|
||||
|
@ -2063,7 +2063,7 @@ _bxsubi(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_word_t i1)
|
|||
{
|
||||
jit_word_t w;
|
||||
jit_int32_t reg;
|
||||
reg = jit_get_reg(jit_class_gpr);
|
||||
reg = jit_get_reg(jit_class_gpr|jit_class_nospill);
|
||||
movi(rn(reg), i1);
|
||||
w = bxsubr(i0, r0, rn(reg));
|
||||
jit_unget_reg(reg);
|
||||
|
@ -2095,7 +2095,7 @@ _boaddi_u(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_word_t i1)
|
|||
BEQ(d);
|
||||
return (w);
|
||||
}
|
||||
reg = jit_get_reg(jit_class_gpr);
|
||||
reg = jit_get_reg(jit_class_gpr|jit_class_nospill);
|
||||
movi(rn(reg), i1);
|
||||
w = boaddr_u(i0, r0, rn(reg));
|
||||
jit_unget_reg(reg);
|
||||
|
@ -2127,7 +2127,7 @@ _bxaddi_u(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_word_t i1)
|
|||
BNE(d);
|
||||
return (w);
|
||||
}
|
||||
reg = jit_get_reg(jit_class_gpr);
|
||||
reg = jit_get_reg(jit_class_gpr|jit_class_nospill);
|
||||
movi(rn(reg), i1);
|
||||
w = bxaddr_u(i0, r0, rn(reg));
|
||||
jit_unget_reg(reg);
|
||||
|
@ -2151,7 +2151,7 @@ _bosubi_u(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_word_t i1)
|
|||
{
|
||||
jit_word_t w;
|
||||
jit_int32_t reg;
|
||||
reg = jit_get_reg(jit_class_gpr);
|
||||
reg = jit_get_reg(jit_class_gpr|jit_class_nospill);
|
||||
movi(rn(reg), i1);
|
||||
w = bosubr_u(i0, r0, rn(reg));
|
||||
jit_unget_reg(reg);
|
||||
|
@ -2175,7 +2175,7 @@ _bxsubi_u(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_word_t i1)
|
|||
{
|
||||
jit_word_t w;
|
||||
jit_int32_t reg;
|
||||
reg = jit_get_reg(jit_class_gpr);
|
||||
reg = jit_get_reg(jit_class_gpr|jit_class_nospill);
|
||||
movi(rn(reg), i1);
|
||||
w = bxsubr_u(i0, r0, rn(reg));
|
||||
jit_unget_reg(reg);
|
||||
|
|
|
@ -549,7 +549,8 @@ _b##name##i_##type(jit_state_t *_jit, \
|
|||
jit_float##size##_t *i1) \
|
||||
{ \
|
||||
jit_word_t word; \
|
||||
jit_int32_t reg = jit_get_reg(jit_class_fpr); \
|
||||
jit_int32_t reg = jit_get_reg(jit_class_fpr| \
|
||||
jit_class_nospill); \
|
||||
movi_##type(rn(reg), i1); \
|
||||
word = b##name##r_##type(i0, r0, rn(reg)); \
|
||||
jit_unget_reg(reg); \
|
||||
|
|
|
@ -1999,7 +1999,7 @@ _bri(jit_state_t *_jit, jit_int32_t cc,
|
|||
jit_word_t i0, jit_int32_t r0, jit_word_t i1)
|
||||
{
|
||||
jit_int32_t reg;
|
||||
reg = jit_get_reg(jit_class_gpr);
|
||||
reg = jit_get_reg(jit_class_gpr|jit_class_nospill);
|
||||
movi(rn(reg), i1);
|
||||
brr(cc, i0, r0, rn(reg));
|
||||
jit_unget_reg(reg);
|
||||
|
@ -2011,7 +2011,7 @@ _bri_p(jit_state_t *_jit, jit_int32_t cc,
|
|||
{
|
||||
jit_word_t w;
|
||||
jit_int32_t reg;
|
||||
reg = jit_get_reg(jit_class_gpr);
|
||||
reg = jit_get_reg(jit_class_gpr|jit_class_nospill);
|
||||
movi(rn(reg), i1);
|
||||
w = brr_p(cc, i0, r0, rn(reg));
|
||||
jit_unget_reg(reg);
|
||||
|
@ -2049,7 +2049,7 @@ _bri_u(jit_state_t *_jit, jit_int32_t cc,
|
|||
jit_word_t i0, jit_int32_t r0, jit_word_t i1)
|
||||
{
|
||||
jit_int32_t reg;
|
||||
reg = jit_get_reg(jit_class_gpr);
|
||||
reg = jit_get_reg(jit_class_gpr|jit_class_nospill);
|
||||
movi(rn(reg), i1);
|
||||
brr_u(cc, i0, r0, rn(reg));
|
||||
jit_unget_reg(reg);
|
||||
|
@ -2061,7 +2061,7 @@ _bri_u_p(jit_state_t *_jit, jit_int32_t cc,
|
|||
{
|
||||
jit_word_t w;
|
||||
jit_int32_t reg;
|
||||
reg = jit_get_reg(jit_class_gpr);
|
||||
reg = jit_get_reg(jit_class_gpr|jit_class_nospill);
|
||||
movi(rn(reg), i1);
|
||||
w = brr_u_p(cc, i0, r0, rn(reg));
|
||||
jit_unget_reg(reg);
|
||||
|
@ -2089,7 +2089,7 @@ _baddi(jit_state_t *_jit, jit_int32_t c, jit_bool_t s,
|
|||
jit_word_t i0, jit_int32_t r0, jit_word_t i1)
|
||||
{
|
||||
jit_int32_t reg;
|
||||
reg = jit_get_reg(jit_class_gpr);
|
||||
reg = jit_get_reg(jit_class_gpr|jit_class_nospill);
|
||||
movi(rn(reg), i1);
|
||||
baddr(c, s, i0, r0, rn(reg));
|
||||
jit_unget_reg(reg);
|
||||
|
@ -2114,7 +2114,7 @@ _baddi_p(jit_state_t *_jit, jit_int32_t c, jit_bool_t s,
|
|||
{
|
||||
jit_word_t w;
|
||||
jit_int32_t reg;
|
||||
reg = jit_get_reg(jit_class_gpr);
|
||||
reg = jit_get_reg(jit_class_gpr|jit_class_nospill);
|
||||
movi(rn(reg), i1);
|
||||
w = baddr_p(c, s, i0, r0, rn(reg));
|
||||
jit_unget_reg(reg);
|
||||
|
@ -2142,7 +2142,7 @@ _bsubi(jit_state_t *_jit, jit_int32_t c, jit_bool_t s,
|
|||
jit_word_t i0, jit_int32_t r0, jit_word_t i1)
|
||||
{
|
||||
jit_int32_t reg;
|
||||
reg = jit_get_reg(jit_class_gpr);
|
||||
reg = jit_get_reg(jit_class_gpr|jit_class_nospill);
|
||||
movi(rn(reg), i1);
|
||||
bsubr(c, s, i0, r0, rn(reg));
|
||||
jit_unget_reg(reg);
|
||||
|
@ -2167,7 +2167,7 @@ _bsubi_p(jit_state_t *_jit, jit_int32_t c, jit_bool_t s,
|
|||
{
|
||||
jit_word_t w;
|
||||
jit_int32_t reg;
|
||||
reg = jit_get_reg(jit_class_gpr);
|
||||
reg = jit_get_reg(jit_class_gpr|jit_class_nospill);
|
||||
movi(rn(reg), i1);
|
||||
w = bsubr_p(c, s, i0, r0, rn(reg));
|
||||
jit_unget_reg(reg);
|
||||
|
@ -2657,7 +2657,7 @@ static void
|
|||
_lshi(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0)
|
||||
{
|
||||
jit_int32_t reg;
|
||||
reg = jit_get_reg_but_zero();
|
||||
reg = jit_get_reg_but_zero(0);
|
||||
movi(rn(reg), i0);
|
||||
lshr(r0, r1, rn(reg));
|
||||
jit_unget_reg_but_zero(reg);
|
||||
|
@ -2667,7 +2667,7 @@ static void
|
|||
_rshi(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0)
|
||||
{
|
||||
jit_int32_t reg;
|
||||
reg = jit_get_reg_but_zero();
|
||||
reg = jit_get_reg_but_zero(0);
|
||||
movi(rn(reg), i0);
|
||||
rshr(r0, r1, rn(reg));
|
||||
jit_unget_reg_but_zero(reg);
|
||||
|
@ -2677,7 +2677,7 @@ static void
|
|||
_rshi_u(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0)
|
||||
{
|
||||
jit_int32_t reg;
|
||||
reg = jit_get_reg_but_zero();
|
||||
reg = jit_get_reg_but_zero(0);
|
||||
movi(rn(reg), i0);
|
||||
rshr_u(r0, r1, rn(reg));
|
||||
jit_unget_reg_but_zero(reg);
|
||||
|
@ -2790,7 +2790,7 @@ _ldxi_c(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0)
|
|||
ldr_c(r0, r0);
|
||||
}
|
||||
else {
|
||||
reg = jit_get_reg_but_zero();
|
||||
reg = jit_get_reg_but_zero(0);
|
||||
movi(rn(reg), i0);
|
||||
AGR(rn(reg), r1);
|
||||
ldr_c(r0, rn(reg));
|
||||
|
@ -2831,7 +2831,7 @@ _ldxi_uc(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0)
|
|||
ldr_uc(r0, r0);
|
||||
}
|
||||
else {
|
||||
reg = jit_get_reg_but_zero();
|
||||
reg = jit_get_reg_but_zero(0);
|
||||
movi(rn(reg), i0);
|
||||
AGR(rn(reg), r1);
|
||||
ldr_uc(r0, rn(reg));
|
||||
|
@ -2872,7 +2872,7 @@ _ldxi_s(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0)
|
|||
ldr_s(r0, r0);
|
||||
}
|
||||
else {
|
||||
reg = jit_get_reg_but_zero();
|
||||
reg = jit_get_reg_but_zero(0);
|
||||
movi(rn(reg), i0);
|
||||
AGR(rn(reg), r1);
|
||||
ldr_s(r0, rn(reg));
|
||||
|
@ -2913,7 +2913,7 @@ _ldxi_us(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0)
|
|||
ldr_us(r0, r0);
|
||||
}
|
||||
else {
|
||||
reg = jit_get_reg_but_zero();
|
||||
reg = jit_get_reg_but_zero(0);
|
||||
movi(rn(reg), i0);
|
||||
AGR(rn(reg), r1);
|
||||
ldr_us(r0, rn(reg));
|
||||
|
@ -2954,7 +2954,7 @@ _ldxi_i(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0)
|
|||
ldr_i(r0, r0);
|
||||
}
|
||||
else {
|
||||
reg = jit_get_reg_but_zero();
|
||||
reg = jit_get_reg_but_zero(0);
|
||||
movi(rn(reg), i0);
|
||||
AGR(rn(reg), r1);
|
||||
ldr_i(r0, rn(reg));
|
||||
|
@ -2995,7 +2995,7 @@ _ldxi_ui(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0)
|
|||
ldr_ui(r0, r0);
|
||||
}
|
||||
else {
|
||||
reg = jit_get_reg_but_zero();
|
||||
reg = jit_get_reg_but_zero(0);
|
||||
movi(rn(reg), i0);
|
||||
AGR(rn(reg), r1);
|
||||
ldr_ui(r0, rn(reg));
|
||||
|
@ -3036,7 +3036,7 @@ _ldxi_l(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0)
|
|||
ldr_l(r0, r0);
|
||||
}
|
||||
else {
|
||||
reg = jit_get_reg_but_zero();
|
||||
reg = jit_get_reg_but_zero(0);
|
||||
movi(rn(reg), i0);
|
||||
AGR(rn(reg), r1);
|
||||
ldr_l(r0, rn(reg));
|
||||
|
@ -3048,7 +3048,7 @@ static void
|
|||
_sti_c(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0)
|
||||
{
|
||||
jit_int32_t reg;
|
||||
reg = jit_get_reg_but_zero();
|
||||
reg = jit_get_reg_but_zero(0);
|
||||
movi(rn(reg), i0);
|
||||
str_c(rn(reg), r0);
|
||||
jit_unget_reg_but_zero(reg);
|
||||
|
@ -3058,7 +3058,7 @@ static void
|
|||
_stxr_c(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2)
|
||||
{
|
||||
jit_int32_t reg;
|
||||
reg = jit_get_reg_but_zero();
|
||||
reg = jit_get_reg_but_zero(0);
|
||||
movr(rn(reg), r0);
|
||||
AGR(rn(reg), r1);
|
||||
str_c(rn(reg), r2);
|
||||
|
@ -3074,7 +3074,7 @@ _stxi_c(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1)
|
|||
else if (s20_p(i0))
|
||||
STCY(r1, x20(i0), 0, r0);
|
||||
else {
|
||||
reg = jit_get_reg_but_zero();
|
||||
reg = jit_get_reg_but_zero(0);
|
||||
addi(rn(reg), r0, i0);
|
||||
str_c(rn(reg), r1);
|
||||
jit_unget_reg_but_zero(reg);
|
||||
|
@ -3085,7 +3085,7 @@ static void
|
|||
_sti_s(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0)
|
||||
{
|
||||
jit_int32_t reg;
|
||||
reg = jit_get_reg_but_zero();
|
||||
reg = jit_get_reg_but_zero(0);
|
||||
movi(rn(reg), i0);
|
||||
str_s(rn(reg), r0);
|
||||
jit_unget_reg_but_zero(reg);
|
||||
|
@ -3095,7 +3095,7 @@ static void
|
|||
_stxr_s(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2)
|
||||
{
|
||||
jit_int32_t reg;
|
||||
reg = jit_get_reg_but_zero();
|
||||
reg = jit_get_reg_but_zero(0);
|
||||
movr(rn(reg), r0);
|
||||
AGR(rn(reg), r1);
|
||||
str_s(rn(reg), r2);
|
||||
|
@ -3111,7 +3111,7 @@ _stxi_s(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1)
|
|||
else if (s20_p(i0))
|
||||
STHY(r1, x20(i0), 0, r0);
|
||||
else {
|
||||
reg = jit_get_reg_but_zero();
|
||||
reg = jit_get_reg_but_zero(0);
|
||||
addi(rn(reg), r0, i0);
|
||||
str_s(r1, rn(reg));
|
||||
jit_unget_reg_but_zero(reg);
|
||||
|
@ -3122,7 +3122,7 @@ static void
|
|||
_sti_i(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0)
|
||||
{
|
||||
jit_int32_t reg;
|
||||
reg = jit_get_reg_but_zero();
|
||||
reg = jit_get_reg_but_zero(0);
|
||||
movi(rn(reg), i0);
|
||||
str_i(rn(reg), r0);
|
||||
jit_unget_reg_but_zero(reg);
|
||||
|
@ -3132,7 +3132,7 @@ static void
|
|||
_stxr_i(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2)
|
||||
{
|
||||
jit_int32_t reg;
|
||||
reg = jit_get_reg_but_zero();
|
||||
reg = jit_get_reg_but_zero(0);
|
||||
movr(rn(reg), r0);
|
||||
AGR(rn(reg), r1);
|
||||
str_i(rn(reg), r2);
|
||||
|
@ -3148,7 +3148,7 @@ _stxi_i(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1)
|
|||
else if (s20_p(i0))
|
||||
STY(r1, x20(i0), 0, r0);
|
||||
else {
|
||||
reg = jit_get_reg_but_zero();
|
||||
reg = jit_get_reg_but_zero(0);
|
||||
addi(rn(reg), r0, i0);
|
||||
str_i(rn(reg), r1);
|
||||
jit_unget_reg_but_zero(reg);
|
||||
|
@ -3159,7 +3159,7 @@ static void
|
|||
_sti_l(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0)
|
||||
{
|
||||
jit_int32_t reg;
|
||||
reg = jit_get_reg_but_zero();
|
||||
reg = jit_get_reg_but_zero(0);
|
||||
movi(rn(reg), i0);
|
||||
str_l(rn(reg), r0);
|
||||
jit_unget_reg_but_zero(reg);
|
||||
|
@ -3169,7 +3169,7 @@ static void
|
|||
_stxr_l(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2)
|
||||
{
|
||||
jit_int32_t reg;
|
||||
reg = jit_get_reg_but_zero();
|
||||
reg = jit_get_reg_but_zero(0);
|
||||
movr(rn(reg), r0);
|
||||
AGR(rn(reg), r1);
|
||||
str_l(rn(reg), r2);
|
||||
|
@ -3183,7 +3183,7 @@ _stxi_l(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1)
|
|||
if (s20_p(i0))
|
||||
STG(r1, x20(i0), 0, r0);
|
||||
else {
|
||||
reg = jit_get_reg_but_zero();
|
||||
reg = jit_get_reg_but_zero(0);
|
||||
addi(rn(reg), r0, i0);
|
||||
str_l(rn(reg), r1);
|
||||
jit_unget_reg_but_zero(reg);
|
||||
|
@ -3201,7 +3201,7 @@ _jmpi(jit_state_t *_jit, jit_word_t i0)
|
|||
else if (s32_p(d))
|
||||
BRL(d);
|
||||
else {
|
||||
reg = jit_get_reg_but_zero();
|
||||
reg = jit_get_reg_but_zero(jit_class_nospill);
|
||||
movi(rn(reg), i0);
|
||||
jmpr(rn(reg));
|
||||
jit_unget_reg_but_zero(reg);
|
||||
|
@ -3213,7 +3213,7 @@ _jmpi_p(jit_state_t *_jit, jit_word_t i0)
|
|||
{
|
||||
jit_word_t w;
|
||||
jit_int32_t reg;
|
||||
reg = jit_get_reg_but_zero();
|
||||
reg = jit_get_reg_but_zero(jit_class_nospill);
|
||||
w = movi_p(rn(reg), i0);
|
||||
jmpr(rn(reg));
|
||||
jit_unget_reg_but_zero(reg);
|
||||
|
@ -3229,7 +3229,7 @@ _calli(jit_state_t *_jit, jit_word_t i0)
|
|||
if (s32_p(d))
|
||||
BRASL(_R14_REGNO, d);
|
||||
else {
|
||||
reg = jit_get_reg_but_zero();
|
||||
reg = jit_get_reg_but_zero(0);
|
||||
movi(rn(reg), i0);
|
||||
callr(rn(reg));
|
||||
jit_unget_reg_but_zero(reg);
|
||||
|
@ -3241,7 +3241,7 @@ _calli_p(jit_state_t *_jit, jit_word_t i0)
|
|||
{
|
||||
jit_word_t w;
|
||||
jit_int32_t reg;
|
||||
reg = jit_get_reg_but_zero();
|
||||
reg = jit_get_reg_but_zero(0);
|
||||
w = movi_p(rn(reg), i0);
|
||||
callr(rn(reg));
|
||||
jit_unget_reg_but_zero(reg);
|
||||
|
|
|
@ -656,7 +656,7 @@ _fi(jit_state_t *_jit, jit_int32_t cc,
|
|||
jit_int32_t r0, jit_int32_t r1, jit_float32_t *i0)
|
||||
{
|
||||
jit_int32_t reg;
|
||||
reg = jit_get_reg(jit_class_fpr);
|
||||
reg = jit_get_reg(jit_class_fpr|jit_class_nospill);
|
||||
movi_f(rn(reg), i0);
|
||||
fr(cc, r0, r1, rn(reg));
|
||||
jit_unget_reg(reg);
|
||||
|
@ -667,7 +667,7 @@ _di(jit_state_t *_jit, jit_int32_t cc,
|
|||
jit_int32_t r0, jit_int32_t r1, jit_float64_t *i0)
|
||||
{
|
||||
jit_int32_t reg;
|
||||
reg = jit_get_reg(jit_class_fpr);
|
||||
reg = jit_get_reg(jit_class_fpr|jit_class_nospill);
|
||||
movi_d(rn(reg), i0);
|
||||
dr(cc, r0, r1, rn(reg));
|
||||
jit_unget_reg(reg);
|
||||
|
@ -731,7 +731,7 @@ _bfi(jit_state_t *_jit, jit_int32_t cc,
|
|||
jit_word_t i0, jit_int32_t r0, jit_float32_t *i1)
|
||||
{
|
||||
jit_int32_t reg;
|
||||
reg = jit_get_reg(jit_class_gpr);
|
||||
reg = jit_get_reg(jit_class_gpr|jit_class_nospill);
|
||||
movi_f(rn(reg), i1);
|
||||
bfr(cc, i0, r0, rn(reg));
|
||||
jit_unget_reg(reg);
|
||||
|
@ -742,7 +742,7 @@ _bdi(jit_state_t *_jit, jit_int32_t cc,
|
|||
jit_word_t i0, jit_int32_t r0, jit_float64_t *i1)
|
||||
{
|
||||
jit_int32_t reg;
|
||||
reg = jit_get_reg(jit_class_gpr);
|
||||
reg = jit_get_reg(jit_class_gpr|jit_class_nospill);
|
||||
movi_d(rn(reg), i1);
|
||||
bdr(cc, i0, r0, rn(reg));
|
||||
jit_unget_reg(reg);
|
||||
|
@ -754,7 +754,7 @@ _bfi_p(jit_state_t *_jit, jit_int32_t cc,
|
|||
{
|
||||
jit_word_t w;
|
||||
jit_int32_t reg;
|
||||
reg = jit_get_reg(jit_class_gpr);
|
||||
reg = jit_get_reg(jit_class_gpr|jit_class_nospill);
|
||||
movi_f(rn(reg), i1);
|
||||
w = bfr_p(cc, i0, r0, rn(reg));
|
||||
jit_unget_reg(reg);
|
||||
|
@ -767,7 +767,7 @@ _bdi_p(jit_state_t *_jit, jit_int32_t cc,
|
|||
{
|
||||
jit_word_t w;
|
||||
jit_int32_t reg;
|
||||
reg = jit_get_reg(jit_class_gpr);
|
||||
reg = jit_get_reg(jit_class_gpr|jit_class_nospill);
|
||||
movi_d(rn(reg), i1);
|
||||
w = bdr_p(cc, i0, r0, rn(reg));
|
||||
jit_unget_reg(reg);
|
||||
|
@ -798,7 +798,7 @@ _buneqi(jit_state_t *_jit, jit_int32_t db,
|
|||
{
|
||||
jit_word_t w;
|
||||
jit_int32_t reg;
|
||||
reg = jit_get_reg(jit_class_fpr);
|
||||
reg = jit_get_reg(jit_class_fpr|jit_class_nospill);
|
||||
if (db)
|
||||
movi_d(rn(reg), (jit_float64_t *)i1);
|
||||
else
|
||||
|
@ -832,7 +832,7 @@ _bltgti(jit_state_t *_jit, jit_int32_t db,
|
|||
{
|
||||
jit_word_t w;
|
||||
jit_int32_t reg;
|
||||
reg = jit_get_reg(jit_class_fpr);
|
||||
reg = jit_get_reg(jit_class_fpr|jit_class_nospill);
|
||||
if (db)
|
||||
movi_d(rn(reg), (jit_float64_t *)i1);
|
||||
else
|
||||
|
@ -862,7 +862,7 @@ _movi_f(jit_state_t *_jit, jit_int32_t r0, jit_float32_t *i0)
|
|||
LZER(r0);
|
||||
else if (_jitc->no_data) {
|
||||
data.f = *i0;
|
||||
reg = jit_get_reg_but_zero();
|
||||
reg = jit_get_reg_but_zero(0);
|
||||
movi(rn(reg), data.i & 0xffffffff);
|
||||
stxi_i(-4, _FP_REGNO, rn(reg));
|
||||
jit_unget_reg_but_zero(reg);
|
||||
|
@ -892,7 +892,7 @@ _movi_d(jit_state_t *_jit, jit_int32_t r0, jit_float64_t *i0)
|
|||
LZDR(r0);
|
||||
else if (_jitc->no_data) {
|
||||
data.d = *i0;
|
||||
reg = jit_get_reg_but_zero();
|
||||
reg = jit_get_reg_but_zero(0);
|
||||
movi(rn(reg), data.l);
|
||||
stxi_l(-8, _FP_REGNO, rn(reg));
|
||||
jit_unget_reg_but_zero(reg);
|
||||
|
@ -1018,7 +1018,7 @@ static void
|
|||
_ldi_f(jit_state_t *_jit, jit_int32_t r0, jit_word_t i0)
|
||||
{
|
||||
jit_int32_t reg;
|
||||
reg = jit_get_reg_but_zero();
|
||||
reg = jit_get_reg_but_zero(0);
|
||||
movi(rn(reg), i0);
|
||||
ldr_f(r0, rn(reg));
|
||||
jit_unget_reg_but_zero(reg);
|
||||
|
@ -1028,7 +1028,7 @@ static void
|
|||
_ldi_d(jit_state_t *_jit, jit_int32_t r0, jit_word_t i0)
|
||||
{
|
||||
jit_int32_t reg;
|
||||
reg = jit_get_reg_but_zero();
|
||||
reg = jit_get_reg_but_zero(0);
|
||||
movi(rn(reg), i0);
|
||||
ldr_d(r0, rn(reg));
|
||||
jit_unget_reg_but_zero(reg);
|
||||
|
@ -1038,7 +1038,7 @@ static void
|
|||
_ldxr_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2)
|
||||
{
|
||||
jit_int32_t reg;
|
||||
reg = jit_get_reg_but_zero();
|
||||
reg = jit_get_reg_but_zero(0);
|
||||
movr(rn(reg), r1);
|
||||
AGR(rn(reg), r2);
|
||||
ldr_f(r0, rn(reg));
|
||||
|
@ -1049,7 +1049,7 @@ static void
|
|||
_ldxr_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2)
|
||||
{
|
||||
jit_int32_t reg;
|
||||
reg = jit_get_reg_but_zero();
|
||||
reg = jit_get_reg_but_zero(0);
|
||||
movr(rn(reg), r1);
|
||||
AGR(rn(reg), r2);
|
||||
ldr_d(r0, rn(reg));
|
||||
|
@ -1065,7 +1065,7 @@ _ldxi_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0)
|
|||
else if (s20_p(i0))
|
||||
LEY(r0, x20(i0), 0, r1);
|
||||
else {
|
||||
reg = jit_get_reg_but_zero();
|
||||
reg = jit_get_reg_but_zero(0);
|
||||
movi(rn(reg), i0);
|
||||
AGR(rn(reg), r1);
|
||||
ldr_f(r0, rn(reg));
|
||||
|
@ -1082,7 +1082,7 @@ _ldxi_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0)
|
|||
else if (s20_p(i0))
|
||||
LDY(r0, x20(i0), 0, r1);
|
||||
else {
|
||||
reg = jit_get_reg_but_zero();
|
||||
reg = jit_get_reg_but_zero(0);
|
||||
movi(rn(reg), i0);
|
||||
AGR(rn(reg), r1);
|
||||
ldr_d(r0, rn(reg));
|
||||
|
@ -1094,7 +1094,7 @@ static void
|
|||
_sti_f(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0)
|
||||
{
|
||||
jit_int32_t reg;
|
||||
reg = jit_get_reg_but_zero();
|
||||
reg = jit_get_reg_but_zero(0);
|
||||
movi(rn(reg), i0);
|
||||
str_f(rn(reg), r0);
|
||||
jit_unget_reg_but_zero(reg);
|
||||
|
@ -1104,7 +1104,7 @@ static void
|
|||
_sti_d(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0)
|
||||
{
|
||||
jit_int32_t reg;
|
||||
reg = jit_get_reg_but_zero();
|
||||
reg = jit_get_reg_but_zero(0);
|
||||
movi(rn(reg), i0);
|
||||
str_d(rn(reg), r0);
|
||||
jit_unget_reg_but_zero(reg);
|
||||
|
@ -1114,7 +1114,7 @@ static void
|
|||
_stxr_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2)
|
||||
{
|
||||
jit_int32_t reg;
|
||||
reg = jit_get_reg_but_zero();
|
||||
reg = jit_get_reg_but_zero(0);
|
||||
movr(rn(reg), r0);
|
||||
AGR(rn(reg), r1);
|
||||
str_f(rn(reg), r2);
|
||||
|
@ -1125,7 +1125,7 @@ static void
|
|||
_stxr_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2)
|
||||
{
|
||||
jit_int32_t reg;
|
||||
reg = jit_get_reg_but_zero();
|
||||
reg = jit_get_reg_but_zero(0);
|
||||
movr(rn(reg), r0);
|
||||
AGR(rn(reg), r1);
|
||||
str_d(rn(reg), r2);
|
||||
|
@ -1141,7 +1141,7 @@ _stxi_f(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1)
|
|||
else if (s20_p(i0))
|
||||
STEY(r1, x20(i0), 0, r0);
|
||||
else {
|
||||
reg = jit_get_reg_but_zero();
|
||||
reg = jit_get_reg_but_zero(0);
|
||||
movi(rn(reg), i0);
|
||||
AGR(rn(reg), r0);
|
||||
str_f(rn(reg), r1);
|
||||
|
@ -1158,7 +1158,7 @@ _stxi_d(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1)
|
|||
else if (s20_p(i0))
|
||||
STDY(r1, x20(i0), 0, r0);
|
||||
else {
|
||||
reg = jit_get_reg_but_zero();
|
||||
reg = jit_get_reg_but_zero(0);
|
||||
movi(rn(reg), i0);
|
||||
AGR(rn(reg), r0);
|
||||
str_d(rn(reg), r1);
|
||||
|
|
|
@ -30,8 +30,8 @@
|
|||
static jit_int32_t _jit_get_reg_pair(jit_state_t*);
|
||||
#define jit_unget_reg_pair(regno) _jit_unget_reg_pair(_jit,regno)
|
||||
static void _jit_unget_reg_pair(jit_state_t*,jit_int32_t);
|
||||
#define jit_get_reg_but_zero() _jit_get_reg_but_zero(_jit)
|
||||
static jit_int32_t _jit_get_reg_but_zero(jit_state_t*);
|
||||
#define jit_get_reg_but_zero(flags) _jit_get_reg_but_zero(_jit,flags)
|
||||
static jit_int32_t _jit_get_reg_but_zero(jit_state_t*,jit_int32_t);
|
||||
#define jit_unget_reg_but_zero(reg) jit_unget_reg(reg)
|
||||
#define patch(instr, node) _patch(_jit, instr, node)
|
||||
static void _patch(jit_state_t*,jit_word_t,jit_node_t*);
|
||||
|
@ -1239,12 +1239,12 @@ _jit_unget_reg_pair(jit_state_t *_jit, jit_int32_t reg)
|
|||
}
|
||||
|
||||
static jit_int32_t
|
||||
_jit_get_reg_but_zero(jit_state_t *_jit)
|
||||
_jit_get_reg_but_zero(jit_state_t *_jit, jit_int32_t flags)
|
||||
{
|
||||
jit_int32_t reg;
|
||||
reg = jit_get_reg(jit_class_gpr);
|
||||
if (reg == _R0) {
|
||||
reg = jit_get_reg(jit_class_gpr);
|
||||
reg = jit_get_reg(jit_class_gpr|flags);
|
||||
jit_unget_reg(_R0);
|
||||
}
|
||||
return (reg);
|
||||
|
|
|
@ -1466,7 +1466,7 @@ _bw(jit_state_t *_jit, jit_int32_t cc,
|
|||
NOP();
|
||||
}
|
||||
else {
|
||||
reg = jit_get_reg(jit_class_gpr);
|
||||
reg = jit_get_reg(jit_class_gpr|jit_class_nospill);
|
||||
movi(rn(reg), i1);
|
||||
w = br(cc, i0, r0, rn(reg));
|
||||
jit_unget_reg(reg);
|
||||
|
@ -1511,7 +1511,7 @@ _b_asw(jit_state_t *_jit, jit_bool_t jif, jit_bool_t add, jit_bool_t sgn,
|
|||
NOP();
|
||||
}
|
||||
else {
|
||||
reg = jit_get_reg(jit_class_gpr);
|
||||
reg = jit_get_reg(jit_class_gpr|jit_class_nospill);
|
||||
movi(rn(reg), i1);
|
||||
w = b_asr(jif, add, sgn, i0, r0, rn(reg));
|
||||
jit_unget_reg(reg);
|
||||
|
@ -1544,7 +1544,7 @@ _bm_w(jit_state_t *_jit, jit_bool_t set,
|
|||
NOP();
|
||||
}
|
||||
else {
|
||||
reg = jit_get_reg(jit_class_gpr);
|
||||
reg = jit_get_reg(jit_class_gpr|jit_class_nospill);
|
||||
movi(rn(reg), i1);
|
||||
w = bm_r(set, i0, r0, rn(reg));
|
||||
jit_unget_reg(reg);
|
||||
|
|
|
@ -3089,7 +3089,7 @@ _boaddi(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_word_t i1)
|
|||
jo(i0);
|
||||
return (_jit->pc.w);
|
||||
}
|
||||
reg = jit_get_reg(jit_class_gpr);
|
||||
reg = jit_get_reg(jit_class_gpr|jit_class_nospill);
|
||||
movi(rn(reg), i1);
|
||||
jit_unget_reg(reg);
|
||||
return (boaddr(i0, r0, rn(reg)));
|
||||
|
@ -3112,7 +3112,7 @@ _boaddi_u(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_word_t i1)
|
|||
jc(i0);
|
||||
return (_jit->pc.w);
|
||||
}
|
||||
reg = jit_get_reg(jit_class_gpr);
|
||||
reg = jit_get_reg(jit_class_gpr|jit_class_nospill);
|
||||
movi(rn(reg), i1);
|
||||
jit_unget_reg(reg);
|
||||
return (boaddr_u(i0, r0, rn(reg)));
|
||||
|
@ -3135,7 +3135,7 @@ _bxaddi(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_word_t i1)
|
|||
jno(i0);
|
||||
return (_jit->pc.w);
|
||||
}
|
||||
reg = jit_get_reg(jit_class_gpr);
|
||||
reg = jit_get_reg(jit_class_gpr|jit_class_nospill);
|
||||
movi(rn(reg), i1);
|
||||
jit_unget_reg(reg);
|
||||
return (bxaddr(i0, r0, rn(reg)));
|
||||
|
@ -3158,7 +3158,7 @@ _bxaddi_u(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_word_t i1)
|
|||
jnc(i0);
|
||||
return (_jit->pc.w);
|
||||
}
|
||||
reg = jit_get_reg(jit_class_gpr);
|
||||
reg = jit_get_reg(jit_class_gpr|jit_class_nospill);
|
||||
movi(rn(reg), i1);
|
||||
jit_unget_reg(reg);
|
||||
return (bxaddr_u(i0, r0, rn(reg)));
|
||||
|
@ -3181,7 +3181,7 @@ _bosubi(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_word_t i1)
|
|||
jo(i0);
|
||||
return (_jit->pc.w);
|
||||
}
|
||||
reg = jit_get_reg(jit_class_gpr);
|
||||
reg = jit_get_reg(jit_class_gpr|jit_class_nospill);
|
||||
movi(rn(reg), i1);
|
||||
jit_unget_reg(reg);
|
||||
return (bosubr(i0, r0, rn(reg)));
|
||||
|
@ -3204,7 +3204,7 @@ _bosubi_u(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_word_t i1)
|
|||
jc(i0);
|
||||
return (_jit->pc.w);
|
||||
}
|
||||
reg = jit_get_reg(jit_class_gpr);
|
||||
reg = jit_get_reg(jit_class_gpr|jit_class_nospill);
|
||||
movi(rn(reg), i1);
|
||||
jit_unget_reg(reg);
|
||||
return (bosubr_u(i0, r0, rn(reg)));
|
||||
|
@ -3227,7 +3227,7 @@ _bxsubi(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_word_t i1)
|
|||
jno(i0);
|
||||
return (_jit->pc.w);
|
||||
}
|
||||
reg = jit_get_reg(jit_class_gpr);
|
||||
reg = jit_get_reg(jit_class_gpr|jit_class_nospill);
|
||||
movi(rn(reg), i1);
|
||||
jit_unget_reg(reg);
|
||||
return (bxsubr(i0, r0, rn(reg)));
|
||||
|
@ -3250,7 +3250,7 @@ _bxsubi_u(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_word_t i1)
|
|||
jnc(i0);
|
||||
return (_jit->pc.w);
|
||||
}
|
||||
reg = jit_get_reg(jit_class_gpr);
|
||||
reg = jit_get_reg(jit_class_gpr|jit_class_nospill);
|
||||
movi(rn(reg), i1);
|
||||
jit_unget_reg(reg);
|
||||
return (bxsubr_u(i0, r0, rn(reg)));
|
||||
|
|
|
@ -442,7 +442,8 @@ _sse_b##name##i_##type(jit_state_t *_jit, \
|
|||
jit_float##size##_t *i1) \
|
||||
{ \
|
||||
jit_word_t word; \
|
||||
jit_int32_t reg = jit_get_reg(jit_class_fpr|jit_class_xpr); \
|
||||
jit_int32_t reg = jit_get_reg(jit_class_fpr|jit_class_xpr| \
|
||||
jit_class_nospill); \
|
||||
assert(jit_sse_reg_p(reg)); \
|
||||
sse_movi_##type(rn(reg), i1); \
|
||||
word = sse_b##name##r_##type(i0, r0, rn(reg)); \
|
||||
|
|
|
@ -395,7 +395,8 @@ _x87_b##name##i_##type(jit_state_t *_jit, \
|
|||
jit_float##size##_t *i1) \
|
||||
{ \
|
||||
jit_word_t word; \
|
||||
jit_int32_t reg = jit_get_reg(jit_class_fpr); \
|
||||
jit_int32_t reg = jit_get_reg(jit_class_fpr| \
|
||||
jit_class_nospill); \
|
||||
assert(jit_x87_reg_p(reg)); \
|
||||
x87_movi_##type(rn(reg), i1); \
|
||||
word = x87_b##name##r_##type(i0, r0, rn(reg)); \
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue