[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Guile-commits] 300/437: Add consistency check on temporaries during a j
From: |
Andy Wingo |
Subject: |
[Guile-commits] 300/437: Add consistency check on temporaries during a jump |
Date: |
Mon, 2 Jul 2018 05:14:40 -0400 (EDT) |
wingo pushed a commit to branch lightning
in repository guile.
commit b58960638da7480a469fbcd4f239e57e8d1733c5
Author: pcpa <address@hidden>
Date: Sat Aug 16 20:31:55 2014 -0300
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.
---
ChangeLog | 20 ++++++++
lib/jit_aarch64-cpu.c | 4 +-
lib/jit_aarch64-fpu.c | 10 ++--
lib/jit_arm-cpu.c | 2 +-
lib/jit_arm-vfp.c | 6 ++-
lib/jit_hppa-cpu.c | 14 +++---
lib/jit_hppa-fpu.c | 4 +-
lib/jit_ia64-cpu.c | 36 ++++++-------
lib/jit_ia64-fpu.c | 3 +-
lib/jit_mips-cpu.c | 136 +++++++++++++++++++++++++-------------------------
lib/jit_mips-fpu.c | 3 +-
lib/jit_ppc-cpu.c | 24 ++++-----
lib/jit_ppc-fpu.c | 3 +-
lib/jit_s390x-cpu.c | 68 ++++++++++++-------------
lib/jit_s390x-fpu.c | 44 ++++++++--------
lib/jit_s390x.c | 8 +--
lib/jit_sparc-cpu.c | 6 +--
lib/jit_x86-cpu.c | 16 +++---
lib/jit_x86-sse.c | 3 +-
lib/jit_x86-x87.c | 3 +-
20 files changed, 221 insertions(+), 192 deletions(-)
diff --git a/ChangeLog b/ChangeLog
index 74fe082..1b02030 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,25 @@
2014-08-16 Paulo Andrade <address@hidden>
+ * 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 <address@hidden>
+
* lib/jit_alpha.c: Correct wrong bitmask of most argument
float register arguments, that were being set as callee
save instead of argument registers class.
diff --git a/lib/jit_aarch64-cpu.c b/lib/jit_aarch64-cpu.c
index 5cd9af2..804fecb 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 41d6e44..ad20714 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 08db893..1be40b5 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 c1ee41e..9b61dda 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 2a88f9f..30de58c 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 c1861b1..d1b6efe 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 ae197ea..6774e36 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 71e325a..5557d7b 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 aa48b64..ce7e7ed 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 0a56d5f..bd83103 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 eb18395..1413875 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 2bef7e3..fcfca82 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 fdceaee..afba9db 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 d5b681d..25c2b6f 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 fb6d4e4..184780b 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 2e5f3b4..c4b5521 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 e79697a..ce67c20 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 ca5f8a4..edac0fc 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 5f8e014..8faa140 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)); \
- [Guile-commits] 392/437: Bump library major., (continued)
- [Guile-commits] 392/437: Bump library major., Andy Wingo, 2018/07/02
- [Guile-commits] 398/437: ia64: Pass all tests for variadic jit functions, Andy Wingo, 2018/07/02
- [Guile-commits] 397/437: Implement new synthesized IR codes sequences, Andy Wingo, 2018/07/02
- [Guile-commits] 410/437: GNU lightning 2.1.2 release, Andy Wingo, 2018/07/02
- [Guile-commits] 270/437: x86: Use aligned offset for x87 to/from sse move., Andy Wingo, 2018/07/02
- [Guile-commits] 302/437: Add info menu entry for lightning, Andy Wingo, 2018/07/02
- [Guile-commits] 214/437: Remove remaining ia64 port debug code., Andy Wingo, 2018/07/02
- [Guile-commits] 331/437: mips: Do not make t9 available as a generic register, Andy Wingo, 2018/07/02
- [Guile-commits] 287/437: ARM: Do not leave early init_jit if /proc is not mounted., Andy Wingo, 2018/07/02
- [Guile-commits] 405/437: Add a second pass to compute live register ranges, Andy Wingo, 2018/07/02
- [Guile-commits] 300/437: Add consistency check on temporaries during a jump,
Andy Wingo <=
- [Guile-commits] 276/437: Rewrite jit_regset_scan1 for easier optimization., Andy Wingo, 2018/07/02
- [Guile-commits] 268/437: Sync after regenerating version.texi., Andy Wingo, 2018/07/02
- [Guile-commits] 277/437: x86_64: Correct wrong inline assembly in jit_get_cpu, Andy Wingo, 2018/07/02
- [Guile-commits] 360/437: Correct wrong check in simplify_stxi., Andy Wingo, 2018/07/02
- [Guile-commits] 389/437: alpha: Save correct offset if loading a vararg double., Andy Wingo, 2018/07/02
- [Guile-commits] 380/437: ppc: Add initial jit_va_ calls to ppc, Andy Wingo, 2018/07/02
- [Guile-commits] 239/437: Avoid possible problem if built with gcc 4.8 or newer., Andy Wingo, 2018/07/02
- [Guile-commits] 347/437: S390: Add support for 32 bit., Andy Wingo, 2018/07/02
- [Guile-commits] 428/437: Further lightning integration work, Andy Wingo, 2018/07/02
- [Guile-commits] 420/437: Strip "get-jit-size" feature from lightning., Andy Wingo, 2018/07/02