wingo pushed a commit to branch lightning
in repository guile.
commit 2cf092efe4d8333b4e5d1eecbda246ca7683f3b4
Author: Paulo Andrade <[email protected]>
Date: Thu Feb 22 13:05:04 2018 -0300
Correct logic error with jit_live in jit_retr
* lib/jit_aarch64.c, lib/jit_alpha.c, lib/jit_arm.c,
lib/jit_mips.c, lib/jit_ppc.c, lib/jit_sparc.c, lib/jit_x86.c:
Correct wrong logic in usage of jit_live in jit_retr. The
problem is that if a temporary is required during epilog,
the return register might be allocated, so, jit_live must always
be used.
---
ChangeLog | 9 +++++++++
lib/jit_aarch64.c | 3 +--
lib/jit_alpha.c | 5 ++---
lib/jit_arm.c | 3 +--
lib/jit_mips.c | 3 +--
lib/jit_ppc.c | 3 +--
lib/jit_sparc.c | 3 +--
lib/jit_x86.c | 3 +--
8 files changed, 17 insertions(+), 15 deletions(-)
diff --git a/ChangeLog b/ChangeLog
index ef5af55..2c0a4ae 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,12 @@
+2018-02-22 Paulo Andrade <[email protected]>
+
+ * lib/jit_aarch64.c, lib/jit_alpha.c, lib/jit_arm.c,
+ lib/jit_mips.c, lib/jit_ppc.c, lib/jit_sparc.c, lib/jit_x86.c:
+ Correct wrong logic in usage of jit_live in jit_retr. The
+ problem is that if a temporary is required during epilog,
+ the return register might be allocated, so, jit_live must always
+ be used.
+
2018-01-31 Paulo Andrade <[email protected]>
* lib/lightning.c: Avoid deep recursions when computing live
diff --git a/lib/jit_aarch64.c b/lib/jit_aarch64.c
index 6770f31..c1fb11d 100644
--- a/lib/jit_aarch64.c
+++ b/lib/jit_aarch64.c
@@ -263,8 +263,7 @@ _jit_retr(jit_state_t *_jit, jit_int32_t u)
jit_inc_synth_w(retr, u);
if (JIT_RET != u)
jit_movr(JIT_RET, u);
- else
- jit_live(JIT_RET);
+ jit_live(JIT_RET);
jit_ret();
jit_dec_synth();
}
diff --git a/lib/jit_alpha.c b/lib/jit_alpha.c
index 9d1d41e..90f8556 100644
--- a/lib/jit_alpha.c
+++ b/lib/jit_alpha.c
@@ -251,8 +251,7 @@ _jit_retr(jit_state_t *_jit, jit_int32_t u)
jit_inc_synth_w(retr, u);
if (JIT_RET != u)
jit_movr(JIT_RET, u);
- else
- jit_live(JIT_RET);
+ jit_live(JIT_RET);
jit_ret();
jit_dec_synth();
}
@@ -329,7 +328,7 @@ _jit_arg_register_p(jit_state_t *_jit, jit_node_t *u)
void
_jit_ellipsis(jit_state_t *_jit)
{
- jit_inc_synth(jit_code_ellipsis);
+ jit_inc_synth(ellipsis);
if (_jitc->prepare) {
jit_link_prepare();
assert(!(_jitc->function->call.call & jit_call_varargs));
diff --git a/lib/jit_arm.c b/lib/jit_arm.c
index 9230534..6e73b1d 100644
--- a/lib/jit_arm.c
+++ b/lib/jit_arm.c
@@ -331,8 +331,7 @@ _jit_retr(jit_state_t *_jit, jit_int32_t u)
jit_inc_synth_w(retr, u);
if (JIT_RET != u)
jit_movr(JIT_RET, u);
- else
- jit_live(JIT_RET);
+ jit_live(JIT_RET);
jit_ret();
jit_dec_synth();
}
diff --git a/lib/jit_mips.c b/lib/jit_mips.c
index 3e1658d..53fa22e 100644
--- a/lib/jit_mips.c
+++ b/lib/jit_mips.c
@@ -264,8 +264,7 @@ _jit_retr(jit_state_t *_jit, jit_int32_t u)
jit_inc_synth_w(retr, u);
if (JIT_RET != u)
jit_movr(JIT_RET, u);
- else
- jit_live(JIT_RET);
+ jit_live(JIT_RET);
jit_ret();
jit_dec_synth();
}
diff --git a/lib/jit_ppc.c b/lib/jit_ppc.c
index 52a37d3..2c8a814 100644
--- a/lib/jit_ppc.c
+++ b/lib/jit_ppc.c
@@ -246,8 +246,7 @@ _jit_retr(jit_state_t *_jit, jit_int32_t u)
jit_inc_synth_w(retr, u);
if (JIT_RET != u)
jit_movr(JIT_RET, u);
- else
- jit_live(JIT_RET);
+ jit_live(JIT_RET);
jit_ret();
jit_dec_synth();
}
diff --git a/lib/jit_sparc.c b/lib/jit_sparc.c
index 25e4caa..2df67e4 100644
--- a/lib/jit_sparc.c
+++ b/lib/jit_sparc.c
@@ -205,8 +205,7 @@ _jit_retr(jit_state_t *_jit, jit_int32_t u)
jit_inc_synth_w(retr, u);
if (JIT_RET != u)
jit_movr(JIT_RET, u);
- else
- jit_live(JIT_RET);
+ jit_live(JIT_RET);
jit_ret();
jit_dec_synth();
}
diff --git a/lib/jit_x86.c b/lib/jit_x86.c
index 7ec621a..0bbce1a 100644
--- a/lib/jit_x86.c
+++ b/lib/jit_x86.c
@@ -507,8 +507,7 @@ _jit_retr(jit_state_t *_jit, jit_int32_t u)
if (JIT_RET != u)
jit_movr(JIT_RET, u);
/* explicitly tell it is live */
- else
- jit_live(JIT_RET);
+ jit_live(JIT_RET);
jit_ret();
jit_dec_synth();
}