diff --git a/ChangeLog b/ChangeLog index 74fe0829f..1b02030ba 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,23 @@ +2014-08-16 Paulo Andrade + + * 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 * lib/jit_alpha.c: Correct wrong bitmask of most argument diff --git a/lib/jit_aarch64-cpu.c b/lib/jit_aarch64-cpu.c index 5cd9af2c5..804fecba1 100644 --- a/lib/jit_aarch64-cpu.c +++ b/lib/jit_aarch64-cpu.c @@ -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); diff --git a/lib/jit_aarch64-fpu.c b/lib/jit_aarch64-fpu.c index 41d6e4408..ad20714ce 100644 --- a/lib/jit_aarch64-fpu.c +++ b/lib/jit_aarch64-fpu.c @@ -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); diff --git a/lib/jit_arm-cpu.c b/lib/jit_arm-cpu.c index 08db89310..1be40b52b 100644 --- a/lib/jit_arm-cpu.c +++ b/lib/jit_arm-cpu.c @@ -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); diff --git a/lib/jit_arm-vfp.c b/lib/jit_arm-vfp.c index c1ee41e77..9b61ddaa0 100644 --- a/lib/jit_arm-vfp.c +++ b/lib/jit_arm-vfp.c @@ -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); \ diff --git a/lib/jit_hppa-cpu.c b/lib/jit_hppa-cpu.c index 2a88f9fc0..30de58cc8 100644 --- a/lib/jit_hppa-cpu.c +++ b/lib/jit_hppa-cpu.c @@ -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); diff --git a/lib/jit_hppa-fpu.c b/lib/jit_hppa-fpu.c index c1861b1fa..d1b6efec0 100644 --- a/lib/jit_hppa-fpu.c +++ b/lib/jit_hppa-fpu.c @@ -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(); diff --git a/lib/jit_ia64-cpu.c b/lib/jit_ia64-cpu.c index ae197ea6b..6774e3622 100644 --- a/lib/jit_ia64-cpu.c +++ b/lib/jit_ia64-cpu.c @@ -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); diff --git a/lib/jit_ia64-fpu.c b/lib/jit_ia64-fpu.c index 71e325a40..5557d7b5d 100644 --- a/lib/jit_ia64-fpu.c +++ b/lib/jit_ia64-fpu.c @@ -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); \ diff --git a/lib/jit_mips-cpu.c b/lib/jit_mips-cpu.c index aa48b64cd..ce7e7edda 100644 --- a/lib/jit_mips-cpu.c +++ b/lib/jit_mips-cpu.c @@ -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; diff --git a/lib/jit_mips-fpu.c b/lib/jit_mips-fpu.c index 0a56d5f4b..bd83103b8 100644 --- a/lib/jit_mips-fpu.c +++ b/lib/jit_mips-fpu.c @@ -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); \ diff --git a/lib/jit_ppc-cpu.c b/lib/jit_ppc-cpu.c index eb1839573..1413875e1 100644 --- a/lib/jit_ppc-cpu.c +++ b/lib/jit_ppc-cpu.c @@ -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); diff --git a/lib/jit_ppc-fpu.c b/lib/jit_ppc-fpu.c index 2bef7e31a..fcfca82eb 100644 --- a/lib/jit_ppc-fpu.c +++ b/lib/jit_ppc-fpu.c @@ -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); \ diff --git a/lib/jit_s390x-cpu.c b/lib/jit_s390x-cpu.c index fdceaee65..afba9db21 100644 --- a/lib/jit_s390x-cpu.c +++ b/lib/jit_s390x-cpu.c @@ -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); diff --git a/lib/jit_s390x-fpu.c b/lib/jit_s390x-fpu.c index d5b681daa..25c2b6ff5 100644 --- a/lib/jit_s390x-fpu.c +++ b/lib/jit_s390x-fpu.c @@ -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); diff --git a/lib/jit_s390x.c b/lib/jit_s390x.c index fb6d4e483..184780bb4 100644 --- a/lib/jit_s390x.c +++ b/lib/jit_s390x.c @@ -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); diff --git a/lib/jit_sparc-cpu.c b/lib/jit_sparc-cpu.c index 2e5f3b46d..c4b5521c2 100644 --- a/lib/jit_sparc-cpu.c +++ b/lib/jit_sparc-cpu.c @@ -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); diff --git a/lib/jit_x86-cpu.c b/lib/jit_x86-cpu.c index e79697aa9..ce67c20b1 100644 --- a/lib/jit_x86-cpu.c +++ b/lib/jit_x86-cpu.c @@ -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))); diff --git a/lib/jit_x86-sse.c b/lib/jit_x86-sse.c index ca5f8a4f6..edac0fcba 100644 --- a/lib/jit_x86-sse.c +++ b/lib/jit_x86-sse.c @@ -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)); \ diff --git a/lib/jit_x86-x87.c b/lib/jit_x86-x87.c index 5f8e014c7..8faa1401c 100644 --- a/lib/jit_x86-x87.c +++ b/lib/jit_x86-x87.c @@ -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)); \