guile-commits
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Guile-commits] 413/437: Correct logic error with jit_live in jit_retr


From: Andy Wingo
Subject: [Guile-commits] 413/437: Correct logic error with jit_live in jit_retr
Date: Mon, 2 Jul 2018 05:15:06 -0400 (EDT)

wingo pushed a commit to branch lightning
in repository guile.

commit 2cf092efe4d8333b4e5d1eecbda246ca7683f3b4
Author: Paulo Andrade <address@hidden>
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 <address@hidden>
+
+       * 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 <address@hidden>
 
        * 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();
 }



reply via email to

[Prev in Thread] Current Thread [Next in Thread]